useApp.ts 2.6 KB

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