app.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import type { ProjectConfig, HeaderSetting, MenuSetting, TransitionSetting, MultiTabsSetting } from '/#/config';
  2. import type { BeforeMiniState } from '/#/store';
  3. import { defineStore } from 'pinia';
  4. import { store } from '/@/store';
  5. import { ThemeEnum } from '/@/enums/appEnum';
  6. import { APP_DARK_MODE_KEY_, PROJ_CFG_KEY, MODAL_TYPE } from '/@/enums/cacheEnum';
  7. import { Persistent } from '/@/utils/cache/persistent';
  8. import { darkMode } from '/@/settings/designSetting';
  9. import { resetRouter } from '/@/router';
  10. import { deepMerge } from '/@/utils';
  11. interface AppState {
  12. darkMode?: ThemeEnum;
  13. // Page loading status
  14. pageLoading: boolean;
  15. // project config
  16. projectConfig: ProjectConfig | null;
  17. // When the window shrinks, remember some states, and restore these states when the window is restored
  18. beforeMiniInfo: BeforeMiniState;
  19. // 页面跳转临时参数存储
  20. messageHrefParams: any;
  21. widthScale: number;
  22. heightScale: number;
  23. }
  24. let timeId: TimeoutHandle;
  25. export const useAppStore = defineStore({
  26. id: 'app',
  27. state: (): AppState => ({
  28. darkMode: undefined,
  29. pageLoading: false,
  30. projectConfig: Persistent.getLocal(PROJ_CFG_KEY),
  31. beforeMiniInfo: {},
  32. messageHrefParams: {},
  33. widthScale: 1,
  34. heightScale: 1,
  35. }),
  36. getters: {
  37. getPageLoading(): boolean {
  38. return this.pageLoading;
  39. },
  40. getDarkMode(): 'light' | 'dark' | 'vent1' | string {
  41. return this.darkMode || localStorage.getItem(APP_DARK_MODE_KEY_) || darkMode;
  42. },
  43. getBeforeMiniInfo(): BeforeMiniState {
  44. return this.beforeMiniInfo;
  45. },
  46. getProjectConfig(): ProjectConfig {
  47. return this.projectConfig || ({} as ProjectConfig);
  48. },
  49. getHeaderSetting(): HeaderSetting {
  50. return this.getProjectConfig.headerSetting;
  51. },
  52. getMenuSetting(): MenuSetting {
  53. return this.getProjectConfig.menuSetting;
  54. },
  55. getTransitionSetting(): TransitionSetting {
  56. return this.getProjectConfig.transitionSetting;
  57. },
  58. getMultiTabsSetting(): MultiTabsSetting {
  59. return this.getProjectConfig.multiTabsSetting;
  60. },
  61. getMessageHrefParams(): any {
  62. return this.messageHrefParams;
  63. },
  64. getWidthScale(): number {
  65. return this.widthScale;
  66. },
  67. getHeightScale(): number {
  68. return this.heightScale;
  69. },
  70. getProgramModalType(): boolean | null {
  71. VENT_PARAM['is2DModel'] = localStorage.getItem(MODAL_TYPE) == 'false' ? false : true;
  72. return VENT_PARAM['is2DModel'];
  73. },
  74. },
  75. actions: {
  76. setPageLoading(loading: boolean): void {
  77. this.pageLoading = loading;
  78. },
  79. setDarkMode(mode: ThemeEnum): void {
  80. this.darkMode = mode;
  81. localStorage.setItem(APP_DARK_MODE_KEY_, mode);
  82. },
  83. setBeforeMiniInfo(state: BeforeMiniState): void {
  84. this.beforeMiniInfo = state;
  85. },
  86. setProjectConfig(config: DeepPartial<ProjectConfig>): void {
  87. this.projectConfig = deepMerge(this.projectConfig || {}, config);
  88. Persistent.setLocal(PROJ_CFG_KEY, this.projectConfig);
  89. },
  90. setModalType(is2DModel?): void {
  91. if (is2DModel === undefined) {
  92. if (localStorage.getItem(MODAL_TYPE)) {
  93. VENT_PARAM['is2DModel'] = localStorage.getItem(MODAL_TYPE) == 'false' ? false : true;
  94. } else {
  95. localStorage.setItem(MODAL_TYPE, VENT_PARAM['is2DModel']);
  96. }
  97. } else {
  98. localStorage.setItem(MODAL_TYPE, is2DModel);
  99. }
  100. },
  101. async resetAllState() {
  102. resetRouter();
  103. Persistent.clearAll();
  104. },
  105. async setPageLoadingAction(loading: boolean): Promise<void> {
  106. if (loading) {
  107. clearTimeout(timeId);
  108. // Prevent flicker
  109. timeId = setTimeout(() => {
  110. this.setPageLoading(loading);
  111. }, 50);
  112. } else {
  113. this.setPageLoading(loading);
  114. clearTimeout(timeId);
  115. }
  116. },
  117. setMessageHrefParams(params: any): void {
  118. this.messageHrefParams = params;
  119. },
  120. setWidthScale(scale: number) {
  121. this.widthScale = scale;
  122. },
  123. setHeightScale(scale: number) {
  124. this.heightScale = scale;
  125. },
  126. },
  127. });
  128. // Need to be used outside the setup
  129. export function useAppStoreWithOut() {
  130. return useAppStore(store);
  131. }