# 路由/菜单

# 配置文件路径

系统路由配置文件:@sys/router/base-router.js

业务路由配置文件:@/router/index.js

前端路由配置分为:静态路由配置 和 静态菜单路由配置

  • 静态路由配置:单个路由,无需有菜单展示的。如:404页面、数据日志路由
  • 静态菜单路由配置:以菜单形式展示的路由

# 格式和说明

/**
 * 静态路由配置说明:
 * 建议:sider menu 请不要超过三级菜单
 *
 **/
 {
  path: '/router-path',
  name: 'router-name',
  hidden: false,
  meta: {
    title: 'title',
    icon: 'a-icon',
    keepAlive: true
  }
}

{ Route } 对象

参数 说明 类型 默认值
path 路由地址, 建议设置,且不能重名 string -
name 路由名称, 建议设置,且不能重名 string -
redirect 重定向地址, 访问这个路由时,自定进行重定向 string -
meta 路由元信息(路由附带扩展信息) object {}

{ Meta } 路由元信息对象

参数 说明 类型 默认值
title 路由标题 string -
keepAlive 缓存该路由 boolean false

# 静态路由例子

const bizConstantRouterMap = [
    {
        path: '/404',
        component: () => import(/* webpackChunkName: "fail" */ '@base/views/exception/404')
    }, {
        path: '/staffB',
        name: 'staffB',
        component: () => import('@components/layouts/TabLayout'),
        children: [
            {
                path: 'index',
                name: 'StaffManage',
                meta: {
                    title: '账号管理',
                    keepAlive: true
                },
                component: () =>
                    import(/* webpackChunkName: "index" */ '@/views/staff/index'),
            },
        ]
    },
]
  1. 请注意 component: () => import('..') 方式引入路由的页面组件为 懒加载模式。具体可以看 Vue 官方文档 (opens new window)
  2. 路径中的 @ 为配置的路径别名,表示 biz 业务模块路径。 系统模块路径别名为 @sys

# 权限路由

# bizConstantMenuMap-菜单路由格式


    // 顶级菜单路由
    {
        "id": "11c164128ca54fb62a3a2b18104d37d1",
        "code": "staff1",
        "name": "员工管理",
        "type": "M",
        "router": '/staff/index',
        "openType": "0",
        "visible": true,
        "oneMenu": true,
        "category": 'biz',
        "cached": false,
    }
    
    // 带目录的菜单路由
    {
      "id": "11c164128ca54fb62a3a2b18104d37d1",
      "code": "iam/system",
      "name": "系统管理",
      "type": "C",
      "router": "",
      "openType": "0",
      "frame": false,
      "cached": true,
      "visible": true,
      "icon": "el-icon-s-operation",
      "pageProperties": null,
      "advancedJs": null,
      "oneMenu": true, 
      "category": 'biz',
      "children": [{
          "id": "b6e4bf6870105f2fea088482443b5a3c",
          "code": "iam/base",
          "name": "机构人员",
          "type": "C",
          "router": "",
          "openType": "0",
          "frame": false,
          "cached": true,
          "visible": false,
          "icon": "el-icon-s-custom",
          "pageProperties": null,
          "advancedJs": null,
          "oneMenu": false,
          "category": 'biz',
          "children": [{
              "id": "fb8bfc2d72125cf2e5f78cc306be4126",
              "code": "iam/institution",
              "name": "机构管理",
              "type": "M",
              "router": "/sys/institution",
              "openType": "1",
              "frame": false,
              "cached": true,
              "visible": false,
              "icon": "el-icon-s-unfold",
              "pageProperties": "height=800, width=60, top=20, left=50, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no",
              "advancedJs": "userAgent.indexOf('Firefox') > -1",
              "oneMenu": false,
              "category": 'biz',
          }]
      }]
    }

# 说明

参数 说明 类型 对应路由字段
id 后端菜单id boolean -
code 菜单唯一标识 string route.path
name 菜单名称 string meta.title
type 类型 C: 菜单; M: 目录 string -
categoryLocation 位置 right-top: 右上角 left: 左侧 string -
router 路由地址/链接地址 string 当为路由地址时对应 route.component,当为链接地址时存放在 meta.url中
openType 打开方式 0: tab页打开 1: 新开窗口打开 2: tab页打开iframe 3:弹窗打开 string -
frame 是否为外链 (当为true时router为链接地址, 为false时router为路由地址) boolean -
cached 是否缓存 boolean meta.keepAlive
visible 是否不显示在菜单 boolean route.hidden
icon 菜单图标 string meta.icon
pageProperties 新开窗口打开时的窗口配置 string meta.pageProperties
advancedJs 路由跳转时执行的js string meta.advancedJs
oneMenu 是否为顶级目录或菜单 boolean route.oneMenu
category 路由所属模块 (biz: 业务; sys: 系统) string -

# 后端菜单转为前端路由代码地址

@sys/utils/router/router.js

# 全局路由守卫

路由守卫就是路由跳转的一些验证,比如登录鉴权等

# 配置文件路径

src/permission.js 前置守卫:beforeEach 后置钩子:afterEach