Template
1
0
mirror of https://github.com/un-pany/v3-admin-vite.git synced 2025-04-21 11:29:20 +08:00

perf: 代码优化 store/modules/permission

This commit is contained in:
pany 2023-05-24 18:25:49 +08:00
parent 5c09716fa5
commit d090c294ae

View File

@ -6,28 +6,19 @@ import { constantRoutes, asyncRoutes } from "@/router"
import asyncRouteSettings from "@/config/async-route"
const hasPermission = (roles: string[], route: RouteRecordRaw) => {
if (route.meta && route.meta.roles) {
return roles.some((role) => {
if (route.meta?.roles !== undefined) {
return route.meta.roles.includes(role)
} else {
return false
}
})
} else {
return true
}
const routeRoles = route.meta?.roles
return routeRoles ? roles.some((role) => routeRoles.includes(role)) : true
}
const filterAsyncRoutes = (routes: RouteRecordRaw[], roles: string[]) => {
const res: RouteRecordRaw[] = []
routes.forEach((route) => {
const r = { ...route }
if (hasPermission(roles, r)) {
if (r.children) {
r.children = filterAsyncRoutes(r.children, roles)
const tempRoute = { ...route }
if (hasPermission(roles, tempRoute)) {
if (tempRoute.children) {
tempRoute.children = filterAsyncRoutes(tempRoute.children, roles)
}
res.push(r)
res.push(tempRoute)
}
})
return res
@ -38,12 +29,7 @@ export const usePermissionStore = defineStore("permission", () => {
const dynamicRoutes = ref<RouteRecordRaw[]>([])
const setRoutes = (roles: string[]) => {
let accessedRoutes
if (!asyncRouteSettings.open) {
accessedRoutes = asyncRoutes
} else {
accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
}
const accessedRoutes = asyncRouteSettings.open ? filterAsyncRoutes(asyncRoutes, roles) : asyncRoutes
routes.value = constantRoutes.concat(accessedRoutes)
dynamicRoutes.value = accessedRoutes
}