diff --git a/apps/web-ele/src/api/infra/codegen/index.ts b/apps/web-ele/src/api/infra/codegen/index.ts index d8fea0453125d7e1ecbf1acee2afacd22b7621f2..5e83caf813963634a927d052939acc9af34b9a35 100644 --- a/apps/web-ele/src/api/infra/codegen/index.ts +++ b/apps/web-ele/src/api/infra/codegen/index.ts @@ -155,3 +155,10 @@ export function deleteCodegenTable(tableId: number) { params: { tableId }, }); } + +/** 批量删除代码生成表定义 */ +export function deleteCodegenTableList(tableIds: number[]) { + return requestClient.delete( + `/infra/codegen/delete-list?tableIds=${tableIds.join(',')}`, + ); +} diff --git a/apps/web-ele/src/api/infra/config/index.ts b/apps/web-ele/src/api/infra/config/index.ts index 3911e01c7ca181f20b35bbe00914d483d50b8824..521e957a231f389d0dee189b25f83ba74656dd5b 100644 --- a/apps/web-ele/src/api/infra/config/index.ts +++ b/apps/web-ele/src/api/infra/config/index.ts @@ -54,6 +54,11 @@ export function deleteConfig(id: number) { return requestClient.delete(`/infra/config/delete?id=${id}`); } +/** 批量删除参数 */ +export function deleteConfigList(ids: number[]) { + return requestClient.delete(`/infra/config/delete-list?ids=${ids.join(',')}`); +} + /** 导出参数 */ export function exportConfig(params: any) { return requestClient.download('/infra/config/export', { diff --git a/apps/web-ele/src/api/infra/data-source-config/index.ts b/apps/web-ele/src/api/infra/data-source-config/index.ts index 88641f6540d6c63b6469c511c5c5b9fee193823d..81a3b0e3dc9b146954539430c3467bae3c4583d8 100644 --- a/apps/web-ele/src/api/infra/data-source-config/index.ts +++ b/apps/web-ele/src/api/infra/data-source-config/index.ts @@ -44,3 +44,10 @@ export function updateDataSourceConfig( export function deleteDataSourceConfig(id: number) { return requestClient.delete(`/infra/data-source-config/delete?id=${id}`); } + +/** 批量删除数据源配置 */ +export function deleteDataSourceConfigList(ids: number[]) { + return requestClient.delete( + `/infra/data-source-config/delete-list?ids=${ids.join(',')}`, + ); +} diff --git a/apps/web-ele/src/api/infra/file-config/index.ts b/apps/web-ele/src/api/infra/file-config/index.ts index a16cf2bc0c3cc8be04706eef5a8283e07816f9bb..20a0ab3fa1f542cf830ea0e5b5f24e8741f5a70d 100644 --- a/apps/web-ele/src/api/infra/file-config/index.ts +++ b/apps/web-ele/src/api/infra/file-config/index.ts @@ -69,6 +69,13 @@ export function deleteFileConfig(id: number) { return requestClient.delete(`/infra/file-config/delete?id=${id}`); } +/** 批量删除文件配置 */ +export function deleteFileConfigList(ids: number[]) { + return requestClient.delete( + `/infra/file-config/delete-list?ids=${ids.join(',')}`, + ); +} + /** 测试文件配置 */ export function testFileConfig(id: number) { return requestClient.get(`/infra/file-config/test?id=${id}`); diff --git a/apps/web-ele/src/api/infra/file/index.ts b/apps/web-ele/src/api/infra/file/index.ts index a399db67d799f10f3a648a8e6fef8c54208145c1..edf06933becd3490bf27bec10c0d490655e86f45 100644 --- a/apps/web-ele/src/api/infra/file/index.ts +++ b/apps/web-ele/src/api/infra/file/index.ts @@ -45,6 +45,11 @@ export function deleteFile(id: number) { return requestClient.delete(`/infra/file/delete?id=${id}`); } +/** 批量删除文件 */ +export function deleteFileList(ids: number[]) { + return requestClient.delete(`/infra/file/delete-list?ids=${ids.join(',')}`); +} + /** 获取文件预签名地址 */ export function getFilePresignedUrl(name: string, directory?: string) { return requestClient.get( diff --git a/apps/web-ele/src/api/infra/job/index.ts b/apps/web-ele/src/api/infra/job/index.ts index fcec25c835ce51c4d2ccf84cb256bfdd430fee15..1f066a149a6590328b6dab43fba1a74d27b66c88 100644 --- a/apps/web-ele/src/api/infra/job/index.ts +++ b/apps/web-ele/src/api/infra/job/index.ts @@ -45,6 +45,11 @@ export function deleteJob(id: number) { return requestClient.delete(`/infra/job/delete?id=${id}`); } +/** 批量删除定时任务调度 */ +export function deleteJobList(ids: number[]) { + return requestClient.delete(`/infra/job/delete-list?ids=${ids.join(',')}`); +} + /** 导出定时任务调度 */ export function exportJob(params: any) { return requestClient.download('/infra/job/export-excel', { params }); 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 a64330cda69bb68a029d2a423e96d9645bff0185..6bf7473cea87cf0ef41e1674ed796f4550311d41 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 612fe10529ed09820a387f54dad662f65d2a5264..8c2951cc170c4c42f515bbf0050b9151cb6d46eb 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/api/system/mail/account/index.ts b/apps/web-ele/src/api/system/mail/account/index.ts index 8a43a33266fd68a42c01caa58733e43165aa434f..7f506fd87e1c3bcd0db378966b24a5bb2b16cad8 100644 --- a/apps/web-ele/src/api/system/mail/account/index.ts +++ b/apps/web-ele/src/api/system/mail/account/index.ts @@ -49,6 +49,13 @@ export function deleteMailAccount(id: number) { return requestClient.delete(`/system/mail-account/delete?id=${id}`); } +/** 批量删除邮箱账号 */ +export function deleteMailAccountList(ids: number[]) { + return requestClient.delete( + `/system/mail-account/delete-list?ids=${ids.join(',')}`, + ); +} + /** 获得邮箱账号精简列表 */ export function getSimpleMailAccountList() { return requestClient.get( diff --git a/apps/web-ele/src/api/system/mail/template/index.ts b/apps/web-ele/src/api/system/mail/template/index.ts index 34b4a09d024ce46ec269439c32e3ce93ac61c10f..1750cfd2a93bce066148bc2510979f34b355ed43 100644 --- a/apps/web-ele/src/api/system/mail/template/index.ts +++ b/apps/web-ele/src/api/system/mail/template/index.ts @@ -56,6 +56,13 @@ export function deleteMailTemplate(id: number) { return requestClient.delete(`/system/mail-template/delete?id=${id}`); } +/** 批量删除邮件模版 */ +export function deleteMailTemplateList(ids: number[]) { + return requestClient.delete( + `/system/mail-template/delete-list?ids=${ids.join(',')}`, + ); +} + /** 发送邮件 */ export function sendMail(data: SystemMailTemplateApi.MailSendReqVO) { return requestClient.post('/system/mail-template/send-mail', data); diff --git a/apps/web-ele/src/api/system/notice/index.ts b/apps/web-ele/src/api/system/notice/index.ts index dac9ec708c45033823ab2e2b52fbbb8b8376c5eb..5ae888538220a64948eff31474bb52a662ee3411 100644 --- a/apps/web-ele/src/api/system/notice/index.ts +++ b/apps/web-ele/src/api/system/notice/index.ts @@ -46,6 +46,13 @@ export function deleteNotice(id: number) { return requestClient.delete(`/system/notice/delete?id=${id}`); } +/** 批量删除公告 */ +export function deleteNoticeList(ids: number[]) { + return requestClient.delete( + `/system/notice/delete-list?ids=${ids.join(',')}`, + ); +} + /** 推送公告 */ export function pushNotice(id: number) { return requestClient.post(`/system/notice/push?id=${id}`); diff --git a/apps/web-ele/src/api/system/notify/template/index.ts b/apps/web-ele/src/api/system/notify/template/index.ts index 5f2e3de291dea0c71e0daa8296334004b6ee6a1b..dd19f4b8f19087fd6933a83a0b4f1c7e48e54677 100644 --- a/apps/web-ele/src/api/system/notify/template/index.ts +++ b/apps/web-ele/src/api/system/notify/template/index.ts @@ -59,6 +59,13 @@ export function deleteNotifyTemplate(id: number) { return requestClient.delete(`/system/notify-template/delete?id=${id}`); } +/** 批量删除站内信模板 */ +export function deleteNotifyTemplateList(ids: number[]) { + return requestClient.delete( + `/system/notify-template/delete-list?ids=${ids.join(',')}`, + ); +} + /** 导出站内信模板 */ export function exportNotifyTemplate(params: any) { return requestClient.download('/system/notify-template/export-excel', { diff --git a/apps/web-ele/src/api/system/oauth2/client/index.ts b/apps/web-ele/src/api/system/oauth2/client/index.ts index 7c1db774712cbfe4daab857dbc7c5f6b7f777e46..5817b858b1fee3ba073212393cae59cdd100e9f5 100644 --- a/apps/web-ele/src/api/system/oauth2/client/index.ts +++ b/apps/web-ele/src/api/system/oauth2/client/index.ts @@ -55,3 +55,10 @@ export function updateOAuth2Client(data: SystemOAuth2ClientApi.OAuth2Client) { export function deleteOAuth2Client(id: number) { return requestClient.delete(`/system/oauth2-client/delete?id=${id}`); } + +/** 批量删除 OAuth2.0 客户端 */ +export function deleteOAuth2ClientList(ids: number[]) { + return requestClient.delete( + `/system/oauth2-client/delete-list?ids=${ids.join(',')}`, + ); +} diff --git a/apps/web-ele/src/api/system/post/index.ts b/apps/web-ele/src/api/system/post/index.ts index a82f58155bfca95bb54440ea57df06eb37c200bd..06df146c39552acb931a0497498d5d900e4fe846 100644 --- a/apps/web-ele/src/api/system/post/index.ts +++ b/apps/web-ele/src/api/system/post/index.ts @@ -50,6 +50,11 @@ export function deletePost(id: number) { return requestClient.delete(`/system/post/delete?id=${id}`); } +/** 批量删除岗位 */ +export function deletePostList(ids: number[]) { + return requestClient.delete(`/system/post/delete-list?ids=${ids.join(',')}`); +} + /** 导出岗位 */ export function exportPost(params: any) { return requestClient.download('/system/post/export', { diff --git a/apps/web-ele/src/api/system/role/index.ts b/apps/web-ele/src/api/system/role/index.ts index 07824c43e3b7c421b0a61eee2e3a4e942aaec570..23d5ade98cd3ca1b475f1f380da142d7d71b6130 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/api/system/sms/channel/index.ts b/apps/web-ele/src/api/system/sms/channel/index.ts index 56890bea555551e4730ad364ea1522dfabdfe1c5..575c92447657ede88dbc4d0371c7c0a2ed639c4c 100644 --- a/apps/web-ele/src/api/system/sms/channel/index.ts +++ b/apps/web-ele/src/api/system/sms/channel/index.ts @@ -54,6 +54,13 @@ export function deleteSmsChannel(id: number) { return requestClient.delete(`/system/sms-channel/delete?id=${id}`); } +/** 批量删除短信渠道 */ +export function deleteSmsChannelList(ids: number[]) { + return requestClient.delete( + `/system/sms-channel/delete-list?ids=${ids.join(',')}`, + ); +} + /** 导出短信渠道 */ export function exportSmsChannel(params: any) { return requestClient.download('/system/sms-channel/export', { params }); diff --git a/apps/web-ele/src/api/system/sms/template/index.ts b/apps/web-ele/src/api/system/sms/template/index.ts index 63660bdf9c540cacb08c872fe14f0dddd69b0a56..eccfb911ede84def9a1ebbbb0b669e8247f03c39 100644 --- a/apps/web-ele/src/api/system/sms/template/index.ts +++ b/apps/web-ele/src/api/system/sms/template/index.ts @@ -57,6 +57,13 @@ export function deleteSmsTemplate(id: number) { return requestClient.delete(`/system/sms-template/delete?id=${id}`); } +/** 批量删除短信模板 */ +export function deleteSmsTemplateList(ids: number[]) { + return requestClient.delete( + `/system/sms-template/delete-list?ids=${ids.join(',')}`, + ); +} + /** 导出短信模板 */ export function exportSmsTemplate(params: any) { return requestClient.download('/system/sms-template/export-excel', { diff --git a/apps/web-ele/src/api/system/social/client/index.ts b/apps/web-ele/src/api/system/social/client/index.ts index d4da4dd488988664996a616fe5221975a61498df..181cdf86b05eed7f510a5068d32dddd6419ba36a 100644 --- a/apps/web-ele/src/api/system/social/client/index.ts +++ b/apps/web-ele/src/api/system/social/client/index.ts @@ -46,3 +46,10 @@ export function updateSocialClient(data: SystemSocialClientApi.SocialClient) { export function deleteSocialClient(id: number) { return requestClient.delete(`/system/social-client/delete?id=${id}`); } + +/** 批量删除社交客户端 */ +export function deleteSocialClientList(ids: number[]) { + return requestClient.delete( + `/system/social-client/delete-list?ids=${ids.join(',')}`, + ); +} 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 5066cea984a6ccb58659b766c0d74612e8435337..53be78f73e8022373979b55be6d18c26a7e1d1cc 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 3bed9249ccd3916788868b65b38d604de0e608c1..c18a4dfabc9b02f9ab4f0a27a1a29d80586f5c97 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/api/system/user/index.ts b/apps/web-ele/src/api/system/user/index.ts index 52d8cdd2ee68b2762b234a67f6a99a1c3583589e..1f51a5bc7cd3fe0ee8a08a05746a5bb02de6cf76 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/infra/codegen/data.ts b/apps/web-ele/src/views/infra/codegen/data.ts index 45c0adb3c9e4c1fa221851f8e2269cab638e7a95..e4115430ed6440f72354115433725c9d67aa9c93 100644 --- a/apps/web-ele/src/views/infra/codegen/data.ts +++ b/apps/web-ele/src/views/infra/codegen/data.ts @@ -398,6 +398,7 @@ export function useGridColumns( getDataSourceConfigName?: (dataSourceConfigId: number) => string | undefined, ): VxeTableGridOptions['columns'] { return [ + { type: 'checkbox', width: 40 }, { field: 'dataSourceConfigId', title: '数据源', diff --git a/apps/web-ele/src/views/infra/codegen/index.vue b/apps/web-ele/src/views/infra/codegen/index.vue index c2570ed85cbe47b9f0d7c06ece30465acd3714a8..c8ab1b8c3d4e82e90fdcda6b6a51bbd968065a4b 100644 --- a/apps/web-ele/src/views/infra/codegen/index.vue +++ b/apps/web-ele/src/views/infra/codegen/index.vue @@ -10,13 +10,14 @@ import { ref } from 'vue'; import { useRouter } from 'vue-router'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; -import { Plus } from '@vben/icons'; +import { 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 { deleteCodegenTable, + deleteCodegenTableList, downloadCodegen, getCodegenTablePage, syncCodegenFromDB, @@ -85,6 +86,21 @@ async function onDelete(row: InfraCodegenApi.CodegenTable) { } } +/** 批量删除代码生成配置 */ +async function onDeleteBatch() { + const loadingInstance = ElLoading.service({ + text: $t('ui.actionMessage.deleting'), + fullscreen: true, + }); + try { + await deleteCodegenTableList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); + } finally { + loadingInstance.close(); + } +} + /** 同步数据库 */ async function onSync(row: InfraCodegenApi.CodegenTable) { const loadingInstance = ElLoading.service({ @@ -150,6 +166,15 @@ function onActionClick({ } } +const checkedIds = ref([]); +function handleRowCheckboxChange({ + records, +}: { + records: InfraCodegenApi.CodegenTable[]; +}) { + checkedIds.value = records.map((item) => item.id); +} + const [Grid, gridApi] = useVbenVxeGrid({ formOptions: { schema: useGridFormSchema(), @@ -177,6 +202,10 @@ const [Grid, gridApi] = useVbenVxeGrid({ search: true, }, } as VxeTableGridOptions, + gridEvents: { + checkboxAll: handleRowCheckboxChange, + checkboxChange: handleRowCheckboxChange, + }, }); /** 获取数据源配置列表 */ @@ -213,14 +242,25 @@ initDataSourceConfig(); diff --git a/apps/web-ele/src/views/infra/config/data.ts b/apps/web-ele/src/views/infra/config/data.ts index 1a79bc3b2198824e01d5ee8c0c30e12acee6eea5..72afcb9d06ec96ffe9c87192fc11c58a4b6c4320 100644 --- a/apps/web-ele/src/views/infra/config/data.ts +++ b/apps/web-ele/src/views/infra/config/data.ts @@ -126,6 +126,7 @@ export function useGridColumns( onActionClick: OnActionClickFn, ): VxeTableGridOptions['columns'] { return [ + { type: 'checkbox', width: 40 }, { field: 'id', title: '参数主键', diff --git a/apps/web-ele/src/views/infra/config/index.vue b/apps/web-ele/src/views/infra/config/index.vue index 0c9d667720cc6de42d07aa16e18a54b5ee48ce1c..e765f2bae7a6e7c6d5f62014c6926a7a7690684c 100644 --- a/apps/web-ele/src/views/infra/config/index.vue +++ b/apps/web-ele/src/views/infra/config/index.vue @@ -5,14 +5,20 @@ import type { } from '#/adapter/vxe-table'; import type { InfraConfigApi } from '#/api/infra/config'; +import { ref } from 'vue'; + import { 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 { deleteConfig, exportConfig, getConfigPage } from '#/api/infra/config'; +import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; +import { + deleteConfig, + deleteConfigList, + exportConfig, + getConfigPage, +} from '#/api/infra/config'; import { $t } from '#/locales'; import { useGridColumns, useGridFormSchema } from './data'; @@ -52,15 +58,39 @@ async function onDelete(row: InfraConfigApi.Config) { }); try { await deleteConfig(row.id as number); - // TODO @puhui999:close 是不是放在 finally 里面更好? loadingInstance.close(); 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 deleteConfigList(checkedIds.value); + loadingInstance.close(); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); + } finally { loadingInstance.close(); } } +const checkedIds = ref([]); +function handleRowCheckboxChange({ + records, +}: { + records: InfraConfigApi.Config[]; +}) { + checkedIds.value = records.map((item) => item.id as number); +} + /** 表格操作按钮的回调函数 */ function onActionClick({ code, @@ -105,6 +135,10 @@ const [Grid, gridApi] = useVbenVxeGrid({ search: true, }, } as VxeTableGridOptions, + gridEvents: { + checkboxAll: handleRowCheckboxChange, + checkboxChange: handleRowCheckboxChange, + }, }); @@ -113,23 +147,32 @@ const [Grid, gridApi] = useVbenVxeGrid({ diff --git a/apps/web-ele/src/views/infra/dataSourceConfig/data.ts b/apps/web-ele/src/views/infra/dataSourceConfig/data.ts index c22a368adf42ff91ffa81b775dc0788430bca6c9..ae5010d0f0ac745dcee0fa92e8cc067a09715370 100644 --- a/apps/web-ele/src/views/infra/dataSourceConfig/data.ts +++ b/apps/web-ele/src/views/infra/dataSourceConfig/data.ts @@ -62,6 +62,7 @@ export function useGridColumns( onActionClick: OnActionClickFn, ): VxeTableGridOptions['columns'] { return [ + { type: 'checkbox', width: 40 }, { field: 'id', title: '主键编号', diff --git a/apps/web-ele/src/views/infra/dataSourceConfig/index.vue b/apps/web-ele/src/views/infra/dataSourceConfig/index.vue index 4a2173902e3ae60e4728d7968cbf90cbefe5a885..65eacafe4b9f90764121dc4f556dfdfc5cdab00a 100644 --- a/apps/web-ele/src/views/infra/dataSourceConfig/index.vue +++ b/apps/web-ele/src/views/infra/dataSourceConfig/index.vue @@ -5,16 +5,17 @@ import type { } from '#/adapter/vxe-table'; import type { InfraDataSourceConfigApi } from '#/api/infra/data-source-config'; -import { onMounted } from 'vue'; +import { onMounted, ref } from 'vue'; import { Page, useVbenModal } from '@vben/common-ui'; -import { Plus } from '@vben/icons'; +import { 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 { deleteDataSourceConfig, + deleteDataSourceConfigList, getDataSourceConfigList, } from '#/api/infra/data-source-config'; import { $t } from '#/locales'; @@ -48,11 +49,36 @@ async function onDelete(row: InfraDataSourceConfigApi.DataSourceConfig) { loadingInstance.close(); ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); await handleLoadData(); - } catch { + } finally { loadingInstance.close(); } } +/** 批量删除数据源 */ +async function onDeleteBatch() { + const loadingInstance = ElLoading.service({ + text: $t('ui.actionMessage.deleting'), + fullscreen: true, + }); + try { + await deleteDataSourceConfigList(checkedIds.value); + loadingInstance.close(); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + await handleLoadData(); + } finally { + loadingInstance.close(); + } +} + +const checkedIds = ref([]); +function handleRowCheckboxChange({ + records, +}: { + records: InfraDataSourceConfigApi.DataSourceConfig[]; +}) { + checkedIds.value = records.map((item) => item.id as number); +} + /** 表格操作按钮的回调函数 */ function onActionClick({ code, @@ -87,6 +113,10 @@ const [Grid, gridApi] = useVbenVxeGrid({ }, }, } as VxeTableGridOptions, + gridEvents: { + checkboxAll: handleRowCheckboxChange, + checkboxChange: handleRowCheckboxChange, + }, }); /** 加载数据 */ @@ -110,14 +140,25 @@ onMounted(() => { diff --git a/apps/web-ele/src/views/infra/file/data.ts b/apps/web-ele/src/views/infra/file/data.ts index 18d580cd6f9ca772990f94748d436ca9f1c73f41..43e0669d852b2f6b6c2aa65afce5000c7143dd9d 100644 --- a/apps/web-ele/src/views/infra/file/data.ts +++ b/apps/web-ele/src/views/infra/file/data.ts @@ -61,6 +61,7 @@ export function useGridColumns( onActionClick: OnActionClickFn, ): VxeTableGridOptions['columns'] { return [ + { type: 'checkbox', width: 40 }, { field: 'name', title: '文件名', diff --git a/apps/web-ele/src/views/infra/file/index.vue b/apps/web-ele/src/views/infra/file/index.vue index b30acca1d172bc12f5961164c810cf8eb9b30ded..75385ef6151bcb5b62cd949a1ebba6dcef464eaf 100644 --- a/apps/web-ele/src/views/infra/file/index.vue +++ b/apps/web-ele/src/views/infra/file/index.vue @@ -5,15 +5,16 @@ import type { } from '#/adapter/vxe-table'; import type { InfraFileApi } from '#/api/infra/file'; +import { ref } from 'vue'; + import { Page, useVbenModal } from '@vben/common-ui'; -import { Upload } from '@vben/icons'; -import { openWindow } from '@vben/utils'; +import { isEmpty, openWindow } from '@vben/utils'; import { useClipboard } from '@vueuse/core'; import { ElButton, ElImage, ElLoading, ElMessage } from 'element-plus'; -import { useVbenVxeGrid } from '#/adapter/vxe-table'; -import { deleteFile, getFilePage } from '#/api/infra/file'; +import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; +import { deleteFile, deleteFileList, getFilePage } from '#/api/infra/file'; import { $t } from '#/locales'; import { useGridColumns, useGridFormSchema } from './data'; @@ -70,11 +71,36 @@ async function onDelete(row: InfraFileApi.File) { $t('ui.actionMessage.deleteSuccess', [row.name || row.path]), ); onRefresh(); - } catch { + } finally { + loadingInstance.close(); + } +} + +/** 批量删除文件 */ +async function onDeleteBatch() { + const loadingInstance = ElLoading.service({ + text: $t('ui.actionMessage.deleting'), + fullscreen: true, + }); + try { + await deleteFileList(checkedIds.value); + loadingInstance.close(); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); + } finally { loadingInstance.close(); } } +const checkedIds = ref([]); +function handleRowCheckboxChange({ + records, +}: { + records: InfraFileApi.File[]; +}) { + checkedIds.value = records.map((item) => item.id as number); +} + /** 表格操作按钮的回调函数 */ function onActionClick({ code, row }: OnActionClickParams) { switch (code) { @@ -116,6 +142,10 @@ const [Grid, gridApi] = useVbenVxeGrid({ search: true, }, } as VxeTableGridOptions, + gridEvents: { + checkboxAll: handleRowCheckboxChange, + checkboxChange: handleRowCheckboxChange, + }, }); @@ -124,10 +154,24 @@ const [Grid, gridApi] = useVbenVxeGrid({