fix(permission.ts): 超级管理员登录左侧菜单没有动态生成路由问题修复

This commit is contained in:
郝先瑞
2022-01-27 22:13:57 +08:00
parent 5aadc35808
commit 8a8f44f852

View File

@@ -2,21 +2,24 @@ import {PermissionState} from "@/store/interface";
import {RouteRecordRaw} from 'vue-router' import {RouteRecordRaw} from 'vue-router'
import {constantRoutes} from '@/router' import {constantRoutes} from '@/router'
import {listRoutes} from "@/api/system/menu"; import {listRoutes} from "@/api/system/menu";
import { defineStore } from "pinia"; import {defineStore} from "pinia";
import { store } from "@/store"; import {store} from "@/store";
const modules = import.meta.glob("../../views/**/**.vue"); const modules = import.meta.glob("../../views/**/**.vue");
export const Layout = () => import( '@/layout/index.vue') export const Layout = () => import( '@/layout/index.vue')
const hasPermission = (roles: string[], route: RouteRecordRaw) => { const hasPermission = (roles: string[], route: RouteRecordRaw) => {
if (route.meta && route.meta.roles) { if (route.meta && route.meta.roles) {
if (roles.includes('ROOT')) {
return true
}
return roles.some(role => { return roles.some(role => {
if (route.meta?.roles !== undefined) { if (route.meta?.roles !== undefined) {
return (route.meta.roles as string[]).includes(role); return (route.meta.roles as string[]).includes(role);
} }
}) })
} else {
return true
} }
return false
} }
export const filterAsyncRoutes = (routes: RouteRecordRaw[], roles: string[]) => { export const filterAsyncRoutes = (routes: RouteRecordRaw[], roles: string[]) => {
@@ -46,26 +49,21 @@ export const filterAsyncRoutes = (routes: RouteRecordRaw[], roles: string[]) =>
export const usePermissionStore = defineStore({ export const usePermissionStore = defineStore({
id:"permission", id: "permission",
state:():PermissionState=>( { state: (): PermissionState => ({
routes: [], routes: [],
addRoutes: [] addRoutes: []
}), }),
actions: { actions: {
setRoutes( routes: RouteRecordRaw[]){ setRoutes(routes: RouteRecordRaw[]) {
this.addRoutes = routes this.addRoutes = routes
this.routes = constantRoutes.concat(routes) this.routes = constantRoutes.concat(routes)
}, },
generateRoutes( roles: string[]) { generateRoutes(roles: string[]) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
listRoutes().then(response => { listRoutes().then(response => {
const asyncRoutes = response.data const asyncRoutes = response.data
let accessedRoutes let accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
if (roles.includes('ROOT')) { // 超级管理员拥有全部权限
accessedRoutes = asyncRoutes || []
} else {
accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
}
this.setRoutes(accessedRoutes) this.setRoutes(accessedRoutes)
resolve(accessedRoutes) resolve(accessedRoutes)
}).catch(error => { }).catch(error => {
@@ -75,6 +73,7 @@ export const usePermissionStore = defineStore({
} }
} }
}) })
export function usePermissionStoreHook() { export function usePermissionStoreHook() {
return usePermissionStore(store); return usePermissionStore(store);
} }