交通驾驶舱前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

128 lines
4.0 KiB

import {getMenuTreeByUsername} from '../../api/system/sys_menu'
import router from "@/router/index"
import systemRoutes from '@/router/modules/system'
const HOME_PAGE = "/home"
const FIRST_PAGE = HOME_PAGE + "/firstpage"
const state = {
//存放{ route: 路由路径, name: tab显示名称}对象数组
maintabs:[{route: FIRST_PAGE, name: "首页",closable:false}],
//当前被激活显示的那个Tab内容对应的route
activeRoute: FIRST_PAGE,
//当前激活的Tab的功能名称
activeTabName:"",
menuList:[
/*{ //这部分已经在后端“菜单管理”中进行动态加载,所以不需要静态代码配置
id:0,
name:"非菜单路由,但是需要显示Tab,请定义在这里",
hidden:true,
children:[
{name:"首页",path:"/home/firstpage",hidden:true},
{name:"个人中心",path:"/home/personal",hidden:true}
]
},
{ id:1,
name:"系统管理",
path:"/system",
icon:"el-icon-lock",
children:[
{id:3,name:"用户管理",path:"/home/sysuser"},
{id:4,name:"角色管理",path:"/home/sysrole"},
{id:6,name:"组织管理",path:"/home/sysorg"},
{id:7,name:"菜单管理",path:"/home/sysmenu"},
{id:8,name:"接口管理",path:"/home/sysapi"},
]
},
{ id:2,
name:"订单管理",
path:"/order",
icon:"el-icon-eleme",
children:[
{id:5,name:"订单详情",path:"/home/order"},
]
}*/
]
}
const actions = {
addTab({state,commit},route){
getMenuTreeByUsername().then(res => {
state.menuList = res.data
commit("addTabMutation",route);
})
}
}
const mutations = {
//加载后台菜单数据之后调用该方法
addTabMutation(state, route) {
//维护主界面Tab信息(从菜单数据中获取)
let isAlreadyIn =
state.maintabs.some(item => item.route === route)
this.commit("findMenuNameByRoute",route);
state.activeRoute = route;
if(!isAlreadyIn && state.activeTabName !== ""){
state.maintabs.push({route:route,name:state.activeTabName});
}
//重点从这里开始
let loadedRoutes = []; //动态加载的前端路由初始化
//将菜单转换为路由
menuToRoutes(state.menuList,loadedRoutes)
//固定路由与动态加载的前端路由进行组合
for(let i in systemRoutes){
if(systemRoutes[i].path === HOME_PAGE){
systemRoutes[i].children = loadedRoutes
}
}
//最后让路由生效
router.$addRoutes(systemRoutes)
},
removeTab(state, route){
if(route !== FIRST_PAGE){
state.maintabs = state.maintabs.filter(
item => item.route !== route
)
state.activeRoute = state.maintabs[state.maintabs.length-1].route
}
},
findMenuNameByRoute(state, route){
let findOne;
for(let i in state.menuList){
let tmpArr = state.menuList[i].children.filter(
item => item.path === route
)
if(tmpArr.length > 0) {
findOne = tmpArr[0]
break;
}
}
state.activeTabName = findOne?findOne.name:"";
}
}
const getters = {
}
//将菜单转换为前端路由
function menuToRoutes(menuList,loadedRoutes){
for(let i in menuList){
menuList[i].children.forEach(item => {
if(item.isLeaf){ //为权限菜单中的叶子节点,添加前端路由
loadedRoutes.push({
path: item.url.replace(HOME_PAGE + "/",""),
name: item.url.replace(HOME_PAGE + "/",""),
component: resolve => {
require(["@/views/" + item.viewImport ], resolve)
}
})
}else{
//递归处理菜单树形结构
menuToRoutes(item.children,loadedRoutes);
}
})
}
}
export default {
state,actions,mutations,getters
}