Commit f29abe853db4563c6cb03866db79669e2002158a

Authored by YunaiV
1 parent d7c62168

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

yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenFrontTypeEnum.java
@@ -21,9 +21,8 @@ public enum CodegenFrontTypeEnum { @@ -21,9 +21,8 @@ public enum CodegenFrontTypeEnum {
21 VUE3_VBEN5_ANTD_SCHEMA(40), // Vue3 VBEN5 + ANTD + schema 模版 21 VUE3_VBEN5_ANTD_SCHEMA(40), // Vue3 VBEN5 + ANTD + schema 模版
22 VUE3_VBEN5_ANTD_GENERAL(41), // Vue3 VBEN5 + ANTD 标准模版 22 VUE3_VBEN5_ANTD_GENERAL(41), // Vue3 VBEN5 + ANTD 标准模版
23 23
24 - // TODO @puhui999::50、51 会好点;  
25 - VUE3_VBEN5_EP_SCHEMA(42), // Vue3 VBEN5 + EP + schema 模版  
26 - VUE3_VBEN5_EP_GENERAL(43), // Vue3 VBEN5 + EP 标准模版 24 + VUE3_VBEN5_EP_SCHEMA(50), // Vue3 VBEN5 + EP + schema 模版
  25 + VUE3_VBEN5_EP_GENERAL(51), // Vue3 VBEN5 + EP 标准模版
27 ; 26 ;
28 27
29 /** 28 /**
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java
@@ -343,7 +343,7 @@ public class CodegenEngine { @@ -343,7 +343,7 @@ public class CodegenEngine {
343 filePath = formatFilePath(filePath, bindingMap); 343 filePath = formatFilePath(filePath, bindingMap);
344 String content = templateEngine.getTemplate(vmPath).render(bindingMap); 344 String content = templateEngine.getTemplate(vmPath).render(bindingMap);
345 // 格式化代码 345 // 格式化代码
346 - content = prettyCode(content); 346 + content = prettyCode(content, vmPath);
347 result.put(filePath, content); 347 result.put(filePath, content);
348 } 348 }
349 349
@@ -383,11 +383,14 @@ public class CodegenEngine { @@ -383,11 +383,14 @@ public class CodegenEngine {
383 * 如果不处理,Vue 的 Pretty 格式校验可能会报错 383 * 如果不处理,Vue 的 Pretty 格式校验可能会报错
384 * 384 *
385 * @param content 格式化前的代码 385 * @param content 格式化前的代码
  386 + * @param vmPath 模板路径
386 * @return 格式化后的代码 387 * @return 格式化后的代码
387 */ 388 */
388 - private String prettyCode(String content) {  
389 - // Vue 界面:去除字段后面多余的 , 逗号,解决前端的 Pretty 代码格式检查的报错  
390 - content = content.replaceAll(",\n}", "\n}").replaceAll(",\n }", "\n }"); 389 + private String prettyCode(String content, String vmPath) {
  390 + // Vue 界面:去除字段后面多余的 , 逗号,解决前端的 Pretty 代码格式检查的报错(需要排除 vben5)
  391 + if (!StrUtil.contains(vmPath, "vben5")) {
  392 + content = content.replaceAll(",\n}", "\n}").replaceAll(",\n }", "\n }");
  393 + }
391 // Vue 界面:去除多的 dateFormatter,只有一个的情况下,说明没使用到 394 // Vue 界面:去除多的 dateFormatter,只有一个的情况下,说明没使用到
392 if (StrUtil.count(content, "dateFormatter") == 1) { 395 if (StrUtil.count(content, "dateFormatter") == 1) {
393 content = StrUtils.removeLineContains(content, "dateFormatter"); 396 content = StrUtils.removeLineContains(content, "dateFormatter");
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/api/api.ts.vm
  1 +#set ($apiName = "${table.moduleName.substring(0,1).toUpperCase()}${table.moduleName.substring(1)}${simpleClassName}Api")
1 import type { PageParam, PageResult } from '@vben/request'; 2 import type { PageParam, PageResult } from '@vben/request';
2 import type { Dayjs } from 'dayjs'; 3 import type { Dayjs } from 'dayjs';
3 4
4 import { requestClient } from '#/api/request'; 5 import { requestClient } from '#/api/request';
5 #set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") 6 #set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}")
6 7
7 -export namespace ${simpleClassName}Api { 8 +export namespace ${apiName} {
8 ## 特殊:主子表专属逻辑 9 ## 特殊:主子表专属逻辑
9 #foreach ($subTable in $subTables) 10 #foreach ($subTable in $subTables)
10 #set ($index = $foreach.count - 1) 11 #set ($index = $foreach.count - 1)
@@ -60,27 +61,35 @@ export namespace ${simpleClassName}Api { @@ -60,27 +61,35 @@ export namespace ${simpleClassName}Api {
60 #if ( $table.templateType != 2 ) 61 #if ( $table.templateType != 2 )
61 /** 查询${table.classComment}分页 */ 62 /** 查询${table.classComment}分页 */
62 export function get${simpleClassName}Page(params: PageParam) { 63 export function get${simpleClassName}Page(params: PageParam) {
63 - return requestClient.get<PageResult<${simpleClassName}Api.${simpleClassName}>>('${baseURL}/page', { params }); 64 + return requestClient.get<PageResult<${apiName}.${simpleClassName}>>(
  65 + '${baseURL}/page',
  66 + { params },
  67 + );
64 } 68 }
65 #else 69 #else
66 /** 查询${table.classComment}列表 */ 70 /** 查询${table.classComment}列表 */
67 export function get${simpleClassName}List(params: any) { 71 export function get${simpleClassName}List(params: any) {
68 - return requestClient.get<${simpleClassName}Api.${simpleClassName}[]>('${baseURL}/list', { params }); 72 + return requestClient.get<${apiName}.${simpleClassName}[]>(
  73 + '${baseURL}/list',
  74 + { params },
  75 + );
69 } 76 }
70 #end 77 #end
71 78
72 /** 查询${table.classComment}详情 */ 79 /** 查询${table.classComment}详情 */
73 export function get${simpleClassName}(id: number) { 80 export function get${simpleClassName}(id: number) {
74 - return requestClient.get<${simpleClassName}Api.${simpleClassName}>(`${baseURL}/get?id=${id}`); 81 + return requestClient.get<${apiName}.${simpleClassName}>(
  82 + `${baseURL}/get?id=${id}`,
  83 + );
75 } 84 }
76 85
77 /** 新增${table.classComment} */ 86 /** 新增${table.classComment} */
78 -export function create${simpleClassName}(data: ${simpleClassName}Api.${simpleClassName}) { 87 +export function create${simpleClassName}(data: ${apiName}.${simpleClassName}) {
79 return requestClient.post('${baseURL}/create', data); 88 return requestClient.post('${baseURL}/create', data);
80 } 89 }
81 90
82 /** 修改${table.classComment} */ 91 /** 修改${table.classComment} */
83 -export function update${simpleClassName}(data: ${simpleClassName}Api.${simpleClassName}) { 92 +export function update${simpleClassName}(data: ${apiName}.${simpleClassName}) {
84 return requestClient.put('${baseURL}/update', data); 93 return requestClient.put('${baseURL}/update', data);
85 } 94 }
86 95
@@ -92,7 +101,9 @@ export function delete${simpleClassName}(id: number) { @@ -92,7 +101,9 @@ export function delete${simpleClassName}(id: number) {
92 #if ( $table.templateType != 2 && $deleteBatchEnable) 101 #if ( $table.templateType != 2 && $deleteBatchEnable)
93 /** 批量删除${table.classComment} */ 102 /** 批量删除${table.classComment} */
94 export function delete${simpleClassName}List(ids: number[]) { 103 export function delete${simpleClassName}List(ids: number[]) {
95 - return requestClient.delete(`${baseURL}/delete-list?ids=${ids.join(',')}`) 104 + return requestClient.delete(
  105 + `${baseURL}/delete-list?ids=${ids.join(',')}`,
  106 + );
96 } 107 }
97 #end 108 #end
98 109
@@ -118,31 +129,38 @@ export function export${simpleClassName}(params: any) { @@ -118,31 +129,38 @@ export function export${simpleClassName}(params: any) {
118 #if ( $table.templateType == 11 ) 129 #if ( $table.templateType == 11 )
119 /** 获得${subTable.classComment}分页 */ 130 /** 获得${subTable.classComment}分页 */
120 export function get${subSimpleClassName}Page(params: PageParam) { 131 export function get${subSimpleClassName}Page(params: PageParam) {
121 - return requestClient.get<PageResult<${simpleClassName}Api.${subSimpleClassName}>>(`${baseURL}/${subSimpleClassName_strikeCase}/page`, { params }); 132 + return requestClient.get<PageResult<${apiName}.${subSimpleClassName}>>(
  133 + `${baseURL}/${subSimpleClassName_strikeCase}/page`,
  134 + { params },
  135 + );
122 } 136 }
123 ## 情况二:非 MASTER_ERP 时,需要列表查询子表 137 ## 情况二:非 MASTER_ERP 时,需要列表查询子表
124 #else 138 #else
125 #if ( $subTable.subJoinMany ) 139 #if ( $subTable.subJoinMany )
126 /** 获得${subTable.classComment}列表 */ 140 /** 获得${subTable.classComment}列表 */
127 export function get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaField}: number) { 141 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}}`); 142 + return requestClient.get<${apiName}.${subSimpleClassName}[]>(
  143 + `${baseURL}/${subSimpleClassName_strikeCase}/list-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=${${subJoinColumn.javaField}}`,
  144 + );
129 } 145 }
130 #else 146 #else
131 /** 获得${subTable.classComment} */ 147 /** 获得${subTable.classComment} */
132 export function get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaField}: number) { 148 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}}`); 149 + return requestClient.get<${apiName}.${subSimpleClassName}>(
  150 + `${baseURL}/${subSimpleClassName_strikeCase}/get-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=${${subJoinColumn.javaField}}`,
  151 + );
134 } 152 }
135 #end 153 #end
136 #end 154 #end
137 ## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作 155 ## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作
138 #if ( $table.templateType == 11 ) 156 #if ( $table.templateType == 11 )
139 /** 新增${subTable.classComment} */ 157 /** 新增${subTable.classComment} */
140 -export function create${subSimpleClassName}(data: ${simpleClassName}Api.${subSimpleClassName}) { 158 +export function create${subSimpleClassName}(data: ${apiName}.${subSimpleClassName}) {
141 return requestClient.post(`${baseURL}/${subSimpleClassName_strikeCase}/create`, data); 159 return requestClient.post(`${baseURL}/${subSimpleClassName_strikeCase}/create`, data);
142 } 160 }
143 161
144 /** 修改${subTable.classComment} */ 162 /** 修改${subTable.classComment} */
145 -export function update${subSimpleClassName}(data: ${simpleClassName}Api.${subSimpleClassName}) { 163 +export function update${subSimpleClassName}(data: ${apiName}.${subSimpleClassName}) {
146 return requestClient.put(`${baseURL}/${subSimpleClassName_strikeCase}/update`, data); 164 return requestClient.put(`${baseURL}/${subSimpleClassName_strikeCase}/update`, data);
147 } 165 }
148 166
@@ -154,13 +172,17 @@ export function delete${subSimpleClassName}(id: number) { @@ -154,13 +172,17 @@ export function delete${subSimpleClassName}(id: number) {
154 #if ($deleteBatchEnable) 172 #if ($deleteBatchEnable)
155 /** 批量删除${subTable.classComment} */ 173 /** 批量删除${subTable.classComment} */
156 export function delete${subSimpleClassName}List(ids: number[]) { 174 export function delete${subSimpleClassName}List(ids: number[]) {
157 - return requestClient.delete(`${baseURL}/${subSimpleClassName_strikeCase}/delete-list?ids=${ids.join(',')}`) 175 + return requestClient.delete(
  176 + `${baseURL}/${subSimpleClassName_strikeCase}/delete-list?ids=${ids.join(',')}`,
  177 + );
158 } 178 }
159 #end 179 #end
160 180
161 /** 获得${subTable.classComment} */ 181 /** 获得${subTable.classComment} */
162 export function get${subSimpleClassName}(id: number) { 182 export function get${subSimpleClassName}(id: number) {
163 - return requestClient.get<${simpleClassName}Api.${subSimpleClassName}>(`${baseURL}/${subSimpleClassName_strikeCase}/get?id=${id}`); 183 + return requestClient.get<${apiName}.${subSimpleClassName}>(
  184 + `${baseURL}/${subSimpleClassName_strikeCase}/get?id=${id}`,
  185 + );
164 } 186 }
165 #end 187 #end
166 #end 188 #end
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/data.ts.vm
  1 +#set ($apiName = "${table.moduleName.substring(0,1).toUpperCase()}${table.moduleName.substring(1)}${simpleClassName}Api")
1 import type { VbenFormSchema } from '#/adapter/form'; 2 import type { VbenFormSchema } from '#/adapter/form';
2 import type { VxeTableGridOptions } from '#/adapter/vxe-table'; 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 #if(${table.templateType} == 2)## 树表需要导入这些 7 #if(${table.templateType} == 2)## 树表需要导入这些
12 import { get${simpleClassName}List } from '#/api/${table.moduleName}/${table.businessName}'; 8 import { get${simpleClassName}List } from '#/api/${table.moduleName}/${table.businessName}';
13 import { handleTree } from '@vben/utils'; 9 import { handleTree } from '@vben/utils';
@@ -186,7 +182,7 @@ export function useGridFormSchema(): VbenFormSchema[] { @@ -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 return [ 186 return [
191 #if ($table.templateType != 2 && $deleteBatchEnable) 187 #if ($table.templateType != 2 && $deleteBatchEnable)
192 { type: 'checkbox', width: 40 }, 188 { type: 'checkbox', width: 40 },
@@ -389,7 +385,7 @@ export function use${subSimpleClassName}GridFormSchema(): VbenFormSchema[] { @@ -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 return [ 389 return [
394 #if ($table.templateType != 2 && $deleteBatchEnable) 390 #if ($table.templateType != 2 && $deleteBatchEnable)
395 { type: 'checkbox', width: 40 }, 391 { type: 'checkbox', width: 40 },
@@ -426,7 +422,7 @@ export function use${subSimpleClassName}GridColumns(): VxeTableGridOptions&lt;${sim @@ -426,7 +422,7 @@ export function use${subSimpleClassName}GridColumns(): VxeTableGridOptions&lt;${sim
426 #else 422 #else
427 #if ($subTable.subJoinMany) ## 一对多 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 return [ 426 return [
431 #foreach($column in $subColumns) 427 #foreach($column in $subColumns)
432 #if ($column.createOperation || $column.updateOperation) 428 #if ($column.createOperation || $column.updateOperation)
@@ -602,4 +598,4 @@ export function use${subSimpleClassName}GridColumns(): VxeTableGridOptions&lt;${sim @@ -602,4 +598,4 @@ export function use${subSimpleClassName}GridColumns(): VxeTableGridOptions&lt;${sim
602 } 598 }
603 #end 599 #end
604 #end 600 #end
605 -#end 601 -#end
  602 +#end
606 \ No newline at end of file 603 \ No newline at end of file
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/form.vue.vm
  1 +#set ($apiName = "${table.moduleName.substring(0,1).toUpperCase()}${table.moduleName.substring(1)}${simpleClassName}Api")
1 <script lang="ts" setup> 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 import { useVbenModal } from '@vben/common-ui'; 7 import { useVbenModal } from '@vben/common-ui';
5 -import { ElMessage, ElTabs, ElTabPane, ElCheckbox, ElInput, ElSelect, ElRadioGroup, ElCheckboxGroup, ElDatePicker } from 'element-plus'; 8 +
  9 +import { ElMessage#if ($table.templateType == 11), ElTabs, ElTabPane#end } from 'element-plus';
  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';
6 ## 特殊:主子表专属逻辑 14 ## 特殊:主子表专属逻辑
7 #if ( $table.templateType == 10 || $table.templateType == 12 ) 15 #if ( $table.templateType == 10 || $table.templateType == 12 )
8 #foreach ($subSimpleClassName in $subSimpleClassNames) 16 #foreach ($subSimpleClassName in $subSimpleClassNames)
@@ -12,21 +20,15 @@ import { ElMessage, ElTabs, ElTabPane, ElCheckbox, ElInput, ElSelect, ElRadioGro @@ -12,21 +20,15 @@ import { ElMessage, ElTabs, ElTabPane, ElCheckbox, ElInput, ElSelect, ElRadioGro
12 #end 20 #end
13 #end 21 #end
14 22
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'; 23 import { useFormSchema } from '../data';
21 24
22 const emit = defineEmits(['success']); 25 const emit = defineEmits(['success']);
23 -const formData = ref<${simpleClassName}Api.${simpleClassName}>(); 26 +const formData = ref<${apiName}.${simpleClassName}>();
24 const getTitle = computed(() => { 27 const getTitle = computed(() => {
25 return formData.value?.id 28 return formData.value?.id
26 ? $t('ui.actionTitle.edit', ['${table.classComment}']) 29 ? $t('ui.actionTitle.edit', ['${table.classComment}'])
27 : $t('ui.actionTitle.create', ['${table.classComment}']); 30 : $t('ui.actionTitle.create', ['${table.classComment}']);
28 }); 31 });
29 -  
30 ## 特殊:主子表专属逻辑 32 ## 特殊:主子表专属逻辑
31 #if ( $table.templateType == 10 || $table.templateType == 12 ) 33 #if ( $table.templateType == 10 || $table.templateType == 12 )
32 #if ( $subTables && $subTables.size() > 0 ) 34 #if ( $subTables && $subTables.size() > 0 )
@@ -51,7 +53,7 @@ const [Form, formApi] = useVbenForm({ @@ -51,7 +53,7 @@ const [Form, formApi] = useVbenForm({
51 }, 53 },
52 layout: 'horizontal', 54 layout: 'horizontal',
53 schema: useFormSchema(), 55 schema: useFormSchema(),
54 - showDefaultActions: false 56 + showDefaultActions: false,
55 }); 57 });
56 58
57 const [Modal, modalApi] = useVbenModal({ 59 const [Modal, modalApi] = useVbenModal({
@@ -60,8 +62,8 @@ const [Modal, modalApi] = useVbenModal({ @@ -60,8 +62,8 @@ const [Modal, modalApi] = useVbenModal({
60 if (!valid) { 62 if (!valid) {
61 return; 63 return;
62 } 64 }
63 - ## 特殊:主子表专属逻辑  
64 - #if ( $table.templateType == 10 || $table.templateType == 12 ) 65 +## 特殊:主子表专属逻辑
  66 +#if ( $table.templateType == 10 || $table.templateType == 12 )
65 #if ( $subTables && $subTables.size() > 0 ) 67 #if ( $subTables && $subTables.size() > 0 )
66 // 校验子表单 68 // 校验子表单
67 #foreach ($subTable in $subTables) 69 #foreach ($subTable in $subTables)
@@ -78,12 +80,12 @@ const [Modal, modalApi] = useVbenModal({ @@ -78,12 +80,12 @@ const [Modal, modalApi] = useVbenModal({
78 #end 80 #end
79 #end 81 #end
80 #end 82 #end
81 - #end 83 +#end
82 modalApi.lock(); 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 #if ( $subTables && $subTables.size() > 0 ) 89 #if ( $subTables && $subTables.size() > 0 )
88 // 拼接子表的数据 90 // 拼接子表的数据
89 #foreach ($subTable in $subTables) 91 #foreach ($subTable in $subTables)
@@ -96,7 +98,7 @@ const [Modal, modalApi] = useVbenModal({ @@ -96,7 +98,7 @@ const [Modal, modalApi] = useVbenModal({
96 #end 98 #end
97 #end 99 #end
98 #end 100 #end
99 - #end 101 +#end
100 try { 102 try {
101 await (formData.value?.id ? update${simpleClassName}(data) : create${simpleClassName}(data)); 103 await (formData.value?.id ? update${simpleClassName}(data) : create${simpleClassName}(data));
102 // 关闭并提示 104 // 关闭并提示
@@ -113,21 +115,20 @@ const [Modal, modalApi] = useVbenModal({ @@ -113,21 +115,20 @@ const [Modal, modalApi] = useVbenModal({
113 return; 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 return; 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 </script> 134 </script>
@@ -135,20 +136,20 @@ const [Modal, modalApi] = useVbenModal({ @@ -135,20 +136,20 @@ const [Modal, modalApi] = useVbenModal({
135 <template> 136 <template>
136 <Modal :title="getTitle"> 137 <Modal :title="getTitle">
137 <Form class="mx-4" /> 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 - <el-tabs v-model="subTabsName"> 142 + <ElTabs v-model="subTabsName">
142 #foreach ($subTable in $subTables) 143 #foreach ($subTable in $subTables)
143 #set ($index = $foreach.count - 1) 144 #set ($index = $foreach.count - 1)
144 #set ($subClassNameVar = $subClassNameVars.get($index)) 145 #set ($subClassNameVar = $subClassNameVars.get($index))
145 #set ($subSimpleClassName = $subSimpleClassNames.get($index)) 146 #set ($subSimpleClassName = $subSimpleClassNames.get($index))
146 #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) 147 #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index))
147 - <el-tab-pane name="$subClassNameVar" label="${subTable.classComment}"> 148 + <ElTabPane name="$subClassNameVar" label="${subTable.classComment}">
148 <${subSimpleClassName}Form ref="${subClassNameVar}FormRef" :${subJoinColumn_strikeCase}="formData?.id" /> 149 <${subSimpleClassName}Form ref="${subClassNameVar}FormRef" :${subJoinColumn_strikeCase}="formData?.id" />
149 - </el-tab-pane> 150 + </ElTabPane>
150 #end 151 #end
151 - </el-tabs>  
152 - #end 152 + </ElTabs>
  153 +#end
153 </Modal> 154 </Modal>
154 </template> 155 </template>
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/index.vue.vm
  1 +#set ($apiName = "${table.moduleName.substring(0,1).toUpperCase()}${table.moduleName.substring(1)}${simpleClassName}Api")
1 <script lang="ts" setup> 2 <script lang="ts" setup>
2 import type { VxeTableGridOptions } from '#/adapter/vxe-table'; 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 { ElMessage, ElTabs, ElTabPane, ElLoading } from 'element-plus';  
7 -import Form from './modules/form.vue'; 6 +import { ref#if ($table.templateType == 2), computed#end } 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 { ElLoading, ElMessage#if ($table.templateType == 11), ElTabs, ElTabPane#end } from 'element-plus';
17 12
18 -import { ref, computed } from 'vue';  
19 -import { $t } from '#/locales';  
20 import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; 13 import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
21 #if (${table.templateType} == 2)## 树表接口 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 #else## 标准表接口 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 #end 28 #end
26 -import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; 29 +import { $t } from '#/locales';
27 30
28 import { useGridColumns, useGridFormSchema } from './data'; 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 #if ($table.templateType == 12 || $table.templateType == 11) ## 内嵌和erp情况 42 #if ($table.templateType == 12 || $table.templateType == 11) ## 内嵌和erp情况
31 /** 子表的列表 */ 43 /** 子表的列表 */
32 const subTabsName = ref('$subClassNameVars.get(0)') 44 const subTabsName = ref('$subClassNameVars.get(0)')
33 #if ($table.templateType == 11) 45 #if ($table.templateType == 11)
34 -const select${simpleClassName} = ref<${simpleClassName}Api.${simpleClassName}>(); 46 +const select${simpleClassName} = ref<${apiName}.${simpleClassName}>();
35 #end 47 #end
36 #end 48 #end
37 -  
38 const [FormModal, formModalApi] = useVbenModal({ 49 const [FormModal, formModalApi] = useVbenModal({
39 connectedComponent: Form, 50 connectedComponent: Form,
40 destroyOnClose: true, 51 destroyOnClose: true,
41 }); 52 });
42 -  
43 #if (${table.templateType} == 2)## 树表特有:控制表格展开收缩 53 #if (${table.templateType} == 2)## 树表特有:控制表格展开收缩
  54 +
44 /** 切换树形展开/收缩状态 */ 55 /** 切换树形展开/收缩状态 */
45 const isExpanded = ref(true); 56 const isExpanded = ref(true);
46 function toggleExpand() { 57 function toggleExpand() {
@@ -60,26 +71,25 @@ function onRefresh() { @@ -60,26 +71,25 @@ function onRefresh() {
60 71
61 /** 创建${table.classComment} */ 72 /** 创建${table.classComment} */
62 function handleCreate() { 73 function handleCreate() {
63 - formModalApi.setData({}).open(); 74 + formModalApi.setData(null).open();
64 } 75 }
65 76
66 /** 编辑${table.classComment} */ 77 /** 编辑${table.classComment} */
67 -function handleEdit(row: ${simpleClassName}Api.${simpleClassName}) { 78 +function handleEdit(row: ${apiName}.${simpleClassName}) {
68 formModalApi.setData(row).open(); 79 formModalApi.setData(row).open();
69 } 80 }
70 -  
71 #if (${table.templateType} == 2)## 树表特有:新增下级 81 #if (${table.templateType} == 2)## 树表特有:新增下级
  82 +
72 /** 新增下级${table.classComment} */ 83 /** 新增下级${table.classComment} */
73 -function handleAppend(row: ${simpleClassName}Api.${simpleClassName}) { 84 +function handleAppend(row: ${apiName}.${simpleClassName}) {
74 formModalApi.setData({ ${treeParentColumn.javaField}: row.id }).open(); 85 formModalApi.setData({ ${treeParentColumn.javaField}: row.id }).open();
75 } 86 }
76 #end 87 #end
77 88
78 /** 删除${table.classComment} */ 89 /** 删除${table.classComment} */
79 -async function handleDelete(row: ${simpleClassName}Api.${simpleClassName}) { 90 +async function handleDelete(row: ${apiName}.${simpleClassName}) {
80 const loadingInstance = ElLoading.service({ 91 const loadingInstance = ElLoading.service({
81 text: $t('ui.actionMessage.deleting', [row.id]), 92 text: $t('ui.actionMessage.deleting', [row.id]),
82 - background: 'rgba(0, 0, 0, 0.7)',  
83 }); 93 });
84 try { 94 try {
85 await delete${simpleClassName}(row.id as number); 95 await delete${simpleClassName}(row.id as number);
@@ -93,9 +103,9 @@ async function handleDelete(row: ${simpleClassName}Api.${simpleClassName}) { @@ -93,9 +103,9 @@ async function handleDelete(row: ${simpleClassName}Api.${simpleClassName}) {
93 #if ($table.templateType != 2 && $deleteBatchEnable) 103 #if ($table.templateType != 2 && $deleteBatchEnable)
94 /** 批量删除${table.classComment} */ 104 /** 批量删除${table.classComment} */
95 async function handleDeleteBatch() { 105 async function handleDeleteBatch() {
  106 + await confirm($t('ui.actionMessage.deleteBatchConfirm'));
96 const loadingInstance = ElLoading.service({ 107 const loadingInstance = ElLoading.service({
97 - text: $t('ui.actionMessage.deleting'),  
98 - background: 'rgba(0, 0, 0, 0.7)', 108 + text: $t('ui.actionMessage.deletingBatch'),
99 }); 109 });
100 try { 110 try {
101 await delete${simpleClassName}List(checkedIds.value); 111 await delete${simpleClassName}List(checkedIds.value);
@@ -107,13 +117,13 @@ async function handleDeleteBatch() { @@ -107,13 +117,13 @@ async function handleDeleteBatch() {
107 } 117 }
108 } 118 }
109 119
110 -const checkedIds = ref<number[]>([]) 120 +const checkedIds = ref<number[]>([]);
111 function handleRowCheckboxChange({ 121 function handleRowCheckboxChange({
112 records, 122 records,
113 }: { 123 }: {
114 - records: ${simpleClassName}Api.${simpleClassName}[]; 124 + records: ${apiName}.${simpleClassName}[];
115 }) { 125 }) {
116 - checkedIds.value = records.map((item) => item.id); 126 + checkedIds.value = records.map((item) => item.id!);
117 } 127 }
118 #end 128 #end
119 129
@@ -146,9 +156,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ @@ -146,9 +156,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
146 enabled: false, 156 enabled: false,
147 }, 157 },
148 #else## 标准表设置 158 #else## 标准表设置
149 - pagerConfig: {  
150 - enabled: true,  
151 - }, 159 + keepSource: true,
152 #end 160 #end
153 proxyConfig: { 161 proxyConfig: {
154 ajax: { 162 ajax: {
@@ -178,19 +186,19 @@ const [Grid, gridApi] = useVbenVxeGrid({ @@ -178,19 +186,19 @@ const [Grid, gridApi] = useVbenVxeGrid({
178 refresh: true, 186 refresh: true,
179 search: true, 187 search: true,
180 }, 188 },
181 - } as VxeTableGridOptions<${simpleClassName}Api.${simpleClassName}>, 189 + } as VxeTableGridOptions<${apiName}.${simpleClassName}>,
182 #if (${table.templateType} == 11 || $deleteBatchEnable) 190 #if (${table.templateType} == 11 || $deleteBatchEnable)
183 - gridEvents:{  
184 - #if(${table.templateType} == 11)  
185 - cellClick: ({ row }: { row: ${simpleClassName}Api.${simpleClassName}}) => { 191 + gridEvents: {
  192 + #if(${table.templateType} == 11)
  193 + cellClick: ({ row }: { row: ${apiName}.${simpleClassName}}) => {
186 select${simpleClassName}.value = row; 194 select${simpleClassName}.value = row;
187 }, 195 },
188 - #end  
189 - #if(${table.templateType} != 2 && $deleteBatchEnable)  
190 - checkboxAll: handleRowCheckboxChange,  
191 - checkboxChange: handleRowCheckboxChange,  
192 - #end  
193 - } 196 + #end
  197 + #if(${table.templateType} != 2 && $deleteBatchEnable)
  198 + checkboxAll: handleRowCheckboxChange,
  199 + checkboxChange: handleRowCheckboxChange,
  200 + #end
  201 + },
194 #end 202 #end
195 }); 203 });
196 </script> 204 </script>
@@ -198,7 +206,6 @@ const [Grid, gridApi] = useVbenVxeGrid({ @@ -198,7 +206,6 @@ const [Grid, gridApi] = useVbenVxeGrid({
198 <template> 206 <template>
199 <Page auto-content-height> 207 <Page auto-content-height>
200 <FormModal @success="onRefresh" /> 208 <FormModal @success="onRefresh" />
201 -  
202 #if ($table.templateType == 11) ## erp情况 209 #if ($table.templateType == 11) ## erp情况
203 <div> 210 <div>
204 #end 211 #end
@@ -248,8 +255,8 @@ const [Grid, gridApi] = useVbenVxeGrid({ @@ -248,8 +255,8 @@ const [Grid, gridApi] = useVbenVxeGrid({
248 label: $t('ui.actionTitle.deleteBatch'), 255 label: $t('ui.actionTitle.deleteBatch'),
249 type: 'danger', 256 type: 'danger',
250 icon: ACTION_ICON.DELETE, 257 icon: ACTION_ICON.DELETE,
251 - disabled: isEmpty(checkedIds),  
252 auth: ['${table.moduleName}:${simpleClassName_strikeCase}:delete'], 258 auth: ['${table.moduleName}:${simpleClassName_strikeCase}:delete'],
  259 + disabled: isEmpty(checkedIds),
253 onClick: handleDeleteBatch, 260 onClick: handleDeleteBatch,
254 }, 261 },
255 #end 262 #end
@@ -262,7 +269,8 @@ const [Grid, gridApi] = useVbenVxeGrid({ @@ -262,7 +269,8 @@ const [Grid, gridApi] = useVbenVxeGrid({
262 #if (${table.templateType} == 2)## 树表特有:新增下级 269 #if (${table.templateType} == 2)## 树表特有:新增下级
263 { 270 {
264 label: '新增下级', 271 label: '新增下级',
265 - type: 'text', 272 + type: 'primary',
  273 + link: true,
266 icon: ACTION_ICON.ADD, 274 icon: ACTION_ICON.ADD,
267 auth: ['${table.moduleName}:${simpleClassName_strikeCase}:create'], 275 auth: ['${table.moduleName}:${simpleClassName_strikeCase}:create'],
268 onClick: handleAppend.bind(null, row), 276 onClick: handleAppend.bind(null, row),
@@ -270,7 +278,8 @@ const [Grid, gridApi] = useVbenVxeGrid({ @@ -270,7 +278,8 @@ const [Grid, gridApi] = useVbenVxeGrid({
270 #end 278 #end
271 { 279 {
272 label: $t('common.edit'), 280 label: $t('common.edit'),
273 - type: 'text', 281 + type: 'primary',
  282 + link: true,
274 icon: ACTION_ICON.EDIT, 283 icon: ACTION_ICON.EDIT,
275 auth: ['${table.moduleName}:${simpleClassName_strikeCase}:update'], 284 auth: ['${table.moduleName}:${simpleClassName_strikeCase}:update'],
276 onClick: handleEdit.bind(null, row), 285 onClick: handleEdit.bind(null, row),
@@ -278,7 +287,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ @@ -278,7 +287,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
278 { 287 {
279 label: $t('common.delete'), 288 label: $t('common.delete'),
280 type: 'danger', 289 type: 'danger',
281 - text: true, 290 + link: true,
282 icon: ACTION_ICON.DELETE, 291 icon: ACTION_ICON.DELETE,
283 auth: ['${table.moduleName}:${simpleClassName_strikeCase}:delete'], 292 auth: ['${table.moduleName}:${simpleClassName_strikeCase}:delete'],
284 popConfirm: { 293 popConfirm: {
@@ -290,21 +299,20 @@ const [Grid, gridApi] = useVbenVxeGrid({ @@ -290,21 +299,20 @@ const [Grid, gridApi] = useVbenVxeGrid({
290 /> 299 />
291 </template> 300 </template>
292 </Grid> 301 </Grid>
293 -  
294 #if ($table.templateType == 11) ## erp情况 302 #if ($table.templateType == 11) ## erp情况
295 <!-- 子表的表单 --> 303 <!-- 子表的表单 -->
296 - <el-tabs v-model="subTabsName" class="mt-2"> 304 + <ElTabs v-model="subTabsName" class="mt-2">
297 #foreach ($subTable in $subTables) 305 #foreach ($subTable in $subTables)
298 #set ($index = $foreach.count - 1) 306 #set ($index = $foreach.count - 1)
299 #set ($subClassNameVar = $subClassNameVars.get($index)) 307 #set ($subClassNameVar = $subClassNameVars.get($index))
300 #set ($subSimpleClassName = $subSimpleClassNames.get($index)) 308 #set ($subSimpleClassName = $subSimpleClassNames.get($index))
301 #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) 309 #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index))
302 - <el-tab-pane name="$subClassNameVar" label="${subTable.classComment}"> 310 + <ElTabPane name="$subClassNameVar" label="${subTable.classComment}">
303 <${subSimpleClassName}List :${subJoinColumn_strikeCase}="select${simpleClassName}?.id" /> 311 <${subSimpleClassName}List :${subJoinColumn_strikeCase}="select${simpleClassName}?.id" />
304 - </el-tab-pane> 312 + </ElTabPane>
305 #end 313 #end
306 - </el-tabs> 314 + </ElTabs>
307 </div> 315 </div>
308 #end 316 #end
309 </Page> 317 </Page>
310 -</template> 318 -</template>
  319 +</template>
311 \ No newline at end of file 320 \ No newline at end of file
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/modules/form_sub_erp.vue.vm
@@ -2,8 +2,9 @@ @@ -2,8 +2,9 @@
2 #set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 2 #set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组
3 #set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 3 #set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段
4 #set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) 4 #set ($subSimpleClassName = $subSimpleClassNames.get($subIndex))
  5 +#set ($apiName = "${table.moduleName.substring(0,1).toUpperCase()}${table.moduleName.substring(1)}${simpleClassName}Api")
5 <script lang="ts" setup> 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 import { useVbenModal } from '@vben/common-ui'; 9 import { useVbenModal } from '@vben/common-ui';
9 import { ElMessage } from 'element-plus'; 10 import { ElMessage } from 'element-plus';
@@ -16,7 +17,7 @@ @@ -16,7 +17,7 @@
16 import { use${subSimpleClassName}FormSchema } from '../data'; 17 import { use${subSimpleClassName}FormSchema } from '../data';
17 18
18 const emit = defineEmits(['success']); 19 const emit = defineEmits(['success']);
19 - const formData = ref<${simpleClassName}Api.${subSimpleClassName}>(); 20 + const formData = ref<${apiName}.${subSimpleClassName}>();
20 const getTitle = computed(() => { 21 const getTitle = computed(() => {
21 return formData.value?.id 22 return formData.value?.id
22 ? $t('ui.actionTitle.edit', ['${subTable.classComment}']) 23 ? $t('ui.actionTitle.edit', ['${subTable.classComment}'])
@@ -45,7 +46,7 @@ @@ -45,7 +46,7 @@
45 46
46 modalApi.lock(); 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 data.${subJoinColumn.javaField} = formData.value?.${subJoinColumn.javaField}; 50 data.${subJoinColumn.javaField} = formData.value?.${subJoinColumn.javaField};
50 try { 51 try {
51 await (formData.value?.id ? update${subSimpleClassName}(data) : create${subSimpleClassName}(data)); 52 await (formData.value?.id ? update${subSimpleClassName}(data) : create${subSimpleClassName}(data));
@@ -64,7 +65,7 @@ @@ -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 if (!data) { 69 if (!data) {
69 return; 70 return;
70 } 71 }
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/modules/form_sub_normal.vue.vm
@@ -4,8 +4,9 @@ @@ -4,8 +4,9 @@
4 #set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) 4 #set ($subSimpleClassName = $subSimpleClassNames.get($subIndex))
5 #set ($subClassNameVar = $subClassNameVars.get($subIndex)) 5 #set ($subClassNameVar = $subClassNameVars.get($subIndex))
6 #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 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 <script lang="ts" setup> 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 import { computed, ref, h, onMounted,watch,nextTick } from 'vue'; 11 import { computed, ref, h, onMounted,watch,nextTick } from 'vue';
11 import { $t } from '#/locales'; 12 import { $t } from '#/locales';
@@ -33,7 +34,7 @@ const props = defineProps&lt;{ @@ -33,7 +34,7 @@ const props = defineProps&lt;{
33 function onActionClick({ 34 function onActionClick({
34 code, 35 code,
35 row, 36 row,
36 -}: OnActionClickParams<${simpleClassName}Api.${subSimpleClassName}>) { 37 +}: OnActionClickParams<${apiName}.${subSimpleClassName}>) {
37 switch (code) { 38 switch (code) {
38 case 'delete': { 39 case 'delete': {
39 onDelete(row); 40 onDelete(row);
@@ -67,16 +68,16 @@ const onAdd = async () =&gt; { @@ -67,16 +68,16 @@ const onAdd = async () =&gt; {
67 } 68 }
68 69
69 /** 删除${subTable.classComment} */ 70 /** 删除${subTable.classComment} */
70 -const onDelete = async (row: ${simpleClassName}Api.${subSimpleClassName}) => { 71 +const onDelete = async (row: ${apiName}.${subSimpleClassName}) => {
71 await gridApi.grid.remove(row); 72 await gridApi.grid.remove(row);
72 } 73 }
73 74
74 /** 提供获取表格数据的方法供父组件调用 */ 75 /** 提供获取表格数据的方法供父组件调用 */
75 defineExpose({ 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 return data 81 return data
81 .filter((row) => !removeRecords.some((removed) => removed.id === row.id)) 82 .filter((row) => !removeRecords.some((removed) => removed.id === row.id))
82 .concat(insertRecords.map((row: any) => ({ ...row, id: undefined }))); 83 .concat(insertRecords.map((row: any) => ({ ...row, id: undefined })));
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/modules/list_sub_erp.vue.vm
@@ -5,9 +5,10 @@ @@ -5,9 +5,10 @@
5 #set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 5 #set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段
6 #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($subIndex)) 6 #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($subIndex))
7 #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 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 <script lang="ts" setup> 9 <script lang="ts" setup>
9 import type { VxeTableGridOptions } from '#/adapter/vxe-table'; 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 #if ($table.templateType == 11) ## erp 13 #if ($table.templateType == 11) ## erp
13 import ${subSimpleClassName}Form from './${subSimpleClassName_strikeCase}-form.vue' 14 import ${subSimpleClassName}Form from './${subSimpleClassName_strikeCase}-form.vue'
@@ -51,15 +52,14 @@ function handleCreate() { @@ -51,15 +52,14 @@ function handleCreate() {
51 } 52 }
52 53
53 /** 编辑${subTable.classComment} */ 54 /** 编辑${subTable.classComment} */
54 -function handleEdit(row: ${simpleClassName}Api.${subSimpleClassName}) { 55 +function handleEdit(row: ${apiName}.${subSimpleClassName}) {
55 formModalApi.setData(row).open(); 56 formModalApi.setData(row).open();
56 } 57 }
57 58
58 /** 删除${subTable.classComment} */ 59 /** 删除${subTable.classComment} */
59 -async function handleDelete(row: ${simpleClassName}Api.${subSimpleClassName}) { 60 +async function handleDelete(row: ${apiName}.${subSimpleClassName}) {
60 const loadingInstance = ElLoading.service({ 61 const loadingInstance = ElLoading.service({
61 text: $t('ui.actionMessage.deleting', [row.id]), 62 text: $t('ui.actionMessage.deleting', [row.id]),
62 - background: 'rgba(0, 0, 0, 0.7)',  
63 }); 63 });
64 try { 64 try {
65 await delete${subSimpleClassName}(row.id as number); 65 await delete${subSimpleClassName}(row.id as number);
@@ -75,7 +75,6 @@ async function handleDelete(row: ${simpleClassName}Api.${subSimpleClassName}) { @@ -75,7 +75,6 @@ async function handleDelete(row: ${simpleClassName}Api.${subSimpleClassName}) {
75 async function handleDeleteBatch() { 75 async function handleDeleteBatch() {
76 const loadingInstance = ElLoading.service({ 76 const loadingInstance = ElLoading.service({
77 text: $t('ui.actionMessage.deleting'), 77 text: $t('ui.actionMessage.deleting'),
78 - background: 'rgba(0, 0, 0, 0.7)',  
79 }); 78 });
80 try { 79 try {
81 await delete${subSimpleClassName}List(checkedIds.value); 80 await delete${subSimpleClassName}List(checkedIds.value);
@@ -91,7 +90,7 @@ const checkedIds = ref&lt;number[]&gt;([]) @@ -91,7 +90,7 @@ const checkedIds = ref&lt;number[]&gt;([])
91 function handleRowCheckboxChange({ 90 function handleRowCheckboxChange({
92 records, 91 records,
93 }: { 92 }: {
94 - records: ${simpleClassName}Api.${subSimpleClassName}[]; 93 + records: ${apiName}.${subSimpleClassName}[];
95 }) { 94 }) {
96 checkedIds.value = records.map((item) => item.id); 95 checkedIds.value = records.map((item) => item.id);
97 } 96 }
@@ -143,7 +142,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ @@ -143,7 +142,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
143 keyField: 'id', 142 keyField: 'id',
144 isHover: true, 143 isHover: true,
145 }, 144 },
146 - } as VxeTableGridOptions<${simpleClassName}Api.${subSimpleClassName}>, 145 + } as VxeTableGridOptions<${apiName}.${subSimpleClassName}>,
147 #if (${table.templateType} == 11 && $deleteBatchEnable) 146 #if (${table.templateType} == 11 && $deleteBatchEnable)
148 gridEvents:{ 147 gridEvents:{
149 checkboxAll: handleRowCheckboxChange, 148 checkboxAll: handleRowCheckboxChange,