From e578c52fdf2f838038062aa4209b655fbae461fb Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Tue, 21 Oct 2025 00:01:28 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E8=AF=81=E4=B9=A6=E7=9B=91=E6=8E=A7?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 5 ++- .../src/views/certd/monitor/site/api.ts | 8 ++++ .../src/views/certd/monitor/site/crud.tsx | 38 ++++++++++++++++++- .../src/views/certd/monitor/site/index.vue | 14 +++++-- .../user/monitor/site-info-controller.ts | 8 ++++ 5 files changed, 68 insertions(+), 5 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 4a9c1448..9a59ecda 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,8 @@ { "eslint.debug": false, "eslint.format.enable": true, - "typescript.tsc.autoDetect": "watch" + "typescript.tsc.autoDetect": "watch", + "git.scanRepositories": [ + "./packages/pro" + ] } \ No newline at end of file diff --git a/packages/ui/certd-client/src/views/certd/monitor/site/api.ts b/packages/ui/certd-client/src/views/certd/monitor/site/api.ts index 4e85d98f..c1ebe1bd 100644 --- a/packages/ui/certd-client/src/views/certd/monitor/site/api.ts +++ b/packages/ui/certd-client/src/views/certd/monitor/site/api.ts @@ -35,6 +35,14 @@ export const siteInfoApi = { }); }, + async BatchDelObj(ids: number[]) { + return await request({ + url: apiPrefix + "/batchDelete", + method: "post", + data: { ids }, + }); + }, + async GetObj(id: number) { return await request({ url: apiPrefix + "/info", diff --git a/packages/ui/certd-client/src/views/certd/monitor/site/crud.tsx b/packages/ui/certd-client/src/views/certd/monitor/site/crud.tsx index 37e5827d..1ff7dbcd 100644 --- a/packages/ui/certd-client/src/views/certd/monitor/site/crud.tsx +++ b/packages/ui/certd-client/src/views/certd/monitor/site/crud.tsx @@ -4,7 +4,7 @@ import { AddReq, ColumnCompositionProps, compute, CreateCrudOptionsProps, Create import { siteInfoApi } from "./api"; import * as settingApi from "./setting/api"; import dayjs from "dayjs"; -import { Modal, notification } from "ant-design-vue"; +import { message, Modal, notification } from "ant-design-vue"; import { useSettingStore } from "/@/store/settings"; import { mySuiteApi } from "/@/views/certd/suite/mine/api"; import { mitter } from "/@/utils/util.mitt"; @@ -57,6 +57,27 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat } loadSetting(); + const selectedRowKeys = ref([]); + + const handleBatchDelete = () => { + if (selectedRowKeys.value?.length > 0) { + Modal.confirm({ + title: "确认", + content: `确定要批量删除这${selectedRowKeys.value.length}条记录吗`, + async onOk() { + await api.BatchDelObj(selectedRowKeys.value); + message.info("删除成功"); + crudExpose.doRefresh(); + selectedRowKeys.value = []; + }, + }); + } else { + message.error("请先勾选记录"); + } + }; + + context.handleBatchDelete = handleBatchDelete; + function checkAll() { Modal.confirm({ title: t("certd.monitor.confirmTitle"), // "确认" @@ -79,6 +100,21 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat editRequest, delRequest, }, + settings: { + plugins: { + //这里使用行选择插件,生成行选择crudOptions配置,最终会与crudOptions合并 + rowSelection: { + enabled: true, + props: { + multiple: true, + crossPage: false, + selectedRowKeys: () => { + return selectedRowKeys; + }, + }, + }, + }, + }, form: { labelCol: { //固定label宽度 diff --git a/packages/ui/certd-client/src/views/certd/monitor/site/index.vue b/packages/ui/certd-client/src/views/certd/monitor/site/index.vue index 436620c4..8558e25d 100644 --- a/packages/ui/certd-client/src/views/certd/monitor/site/index.vue +++ b/packages/ui/certd-client/src/views/certd/monitor/site/index.vue @@ -15,7 +15,13 @@ - + + + @@ -26,12 +32,14 @@ import createCrudOptions from "./crud"; import { siteInfoApi } from "./api"; import { Modal, notification } from "ant-design-vue"; import { useI18n } from "/src/locales"; - +import * as api from "./api"; const { t } = useI18n(); defineOptions({ name: "SiteCertMonitor", }); -const { crudBinding, crudRef, crudExpose } = useFs({ createCrudOptions, context: {} }); +const { crudBinding, crudRef, crudExpose, context } = useFs({ createCrudOptions }); + +const handleBatchDelete = context.handleBatchDelete; // 页面打开后获取列表数据 onMounted(() => { diff --git a/packages/ui/certd-server/src/controller/user/monitor/site-info-controller.ts b/packages/ui/certd-server/src/controller/user/monitor/site-info-controller.ts index d2e2e73a..390a47c0 100644 --- a/packages/ui/certd-server/src/controller/user/monitor/site-info-controller.ts +++ b/packages/ui/certd-server/src/controller/user/monitor/site-info-controller.ts @@ -92,6 +92,14 @@ export class SiteInfoController extends CrudController { return await super.delete(id); } + + @Post('/batchDelete', { summary: Constants.per.authOnly }) + async batchDelete(@Body(ALL) body: any) { + const userId = this.getUserId(); + await this.service.batchDelete(body.ids,userId); + return this.ok(); + } + @Post('/check', { summary: Constants.per.authOnly }) async check(@Body('id') id: number) { await this.service.checkUserId(id, this.getUserId());