Эх сурвалжийг харах

Merge remote-tracking branch 'origin/master-jdk17' into master-jdk17

YunaiV 5 сар өмнө
parent
commit
3140ec8960

+ 9 - 88
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 { 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 type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
 
 
 import { z } from '#/adapter/form';
 import { z } from '#/adapter/form';
@@ -12,9 +12,6 @@ import {
 import { get${simpleClassName}List } from '#/api/${table.moduleName}/${table.businessName}';
 import { get${simpleClassName}List } from '#/api/${table.moduleName}/${table.businessName}';
 import { handleTree } from '@vben/utils';
 import { handleTree } from '@vben/utils';
 #end
 #end
-import { useAccess } from '@vben/access';
-
-const { hasAccessByCodes } = useAccess();
 
 
 /** 新增/修改的表单 */
 /** 新增/修改的表单 */
 export function useFormSchema(): VbenFormSchema[] {
 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 [
   return [
 #if ($table.templateType != 2 && $deleteBatchEnable)
 #if ($table.templateType != 2 && $deleteBatchEnable)
   { type: 'checkbox', width: 40 },
   { type: 'checkbox', width: 40 },
@@ -223,43 +218,10 @@ export function useGridColumns(
 #end
 #end
 #end
 #end
     {
     {
-      field: 'operation',
       title: '操作',
       title: '操作',
-      minWidth: 200,
-      align: 'center',
+      width: 200,
       fixed: 'right',
       fixed: 'right',
-      headerAlign: 'center',
-      showOverflow: false,
-      cellRender: {
-        attrs: {
-          nameField: '${columns[0].javaField}',
-          nameTitle: '${table.classComment}',
-          onClick: onActionClick,
-        },
-        name: 'CellOperation',
-        options: [
-#if (${table.templateType} == 2)## 树表特有操作
-          {
-            code: 'append',
-            text: '新增下级',
-            show: hasAccessByCodes(['${table.moduleName}:${simpleClassName_strikeCase}:create']),
-          },
-#end
-          {
-            code: 'edit',
-            show: hasAccessByCodes(['${table.moduleName}:${simpleClassName_strikeCase}:update']),
-          },
-          {
-            code: 'delete',
-            show: hasAccessByCodes(['${table.moduleName}:${simpleClassName_strikeCase}:delete']),
-#if (${table.templateType} == 2)## 树表禁止删除带有子节点的数据
-            disabled: (row: ${simpleClassName}Api.${simpleClassName}) => {
-                return !!(row.children && row.children.length > 0);
-            },
-#end
-          },
-        ],
-      },
+      slots: { default: 'actions' },
     },
     },
   ];
   ];
 }
 }
@@ -427,9 +389,7 @@ export function use${subSimpleClassName}GridFormSchema(): VbenFormSchema[] {
 }
 }
 
 
 /** 列表的字段 */
 /** 列表的字段 */
-export function use${subSimpleClassName}GridColumns(
-    onActionClick?: OnActionClickFn<${simpleClassName}Api.${subSimpleClassName}>,
-): VxeTableGridOptions<${simpleClassName}Api.${subSimpleClassName}>['columns'] {
+export function use${subSimpleClassName}GridColumns(): VxeTableGridOptions<${simpleClassName}Api.${subSimpleClassName}>['columns'] {
     return [
     return [
         #if ($table.templateType != 2 && $deleteBatchEnable)
         #if ($table.templateType != 2 && $deleteBatchEnable)
             { type: 'checkbox', width: 40 },
             { type: 'checkbox', width: 40 },
@@ -455,31 +415,10 @@ export function use${subSimpleClassName}GridColumns(
             #end
             #end
         #end
         #end
         {
         {
-            field: 'operation',
             title: '操作',
             title: '操作',
-            minWidth: 200,
-            align: 'center',
+            width: 200,
             fixed: 'right',
             fixed: 'right',
-            headerAlign: 'center',
-            showOverflow: false,
-            cellRender: {
-                attrs: {
-                    nameField: '${columns[0].javaField}',
-                    nameTitle: '${subTable.classComment}',
-                    onClick: onActionClick,
-                },
-                name: 'CellOperation',
-                options: [
-                    {
-                        code: 'edit',
-                        show: hasAccessByCodes(['${table.moduleName}:${simpleClassName_strikeCase}:update']),
-                    },
-                    {
-                        code: 'delete',
-                        show: hasAccessByCodes(['${table.moduleName}:${simpleClassName_strikeCase}:delete']),
-                    },
-                ],
-            },
+            slots: { default: 'actions' },
         },
         },
     ];
     ];
 }
 }
@@ -525,27 +464,10 @@ export function use${subSimpleClassName}GridColumns(
                 #end
                 #end
             #end
             #end
             {
             {
-                field: 'operation',
                 title: '操作',
                 title: '操作',
-                minWidth: 60,
-                align: 'center',
+                width: 200,
                 fixed: 'right',
                 fixed: 'right',
-                headerAlign: 'center',
-                showOverflow: false,
-                cellRender: {
-                    attrs: {
-                        nameField: '${columns[0].javaField}',
-                        nameTitle: '${table.classComment}',
-                        onClick: onActionClick,
-                    },
-                    name: 'CellOperation',
-                    options: [
-                        {
-                            code: 'delete',
-                            show: hasAccessByCodes(['${table.moduleName}:${simpleClassName_strikeCase}:delete']),
-                        },
-                    ],
-                },
+                slots: { default: 'actions' },
             },
             },
         ];
         ];
     }
     }
