From 79c451d256d6f4ea04dd3b4d53d726f5faba5e51 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Mon, 16 Jun 2025 21:21:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E3=80=90ele=E3=80=91=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E6=96=B0=E5=A2=9E=E6=89=B9=E9=87=8F=E5=88=A0?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web-ele/src/api/system/dict/data/index.ts | 7 ++ .../web-ele/src/api/system/dict/type/index.ts | 7 ++ apps/web-ele/src/views/system/dict/data.ts | 2 + .../views/system/dict/modules/data-grid.vue | 83 +++++++++++----- .../views/system/dict/modules/type-grid.vue | 95 ++++++++++++------- 5 files changed, 138 insertions(+), 56 deletions(-) diff --git a/apps/web-ele/src/api/system/dict/data/index.ts b/apps/web-ele/src/api/system/dict/data/index.ts index a64330cda..6bf7473ce 100644 --- a/apps/web-ele/src/api/system/dict/data/index.ts +++ b/apps/web-ele/src/api/system/dict/data/index.ts @@ -48,6 +48,13 @@ export function deleteDictData(id: number) { return requestClient.delete(`/system/dict-data/delete?id=${id}`); } +// 批量删除字典数据 +export function deleteDictDataList(ids: number[]) { + return requestClient.delete( + `/system/dict-data/delete-list?ids=${ids.join(',')}`, + ); +} + // 导出字典类型数据 export function exportDictData(params: any) { return requestClient.download('/system/dict-data/export', { params }); diff --git a/apps/web-ele/src/api/system/dict/type/index.ts b/apps/web-ele/src/api/system/dict/type/index.ts index 612fe1052..8c2951cc1 100644 --- a/apps/web-ele/src/api/system/dict/type/index.ts +++ b/apps/web-ele/src/api/system/dict/type/index.ts @@ -42,6 +42,13 @@ export function deleteDictType(id: number) { return requestClient.delete(`/system/dict-type/delete?id=${id}`); } +// 批量删除字典 +export function deleteDictTypeList(ids: number[]) { + return requestClient.delete( + `/system/dict-type/delete-list?ids=${ids.join(',')}`, + ); +} + // 导出字典类型 export function exportDictType(params: any) { return requestClient.download('/system/dict-type/export', { params }); diff --git a/apps/web-ele/src/views/system/dict/data.ts b/apps/web-ele/src/views/system/dict/data.ts index 48ab6c727..1c7b7918a 100644 --- a/apps/web-ele/src/views/system/dict/data.ts +++ b/apps/web-ele/src/views/system/dict/data.ts @@ -100,6 +100,7 @@ export function useTypeGridColumns( onActionClick: OnActionClickFn, ): VxeTableGridOptions['columns'] { return [ + { type: 'checkbox', width: 40 }, { field: 'id', title: '字典编号', @@ -314,6 +315,7 @@ export function useDataGridColumns( onActionClick: OnActionClickFn, ): VxeTableGridOptions['columns'] { return [ + { type: 'checkbox', width: 40 }, { field: 'id', title: '字典编码', diff --git a/apps/web-ele/src/views/system/dict/modules/data-grid.vue b/apps/web-ele/src/views/system/dict/modules/data-grid.vue index f2dc365e8..a28ccc015 100644 --- a/apps/web-ele/src/views/system/dict/modules/data-grid.vue +++ b/apps/web-ele/src/views/system/dict/modules/data-grid.vue @@ -5,17 +5,17 @@ import type { } from '#/adapter/vxe-table'; import type { SystemDictDataApi } from '#/api/system/dict/data'; -import { watch } from 'vue'; +import { ref, watch } from 'vue'; import { useVbenModal } from '@vben/common-ui'; -import { Download, Plus } from '@vben/icons'; -import { downloadFileFromBlobPart } from '@vben/utils'; +import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; -import { ElButton, ElLoading, ElMessage } from 'element-plus'; +import { ElLoading, ElMessage } from 'element-plus'; -import { useVbenVxeGrid } from '#/adapter/vxe-table'; +import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { deleteDictData, + deleteDictDataList, exportDictData, getDictDataPage, } from '#/api/system/dict/data'; @@ -67,13 +67,35 @@ async function onDelete(row: any) { await deleteDictData(row.id); ElMessage.success($t('common.operationSuccess')); onRefresh(); - } catch { - // 异常处理 } finally { loadingInstance.close(); } } +/** 批量删除字典数据 */ +async function onDeleteBatch() { + const loadingInstance = ElLoading.service({ + text: $t('ui.actionMessage.deleting'), + fullscreen: true, + }); + try { + await deleteDictDataList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); + } finally { + loadingInstance.close(); + } +} + +const checkedIds = ref([]); +function handleRowCheckboxChange({ + records, +}: { + records: SystemDictDataApi.DictData[]; +}) { + checkedIds.value = records.map((item) => item.id as number); +} + /** 表格操作按钮回调 */ function onActionClick({ code, row }: OnActionClickParams) { switch (code) { @@ -116,6 +138,10 @@ const [Grid, gridApi] = useVbenVxeGrid({ search: true, }, } as VxeTableGridOptions, + gridEvents: { + checkboxAll: handleRowCheckboxChange, + checkboxChange: handleRowCheckboxChange, + }, }); /** 监听 dictType 变化,重新查询 */ @@ -135,23 +161,32 @@ watch( diff --git a/apps/web-ele/src/views/system/dict/modules/type-grid.vue b/apps/web-ele/src/views/system/dict/modules/type-grid.vue index 1e540e83b..675b665a9 100644 --- a/apps/web-ele/src/views/system/dict/modules/type-grid.vue +++ b/apps/web-ele/src/views/system/dict/modules/type-grid.vue @@ -1,20 +1,21 @@ @@ -130,23 +152,32 @@ const [Grid, gridApi] = useVbenVxeGrid({