zhou zhou
5 天以前 aaf8a50511d77dbc209ca93bbba308c21179a8bc
rsf-design/src/router/core/RouteRegistry.js
@@ -1,10 +1,10 @@
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 = []
@@ -23,11 +23,27 @@
      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