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 56890bea5..575c92447 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 63660bdf9..eccfb911e 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/views/system/sms/channel/data.ts b/apps/web-ele/src/views/system/sms/channel/data.ts index c37faf345..9f9232a86 100644 --- a/apps/web-ele/src/views/system/sms/channel/data.ts +++ b/apps/web-ele/src/views/system/sms/channel/data.ts @@ -139,6 +139,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/sms/channel/index.vue b/apps/web-ele/src/views/system/sms/channel/index.vue index d4db14844..e01b2c7ad 100644 --- a/apps/web-ele/src/views/system/sms/channel/index.vue +++ b/apps/web-ele/src/views/system/sms/channel/index.vue @@ -5,15 +5,17 @@ import type { } from '#/adapter/vxe-table'; import type { SystemSmsChannelApi } from '#/api/system/sms/channel'; +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 { ElLoading, ElMessage } from 'element-plus'; -import { useVbenVxeGrid } from '#/adapter/vxe-table'; +import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { deleteSmsChannel, + deleteSmsChannelList, exportSmsChannel, getSmsChannelPage, } from '#/api/system/sms/channel'; @@ -58,13 +60,35 @@ async function onDelete(row: SystemSmsChannelApi.SmsChannel) { await deleteSmsChannel(row.id as number); ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.signature])); onRefresh(); - } catch { - // 异常处理 } finally { loadingInstance.close(); } } +/** 批量删除短信渠道 */ +async function onDeleteBatch() { + const loadingInstance = ElLoading.service({ + text: $t('ui.actionMessage.deleting'), + fullscreen: true, + }); + try { + await deleteSmsChannelList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); + } finally { + loadingInstance.close(); + } +} + +const checkedIds = ref([]); +function handleRowCheckboxChange({ + records, +}: { + records: SystemSmsChannelApi.SmsChannel[]; +}) { + checkedIds.value = records.map((item) => item.id as number); +} + /** 表格操作按钮的回调函数 */ function onActionClick({ code, @@ -109,6 +133,10 @@ const [Grid, gridApi] = useVbenVxeGrid({ search: true, }, } as VxeTableGridOptions, + gridEvents: { + checkboxAll: handleRowCheckboxChange, + checkboxChange: handleRowCheckboxChange, + }, }); @@ -121,23 +149,32 @@ const [Grid, gridApi] = useVbenVxeGrid({ diff --git a/apps/web-ele/src/views/system/sms/template/data.ts b/apps/web-ele/src/views/system/sms/template/data.ts index 950618365..5bb5bc333 100644 --- a/apps/web-ele/src/views/system/sms/template/data.ts +++ b/apps/web-ele/src/views/system/sms/template/data.ts @@ -208,6 +208,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/sms/template/index.vue b/apps/web-ele/src/views/system/sms/template/index.vue index 79cd2542a..1e35e38f1 100644 --- a/apps/web-ele/src/views/system/sms/template/index.vue +++ b/apps/web-ele/src/views/system/sms/template/index.vue @@ -5,15 +5,17 @@ import type { } from '#/adapter/vxe-table'; import type { SystemSmsTemplateApi } from '#/api/system/sms/template'; +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 { ElLoading, ElMessage } from 'element-plus'; -import { useVbenVxeGrid } from '#/adapter/vxe-table'; +import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { deleteSmsTemplate, + deleteSmsTemplateList, exportSmsTemplate, getSmsTemplatePage, } from '#/api/system/sms/template'; @@ -69,13 +71,35 @@ async function onDelete(row: SystemSmsTemplateApi.SmsTemplate) { await deleteSmsTemplate(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 deleteSmsTemplateList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); + } finally { + loadingInstance.close(); + } +} + +const checkedIds = ref([]); +function handleRowCheckboxChange({ + records, +}: { + records: SystemSmsTemplateApi.SmsTemplate[]; +}) { + checkedIds.value = records.map((item) => item.id as number); +} + /** 表格操作按钮的回调函数 */ function onActionClick({ code, @@ -124,6 +148,10 @@ const [Grid, gridApi] = useVbenVxeGrid({ search: true, }, } as VxeTableGridOptions, + gridEvents: { + checkboxAll: handleRowCheckboxChange, + checkboxChange: handleRowCheckboxChange, + }, }); @@ -137,23 +165,32 @@ const [Grid, gridApi] = useVbenVxeGrid({