Răsfoiți Sursa

perf: vben5 代码生成 使用 table action

xingyu4j 5 luni în urmă
părinte
comite
39e7d782a7

+ 2 - 7
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/data.ts.vm

@@ -1,5 +1,5 @@
 import type { VbenFormSchema } from '#/adapter/form';
-import type { OnActionClickFn, VxeTableGridOptions } from '#/adapter/vxe-table';
+import type { VxeTableGridOptions } from '#/adapter/vxe-table';
 import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
 
 import { z } from '#/adapter/form';
@@ -12,9 +12,6 @@ import {
 import { get${simpleClassName}List } from '#/api/${table.moduleName}/${table.businessName}';
 import { handleTree } from '@vben/utils';
 #end
-import { useAccess } from '@vben/access';
-
-const { hasAccessByCodes } = useAccess();
 
 /** 新增/修改的表单 */
 export function useFormSchema(): VbenFormSchema[] {
@@ -189,9 +186,7 @@ export function useGridFormSchema(): VbenFormSchema[] {
 }
 
 /** 列表的字段 */
-export function useGridColumns(
-  onActionClick?: OnActionClickFn<${simpleClassName}Api.${simpleClassName}>,
-): VxeTableGridOptions<${simpleClassName}Api.${simpleClassName}>['columns'] {
+export function useGridColumns(): VxeTableGridOptions<${simpleClassName}Api.${simpleClassName}>['columns'] {
   return [
 #if ($table.templateType != 2 && $deleteBatchEnable)
   { type: 'checkbox', width: 40 },

+ 89 - 71
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/index.vue.vm

@@ -1,10 +1,9 @@
 <script lang="ts" setup>
-import type { OnActionClickParams, VxeTableGridOptions } from '#/adapter/vxe-table';
+import type { VxeTableGridOptions } from '#/adapter/vxe-table';
 import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
 
 import { Page, useVbenModal } from '@vben/common-ui';
-import { Button, message,Tabs } from 'ant-design-vue';
-import { Download, Plus, Trash2 } from '@vben/icons';
+import { message,Tabs } from 'ant-design-vue';
 import Form from './modules/form.vue';
 
 ## 特殊:主子表专属逻辑
@@ -16,9 +15,9 @@ import Form from './modules/form.vue';
     #end
 #end
 
-import { ref, h, computed } from 'vue';
+import { ref, computed } from 'vue';
 import { $t } from '#/locales';
-import { useVbenVxeGrid } from '#/adapter/vxe-table';
+import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
 #if (${table.templateType} == 2)## 树表接口
 import { get${simpleClassName}List, delete${simpleClassName}, export${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}';
 #else## 标准表接口
@@ -60,32 +59,34 @@ function onRefresh() {
 }
 
 /** 创建${table.classComment} */
-function onCreate() {
+function handleCreate() {
   formModalApi.setData({}).open();
 }
 
 /** 编辑${table.classComment} */
-function onEdit(row: ${simpleClassName}Api.${simpleClassName}) {
+function handleEdit(row: ${simpleClassName}Api.${simpleClassName}) {
   formModalApi.setData(row).open();
 }
 
 #if (${table.templateType} == 2)## 树表特有:新增下级
 /** 新增下级${table.classComment} */
-function onAppend(row: ${simpleClassName}Api.${simpleClassName}) {
+function handleAppend(row: ${simpleClassName}Api.${simpleClassName}) {
   formModalApi.setData({ ${treeParentColumn.javaField}: row.id }).open();
 }
 #end
 
 /** 删除${table.classComment} */
-async function onDelete(row: ${simpleClassName}Api.${simpleClassName}) {
+async function handleDelete(row: ${simpleClassName}Api.${simpleClassName}) {
   const hideLoading = message.loading({
     content: $t('ui.actionMessage.deleting', [row.id]),
-    duration: 0,
-    key: 'action_process_msg',
+    key: 'action_key_msg',
   });
   try {
     await delete${simpleClassName}(row.id as number);
-    message.success( $t('ui.actionMessage.deleteSuccess', [row.id]) );
+    message.success({
+      content: $t('ui.actionMessage.deleteSuccess', [row.id]),
+      key: 'action_key_msg',
+    });
     onRefresh();
   } finally {
     hideLoading();
@@ -94,15 +95,17 @@ async function onDelete(row: ${simpleClassName}Api.${simpleClassName}) {
 
 #if ($table.templateType != 2 && $deleteBatchEnable)
 /** 批量删除${table.classComment} */
-async function onDeleteBatch() {
+async function handleDeleteBatch() {
   const hideLoading = message.loading({
     content: $t('ui.actionMessage.deleting'),
-    duration: 0,
-    key: 'action_process_msg',
+    key: 'action_key_msg',
   });
   try {
     await delete${simpleClassName}ListByIds(deleteIds.value);
-    message.success( $t('ui.actionMessage.deleteSuccess') );
+    message.success({
+      content: $t('ui.actionMessage.deleteSuccess'),
+      key: 'action_key_msg',
+    });
     onRefresh();
   } finally {
     hideLoading();
@@ -120,40 +123,17 @@ function setDeleteIds({
 #end
 
 /** 导出表格 */
-async function onExport() {
+async function handleExport() {
   const data = await export${simpleClassName}(await gridApi.formApi.getValues());
   downloadFileFromBlobPart({ fileName: '${table.classComment}.xls', source: data });
 }
 
-/** 表格操作按钮的回调函数 */
-function onActionClick({
-  code,
-  row,
-}: OnActionClickParams<${simpleClassName}Api.${simpleClassName}>) {
-  switch (code) {
-  #if (${table.templateType} == 2)## 树表特有:新增下级
-    case 'append': {
-      onAppend(row);
-      break;
-    }
-  #end
-    case 'edit': {
-      onEdit(row);
-      break;
-    }
-    case 'delete': {
-      onDelete(row);
-      break;
-    }
-  }
-}
-
 const [Grid, gridApi] = useVbenVxeGrid({
   formOptions: {
     schema: useGridFormSchema(),
   },
   gridOptions: {
-    columns: useGridColumns(onActionClick),
+    columns: useGridColumns(),
 #if (${table.templateType} == 11)
     height: '600px',
 #else
@@ -245,36 +225,74 @@ const [Grid, gridApi] = useVbenVxeGrid({
           </template>
         #end
       <template #toolbar-tools>
-#if (${table.templateType} == 2)## 树表特有:展开/收缩按钮
-        <Button @click="toggleExpand" class="mr-2">
-          {{ isExpanded ? '收缩' : '展开' }}
-        </Button>
-#end
-        <Button :icon="h(Plus)" type="primary" @click="onCreate" v-access:code="['${table.moduleName}:${simpleClassName_strikeCase}:create']">
-          {{ $t('ui.actionTitle.create', ['${table.classComment}']) }}
-        </Button>
-        <Button
-          :icon="h(Download)"
-          type="primary"
-          class="ml-2"
-          @click="onExport"
-          v-access:code="['${table.moduleName}:${simpleClassName_strikeCase}:export']"
-        >
-          {{ $t('ui.actionTitle.export') }}
-        </Button>
-#if ($table.templateType != 2 && $deleteBatchEnable)
-        <Button
-            :icon="h(Trash2)"
-            type="primary"
-            danger
-            class="ml-2"
-            :disabled="isEmpty(deleteIds)"
-            @click="onDeleteBatch"
-            v-access:code="['${table.moduleName}:${simpleClassName_strikeCase}:delete']"
-        >
-          批量删除
-        </Button>
-#end
+        <TableAction
+          :actions="[
+              #if (${table.templateType} == 2)## 树表特有:展开/收缩按钮
+              {
+                label: isExpanded ? '收缩' : '展开',
+                type: 'primary',
+                onClick: toggleExpand,
+              },
+              #end
+              {
+                label: $t('ui.actionTitle.create', ['${table.classComment}']),
+                type: 'primary',
+                icon: ACTION_ICON.ADD,
+                auth: ['${table.moduleName}:${simpleClassName_strikeCase}:create'],
+                onClick: handleCreate,
+              },
+              {
+                label: $t('ui.actionTitle.export'),
+                type: 'primary',
+                icon: ACTION_ICON.DOWNLOAD,
+                auth: ['${table.moduleName}:${simpleClassName_strikeCase}:export'],
+                onClick: handleExport,
+              },
+              #if ($table.templateType != 2 && $deleteBatchEnable)
+              {
+                label: $t('ui.actionTitle.deleteBatch'),
+                type: 'primary',
+                icon: ACTION_ICON.DELETE,
+                disabled: isEmpty(deleteIds),
+                auth: ['${table.moduleName}:${simpleClassName_strikeCase}:delete'],
+                onClick: handleDeleteBatch,
+              },
+              #end
+            ]"
+        />
+      </template>
+      <template #actions="{ row }">
+        <TableAction
+          :actions="[
+            #if (${table.templateType} == 2)## 树表特有:新增下级
+            {
+              label: '新增下级',
+              type: 'link',
+              icon: ACTION_ICON.ADD,
+              auth: ['${table.moduleName}:${simpleClassName_strikeCase}:create'],
+              onClick: handleAppend.bind(null, row),
+            },
+            #end
+            {
+              label: $t('common.edit'),
+              type: 'link',
+              icon: ACTION_ICON.EDIT,
+              auth: ['${table.moduleName}:${simpleClassName_strikeCase}:update'],
+              onClick: handleEdit.bind(null, row),
+            },
+            {
+              label: $t('common.delete'),
+              type: 'link',
+              danger: true,
+              icon: ACTION_ICON.DELETE,
+              auth: ['${table.moduleName}:${simpleClassName_strikeCase}:delete'],
+              popConfirm: {
+                title: $t('ui.actionMessage.deleteConfirm', [row.id]),
+                confirm: handleDelete.bind(null, row),
+              },
+            },
+          ]"
+        />
       </template>
     </Grid>