Browse Source

fix: pageLoading not working

vben 4 years ago
parent
commit
3f78b5aa0c

+ 1 - 3
src/design/var/index.less

@@ -15,7 +15,5 @@
 @side-drag-z-index: 200;
 @page-loading-z-index: 10000;
 
-// app menu
-
 // left-menu
-@app-menu-item-height: 42px;
+@app-menu-item-height: 46px;

+ 0 - 1
src/layouts/default/LayoutContent.tsx

@@ -16,7 +16,6 @@ export default defineComponent({
     return () => {
       const { contentMode, openPageLoading } = unref(getProjectConfigRef);
       const { getPageLoading } = appStore;
-
       const wrapClass = contentMode === ContentEnum.FULL ? 'full' : 'fixed';
       return (
         <div class={[`default-layout__main`]}>

+ 14 - 8
src/layouts/page/index.tsx

@@ -12,9 +12,16 @@ import { appStore } from '/@/store/modules/app';
 export default defineComponent({
   name: 'PageLayout',
   setup() {
-    const getProjectConfigRef = computed(() => {
-      return appStore.getProjectConfig;
+    const getProjectConfigRef = computed(() => appStore.getProjectConfig);
+    const openCacheRef = computed(() => {
+      const {
+        openKeepAlive,
+        multiTabsSetting: { show },
+      } = unref(getProjectConfigRef);
+      return openKeepAlive && show;
     });
+    const getCacheTabsRef = computed(() => toRaw(tabStore.getKeepAliveTabsState) as string[]);
+
     const { openPageLoading } = unref(getProjectConfigRef);
 
     let on = {};
@@ -27,21 +34,20 @@ export default defineComponent({
       const {
         routerTransition,
         openRouterTransition,
-        openKeepAlive,
-        multiTabsSetting: { show, max },
+        multiTabsSetting: { max },
       } = unref(getProjectConfigRef);
 
-      const openCache = openKeepAlive && show;
-      const cacheTabs = toRaw(tabStore.getKeepAliveTabsState) as string[];
       return (
         <div>
           <RouterView>
             {{
               default: ({ Component, route }: { Component: any; route: RouteLocation }) => {
                 // No longer show animations that are already in the tab
-                const name = route.meta.inTab ? 'fade' : null;
+                const cacheTabs = unref(getCacheTabsRef);
+                const isInCache = cacheTabs.includes(route.name as string);
+                const name = isInCache && route.meta.inTab ? 'fade' : null;
 
-                const Content = openCache ? (
+                const Content = unref(openCacheRef) ? (
                   <KeepAlive max={max} include={cacheTabs}>
                     <Component key={route.fullPath} />
                   </KeepAlive>

+ 1 - 0
src/layouts/page/useTransition.ts

@@ -3,6 +3,7 @@ import { tryOnUnmounted } from '/@/utils/helper/vueHelper';
 export function useTransition() {
   function handleAfterEnter() {
     const { openRouterTransition, openPageLoading } = appStore.getProjectConfig;
+
     if (!openRouterTransition || !openPageLoading) return;
     // Close loading after the route switching animation ends
     appStore.setPageLoadingAction(false);

+ 2 - 1
src/router/guard/index.ts

@@ -21,6 +21,8 @@ export function createGuard(router: Router) {
   if (removeAllHttpPending) {
     axiosCanceler = new AxiosCanceler();
   }
+
+  createPageLoadingGuard(router);
   router.beforeEach(async (to) => {
     // Determine whether the tab has been opened
     const isOpen = getIsOpenTab(to.fullPath);
@@ -59,5 +61,4 @@ export function createGuard(router: Router) {
 
   openNProgress && createProgressGuard(router);
   createPermissionGuard(router);
-  createPageLoadingGuard(router);
 }

+ 1 - 0
src/router/guard/pageLoadingGuard.ts

@@ -20,6 +20,7 @@ export function createPageLoadingGuard(router: Router) {
       appStore.commitPageLoadingState(true);
       return true;
     }
+
     if (show && openKeepAlive && !isFirstLoad) {
       const tabList = tabStore.getTabsState;