菜单路由分为静态路由和动态路由两种,静态路由可直接在src/config/router.config.js文件进行配置,主要用于本地开发,正式的项目开发中一般采用动态路由,路由信息由后台根据用户权限动态生成。

    1、静态路由菜单

    1. export const asyncRouterMap = [
    2. {
    3. path: '/',
    4. name: 'index',
    5. component: BasicLayout,
    6. meta: { title: 'menu.home' },
    7. redirect: '/home',
    8. children: [
    9. // dashboard
    10. {
    11. path: '/home',
    12. name: 'home',
    13. component: () => import('@/views/zentao/Home'),
    14. meta: { title: '首页', icon: 'home' }
    15. },
    16. {
    17. path: '/project',
    18. name: 'project',
    19. component: () => import('@/views/zentao/Project'),
    20. meta: { title: '项目', icon: 'bar-chart' }
    21. },
    22. {
    23. path: '/detail',
    24. name: 'detail',
    25. hidden: true,
    26. component: () => import('@/views/zentao/Detail'),
    27. meta: { title: '详情', icon: 'setting' }
    28. },
    29. {
    30. path: '/story',
    31. name: 'story',
    32. hidden: true,
    33. component: () => import('@/views/zentao/Story'),
    34. meta: { title: '需求', icon: 'hdd' }
    35. },
    36. ...
    37. ]
    38. }
    39. ]

    如上所示,路由是一个Route对象数组,具体的属性含义如下:
    image.png
    image.png
    2、动态路由菜单
    正常业务逻辑下每个页面的信息都是动态从后端配置的,并不是静态路由表那样写死在静态文件里的。你可以在后台通过一个 tree 或者其它展现形式给每一个页面动态配置权限,之后将这份路由表存储到后端。
    动态路由配置
    当用户登录后得到 roles,前端根据 roles 去向后端请求可访问的路由表,从而动态生成可访问页面,之后调用 router.addRoutes 动态挂载到 router 上。具体的流程如下图所示:
    动态路由权限