From cd35568e042e6ab928685efad51cdbed823d2d4f Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Tue, 14 Oct 2025 22:25:04 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E8=AF=81=E4=B9=A6=E7=9B=91=E6=8E=A7?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=AE=BE=E7=BD=AE=E8=AF=81=E4=B9=A6=E5=8D=B3?= =?UTF-8?q?=E5=B0=86=E8=BF=87=E6=9C=9F=E5=A4=A9=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin-cert/src/plugin/cert-plugin/index.ts | 6 +++--- .../certd-client/src/locales/langs/en-US/certd.ts | 2 ++ .../certd-client/src/locales/langs/zh-CN/certd.ts | 2 ++ .../src/views/certd/monitor/site/crud.tsx | 14 +++++++++++++- .../src/views/certd/monitor/site/setting/api.ts | 1 + .../src/views/certd/monitor/site/setting/index.vue | 6 ++++++ .../src/modules/mine/service/models.ts | 1 + .../modules/monitor/service/site-info-service.ts | 5 ++--- 8 files changed, 30 insertions(+), 7 deletions(-) diff --git a/packages/plugins/plugin-cert/src/plugin/cert-plugin/index.ts b/packages/plugins/plugin-cert/src/plugin/cert-plugin/index.ts index 3cac97e5..8811ccd3 100644 --- a/packages/plugins/plugin-cert/src/plugin/cert-plugin/index.ts +++ b/packages/plugins/plugin-cert/src/plugin/cert-plugin/index.ts @@ -133,9 +133,9 @@ export class CertApplyPlugin extends CertApplyBasePlugin { name: "icon-select", vModel: "value", options: [ - { value: "letsencrypt", label: "Let's Encrypt", icon: "simple-icons:letsencrypt" }, - { value: "google", label: "Google", icon: "flat-color-icons:google" }, - { value: "zerossl", label: "ZeroSSL", icon: "emojione:digit-zero" }, + { value: "letsencrypt", label: "Let's Encrypt(免费,新手推荐)", icon: "simple-icons:letsencrypt" }, + { value: "google", label: "Google(免费)", icon: "flat-color-icons:google" }, + { value: "zerossl", label: "ZeroSSL(免费)", icon: "emojione:digit-zero" }, { value: "sslcom", label: "SSL.com(仅主域名和www免费)", icon: "la:expeditedssl" }, ], }, 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 e76e4ded..373727a9 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 @@ -281,6 +281,8 @@ export default { cronTrigger: "Scheduled trigger for monitoring", dnsServer: "DNS Server", dnsServerHelper: "Use a custom domain name resolution server, such as: 1.1.1.1 , support multiple", + certValidDays: "Certificate Valid Days", + certValidDaysHelper: "Number of days before expiration to send a notification", }, }, checkStatus: { 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 72631023..f5535c99 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 @@ -286,6 +286,8 @@ export default { cronTrigger: "定时触发监控", dnsServer: "DNS服务器", dnsServerHelper: "使用自定义的域名解析服务器,如:1.1.1.1 , 支持多个", + certValidDays: "证书到期前天数", + certValidDaysHelper: "证书到期前多少天发送通知", }, }, checkStatus: { 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 b600793c..524130bf 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 @@ -2,6 +2,7 @@ import { useI18n } from "/src/locales"; import { AddReq, ColumnCompositionProps, compute, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; import { siteInfoApi } from "./api"; +import * as settingApi from "./setting/api"; import dayjs from "dayjs"; import { Modal, notification } from "ant-design-vue"; import { useSettingStore } from "/@/store/settings"; @@ -9,6 +10,7 @@ import { mySuiteApi } from "/@/views/certd/suite/mine/api"; import { mitter } from "/@/utils/util.mitt"; import { useSiteIpMonitor } from "./ip/use"; import { useSiteImport } from "/@/views/certd/monitor/site/use"; +import { ref } from "vue"; export default function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet { const { t } = useI18n(); @@ -47,6 +49,14 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat const { openSiteIpMonitorDialog } = useSiteIpMonitor(); const { openSiteImportDialog } = useSiteImport(); + const certValidDaysRef = ref(10); + + async function loadSetting() { + const setting = await settingApi.SiteMonitorSettingsGet(); + certValidDaysRef.value = setting?.certValidDays || 10; + } + loadSetting() + function checkAll() { Modal.confirm({ title: t("certd.monitor.confirmTitle"), // "确认" @@ -385,6 +395,8 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat column: { conditionalRender: false, cellRender({ row }) { + + const certValidDays = certValidDaysRef.value; const { certEffectiveTime: effectiveTime, certExpiresTime: expiresTime } = row || {}; if (!expiresTime) { return "-"; @@ -397,7 +409,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat const effectiveDays = Math.max(90, dayjs(expiresTime).diff(applyDate, "day")); // 距离失效时间剩余天数 const leftDays = dayjs(expiresTime).diff(dayjs(), "day"); - const color = leftDays < 20 ? "red" : "#389e0d"; + const color = leftDays < certValidDays ? "red" : "#389e0d"; const percent = (leftDays / effectiveDays) * 100; // console.log('cellRender', 'effectiveDays', effectiveDays, 'expiresTime', expiresTime, 'applyTime', applyTime, 'percent', percent, row) return `${leftDays}${t("certd.monitor.days")}`} />; diff --git a/packages/ui/certd-client/src/views/certd/monitor/site/setting/api.ts b/packages/ui/certd-client/src/views/certd/monitor/site/setting/api.ts index ffe79de9..88e936b4 100644 --- a/packages/ui/certd-client/src/views/certd/monitor/site/setting/api.ts +++ b/packages/ui/certd-client/src/views/certd/monitor/site/setting/api.ts @@ -6,6 +6,7 @@ export type UserSiteMonitorSetting = { retryTimes?: number; cron?: string; dnsServer?: string[]; + certValidDays?: number; }; export async function SiteMonitorSettingsGet() { diff --git a/packages/ui/certd-client/src/views/certd/monitor/site/setting/index.vue b/packages/ui/certd-client/src/views/certd/monitor/site/setting/index.vue index 60054fd5..c0cfdd95 100644 --- a/packages/ui/certd-client/src/views/certd/monitor/site/setting/index.vue +++ b/packages/ui/certd-client/src/views/certd/monitor/site/setting/index.vue @@ -17,6 +17,12 @@
{{ t("certd.monitor.setting.monitorRetryTimes") }}
+ +
+ +
+
{{ t("certd.monitor.setting.certValidDaysHelper") }}
+
diff --git a/packages/ui/certd-server/src/modules/mine/service/models.ts b/packages/ui/certd-server/src/modules/mine/service/models.ts index f74cebdb..fc8ce6ca 100644 --- a/packages/ui/certd-server/src/modules/mine/service/models.ts +++ b/packages/ui/certd-server/src/modules/mine/service/models.ts @@ -28,6 +28,7 @@ export class UserSiteMonitorSetting extends BaseSettings { cron?:string = undefined; retryTimes?:number = 3; dnsServer?:string[] = undefined; + certValidDays?:number = 10; } export class UserEmailSetting extends BaseSettings { diff --git a/packages/ui/certd-server/src/modules/monitor/service/site-info-service.ts b/packages/ui/certd-server/src/modules/monitor/service/site-info-service.ts index 8c21d9d4..a131eee7 100644 --- a/packages/ui/certd-server/src/modules/monitor/service/site-info-service.ts +++ b/packages/ui/certd-server/src/modules/monitor/service/site-info-service.ts @@ -275,13 +275,12 @@ export class SiteInfoService extends BaseService { } async sendExpiresNotify(site: SiteInfoEntity) { - - const tipDays = 10; + const setting = await this.userSettingsService.getSetting(site.userId, UserSiteMonitorSetting) + const tipDays = setting?.certValidDays || 10; const expires = site.certExpiresTime; const validDays = dayjs(expires).diff(dayjs(), "day"); const url = await this.notificationService.getBindUrl("#/certd/monitor/site"); - const setting = await this.userSettingsService.getSetting(site.userId, UserSiteMonitorSetting) const content = `站点名称: ${site.name} \n站点域名: ${site.domain} \n证书域名: ${site.certDomains} \n颁发机构: ${site.certProvider} \n过期时间: ${dayjs(site.certExpiresTime).format("YYYY-MM-DD")} \n`; if (validDays >= 0 && validDays < tipDays) { // 发通知