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: [] }), actions: { generatorRouter(role: any):Promise { return new Promise(resolve => { this.menuRouter = filterAsyncRouter(asyncRouter, role) resolve(this.menuRouter) }) } } })