2025-04-15 11:24:22 +08:00

167 lines
5.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import type { MainAppProps } from "#/main";
import type { ProjectConfig, HeaderSetting, MenuSetting, TransitionSetting, MultiTabsSetting } from '/#/config';
import type { BeforeMiniState } from '/#/store';
import { defineStore } from 'pinia';
import { store } from '/@/store';
import { ThemeEnum } from '/@/enums/appEnum';
import { APP_DARK_MODE_KEY_, PROJ_CFG_KEY } from '/@/enums/cacheEnum';
import { Persistent } from '/@/utils/cache/persistent';
import { darkMode } from '/@/settings/designSetting';
import { resetRouter } from '/@/router';
import { deepMerge } from '/@/utils';
import { getHideLayoutTypes } from '/@/utils/env';
import setting from '/@/settings/projectSetting';
interface AppState {
darkMode?: ThemeEnum;
// Page loading status
pageLoading: boolean;
// project config
projectConfig: ProjectConfig | null;
// When the window shrinks, remember some states, and restore these states when the window is restored
beforeMiniInfo: BeforeMiniState;
// 页面跳转临时参数存储
messageHrefParams: any,
// 应用参数
mainAppProps: MainAppProps,
}
let timeId: TimeoutHandle;
export const useAppStore = defineStore({
id: 'app',
state: (): AppState => ({
darkMode: undefined,
pageLoading: false,
projectConfig: Persistent.getLocal(PROJ_CFG_KEY),
beforeMiniInfo: {},
messageHrefParams: {},
mainAppProps: {},
}),
getters: {
getPageLoading(): boolean {
return this.pageLoading;
},
getDarkMode(): 'light' | 'dark' | string {
// liaozhiyang---date:20250411---for【QQYUN-11956】修复projectSetting中配置主题模式不生效
const getSettingTheme = () => {
const theme = setting.themeMode;
if (theme) {
if (theme == ThemeEnum.DARK) {
// 为了index.html页面loading时是暗黑
localStorage.setItem(APP_DARK_MODE_KEY_, theme);
}
return theme;
}
return '';
};
// liaozhiyang---date:20250411---for【QQYUN-11956】修复projectSetting中配置主题模式不生效
return this.darkMode || localStorage.getItem(APP_DARK_MODE_KEY_) || getSettingTheme() || darkMode;
},
getBeforeMiniInfo(): BeforeMiniState {
return this.beforeMiniInfo;
},
getProjectConfig(): ProjectConfig {
return this.projectConfig || ({} as ProjectConfig);
},
getHeaderSetting(): HeaderSetting {
return this.getProjectConfig.headerSetting;
},
getMenuSetting(): MenuSetting {
return this.getProjectConfig.menuSetting;
},
getTransitionSetting(): TransitionSetting {
return this.getProjectConfig.transitionSetting;
},
getMultiTabsSetting(): MultiTabsSetting {
return this.getProjectConfig.multiTabsSetting;
},
getMessageHrefParams():any{
return this.messageHrefParams;
},
getMainAppProps(): MainAppProps {
return this.mainAppProps;
},
getLayoutHideSider(): boolean {
const hideLayoutTypes = getHideLayoutTypes();
if (hideLayoutTypes.includes('sider')) {
return true;
}
return !!this.mainAppProps.hideSider;
},
getLayoutHideHeader(): boolean {
const hideLayoutTypes = getHideLayoutTypes();
if (hideLayoutTypes.includes('header')) {
return true;
}
return !!this.mainAppProps.hideHeader;
},
getLayoutHideMultiTabs(): boolean {
const hideLayoutTypes = getHideLayoutTypes();
if (hideLayoutTypes.includes('multi-tabs')) {
return true;
}
return !!this.mainAppProps.hideMultiTabs;
},
},
actions: {
setPageLoading(loading: boolean): void {
this.pageLoading = loading;
},
setDarkMode(mode: ThemeEnum): void {
this.darkMode = mode;
localStorage.setItem(APP_DARK_MODE_KEY_, mode);
this.setProjectConfig({ themeMode: mode });
},
setBeforeMiniInfo(state: BeforeMiniState): void {
this.beforeMiniInfo = state;
},
setProjectConfig(config: DeepPartial<ProjectConfig>): void {
this.projectConfig = deepMerge(this.projectConfig || {}, config);
// update-begin--author:liaozhiyang---date:20240408---for【QQYUN-8922】设置导航栏模式没存本地刷新就还原了
Persistent.setLocal(PROJ_CFG_KEY, this.projectConfig, true);
// update-end--author:liaozhiyang---date:20240408---for【QQYUN-8922】设置导航栏模式没存本地刷新就还原了
},
async resetAllState() {
resetRouter();
Persistent.clearAll();
},
async setPageLoadingAction(loading: boolean): Promise<void> {
if (loading) {
clearTimeout(timeId);
// Prevent flicker
timeId = setTimeout(() => {
this.setPageLoading(loading);
}, 50);
} else {
this.setPageLoading(loading);
clearTimeout(timeId);
}
},
setMessageHrefParams(params: any): void {
this.messageHrefParams = params;
},
// 设置主应用参数
setMainAppProps(args: MainAppProps) {
this.mainAppProps.hideHeader = args.hideHeader ?? false;
this.mainAppProps.hideSider = args.hideSider ?? false;
this.mainAppProps.hideMultiTabs = args.hideMultiTabs ?? false;
},
},
});
// Need to be used outside the setup
export function useAppStoreWithOut() {
return useAppStore(store);
}