| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import type { RouteRecordRaw } from 'vue-router'
- import {constantRouter, asyncRouter} from '@/router'
- function hasPermission (permission:any[], route:RouteRecordRaw) {
- if (route.meta && route.meta.permission) {
- if (permission === undefined) {
- return false
- }
- let flag = false
- for (let i = 0, len = permission.length; i < len; i++) {
- flag = route.meta.permission.includes(permission[i])
- if (flag) {
- return true
- }
- }
- return false
- }
- return true
- }
- function filterAsyncRouter (routerMap:RouteRecordRaw[], role:any) {
- const accessedRouters = routerMap.filter(route => {
- if (hasPermission(role.permissionList, route)) {
- if (route.children && route.children.length) {
- route.children = filterAsyncRouter(route.children, role)
- }
- return true
- }
- return false
- })
- return accessedRouters
- }
- export const useRouterStore = defineStore({
- id: 'router',
- state: () => ({
- menuRouter: <any>[]
- }),
- actions: {
- generatorRouter(role: any):Promise<RouteRecordRaw[]> {
- return new Promise(resolve => {
- this.menuRouter = filterAsyncRouter(asyncRouter, role)
- resolve(this.menuRouter)
- })
- }
- }
- })
|