diff --git a/packages/libs/lib-server/src/system/settings/service/sys-settings-service.ts b/packages/libs/lib-server/src/system/settings/service/sys-settings-service.ts index be22bd25..35498e09 100644 --- a/packages/libs/lib-server/src/system/settings/service/sys-settings-service.ts +++ b/packages/libs/lib-server/src/system/settings/service/sys-settings-service.ts @@ -3,11 +3,12 @@ import { InjectEntityModel } from '@midwayjs/typeorm'; import { Repository } from 'typeorm'; import { SysSettingsEntity } from '../entity/sys-settings.js'; import { BaseSettings, SysInstallInfo, SysPrivateSettings, SysPublicSettings, SysSecret, SysSecretBackup } from './models.js'; -import * as _ from 'lodash-es'; + import { BaseService } from '../../../basic/index.js'; import { cache, logger, setGlobalProxy } from '@certd/basic'; import * as dns from 'node:dns'; - +import {mergeUtils} from "@certd/basic"; +const {merge} = mergeUtils; /** * 设置 */ @@ -75,7 +76,7 @@ export class SysSettingsService extends BaseService { } let newSetting: T = new type(); const savedSettings = await this.getSettingByKey(key); - newSetting = _.merge(newSetting, savedSettings); + newSetting = merge(newSetting, savedSettings); await this.saveSetting(newSetting); cache.set(cacheKey, newSetting); return newSetting; diff --git a/packages/plugins/plugin-cert/src/plugin/cert-plugin/base.ts b/packages/plugins/plugin-cert/src/plugin/cert-plugin/base.ts index 6692b6ad..226e38b5 100644 --- a/packages/plugins/plugin-cert/src/plugin/cert-plugin/base.ts +++ b/packages/plugins/plugin-cert/src/plugin/cert-plugin/base.ts @@ -8,7 +8,7 @@ export abstract class CertApplyBasePlugin extends CertApplyBaseConvertPlugin { @TaskInput({ title: "邮箱", component: { - name: "a-input", + name: "email-selector", vModel: "value", }, rules: [{ type: "email", message: "请输入正确的邮箱" }], diff --git a/packages/ui/certd-client/src/components/email-selector/api.ts b/packages/ui/certd-client/src/components/email-selector/api.ts new file mode 100644 index 00000000..efed705f --- /dev/null +++ b/packages/ui/certd-client/src/components/email-selector/api.ts @@ -0,0 +1,29 @@ +import { request } from "/src/api/service"; + +export async function EmailList() { + return await request({ + url: "/mine/email/list", + method: "post", + data: {}, + }); +} + +export async function EmailDelete(email: string) { + return await request({ + url: "/mine/email/delete", + method: "post", + data: { + email: email, + }, + }); +} + +export async function EmailAdd(email: string) { + return await request({ + url: "/mine/email/add", + method: "post", + data: { + email: email, + }, + }); +} diff --git a/packages/ui/certd-client/src/components/email-selector/index.vue b/packages/ui/certd-client/src/components/email-selector/index.vue new file mode 100644 index 00000000..2c1fa884 --- /dev/null +++ b/packages/ui/certd-client/src/components/email-selector/index.vue @@ -0,0 +1,82 @@ + + + diff --git a/packages/ui/certd-client/src/components/index.ts b/packages/ui/certd-client/src/components/index.ts index ca01c51e..008752a2 100644 --- a/packages/ui/certd-client/src/components/index.ts +++ b/packages/ui/certd-client/src/components/index.ts @@ -14,12 +14,14 @@ import FileInput from "./file-input.vue"; import PemInput from "./pem-input.vue"; import { defineAsyncComponent } from "vue"; import NotificationSelector from "../views/certd/notification/notification-selector/index.vue"; +import EmailSelector from "./email-selector/index.vue"; export default { install(app: any) { app.component( "CodeEditor", defineAsyncComponent(() => import("./code-editor/index.vue")) ); + app.component("EmailSelector", EmailSelector); app.component("NotificationSelector", NotificationSelector); app.component("PiContainer", PiContainer); app.component("TextEditable", TextEditable); diff --git a/packages/ui/certd-client/src/components/vip-button/api.ts b/packages/ui/certd-client/src/components/vip-button/api.ts index 292b49d4..200e38ac 100644 --- a/packages/ui/certd-client/src/components/vip-button/api.ts +++ b/packages/ui/certd-client/src/components/vip-button/api.ts @@ -4,7 +4,7 @@ export async function doActive(form: any) { return await request({ url: "/sys/plus/active", method: "post", - data: form + data: form, }); } @@ -12,6 +12,6 @@ export async function getVipTrial() { return await request({ url: "/sys/plus/getVipTrial", method: "post", - data: {} + data: {}, }); } diff --git a/packages/ui/certd-server/src/controller/user/mine/email-controller.ts b/packages/ui/certd-server/src/controller/user/mine/email-controller.ts index 856ba00e..e5daf16b 100644 --- a/packages/ui/certd-server/src/controller/user/mine/email-controller.ts +++ b/packages/ui/certd-server/src/controller/user/mine/email-controller.ts @@ -17,4 +17,25 @@ export class EmailController extends BaseController { await this.emailService.test(userId, receiver); return this.ok({}); } + + @Post('/list', { summary: Constants.per.authOnly }) + public async list() { + const userId = super.getUserId(); + const res = await this.emailService.list(userId); + return this.ok(res); + } + + @Post('/add', { summary: Constants.per.authOnly }) + public async add(@Body('email') email) { + const userId = super.getUserId(); + await this.emailService.add(userId, email); + return this.ok({}); + } + + @Post('/delete', { summary: Constants.per.authOnly }) + public async delete(@Body('email') email) { + const userId = super.getUserId(); + await this.emailService.delete(userId, email); + return this.ok({}); + } } diff --git a/packages/ui/certd-server/src/modules/basic/service/email-service.ts b/packages/ui/certd-server/src/modules/basic/service/email-service.ts index 1a5af9bd..25b19644 100644 --- a/packages/ui/certd-server/src/modules/basic/service/email-service.ts +++ b/packages/ui/certd-server/src/modules/basic/service/email-service.ts @@ -10,6 +10,7 @@ import { SendMailOptions } from 'nodemailer'; import { UserSettingsService } from '../../mine/service/user-settings-service.js'; import { PlusService, SysSettingsService, SysSiteInfo } from '@certd/lib-server'; import { getEmailSettings } from '../../sys/settings/fix.js'; +import { UserEmailSetting } from "../../mine/service/models.js"; export type EmailConfig = { host: string; @@ -108,4 +109,24 @@ export class EmailService implements IEmailService { content: '测试邮件,from certd', }); } + + async list(userId: any) { + const userEmailSetting = await this.settingsService.getSetting(userId,UserEmailSetting) + return userEmailSetting.list; + } + + async delete(userId: any, email: string) { + const userEmailSetting = await this.settingsService.getSetting(userId,UserEmailSetting) + userEmailSetting.list = userEmailSetting.list.filter(item=>item !== email); + await this.settingsService.saveSetting(userId,userEmailSetting) + } + async add(userId: any, email: string) { + const userEmailSetting = await this.settingsService.getSetting(userId,UserEmailSetting) + //如果已存在 + if(userEmailSetting.list.includes(email)){ + return + } + userEmailSetting.list.unshift(email) + await this.settingsService.saveSetting(userId,userEmailSetting) + } } 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 0d589aab..90ea441d 100644 --- a/packages/ui/certd-server/src/modules/mine/service/models.ts +++ b/packages/ui/certd-server/src/modules/mine/service/models.ts @@ -26,3 +26,10 @@ export class UserSiteMonitorSetting extends BaseSettings { notificationId?:number= 0; } + +export class UserEmailSetting extends BaseSettings { + static __title__ = "用户邮箱设置"; + static __key__ = "user.email"; + + list:string[] = []; +} diff --git a/packages/ui/certd-server/src/modules/mine/service/user-settings-service.ts b/packages/ui/certd-server/src/modules/mine/service/user-settings-service.ts index 852a8780..b036a9e9 100644 --- a/packages/ui/certd-server/src/modules/mine/service/user-settings-service.ts +++ b/packages/ui/certd-server/src/modules/mine/service/user-settings-service.ts @@ -3,8 +3,8 @@ import { InjectEntityModel } from "@midwayjs/typeorm"; import { Repository } from "typeorm"; import { BaseService, BaseSettings } from "@certd/lib-server"; import { UserSettingsEntity } from "../entity/user-settings.js"; -import { merge } from "lodash-es"; - +import { mergeUtils } from "@certd/basic"; +const {merge} = mergeUtils /** * 授权 */