UNPKG

gxd-vue-library

Version:

依赖与element Ui插件库,聚福宝福利PC端插件库

87 lines (74 loc) 1.79 kB
import asyncRoutes from '@/router/async'; import {constantRoutes} from '@/router'; import permissionRoles from "@/constant/permissions"; /** * 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 } } /** * 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 } let has404 = false; const state = { routes: [], addRoutes: [] } const mutations = { SET_ROUTES: (state, routes) => { state.addRoutes = routes state.routes = constantRoutes.concat(routes) } } const actions = { generateRoutes({ commit }, roles) { return new Promise(resolve => { let accessedRoutes; //超级管理员 if (roles.includes(permissionRoles.adminRoles) || roles.includes(permissionRoles.devRoles) ) { accessedRoutes = asyncRoutes || [] //部分权限 } else { accessedRoutes = filterAsyncRoutes(asyncRoutes, roles) } //已经加入404页面 if(!has404) { accessedRoutes.push({path: '*', redirect: '/404', hidden: true}); has404 = true; } //保存权限值 commit('SET_ROUTES', accessedRoutes); resolve(accessedRoutes) }) } } export default { namespaced: true, state, mutations, actions }