| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import { constantRoutes, asyncRoutes } from '@/router'
- import { Role } from '@/constant'
- function hasPermission (roles, { include, exclude }) {
- if (include) {
- return roles.some(role => include.includes(role))
- }
- return !exclude || !roles.some(role => exclude.includes(role))
- }
- export function filterAsyncRoutes (routes, roles, force) {
- const res = []
- routes.forEach(route => {
- if (!route.dev && (force || hasPermission(roles, route))) {
- if (route.children) {
- const children = filterAsyncRoutes(route.children, roles, force)
- if (!children.length) {
- return
- }
- res.push({ ...route, children })
- } else {
- res.push({ ...route })
- }
- }
- })
- return res
- }
- const state = {
- routes: []
- }
- const mutations = {
- SET_ROUTES (state, routes) {
- state.routes = routes
- }
- }
- const actions = {
- generateRoutes ({ commit }, roles) {
- let accessedRoutes
- if (roles.includes(Role.ADMIN)) {
- accessedRoutes = __DEV__ ? asyncRoutes : filterAsyncRoutes(asyncRoutes, roles, true)
- } else {
- accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
- }
- commit('SET_ROUTES', constantRoutes.concat(accessedRoutes))
- }
- }
- export default {
- namespaced: true,
- state,
- mutations,
- actions
- }
|