diff --git a/apps/web-ele/src/api/system/user/index.ts b/apps/web-ele/src/api/system/user/index.ts index 52d8cdd2e..1f51a5bc7 100644 --- a/apps/web-ele/src/api/system/user/index.ts +++ b/apps/web-ele/src/api/system/user/index.ts @@ -49,6 +49,11 @@ export function deleteUser(id: number) { return requestClient.delete(`/system/user/delete?id=${id}`); } +/** 批量删除用户 */ +export function deleteUserList(ids: number[]) { + return requestClient.delete(`/system/user/delete-list?ids=${ids.join(',')}`); +} + /** 导出用户 */ export function exportUser(params: any) { return requestClient.download('/system/user/export', params); diff --git a/apps/web-ele/src/views/system/user/data.ts b/apps/web-ele/src/views/system/user/data.ts index b2cbd00bd..a20318be0 100644 --- a/apps/web-ele/src/views/system/user/data.ts +++ b/apps/web-ele/src/views/system/user/data.ts @@ -285,6 +285,10 @@ export function useGridColumns( ) => PromiseLike, ): VxeTableGridOptions['columns'] { return [ + { + type: 'checkbox', + width: 40, + }, { field: 'id', title: '用户编号', diff --git a/apps/web-ele/src/views/system/user/index.vue b/apps/web-ele/src/views/system/user/index.vue index 0673493d9..13ec5428c 100644 --- a/apps/web-ele/src/views/system/user/index.vue +++ b/apps/web-ele/src/views/system/user/index.vue @@ -6,13 +6,14 @@ import type { SystemUserApi } from '#/api/system/user'; import { ref } from 'vue'; import { confirm, DocAlert, Page, useVbenModal } from '@vben/common-ui'; -import { downloadFileFromBlobPart } from '@vben/utils'; +import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; import { ElLoading, ElMessage } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { deleteUser, + deleteUserList, exportUser, getUserPage, updateUserStatus, @@ -90,13 +91,35 @@ async function onDelete(row: SystemUserApi.User) { await deleteUser(row.id as number); ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.username])); onRefresh(); - } catch { - // 异常处理 } finally { loadingInstance.close(); } } +/** 批量删除用户 */ +async function onDeleteBatch() { + const loadingInstance = ElLoading.service({ + text: $t('ui.actionMessage.deleting'), + fullscreen: true, + }); + try { + await deleteUserList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); + } finally { + loadingInstance.close(); + } +} + +const checkedIds = ref([]); +function handleRowCheckboxChange({ + records, +}: { + records: SystemUserApi.User[]; +}) { + checkedIds.value = records.map((item) => item.id as number); +} + /** 重置密码 */ function onResetPassword(row: SystemUserApi.User) { resetPasswordModalApi.setData(row).open(); @@ -161,6 +184,10 @@ const [Grid, gridApi] = useVbenVxeGrid({ search: true, }, } as VxeTableGridOptions, + gridEvents: { + checkboxAll: handleRowCheckboxChange, + checkboxChange: handleRowCheckboxChange, + }, }); @@ -212,6 +239,14 @@ const [Grid, gridApi] = useVbenVxeGrid({ auth: ['system:user:import'], onClick: onImport, }, + { + label: $t('ui.actionTitle.deleteBatch'), + type: 'danger', + icon: ACTION_ICON.DELETE, + disabled: isEmpty(checkedIds), + auth: ['system:user:delete'], + onClick: onDeleteBatch, + }, ]" />