diff --git a/packages/core/pipeline/src/notification/api.ts b/packages/core/pipeline/src/notification/api.ts index cadd5956..79044e6e 100644 --- a/packages/core/pipeline/src/notification/api.ts +++ b/packages/core/pipeline/src/notification/api.ts @@ -4,6 +4,7 @@ import { FormItemProps, HistoryResult, Pipeline } from "../dt/index.js"; import { HttpClient, ILogger, utils } from "@certd/basic"; import * as _ from "lodash-es"; import { IEmailService } from "../service/index.js"; +import { isPlus } from "@certd/plus-core"; export type NotificationBody = { userId?: number; @@ -65,9 +66,17 @@ export type NotificationContext = { }; export abstract class BaseNotification implements INotification { + define!: NotificationDefine; ctx!: NotificationContext; http!: HttpClient; logger!: ILogger; + + async doSend(body: NotificationBody) { + if (this.define.needPlus && !isPlus()) { + body.content = `${body.content}\n\n注意:此通知渠道已调整为专业版功能,后续版本将不再支持发送,请尽快修改或升级为专业版`; + } + return await this.send(body); + } abstract send(body: NotificationBody): Promise; // eslint-disable-next-line @typescript-eslint/no-empty-function @@ -77,6 +86,9 @@ export abstract class BaseNotification implements INotification { this.http = ctx.http; this.logger = ctx.logger; } + setDefine = (define: NotificationDefine) => { + this.define = define; + }; async onRequest(req: NotificationRequestHandleReq) { if (!req.action) { @@ -98,7 +110,7 @@ export abstract class BaseNotification implements INotification { } async onTestRequest() { - await this.send({ + await this.doSend({ userId: 0, title: "【Certd】测试通知,标题长度测试、测试、测试", content: "测试通知", diff --git a/packages/core/pipeline/src/notification/decorator.ts b/packages/core/pipeline/src/notification/decorator.ts index bd3bbf2d..721dcd5c 100644 --- a/packages/core/pipeline/src/notification/decorator.ts +++ b/packages/core/pipeline/src/notification/decorator.ts @@ -2,7 +2,8 @@ import { Decorator } from "../decorator/index.js"; import * as _ from "lodash-es"; import { notificationRegistry } from "./registry.js"; -import { NotificationBody, NotificationContext, NotificationDefine, NotificationInputDefine, NotificationInstanceConfig } from "./api.js"; +import { BaseNotification, NotificationBody, NotificationContext, NotificationDefine, NotificationInputDefine, NotificationInstanceConfig } from "./api.js"; +import { isPlus } from "@certd/plus-core"; // 提供一个唯一 key export const NOTIFICATION_CLASS_KEY = "pipeline:notification"; @@ -43,6 +44,7 @@ export async function newNotification(type: string, input: any, ctx: Notificatio if (register == null) { throw new Error(`notification ${type} not found`); } + // @ts-ignore const plugin = new register.target(); for (const key in input) { @@ -51,12 +53,16 @@ export async function newNotification(type: string, input: any, ctx: Notificatio if (!ctx) { throw new Error("ctx is required"); } + plugin.setDefine(register.define); plugin.setCtx(ctx); await plugin.onInstance(); return plugin; } export async function sendNotification(opts: { config: NotificationInstanceConfig; ctx: NotificationContext; body: NotificationBody }) { - const notification = await newNotification(opts.config.type, opts.config.setting, opts.ctx); - await notification.send(opts.body); + const notification: BaseNotification = await newNotification(opts.config.type, opts.config.setting, opts.ctx); + if (notification.define.needPlus && !isPlus()) { + opts.body.content = `${opts.body.content}\n\n注意:此通知渠道已调整为专业版功能,后续版本将不再支持发送,请尽快修改或升级为专业版`; + } + await notification.doSend(opts.body); } diff --git a/packages/ui/certd-client/src/api/modules/api.user.ts b/packages/ui/certd-client/src/api/modules/api.user.ts index 00a016d3..5edda53c 100644 --- a/packages/ui/certd-client/src/api/modules/api.user.ts +++ b/packages/ui/certd-client/src/api/modules/api.user.ts @@ -27,6 +27,7 @@ export interface UserInfoRes { nickName: string; avatar: string; roleIds: number[]; + isWeak?: boolean; } export interface LoginRes { diff --git a/packages/ui/certd-client/src/views/certd/mine/change-password-button.vue b/packages/ui/certd-client/src/views/certd/mine/change-password-button.vue new file mode 100644 index 00000000..d902c65f --- /dev/null +++ b/packages/ui/certd-client/src/views/certd/mine/change-password-button.vue @@ -0,0 +1,102 @@ + + + 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 d87718bd..dd90050c 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 @@ -16,7 +16,7 @@ {{ userInfo.email }} {{ userInfo.phoneCode }}{{ userInfo.mobile }} - 修改密码 + @@ -26,8 +26,7 @@ diff --git a/packages/ui/certd-client/src/views/certd/notification/common.tsx b/packages/ui/certd-client/src/views/certd/notification/common.tsx index b507ef8a..15cdb65a 100644 --- a/packages/ui/certd-client/src/views/certd/notification/common.tsx +++ b/packages/ui/certd-client/src/views/certd/notification/common.tsx @@ -121,8 +121,9 @@ export function getCommonColumnDefine(crudExpose: any, typeRef: any, api: any) { if (!immediate) { form.body = {}; - - mitter.emit("openVipModal"); + if (define.needPlus) { + mitter.emit("openVipModal"); + } } if (!form.name || form.name === lastTitle) { diff --git a/packages/ui/certd-client/src/views/framework/home/index.vue b/packages/ui/certd-client/src/views/framework/home/index.vue index f1b24c96..be2eb398 100644 --- a/packages/ui/certd-client/src/views/framework/home/index.vue +++ b/packages/ui/certd-client/src/views/framework/home/index.vue @@ -2,12 +2,33 @@ +