useApp.ts 2.6 KB

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