diff --git a/apps/web-ele/src/api/system/tenant-package/index.ts b/apps/web-ele/src/api/system/tenant-package/index.ts index 5066cea98..53be78f73 100644 --- a/apps/web-ele/src/api/system/tenant-package/index.ts +++ b/apps/web-ele/src/api/system/tenant-package/index.ts @@ -49,6 +49,13 @@ export function deleteTenantPackage(id: number) { return requestClient.delete(`/system/tenant-package/delete?id=${id}`); } +/** 批量删除租户套餐 */ +export function deleteTenantPackageList(ids: number[]) { + return requestClient.delete( + `/system/tenant-package/delete-list?ids=${ids.join(',')}`, + ); +} + /** 获取租户套餐精简信息列表 */ export function getTenantPackageList() { return requestClient.get( diff --git a/apps/web-ele/src/api/system/tenant/index.ts b/apps/web-ele/src/api/system/tenant/index.ts index 3bed9249c..c18a4dfab 100644 --- a/apps/web-ele/src/api/system/tenant/index.ts +++ b/apps/web-ele/src/api/system/tenant/index.ts @@ -61,6 +61,13 @@ export function deleteTenant(id: number) { return requestClient.delete(`/system/tenant/delete?id=${id}`); } +/** 批量删除租户 */ +export function deleteTenantList(ids: number[]) { + return requestClient.delete( + `/system/tenant/delete-list?ids=${ids.join(',')}`, + ); +} + /** 导出租户 */ export function exportTenant(params: any) { return requestClient.download('/system/tenant/export-excel', { diff --git a/apps/web-ele/src/views/system/tenant/data.ts b/apps/web-ele/src/views/system/tenant/data.ts index 16c165414..8facb2a25 100644 --- a/apps/web-ele/src/views/system/tenant/data.ts +++ b/apps/web-ele/src/views/system/tenant/data.ts @@ -167,6 +167,10 @@ export function useGridColumns( getPackageName?: (packageId: number) => string | undefined, ): VxeTableGridOptions['columns'] { return [ + { + type: 'checkbox', + width: 40, + }, { field: 'id', title: '租户编号', diff --git a/apps/web-ele/src/views/system/tenant/index.vue b/apps/web-ele/src/views/system/tenant/index.vue index 1eb2d6f14..f692af9fc 100644 --- a/apps/web-ele/src/views/system/tenant/index.vue +++ b/apps/web-ele/src/views/system/tenant/index.vue @@ -9,13 +9,17 @@ import type { SystemTenantPackageApi } from '#/api/system/tenant-package'; import { onMounted, 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 { ElLoading, ElMessage } from 'element-plus'; -import { useVbenVxeGrid } from '#/adapter/vxe-table'; -import { deleteTenant, exportTenant, getTenantPage } from '#/api/system/tenant'; +import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; +import { + deleteTenant, + deleteTenantList, + exportTenant, + getTenantPage, +} from '#/api/system/tenant'; import { getTenantPackageList } from '#/api/system/tenant-package'; import { $t } from '#/locales'; @@ -69,13 +73,36 @@ async function onDelete(row: SystemTenantApi.Tenant) { await deleteTenant(row.id as number); ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); onRefresh(); - } catch { - // 错误处理 } finally { loading.close(); } } +/** 批量删除租户 */ +async function onDeleteBatch() { + const loading = ElLoading.service({ + lock: true, + text: $t('ui.actionMessage.deleting'), + background: 'rgba(0, 0, 0, 0.7)', + }); + try { + await deleteTenantList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); + } finally { + loading.close(); + } +} + +const checkedIds = ref([]); +function handleRowCheckboxChange({ + records, +}: { + records: SystemTenantApi.Tenant[]; +}) { + checkedIds.value = records.map((item) => item.id as number); +} + /** 表格操作按钮的回调函数 */ function onActionClick({ code, @@ -120,6 +147,10 @@ const [Grid, gridApi] = useVbenVxeGrid({ search: true, }, } as VxeTableGridOptions, + gridEvents: { + checkboxAll: handleRowCheckboxChange, + checkboxChange: handleRowCheckboxChange, + }, }); /** 初始化 */ @@ -136,23 +167,32 @@ onMounted(async () => { diff --git a/apps/web-ele/src/views/system/tenantPackage/data.ts b/apps/web-ele/src/views/system/tenantPackage/data.ts index 5f1bcf9fd..93e7aea17 100644 --- a/apps/web-ele/src/views/system/tenantPackage/data.ts +++ b/apps/web-ele/src/views/system/tenantPackage/data.ts @@ -95,6 +95,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/tenantPackage/index.vue b/apps/web-ele/src/views/system/tenantPackage/index.vue index 8b2634242..246cd5cf7 100644 --- a/apps/web-ele/src/views/system/tenantPackage/index.vue +++ b/apps/web-ele/src/views/system/tenantPackage/index.vue @@ -5,14 +5,17 @@ import type { } from '#/adapter/vxe-table'; import type { SystemTenantPackageApi } from '#/api/system/tenant-package'; +import { ref } from 'vue'; + import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; -import { Plus } from '@vben/icons'; +import { isEmpty } from '@vben/utils'; -import { ElButton, ElMessage } from 'element-plus'; +import { ElMessage } from 'element-plus'; -import { useVbenVxeGrid } from '#/adapter/vxe-table'; +import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { deleteTenantPackage, + deleteTenantPackageList, getTenantPackagePage, } from '#/api/system/tenant-package'; import { $t } from '#/locales'; @@ -52,11 +55,37 @@ async function onDelete(row: SystemTenantPackageApi.TenantPackage) { loadingInstance.close(); ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); onRefresh(); - } catch { + } finally { loadingInstance.close(); } } +/** 批量删除租户套餐 */ +async function onDeleteBatch() { + const loadingInstance = ElMessage({ + message: $t('ui.actionMessage.deleting'), + type: 'info', + duration: 0, + }); + try { + await deleteTenantPackageList(checkedIds.value); + loadingInstance.close(); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); + } finally { + loadingInstance.close(); + } +} + +const checkedIds = ref([]); +function handleRowCheckboxChange({ + records, +}: { + records: SystemTenantPackageApi.TenantPackage[]; +}) { + checkedIds.value = records.map((item) => item.id as number); +} + /** 表格操作按钮的回调函数 */ function onActionClick({ code, @@ -102,6 +131,10 @@ const [Grid, gridApi] = useVbenVxeGrid({ search: true, }, } as VxeTableGridOptions, + gridEvents: { + checkboxAll: handleRowCheckboxChange, + checkboxChange: handleRowCheckboxChange, + }, }); @@ -114,14 +147,25 @@ const [Grid, gridApi] = useVbenVxeGrid({