diff --git a/packages/libs/lib-server/src/system/settings/service/models.ts b/packages/libs/lib-server/src/system/settings/service/models.ts index e633e283..71dd0d6b 100644 --- a/packages/libs/lib-server/src/system/settings/service/models.ts +++ b/packages/libs/lib-server/src/system/settings/service/models.ts @@ -102,3 +102,20 @@ export class SysSiteEnv { contactLink?: string; }; } + +export type MenuItem = { + id: string; + title: string; + icon: string; + link: string; + auth: boolean; + permission?: string; + children?: MenuItem[]; +}; +export class SysHeaderMenus extends BaseSettings { + static __title__ = '顶部菜单'; + static __key__ = 'sys.header.menus'; + static __access__ = 'public'; + + menus: MenuItem[]; +} diff --git a/packages/ui/certd-client/src/api/modules/api.basic.ts b/packages/ui/certd-client/src/api/modules/api.basic.ts index 0d2e3a69..16c7892e 100644 --- a/packages/ui/certd-client/src/api/modules/api.basic.ts +++ b/packages/ui/certd-client/src/api/modules/api.basic.ts @@ -32,6 +32,16 @@ export type SysPublicSetting = { export type SysInstallInfo = { siteId: string; }; +export type MenuItem = { + id: string; + title: string; + icon?: string; + path?: string; + children?: MenuItem[]; +}; +export type HeaderMenus = { + menus: MenuItem[]; +}; export type AllSettings = { sysPublic: SysPublicSetting; @@ -39,6 +49,7 @@ export type AllSettings = { plusInfo: PlusInfo; siteInfo: SiteInfo; siteEnv: SiteEnv; + headerMenus: HeaderMenus; }; export async function loadAllSettings(): Promise { diff --git a/packages/ui/certd-client/src/router/source/modules/sys.ts b/packages/ui/certd-client/src/router/source/modules/sys.ts index 888c907f..da2b55c8 100644 --- a/packages/ui/certd-client/src/router/source/modules/sys.ts +++ b/packages/ui/certd-client/src/router/source/modules/sys.ts @@ -47,7 +47,7 @@ export const sysResources = [ title: "邮箱设置", name: "EmailSetting", path: "/sys/settings/email", - component: "/sys/settings/email-setting.vue", + component: "/sys/settings/email/index.vue", meta: { permission: "sys:settings:view", icon: "ion:mail-outline", @@ -68,6 +68,20 @@ export const sysResources = [ permission: "sys:settings:view" } }, + // { + // title: "顶部菜单设置", + // name: "HeaderMenus", + // path: "/sys/settings/header-menus", + // component: "/sys/settings/header-menus/index.vue", + // meta: { + // show: () => { + // const settingStore = useSettingStore(); + // return settingStore.isComm; + // }, + // icon: "ion:document-text-outline", + // permission: "sys:settings:view" + // } + // }, { title: "系统级授权", name: "SysAccess", diff --git a/packages/ui/certd-client/src/store/modules/settings.ts b/packages/ui/certd-client/src/store/modules/settings.ts index baf72fff..231a1e80 100644 --- a/packages/ui/certd-client/src/store/modules/settings.ts +++ b/packages/ui/certd-client/src/store/modules/settings.ts @@ -5,7 +5,7 @@ import _ from "lodash-es"; import { LocalStorage } from "/src/utils/util.storage"; import * as basicApi from "/@/api/modules/api.basic"; -import { PlusInfo, SiteEnv, SiteInfo, SysInstallInfo, SysPublicSetting } from "/@/api/modules/api.basic"; +import { HeaderMenus, PlusInfo, SiteEnv, SiteInfo, SysInstallInfo, SysPublicSetting } from "/@/api/modules/api.basic"; import { useUserStore } from "/@/store/modules/user"; import { mitter } from "/@/utils/util.mitt"; import { env } from "/@/utils/util.env"; @@ -36,6 +36,7 @@ export interface SettingState { siteInfo: SiteInfo; plusInfo?: PlusInfo; siteEnv?: SiteEnv; + headerMenus?: HeaderMenus; inited?: boolean; } @@ -85,6 +86,9 @@ export const useSettingStore = defineStore({ contactLink: "" } }, + headerMenus: { + menus: [] + }, inited: false }), getters: { diff --git a/packages/ui/certd-client/src/views/sys/settings/api.email.ts b/packages/ui/certd-client/src/views/sys/settings/email/api.email.ts similarity index 100% rename from packages/ui/certd-client/src/views/sys/settings/api.email.ts rename to packages/ui/certd-client/src/views/sys/settings/email/api.email.ts diff --git a/packages/ui/certd-client/src/views/sys/settings/email-setting.vue b/packages/ui/certd-client/src/views/sys/settings/email/index.vue similarity index 98% rename from packages/ui/certd-client/src/views/sys/settings/email-setting.vue rename to packages/ui/certd-client/src/views/sys/settings/email/index.vue index 0dca5f60..a296a54b 100644 --- a/packages/ui/certd-client/src/views/sys/settings/email-setting.vue +++ b/packages/ui/certd-client/src/views/sys/settings/email/index.vue @@ -78,8 +78,8 @@ + diff --git a/packages/ui/certd-server/src/controller/basic/settings-controller.ts b/packages/ui/certd-server/src/controller/basic/settings-controller.ts index 2d3ae66b..90cdf1cf 100644 --- a/packages/ui/certd-server/src/controller/basic/settings-controller.ts +++ b/packages/ui/certd-server/src/controller/basic/settings-controller.ts @@ -1,5 +1,5 @@ import { Config, Controller, Get, Inject, Provide } from '@midwayjs/core'; -import { BaseController, Constants, SysInstallInfo, SysPublicSettings, SysSettingsService, SysSiteEnv, SysSiteInfo } from '@certd/lib-server'; +import { BaseController, Constants, SysHeaderMenus, SysInstallInfo, SysPublicSettings, SysSettingsService, SysSiteEnv, SysSiteInfo } from '@certd/lib-server'; import { AppKey, getPlusInfo } from '@certd/pipeline'; /** @@ -30,6 +30,10 @@ export class BasicSettingsController extends BaseController { return await this.sysSettingsService.getSetting(SysSiteInfo); } + public async getHeaderMenus() { + return await this.sysSettingsService.getSetting(SysHeaderMenus); + } + public async getSiteEnv() { const env: SysSiteEnv = { agent: this.agentConfig, @@ -48,12 +52,14 @@ export class BasicSettingsController extends BaseController { const siteInfo = await this.getSiteInfo(); const siteEnv = await this.getSiteEnv(); const plusInfo = await this.plusInfo(); + const headerMenus = await this.getHeaderMenus(); return this.ok({ sysPublic, installInfo, siteInfo, siteEnv, plusInfo, + headerMenus, }); } }