vue3中在router/index.js中

import { createRouter, createWebHistory } from 'vue-router';
import store from 'store' const userRule = {
path: 'user',
component: () => import('@/views/user/index.vue'),
children: [
{
path: 'list',
name: 'userList',
meta: { title: '用户列表', parents: '用户管理', keepAlive: true },
component: () => import('@/views/user/userList.vue'),
},
{
path: 'list',
name: 'userList',
meta: { title: '用户列表', parents: '用户管理', keepAlive: true },
component: () => import('@/views/user/userList.vue'),
}
]
}
const operationRule = {
path: 'opreation',
component: () => import('views/opreation/index.vue'),
}
const reviewRule = {
path: 'review',
component: () => import('views/review/index.vue'),
}
const addissuanceRule = {
path: 'addissuance',
component: () => import('views/addissuance/index.vue'),
}
const financeRule = {
path: 'finance',
component: () => import('views/finance/index'),
}
const statisticsRule = {
path: 'statistics',
component: () => import('views/statistics/index'),
}
const accountRule = {
path: 'account',
component: () => import('views/account/index'),
};
//映射相应的 权限
const ruleMapping = { //匹配路由名字获得对应组件
'user': userRule,
'review': reviewRule,
'operation': operationRule,
'addissuance': addissuanceRule,
'finance': financeRule,
'statistics': statisticsRule,
'account': accountRule,
}
//基础路由
const routes = [
{
path: "/",
name:'home',
meta:{title:'首页'},
component: () => import('views/Home.vue'),
}, {
path: '/login',
component: () => import('views/Login.vue')
},
{
path: "/:catchAll(.*)", //思路2.界面的控制: 用户手动输入任何不匹配的路由地址,就转到notFound页
component: () => import('views/404.vue')
}
] const router = createRouter({
history: createWebHistory(), //createWebHistory or createWebHashHistory
routes: routes
})
//动态添加路由
export function initDynamicRoutes() {
const currentRoutes = router.options.routes;
//在状态机中获取所有的菜单
const menuList = store.state.user.menuList;
//在状态机里获取登录人的权限
const rights = store.state.user.userInfo.rights; menuList.forEach(item => {
//循环所有的的菜单 通过 authority属性里的权限集合判断是否包含当前权限
if(item.authority.includes(rights)){
const temp = ruleMapping[item.name]; //↑↑匹配路由名字获取对应组件
// currentRoutes[0].children.push(temp);
//在vue2中可以通过router.addRoutes来添加一个数组,但是vue-router 4.0后没有addRoutes知道手动添加,此时可以通过router.push('/user/userlit')来进行跳转,
router.addRoute('home',temp)
}
})
}
let routerFlag = true;
router.beforeEach((to, from, next) => {
document.title = to.meta.title
let userInfo = store.getters['user/users'];
if (!userInfo && to.path != '/login') {
next('/login')
} else {
//通过router.addRoute动态添加的路由刷新页面后就没了,这里可以通过一个标识符routerFlag来判断,刷新后routerFlag为true,我们在手动添加一次就行了然后变成false
if(routerFlag){
initDynamicRoutes();
console.log(routerFlag);
next({path:to.path})
routerFlag = false;
}else{
next();
}
}
}) export default router;

vue2 中动态添加路由

//动态添加路由
export function initDynamicRoutes(){
console.log(router); const currentRoutes = router.options.routes;
const rightList = store.state.rightList; //获取vuex中路由权限数组 rightList.forEach( item => {
item.children.forEach(item =>{
const temp = ruleMapping[item.path]; //↑↑匹配路由名字获取对应组件
temp.meta = item.rights //将二级权限添加到 meta对象中. 思路4:请求&响应的控制就是通过匹配meta中的权限来操作的 currentRoutes[2].children.push(temp); //添加到 /home的childern中作为子路由
})
})
router.addRoutes(currentRoutes);
}

最新文章

  1. 千呼万唤始出来,微软Power BI简体中文版官网终于上线了,中文文档也全了。。
  2. 【手记】未能从程序集System.Net.Http.Formatting中加载类型System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter
  3. IP地址,子网掩码,默认网关,DNS服务器详解
  4. Knockout 新版应用开发教程之Observable Arrays
  5. WebApi接口传参不再困惑(4):传参详解 一、get请求 二、post请求 三、put请求 四、delete请求 五、总结
  6. UVALive 7297 Hounded by Indecision BFS
  7. 003--VS2013 C++ 多边形绘制
  8. HW2.4
  9. java 5 Lock
  10. Oracle学习笔记(1)——查询及删除重复数据
  11. Java课程设计----仿Windows标准型计算器
  12. 安装jar包到maven仓库
  13. Linux扩展分区记录
  14. python实现算术表达式的词法语法语义分析(编译原理应用)
  15. iOS-相关集合类
  16. P3366 【模板】最小生成树(堆优化prim)
  17. 解决 mininet gave up after 3 retries 问题
  18. 使用Python Django在Ubuntu下搭建数据库型网站
  19. tap事件的原理详解
  20. BZOJ2301:[HAOI2011]Problem b——题解

热门文章

  1. Mysql -七种Join
  2. 记maven打包加入外部jar后tomcat运行失败问题
  3. administrator 启用
  4. 11、java环形单链表解决约瑟夫问题
  5. java将Word转换成PDF方法
  6. 调度器43—migration 内核线程
  7. linux 复合页( Compound Page )的介绍
  8. Spring Web MVC注解
  9. shell, 进程, 变量, 命令, 作业控制
  10. 【python】读写文件