router.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import type { RouteRecordRaw } from 'vue-router'
  2. import {constantRouter, asyncRouter} from '@/router'
  3. function hasPermission (permission:any[], route:RouteRecordRaw) {
  4. if (route.meta && route.meta.permission) {
  5. if (permission === undefined) {
  6. return false
  7. }
  8. let flag = false
  9. for (let i = 0, len = permission.length; i < len; i++) {
  10. flag = route.meta.permission.includes(permission[i])
  11. if (flag) {
  12. return true
  13. }
  14. }
  15. return false
  16. }
  17. return true
  18. }
  19. function filterAsyncRouter (routerMap:RouteRecordRaw[], role:any) {
  20. const accessedRouters = routerMap.filter(route => {
  21. if (hasPermission(role.permissionList, route)) {
  22. if (route.children && route.children.length) {
  23. route.children = filterAsyncRouter(route.children, role)
  24. }
  25. return true
  26. }
  27. return false
  28. })
  29. return accessedRouters
  30. }
  31. export const useRouterStore = defineStore({
  32. id: 'router',
  33. state: () => ({
  34. menuRouter: <any>[]
  35. }),
  36. actions: {
  37. generatorRouter(role: any):Promise<RouteRecordRaw[]> {
  38. return new Promise(resolve => {
  39. this.menuRouter = filterAsyncRouter(asyncRouter, role)
  40. resolve(this.menuRouter)
  41. })
  42. }
  43. }
  44. })