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