diff --git a/apps/web-antd/src/api/infra/data-source-config/index.ts b/apps/web-antd/src/api/infra/data-source-config/index.ts index 88641f65..81a3b0e3 100644 --- a/apps/web-antd/src/api/infra/data-source-config/index.ts +++ b/apps/web-antd/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-antd/src/views/infra/dataSourceConfig/data.ts b/apps/web-antd/src/views/infra/dataSourceConfig/data.ts index 8ea49f89..507c6616 100644 --- a/apps/web-antd/src/views/infra/dataSourceConfig/data.ts +++ b/apps/web-antd/src/views/infra/dataSourceConfig/data.ts @@ -55,6 +55,7 @@ export function useFormSchema(): VbenFormSchema[] { /** 列表的字段 */ export function useGridColumns(): VxeTableGridOptions['columns'] { return [ + { type: 'checkbox', width: 50 }, { field: 'id', title: '主键编号', diff --git a/apps/web-antd/src/views/infra/dataSourceConfig/index.vue b/apps/web-antd/src/views/infra/dataSourceConfig/index.vue index 77098f78..16305f8e 100644 --- a/apps/web-antd/src/views/infra/dataSourceConfig/index.vue +++ b/apps/web-antd/src/views/infra/dataSourceConfig/index.vue @@ -2,15 +2,17 @@ import type { VxeTableGridOptions } 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 { confirm, Page, useVbenModal } from '@vben/common-ui'; +import { isEmpty } from '@vben/utils'; import { message } from 'ant-design-vue'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { deleteDataSourceConfig, + deleteDataSourceConfigList, getDataSourceConfigList, } from '#/api/infra/data-source-config'; import { $t } from '#/locales'; @@ -52,6 +54,32 @@ async function handleDelete(row: InfraDataSourceConfigApi.DataSourceConfig) { } } +/** 批量删除数据源 */ +async function handleDeleteBatch() { + await confirm($t('ui.actionMessage.deleteBatchConfirm')); + const hideLoading = message.loading({ + content: $t('ui.actionMessage.deletingBatch'), + duration: 0, + }); + try { + await deleteDataSourceConfigList(checkedIds.value); + checkedIds.value = []; + message.success($t('ui.actionMessage.deleteSuccess')); + await handleLoadData(); + } finally { + hideLoading(); + } +} + +const checkedIds = ref([]); +function handleRowCheckboxChange({ + records, +}: { + records: InfraDataSourceConfigApi.DataSourceConfig[]; +}) { + checkedIds.value = records.map((item) => item.id!); +} + const [Grid, gridApi] = useVbenVxeGrid({ gridOptions: { columns: useGridColumns(), @@ -59,6 +87,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ keepSource: true, rowConfig: { keyField: 'id', + isHover: true, }, pagerConfig: { enabled: false, @@ -69,6 +98,10 @@ const [Grid, gridApi] = useVbenVxeGrid({ }, }, } as VxeTableGridOptions, + gridEvents: { + checkboxAll: handleRowCheckboxChange, + checkboxChange: handleRowCheckboxChange, + }, }); /** 加载数据 */ @@ -96,6 +129,15 @@ onMounted(() => { auth: ['infra:data-source-config:create'], onClick: handleCreate, }, + { + label: $t('ui.actionTitle.deleteBatch'), + type: 'primary', + danger: true, + icon: ACTION_ICON.DELETE, + disabled: isEmpty(checkedIds), + auth: ['infra:data-source-config:delete'], + onClick: handleDeleteBatch, + }, ]" />