permission.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { defineStore } from 'pinia'
  2. import { store } from '@/store'
  3. import { cloneDeep } from 'lodash-es'
  4. import remainingRouter from '@/router/modules/remaining'
  5. import { flatMultiLevelRoutes, generateRoute } from '@/utils/routerHelper'
  6. import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
  7. const { wsCache } = useCache()
  8. export interface PermissionState {
  9. routers: AppRouteRecordRaw[]
  10. addRouters: AppRouteRecordRaw[]
  11. menuTabRouters: AppRouteRecordRaw[]
  12. }
  13. export const usePermissionStore = defineStore('permission', {
  14. state: (): PermissionState => ({
  15. routers: [],
  16. addRouters: [],
  17. menuTabRouters: []
  18. }),
  19. getters: {
  20. getRouters(): AppRouteRecordRaw[] {
  21. return this.routers
  22. },
  23. getAddRouters(): AppRouteRecordRaw[] {
  24. return flatMultiLevelRoutes(cloneDeep(this.addRouters))
  25. },
  26. getMenuTabRouters(): AppRouteRecordRaw[] {
  27. return this.menuTabRouters
  28. }
  29. },
  30. actions: {
  31. async generateRoutes(): Promise<unknown> {
  32. return new Promise<void>(async (resolve) => {
  33. // 获得菜单列表,它在登录的时候,setUserInfoAction 方法中已经进行获取
  34. let res: AppCustomRouteRecordRaw[] = []
  35. if (wsCache.get(CACHE_KEY.ROLE_ROUTERS)) {
  36. res = wsCache.get(CACHE_KEY.ROLE_ROUTERS) as AppCustomRouteRecordRaw[]
  37. }
  38. const lang = wsCache.get(CACHE_KEY.LANG)
  39. const routerMap: AppRouteRecordRaw[] = generateRoute(res,lang)
  40. // 动态路由,404一定要放到最后面
  41. this.addRouters = routerMap.concat([
  42. {
  43. path: '/:path(.*)*',
  44. redirect: '/404',
  45. name: '404Page',
  46. meta: {
  47. hidden: true,
  48. breadcrumb: false
  49. }
  50. }
  51. ])
  52. // 渲染菜单的所有路由
  53. this.routers = cloneDeep(remainingRouter).concat(routerMap)
  54. resolve()
  55. })
  56. },
  57. setMenuTabRouters(routers: AppRouteRecordRaw[]): void {
  58. this.menuTabRouters = routers
  59. }
  60. },
  61. persist: false
  62. })
  63. export const usePermissionStoreWithOut = () => {
  64. return usePermissionStore(store)
  65. }