fix(projects): 修复路由守卫的动态路由逻辑

This commit is contained in:
Soybean
2022-01-22 16:14:45 +08:00
parent 21bab1f7c3
commit b61b0ce25f
3 changed files with 60 additions and 28 deletions

View File

@ -1,39 +1,19 @@
import type { Router, RouteLocationNormalized, NavigationGuardNext } from 'vue-router';
import { routeName } from '@/router';
import { useAuthStore, useRouteStore } from '@/store';
import { useAuthStore } from '@/store';
import { exeStrategyActions, getToken } from '@/utils';
import { createDynamicRouteGuard } from './dynamic';
/** 处理路由页面的权限 */
export async function handlePagePermission(
export async function createPermissionGuard(
to: RouteLocationNormalized,
from: RouteLocationNormalized,
next: NavigationGuardNext,
router: Router
) {
const auth = useAuthStore();
const route = useRouteStore();
const isLogin = Boolean(getToken());
const permissions = to.meta.permissions || [];
const needLogin = Boolean(to.meta?.requiresAuth) || Boolean(permissions.length);
const hasPermission = !permissions.length || permissions.includes(auth.userInfo.userRole);
// 初始化动态路由
if (!route.isAddedDynamicRoute) {
await route.initDynamicRoute(router);
if (to.name === routeName('not-found-page')) {
// 动态路由没有加载导致被not-found-page路由捕获等待动态路由加载好了回到之前的路由
next({ path: to.fullPath, replace: true, query: to.query });
return;
}
}
// 动态路由已经加载仍然未找到重定向到not-found
if (to.name === routeName('not-found-page')) {
next({ name: routeName('not-found'), replace: true });
return;
}
// 动态路由
const permission = await createDynamicRouteGuard(to, from, next, router);
if (!permission) return;
// 外链路由, 从新标签打开,返回上一个路由
if (to.meta.href) {
@ -42,6 +22,12 @@ export async function handlePagePermission(
return;
}
const auth = useAuthStore();
const isLogin = Boolean(getToken());
const permissions = to.meta.permissions || [];
const needLogin = Boolean(to.meta?.requiresAuth) || Boolean(permissions.length);
const hasPermission = !permissions.length || permissions.includes(auth.userInfo.userRole);
const actions: Common.StrategyAction[] = [
// 已登录状态跳转登录页,跳转至首页
[