@@ -680,7 +602,6 @@ export function use${subSimpleClassName}GridColumns(
             #end
             #end
         ];
         ];
     }
     }
-
     #end
     #end
 #end
 #end
 #end
 #end

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

@@ -1,10 +1,9 @@
 <script lang="ts" setup>
 <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 type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
 
 
 import { Page, useVbenModal } from '@vben/common-ui';
 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';
 import Form from './modules/form.vue';
 
 
 ## 特殊:主子表专属逻辑
 ## 特殊:主子表专属逻辑
@@ -12,13 +11,13 @@ import Form from './modules/form.vue';
     #foreach ($subSimpleClassName in $subSimpleClassNames)
     #foreach ($subSimpleClassName in $subSimpleClassNames)
     #set ($index = $foreach.count - 1)
     #set ($index = $foreach.count - 1)
     #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index))
     #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index))
-    import ${subSimpleClassName}List from './modules/${subSimpleClassName_strikeCase}-list.vue'
+import ${subSimpleClassName}List from './modules/${subSimpleClassName_strikeCase}-list.vue'
     #end
     #end
 #end
 #end
 
 
-import { ref, h, computed } from 'vue';
+import { ref, computed } from 'vue';
 import { $t } from '#/locales';
 import { $t } from '#/locales';
-import { useVbenVxeGrid } from '#/adapter/vxe-table';
+import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
 #if (${table.templateType} == 2)## 树表接口
 #if (${table.templateType} == 2)## 树表接口
 import { get${simpleClassName}List, delete${simpleClassName}, export${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}';
 import { get${simpleClassName}List, delete${simpleClassName}, export${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}';
 #else## 标准表接口
 #else## 标准表接口
@@ -60,32 +59,34 @@ function onRefresh() {
 }
 }
 
 
 /** 创建${table.classComment} */
 /** 创建${table.classComment} */
-function onCreate() {
+function handleCreate() {
   formModalApi.setData({}).open();
   formModalApi.setData({}).open();
 }
 }
 
 
 /** 编辑${table.classComment} */
 /** 编辑${table.classComment} */
-function onEdit(row: ${simpleClassName}Api.${simpleClassName}) {
+function handleEdit(row: ${simpleClassName}Api.${simpleClassName}) {
   formModalApi.setData(row).open();
   formModalApi.setData(row).open();
 }
 }
 
 
 #if (${table.templateType} == 2)## 树表特有:新增下级
 #if (${table.templateType} == 2)## 树表特有:新增下级
 /** 新增下级${table.classComment} */
 /** 新增下级${table.classComment} */
-function onAppend(row: ${simpleClassName}Api.${simpleClassName}) {
+function handleAppend(row: ${simpleClassName}Api.${simpleClassName}) {
   formModalApi.setData({ ${treeParentColumn.javaField}: row.id }).open();
   formModalApi.setData({ ${treeParentColumn.javaField}: row.id }).open();
 }
 }
 #end
 #end
 
 
 /** 删除${table.classComment} */
 /** 删除${table.classComment} */
-async function onDelete(row: ${simpleClassName}Api.${simpleClassName}) {
+async function handleDelete(row: ${simpleClassName}Api.${simpleClassName}) {
   const hideLoading = message.loading({
   const hideLoading = message.loading({
     content: $t('ui.actionMessage.deleting', [row.id]),
     content: $t('ui.actionMessage.deleting', [row.id]),
-    duration: 0,
-    key: 'action_process_msg',
+    key: 'action_key_msg',
   });
   });
   try {
   try {
     await delete${simpleClassName}(row.id as number);
     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();
     onRefresh();
   } finally {
   } finally {
     hideLoading();
     hideLoading();
@@ -94,15 +95,17 @@ async function onDelete(row: ${simpleClassName}Api.${simpleClassName}) {
 
 
 #if ($table.templateType != 2 && $deleteBatchEnable)
 #if ($table.templateType != 2 && $deleteBatchEnable)
 /** 批量删除${table.classComment} */
 /** 批量删除${table.classComment} */
-async function onDeleteBatch() {
+async function handleDeleteBatch() {
   const hideLoading = message.loading({
   const hideLoading = message.loading({
     content: $t('ui.actionMessage.deleting'),
     content: $t('ui.actionMessage.deleting'),
-    duration: 0,
-    key: 'action_process_msg',
+    key: 'action_key_msg',
   });
   });
   try {
   try {
     await delete${simpleClassName}ListByIds(deleteIds.value);
     await delete${simpleClassName}ListByIds(deleteIds.value);
-    message.success( $t('ui.actionMessage.deleteSuccess') );
+    message.success({
+      content: $t('ui.actionMessage.deleteSuccess'),
+      key: 'action_key_msg',
+    });
     onRefresh();
     onRefresh();
   } finally {
   } finally {
     hideLoading();
     hideLoading();
@@ -120,40 +123,17 @@ function setDeleteIds({
 #end
 #end
 
 
 /** 导出表格 */
 /** 导出表格 */
-async function onExport() {
+async function handleExport() {
   const data = await export${simpleClassName}(await gridApi.formApi.getValues());
   const data = await export${simpleClassName}(await gridApi.formApi.getValues());
   downloadFileFromBlobPart({ fileName: '${table.classComment}.xls', source: data });
   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({
 const [Grid, gridApi] = useVbenVxeGrid({
   formOptions: {
   formOptions: {
     schema: useGridFormSchema(),
     schema: useGridFormSchema(),
   },
   },
   gridOptions: {
   gridOptions: {
-    columns: useGridColumns(onActionClick),
+    columns: useGridColumns(),
 #if (${table.templateType} == 11)
 #if (${table.templateType} == 11)
     height: '600px',
     height: '600px',
 #else
 #else
@@ -245,36 +225,75 @@ const [Grid, gridApi] = useVbenVxeGrid({
           </template>
           </template>
         #end
         #end
       <template #toolbar-tools>
       <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',
+              danger: true,
+              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>
       </template>
     </Grid>
     </Grid>
 
 

+ 146 - 131
yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/modules/list_sub_erp.vue.vm

@@ -6,45 +6,43 @@
 #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($subIndex))
 #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($subIndex))
 #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
 #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
 <script lang="ts" setup>
 <script lang="ts" setup>
-  import type { OnActionClickParams, VxeTableGridOptions } from '#/adapter/vxe-table';
-  import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
+import type { VxeTableGridOptions } from '#/adapter/vxe-table';
+import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
 
 
 #if ($table.templateType == 11) ## erp
 #if ($table.templateType == 11) ## erp
-  import ${subSimpleClassName}Form from './${subSimpleClassName_strikeCase}-form.vue'
+import ${subSimpleClassName}Form from './${subSimpleClassName_strikeCase}-form.vue'
 #end
 #end
-  import { useVbenModal } from '@vben/common-ui';
-  import { Button, message } from 'ant-design-vue';
-  import { Plus, Trash2 } from '@vben/icons';
-  import { ref, computed, h, nextTick,watch } from 'vue';
-  import { $t } from '#/locales';
-  import { useVbenVxeGrid } from '#/adapter/vxe-table';
-
+import { useVbenModal } from '@vben/common-ui';
+import { message } from 'ant-design-vue';
+import { ref, computed, nextTick,watch } from 'vue';
+import { $t } from '#/locales';
+import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
 
 
 #if ($table.templateType == 11) ## erp
 #if ($table.templateType == 11) ## erp
-  import { delete${subSimpleClassName},#if ($deleteBatchEnable) delete${subSimpleClassName}ListByIds,#end get${subSimpleClassName}Page } from '#/api/${table.moduleName}/${table.businessName}';
-  import { use${subSimpleClassName}GridFormSchema, use${subSimpleClassName}GridColumns } from '../data';
-  import { isEmpty } from '@vben/utils';
-  #else
-  #if ($subTable.subJoinMany) ## 一对多
-  import { get${subSimpleClassName}ListBy${SubJoinColumnName} } from '#/api/${table.moduleName}/${table.businessName}';
-  #else
-  import { get${subSimpleClassName}By${SubJoinColumnName} } from '#/api/${table.moduleName}/${table.businessName}';
-  #end
-  import { use${subSimpleClassName}GridColumns } from '../data';
+import { delete${subSimpleClassName},#if ($deleteBatchEnable) delete${subSimpleClassName}ListByIds,#end get${subSimpleClassName}Page } from '#/api/${table.moduleName}/${table.businessName}';
+import { use${subSimpleClassName}GridFormSchema, use${subSimpleClassName}GridColumns } from '../data';
+import { isEmpty } from '@vben/utils';
+#else
+#if ($subTable.subJoinMany) ## 一对多
+import { get${subSimpleClassName}ListBy${SubJoinColumnName} } from '#/api/${table.moduleName}/${table.businessName}';
+#else
+import { get${subSimpleClassName}By${SubJoinColumnName} } from '#/api/${table.moduleName}/${table.businessName}';
+#end
+import { use${subSimpleClassName}GridColumns } from '../data';
 #end
 #end
 
 
 const props = defineProps<{
 const props = defineProps<{
-      ${subJoinColumn.javaField}?: number // ${subJoinColumn.columnComment}(主表的关联字段)
+  ${subJoinColumn.javaField}?: number // ${subJoinColumn.columnComment}(主表的关联字段)
 }>()
 }>()
 
 
 #if ($table.templateType == 11) ## erp
 #if ($table.templateType == 11) ## erp
-  const [FormModal, formModalApi] = useVbenModal({
-    connectedComponent: ${subSimpleClassName}Form,
-    destroyOnClose: true,
-  });
+const [FormModal, formModalApi] = useVbenModal({
+  connectedComponent: ${subSimpleClassName}Form,
+  destroyOnClose: true,
+});
 
 
 /** 创建${subTable.classComment} */
 /** 创建${subTable.classComment} */
-function onCreate() {
+function handleCreate() {
   if (!props.${subJoinColumn.javaField}){
   if (!props.${subJoinColumn.javaField}){
     message.warning("请先选择一个${table.classComment}!")
     message.warning("请先选择一个${table.classComment}!")
     return
     return
@@ -53,20 +51,22 @@ function onCreate() {
 }
 }
 
 
 /** 编辑${subTable.classComment} */
 /** 编辑${subTable.classComment} */
-function onEdit(row: ${simpleClassName}Api.${subSimpleClassName}) {
+function handleEdit(row: ${simpleClassName}Api.${subSimpleClassName}) {
   formModalApi.setData(row).open();
   formModalApi.setData(row).open();
 }
 }
 
 
 /** 删除${subTable.classComment} */
 /** 删除${subTable.classComment} */
-async function onDelete(row: ${simpleClassName}Api.${subSimpleClassName}) {
+async function handleDelete(row: ${simpleClassName}Api.${subSimpleClassName}) {
   const hideLoading = message.loading({
   const hideLoading = message.loading({
     content: $t('ui.actionMessage.deleting', [row.id]),
     content: $t('ui.actionMessage.deleting', [row.id]),
-    duration: 0,
     key: 'action_process_msg',
     key: 'action_process_msg',
   });
   });
   try {
   try {
     await delete${subSimpleClassName}(row.id as number);
     await delete${subSimpleClassName}(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();
     onRefresh();
   } finally {
   } finally {
     hideLoading();
     hideLoading();
@@ -75,15 +75,17 @@ async function onDelete(row: ${simpleClassName}Api.${subSimpleClassName}) {
 
 
 #if ($deleteBatchEnable)
 #if ($deleteBatchEnable)
 /** 批量删除${subTable.classComment} */
 /** 批量删除${subTable.classComment} */
-async function onDeleteBatch() {
+async function handleDeleteBatch() {
   const hideLoading = message.loading({
   const hideLoading = message.loading({
     content: $t('ui.actionMessage.deleting'),
     content: $t('ui.actionMessage.deleting'),
-    duration: 0,
-    key: 'action_process_msg',
+    key: 'action_key_msg',
   });
   });
   try {
   try {
     await delete${subSimpleClassName}ListByIds(deleteIds.value);
     await delete${subSimpleClassName}ListByIds(deleteIds.value);
-    message.success( $t('ui.actionMessage.deleteSuccess') );
+    message.success({
+      content: $t('ui.actionMessage.deleteSuccess', [row.id]),
+      key: 'action_key_msg',
+    });
     onRefresh();
     onRefresh();
   } finally {
   } finally {
     hideLoading();
     hideLoading();
@@ -100,103 +102,86 @@ function setDeleteIds({
 }
 }
 #end
 #end
 
 
-/** 表格操作按钮的回调函数 */
-function onActionClick({
- code,
- row,
-}: OnActionClickParams<${simpleClassName}Api.${subSimpleClassName}>) {
-  switch (code) {
-    case 'edit': {
-      onEdit(row);
-      break;
-    }
-    case 'delete': {
-      onDelete(row);
-      break;
-    }
-  }
-}
-
 #end
 #end
-  const [Grid, gridApi] = useVbenVxeGrid({
+const [Grid, gridApi] = useVbenVxeGrid({
 #if ($table.templateType == 11)
 #if ($table.templateType == 11)
-    formOptions: {
-      schema: use${subSimpleClassName}GridFormSchema(),
-    },
+  formOptions: {
+    schema: use${subSimpleClassName}GridFormSchema(),
+  },
 #end
 #end
-    gridOptions: {
+  gridOptions: {
 #if ($table.templateType == 11)
 #if ($table.templateType == 11)
-    columns: use${subSimpleClassName}GridColumns(onActionClick),
-      proxyConfig: {
-        ajax: {
-          query: async ({ page }, formValues) => {
-              if (!props.${subJoinColumn.javaField}){
-                  return []
-              }
-            return await get${subSimpleClassName}Page({
-              pageNo: page.currentPage,
-              pageSize: page.pageSize,
-              ${subJoinColumn.javaField}: props.${subJoinColumn.javaField},
-              ...formValues,
-            });
-          },
+  columns: use${subSimpleClassName}GridColumns(),
+    proxyConfig: {
+      ajax: {
+        query: async ({ page }, formValues) => {
+          if (!props.${subJoinColumn.javaField}){
+              return []
+          }
+          return await get${subSimpleClassName}Page({
+            pageNo: page.currentPage,
+            pageSize: page.pageSize,
+            ${subJoinColumn.javaField}: props.${subJoinColumn.javaField},
+            ...formValues,
+          });
         },
         },
       },
       },
-    pagerConfig: {
-        enabled: true,
-    },
-    toolbarConfig: {
-        refresh: { code: 'query' },
-        search: true,
     },
     },
+  pagerConfig: {
+    enabled: true,
+  },
+  toolbarConfig: {
+    refresh: { code: 'query' },
+    search: true,
+  },
 #else
 #else
-    columns: use${subSimpleClassName}GridColumns(),
-    pagerConfig: {
-        enabled: false,
-    },
-    toolbarConfig: {
-        enabled: false,
-    },
+  columns: use${subSimpleClassName}GridColumns(),
+  pagerConfig: {
+    nabled: false,
+  },
+  toolbarConfig: {
+    enabled: false,
+  },
 #end
 #end
-    height: '600px',
-    rowConfig: {
-        keyField: 'id',
-        isHover: true,
-    },
-    } as VxeTableGridOptions<${simpleClassName}Api.${subSimpleClassName}>,
-    #if (${table.templateType} == 11 && $deleteBatchEnable)
-    gridEvents:{
-      checkboxAll: setDeleteIds,
-      checkboxChange: setDeleteIds,
-    }
-    #end
-  });
+  height: '600px',
+  rowConfig: {
+    keyField: 'id',
+    isHover: true,
+  },
+  } as VxeTableGridOptions<${simpleClassName}Api.${subSimpleClassName}>,
+  #if (${table.templateType} == 11 && $deleteBatchEnable)
+  gridEvents:{
+    checkboxAll: setDeleteIds,
+    checkboxChange: setDeleteIds,
+  }
+  #end
+});
 
 
 /** 刷新表格 */
 /** 刷新表格 */
-const onRefresh = async ()=> {
+async function onRefresh() {
 #if ($table.templateType == 11) ## erp
 #if ($table.templateType == 11) ## erp
-    await gridApi.query();
+  await gridApi.query();
 #else
 #else
-    #if ($subTable.subJoinMany) ## 一对多
-    await gridApi.grid.loadData(await get${subSimpleClassName}ListBy${SubJoinColumnName}(props.${subJoinColumn.javaField}!));
-    #else
-    await gridApi.grid.loadData([await get${subSimpleClassName}By${SubJoinColumnName}(props.${subJoinColumn.javaField}!)]);
-    #end
+  #if ($subTable.subJoinMany) ## 一对多
+  await gridApi.grid.loadData(await get${subSimpleClassName}ListBy${SubJoinColumnName}(props.${subJoinColumn.javaField}!));
+  #else
+  await gridApi.grid.loadData([await get${subSimpleClassName}By${SubJoinColumnName}(props.${subJoinColumn.javaField}!)]);
+  #end
 #end
 #end
 }
 }
 
 
-  /** 监听主表的关联字段的变化,加载对应的子表数据 */
-  watch(
-      () => props.${subJoinColumn.javaField},
-      async (val) => {
-        if (!val) {
-          return;
-        }
-        await nextTick();
-        await onRefresh()
-      },
-      { immediate: true },
-  );
+/** 监听主表的关联字段的变化,加载对应的子表数据 */
+watch(
+  () => props.${subJoinColumn.javaField},
+  async (val) => {
+    if (!val) {
+      return;
+    }
+    await nextTick();
+    await onRefresh()
+  },
+  { immediate: true },
+);
 </script>
 </script>
 
 
 <template>
 <template>
@@ -204,22 +189,52 @@ const onRefresh = async ()=> {
       <FormModal @success="onRefresh" />
       <FormModal @success="onRefresh" />
       <Grid table-title="${subTable.classComment}列表">
       <Grid table-title="${subTable.classComment}列表">
         <template #toolbar-tools>
         <template #toolbar-tools>
-          <Button :icon="h(Plus)" type="primary" @click="onCreate" v-access:code="['${table.moduleName}:${simpleClassName_strikeCase}:create']">
-            {{ $t('ui.actionTitle.create', ['${subTable.classComment}']) }}
-          </Button>
-            #if ($table.templateType == 11 && $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="[
+              {
+                label: $t('ui.actionTitle.create', ['${table.classComment}']),
+                type: 'primary',
+                icon: ACTION_ICON.ADD,
+                auth: ['${table.moduleName}:${simpleClassName_strikeCase}:create'],
+                onClick: handleCreate,
+              },
+              #if ($table.templateType == 11 && $deleteBatchEnable)
+              {
+                label: $t('ui.actionTitle.deleteBatch'),
+                type: 'primary',
+                danger: true,
+                icon: ACTION_ICON.DELETE,
+                disabled: isEmpty(deleteIds),
+                auth: ['${table.moduleName}:${simpleClassName_strikeCase}:delete'],
+                onClick: handleDeleteBatch,
+              },
+              #end
+            ]"
+          />
+        </template>
+        <template #actions="{ row }">
+          <TableAction
+            :actions="[
+              {
+                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>
         </template>
       </Grid>
       </Grid>
     #else
     #else