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  }