permission.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import { defineStore } from 'pinia'
  2. import { store } from '../index'
  3. import { cloneDeep } from 'lodash-es'
  4. import remainingRouter from '@/router/modules/remaining'
  5. import { generateRoutes, flatMultiLevelRoutes } from '@/utils/routerHelper'
  6. export interface PermissionState {
  7. routers: AppRouteRecordRaw[]
  8. addRouters: AppRouteRecordRaw[]
  9. isAddRouters: boolean
  10. menuTabRouters: AppRouteRecordRaw[]
  11. }
  12. export const usePermissionStore = defineStore({
  13. id: 'permission',
  14. state: (): PermissionState => ({
  15. routers: [],
  16. addRouters: [],
  17. isAddRouters: false,
  18. menuTabRouters: []
  19. }),
  20. persist: {
  21. enabled: true
  22. },
  23. getters: {
  24. getRouters(): AppRouteRecordRaw[] {
  25. return this.routers
  26. },
  27. getAddRouters(): AppRouteRecordRaw[] {
  28. return flatMultiLevelRoutes(cloneDeep(this.addRouters))
  29. },
  30. getIsAddRouters(): boolean {
  31. return this.isAddRouters
  32. },
  33. getMenuTabRouters(): AppRouteRecordRaw[] {
  34. return this.menuTabRouters
  35. }
  36. },
  37. actions: {
  38. generateRoutes(routers?: AppCustomRouteRecordRaw[] | string[]): Promise<unknown> {
  39. return new Promise<void>((resolve) => {
  40. let routerMap: AppRouteRecordRaw[] = []
  41. routerMap = generateRoutes(routers as AppCustomRouteRecordRaw[])
  42. // 动态路由,404一定要放到最后面
  43. this.addRouters = routerMap.concat([
  44. {
  45. path: '/:path(.*)*',
  46. redirect: '/404',
  47. name: '404Page',
  48. meta: {
  49. hidden: true,
  50. breadcrumb: false
  51. }
  52. }
  53. ])
  54. // 渲染菜单的所有路由
  55. this.routers = cloneDeep(remainingRouter).concat(routerMap)
  56. resolve()
  57. })
  58. },
  59. setIsAddRouters(state: boolean): void {
  60. this.isAddRouters = state
  61. },
  62. setMenuTabRouters(routers: AppRouteRecordRaw[]): void {
  63. this.menuTabRouters = routers
  64. }
  65. }
  66. })
  67. export const usePermissionStoreWithOut = () => {
  68. return usePermissionStore(store)
  69. }