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 a64330cd..6bf7473c 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 612fe105..8c2951cc 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 48ab6c72..1c7b7918 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 f2dc365e..a28ccc01 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 1e540e83..675b665a 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({