| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import type { Router, RouteRecordRaw } from 'vue-router';
- import { usePermissionStoreWithOut } from '/@/store/modules/permission';
- import { PageEnum } from '/@/enums/pageEnum';
- import { useUserStoreWithOut } from '/@/store/modules/user';
- 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;
- const ROOT_PATH = RootRoute.path;
- const whitePathList: PageEnum[] = [LOGIN_PATH];
- export function createPermissionGuard(router: Router) {
- const userStore = useUserStoreWithOut();
- const permissionStore = usePermissionStoreWithOut();
- router.beforeEach(async (to, from) => {
- 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;
- }
- // Whitelist can be directly entered
- if (whitePathList.includes(to.path as PageEnum)) {
- // next();
- return;
- }
- const token = userStore.getToken;
- // token does not exist
- if (!token) {
- // You can access without permission. You need to set the routing meta.ignoreAuth to true
- if (to.meta.ignoreAuth) {
- // next();
- return;
- }
- // redirect login page
- const redirectData: { path: string; replace: boolean; query?: Recordable<string> } = {
- path: LOGIN_PATH,
- replace: true,
- };
- if (to.path) {
- redirectData.query = {
- ...redirectData.query,
- redirect: to.path,
- };
- }
- //next(redirectData);
- return redirectData;
- }
- // 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 (permissionStore.getIsDynamicAddedRoute) {
- // next();
- return;
- }
- const routes = await permissionStore.buildRoutesAction();
- routes.forEach((route) => {
- 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 };
- permissionStore.setDynamicAddedRoute(true);
- // next(nextData);
- return nextData;
- });
- }
|