| | |
| | | import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; |
| | | |
| | | import { RootRoute } from '/@/router/routes'; |
| | | import { omit } from 'lodash-es'; |
| | | |
| | | const LOGIN_PATH = PageEnum.BASE_LOGIN; |
| | | |
| | |
| | | export function createPermissionGuard(router: Router) { |
| | | const userStore = useUserStoreWithOut(); |
| | | const permissionStore = usePermissionStoreWithOut(); |
| | | router.beforeEach(async (to, from) => { |
| | | router.beforeEach(async (to, from, next) => { |
| | | if ( |
| | | from.path === ROOT_PATH && |
| | | to.path === PageEnum.BASE_HOME && |
| | | userStore.getUserInfo.homePath && |
| | | userStore.getUserInfo.homePath !== PageEnum.BASE_HOME |
| | | ) { |
| | | // next(userStore.getUserInfo.homePath); |
| | | return userStore.getUserInfo.homePath; |
| | | next(userStore.getUserInfo.homePath); |
| | | return; |
| | | } |
| | | |
| | | // Whitelist can be directly entered |
| | | if (whitePathList.includes(to.path as PageEnum)) { |
| | | // next(); |
| | | next(); |
| | | return; |
| | | } |
| | | |
| | |
| | | if (!token) { |
| | | // You can access without permission. You need to set the routing meta.ignoreAuth to true |
| | | if (to.meta.ignoreAuth) { |
| | | // next(); |
| | | next(); |
| | | return; |
| | | } |
| | | |
| | |
| | | redirect: to.path, |
| | | }; |
| | | } |
| | | //next(redirectData); |
| | | return redirectData; |
| | | next(redirectData); |
| | | return; |
| | | } |
| | | |
| | | // Jump to the 404 page after processing the login |
| | | if (from.path === LOGIN_PATH && to.name === PAGE_NOT_FOUND_ROUTE.name) { |
| | | //next(userStore.getUserInfo.homePath || PageEnum.BASE_HOME); |
| | | return userStore.getUserInfo.homePath || PageEnum.BASE_HOME; |
| | | 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; |
| | | } |
| | | |
| | | // get userinfo while last fetch time is empty |
| | | if (userStore.getLastUpdateTime === 0) { |
| | | try { |
| | | await userStore.getUserInfoAction(); |
| | | } catch (err) { |
| | | next(); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | if (permissionStore.getIsDynamicAddedRoute) { |
| | | // next(); |
| | | next(); |
| | | return; |
| | | } |
| | | |
| | |
| | | router.addRoute(route as unknown as RouteRecordRaw); |
| | | }); |
| | | |
| | | const redirectPath = (from.query.redirect || to.path) as string; |
| | | const redirect = decodeURIComponent(redirectPath); |
| | | const nextData = |
| | | to.path === redirect |
| | | ? { ...omit(to, ['name', 'params']), replace: true } |
| | | : { path: redirect }; |
| | | router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw); |
| | | |
| | | permissionStore.setDynamicAddedRoute(true); |
| | | // next(nextData); |
| | | return nextData; |
| | | |
| | | if (to.name === PAGE_NOT_FOUND_ROUTE.name) { |
| | | // 动态添加路由后,此处应当重定向到fullPath,否则会加载404页面内容 |
| | | next({ path: to.fullPath, replace: true, query: to.query }); |
| | | } 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); |
| | | } |
| | | }); |
| | | } |