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 RouterState { routers: AppRouteRecordRaw[] addRouters: AppRouteRecordRaw[] isAddRouters: boolean menuTabRouters: AppRouteRecordRaw[] } export const useRouterStore = defineStore('router', { state: (): RouterState => ({ routers: [], addRouters: [], isAddRouters: false, menuTabRouters: [] }), 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 { return new Promise((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 useRouterStoreWithOut = () => { return useRouterStore(store) }