mirror of https://github.com/certd/certd
perf: 优化系统设置加载时机
parent
38be8d84b2
commit
73962536d5
|
@ -6,7 +6,7 @@ import { CacheManager } from '@midwayjs/cache';
|
||||||
import { BaseSettings, SysPrivateSettings, SysPublicSettings } from './models.js';
|
import { BaseSettings, SysPrivateSettings, SysPublicSettings } from './models.js';
|
||||||
import * as _ from 'lodash-es';
|
import * as _ from 'lodash-es';
|
||||||
import { BaseService } from '../../../basic/index.js';
|
import { BaseService } from '../../../basic/index.js';
|
||||||
import { checkComm } from '@certd/pipeline';
|
import { isComm } from '@certd/pipeline';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置
|
* 设置
|
||||||
|
@ -40,8 +40,8 @@ export class SysSettingsService extends BaseService<SysSettingsEntity> {
|
||||||
if (!key) {
|
if (!key) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (key === 'sys.site') {
|
if (key === 'sys.site' && isComm()) {
|
||||||
checkComm();
|
return null;
|
||||||
}
|
}
|
||||||
return await this.repository.findOne({
|
return await this.repository.findOne({
|
||||||
where: {
|
where: {
|
||||||
|
|
|
@ -48,7 +48,6 @@ export default {
|
||||||
const pageStore = usePageStore();
|
const pageStore = usePageStore();
|
||||||
pageStore.init();
|
pageStore.init();
|
||||||
const settingStore = useSettingStore();
|
const settingStore = useSettingStore();
|
||||||
settingStore.init();
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
routerEnabled,
|
routerEnabled,
|
||||||
|
|
|
@ -1,6 +1,28 @@
|
||||||
import { request } from "../service";
|
import { request } from "../service";
|
||||||
import { SiteEnv, SiteInfo } from "/@/store/modules/settings";
|
|
||||||
|
|
||||||
|
export type SiteEnv = {
|
||||||
|
agent?: {
|
||||||
|
enabled?: boolean;
|
||||||
|
contactText?: string;
|
||||||
|
contactLink?: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
export type SiteInfo = {
|
||||||
|
title: string;
|
||||||
|
slogan: string;
|
||||||
|
logo: string;
|
||||||
|
loginLogo: string;
|
||||||
|
icpNo: string;
|
||||||
|
licenseTo?: string;
|
||||||
|
licenseToUrl?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type PlusInfo = {
|
||||||
|
vipType?: string;
|
||||||
|
expireTime?: number;
|
||||||
|
isPlus: boolean;
|
||||||
|
isComm?: boolean;
|
||||||
|
};
|
||||||
export type SysPublicSetting = {
|
export type SysPublicSetting = {
|
||||||
registerEnabled: boolean;
|
registerEnabled: boolean;
|
||||||
managerOtherUserPipeline: boolean;
|
managerOtherUserPipeline: boolean;
|
||||||
|
@ -11,29 +33,17 @@ export type SysInstallInfo = {
|
||||||
siteId: string;
|
siteId: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function getSysPublicSettings(): Promise<SysPublicSetting> {
|
export type AllSettings = {
|
||||||
return await request({
|
sysPublic: SysPublicSetting;
|
||||||
url: "/basic/settings/public",
|
installInfo: SysInstallInfo;
|
||||||
method: "get"
|
plusInfo: PlusInfo;
|
||||||
});
|
siteInfo: SiteInfo;
|
||||||
}
|
siteEnv: SiteEnv;
|
||||||
|
};
|
||||||
|
|
||||||
export async function getInstallInfo(): Promise<SysInstallInfo> {
|
export async function loadAllSettings(): Promise<AllSettings> {
|
||||||
return await request({
|
return await request({
|
||||||
url: "/basic/settings/install",
|
url: "/basic/settings/all",
|
||||||
method: "get"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function getSiteInfo(): Promise<SiteInfo> {
|
|
||||||
return await request({
|
|
||||||
url: "/basic/settings/siteInfo",
|
|
||||||
method: "get"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
export async function getSiteEnv(): Promise<SiteEnv> {
|
|
||||||
return await request({
|
|
||||||
url: "/basic/settings/siteEnv",
|
|
||||||
method: "get"
|
method: "get"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -45,10 +55,3 @@ export async function bindUrl(data: any): Promise<any> {
|
||||||
data
|
data
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getPlusInfo() {
|
|
||||||
return await request({
|
|
||||||
url: "/basic/settings/plusInfo",
|
|
||||||
method: "get"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
<div class="fs-user-info">您好,{{ userStore.getUserInfo?.nickName }}</div>
|
<div class="fs-user-info">您好,{{ userStore.getUserInfo?.nickName }}</div>
|
||||||
<template #overlay>
|
<template #overlay>
|
||||||
<a-menu>
|
<a-menu>
|
||||||
|
<a-menu-item>
|
||||||
|
<div @click="goUserProfile">账号信息</div>
|
||||||
|
</a-menu-item>
|
||||||
<a-menu-item>
|
<a-menu-item>
|
||||||
<div @click="doLogout">注销登录</div>
|
<div @click="doLogout">注销登录</div>
|
||||||
</a-menu-item>
|
</a-menu-item>
|
||||||
|
@ -10,31 +13,33 @@
|
||||||
</template>
|
</template>
|
||||||
</a-dropdown>
|
</a-dropdown>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts" setup>
|
||||||
import { defineComponent } from "vue";
|
|
||||||
import { useUserStore } from "/src/store/modules/user";
|
import { useUserStore } from "/src/store/modules/user";
|
||||||
import { Modal } from "ant-design-vue";
|
import { Modal } from "ant-design-vue";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
export default defineComponent({
|
import { useRouter } from "vue-router";
|
||||||
name: "FsUserInfo",
|
|
||||||
setup() {
|
defineOptions({
|
||||||
const userStore = useUserStore();
|
name: "FsUserInfo"
|
||||||
console.log("user", userStore);
|
|
||||||
const { t } = useI18n();
|
|
||||||
function doLogout() {
|
|
||||||
Modal.confirm({
|
|
||||||
iconType: "warning",
|
|
||||||
title: t("app.login.logoutTip"),
|
|
||||||
content: t("app.login.logoutMessage"),
|
|
||||||
onOk: async () => {
|
|
||||||
await userStore.logout(true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
userStore,
|
|
||||||
doLogout
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
const userStore = useUserStore();
|
||||||
|
console.log("user", userStore);
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
function goUserProfile() {
|
||||||
|
console.log("goUserProfile");
|
||||||
|
router.push("/certd/mine/user-profile");
|
||||||
|
}
|
||||||
|
function doLogout() {
|
||||||
|
Modal.confirm({
|
||||||
|
iconType: "warning",
|
||||||
|
title: t("app.login.logoutTip"),
|
||||||
|
content: t("app.login.logoutMessage"),
|
||||||
|
onOk: async () => {
|
||||||
|
await userStore.logout(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -7,6 +7,8 @@ import { site } from "../utils/util.site";
|
||||||
import { routes } from "./resolve";
|
import { routes } from "./resolve";
|
||||||
import { useResourceStore } from "../store/modules/resource";
|
import { useResourceStore } from "../store/modules/resource";
|
||||||
import { useUserStore } from "../store/modules/user";
|
import { useUserStore } from "../store/modules/user";
|
||||||
|
import { useSettingStore } from "/@/store/modules/settings";
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
history: createWebHashHistory(),
|
history: createWebHashHistory(),
|
||||||
routes
|
routes
|
||||||
|
@ -18,6 +20,8 @@ const router = createRouter({
|
||||||
router.beforeEach(async (to, from, next) => {
|
router.beforeEach(async (to, from, next) => {
|
||||||
// 进度条
|
// 进度条
|
||||||
NProgress.start();
|
NProgress.start();
|
||||||
|
const settingStore = useSettingStore();
|
||||||
|
await settingStore.initOnce();
|
||||||
// 修复三级以上路由页面无法缓存的问题
|
// 修复三级以上路由页面无法缓存的问题
|
||||||
if (to.matched && to.matched.length > 2) {
|
if (to.matched && to.matched.length > 2) {
|
||||||
to.matched.splice(1, to.matched.length - 2);
|
to.matched.splice(1, to.matched.length - 2);
|
||||||
|
|
|
@ -27,8 +27,7 @@ export const frameworkResource = [
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
//...crudResources,
|
//...crudResources,
|
||||||
...certdResources,
|
...certdResources
|
||||||
...sysResources
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { sysResources } from "/@/router/source/modules/sys";
|
||||||
|
|
||||||
export const certdResources = [
|
export const certdResources = [
|
||||||
{
|
{
|
||||||
title: "证书自动化",
|
title: "证书自动化",
|
||||||
|
@ -73,9 +75,11 @@ export const certdResources = [
|
||||||
component: "/certd/mine/user-profile.vue",
|
component: "/certd/mine/user-profile.vue",
|
||||||
meta: {
|
meta: {
|
||||||
icon: "ion:person-outline",
|
icon: "ion:person-outline",
|
||||||
auth: true
|
auth: true,
|
||||||
|
isMenu: false
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
...sysResources
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
|
@ -13,40 +13,6 @@ export const sysResources = [
|
||||||
permission: "sys"
|
permission: "sys"
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
{
|
|
||||||
title: "权限管理",
|
|
||||||
name: "AuthorityManager",
|
|
||||||
path: "/sys/authority",
|
|
||||||
redirect: "/sys/authority/permission",
|
|
||||||
meta: {
|
|
||||||
icon: "ion:ribbon-outline",
|
|
||||||
//需要校验权限
|
|
||||||
permission: "sys:auth"
|
|
||||||
},
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: "权限资源管理",
|
|
||||||
name: "PermissionManager",
|
|
||||||
path: "/sys/authority/permission",
|
|
||||||
component: "/sys/authority/permission/index.vue",
|
|
||||||
meta: {
|
|
||||||
icon: "ion:list-outline",
|
|
||||||
//需要校验权限
|
|
||||||
permission: "sys:auth:per:view"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "角色管理",
|
|
||||||
name: "RoleManager",
|
|
||||||
path: "/sys/authority/role",
|
|
||||||
component: "/sys/authority/role/index.vue",
|
|
||||||
meta: {
|
|
||||||
icon: "ion:people-outline",
|
|
||||||
permission: "sys:auth:role:view"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
title: "用户管理",
|
title: "用户管理",
|
||||||
name: "UserManager",
|
name: "UserManager",
|
||||||
|
@ -102,6 +68,37 @@ export const sysResources = [
|
||||||
permission: "sys:settings:view"
|
permission: "sys:settings:view"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: "账号绑定",
|
||||||
|
name: "AccountBind",
|
||||||
|
path: "/sys/account",
|
||||||
|
component: "/sys/account/index.vue",
|
||||||
|
meta: {
|
||||||
|
icon: "ion:golf-outline",
|
||||||
|
permission: "sys:settings:view"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "权限管理",
|
||||||
|
name: "PermissionManager",
|
||||||
|
path: "/sys/authority/permission",
|
||||||
|
component: "/sys/authority/permission/index.vue",
|
||||||
|
meta: {
|
||||||
|
icon: "ion:list-outline",
|
||||||
|
//需要校验权限
|
||||||
|
permission: "sys:auth:per:view"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "角色管理",
|
||||||
|
name: "RoleManager",
|
||||||
|
path: "/sys/authority/role",
|
||||||
|
component: "/sys/authority/role/index.vue",
|
||||||
|
meta: {
|
||||||
|
icon: "ion:people-outline",
|
||||||
|
permission: "sys:auth:role:view"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// {
|
// {
|
||||||
// title: "商业版设置",
|
// title: "商业版设置",
|
||||||
|
@ -130,16 +127,6 @@ export const sysResources = [
|
||||||
// }
|
// }
|
||||||
// ]
|
// ]
|
||||||
// }
|
// }
|
||||||
{
|
|
||||||
title: "账号绑定",
|
|
||||||
name: "AccountBind",
|
|
||||||
path: "/sys/account",
|
|
||||||
component: "/sys/account/index.vue",
|
|
||||||
meta: {
|
|
||||||
icon: "ion:golf-outline",
|
|
||||||
permission: "sys:settings:view"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
|
@ -5,7 +5,7 @@ import _ from "lodash-es";
|
||||||
import { LocalStorage } from "/src/utils/util.storage";
|
import { LocalStorage } from "/src/utils/util.storage";
|
||||||
|
|
||||||
import * as basicApi from "/@/api/modules/api.basic";
|
import * as basicApi from "/@/api/modules/api.basic";
|
||||||
import { SysInstallInfo, SysPublicSetting } from "/@/api/modules/api.basic";
|
import { PlusInfo, SiteEnv, SiteInfo, SysInstallInfo, SysPublicSetting } from "/@/api/modules/api.basic";
|
||||||
import { useUserStore } from "/@/store/modules/user";
|
import { useUserStore } from "/@/store/modules/user";
|
||||||
import { mitter } from "/@/utils/util.mitt";
|
import { mitter } from "/@/utils/util.mitt";
|
||||||
import { env } from "/@/utils/util.env";
|
import { env } from "/@/utils/util.env";
|
||||||
|
@ -36,31 +36,7 @@ export interface SettingState {
|
||||||
siteInfo: SiteInfo;
|
siteInfo: SiteInfo;
|
||||||
plusInfo?: PlusInfo;
|
plusInfo?: PlusInfo;
|
||||||
siteEnv?: SiteEnv;
|
siteEnv?: SiteEnv;
|
||||||
}
|
inited?: boolean;
|
||||||
|
|
||||||
export type SiteEnv = {
|
|
||||||
agent?: {
|
|
||||||
enabled?: boolean;
|
|
||||||
contactText?: string;
|
|
||||||
contactLink?: string;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
export type SiteInfo = {
|
|
||||||
title: string;
|
|
||||||
slogan: string;
|
|
||||||
logo: string;
|
|
||||||
loginLogo: string;
|
|
||||||
warningOff: boolean;
|
|
||||||
icpNo: string;
|
|
||||||
licenseTo?: string;
|
|
||||||
licenseToUrl?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
interface PlusInfo {
|
|
||||||
vipType?: string;
|
|
||||||
expireTime?: number;
|
|
||||||
isPlus: boolean;
|
|
||||||
isComm?: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultThemeConfig = {
|
const defaultThemeConfig = {
|
||||||
|
@ -73,7 +49,6 @@ const defaultSiteInfo = {
|
||||||
slogan: env.SLOGAN || "让你的证书永不过期",
|
slogan: env.SLOGAN || "让你的证书永不过期",
|
||||||
logo: env.LOGO || "/static/images/logo/logo.svg",
|
logo: env.LOGO || "/static/images/logo/logo.svg",
|
||||||
loginLogo: env.LOGIN_LOGO || "/static/images/logo/rect-block.svg",
|
loginLogo: env.LOGIN_LOGO || "/static/images/logo/rect-block.svg",
|
||||||
warningOff: false,
|
|
||||||
icpNo: env.ICP_NO,
|
icpNo: env.ICP_NO,
|
||||||
licenseTo: "",
|
licenseTo: "",
|
||||||
licenseToUrl: ""
|
licenseToUrl: ""
|
||||||
|
@ -88,7 +63,8 @@ export const useSettingStore = defineStore({
|
||||||
},
|
},
|
||||||
plusInfo: {
|
plusInfo: {
|
||||||
isPlus: false,
|
isPlus: false,
|
||||||
vipType: "free"
|
vipType: "free",
|
||||||
|
isComm: false
|
||||||
},
|
},
|
||||||
sysPublic: {
|
sysPublic: {
|
||||||
registerEnabled: false,
|
registerEnabled: false,
|
||||||
|
@ -109,7 +85,8 @@ export const useSettingStore = defineStore({
|
||||||
contactText: "",
|
contactText: "",
|
||||||
contactLink: ""
|
contactLink: ""
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
inited: false
|
||||||
}),
|
}),
|
||||||
getters: {
|
getters: {
|
||||||
getThemeConfig(): any {
|
getThemeConfig(): any {
|
||||||
|
@ -127,6 +104,12 @@ export const useSettingStore = defineStore({
|
||||||
isComm(): boolean {
|
isComm(): boolean {
|
||||||
return this.plusInfo?.isComm && this.plusInfo?.expireTime > new Date().getTime();
|
return this.plusInfo?.isComm && this.plusInfo?.expireTime > new Date().getTime();
|
||||||
},
|
},
|
||||||
|
isAgent(): boolean {
|
||||||
|
return this.siteEnv?.agent?.enabled === true;
|
||||||
|
},
|
||||||
|
isCommOrAgent() {
|
||||||
|
return this.isComm || this.isAgent;
|
||||||
|
},
|
||||||
vipLabel(): string {
|
vipLabel(): string {
|
||||||
const vipLabelMap: any = {
|
const vipLabelMap: any = {
|
||||||
free: "免费版",
|
free: "免费版",
|
||||||
|
@ -146,33 +129,18 @@ export const useSettingStore = defineStore({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async loadSysSettings() {
|
async loadSysSettings() {
|
||||||
await this.loadSysPublicSettings();
|
const allSettings = await basicApi.loadAllSettings();
|
||||||
await this.loadSiteEnv();
|
_.merge(this.sysPublic, allSettings.sysPublic || {});
|
||||||
await this.loadInstallInfo();
|
_.merge(this.installInfo, allSettings.installInfo || {});
|
||||||
await this.loadPlusInfo();
|
_.merge(this.siteEnv, allSettings.siteEnv || {});
|
||||||
await this.loadSiteInfo();
|
_.merge(this.plusInfo, allSettings.plusInfo || {});
|
||||||
|
//@ts-ignore
|
||||||
|
this.initSiteInfo(allSettings.siteInfo || {});
|
||||||
await this.checkUrlBound();
|
await this.checkUrlBound();
|
||||||
},
|
},
|
||||||
async loadSysPublicSettings() {
|
initSiteInfo(siteInfo: SiteInfo) {
|
||||||
const settings = await basicApi.getSysPublicSettings();
|
//@ts-ignore
|
||||||
_.merge(this.sysPublic, settings);
|
if (this.isComm) {
|
||||||
},
|
|
||||||
async loadInstallInfo() {
|
|
||||||
const installInfo = await basicApi.getInstallInfo();
|
|
||||||
_.merge(this.installInfo, installInfo);
|
|
||||||
},
|
|
||||||
async loadSiteEnv() {
|
|
||||||
const siteEnv = await basicApi.getSiteEnv();
|
|
||||||
_.merge(this.siteEnv, siteEnv);
|
|
||||||
},
|
|
||||||
async loadPlusInfo() {
|
|
||||||
this.plusInfo = await basicApi.getPlusInfo();
|
|
||||||
},
|
|
||||||
async loadSiteInfo() {
|
|
||||||
const isComm = this.isComm;
|
|
||||||
let siteInfo: SiteInfo = {};
|
|
||||||
if (isComm) {
|
|
||||||
siteInfo = await basicApi.getSiteInfo();
|
|
||||||
if (siteInfo.logo) {
|
if (siteInfo.logo) {
|
||||||
siteInfo.logo = `/api/basic/file/download?key=${siteInfo.logo}`;
|
siteInfo.logo = `/api/basic/file/download?key=${siteInfo.logo}`;
|
||||||
}
|
}
|
||||||
|
@ -205,8 +173,9 @@ export const useSettingStore = defineStore({
|
||||||
|
|
||||||
const doBindUrl = async (url: string) => {
|
const doBindUrl = async (url: string) => {
|
||||||
await basicApi.bindUrl({ url });
|
await basicApi.bindUrl({ url });
|
||||||
await this.loadInstallInfo();
|
await this.loadSysSettings();
|
||||||
};
|
};
|
||||||
|
|
||||||
const baseUrl = getBaseUrl();
|
const baseUrl = getBaseUrl();
|
||||||
if (!bindUrl) {
|
if (!bindUrl) {
|
||||||
//绑定url
|
//绑定url
|
||||||
|
@ -269,6 +238,13 @@ export const useSettingStore = defineStore({
|
||||||
async init() {
|
async init() {
|
||||||
await this.setThemeConfig(this.getThemeConfig);
|
await this.setThemeConfig(this.getThemeConfig);
|
||||||
await this.loadSysSettings();
|
await this.loadSysSettings();
|
||||||
|
},
|
||||||
|
async initOnce() {
|
||||||
|
if (this.inited) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await this.init();
|
||||||
|
this.inited = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import * as envs from "./util.env";
|
import * as envs from "./util.env";
|
||||||
import * as sites from "./util.site";
|
import * as sites from "./util.site";
|
||||||
import * as storages from "./util.storage";
|
import * as storages from "./util.storage";
|
||||||
import * as commons from "./util.common";
|
import commons from "./util.common";
|
||||||
import * as mitt from "./util.mitt";
|
import * as mitt from "./util.mitt";
|
||||||
export const util = {
|
export const util = {
|
||||||
...envs,
|
...envs,
|
||||||
|
|
|
@ -29,5 +29,9 @@ export default {
|
||||||
array.push(item);
|
array.push(item);
|
||||||
}
|
}
|
||||||
return array;
|
return array;
|
||||||
|
},
|
||||||
|
|
||||||
|
async sleep(ms: number) {
|
||||||
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
</template>
|
</template>
|
||||||
<div class="p-10">
|
<div class="p-10">
|
||||||
<a-descriptions title="" bordered>
|
<a-descriptions title="" bordered>
|
||||||
<a-descriptions-item label="用户名">{{ userInfo.userInfoname }}</a-descriptions-item>
|
<a-descriptions-item label="用户名">{{ userInfo.username }}</a-descriptions-item>
|
||||||
<a-descriptions-item label="昵称">{{ userInfo.nickName }}</a-descriptions-item>
|
<a-descriptions-item label="昵称">{{ userInfo.nickName }}</a-descriptions-item>
|
||||||
<a-descriptions-item label="邮箱">{{ userInfo.email }}</a-descriptions-item>
|
<a-descriptions-item label="邮箱">{{ userInfo.email }}</a-descriptions-item>
|
||||||
<a-descriptions-item label="手机号">{{ userInfo.phoneCode }}{{ userInfo.mobile }}</a-descriptions-item>
|
<a-descriptions-item label="手机号">{{ userInfo.phoneCode }}{{ userInfo.mobile }}</a-descriptions-item>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="d2-page-cover__sub-title">{{ siteInfo.slogan }}</p>
|
<p class="d2-page-cover__sub-title">{{ siteInfo.slogan }}</p>
|
||||||
<div v-if="siteInfo.warningOff !== true && settingStore.siteEnv?.agent?.enabled === false" class="warning">
|
<div v-if="!settingStore.isCommOrAgent" class="warning">
|
||||||
<a-alert type="warning" show-icon>
|
<a-alert type="warning" show-icon>
|
||||||
<template #description>
|
<template #description>
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
|
@ -17,10 +17,10 @@
|
||||||
</template>
|
</template>
|
||||||
</a-alert>
|
</a-alert>
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div v-if="!settingStore.isCommOrAgent" class="content">
|
||||||
<img src="/static/images/preview.png" class="preview_img" />
|
<img src="/static/images/preview.png" class="preview_img" />
|
||||||
</div>
|
</div>
|
||||||
<div v-if="!settingStore.isComm" class="footer_box">
|
<div v-if="!settingStore.isCommOrAgent" class="footer_box">
|
||||||
<div>如果觉得好用,请不要吝啬你的star哟!</div>
|
<div>如果觉得好用,请不要吝啬你的star哟!</div>
|
||||||
<a href="https://gitee.com/certd/certd" target="_blank"><img src="https://gitee.com/certd/certd/badge/star.svg?theme=dark" alt="star" /></a>
|
<a href="https://gitee.com/certd/certd" target="_blank"><img src="https://gitee.com/certd/certd/badge/star.svg?theme=dark" alt="star" /></a>
|
||||||
<a href="https://github.com/certd/certd" target="_blank"><img alt="GitHub stars" src="https://img.shields.io/github/stars/certd/certd?logo=github" /></a>
|
<a href="https://github.com/certd/certd" target="_blank"><img alt="GitHub stars" src="https://img.shields.io/github/stars/certd/certd?logo=github" /></a>
|
||||||
|
@ -29,7 +29,8 @@
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, ref, Ref } from "vue";
|
import { computed, ref, Ref } from "vue";
|
||||||
import { SiteInfo, useSettingStore } from "/@/store/modules/settings";
|
import { useSettingStore } from "/@/store/modules/settings";
|
||||||
|
import { SiteInfo } from "/@/api/modules/api.basic";
|
||||||
|
|
||||||
const version = ref(import.meta.env.VITE_APP_VERSION);
|
const version = ref(import.meta.env.VITE_APP_VERSION);
|
||||||
const settingStore = useSettingStore();
|
const settingStore = useSettingStore();
|
||||||
|
|
|
@ -54,11 +54,13 @@ defineOptions({
|
||||||
interface FormState {
|
interface FormState {
|
||||||
registerEnabled: boolean;
|
registerEnabled: boolean;
|
||||||
managerOtherUserPipeline: boolean;
|
managerOtherUserPipeline: boolean;
|
||||||
|
icpNo: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const formState = reactive<Partial<FormState>>({
|
const formState = reactive<Partial<FormState>>({
|
||||||
registerEnabled: false,
|
registerEnabled: false,
|
||||||
managerOtherUserPipeline: false
|
managerOtherUserPipeline: false,
|
||||||
|
icpNo: ""
|
||||||
});
|
});
|
||||||
|
|
||||||
async function loadSysPublicSettings() {
|
async function loadSysPublicSettings() {
|
||||||
|
|
|
@ -37,9 +37,6 @@
|
||||||
:build-url="buildUrl"
|
:build-url="buildUrl"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="关闭首页告警" name="warningOff">
|
|
||||||
<a-switch v-model:checked="formState.warningOff" />
|
|
||||||
</a-form-item>
|
|
||||||
<a-form-item label="你的主体名称" name="licenseTo">
|
<a-form-item label="你的主体名称" name="licenseTo">
|
||||||
<a-input v-model:value="formState.licenseTo" />
|
<a-input v-model:value="formState.licenseTo" />
|
||||||
<div class="helper">将会显示在底部</div>
|
<div class="helper">将会显示在底部</div>
|
||||||
|
@ -77,7 +74,6 @@ interface FormState {
|
||||||
slogan: string;
|
slogan: string;
|
||||||
logo: string;
|
logo: string;
|
||||||
loginLogo: string;
|
loginLogo: string;
|
||||||
warningOff: boolean;
|
|
||||||
licenseTo: string;
|
licenseTo: string;
|
||||||
licenseToUrl: string;
|
licenseToUrl: string;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { ALL, Body, Config, Controller, Get, Inject, Provide } from '@midwayjs/core';
|
import { Config, Controller, Get, Inject, Provide } from '@midwayjs/core';
|
||||||
import { BaseController, Constants, SysInstallInfo, SysPublicSettings, SysSettingsService, SysSiteEnv, SysSiteInfo } from '@certd/lib-server';
|
import { BaseController, Constants, SysInstallInfo, SysPublicSettings, SysSettingsService, SysSiteEnv, SysSiteInfo } from '@certd/lib-server';
|
||||||
import { AppKey, getPlusInfo } from '@certd/pipeline';
|
import { AppKey, getPlusInfo } from '@certd/pipeline';
|
||||||
|
|
||||||
|
@ -15,39 +15,45 @@ export class BasicSettingsController extends BaseController {
|
||||||
@Config('agent')
|
@Config('agent')
|
||||||
agentConfig: SysSiteEnv['agent'];
|
agentConfig: SysSiteEnv['agent'];
|
||||||
|
|
||||||
@Get('/public', { summary: Constants.per.guest })
|
|
||||||
public async getSysPublic() {
|
public async getSysPublic() {
|
||||||
const settings = await this.sysSettingsService.getSetting(SysPublicSettings);
|
return await this.sysSettingsService.getSetting(SysPublicSettings);
|
||||||
return this.ok(settings);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get('/install', { summary: Constants.per.guest })
|
|
||||||
public async getInstallInfo() {
|
public async getInstallInfo() {
|
||||||
const settings: SysInstallInfo = await this.sysSettingsService.getSetting(SysInstallInfo);
|
const settings: SysInstallInfo = await this.sysSettingsService.getSetting(SysInstallInfo);
|
||||||
settings.accountServerBaseUrl = this.accountServerBaseUrl;
|
settings.accountServerBaseUrl = this.accountServerBaseUrl;
|
||||||
settings.appKey = AppKey;
|
settings.appKey = AppKey;
|
||||||
return this.ok(settings);
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get('/siteInfo', { summary: Constants.per.guest })
|
|
||||||
public async getSiteInfo() {
|
public async getSiteInfo() {
|
||||||
const settings: SysSiteInfo = await this.sysSettingsService.getSetting(SysSiteInfo);
|
return await this.sysSettingsService.getSetting(SysSiteInfo);
|
||||||
return this.ok(settings);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get('/siteEnv', { summary: Constants.per.guest })
|
|
||||||
public async getSiteEnv() {
|
public async getSiteEnv() {
|
||||||
const env: SysSiteEnv = {
|
const env: SysSiteEnv = {
|
||||||
agent: this.agentConfig,
|
agent: this.agentConfig,
|
||||||
};
|
};
|
||||||
return this.ok(env);
|
return env;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get('/plusInfo', { summary: Constants.per.guest })
|
async plusInfo() {
|
||||||
async plusInfo(@Body(ALL) body: any) {
|
return getPlusInfo();
|
||||||
const info = getPlusInfo();
|
}
|
||||||
|
|
||||||
|
@Get('/all', { summary: Constants.per.guest })
|
||||||
|
async getAllSettings() {
|
||||||
|
const sysPublic = await this.getSysPublic();
|
||||||
|
const installInfo = await this.getInstallInfo();
|
||||||
|
const siteInfo = await this.getSiteInfo();
|
||||||
|
const siteEnv = await this.getSiteEnv();
|
||||||
|
const plusInfo = await this.plusInfo();
|
||||||
return this.ok({
|
return this.ok({
|
||||||
...info,
|
sysPublic,
|
||||||
|
installInfo,
|
||||||
|
siteInfo,
|
||||||
|
siteEnv,
|
||||||
|
plusInfo,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue