From 49e427229121be3f799e1d05a9cb04cc4dc416be Mon Sep 17 00:00:00 2001 From: eight <641137800@qq.com> Date: 星期五, 30 八月 2024 15:04:00 +0800 Subject: [PATCH] route guard update --- src/permission.ts | 101 +++++++++++++++++++++++++++++--------------------- 1 files changed, 59 insertions(+), 42 deletions(-) diff --git a/src/permission.ts b/src/permission.ts index 3dace6d..7f20ed4 100644 --- a/src/permission.ts +++ b/src/permission.ts @@ -58,53 +58,70 @@ // 璺敱鍔犺浇鍓� router.beforeEach(async (to, from, next) => { + console.info("router.beforeEach to: " + to.fullPath + " from: " + from.fullPath) start() loadStart() - if (getAccessToken()) { - if (to.path === '/login') { - next({ path: '/' }) - } else { - // 鑾峰彇鎵�鏈夊瓧鍏� - const dictStore = useDictStoreWithOut() - const userStore = useUserStoreWithOut() - const permissionStore = usePermissionStoreWithOut() - if (!dictStore.getIsSetDict) { - await dictStore.setDictMap() - } - if (!userStore.getIsSetUser) { - isRelogin.show = true - await userStore.setUserInfoAction() - isRelogin.show = false - // 鍚庣杩囨护鑿滃崟 - await permissionStore.generateRoutes() - permissionStore.getAddRouters.forEach((route) => { - router.addRoute(route as unknown as RouteRecordRaw) // 鍔ㄦ�佹坊鍔犲彲璁块棶璺敱琛� - }) - - // 鏂板銆愯瘖瀹ら�夋嫨銆戦�昏緫 - if (userStore.getRoles.includes("doctor") && !userStore.getRoles.includes("super_admin") && !userStore.getIsSetRoom ) { - next({path: `/roomselect?redirect=${to.fullPath}`}) - } - // <<<銆愯瘖瀹ら�夋嫨銆�<<< - else { - const redirectPath = from.query.redirect || to.path - // 淇璺宠浆鏃朵笉甯﹀弬鏁扮殑闂 - const redirect = decodeURIComponent(redirectPath as string) - const {paramsObject: query} = parseURL(redirect) - const nextData = to.path === redirect ? {...to, replace: true} : {path: redirect, query} - next(nextData) - } + if (!getAccessToken()) { + if (whiteList.indexOf(to.path) !== -1) { + next() + return } else { - next() + next(`/login?redirect=${to.fullPath}`) // 鍚﹀垯鍏ㄩ儴閲嶅畾鍚戝埌鐧诲綍椤� + return } - } - } else { - if (whiteList.indexOf(to.path) !== -1) { - next() - } else { - next(`/login?redirect=${to.fullPath}`) // 鍚﹀垯鍏ㄩ儴閲嶅畾鍚戝埌鐧诲綍椤� - } } + + if (to.path === '/login') { + next({ path: '/' }) + return + } + + // 鑾峰彇鎵�鏈夊瓧鍏� + const dictStore = useDictStoreWithOut() + const userStore = useUserStoreWithOut() + const permissionStore = usePermissionStoreWithOut() + if (!dictStore.getIsSetDict) { + await dictStore.setDictMap() + } + + if (userStore.getIsSetUser ) { + + // <<<銆愯瘖瀹ら�夋嫨銆�<<< + if ( to.path !== '/roomselect' && + userStore.getRoles.includes("doctor") && !userStore.getRoles.includes("super_admin") + && !userStore.getIsSetRoom ) { + next({path: `/roomselect?redirect=${to.fullPath}`}) + return + } + + next() + return + } + + isRelogin.show = true + await userStore.setUserInfoAction() + isRelogin.show = false + + // 鍚庣杩囨护鑿滃崟 + await permissionStore.generateRoutes() + permissionStore.getAddRouters.forEach((route) => { + router.addRoute(route as unknown as RouteRecordRaw) // 鍔ㄦ�佹坊鍔犲彲璁块棶璺敱琛� + }) + + // <<<銆愯瘖瀹ら�夋嫨銆�<<< + if ( to.path !== '/roomselect' && + userStore.getRoles.includes("doctor") && !userStore.getRoles.includes("super_admin") + && !userStore.getIsSetRoom ) { + next({path: `/roomselect?redirect=${to.fullPath}`}) + return + } + + const redirectPath = from.query.redirect || to.path + // 淇璺宠浆鏃朵笉甯﹀弬鏁扮殑闂 + const redirect = decodeURIComponent(redirectPath as string) + const {paramsObject: query} = parseURL(redirect) + const nextData = to.path === redirect ? {...to, replace: true} : {path: redirect, query} + next(nextData) }) router.afterEach((to) => { -- Gitblit v1.9.3