From df9846332596d2afaba53e66d2897aa1c598f9c4 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Tue, 7 Apr 2026 23:36:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E6=8F=92=E4=BB=B6=E5=88=A0=E9=99=A4=E5=90=8E=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E5=8F=8D=E6=B3=A8=E5=86=8C=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../libs/lib-server/src/basic/base-service.ts | 18 ++++++++++++++++-- .../certd-client/src/views/sys/plugin/crud.tsx | 14 +++++++++++--- .../controller/sys/plugin/plugin-controller.ts | 3 ++- .../modules/plugin/service/plugin-service.ts | 7 ++----- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/packages/libs/lib-server/src/basic/base-service.ts b/packages/libs/lib-server/src/basic/base-service.ts index b653dccbe..399a777e0 100644 --- a/packages/libs/lib-server/src/basic/base-service.ts +++ b/packages/libs/lib-server/src/basic/base-service.ts @@ -76,10 +76,12 @@ export abstract class BaseService { * @param where */ async delete(ids: string | any[], where?: any) { - const idArr = this.resolveIdArr(ids); + let idArr = this.resolveIdArr(ids); + idArr = this.filterIds(idArr); if (idArr.length === 0) { return; } + await this.getRepository().delete({ id: In(idArr), ...where, @@ -94,7 +96,9 @@ export abstract class BaseService { } if (typeof ids === 'string') { return ids.split(','); - } else { + } else if(!Array.isArray(ids)){ + return [ids]; + }else { return ids; } } @@ -217,6 +221,7 @@ export abstract class BaseService { if (!Array.isArray(ids)) { ids = [ids]; } + ids = this.filterIds(ids); const res = await this.getRepository().find({ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore @@ -234,7 +239,16 @@ export abstract class BaseService { throw new PermissionException('权限不足'); } + filterIds(ids: any[]) { + if (!ids) { + throw new ValidateException('ids不能为空'); + } + return ids.filter((item) => { + return item!=null && item != "" + }); + } async batchDelete(ids: number[], userId: number,projectId?:number) { + ids = this.filterIds(ids); if(userId!=null){ const list = await this.getRepository().find({ where: { diff --git a/packages/ui/certd-client/src/views/sys/plugin/crud.tsx b/packages/ui/certd-client/src/views/sys/plugin/crud.tsx index c0fa5f11e..496768aca 100644 --- a/packages/ui/certd-client/src/views/sys/plugin/crud.tsx +++ b/packages/ui/certd-client/src/views/sys/plugin/crud.tsx @@ -9,6 +9,7 @@ import yaml from "js-yaml"; import { usePluginImport } from "./use-import"; import { usePluginConfig } from "./use-config"; import { useSettingStore } from "/src/store/settings/index"; +import { usePluginStore } from "/@/store/plugin"; export default function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet { const router = useRouter(); @@ -43,6 +44,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat const { openConfigDialog } = usePluginConfig(); const settingStore = useSettingStore(); + const pluginStore = usePluginStore(); return { crudOptions: { settings: { @@ -83,6 +85,15 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat }, }, }, + table: { + rowKey: "name", + remove: { + afterRemove: async context => { + await pluginStore.reload(); + }, + confirmMessage: "确定要删除吗?如果该插件已被使用,删除可能会导致流水线执行失败!", + }, + }, rowHandle: { show: true, minWidth: 200, @@ -142,9 +153,6 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat }, }, }, - table: { - rowKey: "name", - }, tabs: { name: "type", show: true, diff --git a/packages/ui/certd-server/src/controller/sys/plugin/plugin-controller.ts b/packages/ui/certd-server/src/controller/sys/plugin/plugin-controller.ts index 0af62fafc..b389a7c1d 100644 --- a/packages/ui/certd-server/src/controller/sys/plugin/plugin-controller.ts +++ b/packages/ui/certd-server/src/controller/sys/plugin/plugin-controller.ts @@ -58,7 +58,8 @@ export class PluginController extends CrudController { @Post('/delete', { description: 'sys:settings:edit' }) async delete(@Query('id') id: number) { - return super.deleteByIds([id]); + const res = await this.service.deleteByIds([id]); + return this.ok(res); } @Post('/deleteByIds', { description: 'sys:settings:edit' }) diff --git a/packages/ui/certd-server/src/modules/plugin/service/plugin-service.ts b/packages/ui/certd-server/src/modules/plugin/service/plugin-service.ts index 3c453e959..922182751 100644 --- a/packages/ui/certd-server/src/modules/plugin/service/plugin-service.ts +++ b/packages/ui/certd-server/src/modules/plugin/service/plugin-service.ts @@ -524,15 +524,12 @@ export class PluginService extends BaseService { id: pluginEntity.id }; } - - async deleteByIds(ids: any[]) { + ids = this.filterIds(ids); for (const id of ids) { - await this.unRegisterById(id) + await this.unRegisterById(id); await this.delete(id); } - } - }