/login 页面 → 点击 确定 login 请求成功 →
this.$router.push({ name: 'index' }) // 根路由
→ 进入路由拦截器(因为 to.path 不为登录路由,然后又没有用户信息,所以第一次获取用户信息,然后生成动态路由)(获取用户信息那一部分,在state.userInfo里面存储了模块权限和操作权限)
if(to.path===登录路由){
next()
}else{
if(vuex的userinfo有){
next();
}else{
获取用户信息并存储在vuex
.then(()=>{ 生成动态路由.then(()=>{next()}) })
.catch(()=>{ 回到登录页 })
}
}
生成动态路由({commit},模块ID){
return new Promise((resolve)=>{
动态路由 = 动态路由生成函数(除404的所有路由,模块ID)
将动态路由存到vuex
})
}
// ---------------------- ~(●'◡'●)~ -----------------------
动态路由生成函数(所有路由,模块权限){
循环(路由项){
if(有模块权限){
const route = 深克隆这个路由项
if(有子路由){
route.children = 递归-动态路由生成函数(子路由,模块ID)
if(route.children>0){
route.redict = route.redict || route.children[0].path // ⭐
}
}
}
}
返回生成好的路由
}