import {layoutRoutes } from "@/router/static_routes";//权限路由
import router from "./index";
let upatewindow = true//用来判断是否刷新页面
let routes = [];//有权限的路由存储位置
router.beforeEach(async (to, from, next) => {
const hasToken = sessionStorage.getItem("token");
if (hasToken !== null) {//判断是否登录
if (to.path === "/login") {
next("/");
} else {
if (upatewindow) {
let permission = JSON.parse(sessionStorage.getItem("PermissionPage"));//用户路由权限列表
await getMenuBtnList(layoutRoutes, permission);
upatewindow = false
if (to.path == '/') {
next({ path: routes[0].children[0].path, replace: true })//这里是登录后首页指向的位置根据情况修改
} else {
next({ ...to, replace: true })
}
}
next()
}
} else if (hasToken == null && to.path === "/login") {7
next();
} else {
next("/login");
}
});
function getMenuBtnList(menuTreeList, permission) {
routes = []
//在这里进行路由权限判断,每个项目的判断条件不一样这里就空着了
/*
*
*
*/
sessionStorage.setItem('routes', JSON.stringify(routes))//这里是用来渲染菜单栏,根据项目来判断是否需要
routes.push({ path: "*", redirect: "/403", hidden: true, children: [{ path: "/403" }] });//访问无权限页面跳转地址
router.options.routes = routes;//解决页面刷新白屏的重点
routes.forEach(item => router.addRoute(item))//动态添加路由
}
刷新白屏是因为每次刷新都会重新挂载路由实例,使用router.options.routes就可以解决这个问题