master
271556543@qq.com 3 years ago
parent 4777fcdea8
commit d20e5ef139

@ -1,160 +1,160 @@
import {
asyncRoutes,
constantRoutes
} from '@/router'
import Layout from '@/layout'
import {
getAuthMenu
} from '@/api/user.js'
/**
* Use meta.role to determine if the current user has permission
* @param roles
* @param route
*/
function hasPermission(roles, route) {
if (route.meta && route.meta.roles) {
return roles.some(role => route.meta.roles.includes(role))
} else {
return true
}
}
/**
* 静态路由懒加载
* @param view 格式必须为 xxx/xxx 开头不要加斜杠
* @returns
*/
export const loadView = (view) => {
return (resolve) => require([`@/views${view}`], resolve);
}
/**
* Filter asynchronous routing tables by recursion
* @param routes asyncRoutes
* @param roles
*/
export function filterAsyncRoutes(routes, roles) {
const res = []
routes.forEach(route => {
const tmp = {
...route
}
if (hasPermission(roles, tmp)) {
if (tmp.children) {
tmp.children = filterAsyncRoutes(tmp.children, roles)
}
res.push(tmp)
}
})
return res
}
const state = {
routes: [],
addRoutes: []
}
/**
* 后台查询的菜单数据拼装成路由格式的数据
* @param routes
*/
export function generaMenu(routes, data) {
data.forEach(item => {
if (item.url === "/") {
} else {
const menu = {
path: item.url === '#' ? item.id + '_key' : item.url,
component: item.url === '#' ? Layout : loadView(item.url),
// hidden: true,
children: [],
name: 'menu_' + item.id,
meta: {
title: item.name,
id: item.id,
roles: ['admin'],
icon: item.icon
}
}
if (item.children) {
generaMenu(menu.children, item.children)
}
routes.push(menu)
}
})
}
const mutations = {
SET_ROUTES: (state, routes) => {
state.addRoutes = routes
state.routes = constantRoutes.concat(routes)
}
}
// const actions = {
// generateRoutes({
// commit
// }, roles) {
// const loadMenuData = []
// return new Promise(resolve => {
// let accessedRoutes
// let data = _routes2;
// Object.assign(loadMenuData, data)
// generaMenu(asyncRoutes, loadMenuData)
// if (roles.includes('admin')) {
// // alert(JSON.stringify(asyncRoutes))
// accessedRoutes = asyncRoutes || []
// } else {
// accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
// }
// commit('SET_ROUTES', accessedRoutes)
// resolve(accessedRoutes)
// })
// }
// }
const actions = {
generateRoutes({
commit
}, roles) {
return new Promise(resolve => {
const loadMenuData = []
// 先查询后台并返回左侧菜单数据并把数据添加到路由
getAuthMenu(state.token).then(response => {
let data = response
//console.log(JSON.stringify(data))
import {
asyncRoutes,
constantRoutes
} from '@/router'
import Layout from '@/layout'
import {
getAuthMenu
} from '@/api/user.js'
/**
* Use meta.role to determine if the current user has permission
* @param roles
* @param route
*/
function hasPermission(roles, route) {
if (route.meta && route.meta.roles) {
return roles.some(role => route.meta.roles.includes(role))
} else {
return true
}
}
/**
* 静态路由懒加载
* @param view 格式必须为 xxx/xxx 开头不要加斜杠
* @returns
*/
export const loadView = (view) => {
return (resolve) => require([`@/views${view}`], resolve);
}
/**
* Filter asynchronous routing tables by recursion
* @param routes asyncRoutes
* @param roles
*/
export function filterAsyncRoutes(routes, roles) {
const res = []
routes.forEach(route => {
const tmp = {
...route
}
if (hasPermission(roles, tmp)) {
if (tmp.children) {
tmp.children = filterAsyncRoutes(tmp.children, roles)
}
res.push(tmp)
}
})
return res
}
const state = {
routes: [],
addRoutes: []
}
/**
* 后台查询的菜单数据拼装成路由格式的数据
* @param routes
*/
export function generaMenu(routes, data) {
data.forEach(item => {
if (item.url === "/") {
} else {
const menu = {
path: item.url === '#' ? item.id + '_key' : item.url,
component: item.path === '#' ? Layout : loadView(item.path),
// hidden: true,
children: [],
name: 'menu_' + item.id,
meta: {
title: item.name,
id: item.id,
roles: ['admin'],
icon: item.icon
}
}
if (item.children) {
generaMenu(menu.children, item.children)
}
routes.push(menu)
}
})
}
const mutations = {
SET_ROUTES: (state, routes) => {
state.addRoutes = routes
state.routes = constantRoutes.concat(routes)
}
}
// const actions = {
// generateRoutes({
// commit
// }, roles) {
// const loadMenuData = []
// return new Promise(resolve => {
// let accessedRoutes
// let data = _routes2;
// Object.assign(loadMenuData, data)
// generaMenu(asyncRoutes, loadMenuData)
// if (roles.includes('admin')) {
// // alert(JSON.stringify(asyncRoutes))
// accessedRoutes = asyncRoutes || []
// } else {
// accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
// }
// commit('SET_ROUTES', accessedRoutes)
// resolve(accessedRoutes)
// })
// }
// }
const actions = {
generateRoutes({
commit
}, roles) {
return new Promise(resolve => {
const loadMenuData = []
// 先查询后台并返回左侧菜单数据并把数据添加到路由
getAuthMenu(state.token).then(response => {
let data = response
//console.log(JSON.stringify(data))
Object.assign(loadMenuData, data)
asyncRoutes.length=0;
generaMenu(asyncRoutes, loadMenuData)
let accessedRoutes
if (roles.includes('admin')) {
// alert(JSON.stringify(asyncRoutes))
accessedRoutes = asyncRoutes || []
} else {
accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
}
commit('SET_ROUTES', accessedRoutes)
resolve(accessedRoutes)
// generaMenu(asyncRoutes, data)
}).catch(error => {
console.log(error)
})
})
}
}
export default {
namespaced: true,
state,
mutations,
actions
asyncRoutes.length=0;
generaMenu(asyncRoutes, loadMenuData)
let accessedRoutes
if (roles.includes('admin')) {
// alert(JSON.stringify(asyncRoutes))
accessedRoutes = asyncRoutes || []
} else {
accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
}
commit('SET_ROUTES', accessedRoutes)
resolve(accessedRoutes)
// generaMenu(asyncRoutes, data)
}).catch(error => {
console.log(error)
})
})
}
}
export default {
namespaced: true,
state,
mutations,
actions
}

Loading…
Cancel
Save