From 84e32a0884ee65be39f1ef45473fe108e25fdd9a Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 6 Sep 2025 00:20:05 +0800 Subject: [PATCH] =?UTF-8?q?reactor=EF=BC=9A=E3=80=90system=20=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E7=AE=A1=E7=90=86=E3=80=91dict=20=E5=9C=A8=20element-?= =?UTF-8?q?plus=20=E5=92=8C=20antd=20=E4=BF=9D=E6=8C=81=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/views/system/area/index.vue | 1 + .../views/system/dict/modules/data-form.vue | 36 ++++---- .../views/system/dict/modules/data-grid.vue | 49 +++++------ .../views/system/dict/modules/type-grid.vue | 70 +++++++--------- apps/web-ele/src/views/system/area/index.vue | 1 + apps/web-ele/src/views/system/dict/data.ts | 4 +- .../views/system/dict/modules/data-form.vue | 36 ++++---- .../views/system/dict/modules/data-grid.vue | 84 +++++++++++-------- .../views/system/dict/modules/type-grid.vue | 84 +++++++++++-------- 9 files changed, 186 insertions(+), 179 deletions(-) diff --git a/apps/web-antd/src/views/system/area/index.vue b/apps/web-antd/src/views/system/area/index.vue index a2b0cccb5..54277f6dc 100644 --- a/apps/web-antd/src/views/system/area/index.vue +++ b/apps/web-antd/src/views/system/area/index.vue @@ -41,6 +41,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ }, rowConfig: { keyField: 'id', + isHover: true, }, toolbarConfig: { refresh: true, diff --git a/apps/web-antd/src/views/system/dict/modules/data-form.vue b/apps/web-antd/src/views/system/dict/modules/data-form.vue index 0d8a411ba..a0e44bff1 100644 --- a/apps/web-antd/src/views/system/dict/modules/data-form.vue +++ b/apps/web-antd/src/views/system/dict/modules/data-form.vue @@ -33,7 +33,7 @@ const [Form, formApi] = useVbenForm({ class: 'w-full', }, formItemClass: 'col-span-2', - labelWidth: 80, + labelWidth: 90, }, layout: 'horizontal', schema: useDataFormSchema(), @@ -65,27 +65,21 @@ const [Modal, modalApi] = useVbenModal({ return; } // 加载数据 - const data = modalApi.getData< - SystemDictDataApi.DictData | { dictType?: string } - >(); - - // 如果有ID,表示是编辑 - if (data && 'id' in data && data.id) { - modalApi.lock(); - try { - formData.value = await getDictData(data.id); - // 设置到 values - if (formData.value) { - await formApi.setValues(formData.value); - } - } finally { - modalApi.unlock(); + const data = modalApi.getData(); + if (!data || !data.id) { + // 设置 dictType + await formApi.setValues(data); + return; + } + modalApi.lock(); + try { + formData.value = await getDictData(data.id); + // 设置到 values + if (formData.value) { + await formApi.setValues(formData.value); } - } else if (data && 'dictType' in data && data.dictType) { - // 新增时,如果传入了dictType,则需要设置 - await formApi.setValues({ - dictType: data.dictType, - }); + } finally { + modalApi.unlock(); } }, }); diff --git a/apps/web-antd/src/views/system/dict/modules/data-grid.vue b/apps/web-antd/src/views/system/dict/modules/data-grid.vue index a9bf95aee..1a603195e 100644 --- a/apps/web-antd/src/views/system/dict/modules/data-grid.vue +++ b/apps/web-antd/src/views/system/dict/modules/data-grid.vue @@ -4,7 +4,7 @@ import type { SystemDictDataApi } from '#/api/system/dict/data'; import { ref, watch } from 'vue'; -import { useVbenModal } from '@vben/common-ui'; +import { confirm, useVbenModal } from '@vben/common-ui'; import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; import { message, Tag } from 'ant-design-vue'; @@ -58,14 +58,28 @@ function handleEdit(row: SystemDictDataApi.DictData) { async function handleDelete(row: SystemDictDataApi.DictData) { const hideLoading = message.loading({ content: $t('ui.actionMessage.deleting', [row.label]), - key: 'action_key_msg', + duration: 0, }); try { - await deleteDictData(row.id as number); - message.success({ - content: $t('ui.actionMessage.deleteSuccess', [row.label]), - key: 'action_key_msg', - }); + await deleteDictData(row.id); + message.success($t('ui.actionMessage.deleteSuccess', [row.label])); + onRefresh(); + } finally { + hideLoading(); + } +} + +/** 批量删除字典数据 */ +async function handleDeleteBatch() { + await confirm($t('ui.actionMessage.deleteBatchConfirm')); + const hideLoading = message.loading({ + content: $t('ui.actionMessage.deleting'), + duration: 0, + }); + try { + await deleteDictDataList(checkedIds.value); + checkedIds.value = []; + message.success($t('ui.actionMessage.deleteSuccess')); onRefresh(); } finally { hideLoading(); @@ -81,23 +95,6 @@ function handleRowCheckboxChange({ checkedIds.value = records.map((item) => item.id!); } -/** 批量删除字典数据 */ -async function handleDeleteBatch() { - const hideLoading = message.loading({ - content: $t('ui.actionMessage.deleting'), - duration: 0, - key: 'action_process_msg', - }); - try { - await deleteDictDataList(checkedIds.value); - checkedIds.value = []; - message.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - hideLoading(); - } -} - const [Grid, gridApi] = useVbenVxeGrid({ formOptions: { schema: useDataGridFormSchema(), @@ -167,11 +164,11 @@ watch( onClick: handleExport, }, { - label: '批量删除', + label: $t('ui.actionTitle.deleteBatch'), type: 'primary', danger: true, - disabled: isEmpty(checkedIds), icon: ACTION_ICON.DELETE, + disabled: isEmpty(checkedIds), auth: ['system:dict:delete'], onClick: handleDeleteBatch, }, diff --git a/apps/web-antd/src/views/system/dict/modules/type-grid.vue b/apps/web-antd/src/views/system/dict/modules/type-grid.vue index 4d53fca43..e83902d8e 100644 --- a/apps/web-antd/src/views/system/dict/modules/type-grid.vue +++ b/apps/web-antd/src/views/system/dict/modules/type-grid.vue @@ -7,7 +7,7 @@ import type { SystemDictTypeApi } from '#/api/system/dict/type'; import { ref } from 'vue'; -import { useVbenModal } from '@vben/common-ui'; +import { confirm, useVbenModal } from '@vben/common-ui'; import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; import { message } from 'ant-design-vue'; @@ -48,7 +48,7 @@ function handleCreate() { } /** 编辑字典类型 */ -function handleEdit(row: any) { +function handleEdit(row: SystemDictTypeApi.DictType) { typeFormModalApi.setData(row).open(); } @@ -56,14 +56,28 @@ function handleEdit(row: any) { async function handleDelete(row: SystemDictTypeApi.DictType) { const hideLoading = message.loading({ content: $t('ui.actionMessage.deleting', [row.name]), - key: 'action_key_msg', + duration: 0, }); try { - await deleteDictType(row.id as number); - message.success({ - content: $t('ui.actionMessage.deleteSuccess', [row.name]), - key: 'action_key_msg', - }); + await deleteDictType(row.id); + message.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); + } finally { + hideLoading(); + } +} + +/** 批量删除字典类型 */ +async function handleDeleteBatch() { + await confirm($t('ui.actionMessage.deleteBatchConfirm')); + const hideLoading = message.loading({ + content: $t('ui.actionMessage.deletingBatch'), + duration: 0, + }); + try { + await deleteDictTypeList(checkedIds.value); + checkedIds.value = []; + message.success($t('ui.actionMessage.deleteSuccess')); onRefresh(); } finally { hideLoading(); @@ -79,32 +93,6 @@ function handleRowCheckboxChange({ checkedIds.value = records.map((item) => item.id!); } -/** 批量删除字典类型 */ -async function handleDeleteBatch() { - const hideLoading = message.loading({ - content: $t('ui.actionMessage.deleting'), - duration: 0, - key: 'action_process_msg', - }); - try { - await deleteDictTypeList(checkedIds.value); - checkedIds.value = []; - message.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - hideLoading(); - } -} - -/** 表格事件 */ -const gridEvents: VxeGridListeners = { - cellClick: ({ row }) => { - emit('select', row.type); - }, - checkboxAll: handleRowCheckboxChange, - checkboxChange: handleRowCheckboxChange, -}; - const [Grid, gridApi] = useVbenVxeGrid({ formOptions: { schema: useTypeGridFormSchema(), @@ -112,6 +100,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ gridOptions: { columns: useTypeGridColumns(), height: 'auto', + keepSource: true, proxyConfig: { ajax: { query: async ({ page }, formValues) => { @@ -133,14 +122,19 @@ const [Grid, gridApi] = useVbenVxeGrid({ search: true, }, } as VxeTableGridOptions, - gridEvents, + gridEvents: { + cellClick: ({ row }: { row: SystemDictTypeApi.DictType }) => { + emit('select', row.type); + }, + checkboxAll: handleRowCheckboxChange, + checkboxChange: handleRowCheckboxChange, + }, });