permission.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { defineStore } from 'pinia'
  2. import { asyncRouterMap, constantRouterMap } from '@/router'
  3. // import { useCache } from '@/hooks/web/useCache'
  4. import { flatMultiLevelRoutes } from '@/utils/routerHelper'
  5. // import { generateRoutesFn1, generateRoutesFn2, flatMultiLevelRoutes } from '@/utils/routerHelper'
  6. import { store } from '../index'
  7. // import { useAppStoreWithOut } from '@/store/modules/app'
  8. import { cloneDeep } from 'lodash-es'
  9. // const { wsCache } = useCache()
  10. // const appStore = useAppStoreWithOut()
  11. export interface PermissionState {
  12. routers: AppRouteRecordRaw[]
  13. addRouters: AppRouteRecordRaw[]
  14. isAddRouters: boolean
  15. menuTabRouters: AppRouteRecordRaw[]
  16. }
  17. export const usePermissionStore = defineStore({
  18. id: 'permission',
  19. state: (): PermissionState => ({
  20. routers: [],
  21. addRouters: [],
  22. isAddRouters: false,
  23. menuTabRouters: []
  24. }),
  25. persist: {
  26. enabled: true
  27. },
  28. getters: {
  29. getRouters(): AppRouteRecordRaw[] {
  30. return this.routers
  31. },
  32. getAddRouters(): AppRouteRecordRaw[] {
  33. return flatMultiLevelRoutes(cloneDeep(this.addRouters))
  34. },
  35. getIsAddRouters(): boolean {
  36. return this.isAddRouters
  37. },
  38. getMenuTabRouters(): AppRouteRecordRaw[] {
  39. return this.menuTabRouters
  40. }
  41. },
  42. actions: {
  43. generateRoutes(): Promise<unknown> {
  44. return new Promise<void>((resolve) => {
  45. // 路由权限控制,如果不需要权限控制,请注释
  46. // let routerMap: AppRouteRecordRaw[] = []
  47. // if (wsCache.get(appStore.getUserInfo).username === 'admin') {
  48. // // 模拟前端控制权限
  49. // routerMap = generateRoutesFn1(cloneDeep(asyncRouterMap))
  50. // } else {
  51. // // 模拟后端控制权限
  52. // routerMap = generateRoutesFn2(wsCache.get(appStore.getUserInfo).checkedNodes)
  53. // }
  54. // 不需要权限控制
  55. const routerMap: AppRouteRecordRaw[] = cloneDeep(asyncRouterMap)
  56. // 动态路由,404一定要放到最后面
  57. this.addRouters = routerMap.concat([
  58. {
  59. path: '/:path(.*)*',
  60. redirect: '/404',
  61. name: '404Page',
  62. meta: {
  63. hidden: true,
  64. breadcrumb: false
  65. }
  66. }
  67. ])
  68. // 渲染菜单的所有路由
  69. this.routers = cloneDeep(constantRouterMap).concat(routerMap)
  70. resolve()
  71. })
  72. },
  73. setIsAddRouters(state: boolean): void {
  74. this.isAddRouters = state
  75. },
  76. setMenuTabRouters(routers: AppRouteRecordRaw[]): void {
  77. this.menuTabRouters = routers
  78. }
  79. }
  80. })
  81. export const usePermissionStoreWithOut = () => {
  82. return usePermissionStore(store)
  83. }