潘志宝
6 天以前 ca22cdd5550cfa0defb0f430c538698182cdaec1
提交 | 用户 | 时间
820397 1 import { defineStore } from 'pinia'
H 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'
271781 6 import {CACHE_KEY, useSessionCache} from '@/hooks/web/useCache'
820397 7
271781 8 const { wsSessionCache } = useSessionCache()
820397 9
H 10 export interface PermissionState {
11   routers: AppRouteRecordRaw[]
12   addRouters: AppRouteRecordRaw[]
13   menuTabRouters: AppRouteRecordRaw[]
14 }
15
16 export const usePermissionStore = defineStore('permission', {
17   state: (): PermissionState => ({
18     routers: [],
19     addRouters: [],
20     menuTabRouters: []
21   }),
22   getters: {
23     getRouters(): AppRouteRecordRaw[] {
24       return this.routers
25     },
26     getAddRouters(): AppRouteRecordRaw[] {
27       return flatMultiLevelRoutes(cloneDeep(this.addRouters))
28     },
29     getMenuTabRouters(): AppRouteRecordRaw[] {
30       return this.menuTabRouters
31     }
32   },
33   actions: {
34     async generateRoutes(): Promise<unknown> {
35       return new Promise<void>(async (resolve) => {
36         // 获得菜单列表,它在登录的时候,setUserInfoAction 方法中已经进行获取
37         let res: AppCustomRouteRecordRaw[] = []
3e359e 38         const roleRouters = wsSessionCache.get(CACHE_KEY.ROLE_ROUTERS)
H 39         if (roleRouters) {
40           res = roleRouters as AppCustomRouteRecordRaw[]
820397 41         }
H 42         const routerMap: AppRouteRecordRaw[] = generateRoute(res)
43         // 动态路由,404一定要放到最后面
3e359e 44         // preschooler:vue-router@4以后已支持静态404路由,此处可不再追加
820397 45         this.addRouters = routerMap.concat([
H 46           {
47             path: '/:path(.*)*',
3e359e 48             component: () => import('@/views/Error/404.vue'),
820397 49             name: '404Page',
H 50             meta: {
51               hidden: true,
52               breadcrumb: false
53             }
54           }
55         ])
56         // 渲染菜单的所有路由
57         this.routers = cloneDeep(remainingRouter).concat(routerMap)
58         resolve()
59       })
60     },
61     setMenuTabRouters(routers: AppRouteRecordRaw[]): void {
62       this.menuTabRouters = routers
63     }
64   },
65   persist: false
66 })
67
68 export const usePermissionStoreWithOut = () => {
69   return usePermissionStore(store)
70 }