vben
2020-11-03 0f4b847d69e90e5bbb4fb0883fb5ea1dd1daf1e7
提交 | 用户 | age
2f1fbf 1 // Application related functions
2f6253 2 import type { ProjectConfig } from '/@/types/config';
968f79 3 import type { App } from 'vue';
2f6253 4 import { computed, ref } from 'vue';
5
6 import { ThemeModeEnum } from '/@/enums/appEnum';
7 import { PROJ_CFG_KEY } from '/@/enums/cacheEnum';
8
9 import projectSetting from '/@/settings/projectSetting';
10 import { getLocal } from '/@/utils/helper/persistent';
11 import { isUnDef, isNull } from '/@/utils/is';
12 import { updateGrayMode, updateColorWeak } from '/@/setup/theme';
13
14 import { appStore } from '/@/store/modules/app';
15 import { useNetWork } from '/@/hooks/web/useNetWork';
16 import { useRouter } from 'vue-router';
17 import { PageEnum } from '/@/enums/pageEnum';
18 import { useTimeout } from '/@/hooks/core/useTimeout';
19 import { ExceptionEnum } from '/@/enums/exceptionEnum';
20
968f79 21 let app: App;
V 22 export function setApp(_app: App): void {
23   app = _app;
24 }
25
26 export function getApp(): App {
27   return app;
28 }
29
2f6253 30 // TODO 主题切换
31 export function useThemeMode(mode: ThemeModeEnum) {
32   const modeRef = ref(mode);
33   const html = document.documentElement;
34   const clsList = html.classList;
35
36   const change = () => {
37     clsList.contains(mode) ? clsList.remove(mode) : clsList.add(mode);
38   };
39   return {
40     runChangeThemeMode: change,
41     mode: computed(() => modeRef.value),
42   };
43 }
44
45 // 初始化项目配置
46 export function useInitAppConfigStore() {
47   let projCfg: ProjectConfig = getLocal(PROJ_CFG_KEY) as ProjectConfig;
48   if (!projCfg) {
49     projCfg = projectSetting;
50   }
51   const { colorWeak, grayMode } = projCfg;
52   try {
53     // if (
54     //   themeColor !== primaryColor &&
55     //   themeColor &&
56     //   process.env.VUE_APP_USE_THEME_REPLACER !== 'TRUE'
57     // ) {
58     //   updateTheme(themeColor);
59     // }
60     grayMode && updateGrayMode(grayMode);
61     colorWeak && updateColorWeak(colorWeak);
62   } catch (error) {
63     console.log(error);
64   }
65   appStore.commitProjectConfigState(projCfg);
66 }
67
68 // Config Provider
69 export function useConfigProvider() {
70   function transformCellText({ text }: { text: string }) {
71     if (isNull(text) || isUnDef(text)) {
72       return ' - ';
73     }
74     return text;
75   }
76   return {
77     transformCellText,
78   };
79 }
80
81 // 初始化网络监听
82 export function useListenerNetWork() {
83   const { listenNetWork } = appStore.getProjectConfig;
84   if (!listenNetWork) return;
85   const { replace } = useRouter();
86   // 检测网络状态
87   useNetWork({
88     onLineFn: () => {
89       replace(PageEnum.BASE_HOME);
90       useTimeout(() => {
91         appStore.commitPageLoadingState(false);
92       }, 300);
93     },
94     offLineFn: () => {
95       replace({
96         path: PageEnum.ERROR_PAGE,
97         query: {
98           status: String(ExceptionEnum.NET_WORK_ERROR),
99         },
100       });
101     },
102   });
103 }