需要挂载的路由
const path = [
{
path: "/comprehensive2",
name: "comprehensive2",
component: "login/login",
icon: "robot",
meta: { name: "页面123123", parent: "home" },
children: [
{
path: "/comprehensive4",
name: "comprehensive4",
component:"login/login",
icon: "robot",
meta: { name: "页面411", parent: "comprehensive2" },
children: [],
},
],
},
{
path: "/comprehensive34",
name: "comprehensive34",
component: "welcome/index",
icon: "robot",
meta: { name: "页面1", parent: "home" },
children: [],
},
];
const paths = JSON.parse(JSON.stringify(path))
store.SET_ROUTERS(path); //将路由存储方便路由守卫调用
SET_ROUTER(paths); //调用添加路由方法
添加路由的方法 addRouter.js
import router from "../../router/index";
const modules = import.meta.glob("@/views/**/*.vue");//获取views下所有文件夹
let newRouter = [];
function dynamicRouter(routers, y) {
newRouter = router.getRoutes()[3].children;//初始路由
const list = []; //最后整理好路由返回
routers.forEach((itemRouter, index) => {
// 从本地找组件
const authRoute = router
.getRoutes()
.findIndex((i) => i.path == itemRouter.path); //找到了就代表路由数组已经存在该路由
const authRoutes = newRouter.findIndex((i) => i.path == itemRouter.path); //找到了就代表路由数组已经存在该路由
if (authRoute == -1 && authRoutes == -1) {
itemRouter.component = modules[`/src/views/${itemRouter.component}.vue`] ,//匹配
list.push(itemRouter);
if (y !== 1) {
newRouter.push(itemRouter);//初始路由添加新路由
}
// 是否存在子集
if (itemRouter.children && itemRouter.children.length) {
list[index].children = dynamicRouter(itemRouter.children, 1);
}
}
});
return list;
}
export function SET_ROUTER(val) {
dynamicRouter(val).forEach((itemRouter) => {
router.addRoute("home", itemRouter); //父级name名称
});
}
pinia存储方法(不会pinia的看我另一个文档)
SET_ROUTERS(val) {
this.router = val;
},
promission.js路由守卫文件
import router from "./index.js";
import { useStore } from "@/store/index";
import { createRouter, createWebHashHistory } from "vue-router";
import { SET_ROUTER } from "@/views/login/addRouter"; //addRoute方法文件
let registerRouteFresh = true; //防止多次调用添加路由
router.beforeEach((to, from, next) => {
// NProgress.start();
window.document.title = to.meta.name;
if (to.path == "/login") {
const store = useStore();
store.$reset(); //重置存储器
next();
} else {
if (registerRouteFresh) {
const store = useStore();
SET_ROUTER(JSON.parse(JSON.stringify(store.router)));
registerRouteFresh = false;
next({path:`${to.path}`}) //重定向锁定路由
} else {
next();
}
}
// NProgress.done();
});