From ebbd788fbb2c0b45d4473798efc57eec8ba74a25 Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期二, 18 六月 2024 14:51:16 +0800
Subject: [PATCH] 版本更新至2.11.5

---
 src/router/guard/permissionGuard.ts |   89 +++++++++++++++++++++++++-------------------
 1 files changed, 51 insertions(+), 38 deletions(-)

diff --git a/src/router/guard/permissionGuard.ts b/src/router/guard/permissionGuard.ts
index 188b929..8027146 100644
--- a/src/router/guard/permissionGuard.ts
+++ b/src/router/guard/permissionGuard.ts
@@ -1,14 +1,14 @@
 import type { Router, RouteRecordRaw } from 'vue-router';
 
-import { usePermissionStoreWithOut } from '/@/store/modules/permission';
+import { usePermissionStoreWithOut } from '@/store/modules/permission';
 
-import { PageEnum } from '/@/enums/pageEnum';
-import { useUserStoreWithOut } from '/@/store/modules/user';
+import { PageEnum } from '@/enums/pageEnum';
+import { useUserStoreWithOut } from '@/store/modules/user';
 
-import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic';
+import { PAGE_NOT_FOUND_ROUTE } from '@/router/routes/basic';
 
-import { RootRoute } from '/@/router/routes';
-import { isEmpty, isNullOrUnDef } from '/@/utils/is';
+import { RootRoute } from '@/router/routes';
+import { isNullOrUnDef } from '/@/utils/is';
 
 const LOGIN_PATH = PageEnum.BASE_LOGIN;
 
@@ -39,7 +39,7 @@
         try {
           await userStore.afterLoginAction();
           if (!isSessionTimeout) {
-            next((to.query?.redirect as string) || '/');
+            next(decodeURIComponent((to.query?.redirect as string) || '/'));
             return;
           }
         } catch {
@@ -62,23 +62,13 @@
         path: LOGIN_PATH,
         replace: true,
       };
-      if (to.path) {
+      if (to.fullPath) {
         redirectData.query = {
           ...redirectData.query,
-          redirect: to.path,
+          redirect: to.fullPath,
         };
       }
       next(redirectData);
-      return;
-    }
-
-    // Jump to the 404 page after processing the login
-    if (
-      from.path === LOGIN_PATH &&
-      to.name === PAGE_NOT_FOUND_ROUTE.name &&
-      to.fullPath !== (userStore.getUserInfo.homePath || PageEnum.BASE_HOME)
-    ) {
-      next(userStore.getUserInfo.homePath || PageEnum.BASE_HOME);
       return;
     }
 
@@ -86,7 +76,6 @@
     if (userStore.getLastUpdateTime === 0) {
       try {
         const userinfo = await userStore.getUserInfoAction();
-
         if (isNullOrUnDef(userinfo?.userId)) {
           userStore.setToken(undefined);
           userStore.setSessionTimeout(false);
@@ -100,29 +89,53 @@
       }
     }
 
-    if (permissionStore.getIsDynamicAddedRoute) {
-      next();
+    // 鍔ㄦ�佽矾鐢卞姞杞斤紙棣栨锛�
+    if (!permissionStore.getIsDynamicAddedRoute) {
+      const routes = await permissionStore.buildRoutesAction();
+      [...routes, PAGE_NOT_FOUND_ROUTE].forEach((route) => {
+        router.addRoute(route as unknown as RouteRecordRaw);
+      });
+      // 璁板綍鍔ㄦ�佽矾鐢卞姞杞藉畬鎴�
+      permissionStore.setDynamicAddedRoute(true);
+
+      // 鐜板湪鐨則o鍔ㄦ�佽矾鐢卞姞杞戒箣鍓嶇殑锛屽彲鑳戒负PAGE_NOT_FOUND_ROUTE锛堜緥濡傦紝鐧婚檰鍚庯紝鍒锋柊鐨勬椂鍊欙級
+      // 姝ゅ搴斿綋閲嶅畾鍚戝埌fullPath锛屽惁鍒欎細鍔犺浇404椤甸潰鍐呭
+      next({ path: to.fullPath, replace: true, query: to.query });
       return;
     }
 
-    const routes = await permissionStore.buildRoutesAction();
-
-    routes.forEach((route) => {
-      router.addRoute(route as unknown as RouteRecordRaw);
-    });
-
-    router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
-
-    permissionStore.setDynamicAddedRoute(true);
-
     if (to.name === PAGE_NOT_FOUND_ROUTE.name) {
-      // 鍔ㄦ�佹坊鍔犺矾鐢卞悗锛屾澶勫簲褰撻噸瀹氬悜鍒癴ullPath锛屽惁鍒欎細鍔犺浇404椤甸潰鍐呭
-      next({ path: to.fullPath, replace: true, query: to.query });
+      // 閬囧埌涓嶅瓨鍦ㄩ〉闈紝鍚庣画閫昏緫涓嶅啀澶勭悊redirect锛堥樆姝笅闈lse閫昏緫锛�
+      from.query.redirect = '';
+
+      if (
+        from.path === LOGIN_PATH &&
+        to.fullPath !== (userStore.getUserInfo.homePath || PageEnum.BASE_HOME)
+      ) {
+        // 鐧婚檰閲嶅畾鍚戜笉瀛樺湪璺敱锛岃浆鍘烩�滈椤碘��
+        next({ path: userStore.getUserInfo.homePath || PageEnum.BASE_HOME, replace: true });
+      } else {
+        // 姝e父鍓嶅線鈥�404鈥濋〉闈�
+        next();
+      }
+    } else if (from.query.redirect) {
+      // 瀛樺湪redirect
+      const redirect = decodeURIComponent((from.query.redirect as string) || '');
+
+      // 鍙鐞嗕竴娆� from.query.redirect
+      // 涔熼伩鍏嶆煇鍦烘櫙锛堟寚鍚戣矾鐢卞畾涔変簡 redirect锛変笅鐨勬寰幆
+      from.query.redirect = '';
+
+      if (redirect === to.fullPath) {
+        // 宸茬粡琚玶edirect
+        next();
+      } else {
+        // 鎸囧悜redirect
+        next({ path: redirect, replace: true });
+      }
     } else {
-      const redirectPath = (from.query.redirect || to.path) as string;
-      const redirect = decodeURIComponent(redirectPath);
-      const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect };
-      next(nextData);
+      // 姝e父璁块棶
+      next();
     }
   });
 }

--
Gitblit v1.9.3