Commit 39e7d782a759367d609ee73946fd79cfdd8ab4c7

Authored by xingyu4j
1 parent 73e4f831

perf: vben5 代码生成 使用 table action

yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/data.ts.vm
1 import type { VbenFormSchema } from '#/adapter/form'; 1 import type { VbenFormSchema } from '#/adapter/form';
2 -import type { OnActionClickFn, VxeTableGridOptions } from '#/adapter/vxe-table'; 2 +import type { VxeTableGridOptions } from '#/adapter/vxe-table';
3 import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}'; 3 import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
4 4
5 import { z } from '#/adapter/form'; 5 import { z } from '#/adapter/form';
@@ -12,9 +12,6 @@ import { @@ -12,9 +12,6 @@ import {
12 import { get${simpleClassName}List } from '#/api/${table.moduleName}/${table.businessName}'; 12 import { get${simpleClassName}List } from '#/api/${table.moduleName}/${table.businessName}';
13 import { handleTree } from '@vben/utils'; 13 import { handleTree } from '@vben/utils';
14 #end 14 #end
15 -import { useAccess } from '@vben/access';  
16 -  
17 -const { hasAccessByCodes } = useAccess();  
18 15
19 /** 新增/修改的表单 */ 16 /** 新增/修改的表单 */
20 export function useFormSchema(): VbenFormSchema[] { 17 export function useFormSchema(): VbenFormSchema[] {
@@ -189,9 +186,7 @@ export function useGridFormSchema(): VbenFormSchema[] { @@ -189,9 +186,7 @@ export function useGridFormSchema(): VbenFormSchema[] {
189 } 186 }
190 187
191 /** 列表的字段 */ 188 /** 列表的字段 */
192 -export function useGridColumns(  
193 - onActionClick?: OnActionClickFn<${simpleClassName}Api.${simpleClassName}>,  
194 -): VxeTableGridOptions<${simpleClassName}Api.${simpleClassName}>['columns'] { 189 +export function useGridColumns(): VxeTableGridOptions<${simpleClassName}Api.${simpleClassName}>['columns'] {
195 return [ 190 return [
196 #if ($table.templateType != 2 && $deleteBatchEnable) 191 #if ($table.templateType != 2 && $deleteBatchEnable)
197 { type: 'checkbox', width: 40 }, 192 { type: 'checkbox', width: 40 },
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/index.vue.vm
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 -import type { OnActionClickParams, VxeTableGridOptions } from '#/adapter/vxe-table'; 2 +import type { VxeTableGridOptions } from '#/adapter/vxe-table';
3 import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}'; 3 import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
4 4
5 import { Page, useVbenModal } from '@vben/common-ui'; 5 import { Page, useVbenModal } from '@vben/common-ui';
6 -import { Button, message,Tabs } from 'ant-design-vue';  
7 -import { Download, Plus, Trash2 } from '@vben/icons'; 6 +import { message,Tabs } from 'ant-design-vue';
8 import Form from './modules/form.vue'; 7 import Form from './modules/form.vue';
9 8
10 ## 特殊:主子表专属逻辑 9 ## 特殊:主子表专属逻辑
@@ -16,9 +15,9 @@ import Form from &#39;./modules/form.vue&#39;; @@ -16,9 +15,9 @@ import Form from &#39;./modules/form.vue&#39;;
16 #end 15 #end
17 #end 16 #end
18 17
19 -import { ref, h, computed } from 'vue'; 18 +import { ref, computed } from 'vue';
20 import { $t } from '#/locales'; 19 import { $t } from '#/locales';
21 -import { useVbenVxeGrid } from '#/adapter/vxe-table'; 20 +import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
22 #if (${table.templateType} == 2)## 树表接口 21 #if (${table.templateType} == 2)## 树表接口
23 import { get${simpleClassName}List, delete${simpleClassName}, export${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}'; 22 import { get${simpleClassName}List, delete${simpleClassName}, export${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}';
24 #else## 标准表接口 23 #else## 标准表接口
@@ -60,32 +59,34 @@ function onRefresh() { @@ -60,32 +59,34 @@ function onRefresh() {
60 } 59 }
61 60
62 /** 创建${table.classComment} */ 61 /** 创建${table.classComment} */
63 -function onCreate() { 62 +function handleCreate() {
64 formModalApi.setData({}).open(); 63 formModalApi.setData({}).open();
65 } 64 }
66 65
67 /** 编辑${table.classComment} */ 66 /** 编辑${table.classComment} */
68 -function onEdit(row: ${simpleClassName}Api.${simpleClassName}) { 67 +function handleEdit(row: ${simpleClassName}Api.${simpleClassName}) {
69 formModalApi.setData(row).open(); 68 formModalApi.setData(row).open();
70 } 69 }
71 70
72 #if (${table.templateType} == 2)## 树表特有:新增下级 71 #if (${table.templateType} == 2)## 树表特有:新增下级
73 /** 新增下级${table.classComment} */ 72 /** 新增下级${table.classComment} */
74 -function onAppend(row: ${simpleClassName}Api.${simpleClassName}) { 73 +function handleAppend(row: ${simpleClassName}Api.${simpleClassName}) {
75 formModalApi.setData({ ${treeParentColumn.javaField}: row.id }).open(); 74 formModalApi.setData({ ${treeParentColumn.javaField}: row.id }).open();
76 } 75 }
77 #end 76 #end
78 77
79 /** 删除${table.classComment} */ 78 /** 删除${table.classComment} */
80 -async function onDelete(row: ${simpleClassName}Api.${simpleClassName}) { 79 +async function handleDelete(row: ${simpleClassName}Api.${simpleClassName}) {
81 const hideLoading = message.loading({ 80 const hideLoading = message.loading({
82 content: $t('ui.actionMessage.deleting', [row.id]), 81 content: $t('ui.actionMessage.deleting', [row.id]),
83 - duration: 0,  
84 - key: 'action_process_msg', 82 + key: 'action_key_msg',
85 }); 83 });
86 try { 84 try {
87 await delete${simpleClassName}(row.id as number); 85 await delete${simpleClassName}(row.id as number);
88 - message.success( $t('ui.actionMessage.deleteSuccess', [row.id]) ); 86 + message.success({
  87 + content: $t('ui.actionMessage.deleteSuccess', [row.id]),
  88 + key: 'action_key_msg',
  89 + });
89 onRefresh(); 90 onRefresh();
90 } finally { 91 } finally {
91 hideLoading(); 92 hideLoading();
@@ -94,15 +95,17 @@ async function onDelete(row: ${simpleClassName}Api.${simpleClassName}) { @@ -94,15 +95,17 @@ async function onDelete(row: ${simpleClassName}Api.${simpleClassName}) {
94 95
95 #if ($table.templateType != 2 && $deleteBatchEnable) 96 #if ($table.templateType != 2 && $deleteBatchEnable)
96 /** 批量删除${table.classComment} */ 97 /** 批量删除${table.classComment} */
97 -async function onDeleteBatch() { 98 +async function handleDeleteBatch() {
98 const hideLoading = message.loading({ 99 const hideLoading = message.loading({
99 content: $t('ui.actionMessage.deleting'), 100 content: $t('ui.actionMessage.deleting'),
100 - duration: 0,  
101 - key: 'action_process_msg', 101 + key: 'action_key_msg',
102 }); 102 });
103 try { 103 try {
104 await delete${simpleClassName}ListByIds(deleteIds.value); 104 await delete${simpleClassName}ListByIds(deleteIds.value);
105 - message.success( $t('ui.actionMessage.deleteSuccess') ); 105 + message.success({
  106 + content: $t('ui.actionMessage.deleteSuccess'),
  107 + key: 'action_key_msg',
  108 + });
106 onRefresh(); 109 onRefresh();
107 } finally { 110 } finally {
108 hideLoading(); 111 hideLoading();
@@ -120,40 +123,17 @@ function setDeleteIds({ @@ -120,40 +123,17 @@ function setDeleteIds({
120 #end 123 #end
121 124
122 /** 导出表格 */ 125 /** 导出表格 */
123 -async function onExport() { 126 +async function handleExport() {
124 const data = await export${simpleClassName}(await gridApi.formApi.getValues()); 127 const data = await export${simpleClassName}(await gridApi.formApi.getValues());
125 downloadFileFromBlobPart({ fileName: '${table.classComment}.xls', source: data }); 128 downloadFileFromBlobPart({ fileName: '${table.classComment}.xls', source: data });
126 } 129 }
127 130
128 -/** 表格操作按钮的回调函数 */  
129 -function onActionClick({  
130 - code,  
131 - row,  
132 -}: OnActionClickParams<${simpleClassName}Api.${simpleClassName}>) {  
133 - switch (code) {  
134 - #if (${table.templateType} == 2)## 树表特有:新增下级  
135 - case 'append': {  
136 - onAppend(row);  
137 - break;  
138 - }  
139 - #end  
140 - case 'edit': {  
141 - onEdit(row);  
142 - break;  
143 - }  
144 - case 'delete': {  
145 - onDelete(row);  
146 - break;  
147 - }  
148 - }  
149 -}  
150 -  
151 const [Grid, gridApi] = useVbenVxeGrid({ 131 const [Grid, gridApi] = useVbenVxeGrid({
152 formOptions: { 132 formOptions: {
153 schema: useGridFormSchema(), 133 schema: useGridFormSchema(),
154 }, 134 },
155 gridOptions: { 135 gridOptions: {
156 - columns: useGridColumns(onActionClick), 136 + columns: useGridColumns(),
157 #if (${table.templateType} == 11) 137 #if (${table.templateType} == 11)
158 height: '600px', 138 height: '600px',
159 #else 139 #else
@@ -245,36 +225,74 @@ const [Grid, gridApi] = useVbenVxeGrid({ @@ -245,36 +225,74 @@ const [Grid, gridApi] = useVbenVxeGrid({
245 </template> 225 </template>
246 #end 226 #end
247 <template #toolbar-tools> 227 <template #toolbar-tools>
248 -#if (${table.templateType} == 2)## 树表特有:展开/收缩按钮  
249 - <Button @click="toggleExpand" class="mr-2">  
250 - {{ isExpanded ? '收缩' : '展开' }}  
251 - </Button>  
252 -#end  
253 - <Button :icon="h(Plus)" type="primary" @click="onCreate" v-access:code="['${table.moduleName}:${simpleClassName_strikeCase}:create']">  
254 - {{ $t('ui.actionTitle.create', ['${table.classComment}']) }}  
255 - </Button>  
256 - <Button  
257 - :icon="h(Download)"  
258 - type="primary"  
259 - class="ml-2"  
260 - @click="onExport"  
261 - v-access:code="['${table.moduleName}:${simpleClassName_strikeCase}:export']"  
262 - >  
263 - {{ $t('ui.actionTitle.export') }}  
264 - </Button>  
265 -#if ($table.templateType != 2 && $deleteBatchEnable)  
266 - <Button  
267 - :icon="h(Trash2)"  
268 - type="primary"  
269 - danger  
270 - class="ml-2"  
271 - :disabled="isEmpty(deleteIds)"  
272 - @click="onDeleteBatch"  
273 - v-access:code="['${table.moduleName}:${simpleClassName_strikeCase}:delete']"  
274 - >  
275 - 批量删除  
276 - </Button>  
277 -#end 228 + <TableAction
  229 + :actions="[
  230 + #if (${table.templateType} == 2)## 树表特有:展开/收缩按钮
  231 + {
  232 + label: isExpanded ? '收缩' : '展开',
  233 + type: 'primary',
  234 + onClick: toggleExpand,
  235 + },
  236 + #end
  237 + {
  238 + label: $t('ui.actionTitle.create', ['${table.classComment}']),
  239 + type: 'primary',
  240 + icon: ACTION_ICON.ADD,
  241 + auth: ['${table.moduleName}:${simpleClassName_strikeCase}:create'],
  242 + onClick: handleCreate,
  243 + },
  244 + {
  245 + label: $t('ui.actionTitle.export'),
  246 + type: 'primary',
  247 + icon: ACTION_ICON.DOWNLOAD,
  248 + auth: ['${table.moduleName}:${simpleClassName_strikeCase}:export'],
  249 + onClick: handleExport,
  250 + },
  251 + #if ($table.templateType != 2 && $deleteBatchEnable)
  252 + {
  253 + label: $t('ui.actionTitle.deleteBatch'),
  254 + type: 'primary',
  255 + icon: ACTION_ICON.DELETE,
  256 + disabled: isEmpty(deleteIds),
  257 + auth: ['${table.moduleName}:${simpleClassName_strikeCase}:delete'],
  258 + onClick: handleDeleteBatch,
  259 + },
  260 + #end
  261 + ]"
  262 + />
  263 + </template>
  264 + <template #actions="{ row }">
  265 + <TableAction
  266 + :actions="[
  267 + #if (${table.templateType} == 2)## 树表特有:新增下级
  268 + {
  269 + label: '新增下级',
  270 + type: 'link',
  271 + icon: ACTION_ICON.ADD,
  272 + auth: ['${table.moduleName}:${simpleClassName_strikeCase}:create'],
  273 + onClick: handleAppend.bind(null, row),
  274 + },
  275 + #end
  276 + {
  277 + label: $t('common.edit'),
  278 + type: 'link',
  279 + icon: ACTION_ICON.EDIT,
  280 + auth: ['${table.moduleName}:${simpleClassName_strikeCase}:update'],
  281 + onClick: handleEdit.bind(null, row),
  282 + },
  283 + {
  284 + label: $t('common.delete'),
  285 + type: 'link',
  286 + danger: true,
  287 + icon: ACTION_ICON.DELETE,
  288 + auth: ['${table.moduleName}:${simpleClassName_strikeCase}:delete'],
  289 + popConfirm: {
  290 + title: $t('ui.actionMessage.deleteConfirm', [row.id]),
  291 + confirm: handleDelete.bind(null, row),
  292 + },
  293 + },
  294 + ]"
  295 + />
278 </template> 296 </template>
279 </Grid> 297 </Grid>
280 298