| | |
| | | import { ComponentLoader } from './ComponentLoader' |
| | | import { RouteValidator } from './RouteValidator' |
| | | import { RouteTransformer } from './RouteTransformer' |
| | | import { ComponentLoader } from './ComponentLoader.js' |
| | | import { RouteValidator } from './RouteValidator.js' |
| | | import { RouteTransformer } from './RouteTransformer.js' |
| | | class RouteRegistry { |
| | | constructor(router) { |
| | | constructor(router, options = {}) { |
| | | this.router = router |
| | | this.componentLoader = new ComponentLoader() |
| | | this.componentLoader = options.componentLoader || new ComponentLoader() |
| | | this.validator = new RouteValidator() |
| | | this.transformer = new RouteTransformer(this.componentLoader) |
| | | this.removeRouteFns = [] |
| | |
| | | throw new Error(`路由配置验证失败: ${validationResult.errors.join(', ')}`) |
| | | } |
| | | const removeRouteFns = [] |
| | | const existingRoutePaths = new Set( |
| | | (this.router.getRoutes?.() || []).map((route) => route?.path).filter(Boolean) |
| | | ) |
| | | menuList.forEach((route) => { |
| | | if (route.name && !this.router.hasRoute(route.name)) { |
| | | const routeConfig = this.transformer.transform(route) |
| | | const removeRouteFn = this.router.addRoute(routeConfig) |
| | | removeRouteFns.push(removeRouteFn) |
| | | const routeConfig = this.transformer.transform(route) |
| | | const routePath = routeConfig?.path |
| | | |
| | | if (routePath && existingRoutePaths.has(routePath)) { |
| | | console.warn(`[RouteRegistry] 检测到重复路径,已跳过动态注册: ${routePath}`) |
| | | return |
| | | } |
| | | |
| | | if (route.name && this.router.hasRoute(route.name)) { |
| | | console.warn(`[RouteRegistry] 检测到重复名称,已跳过动态注册: ${route.name}`) |
| | | return |
| | | } |
| | | |
| | | const removeRouteFn = this.router.addRoute(routeConfig) |
| | | removeRouteFns.push(removeRouteFn) |
| | | if (routePath) { |
| | | existingRoutePaths.add(routePath) |
| | | } |
| | | }) |
| | | this.removeRouteFns = removeRouteFns |