diff --git a/packages/ui/certd-client/src/locales/langs/en-US/certd.ts b/packages/ui/certd-client/src/locales/langs/en-US/certd.ts index 339c3bce..e22f1443 100644 --- a/packages/ui/certd-client/src/locales/langs/en-US/certd.ts +++ b/packages/ui/certd-client/src/locales/langs/en-US/certd.ts @@ -57,6 +57,7 @@ export default { suiteBuy: "Suite Purchase", myTrade: "My Orders", paymentReturn: "Payment Return", + hasExpired: "Expired", user: { greeting: "Hello", profile: "Account Info", @@ -136,6 +137,10 @@ export default { triggerType: "Trigger Type", pipelineId: "Pipeline Id", }, + pi: { + validTime: "Piepline Valid Time", + validTimeHelper: "Not filled in means permanent validity", + }, types: { certApply: "Certificate Application", certUpload: "Certificate Upload", diff --git a/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts b/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts index 563ccacd..6939ea7e 100644 --- a/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts +++ b/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts @@ -62,6 +62,7 @@ export default { suiteBuy: "套餐购买", myTrade: "我的订单", paymentReturn: "支付返回", + hasExpired: "已过期", user: { greeting: "您好", @@ -142,6 +143,10 @@ export default { triggerType: "触发类型", pipelineId: "流水线Id", }, + pi: { + validTime: "流水线有效期", + validTimeHelper: "不填则为永久有效", + }, types: { certApply: "证书申请", certUpload: "证书上传", diff --git a/packages/ui/certd-client/src/views/certd/pipeline/crud.tsx b/packages/ui/certd-client/src/views/certd/pipeline/crud.tsx index add581aa..edb3146f 100644 --- a/packages/ui/certd-client/src/views/certd/pipeline/crud.tsx +++ b/packages/ui/certd-client/src/views/certd/pipeline/crud.tsx @@ -555,16 +555,36 @@ export default function ({ crudExpose, context: { groupDictRef, selectedRowKeys sorter: true, }, }, - createTime: { - title: t("certd.fields.createTime"), - type: "datetime", + validTime: { + title: t("certd.pi.validTime"), + type: "date", form: { - show: false, + show: true, + helper: t("certd.pi.validTimeHelper"), + valueResolve({ form, key, value }) { + if (value) { + form[key] = value.valueOf(); + } + }, + valueBuilder({ form, key, value }) { + if (value) { + form[key] = dayjs(value); + } + }, }, column: { sorter: true, width: 155, align: "center", + cellRender({ value }) { + if (!value || value <= 0) { + return "-"; + } + if (value < Date.now()) { + return t("certd.hasExpired"); + } + return dayjs(value).format("YYYY-MM-DD"); + }, }, }, updateTime: { diff --git a/packages/ui/certd-server/db/migration/v10033__monitor_remark.sql b/packages/ui/certd-server/db/migration/v10033__monitor_remark.sql index bad71cb3..ea4fd5da 100644 --- a/packages/ui/certd-server/db/migration/v10033__monitor_remark.sql +++ b/packages/ui/certd-server/db/migration/v10033__monitor_remark.sql @@ -15,3 +15,6 @@ CREATE TABLE "cd_group" --分组字段 ALTER TABLE cd_site_info ADD COLUMN "group_id" integer; + +--流水线有效期 +ALTER TABLE pi_pipeline ADD COLUMN "valid_time" integer; diff --git a/packages/ui/certd-server/src/modules/pipeline/entity/pipeline.ts b/packages/ui/certd-server/src/modules/pipeline/entity/pipeline.ts index 6387ef94..a796c213 100644 --- a/packages/ui/certd-server/src/modules/pipeline/entity/pipeline.ts +++ b/packages/ui/certd-server/src/modules/pipeline/entity/pipeline.ts @@ -43,28 +43,19 @@ export class PipelineEntity { @Column({ name:"is_template", comment: '是否模版', nullable: true, default: false }) isTemplate: boolean; - @Column({ - name: 'last_history_time', - comment: '最后一次执行时间', - nullable: true, - }) + @Column({name: 'last_history_time',comment: '最后一次执行时间',nullable: true,}) lastHistoryTime: number; + @Column({name: 'valid_time',comment: '到期时间',nullable: true,default: 0}) + validTime: number; + // 变量 lastVars: any; - @Column({ - name: 'order', - comment: '排序', - nullable: true, - }) + @Column({name: 'order', comment: '排序', nullable: true,}) order: number; - @Column({ - name: 'create_time', - comment: '创建时间', - default: () => 'CURRENT_TIMESTAMP', - }) + @Column({name: 'create_time',comment: '创建时间', default: () => 'CURRENT_TIMESTAMP',}) createTime: Date; @Column({ name: 'update_time', diff --git a/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts b/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts index 3d5b9420..922dcda3 100644 --- a/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts +++ b/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts @@ -457,11 +457,11 @@ export class PipelineService extends BaseService { return; } cron = cron.trim(); - if (cron.startsWith("* *")) { - cron = cron.replace("\* \*", "0 0"); + if (cron.startsWith("* * ")) { + cron = "0 0 " + cron.substring(5); } - if (cron.startsWith("*")) { - cron = cron.replace("\*", "0"); + if (cron.startsWith("* ")) { + cron = "0 " + cron.substring(2); } const triggerId = trigger.id; const name = this.buildCronKey(pipelineId, triggerId); @@ -493,6 +493,9 @@ export class PipelineService extends BaseService { */ async run(id: number, triggerId: string, stepId?: string) { const entity: PipelineEntity = await this.info(id); + if (entity.validTime > 0 && entity.validTime < Date.now()) { + return; + } await this.doRun(entity, triggerId, stepId); }