Commit f29abe853db4563c6cb03866db79669e2002158a
1 parent
d7c62168
reactor:【infra 基础设施】优化 vben5 + element-plus 的 schema 模版
Showing
9 changed files
with
170 additions
and
140 deletions
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<${sim | @@ -426,7 +422,7 @@ export function use${subSimpleClassName}GridColumns(): VxeTableGridOptions<${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<${sim | @@ -602,4 +598,4 @@ export function use${subSimpleClassName}GridColumns(): VxeTableGridOptions<${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<{ | @@ -33,7 +34,7 @@ const props = defineProps<{ | ||
| 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 () => { | @@ -67,16 +68,16 @@ const onAdd = async () => { | ||
| 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<number[]>([]) | @@ -91,7 +90,7 @@ const checkedIds = ref<number[]>([]) | ||
| 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, |