import Vue from 'vue'
import Router from 'vue-router'
import Menu from "@/pages/back/menu"
import MenuIndex from "@/pages/back/index"
// 登录页面
const Login = () => import("../pages/back/login/index")
Vue.use(Router)
const router = new Router({
hasAddRouter: false,
routes: [
{
path: '/',
name: 'Index',
redirect: '/login'
},
{
path: '/login',
name: 'Login',
component: Login
}
]
})
router.beforeEach((to, from, next) => {
console.log(next)
// 判断是否为需要判断加载路由
if (isLoadRouter(to.path)) {
// 判断是否已经加载菜单
if (!router.hasAddRouter) {
// 判断是否已经加载菜单到本地
let menuListStr = localStorage.getItem("menuList");
if (menuListStr) {
let menuList = JSON.parse(menuListStr);
let menuChildren = []
menuList.forEach(item => {
let children = item.children
if (children) {
children.forEach(menu => {
let component = getComponent(menu.viewPath)
let child = {
name: menu.menuCode,
path: menu.menuPath,
component: component
,meta: {
title: menu.menuName
}
}
menuChildren.push(child)
})
}
})
let menuData = {
// 后台菜单首页
path: '/menu',
name: 'menu',
component: Menu,
children: [
{
name: 'MenuIndex',
path: '/',
component: MenuIndex
}
// 系统菜单
,...menuChildren
]
}
// 添加路由
router.addRoutes([menuData])
// 修改添加路由标记
router.hasAddRouter = true
// 替换路由
next({ ...to, replace: true });
} else {
// 跳转登录页面
next();
}
} else {
next();
}
} else {
next();
}
console.log("----------- init router -----------")
})
// 判断路径是否为不需要加载动态路由路径(登录/登出)
function isLoadRouter(path) {
let loadRouterArr = ['/login', '/']
let isLoadRouter = false;
let index = loadRouterArr.findIndex((val,i,arr)=>{
return val == path
});
if (index < 0)
isLoadRouter = true
return isLoadRouter;
}
// 获取引用对象
function getComponent(viewPath) {
const path = viewPath
return () => import(`@/pages/back/${path}`)
}
export default router
网友评论