路由菜单
路由组成
路由菜单有两部分组成,一部分为常用固有菜单,无需权限控制,所有人可见,一部分有后端生成返回前端,可分角色权限控制。
前端定义路由主要位于:src\router\constant.ts
文件
后端返回路由经由 路由守卫
(src\hooks\routes\useRouteGuard.ts
) 处理的同时生成对应前端路由,生成的路由分为两部分 (src\stores\modules\permission.ts
处理):
- 生成完整的树结构,用于侧边栏菜单渲染
- 生成只有两级的菜单树,主要用于
keep-alive
, vue-router
只能处理两级目录,三级及以上的目录无法keep-alive
菜单信息
export interface AppRouteRecordRaw {
path: string
name?: string | symbol
component: Component | string
hidden?: boolean
meta?: AppRouteMeta
redirect?: string
children?: AppRouteRecordRaw[]
props?: Record<string, any>
query?: string
noShowingChildren?: boolean
always_show?: boolean
menu_type?: MenuType
id?: string
pid?: string
menu_name?: string
}
export interface AppRouteMeta {
title: string
icon?: string
activeMenu?: string
hidden?: boolean
link?: string
i18n?: string
no_cache?: boolean
}
/**
* @ C 为菜单,具有路由导航的菜单,曲子CaiDan拼音的第一个字母
* @ M 为目录,作为路由目录而存在,取自MuLu的第一个字母
* @ F 为Api级别,取自Function的第一个字母
*/
export enum MenuType {
C = 'C',
M = 'M',
F = 'F',
}
AppRouteRecordRaw
里面有很多冗余定义信息,并没有所有都使用,后续应该会根据使用情况精简,主要需关注name
,path
,component
,menu_name
,menu_type
等几个
AppRouteMeta
title: string // 标题显示
icon?: string // 图标名称
activeMenu?: string // 激活菜单路径
hidden?: boolean // 是否隐藏
link?: string // 外链
i18n?: string // 国际化标志
no_cache?: boolean // keep-alive 标志 true时不缓存
MenuType
export enum MenuType {
C = 'C', //菜单,具有路由导航的菜单
M = 'M', //为目录,作为路由目录而存在
F = 'F', //为Api级别,取自Function的第一个字母,api权限和单独按钮权限
}