Commit a89ff72a36d5dd980fdd85b46332caeb75a2cd13

Authored by puhui999
1 parent 69822433

feat:【INFRA 基础设施】vben5-antd-general 新增 general 标准模式批量删除

yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/general/api/api.ts.vm
@@ -5,14 +5,30 @@ import { requestClient } from '#/api/request'; @@ -5,14 +5,30 @@ import { requestClient } from '#/api/request';
5 #set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") 5 #set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}")
6 6
7 export namespace ${simpleClassName}Api { 7 export namespace ${simpleClassName}Api {
8 -## 特殊:主子表专属逻辑  
9 -#foreach ($subTable in $subTables)  
10 - #set ($index = $foreach.count - 1)  
11 - #set ($subSimpleClassName = $subSimpleClassNames.get($index))  
12 - #set ($subColumns = $subColumnsList.get($index))##当前字段数组  
13 - /** ${subTable.classComment}信息 */  
14 - export interface ${subSimpleClassName} {  
15 - #foreach ($column in $subColumns) 8 + ## 特殊:主子表专属逻辑
  9 + #foreach ($subTable in $subTables)
  10 + #set ($index = $foreach.count - 1)
  11 + #set ($subSimpleClassName = $subSimpleClassNames.get($index))
  12 + #set ($subColumns = $subColumnsList.get($index))##当前字段数组
  13 + /** ${subTable.classComment}信息 */
  14 + export interface ${subSimpleClassName} {
  15 + #foreach ($column in $subColumns)
  16 + #if ($column.createOperation || $column.updateOperation)
  17 + #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "short" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal")
  18 + ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: number; // ${column.columnComment}
  19 + #elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdate" || ${column.javaType.toLowerCase()} == "localdatetime")
  20 + ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: string | Dayjs; // ${column.columnComment}
  21 + #else
  22 + ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: ${column.javaType.toLowerCase()}; // ${column.columnComment}
  23 + #end
  24 + #end
  25 + #end
  26 + }
  27 +
  28 + #end
  29 + /** ${table.classComment}信息 */
  30 + export interface ${simpleClassName} {
  31 + #foreach ($column in $columns)
16 #if ($column.createOperation || $column.updateOperation) 32 #if ($column.createOperation || $column.updateOperation)
17 #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "short" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal") 33 #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "short" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal")
18 ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: number; // ${column.columnComment} 34 ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: number; // ${column.columnComment}
@@ -23,37 +39,21 @@ export namespace ${simpleClassName}Api { @@ -23,37 +39,21 @@ export namespace ${simpleClassName}Api {
23 #end 39 #end
24 #end 40 #end
25 #end 41 #end
26 - }  
27 -  
28 -#end  
29 - /** ${table.classComment}信息 */  
30 - export interface ${simpleClassName} {  
31 -#foreach ($column in $columns)  
32 -#if ($column.createOperation || $column.updateOperation)  
33 -#if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "short" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal")  
34 - ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: number; // ${column.columnComment}  
35 -#elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdate" || ${column.javaType.toLowerCase()} == "localdatetime")  
36 - ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: string | Dayjs; // ${column.columnComment}  
37 -#else  
38 - ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: ${column.javaType.toLowerCase()}; // ${column.columnComment}  
39 -#end  
40 -#end  
41 -#end  
42 -#if ( $table.templateType == 2 )  
43 - children?: ${simpleClassName}[];  
44 -#end  
45 -## 特殊:主子表专属逻辑  
46 -#if ( $table.templateType == 10 || $table.templateType == 12 )  
47 - #foreach ($subTable in $subTables)  
48 - #set ($index = $foreach.count - 1)  
49 - #set ($subSimpleClassName = $subSimpleClassNames.get($index))  
50 - #if ( $subTable.subJoinMany )  
51 - ${subSimpleClassName.toLowerCase()}s?: ${subSimpleClassName}[]  
52 - #else  
53 - ${subSimpleClassName.toLowerCase()}?: ${subSimpleClassName} 42 + #if ( $table.templateType == 2 )
  43 + children?: ${simpleClassName}[];
  44 + #end
  45 + ## 特殊:主子表专属逻辑
  46 + #if ( $table.templateType == 10 || $table.templateType == 12 )
  47 + #foreach ($subTable in $subTables)
  48 + #set ($index = $foreach.count - 1)
  49 + #set ($subSimpleClassName = $subSimpleClassNames.get($index))
  50 + #if ( $subTable.subJoinMany )
  51 + ${subSimpleClassName.toLowerCase()}s?: ${subSimpleClassName}[]
  52 + #else
  53 + ${subSimpleClassName.toLowerCase()}?: ${subSimpleClassName}
  54 + #end
  55 + #end
54 #end 56 #end
55 - #end  
56 -#end  
57 } 57 }
58 } 58 }
59 59
@@ -89,6 +89,13 @@ export function delete${simpleClassName}(id: number) { @@ -89,6 +89,13 @@ export function delete${simpleClassName}(id: number) {
89 return requestClient.delete(`${baseURL}/delete?id=${id}`); 89 return requestClient.delete(`${baseURL}/delete?id=${id}`);
90 } 90 }
91 91
  92 +#if ( $table.templateType != 2 && $deleteBatchEnable)
  93 +/** 批量删除${table.classComment} */
  94 +export function delete${simpleClassName}ListByIds(ids: number[]) {
  95 + return requestClient.delete(`${baseURL}/delete-list?ids=${ids.join(',')}`)
  96 +}
  97 +#end
  98 +
92 /** 导出${table.classComment} */ 99 /** 导出${table.classComment} */
93 export function export${simpleClassName}(params: any) { 100 export function export${simpleClassName}(params: any) {
94 return requestClient.download('${baseURL}/export-excel', params); 101 return requestClient.download('${baseURL}/export-excel', params);
@@ -96,58 +103,65 @@ export function export${simpleClassName}(params: any) { @@ -96,58 +103,65 @@ export function export${simpleClassName}(params: any) {
96 103
97 ## 特殊:主子表专属逻辑 104 ## 特殊:主子表专属逻辑
98 #foreach ($subTable in $subTables) 105 #foreach ($subTable in $subTables)
99 -#set ($index = $foreach.count - 1)  
100 -#set ($subSimpleClassName = $subSimpleClassNames.get($index))  
101 -#set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段  
102 -#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段  
103 -#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写  
104 -#set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index))  
105 -#set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index))  
106 -#set ($subClassNameVar = $subClassNameVars.get($index)) 106 + #set ($index = $foreach.count - 1)
  107 + #set ($subSimpleClassName = $subSimpleClassNames.get($index))
  108 + #set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段
  109 + #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段
  110 + #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
  111 + #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index))
  112 + #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index))
  113 + #set ($subClassNameVar = $subClassNameVars.get($index))
107 114
108 // ==================== 子表($subTable.classComment) ==================== 115 // ==================== 子表($subTable.classComment) ====================
109 116
110 -## 情况一:MASTER_ERP 时,需要分查询页子表  
111 -#if ( $table.templateType == 11 )  
112 -/** 获得${subTable.classComment}分页 */  
113 -export function get${subSimpleClassName}Page(params: PageParam) {  
114 - return requestClient.get<PageResult<${simpleClassName}Api.${subSimpleClassName}>>(`${baseURL}/${subSimpleClassName_strikeCase}/page`, { params });  
115 -}  
116 -## 情况二:非 MASTER_ERP 时,需要列表查询子表  
117 -#else  
118 - #if ( $subTable.subJoinMany )  
119 -/** 获得${subTable.classComment}列表 */  
120 -export function get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaField}: number) {  
121 - return requestClient.get<${simpleClassName}Api.${subSimpleClassName}[]>(`${baseURL}/${subSimpleClassName_strikeCase}/list-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=${${subJoinColumn.javaField}}`);  
122 -} 117 + ## 情况一:MASTER_ERP 时,需要分查询页子表
  118 + #if ( $table.templateType == 11 )
  119 + /** 获得${subTable.classComment}分页 */
  120 + export function get${subSimpleClassName}Page(params: PageParam) {
  121 + return requestClient.get<PageResult<${simpleClassName}Api.${subSimpleClassName}>>(`${baseURL}/${subSimpleClassName_strikeCase}/page`, { params });
  122 + }
  123 + ## 情况二:非 MASTER_ERP 时,需要列表查询子表
123 #else 124 #else
124 -/** 获得${subTable.classComment} */  
125 -export function get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaField}: number) {  
126 - return requestClient.get<${simpleClassName}Api.${subSimpleClassName}>(`${baseURL}/${subSimpleClassName_strikeCase}/get-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=${${subJoinColumn.javaField}}`);  
127 -} 125 + #if ( $subTable.subJoinMany )
  126 + /** 获得${subTable.classComment}列表 */
  127 + export function get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaField}: number) {
  128 + return requestClient.get<${simpleClassName}Api.${subSimpleClassName}[]>(`${baseURL}/${subSimpleClassName_strikeCase}/list-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=${${subJoinColumn.javaField}}`);
  129 + }
  130 + #else
  131 + /** 获得${subTable.classComment} */
  132 + export function get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaField}: number) {
  133 + return requestClient.get<${simpleClassName}Api.${subSimpleClassName}>(`${baseURL}/${subSimpleClassName_strikeCase}/get-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=${${subJoinColumn.javaField}}`);
  134 + }
  135 + #end
