123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- 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);
- }
|