import { asyncRoutes, commonRoutes } from '@/router'
|
/**
|
* 把后台返回菜单组装成routes要求的格式
|
* @param {*} routes
|
* @param {*} menu
|
*/
|
export function getAsyncRoutes(routes, menu) {
|
// routes 是route.js的路由
|
// menu 是接口返回的路由
|
// menu 中flag "0" 表示 true "1"表示false
|
const menuCode = []// 将后端code取出存成数组形式
|
const menuNameAndCode = []// 将后端code与name取出存成数组形式
|
menu.forEach(item => {
|
if (item.flag === '0') {
|
menuCode.push(item.code)
|
menuNameAndCode.push({ code: item.code, name: item.name, seq: item.seq })
|
if (item.children && item.children.length > 0) {
|
item.children.forEach(it => {
|
if (it.flag === '0') {
|
menuCode.push(it.code)
|
|
menuNameAndCode.push({ code: it.code, name: it.name, hidden: it.is_show === 'N', buttoncode: it.buttoncode, datacode: it.datacode, seq: it.seq })
|
}
|
})
|
}
|
}
|
})
|
|
const newRoutes = [] // 新路由
|
|
routes.forEach(item => {
|
if (menuCode.includes(item.code) && item.children && item.children.length > 0) {
|
item.meta.title = menuNameAndCode.find(item2 => item2.code === item.code).name
|
item.meta.seq = menuNameAndCode.find(item2 => item2.code === item.code).seq
|
|
const children = []
|
let flag = false// 判断是否有children存进去
|
item.children.forEach(it => {
|
if (menuCode.includes(it.code)) {
|
const t = menuNameAndCode.find(item2 => item2.code === it.code)
|
it.meta.title = t.name
|
it.meta.buttoncode = t.buttoncode
|
it.meta.datacode = t.datacode
|
it.hidden = t.hidden
|
it.seq = t.seq
|
children.push(it)
|
flag = true
|
}
|
})
|
if (flag) {
|
newRoutes.push({
|
alwaysShow: item.alwaysShow,
|
code: item.code,
|
name: item.name,
|
path: item.path,
|
redirect: item.redirect,
|
component: item.component,
|
children: children.sort((a, b) => a.seq - b.seq),
|
meta: item.meta
|
})
|
}
|
}
|
})
|
newRoutes.sort((a, b) => a.meta.seq - b.meta.seq)
|
|
newRoutes.push({ path: '*', redirect: '/404', hidden: true })
|
|
return newRoutes
|
}
|
const state = {
|
routes: commonRoutes,
|
addRouters: []
|
}
|
|
const mutations = {
|
SET_ROUTES: (state, routes) => {
|
state.addRouters = routes
|
state.routes = commonRoutes.concat(routes)
|
}
|
}
|
|
const actions = {
|
generateRoutes({ commit }, menu) {
|
return new Promise(resolve => {
|
const newRoutes = getAsyncRoutes(asyncRoutes, menu)
|
|
commit('SET_ROUTES', newRoutes)
|
resolve(newRoutes)
|
})
|
}
|
}
|
|
export default {
|
namespaced: true,
|
state,
|
mutations,
|
actions
|
}
|