|
|
@ -16,6 +16,7 @@ import { |
|
|
|
storageSession, |
|
|
|
isIncludeAllChildren |
|
|
|
} from "@pureadmin/utils"; |
|
|
|
import { getConfig } from "@/config"; |
|
|
|
import { buildHierarchyTree } from "@/utils/tree"; |
|
|
|
import { cloneDeep, intersection } from "lodash-unified"; |
|
|
|
import { sessionKey, type DataInfo } from "@/utils/auth"; |
|
|
@ -151,41 +152,60 @@ function addPathMatch() { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** 处理动态路由(后端返回的路由) */ |
|
|
|
function handleAsyncRoutes(routeList) { |
|
|
|
if (routeList.length === 0) { |
|
|
|
usePermissionStoreHook().handleWholeMenus(routeList); |
|
|
|
} else { |
|
|
|
formatFlatteningRoutes(addAsyncRoutes(routeList)).map( |
|
|
|
(v: RouteRecordRaw) => { |
|
|
|
// 防止重复添加路由
|
|
|
|
if ( |
|
|
|
router.options.routes[0].children.findIndex( |
|
|
|
value => value.path === v.path |
|
|
|
) !== -1 |
|
|
|
) { |
|
|
|
return; |
|
|
|
} else { |
|
|
|
// 切记将路由push到routes后还需要使用addRoute,这样路由才能正常跳转
|
|
|
|
router.options.routes[0].children.push(v); |
|
|
|
// 最终路由进行升序
|
|
|
|
ascending(router.options.routes[0].children); |
|
|
|
if (!router.hasRoute(v?.name)) router.addRoute(v); |
|
|
|
const flattenRouters: any = router |
|
|
|
.getRoutes() |
|
|
|
.find(n => n.path === "/"); |
|
|
|
router.addRoute(flattenRouters); |
|
|
|
} |
|
|
|
} |
|
|
|
); |
|
|
|
usePermissionStoreHook().handleWholeMenus(routeList); |
|
|
|
} |
|
|
|
addPathMatch(); |
|
|
|
} |
|
|
|
|
|
|
|
/** 初始化路由 */ |
|
|
|
function initRouter() { |
|
|
|
return new Promise(resolve => { |
|
|
|
getAsyncRoutes().then(({ data }) => { |
|
|
|
if (data.length === 0) { |
|
|
|
usePermissionStoreHook().handleWholeMenus(data); |
|
|
|
resolve(router); |
|
|
|
if (getConfig()?.CachingAsyncRoutes) { |
|
|
|
// 开启动态路由缓存本地sessionStorage
|
|
|
|
const key = "async-routes"; |
|
|
|
const asyncRouteList = storageSession.getItem(key) as any; |
|
|
|
if (asyncRouteList?.length > 0) { |
|
|
|
handleAsyncRoutes(asyncRouteList); |
|
|
|
} else { |
|
|
|
formatFlatteningRoutes(addAsyncRoutes(data)).map( |
|
|
|
(v: RouteRecordRaw) => { |
|
|
|
// 防止重复添加路由
|
|
|
|
if ( |
|
|
|
router.options.routes[0].children.findIndex( |
|
|
|
value => value.path === v.path |
|
|
|
) !== -1 |
|
|
|
) { |
|
|
|
return; |
|
|
|
} else { |
|
|
|
// 切记将路由push到routes后还需要使用addRoute,这样路由才能正常跳转
|
|
|
|
router.options.routes[0].children.push(v); |
|
|
|
// 最终路由进行升序
|
|
|
|
ascending(router.options.routes[0].children); |
|
|
|
if (!router.hasRoute(v?.name)) router.addRoute(v); |
|
|
|
const flattenRouters: any = router |
|
|
|
.getRoutes() |
|
|
|
.find(n => n.path === "/"); |
|
|
|
router.addRoute(flattenRouters); |
|
|
|
} |
|
|
|
resolve(router); |
|
|
|
} |
|
|
|
); |
|
|
|
usePermissionStoreHook().handleWholeMenus(data); |
|
|
|
getAsyncRoutes().then(({ data }) => { |
|
|
|
handleAsyncRoutes(data); |
|
|
|
storageSession.setItem(key, data); |
|
|
|
}); |
|
|
|
} |
|
|
|
addPathMatch(); |
|
|
|
}); |
|
|
|
resolve(router); |
|
|
|
} else { |
|
|
|
getAsyncRoutes().then(({ data }) => { |
|
|
|
handleAsyncRoutes(data); |
|
|
|
resolve(router); |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|