pageLoadingGuard.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import type { Router } from 'vue-router';
  2. import { tabStore } from '/@/store/modules/tab';
  3. import { appStore } from '/@/store/modules/app';
  4. import { userStore } from '/@/store/modules/user';
  5. export function createPageLoadingGuard(router: Router) {
  6. let isFirstLoad = true;
  7. router.beforeEach(async (to) => {
  8. console.log('======================');
  9. console.log(2);
  10. console.log('======================');
  11. const {
  12. openKeepAlive,
  13. openRouterTransition,
  14. openPageLoading,
  15. multiTabsSetting: { show } = {},
  16. } = appStore.getProjectConfig;
  17. if (!userStore.getTokenState) {
  18. return true;
  19. }
  20. if (!openRouterTransition && openPageLoading) {
  21. appStore.commitPageLoadingState(true);
  22. return true;
  23. }
  24. if (show && openKeepAlive && !isFirstLoad) {
  25. const tabList = tabStore.getTabsState;
  26. const isOpen = tabList.some((tab) => tab.path === to.path);
  27. appStore.setPageLoadingAction(!isOpen);
  28. } else {
  29. appStore.setPageLoadingAction(true);
  30. }
  31. return true;
  32. });
  33. router.afterEach(async (to) => {
  34. const { openRouterTransition, openPageLoading } = appStore.getProjectConfig;
  35. if ((!openRouterTransition && openPageLoading) || isFirstLoad || to.meta.afterCloseLoading) {
  36. setTimeout(() => {
  37. appStore.commitPageLoadingState(false);
  38. }, 110);
  39. isFirstLoad = false;
  40. }
  41. return true;
  42. });
  43. }