128 #end 136 #end
129 -#end  
130 -## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作  
131 -#if ( $table.templateType == 11 )  
132 -/** 新增${subTable.classComment} */  
133 -export function create${subSimpleClassName}(data: ${simpleClassName}Api.${subSimpleClassName}) {  
134 - return requestClient.post(`${baseURL}/${subSimpleClassName_strikeCase}/create`, data);  
135 -} 137 + ## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作
  138 + #if ( $table.templateType == 11 )
  139 + /** 新增${subTable.classComment} */
  140 + export function create${subSimpleClassName}(data: ${simpleClassName}Api.${subSimpleClassName}) {
  141 + return requestClient.post(`${baseURL}/${subSimpleClassName_strikeCase}/create`, data);
  142 + }
136 143
137 -/** 修改${subTable.classComment} */  
138 -export function update${subSimpleClassName}(data: ${simpleClassName}Api.${subSimpleClassName}) {  
139 - return requestClient.put(`${baseURL}/${subSimpleClassName_strikeCase}/update`, data);  
140 -} 144 + /** 修改${subTable.classComment} */
  145 + export function update${subSimpleClassName}(data: ${simpleClassName}Api.${subSimpleClassName}) {
  146 + return requestClient.put(`${baseURL}/${subSimpleClassName_strikeCase}/update`, data);
  147 + }
