diff --git a/apps/web-ele/src/api/system/role/index.ts b/apps/web-ele/src/api/system/role/index.ts index 07824c43e..23d5ade98 100644 --- a/apps/web-ele/src/api/system/role/index.ts +++ b/apps/web-ele/src/api/system/role/index.ts @@ -50,6 +50,11 @@ export function deleteRole(id: number) { return requestClient.delete(`/system/role/delete?id=${id}`); } +/** 批量删除角色 */ +export function deleteRoleList(ids: number[]) { + return requestClient.delete(`/system/role/delete-list?ids=${ids.join(',')}`); +} + /** 导出角色 */ export function exportRole(params: any) { return requestClient.download('/system/role/export-excel', { diff --git a/apps/web-ele/src/views/system/role/data.ts b/apps/web-ele/src/views/system/role/data.ts index aee51e3eb..5b2fc800a 100644 --- a/apps/web-ele/src/views/system/role/data.ts +++ b/apps/web-ele/src/views/system/role/data.ts @@ -193,6 +193,10 @@ export function useGridColumns( onActionClick: OnActionClickFn, ): VxeTableGridOptions['columns'] { return [ + { + type: 'checkbox', + width: 40, + }, { field: 'id', title: '角色编号', diff --git a/apps/web-ele/src/views/system/role/index.vue b/apps/web-ele/src/views/system/role/index.vue index 653f6a8f7..c1d23cb2e 100644 --- a/apps/web-ele/src/views/system/role/index.vue +++ b/apps/web-ele/src/views/system/role/index.vue @@ -5,14 +5,21 @@ import type { } from '#/adapter/vxe-table'; import type { SystemRoleApi } from '#/api/system/role'; +import { ref } from 'vue'; + import { DocAlert, Page, 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 { useVbenVxeGrid } from '#/adapter/vxe-table'; -import { deleteRole, exportRole, getRolePage } from '#/api/system/role'; +import { + deleteRole, + deleteRoleList, + exportRole, + getRolePage, +} from '#/api/system/role'; import { $t } from '#/locales'; import { useGridColumns, useGridFormSchema } from './data'; @@ -67,13 +74,35 @@ async function onDelete(row: SystemRoleApi.Role) { await deleteRole(row.id as number); ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); onRefresh(); - } catch { - // 异常处理 } finally { loadingInstance.close(); } } +/** 批量删除角色 */ +async function onDeleteBatch() { + const loadingInstance = ElLoading.service({ + text: $t('ui.actionMessage.deleting'), + fullscreen: true, + }); + try { + await deleteRoleList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); + } finally { + loadingInstance.close(); + } +} + +const checkedIds = ref([]); +function handleRowCheckboxChange({ + records, +}: { + records: SystemRoleApi.Role[]; +}) { + checkedIds.value = records.map((item) => item.id as number); +} + /** 分配角色的数据权限 */ function onAssignDataPermission(row: SystemRoleApi.Role) { assignDataPermissionFormApi.setData(row).open(); @@ -133,6 +162,10 @@ const [Grid, gridApi] = useVbenVxeGrid({ search: true, }, } as VxeTableGridOptions, + gridEvents: { + checkboxAll: handleRowCheckboxChange, + checkboxChange: handleRowCheckboxChange, + }, }); @@ -168,6 +201,16 @@ const [Grid, gridApi] = useVbenVxeGrid({ {{ $t('ui.actionTitle.export') }} + + + {{ $t('ui.actionTitle.deleteBatch') }} +