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…
Reference in new issue