github.com/e154/smart-home@v0.17.2-0.20240311175135-e530a6e5cd45/static_source/admin/src/store/modules/permission.ts (about) 1 import { defineStore } from 'pinia' 2 import { dashboardRouterMap, developRouterMap, constantRouterMap } from '@/router' 3 import { generateRoutesFn1, generateRoutesFn2, flatMultiLevelRoutes } from '@/utils/routerHelper' 4 import { store } from '../index' 5 import { cloneDeep } from 'lodash-es' 6 7 export interface PermissionState { 8 routers: AppRouteRecordRaw[] 9 addRouters: AppRouteRecordRaw[] 10 isAddRouters: boolean 11 menuTabRouters: AppRouteRecordRaw[] 12 } 13 14 export const usePermissionStore = defineStore('permission', { 15 state: (): PermissionState => ({ 16 routers: [], 17 addRouters: [], 18 isAddRouters: false, 19 menuTabRouters: [] 20 }), 21 getters: { 22 getRouters(): AppRouteRecordRaw[] { 23 return this.routers 24 }, 25 getAddRouters(): AppRouteRecordRaw[] { 26 return flatMultiLevelRoutes(cloneDeep(this.addRouters)) 27 }, 28 getIsAddRouters(): boolean { 29 return this.isAddRouters 30 }, 31 getMenuTabRouters(): AppRouteRecordRaw[] { 32 return this.menuTabRouters 33 }, 34 getDashboardRouters(): AppRouteRecordRaw[] { 35 return this.dashboardTabRouters 36 }, 37 getDevelopmentRouters(): AppRouteRecordRaw[] { 38 return this.routers 39 } 40 }, 41 actions: { 42 generateRoutes( 43 type: 'admin' | 'user' | 'none', 44 routers?: AppCustomRouteRecordRaw[] | string[] 45 ): Promise<unknown> { 46 return new Promise<void>((resolve) => { 47 let routerMap: AppRouteRecordRaw[] = [] 48 if (type === 'admin') { 49 // 模拟后端过滤菜单 50 routerMap = generateRoutesFn2(routers as AppCustomRouteRecordRaw[]) 51 } else if (type === 'user') { 52 // 模拟前端过滤菜单 53 routerMap = generateRoutesFn1(cloneDeep(dashboardRouterMap), routers as string[]) 54 } else { 55 // 直接读取静态路由表 56 routerMap = cloneDeep(dashboardRouterMap) 57 } 58 routerMap = routerMap.concat(cloneDeep(developRouterMap)) 59 60 // 动态路由,404一定要放到最后面 61 const err404: AppRouteRecordRaw[] = [ 62 { 63 path: '/:path(.*)*', 64 redirect: '/404', 65 name: '404Page', 66 meta: { 67 hidden: true, 68 breadcrumb: false 69 } 70 } as AppRouteRecordRaw 71 ] 72 this.addRouters = routerMap.concat(err404) 73 74 // 渲染菜单的所有路由 75 this.routers = cloneDeep(constantRouterMap).concat(routerMap) 76 77 this.dashboardTabRouters = cloneDeep(constantRouterMap) 78 this.dashboardTabRouters = this.dashboardTabRouters.concat(err404, cloneDeep(dashboardRouterMap)) 79 resolve() 80 }) 81 }, 82 setIsAddRouters(state: boolean): void { 83 this.isAddRouters = state 84 }, 85 setMenuTabRouters(routers: AppRouteRecordRaw[]): void { 86 this.menuTabRouters = routers 87 } 88 } 89 }) 90 91 export const usePermissionStoreWithOut = () => { 92 return usePermissionStore(store) 93 }