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 }