diff --git a/packages/libs/lib-server/src/user/access/entity/access.ts b/packages/libs/lib-server/src/user/access/entity/access.ts index fa8349370..3bebf7bfa 100644 --- a/packages/libs/lib-server/src/user/access/entity/access.ts +++ b/packages/libs/lib-server/src/user/access/entity/access.ts @@ -7,8 +7,12 @@ import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; export class AccessEntity { @PrimaryGeneratedColumn() id: number; + @Column({ name: 'key_id', comment: 'key_id', length: 100 }) + keyId: string; + @Column({ name: 'user_id', comment: '用户id' }) userId: number; // 0为系统级别, -1为企业,大于1为用户 + @Column({ comment: '名称', length: 100 }) name: string; diff --git a/packages/libs/lib-server/src/user/access/service/access-service.ts b/packages/libs/lib-server/src/user/access/service/access-service.ts index f3e1ee29d..562b29cf7 100644 --- a/packages/libs/lib-server/src/user/access/service/access-service.ts +++ b/packages/libs/lib-server/src/user/access/service/access-service.ts @@ -5,6 +5,7 @@ import {AccessGetter, BaseService, PageReq, PermissionException, ValidateExcepti import {AccessEntity} from '../entity/access.js'; import {AccessDefine, accessRegistry, newAccess} from '@certd/pipeline'; import {EncryptService} from './encrypt-service.js'; +import { logger, utils } from '@certd/basic'; /** * 授权 @@ -46,6 +47,7 @@ export class AccessService extends BaseService { } delete param._copyFrom this.encryptSetting(param, oldEntity); + param.keyId = "ac_" + utils.id.simpleNanoId(); return await super.add(param); } @@ -117,6 +119,7 @@ export class AccessService extends BaseService { throw new ValidateException('该授权配置不存在,请确认是否已被删除'); } this.encryptSetting(param, oldEntity); + delete param.keyId return await super.update(param); } @@ -215,4 +218,36 @@ export class AccessService extends BaseService { }); } + + /** + * 复制授权到其他项目 + * @param accessId + * @param projectId + */ + async copyTo(accessId: number,projectId?: number) { + const access = await this.info(accessId); + if (access == null) { + throw new Error(`该授权配置不存在,请确认是否已被删除:id=${accessId}`); + } + + const keyId = access.keyId; + //检查目标项目里是否已经有相同keyId的配置 + const existAccess = await this.repository.findOne({ + where: { + keyId, + projectId, + }, + }); + if (existAccess) { + logger.info(`目标项目已存在相同keyId的授权配置,跳过复制:keyId=${keyId}`); + return existAccess.id; + } + const newAccess = { + ...access, + id: undefined, + projectId, + } + await this.add(newAccess); + return newAccess.id; + } } diff --git a/packages/libs/lib-server/src/user/addon/entity/addon.ts b/packages/libs/lib-server/src/user/addon/entity/addon.ts index 438de2237..43513e1aa 100644 --- a/packages/libs/lib-server/src/user/addon/entity/addon.ts +++ b/packages/libs/lib-server/src/user/addon/entity/addon.ts @@ -6,6 +6,8 @@ import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; export class AddonEntity { @PrimaryGeneratedColumn() id: number; + @Column({ name: 'key_id', comment: 'key_id', length: 100 }) + keyId: string; @Column({ name: 'user_id', comment: '用户id' }) userId: number; @Column({ comment: '名称', length: 100 }) diff --git a/packages/libs/lib-server/src/user/addon/service/addon-service.ts b/packages/libs/lib-server/src/user/addon/service/addon-service.ts index 38c9636c0..d98d1d02b 100644 --- a/packages/libs/lib-server/src/user/addon/service/addon-service.ts +++ b/packages/libs/lib-server/src/user/addon/service/addon-service.ts @@ -4,6 +4,7 @@ import { In, Repository } from "typeorm"; import { AddonDefine, BaseService, PageReq, ValidateException } from "../../../index.js"; import { addonRegistry } from "../api/index.js"; import { AddonEntity } from "../entity/addon.js"; +import { utils } from "@certd/basic"; /** * Addon @@ -43,6 +44,7 @@ export class AddonService extends BaseService { } else { param.isSystem = false; } + param.keyId = "ad_" + utils.id.simpleNanoId(); delete param._copyFrom; return await super.add(param); } @@ -57,6 +59,7 @@ export class AddonService extends BaseService { if (oldEntity == null) { throw new ValidateException("该Addon配置不存在,请确认是否已被删除"); } + delete param.keyId return await super.update(param); } @@ -67,6 +70,7 @@ export class AddonService extends BaseService { } return { id: entity.id, + keyId: entity.keyId, name: entity.name, userId: entity.userId, addonType: entity.addonType, @@ -100,6 +104,7 @@ export class AddonService extends BaseService { }, select: { id: true, + keyId: true, name: true, addonType: true, type: true, @@ -132,6 +137,7 @@ export class AddonService extends BaseService { const setting = JSON.parse(res.setting); return { id: res.id, + keyId: res.keyId, addonType: res.addonType, type: res.type, name: res.name, diff --git a/packages/ui/certd-client/src/views/certd/mine/user-profile.vue b/packages/ui/certd-client/src/views/certd/mine/user-profile.vue index 0776d49c1..55ceccda6 100644 --- a/packages/ui/certd-client/src/views/certd/mine/user-profile.vue +++ b/packages/ui/certd-client/src/views/certd/mine/user-profile.vue @@ -784,7 +784,7 @@ onMounted(async () => { flex-direction: column; align-items: center; justify-content: center; - padding: 40px 20px; + padding: 20px 10px; color: #9ca3af; } diff --git a/packages/ui/certd-client/src/views/certd/pipeline/api.ts b/packages/ui/certd-client/src/views/certd/pipeline/api.ts index 391cbf1b4..1c84a0842 100644 --- a/packages/ui/certd-client/src/views/certd/pipeline/api.ts +++ b/packages/ui/certd-client/src/views/certd/pipeline/api.ts @@ -110,6 +110,14 @@ export async function BatchUpdateNotificaiton(pipelineIds: number[], notificatio }); } +export async function BatchUpdateProject(pipelineIds: number[], toProjectId: number): Promise { + return await request({ + url: apiPrefix + "/batchTransfer", + method: "post", + data: { ids: pipelineIds, toProjectId: toProjectId }, + }); +} + export async function BatchDelete(pipelineIds: number[]): Promise { return await request({ url: apiPrefix + "/batchDelete", diff --git a/packages/ui/certd-client/src/views/certd/pipeline/components/change-project.vue b/packages/ui/certd-client/src/views/certd/pipeline/components/change-project.vue new file mode 100644 index 000000000..440e36e83 --- /dev/null +++ b/packages/ui/certd-client/src/views/certd/pipeline/components/change-project.vue @@ -0,0 +1,64 @@ + + diff --git a/packages/ui/certd-client/src/views/certd/pipeline/index.vue b/packages/ui/certd-client/src/views/certd/pipeline/index.vue index 8163471ad..89d734003 100644 --- a/packages/ui/certd-client/src/views/certd/pipeline/index.vue +++ b/packages/ui/certd-client/src/views/certd/pipeline/index.vue @@ -42,6 +42,7 @@ +