mirror of
https://github.com/jeecgboot/JeecgBoot.git
synced 2026-01-02 10:45:27 +08:00
129 lines
3.9 KiB
Vue
129 lines
3.9 KiB
Vue
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';
|
||
|
||
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 {
|
||
return this.darkMode || localStorage.getItem(APP_DARK_MODE_KEY_) || 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;
|
||
},
|
||
},
|
||
actions: {
|
||
setPageLoading(loading: boolean): void {
|
||
this.pageLoading = loading;
|
||
},
|
||
|
||
setDarkMode(mode: ThemeEnum): void {
|
||
this.darkMode = mode;
|
||
localStorage.setItem(APP_DARK_MODE_KEY_, 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);
|
||
}
|