141 148
142 -/** 删除${subTable.classComment} */  
143 -export function delete${subSimpleClassName}(id: number) {  
144 - return requestClient.delete(`${baseURL}/${subSimpleClassName_strikeCase}/delete?id=${id}`);  
145 -} 149 + /** 删除${subTable.classComment} */
  150 + export function delete${subSimpleClassName}(id: number) {
  151 + return requestClient.delete(`${baseURL}/${subSimpleClassName_strikeCase}/delete?id=${id}`);
  152 + }
146 153
147 -/** 获得${subTable.classComment} */  
148 -export function get${subSimpleClassName}(id: number) {  
149 - return requestClient.get<${simpleClassName}Api.${subSimpleClassName}>(`${baseURL}/${subSimpleClassName_strikeCase}/get?id=${id}`);  
150 -}  
151 -#end 154 + #if ($deleteBatchEnable)
  155 + /** 批量删除${subTable.classComment} */
  156 + export function delete${subSimpleClassName}ListByIds(ids: number[]) {
  157 + return requestClient.delete(`${baseURL}/${subSimpleClassName_strikeCase}/delete-list?ids=${ids.join(',')}`)
  158 + }
  159 + #end
  160 +
  161 + /** 获得${subTable.classComment} */
  162 + export function get${subSimpleClassName}(id: number) {
  163 + return requestClient.get<${simpleClassName}Api.${subSimpleClassName}>(`${baseURL}/${subSimpleClassName_strikeCase}/get?id=${id}`);
  164 + }
  165 + #end
