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

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

Loading…
Cancel
Save