73 lines
2.0 KiB
TypeScript
73 lines
2.0 KiB
TypeScript
import { defineStore } from 'pinia'
|
||
import { constantRouterMap } from '@/router'
|
||
import { generateRoutesFn2, flatMultiLevelRoutes } from '@/utils/routerHelper'
|
||
import { store } from '../index'
|
||
import { cloneDeep } from 'lodash-es'
|
||
|
||
export interface PermissionState {
|
||
routers: AppRouteRecordRaw[]
|
||
addRouters: AppRouteRecordRaw[]
|
||
isAddRouters: boolean
|
||
menuTabRouters: AppRouteRecordRaw[]
|
||
}
|
||
|
||
export const usePermissionStore = defineStore('permission', {
|
||
state: (): PermissionState => ({
|
||
routers: [],
|
||
addRouters: [],
|
||
isAddRouters: false,
|
||
menuTabRouters: []
|
||
}),
|
||
persist: {
|
||
// 开启持久化存储
|
||
enabled: true
|
||
},
|
||
getters: {
|
||
getRouters(): AppRouteRecordRaw[] {
|
||
return this.routers
|
||
},
|
||
getAddRouters(): AppRouteRecordRaw[] {
|
||
return flatMultiLevelRoutes(cloneDeep(this.addRouters))
|
||
},
|
||
getIsAddRouters(): boolean {
|
||
return this.isAddRouters
|
||
},
|
||
getMenuTabRouters(): AppRouteRecordRaw[] {
|
||
return this.menuTabRouters
|
||
}
|
||
},
|
||
actions: {
|
||
generateRoutes(routers?: AppCustomRouteRecordRaw[]): Promise<unknown> {
|
||
return new Promise<void>((resolve) => {
|
||
let routerMap: AppRouteRecordRaw[] = []
|
||
routerMap = generateRoutesFn2(routers as AppCustomRouteRecordRaw[])
|
||
// 动态路由,404一定要放到最后面
|
||
this.addRouters = routerMap.concat([
|
||
{
|
||
path: '/:path(.*)*',
|
||
redirect: '/404',
|
||
name: '404Page',
|
||
meta: {
|
||
hidden: true,
|
||
breadcrumb: false
|
||
}
|
||
}
|
||
])
|
||
// 渲染菜单的所有路由
|
||
this.routers = cloneDeep(constantRouterMap).concat(routerMap)
|
||
resolve()
|
||
})
|
||
},
|
||
setIsAddRouters(state: boolean): void {
|
||
this.isAddRouters = state
|
||
},
|
||
setMenuTabRouters(routers: AppRouteRecordRaw[]): void {
|
||
this.menuTabRouters = routers
|
||
}
|
||
}
|
||
})
|
||
|
||
export const usePermissionStoreWithOut = () => {
|
||
return usePermissionStore(store)
|
||
}
|