mirror of
				https://github.com/YunaiV/ruoyi-vue-pro.git
				synced 2025-10-31 18:49:06 +08:00 
			
		
		
		
	perf: vben5 代码生成 使用 table action
This commit is contained in:
		| @ -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 }, | ||||
|  | ||||
| @ -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> | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 xingyu4j
					xingyu4j