Commit 8193e9801cec249d57bcba26203cee6f716f8b97
1 parent
f29abe85
reactor:【infra 基础设施】优化 vben5 + antd 的 schema 模版
Showing
9 changed files
with
121 additions
and
286 deletions
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/api/api.ts.vm
| 1 | -import type { PageParam, PageResult } from '@vben/request'; | ||
| 2 | -import type { Dayjs } from 'dayjs'; | ||
| 3 | - | ||
| 4 | -import { requestClient } from '#/api/request'; | ||
| 5 | -#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") | ||
| 6 | - | ||
| 7 | -export namespace ${simpleClassName}Api { | ||
| 8 | -## 特殊:主子表专属逻辑 | ||
| 9 | -#foreach ($subTable in $subTables) | ||
| 10 | - #set ($index = $foreach.count - 1) | ||
| 11 | - #set ($subSimpleClassName = $subSimpleClassNames.get($index)) | ||
| 12 | - #set ($subColumns = $subColumnsList.get($index))##当前字段数组 | ||
| 13 | - /** ${subTable.classComment}信息 */ | ||
| 14 | - export interface ${subSimpleClassName} { | ||
| 15 | - #foreach ($column in $subColumns) | ||
| 16 | - #if ($column.createOperation || $column.updateOperation) | ||
| 17 | - #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "short" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal") | ||
| 18 | - ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: number; // ${column.columnComment} | ||
| 19 | - #elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdate" || ${column.javaType.toLowerCase()} == "localdatetime") | ||
| 20 | - ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: string | Dayjs; // ${column.columnComment} | ||
| 21 | - #else | ||
| 22 | - ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: ${column.javaType.toLowerCase()}; // ${column.columnComment} | ||
| 23 | - #end | ||
| 24 | - #end | ||
| 25 | - #end | ||
| 26 | - } | ||
| 27 | - | ||
| 28 | -#end | ||
| 29 | - /** ${table.classComment}信息 */ | ||
| 30 | - export interface ${simpleClassName} { | ||
| 31 | -#foreach ($column in $columns) | ||
| 32 | -#if ($column.createOperation || $column.updateOperation) | ||
| 33 | -#if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "short" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal") | ||
| 34 | - ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: number; // ${column.columnComment} | ||
| 35 | -#elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdate" || ${column.javaType.toLowerCase()} == "localdatetime") | ||
| 36 | - ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: string | Dayjs; // ${column.columnComment} | ||
| 37 | -#else | ||
| 38 | - ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: ${column.javaType.toLowerCase()}; // ${column.columnComment} | ||
| 39 | -#end | ||
| 40 | -#end | ||
| 41 | -#end | ||
| 42 | -#if ( $table.templateType == 2 ) | ||
| 43 | - children?: ${simpleClassName}[]; | ||
| 44 | -#end | ||
| 45 | -## 特殊:主子表专属逻辑 | ||
| 46 | -#if ( $table.templateType == 10 || $table.templateType == 12 ) | ||
| 47 | - #foreach ($subTable in $subTables) | ||
| 48 | - #set ($index = $foreach.count - 1) | ||
| 49 | - #set ($subSimpleClassName = $subSimpleClassNames.get($index)) | ||
| 50 | - #if ( $subTable.subJoinMany ) | ||
| 51 | - ${subSimpleClassName.toLowerCase()}s?: ${subSimpleClassName}[] | ||
| 52 | - #else | ||
| 53 | - ${subSimpleClassName.toLowerCase()}?: ${subSimpleClassName} | ||
| 54 | - #end | ||
| 55 | - #end | ||
| 56 | -#end | ||
| 57 | - } | ||
| 58 | -} | ||
| 59 | - | ||
| 60 | -#if ( $table.templateType != 2 ) | ||
| 61 | -/** 查询${table.classComment}分页 */ | ||
| 62 | -export function get${simpleClassName}Page(params: PageParam) { | ||
| 63 | - return requestClient.get<PageResult<${simpleClassName}Api.${simpleClassName}>>('${baseURL}/page', { params }); | ||
| 64 | -} | ||
| 65 | -#else | ||
| 66 | -/** 查询${table.classComment}列表 */ | ||
| 67 | -export function get${simpleClassName}List(params: any) { | ||
| 68 | - return requestClient.get<${simpleClassName}Api.${simpleClassName}[]>('${baseURL}/list', { params }); | ||
| 69 | -} | ||
| 70 | -#end | ||
| 71 | - | ||
| 72 | -/** 查询${table.classComment}详情 */ | ||
| 73 | -export function get${simpleClassName}(id: number) { | ||
| 74 | - return requestClient.get<${simpleClassName}Api.${simpleClassName}>(`${baseURL}/get?id=${id}`); | ||
| 75 | -} | ||
| 76 | - | ||
| 77 | -/** 新增${table.classComment} */ | ||
| 78 | -export function create${simpleClassName}(data: ${simpleClassName}Api.${simpleClassName}) { | ||
| 79 | - return requestClient.post('${baseURL}/create', data); | ||
| 80 | -} | ||
| 81 | - | ||
| 82 | -/** 修改${table.classComment} */ | ||
| 83 | -export function update${simpleClassName}(data: ${simpleClassName}Api.${simpleClassName}) { | ||
| 84 | - return requestClient.put('${baseURL}/update', data); | ||
| 85 | -} | ||
| 86 | - | ||
| 87 | -/** 删除${table.classComment} */ | ||
| 88 | -export function delete${simpleClassName}(id: number) { | ||
| 89 | - return requestClient.delete(`${baseURL}/delete?id=${id}`); | ||
| 90 | -} | ||
| 91 | - | ||
| 92 | -#if ( $table.templateType != 2 && $deleteBatchEnable) | ||
| 93 | -/** 批量删除${table.classComment} */ | ||
| 94 | -export function delete${simpleClassName}List(ids: number[]) { | ||
| 95 | - return requestClient.delete(`${baseURL}/delete-list?ids=${ids.join(',')}`) | ||
| 96 | -} | ||
| 97 | -#end | ||
| 98 | - | ||
| 99 | -/** 导出${table.classComment} */ | ||
| 100 | -export function export${simpleClassName}(params: any) { | ||
| 101 | - return requestClient.download('${baseURL}/export-excel', { params }); | ||
| 102 | -} | ||
| 103 | - | ||
| 104 | -## 特殊:主子表专属逻辑 | ||
| 105 | -#foreach ($subTable in $subTables) | ||
| 106 | -#set ($index = $foreach.count - 1) | ||
| 107 | -#set ($subSimpleClassName = $subSimpleClassNames.get($index)) | ||
| 108 | -#set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 | ||
| 109 | -#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 | ||
| 110 | -#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 | ||
| 111 | -#set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index)) | ||
| 112 | -#set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) | ||
| 113 | -#set ($subClassNameVar = $subClassNameVars.get($index)) | ||
| 114 | - | ||
| 115 | -// ==================== 子表($subTable.classComment) ==================== | ||
| 116 | - | ||
| 117 | -## 情况一:MASTER_ERP 时,需要分查询页子表 | ||
| 118 | -#if ( $table.templateType == 11 ) | ||
| 119 | -/** 获得${subTable.classComment}分页 */ | ||
| 120 | -export function get${subSimpleClassName}Page(params: PageParam) { | ||
| 121 | - return requestClient.get<PageResult<${simpleClassName}Api.${subSimpleClassName}>>(`${baseURL}/${subSimpleClassName_strikeCase}/page`, { params }); | ||
| 122 | -} | ||
| 123 | -## 情况二:非 MASTER_ERP 时,需要列表查询子表 | ||
| 124 | -#else | ||
| 125 | - #if ( $subTable.subJoinMany ) | ||
| 126 | -/** 获得${subTable.classComment}列表 */ | ||
| 127 | -export function get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaField}: number) { | ||
| 128 | - return requestClient.get<${simpleClassName}Api.${subSimpleClassName}[]>(`${baseURL}/${subSimpleClassName_strikeCase}/list-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=${${subJoinColumn.javaField}}`); | ||
| 129 | -} | ||
| 130 | - #else | ||
| 131 | -/** 获得${subTable.classComment} */ | ||
| 132 | -export function get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaField}: number) { | ||
| 133 | - return requestClient.get<${simpleClassName}Api.${subSimpleClassName}>(`${baseURL}/${subSimpleClassName_strikeCase}/get-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=${${subJoinColumn.javaField}}`); | ||
| 134 | -} | ||
| 135 | - #end | ||
| 136 | -#end | ||
| 137 | -## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作 | ||
| 138 | -#if ( $table.templateType == 11 ) | ||
| 139 | -/** 新增${subTable.classComment} */ | ||
| 140 | -export function create${subSimpleClassName}(data: ${simpleClassName}Api.${subSimpleClassName}) { | ||
| 141 | - return requestClient.post(`${baseURL}/${subSimpleClassName_strikeCase}/create`, data); | ||
| 142 | -} | ||
| 143 | - | ||
| 144 | -/** 修改${subTable.classComment} */ | ||
| 145 | -export function update${subSimpleClassName}(data: ${simpleClassName}Api.${subSimpleClassName}) { | ||
| 146 | - return requestClient.put(`${baseURL}/${subSimpleClassName_strikeCase}/update`, data); | ||
| 147 | -} | ||
| 148 | - | ||
| 149 | -/** 删除${subTable.classComment} */ | ||
| 150 | -export function delete${subSimpleClassName}(id: number) { | ||
| 151 | - return requestClient.delete(`${baseURL}/${subSimpleClassName_strikeCase}/delete?id=${id}`); | ||
| 152 | -} | ||
| 153 | - | ||
| 154 | -#if ($deleteBatchEnable) | ||
| 155 | -/** 批量删除${subTable.classComment} */ | ||
| 156 | -export function delete${subSimpleClassName}List(ids: number[]) { | ||
| 157 | - return requestClient.delete(`${baseURL}/${subSimpleClassName_strikeCase}/delete-list?ids=${ids.join(',')}`) | ||
| 158 | -} | ||
| 159 | -#end | ||
| 160 | - | ||
| 161 | -/** 获得${subTable.classComment} */ | ||
| 162 | -export function get${subSimpleClassName}(id: number) { | ||
| 163 | - return requestClient.get<${simpleClassName}Api.${subSimpleClassName}>(`${baseURL}/${subSimpleClassName_strikeCase}/get?id=${id}`); | ||
| 164 | -} | ||
| 165 | -#end | ||
| 166 | -#end | ||
| 167 | - | 1 | +#parse("codegen/vue3_vben5_ele/schema/api/api.ts.vm") |
| 168 | \ No newline at end of file | 2 | \ No newline at end of file |
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/data.ts.vm
| 1 | +#set ($apiName = "${table.moduleName.substring(0,1).toUpperCase()}${table.moduleName.substring(1)}${simpleClassName}Api") | ||
| 1 | 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_antd/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 { message, Tabs, Checkbox, Input, Textarea, Select,RadioGroup,CheckboxGroup, DatePicker } from 'ant-design-vue'; | 8 | + |
| 9 | +import { message#if ($table.templateType == 11), Tabs#end } from 'ant-design-vue'; | ||
| 10 | + | ||
| 11 | +import { useVbenForm } from '#/adapter/form'; | ||
| 12 | +import { create${simpleClassName}, get${simpleClassName}, update${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}'; | ||
| 13 | +import { $t } from '#/locales'; | ||
| 14 | + | ||
| 15 | +import { useFormSchema } from '../data'; | ||
| 6 | ## 特殊:主子表专属逻辑 | 16 | ## 特殊:主子表专属逻辑 |
| 7 | #if ( $table.templateType == 10 || $table.templateType == 12 ) | 17 | #if ( $table.templateType == 10 || $table.templateType == 12 ) |
| 8 | #foreach ($subSimpleClassName in $subSimpleClassNames) | 18 | #foreach ($subSimpleClassName in $subSimpleClassNames) |
| @@ -12,21 +22,13 @@ import { message, Tabs, Checkbox, Input, Textarea, Select,RadioGroup,CheckboxGro | @@ -12,21 +22,13 @@ import { message, Tabs, Checkbox, Input, Textarea, Select,RadioGroup,CheckboxGro | ||
| 12 | #end | 22 | #end |
| 13 | #end | 23 | #end |
| 14 | 24 | ||
| 15 | -import { computed, ref } from 'vue'; | ||
| 16 | -import { $t } from '#/locales'; | ||
| 17 | -import { useVbenForm } from '#/adapter/form'; | ||
| 18 | -import { get${simpleClassName}, create${simpleClassName}, update${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}'; | ||
| 19 | - | ||
| 20 | -import { useFormSchema } from '../data'; | ||
| 21 | - | ||
| 22 | 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,13 +98,13 @@ const [Modal, modalApi] = useVbenModal({ | @@ -96,13 +98,13 @@ 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 | // 关闭并提示 |
| 103 | await modalApi.close(); | 105 | await modalApi.close(); |
| 104 | emit('success'); | 106 | emit('success'); |
| 105 | - message.success( $t('ui.actionMessage.operationSuccess') ); | 107 | + message.success($t('ui.actionMessage.operationSuccess')); |
| 106 | } finally { | 108 | } finally { |
| 107 | modalApi.unlock(); | 109 | modalApi.unlock(); |
| 108 | } | 110 | } |
| @@ -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,8 +136,8 @@ const [Modal, modalApi] = useVbenModal({ | @@ -135,8 +136,8 @@ 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 | <Tabs v-model:active-key="subTabsName"> | 142 | <Tabs v-model:active-key="subTabsName"> |
| 142 | #foreach ($subTable in $subTables) | 143 | #foreach ($subTable in $subTables) |
| @@ -149,6 +150,6 @@ const [Modal, modalApi] = useVbenModal({ | @@ -149,6 +150,6 @@ const [Modal, modalApi] = useVbenModal({ | ||
| 149 | </Tabs.TabPane> | 150 | </Tabs.TabPane> |
| 150 | #end | 151 | #end |
| 151 | </Tabs> | 152 | </Tabs> |
| 152 | - #end | 153 | +#end |
| 153 | </Modal> | 154 | </Modal> |
| 154 | </template> | 155 | </template> |
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/index.vue.vm
| 1 | +#set ($apiName = "${table.moduleName.substring(0,1).toUpperCase()}${table.moduleName.substring(1)}${simpleClassName}Api") | ||
| 1 | <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 { message,Tabs } from 'ant-design-vue'; | ||
| 7 | -import Form from './modules/form.vue'; | 6 | +import { ref } from 'vue'; |
| 8 | 7 | ||
| 9 | -## 特殊:主子表专属逻辑 | ||
| 10 | -#if ( $table.templateType == 11 || $table.templateType == 12 ) | ||
| 11 | - #foreach ($subSimpleClassName in $subSimpleClassNames) | ||
| 12 | - #set ($index = $foreach.count - 1) | ||
| 13 | - #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index)) | ||
| 14 | -import ${subSimpleClassName}List from './modules/${subSimpleClassName_strikeCase}-list.vue' | ||
| 15 | - #end | ||
| 16 | -#end | 8 | +import {#if ($table.templateType != 2 && $deleteBatchEnable) confirm,#end Page, useVbenModal } from '@vben/common-ui'; |
| 9 | +import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; | ||
| 10 | + | ||
| 11 | +import { message#if ($table.templateType == 11), Tabs#end } from 'ant-design-vue'; | ||
| 17 | 12 | ||
| 18 | -import { ref, computed } from 'vue'; | ||
| 19 | -import { $t } from '#/locales'; | ||
| 20 | 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,33 +71,29 @@ function onRefresh() { | @@ -60,33 +71,29 @@ 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 hideLoading = message.loading({ | 91 | const hideLoading = message.loading({ |
| 81 | content: $t('ui.actionMessage.deleting', [row.id]), | 92 | content: $t('ui.actionMessage.deleting', [row.id]), |
| 82 | - key: 'action_key_msg', | ||
| 83 | }); | 93 | }); |
| 84 | try { | 94 | try { |
| 85 | await delete${simpleClassName}(row.id as number); | 95 | await delete${simpleClassName}(row.id as number); |
| 86 | - message.success({ | ||
| 87 | - content: $t('ui.actionMessage.deleteSuccess', [row.id]), | ||
| 88 | - key: 'action_key_msg', | ||
| 89 | - }); | 96 | + message.success($t('ui.actionMessage.deleteSuccess', [row.id])); |
| 90 | onRefresh(); | 97 | onRefresh(); |
| 91 | } finally { | 98 | } finally { |
| 92 | hideLoading(); | 99 | hideLoading(); |
| @@ -96,30 +103,27 @@ async function handleDelete(row: ${simpleClassName}Api.${simpleClassName}) { | @@ -96,30 +103,27 @@ async function handleDelete(row: ${simpleClassName}Api.${simpleClassName}) { | ||
| 96 | #if ($table.templateType != 2 && $deleteBatchEnable) | 103 | #if ($table.templateType != 2 && $deleteBatchEnable) |
| 97 | /** 批量删除${table.classComment} */ | 104 | /** 批量删除${table.classComment} */ |
| 98 | async function handleDeleteBatch() { | 105 | async function handleDeleteBatch() { |
| 106 | + await confirm($t('ui.actionMessage.deleteBatchConfirm')); | ||
| 99 | const hideLoading = message.loading({ | 107 | const hideLoading = message.loading({ |
| 100 | - content: $t('ui.actionMessage.deleting'), | ||
| 101 | - key: 'action_key_msg', | 108 | + content: $t('ui.actionMessage.deletingBatch'), |
| 102 | }); | 109 | }); |
| 103 | try { | 110 | try { |
| 104 | await delete${simpleClassName}List(checkedIds.value); | 111 | await delete${simpleClassName}List(checkedIds.value); |
| 105 | checkedIds.value = []; | 112 | checkedIds.value = []; |
| 106 | - message.success({ | ||
| 107 | - content: $t('ui.actionMessage.deleteSuccess'), | ||
| 108 | - key: 'action_key_msg', | ||
| 109 | - }); | 113 | + message.success($t('ui.actionMessage.deleteSuccess')); |
| 110 | onRefresh(); | 114 | onRefresh(); |
| 111 | } finally { | 115 | } finally { |
| 112 | hideLoading(); | 116 | hideLoading(); |
| 113 | } | 117 | } |
| 114 | } | 118 | } |
| 115 | 119 | ||
| 116 | -const checkedIds = ref<number[]>([]) | 120 | +const checkedIds = ref<number[]>([]); |
| 117 | function handleRowCheckboxChange({ | 121 | function handleRowCheckboxChange({ |
| 118 | records, | 122 | records, |
| 119 | }: { | 123 | }: { |
| 120 | - records: ${simpleClassName}Api.${simpleClassName}[]; | 124 | + records: ${apiName}.${simpleClassName}[]; |
| 121 | }) { | 125 | }) { |
| 122 | - checkedIds.value = records.map((item) => item.id); | 126 | + checkedIds.value = records.map((item) => item.id!); |
| 123 | } | 127 | } |
| 124 | #end | 128 | #end |
| 125 | 129 | ||
| @@ -152,9 +156,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ | @@ -152,9 +156,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ | ||
| 152 | enabled: false, | 156 | enabled: false, |
| 153 | }, | 157 | }, |
| 154 | #else## 标准表设置 | 158 | #else## 标准表设置 |
| 155 | - pagerConfig: { | ||
| 156 | - enabled: true, | ||
| 157 | - }, | 159 | + keepSource: true, |
| 158 | #end | 160 | #end |
| 159 | proxyConfig: { | 161 | proxyConfig: { |
| 160 | ajax: { | 162 | ajax: { |
| @@ -184,19 +186,19 @@ const [Grid, gridApi] = useVbenVxeGrid({ | @@ -184,19 +186,19 @@ const [Grid, gridApi] = useVbenVxeGrid({ | ||
| 184 | refresh: true, | 186 | refresh: true, |
| 185 | search: true, | 187 | search: true, |
| 186 | }, | 188 | }, |
| 187 | - } as VxeTableGridOptions<${simpleClassName}Api.${simpleClassName}>, | 189 | + } as VxeTableGridOptions<${apiName}.${simpleClassName}>, |
| 188 | #if (${table.templateType} == 11 || $deleteBatchEnable) | 190 | #if (${table.templateType} == 11 || $deleteBatchEnable) |
| 189 | - gridEvents:{ | ||
| 190 | - #if(${table.templateType} == 11) | ||
| 191 | - cellClick: ({ row }: { row: ${simpleClassName}Api.${simpleClassName}}) => { | 191 | + gridEvents: { |
| 192 | + #if(${table.templateType} == 11) | ||
| 193 | + cellClick: ({ row }: { row: ${apiName}.${simpleClassName}}) => { | ||
| 192 | select${simpleClassName}.value = row; | 194 | select${simpleClassName}.value = row; |
| 193 | }, | 195 | }, |
| 194 | - #end | ||
| 195 | - #if(${table.templateType} != 2 && $deleteBatchEnable) | ||
| 196 | - checkboxAll: handleRowCheckboxChange, | ||
| 197 | - checkboxChange: handleRowCheckboxChange, | ||
| 198 | - #end | ||
| 199 | - } | 196 | + #end |
| 197 | + #if(${table.templateType} != 2 && $deleteBatchEnable) | ||
| 198 | + checkboxAll: handleRowCheckboxChange, | ||
| 199 | + checkboxChange: handleRowCheckboxChange, | ||
| 200 | + #end | ||
| 201 | + }, | ||
| 200 | #end | 202 | #end |
| 201 | }); | 203 | }); |
| 202 | </script> | 204 | </script> |
| @@ -255,8 +257,8 @@ const [Grid, gridApi] = useVbenVxeGrid({ | @@ -255,8 +257,8 @@ const [Grid, gridApi] = useVbenVxeGrid({ | ||
| 255 | type: 'primary', | 257 | type: 'primary', |
| 256 | danger: true, | 258 | danger: true, |
| 257 | icon: ACTION_ICON.DELETE, | 259 | icon: ACTION_ICON.DELETE, |
| 258 | - disabled: isEmpty(checkedIds), | ||
| 259 | auth: ['${table.moduleName}:${simpleClassName_strikeCase}:delete'], | 260 | auth: ['${table.moduleName}:${simpleClassName_strikeCase}:delete'], |
| 261 | + disabled: isEmpty(checkedIds), | ||
| 260 | onClick: handleDeleteBatch, | 262 | onClick: handleDeleteBatch, |
| 261 | }, | 263 | }, |
| 262 | #end | 264 | #end |
| @@ -297,7 +299,6 @@ const [Grid, gridApi] = useVbenVxeGrid({ | @@ -297,7 +299,6 @@ const [Grid, gridApi] = useVbenVxeGrid({ | ||
| 297 | /> | 299 | /> |
| 298 | </template> | 300 | </template> |
| 299 | </Grid> | 301 | </Grid> |
| 300 | - | ||
| 301 | #if ($table.templateType == 11) ## erp情况 | 302 | #if ($table.templateType == 11) ## erp情况 |
| 302 | <!-- 子表的表单 --> | 303 | <!-- 子表的表单 --> |
| 303 | <Tabs v-model:active-key="subTabsName" class="mt-2"> | 304 | <Tabs v-model:active-key="subTabsName" class="mt-2"> |
| @@ -314,4 +315,4 @@ const [Grid, gridApi] = useVbenVxeGrid({ | @@ -314,4 +315,4 @@ const [Grid, gridApi] = useVbenVxeGrid({ | ||
| 314 | </div> | 315 | </div> |
| 315 | #end | 316 | #end |
| 316 | </Page> | 317 | </Page> |
| 317 | -</template> | 318 | -</template> |
| 319 | +</template> | ||
| 318 | \ No newline at end of file | 320 | \ No newline at end of file |
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/modules/form_sub_erp.vue.vm
| @@ -2,8 +2,9 @@ | @@ -2,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 { message } from 'ant-design-vue'; | 10 | import { message } from 'ant-design-vue'; |
| @@ -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_antd/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); |
| @@ -63,20 +64,20 @@ gridOptions: { | @@ -63,20 +64,20 @@ gridOptions: { | ||
| 63 | 64 | ||
| 64 | /** 添加${subTable.classComment} */ | 65 | /** 添加${subTable.classComment} */ |
| 65 | const onAdd = async () => { | 66 | const onAdd = async () => { |
| 66 | - await gridApi.grid.insertAt({} as ${simpleClassName}Api.${subSimpleClassName}, -1); | 67 | + await gridApi.grid.insertAt({} as ${apiName}.${subSimpleClassName}, -1); |
| 67 | } | 68 | } |
| 68 | 69 | ||
| 69 | /** 删除${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_antd/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,12 +52,12 @@ function handleCreate() { | @@ -51,12 +52,12 @@ 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 hideLoading = message.loading({ | 61 | const hideLoading = message.loading({ |
| 61 | content: $t('ui.actionMessage.deleting', [row.id]), | 62 | content: $t('ui.actionMessage.deleting', [row.id]), |
| 62 | key: 'action_process_msg', | 63 | key: 'action_process_msg', |
| @@ -97,7 +98,7 @@ const checkedIds = ref<number[]>([]) | @@ -97,7 +98,7 @@ const checkedIds = ref<number[]>([]) | ||
| 97 | function handleRowCheckboxChange({ | 98 | function handleRowCheckboxChange({ |
| 98 | records, | 99 | records, |
| 99 | }: { | 100 | }: { |
| 100 | - records: ${simpleClassName}Api.${subSimpleClassName}[]; | 101 | + records: ${apiName}.${subSimpleClassName}[]; |
| 101 | }) { | 102 | }) { |
| 102 | checkedIds.value = records.map((item) => item.id); | 103 | checkedIds.value = records.map((item) => item.id); |
| 103 | } | 104 | } |
| @@ -149,7 +150,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ | @@ -149,7 +150,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ | ||
| 149 | keyField: 'id', | 150 | keyField: 'id', |
| 150 | isHover: true, | 151 | isHover: true, |
| 151 | }, | 152 | }, |
| 152 | - } as VxeTableGridOptions<${simpleClassName}Api.${subSimpleClassName}>, | 153 | + } as VxeTableGridOptions<${apiName}.${subSimpleClassName}>, |
| 153 | #if (${table.templateType} == 11 && $deleteBatchEnable) | 154 | #if (${table.templateType} == 11 && $deleteBatchEnable) |
| 154 | gridEvents:{ | 155 | gridEvents:{ |
| 155 | checkboxAll: handleRowCheckboxChange, | 156 | checkboxAll: handleRowCheckboxChange, |
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/data.ts.vm
| @@ -3,7 +3,7 @@ import type { VbenFormSchema } from '#/adapter/form'; | @@ -3,7 +3,7 @@ import type { VbenFormSchema } from '#/adapter/form'; | ||
| 3 | import type { VxeTableGridOptions } from '#/adapter/vxe-table'; | 3 | import type { VxeTableGridOptions } from '#/adapter/vxe-table'; |
| 4 | import type { ${apiName} } from '#/api/${table.moduleName}/${table.businessName}'; | 4 | import type { ${apiName} } from '#/api/${table.moduleName}/${table.businessName}'; |
| 5 | 5 | ||
| 6 | -import { DICT_TYPE, getDictOptions, getRangePickerDefaultProps, } from '#/utils'; | 6 | +import { DICT_TYPE, getDictOptions, getRangePickerDefaultProps } from '#/utils'; |
| 7 | #if(${table.templateType} == 2)## 树表需要导入这些 | 7 | #if(${table.templateType} == 2)## 树表需要导入这些 |
| 8 | import { get${simpleClassName}List } from '#/api/${table.moduleName}/${table.businessName}'; | 8 | import { get${simpleClassName}List } from '#/api/${table.moduleName}/${table.businessName}'; |
| 9 | import { handleTree } from '@vben/utils'; | 9 | import { handleTree } from '@vben/utils'; |
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/index.vue.vm
| @@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
| 3 | import type { VxeTableGridOptions } from '#/adapter/vxe-table'; | 3 | import type { VxeTableGridOptions } from '#/adapter/vxe-table'; |
| 4 | import type { ${apiName} } from '#/api/${table.moduleName}/${table.businessName}'; | 4 | import type { ${apiName} } from '#/api/${table.moduleName}/${table.businessName}'; |
| 5 | 5 | ||
| 6 | -import { ref#if ($table.templateType == 2), computed#end } from 'vue'; | 6 | +import { ref } from 'vue'; |
| 7 | 7 | ||
| 8 | import {#if ($table.templateType != 2 && $deleteBatchEnable) confirm,#end Page, useVbenModal } from '@vben/common-ui'; | 8 | import {#if ($table.templateType != 2 && $deleteBatchEnable) confirm,#end Page, useVbenModal } from '@vben/common-ui'; |
| 9 | import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; | 9 | import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; |