Commit 8193e9801cec249d57bcba26203cee6f716f8b97

Authored by YunaiV
1 parent f29abe85

reactor:【infra 基础设施】优化 vben5 + antd 的 schema 模版

yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/api/api.ts.vm
1   -import type { PageParam, PageResult } from '@vben/request';
2   -import type { Dayjs } from 'dayjs';
3   -
4   -import { requestClient } from '#/api/request';
5   -#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}")
6   -
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)
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)
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}
54   - #end
55   - #end
56   -#end
57   - }
58   -}
59   -
60   -#if ( $table.templateType != 2 )
61   -/** 查询${table.classComment}分页 */
62   -export function get${simpleClassName}Page(params: PageParam) {
63   - return requestClient.get<PageResult<${simpleClassName}Api.${simpleClassName}>>('${baseURL}/page', { params });
64   -}
65   -#else
66   -/** 查询${table.classComment}列表 */
67   -export function get${simpleClassName}List(params: any) {
68   - return requestClient.get<${simpleClassName}Api.${simpleClassName}[]>('${baseURL}/list', { params });
69   -}
70   -#end
71   -
72   -/** 查询${table.classComment}详情 */
73   -export function get${simpleClassName}(id: number) {
74   - return requestClient.get<${simpleClassName}Api.${simpleClassName}>(`${baseURL}/get?id=${id}`);
75   -}
76   -
77   -/** 新增${table.classComment} */
78   -export function create${simpleClassName}(data: ${simpleClassName}Api.${simpleClassName}) {
79   - return requestClient.post('${baseURL}/create', data);
80   -}
81   -
82   -/** 修改${table.classComment} */
83   -export function update${simpleClassName}(data: ${simpleClassName}Api.${simpleClassName}) {
84   - return requestClient.put('${baseURL}/update', data);
85   -}
86   -
87   -/** 删除${table.classComment} */
88   -export function delete${simpleClassName}(id: number) {
89   - return requestClient.delete(`${baseURL}/delete?id=${id}`);
90   -}
91   -
92   -#if ( $table.templateType != 2 && $deleteBatchEnable)
93   -/** 批量删除${table.classComment} */
94   -export function delete${simpleClassName}List(ids: number[]) {
95   - return requestClient.delete(`${baseURL}/delete-list?ids=${ids.join(',')}`)
96   -}
97   -#end
98   -
99   -/** 导出${table.classComment} */
100   -export function export${simpleClassName}(params: any) {
101   - return requestClient.download('${baseURL}/export-excel', { params });
102   -}
103   -
104   -## 特殊:主子表专属逻辑
105   -#foreach ($subTable in $subTables)
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))
114   -
115   -// ==================== 子表($subTable.classComment) ====================
116   -
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 时,需要列表查询子表
124   -#else
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
136   -#end
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   -}
143   -
144   -/** 修改${subTable.classComment} */
145   -export function update${subSimpleClassName}(data: ${simpleClassName}Api.${subSimpleClassName}) {
146   - return requestClient.put(`${baseURL}/${subSimpleClassName_strikeCase}/update`, data);
147   -}
148   -
149   -/** 删除${subTable.classComment} */
150   -export function delete${subSimpleClassName}(id: number) {
151   - return requestClient.delete(`${baseURL}/${subSimpleClassName_strikeCase}/delete?id=${id}`);
152   -}
153   -
154   -#if ($deleteBatchEnable)
155   -/** 批量删除${subTable.classComment} */
156   -export function delete${subSimpleClassName}List(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
166   -#end
167   -
  1 +#parse("codegen/vue3_vben5_ele/schema/api/api.ts.vm")
168 2 \ No newline at end of file
... ...
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/data.ts.vm
  1 +#set ($apiName = "${table.moduleName.substring(0,1).toUpperCase()}${table.moduleName.substring(1)}${simpleClassName}Api")
1 2 import type { VbenFormSchema } from '#/adapter/form';
2 3 import type { VxeTableGridOptions } from '#/adapter/vxe-table';
3   -import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
  4 +import type { ${apiName} } from '#/api/${table.moduleName}/${table.businessName}';
4 5  
5   -import { z } from '#/adapter/form';
6   -import {
7   - DICT_TYPE,
8   - getDictOptions,
9   - getRangePickerDefaultProps,
10   -} from '#/utils';
  6 +import { DICT_TYPE, getDictOptions, getRangePickerDefaultProps } from '#/utils';
11 7 #if(${table.templateType} == 2)## 树表需要导入这些
12 8 import { get${simpleClassName}List } from '#/api/${table.moduleName}/${table.businessName}';
13 9 import { handleTree } from '@vben/utils';
... ... @@ -186,7 +182,7 @@ export function useGridFormSchema(): VbenFormSchema[] {
186 182 }
187 183  
188 184 /** 列表的字段 */
189   -export function useGridColumns(): VxeTableGridOptions<${simpleClassName}Api.${simpleClassName}>['columns'] {
  185 +export function useGridColumns(): VxeTableGridOptions<${apiName}.${simpleClassName}>['columns'] {
190 186 return [
191 187 #if ($table.templateType != 2 && $deleteBatchEnable)
192 188 { type: 'checkbox', width: 40 },
... ... @@ -389,7 +385,7 @@ export function use${subSimpleClassName}GridFormSchema(): VbenFormSchema[] {
389 385 }
390 386  
391 387 /** 列表的字段 */
392   -export function use${subSimpleClassName}GridColumns(): VxeTableGridOptions<${simpleClassName}Api.${subSimpleClassName}>['columns'] {
  388 +export function use${subSimpleClassName}GridColumns(): VxeTableGridOptions<${apiName}.${subSimpleClassName}>['columns'] {
393 389 return [
394 390 #if ($table.templateType != 2 && $deleteBatchEnable)
395 391 { type: 'checkbox', width: 40 },
... ... @@ -426,7 +422,7 @@ export function use${subSimpleClassName}GridColumns(): VxeTableGridOptions&lt;${sim
426 422 #else
427 423 #if ($subTable.subJoinMany) ## 一对多
428 424 /** 新增/修改列表的字段 */
429   - export function use${subSimpleClassName}GridEditColumns(): VxeTableGridOptions<${simpleClassName}Api.${subSimpleClassName}>['columns'] {
  425 + export function use${subSimpleClassName}GridEditColumns(): VxeTableGridOptions<${apiName}.${subSimpleClassName}>['columns'] {
430 426 return [
431 427 #foreach($column in $subColumns)
432 428 #if ($column.createOperation || $column.updateOperation)
... ... @@ -602,4 +598,4 @@ export function use${subSimpleClassName}GridColumns(): VxeTableGridOptions&lt;${sim
602 598 }
603 599 #end
604 600 #end
605 601 -#end
  602 +#end
606 603 \ No newline at end of file
... ...
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/form.vue.vm
  1 +#set ($apiName = "${table.moduleName.substring(0,1).toUpperCase()}${table.moduleName.substring(1)}${simpleClassName}Api")
1 2 <script lang="ts" setup>
2   -import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
  3 +import type { ${apiName} } from '#/api/${table.moduleName}/${table.businessName}';
  4 +
  5 +import { computed, ref } from 'vue';
3 6  
4 7 import { useVbenModal } from '@vben/common-ui';
5   -import { message, Tabs, Checkbox, Input, Textarea, Select,RadioGroup,CheckboxGroup, DatePicker } from 'ant-design-vue';
  8 +
  9 +import { message#if ($table.templateType == 11), Tabs#end } from 'ant-design-vue';
  10 +
  11 +import { useVbenForm } from '#/adapter/form';
  12 +import { create${simpleClassName}, get${simpleClassName}, update${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}';
  13 +import { $t } from '#/locales';
  14 +
  15 +import { useFormSchema } from '../data';
6 16 ## 特殊:主子表专属逻辑
7 17 #if ( $table.templateType == 10 || $table.templateType == 12 )
8 18 #foreach ($subSimpleClassName in $subSimpleClassNames)
... ... @@ -12,21 +22,13 @@ import { message, Tabs, Checkbox, Input, Textarea, Select,RadioGroup,CheckboxGro
12 22 #end
13 23 #end
14 24  
15   -import { computed, ref } from 'vue';
16   -import { $t } from '#/locales';
17   -import { useVbenForm } from '#/adapter/form';
18   -import { get${simpleClassName}, create${simpleClassName}, update${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}';
19   -
20   -import { useFormSchema } from '../data';
21   -
22 25 const emit = defineEmits(['success']);
23   -const formData = ref<${simpleClassName}Api.${simpleClassName}>();
  26 +const formData = ref<${apiName}.${simpleClassName}>();
24 27 const getTitle = computed(() => {
25 28 return formData.value?.id
26 29 ? $t('ui.actionTitle.edit', ['${table.classComment}'])
27 30 : $t('ui.actionTitle.create', ['${table.classComment}']);
28 31 });
29   -
30 32 ## 特殊:主子表专属逻辑
31 33 #if ( $table.templateType == 10 || $table.templateType == 12 )
32 34 #if ( $subTables && $subTables.size() > 0 )
... ... @@ -51,7 +53,7 @@ const [Form, formApi] = useVbenForm({
51 53 },
52 54 layout: 'horizontal',
53 55 schema: useFormSchema(),
54   - showDefaultActions: false
  56 + showDefaultActions: false,
55 57 });
56 58  
57 59 const [Modal, modalApi] = useVbenModal({
... ... @@ -60,8 +62,8 @@ const [Modal, modalApi] = useVbenModal({
60 62 if (!valid) {
61 63 return;
62 64 }
63   - ## 特殊:主子表专属逻辑
64   - #if ( $table.templateType == 10 || $table.templateType == 12 )
  65 +## 特殊:主子表专属逻辑
  66 +#if ( $table.templateType == 10 || $table.templateType == 12 )
65 67 #if ( $subTables && $subTables.size() > 0 )
66 68 // 校验子表单
67 69 #foreach ($subTable in $subTables)
... ... @@ -78,12 +80,12 @@ const [Modal, modalApi] = useVbenModal({
78 80 #end
79 81 #end
80 82 #end
81   - #end
  83 +#end
82 84 modalApi.lock();
83 85 // 提交表单
84   - const data = (await formApi.getValues()) as ${simpleClassName}Api.${simpleClassName};
85   - ## 特殊:主子表专属逻辑
86   - #if ( $table.templateType == 10 || $table.templateType == 12 )
  86 + const data = (await formApi.getValues()) as ${apiName}.${simpleClassName};
  87 +## 特殊:主子表专属逻辑
  88 +#if ( $table.templateType == 10 || $table.templateType == 12 )
87 89 #if ( $subTables && $subTables.size() > 0 )
88 90 // 拼接子表的数据
89 91 #foreach ($subTable in $subTables)
... ... @@ -96,13 +98,13 @@ const [Modal, modalApi] = useVbenModal({
96 98 #end
97 99 #end
98 100 #end
99   - #end
  101 +#end
100 102 try {
101 103 await (formData.value?.id ? update${simpleClassName}(data) : create${simpleClassName}(data));
102 104 // 关闭并提示
103 105 await modalApi.close();
104 106 emit('success');
105   - message.success( $t('ui.actionMessage.operationSuccess') );
  107 + message.success($t('ui.actionMessage.operationSuccess'));
106 108 } finally {
107 109 modalApi.unlock();
108 110 }
... ... @@ -113,21 +115,20 @@ const [Modal, modalApi] = useVbenModal({
113 115 return;
114 116 }
115 117 // 加载数据
116   - let data = modalApi.getData<${simpleClassName}Api.${simpleClassName}>();
117   - if (!data) {
  118 + const data = modalApi.getData<${apiName}.${simpleClassName}>();
  119 + if (!data || !data.id) {
118 120 return;
119 121 }
120   - if (data.id) {
121   - modalApi.lock();
122   - try {
123   - data = await get${simpleClassName}(data.id);
124   - } finally {
125   - modalApi.unlock();
  122 + modalApi.lock();
  123 + try {
  124 + formData.value = await get${simpleClassName}(data.id);
  125 + // 设置到 values
  126 + if (formData.value) {
  127 + await formApi.setValues(formData.value);
126 128 }
  129 + } finally {
  130 + modalApi.unlock();
127 131 }
128   - // 设置到 values
129   - formData.value = data;
130   - await formApi.setValues(formData.value);
131 132 },
132 133 });
133 134 </script>
... ... @@ -135,8 +136,8 @@ const [Modal, modalApi] = useVbenModal({
135 136 <template>
136 137 <Modal :title="getTitle">
137 138 <Form class="mx-4" />
138   - ## 特殊:主子表专属逻辑
139   - #if ( $table.templateType == 10 || $table.templateType == 12 )
  139 +## 特殊:主子表专属逻辑
  140 +#if ( $table.templateType == 10 || $table.templateType == 12 )
140 141 <!-- 子表的表单 -->
141 142 <Tabs v-model:active-key="subTabsName">
142 143 #foreach ($subTable in $subTables)
... ... @@ -149,6 +150,6 @@ const [Modal, modalApi] = useVbenModal({
149 150 </Tabs.TabPane>
150 151 #end
151 152 </Tabs>
152   - #end
  153 +#end
153 154 </Modal>
154 155 </template>
... ...
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/index.vue.vm
  1 +#set ($apiName = "${table.moduleName.substring(0,1).toUpperCase()}${table.moduleName.substring(1)}${simpleClassName}Api")
1 2 <script lang="ts" setup>
2 3 import type { VxeTableGridOptions } from '#/adapter/vxe-table';
3   -import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
  4 +import type { ${apiName} } from '#/api/${table.moduleName}/${table.businessName}';
4 5  
5   -import { Page, useVbenModal } from '@vben/common-ui';
6   -import { message,Tabs } from 'ant-design-vue';
7   -import Form from './modules/form.vue';
  6 +import { ref } from 'vue';
8 7  
9   -## 特殊:主子表专属逻辑
10   -#if ( $table.templateType == 11 || $table.templateType == 12 )
11   - #foreach ($subSimpleClassName in $subSimpleClassNames)
12   - #set ($index = $foreach.count - 1)
13   - #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index))
14   -import ${subSimpleClassName}List from './modules/${subSimpleClassName_strikeCase}-list.vue'
15   - #end
16   -#end
  8 +import {#if ($table.templateType != 2 && $deleteBatchEnable) confirm,#end Page, useVbenModal } from '@vben/common-ui';
  9 +import { downloadFileFromBlobPart, isEmpty } from '@vben/utils';
  10 +
  11 +import { message#if ($table.templateType == 11), Tabs#end } from 'ant-design-vue';
17 12  
18   -import { ref, computed } from 'vue';
19   -import { $t } from '#/locales';
20 13 import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
21 14 #if (${table.templateType} == 2)## 树表接口
22   -import { get${simpleClassName}List, delete${simpleClassName}, export${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}';
  15 +import {
  16 + delete${simpleClassName},
  17 + export${simpleClassName},
  18 + get${simpleClassName}List,
  19 +} from '#/api/${table.moduleName}/${table.businessName}';
23 20 #else## 标准表接口
24   -import { get${simpleClassName}Page, delete${simpleClassName},#if ($deleteBatchEnable) delete${simpleClassName}List,#end export${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}';
  21 +import {
  22 + delete${simpleClassName},#if ($deleteBatchEnable)
  23 +
  24 + delete${simpleClassName}List,#end
  25 + export${simpleClassName},
  26 + get${simpleClassName}Page,
  27 +} from '#/api/${table.moduleName}/${table.businessName}';
25 28 #end
26   -import { downloadFileFromBlobPart, isEmpty } from '@vben/utils';
  29 +import { $t } from '#/locales';
27 30  
28 31 import { useGridColumns, useGridFormSchema } from './data';
  32 +import Form from './modules/form.vue';
  33 +## 特殊:主子表专属逻辑
  34 +#if ( $table.templateType == 11 || $table.templateType == 12 )
  35 + #foreach ($subSimpleClassName in $subSimpleClassNames)
  36 + #set ($index = $foreach.count - 1)
  37 + #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index))
  38 +import ${subSimpleClassName}List from './modules/${subSimpleClassName_strikeCase}-list.vue';
  39 + #end
  40 +#end
29 41  
30 42 #if ($table.templateType == 12 || $table.templateType == 11) ## 内嵌和erp情况
31 43 /** 子表的列表 */
32 44 const subTabsName = ref('$subClassNameVars.get(0)')
33 45 #if ($table.templateType == 11)
34   -const select${simpleClassName} = ref<${simpleClassName}Api.${simpleClassName}>();
  46 +const select${simpleClassName} = ref<${apiName}.${simpleClassName}>();
35 47 #end
36 48 #end
37   -
38 49 const [FormModal, formModalApi] = useVbenModal({
39 50 connectedComponent: Form,
40 51 destroyOnClose: true,
41 52 });
42   -
43 53 #if (${table.templateType} == 2)## 树表特有:控制表格展开收缩
  54 +
44 55 /** 切换树形展开/收缩状态 */
45 56 const isExpanded = ref(true);
46 57 function toggleExpand() {
... ... @@ -60,33 +71,29 @@ function onRefresh() {
60 71  
61 72 /** 创建${table.classComment} */
62 73 function handleCreate() {
63   - formModalApi.setData({}).open();
  74 + formModalApi.setData(null).open();
64 75 }
65 76  
66 77 /** 编辑${table.classComment} */
67   -function handleEdit(row: ${simpleClassName}Api.${simpleClassName}) {
  78 +function handleEdit(row: ${apiName}.${simpleClassName}) {
68 79 formModalApi.setData(row).open();
69 80 }
70   -
71 81 #if (${table.templateType} == 2)## 树表特有:新增下级
  82 +
72 83 /** 新增下级${table.classComment} */
73   -function handleAppend(row: ${simpleClassName}Api.${simpleClassName}) {
  84 +function handleAppend(row: ${apiName}.${simpleClassName}) {
74 85 formModalApi.setData({ ${treeParentColumn.javaField}: row.id }).open();
75 86 }
76 87 #end
77 88  
78 89 /** 删除${table.classComment} */
79   -async function handleDelete(row: ${simpleClassName}Api.${simpleClassName}) {
  90 +async function handleDelete(row: ${apiName}.${simpleClassName}) {
80 91 const hideLoading = message.loading({
81 92 content: $t('ui.actionMessage.deleting', [row.id]),
82   - key: 'action_key_msg',
83 93 });
84 94 try {
85 95 await delete${simpleClassName}(row.id as number);
86   - message.success({
87   - content: $t('ui.actionMessage.deleteSuccess', [row.id]),
88   - key: 'action_key_msg',
89   - });
  96 + message.success($t('ui.actionMessage.deleteSuccess', [row.id]));
90 97 onRefresh();
91 98 } finally {
92 99 hideLoading();
... ... @@ -96,30 +103,27 @@ async function handleDelete(row: ${simpleClassName}Api.${simpleClassName}) {
96 103 #if ($table.templateType != 2 && $deleteBatchEnable)
97 104 /** 批量删除${table.classComment} */
98 105 async function handleDeleteBatch() {
  106 + await confirm($t('ui.actionMessage.deleteBatchConfirm'));
99 107 const hideLoading = message.loading({
100   - content: $t('ui.actionMessage.deleting'),
101   - key: 'action_key_msg',
  108 + content: $t('ui.actionMessage.deletingBatch'),
102 109 });
103 110 try {
104 111 await delete${simpleClassName}List(checkedIds.value);
105 112 checkedIds.value = [];
106   - message.success({
107   - content: $t('ui.actionMessage.deleteSuccess'),
108   - key: 'action_key_msg',
109   - });
  113 + message.success($t('ui.actionMessage.deleteSuccess'));
110 114 onRefresh();
111 115 } finally {
112 116 hideLoading();
113 117 }
114 118 }
115 119  
116   -const checkedIds = ref<number[]>([])
  120 +const checkedIds = ref<number[]>([]);
117 121 function handleRowCheckboxChange({
118 122 records,
119 123 }: {
120   - records: ${simpleClassName}Api.${simpleClassName}[];
  124 + records: ${apiName}.${simpleClassName}[];
121 125 }) {
122   - checkedIds.value = records.map((item) => item.id);
  126 + checkedIds.value = records.map((item) => item.id!);
123 127 }
124 128 #end
125 129  
... ... @@ -152,9 +156,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
152 156 enabled: false,
153 157 },
154 158 #else## 标准表设置
155   - pagerConfig: {
156   - enabled: true,
157   - },
  159 + keepSource: true,
158 160 #end
159 161 proxyConfig: {
160 162 ajax: {
... ... @@ -184,19 +186,19 @@ const [Grid, gridApi] = useVbenVxeGrid({
184 186 refresh: true,
185 187 search: true,
186 188 },
187   - } as VxeTableGridOptions<${simpleClassName}Api.${simpleClassName}>,
  189 + } as VxeTableGridOptions<${apiName}.${simpleClassName}>,
188 190 #if (${table.templateType} == 11 || $deleteBatchEnable)
189   - gridEvents:{
190   - #if(${table.templateType} == 11)
191   - cellClick: ({ row }: { row: ${simpleClassName}Api.${simpleClassName}}) => {
  191 + gridEvents: {
  192 + #if(${table.templateType} == 11)
  193 + cellClick: ({ row }: { row: ${apiName}.${simpleClassName}}) => {
192 194 select${simpleClassName}.value = row;
193 195 },
194   - #end
195   - #if(${table.templateType} != 2 && $deleteBatchEnable)
196   - checkboxAll: handleRowCheckboxChange,
197   - checkboxChange: handleRowCheckboxChange,
198   - #end
199   - }
  196 + #end
  197 + #if(${table.templateType} != 2 && $deleteBatchEnable)
  198 + checkboxAll: handleRowCheckboxChange,
  199 + checkboxChange: handleRowCheckboxChange,
  200 + #end
  201 + },
200 202 #end
201 203 });
202 204 </script>
... ... @@ -255,8 +257,8 @@ const [Grid, gridApi] = useVbenVxeGrid({
255 257 type: 'primary',
256 258 danger: true,
257 259 icon: ACTION_ICON.DELETE,
258   - disabled: isEmpty(checkedIds),
259 260 auth: ['${table.moduleName}:${simpleClassName_strikeCase}:delete'],
  261 + disabled: isEmpty(checkedIds),
260 262 onClick: handleDeleteBatch,
261 263 },
262 264 #end
... ... @@ -297,7 +299,6 @@ const [Grid, gridApi] = useVbenVxeGrid({
297 299 />
298 300 </template>
299 301 </Grid>
300   -
301 302 #if ($table.templateType == 11) ## erp情况
302 303 <!-- 子表的表单 -->
303 304 <Tabs v-model:active-key="subTabsName" class="mt-2">
... ... @@ -314,4 +315,4 @@ const [Grid, gridApi] = useVbenVxeGrid({
314 315 </div>
315 316 #end
316 317 </Page>
317 318 -</template>
  319 +</template>
318 320 \ No newline at end of file
... ...
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/modules/form_sub_erp.vue.vm
... ... @@ -2,8 +2,9 @@
2 2 #set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组
3 3 #set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段
4 4 #set ($subSimpleClassName = $subSimpleClassNames.get($subIndex))
  5 +#set ($apiName = "${table.moduleName.substring(0,1).toUpperCase()}${table.moduleName.substring(1)}${simpleClassName}Api")
5 6 <script lang="ts" setup>
6   - import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
  7 + import type { ${apiName} } from '#/api/${table.moduleName}/${table.businessName}';
7 8  
8 9 import { useVbenModal } from '@vben/common-ui';
9 10 import { message } from 'ant-design-vue';
... ... @@ -16,7 +17,7 @@
16 17 import { use${subSimpleClassName}FormSchema } from '../data';
17 18  
18 19 const emit = defineEmits(['success']);
19   - const formData = ref<${simpleClassName}Api.${subSimpleClassName}>();
  20 + const formData = ref<${apiName}.${subSimpleClassName}>();
20 21 const getTitle = computed(() => {
21 22 return formData.value?.id
22 23 ? $t('ui.actionTitle.edit', ['${subTable.classComment}'])
... ... @@ -45,7 +46,7 @@
45 46  
46 47 modalApi.lock();
47 48 // 提交表单
48   - const data = (await formApi.getValues()) as ${simpleClassName}Api.${subSimpleClassName};
  49 + const data = (await formApi.getValues()) as ${apiName}.${subSimpleClassName};
49 50 data.${subJoinColumn.javaField} = formData.value?.${subJoinColumn.javaField};
50 51 try {
51 52 await (formData.value?.id ? update${subSimpleClassName}(data) : create${subSimpleClassName}(data));
... ... @@ -64,7 +65,7 @@
64 65 }
65 66  
66 67 // 加载数据
67   - let data = modalApi.getData<${simpleClassName}Api.${subSimpleClassName}>();
  68 + let data = modalApi.getData<${apiName}.${subSimpleClassName}>();
68 69 if (!data) {
69 70 return;
70 71 }
... ...
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/modules/form_sub_normal.vue.vm
... ... @@ -4,8 +4,9 @@
4 4 #set ($subSimpleClassName = $subSimpleClassNames.get($subIndex))
5 5 #set ($subClassNameVar = $subClassNameVars.get($subIndex))
6 6 #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
  7 +#set ($apiName = "${table.moduleName.substring(0,1).toUpperCase()}${table.moduleName.substring(1)}${simpleClassName}Api")
7 8 <script lang="ts" setup>
8   - import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
  9 + import type { ${apiName} } from '#/api/${table.moduleName}/${table.businessName}';
9 10  
10 11 import { computed, ref, h, onMounted,watch,nextTick } from 'vue';
11 12 import { $t } from '#/locales';
... ... @@ -33,7 +34,7 @@ const props = defineProps&lt;{
33 34 function onActionClick({
34 35 code,
35 36 row,
36   -}: OnActionClickParams<${simpleClassName}Api.${subSimpleClassName}>) {
  37 +}: OnActionClickParams<${apiName}.${subSimpleClassName}>) {
37 38 switch (code) {
38 39 case 'delete': {
39 40 onDelete(row);
... ... @@ -63,20 +64,20 @@ gridOptions: {
63 64  
64 65 /** 添加${subTable.classComment} */
65 66 const onAdd = async () => {
66   - await gridApi.grid.insertAt({} as ${simpleClassName}Api.${subSimpleClassName}, -1);
  67 + await gridApi.grid.insertAt({} as ${apiName}.${subSimpleClassName}, -1);
67 68 }
68 69  
69 70 /** 删除${subTable.classComment} */
70   -const onDelete = async (row: ${simpleClassName}Api.${subSimpleClassName}) => {
  71 +const onDelete = async (row: ${apiName}.${subSimpleClassName}) => {
71 72 await gridApi.grid.remove(row);
72 73 }
73 74  
74 75 /** 提供获取表格数据的方法供父组件调用 */
75 76 defineExpose({
76   - getData: (): ${simpleClassName}Api.${subSimpleClassName}[] => {
77   - const data = gridApi.grid.getData() as ${simpleClassName}Api.${subSimpleClassName}[];
78   - const removeRecords = gridApi.grid.getRemoveRecords() as ${simpleClassName}Api.${subSimpleClassName}[];
79   - const insertRecords = gridApi.grid.getInsertRecords() as ${simpleClassName}Api.${subSimpleClassName}[];
  77 + getData: (): ${apiName}.${subSimpleClassName}[] => {
  78 + const data = gridApi.grid.getData() as ${apiName}.${subSimpleClassName}[];
  79 + const removeRecords = gridApi.grid.getRemoveRecords() as ${apiName}.${subSimpleClassName}[];
  80 + const insertRecords = gridApi.grid.getInsertRecords() as ${apiName}.${subSimpleClassName}[];
80 81 return data
81 82 .filter((row) => !removeRecords.some((removed) => removed.id === row.id))
82 83 .concat(insertRecords.map((row: any) => ({ ...row, id: undefined })));
... ...
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/modules/list_sub_erp.vue.vm
... ... @@ -5,9 +5,10 @@
5 5 #set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段
6 6 #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($subIndex))
7 7 #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
  8 +#set ($apiName = "${table.moduleName.substring(0,1).toUpperCase()}${table.moduleName.substring(1)}${simpleClassName}Api")
8 9 <script lang="ts" setup>
9 10 import type { VxeTableGridOptions } from '#/adapter/vxe-table';
10   -import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
  11 +import type { ${apiName} } from '#/api/${table.moduleName}/${table.businessName}';
11 12  
12 13 #if ($table.templateType == 11) ## erp
13 14 import ${subSimpleClassName}Form from './${subSimpleClassName_strikeCase}-form.vue'
... ... @@ -51,12 +52,12 @@ function handleCreate() {
51 52 }
52 53  
53 54 /** 编辑${subTable.classComment} */
54   -function handleEdit(row: ${simpleClassName}Api.${subSimpleClassName}) {
  55 +function handleEdit(row: ${apiName}.${subSimpleClassName}) {
55 56 formModalApi.setData(row).open();
56 57 }
57 58  
58 59 /** 删除${subTable.classComment} */
59   -async function handleDelete(row: ${simpleClassName}Api.${subSimpleClassName}) {
  60 +async function handleDelete(row: ${apiName}.${subSimpleClassName}) {
60 61 const hideLoading = message.loading({
61 62 content: $t('ui.actionMessage.deleting', [row.id]),
62 63 key: 'action_process_msg',
... ... @@ -97,7 +98,7 @@ const checkedIds = ref&lt;number[]&gt;([])
97 98 function handleRowCheckboxChange({
98 99 records,
99 100 }: {
100   - records: ${simpleClassName}Api.${subSimpleClassName}[];
  101 + records: ${apiName}.${subSimpleClassName}[];
101 102 }) {
102 103 checkedIds.value = records.map((item) => item.id);
103 104 }
... ... @@ -149,7 +150,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
149 150 keyField: 'id',
150 151 isHover: true,
151 152 },
152   - } as VxeTableGridOptions<${simpleClassName}Api.${subSimpleClassName}>,
  153 + } as VxeTableGridOptions<${apiName}.${subSimpleClassName}>,
153 154 #if (${table.templateType} == 11 && $deleteBatchEnable)
154 155 gridEvents:{
155 156 checkboxAll: handleRowCheckboxChange,
... ...
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/data.ts.vm
... ... @@ -3,7 +3,7 @@ import type { VbenFormSchema } from &#39;#/adapter/form&#39;;
3 3 import type { VxeTableGridOptions } from '#/adapter/vxe-table';
4 4 import type { ${apiName} } from '#/api/${table.moduleName}/${table.businessName}';
5 5  
6   -import { DICT_TYPE, getDictOptions, getRangePickerDefaultProps, } from '#/utils';
  6 +import { DICT_TYPE, getDictOptions, getRangePickerDefaultProps } from '#/utils';
7 7 #if(${table.templateType} == 2)## 树表需要导入这些
8 8 import { get${simpleClassName}List } from '#/api/${table.moduleName}/${table.businessName}';
9 9 import { handleTree } from '@vben/utils';
... ...
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/index.vue.vm
... ... @@ -3,7 +3,7 @@
3 3 import type { VxeTableGridOptions } from '#/adapter/vxe-table';
4 4 import type { ${apiName} } from '#/api/${table.moduleName}/${table.businessName}';
5 5  
6   -import { ref#if ($table.templateType == 2), computed#end } from 'vue';
  6 +import { ref } from 'vue';
7 7  
8 8 import {#if ($table.templateType != 2 && $deleteBatchEnable) confirm,#end Page, useVbenModal } from '@vben/common-ui';
9 9 import { downloadFileFromBlobPart, isEmpty } from '@vben/utils';
... ...