152 #end 166 #end
153 167
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/general/views/index.vue.vm
@@ -8,7 +8,7 @@ import { Button, message,Tabs,Pagination,Form,RangePicker,DatePicker,Select,Inpu @@ -8,7 +8,7 @@ import { Button, message,Tabs,Pagination,Form,RangePicker,DatePicker,Select,Inpu
8 import { DictTag } from '#/components/dict-tag'; 8 import { DictTag } from '#/components/dict-tag';
9 import { DICT_TYPE, getDictOptions, getRangePickerDefaultProps } from '#/utils'; 9 import { DICT_TYPE, getDictOptions, getRangePickerDefaultProps } from '#/utils';
10 import ${simpleClassName}Form from './modules/form.vue'; 10 import ${simpleClassName}Form from './modules/form.vue';
11 -import { Download, Plus, RefreshCw, Search } from '@vben/icons'; 11 +import { Download, Plus, RefreshCw, Search, Trash2 } from '@vben/icons';
12 import { ContentWrap } from '#/components/content-wrap'; 12 import { ContentWrap } from '#/components/content-wrap';
13 import { VxeColumn, VxeTable } from '#/adapter/vxe-table'; 13 import { VxeColumn, VxeTable } from '#/adapter/vxe-table';
14 import { TableToolbar } from '#/components/table-toolbar'; 14 import { TableToolbar } from '#/components/table-toolbar';
@@ -29,7 +29,8 @@ import { $t } from &#39;#/locales&#39;; @@ -29,7 +29,8 @@ import { $t } from &#39;#/locales&#39;;
29 import { handleTree,isEmpty } from '@vben/utils' 29 import { handleTree,isEmpty } from '@vben/utils'
30 import { get${simpleClassName}List, delete${simpleClassName}, export${simpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; 30 import { get${simpleClassName}List, delete${simpleClassName}, export${simpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}';
31 #else## 标准表接口 31 #else## 标准表接口
32 -import { get${simpleClassName}Page, delete${simpleClassName}, export${simpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; 32 +import { isEmpty } from '@vben/utils';
  33 +import { get${simpleClassName}Page, delete${simpleClassName},#if ($deleteBatchEnable) delete${simpleClassName}ListByIds,#end export${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}';
33 #end 34 #end
34 import { downloadFileFromBlobPart } from '@vben/utils'; 35 import { downloadFileFromBlobPart } from '@vben/utils';
35 36
@@ -152,11 +153,38 @@ async function onDelete(row: ${simpleClassName}Api.${simpleClassName}) { @@ -152,11 +153,38 @@ async function onDelete(row: ${simpleClassName}Api.${simpleClassName}) {
152 key: 'action_process_msg', 153 key: 'action_process_msg',
153 }); 154 });
154 await getList(); 155 await getList();
155 - } catch { 156 + } finally {
  157 + hideLoading();
  158 + }
  159 +}
  160 +
  161 +#if ($table.templateType != 2 && $deleteBatchEnable)
  162 +/** 批量删除${table.classComment} */
  163 +async function onDeleteBatch() {
  164 + const hideLoading = message.loading({
  165 + content: $t('ui.actionMessage.deleting'),
  166 + duration: 0,
  167 + key: 'action_process_msg',
  168 + });
  169 + try {
  170 + await delete${simpleClassName}ListByIds(deleteIds.value);
  171 + message.success( $t('ui.actionMessage.deleteSuccess') );
  172 + await getList();
  173 + } finally {
156 hideLoading(); 174 hideLoading();
157 } 175 }
158 } 176 }
159 177
  178 +const deleteIds = ref<number[]>([]) // 待删除${table.classComment} ID
  179 +function setDeleteIds({
  180 + records,
  181 +}: {
  182 + records: ${simpleClassName}Api.${simpleClassName}[];
  183 +}) {
  184 + deleteIds.value = records.map((item) => item.id);
  185 +}
  186 +#end
  187 +
160 /** 导出表格 */ 188 /** 导出表格 */
161 async function onExport() { 189 async function onExport() {
162 try { 190 try {
@@ -302,6 +330,19 @@ onMounted(() =&gt; { @@ -302,6 +330,19 @@ onMounted(() =&gt; {
302 > 330 >
303 {{ $t('ui.actionTitle.export') }} 331 {{ $t('ui.actionTitle.export') }}
304 </Button> 332 </Button>
  333 + #if ($table.templateType != 2 && $deleteBatchEnable)
  334 + <Button
  335 + :icon="h(Trash2)"
  336 + type="primary"
  337 + danger
  338 + class="ml-2"
  339 + :disabled="isEmpty(deleteIds)"
  340 + @click="onDeleteBatch"
  341 + v-access:code="['${table.moduleName}:${simpleClassName_strikeCase}:delete']"
  342 + >
  343 + 批量删除
  344 + </Button>
  345 + #end
305 </TableToolbar> 346 </TableToolbar>
306 </template> 347 </template>
307 <vxe-table 348 <vxe-table
@@ -326,7 +367,14 @@ onMounted(() =&gt; { @@ -326,7 +367,14 @@ onMounted(() =&gt; {
326 #end 367 #end
327 show-overflow 368 show-overflow
328 :loading="loading" 369 :loading="loading"
  370 +#if ($table.templateType != 2 && $deleteBatchEnable)
  371 + @checkboxAll="setDeleteIds"
  372 + @checkboxChange="setDeleteIds"
  373 +#end
329 > 374 >
  375 +#if ($table.templateType != 2 && $deleteBatchEnable)
  376 + <vxe-column type="checkbox" width="40"></vxe-column>
  377 +#end
330 ## 特殊:主子表专属逻辑 378 ## 特殊:主子表专属逻辑
331 #if ( $table.templateType == 12 && $subTables && $subTables.size() > 0 ) 379 #if ( $table.templateType == 12 && $subTables && $subTables.size() > 0 )
332 <!-- 子表的列表 --> 380 <!-- 子表的列表 -->
@@ -421,7 +469,6 @@ onMounted(() =&gt; { @@ -421,7 +469,6 @@ onMounted(() =&gt; {
421 </div> 469 </div>
422 #end 470 #end
423 </ContentWrap> 471 </ContentWrap>
424 -  
425 #if ($table.templateType == 11) ## erp情况 472 #if ($table.templateType == 11) ## erp情况
426 <ContentWrap> 473 <ContentWrap>
427 <!-- 子表的表单 --> 474 <!-- 子表的表单 -->
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/general/views/modules/list_sub_erp.vue.vm
@@ -10,7 +10,7 @@ @@ -10,7 +10,7 @@
10 import type { VxeTableInstance } from '#/adapter/vxe-table'; 10 import type { VxeTableInstance } from '#/adapter/vxe-table';
11 11
12 import { DictTag } from '#/components/dict-tag'; 12 import { DictTag } from '#/components/dict-tag';
13 - import { DICT_TYPE, getDictOptions } from '#/utils'; 13 + import { DICT_TYPE, getDictOptions, getRangePickerDefaultProps } from '#/utils';
14 import { VxeColumn, VxeTable } from '#/adapter/vxe-table'; 14 import { VxeColumn, VxeTable } from '#/adapter/vxe-table';
15 import { reactive,ref, h, nextTick,watch,onMounted } from 'vue'; 15 import { reactive,ref, h, nextTick,watch,onMounted } from 'vue';
16 import { cloneDeep, formatDateTime } from '@vben/utils'; 16 import { cloneDeep, formatDateTime } from '@vben/utils';
@@ -22,15 +22,15 @@ @@ -22,15 +22,15 @@
22 import { Tinymce as RichTextarea } from '#/components/tinymce'; 22 import { Tinymce as RichTextarea } from '#/components/tinymce';
23 import { ImageUpload, FileUpload } from "#/components/upload"; 23 import { ImageUpload, FileUpload } from "#/components/upload";
24 import { message,Button, Tabs,Pagination, Form, Input, Textarea, Select, RadioGroup, Radio, CheckboxGroup, Checkbox,RangePicker, DatePicker, TreeSelect } from 'ant-design-vue'; 24 import { message,Button, Tabs,Pagination, Form, Input, Textarea, Select, RadioGroup, Radio, CheckboxGroup, Checkbox,RangePicker, DatePicker, TreeSelect } from 'ant-design-vue';
25 - import { DICT_TYPE, getDictOptions, getRangePickerDefaultProps } from '#/utils';  
26 - import { Plus } from '@vben/icons'; 25 + import { Plus, Trash2 } from '@vben/icons';
27 import { $t } from '#/locales'; 26 import { $t } from '#/locales';
28 import { TableToolbar } from '#/components/table-toolbar'; 27 import { TableToolbar } from '#/components/table-toolbar';
29 import { useTableToolbar } from '#/hooks'; 28 import { useTableToolbar } from '#/hooks';
30 #end 29 #end
31 30
32 #if ($table.templateType == 11) ## erp 31 #if ($table.templateType == 11) ## erp
33 - import { delete${subSimpleClassName}, get${subSimpleClassName}Page } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; 32 + import { delete${subSimpleClassName},#if ($deleteBatchEnable) delete${subSimpleClassName}ListByIds,#end get${subSimpleClassName}Page } from '#/api/${table.moduleName}/${table.businessName}';
  33 + import { isEmpty } from '@vben/utils';
34 #else 34 #else
35 #if ($subTable.subJoinMany) ## 一对多 35 #if ($subTable.subJoinMany) ## 一对多
36 import { get${subSimpleClassName}ListBy${SubJoinColumnName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; 36 import { get${subSimpleClassName}ListBy${SubJoinColumnName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}';
@@ -76,11 +76,38 @@ async function onDelete(row: ${simpleClassName}Api.${subSimpleClassName}) { @@ -76,11 +76,38 @@ async function onDelete(row: ${simpleClassName}Api.${subSimpleClassName}) {
76 content: $t('ui.actionMessage.deleteSuccess', [row.id]), 76 content: $t('ui.actionMessage.deleteSuccess', [row.id]),
77 key: 'action_process_msg', 77 key: 'action_process_msg',
78 }); 78 });
79 - getList();  
80 - } catch { 79 + await getList();
  80 + } finally {
81 hideLoading(); 81 hideLoading();
82 } 82 }
83 } 83 }
  84 +
  85 +#if ($deleteBatchEnable)
  86 +/** 批量删除${subTable.classComment} */
  87 +async function onDeleteBatch() {
  88 + const hideLoading = message.loading({
  89 + content: $t('ui.actionMessage.deleting'),
  90 + duration: 0,
  91 + key: 'action_process_msg',
  92 + });
  93 + try {
  94 + await delete${subSimpleClassName}ListByIds(deleteIds.value);
  95 + message.success( $t('ui.actionMessage.deleteSuccess') );
  96 + await getList();
  97 + } finally {
  98 + hideLoading();
  99 + }
  100 +}
  101 +
  102 +const deleteIds = ref<number[]>([]) // 待删除${subTable.classComment} ID
  103 +function setDeleteIds({
  104 + records,
  105 +}: {
  106 + records: ${simpleClassName}Api.${subSimpleClassName}[];
  107 +}) {
  108 + deleteIds.value = records.map((item) => item.id);
  109 +}
  110 +#end
84 #end 111 #end
85 112
86 const loading = ref(true) // 列表的加载中 113 const loading = ref(true) // 列表的加载中
@@ -277,6 +304,19 @@ onMounted(() =&gt; { @@ -277,6 +304,19 @@ onMounted(() =&gt; {
277 > 304 >
278 {{ $t('ui.actionTitle.create', ['${table.classComment}']) }} 305 {{ $t('ui.actionTitle.create', ['${table.classComment}']) }}
279 </Button> 306 </Button>
  307 + #if ($deleteBatchEnable)
  308 + <Button
  309 + :icon="h(Trash2)"
  310 + type="primary"
  311 + danger
  312 + class="ml-2"
  313 + :disabled="isEmpty(deleteIds)"
  314 + @click="onDeleteBatch"
  315 + v-access:code="['${table.moduleName}:${simpleClassName_strikeCase}:delete']"
  316 + >
  317 + 批量删除
  318 + </Button>
  319 + #end
280 </TableToolbar> 320 </TableToolbar>
281 </template> 321 </template>
282 <vxe-table 322 <vxe-table
@@ -284,7 +324,14 @@ onMounted(() =&gt; { @@ -284,7 +324,14 @@ onMounted(() =&gt; {
284 :data="list" 324 :data="list"
285 show-overflow 325 show-overflow
286 :loading="loading" 326 :loading="loading"
  327 + #if ($deleteBatchEnable)
  328 + @checkboxAll="setDeleteIds"
  329 + @checkboxChange="setDeleteIds"
  330 + #end
287 > 331 >
  332 + #if ($deleteBatchEnable)
  333 + <vxe-column type="checkbox" width="40"></vxe-column>
  334 + #end
288 #foreach($column in $subColumns) 335 #foreach($column in $subColumns)
289 #if ($column.listOperationResult) 336 #if ($column.listOperationResult)
290 #set ($dictType=$column.dictType) 337 #set ($dictType=$column.dictType)