import { ComponentLoader } from './ComponentLoader'
|
import { RouteValidator } from './RouteValidator'
|
import { RouteTransformer } from './RouteTransformer'
|
class RouteRegistry {
|
constructor(router) {
|
this.router = router
|
this.componentLoader = new ComponentLoader()
|
this.validator = new RouteValidator()
|
this.transformer = new RouteTransformer(this.componentLoader)
|
this.removeRouteFns = []
|
this.registered = false
|
}
|
/**
|
* 注册动态路由
|
*/
|
register(menuList) {
|
if (this.registered) {
|
console.warn('[RouteRegistry] 路由已注册,跳过重复注册')
|
return
|
}
|
const validationResult = this.validator.validate(menuList)
|
if (!validationResult.valid) {
|
throw new Error(`路由配置验证失败: ${validationResult.errors.join(', ')}`)
|
}
|
const removeRouteFns = []
|
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)
|
}
|
})
|
this.removeRouteFns = removeRouteFns
|
this.registered = true
|
}
|
/**
|
* 移除所有动态路由
|
*/
|
unregister() {
|
this.removeRouteFns.forEach((fn) => fn())
|
this.removeRouteFns = []
|
this.registered = false
|
}
|
/**
|
* 检查是否已注册
|
*/
|
isRegistered() {
|
return this.registered
|
}
|
/**
|
* 获取移除函数列表(用于 store 管理)
|
*/
|
getRemoveRouteFns() {
|
return this.removeRouteFns
|
}
|
/**
|
* 标记为已注册(用于错误处理场景,避免重复请求)
|
*/
|
markAsRegistered() {
|
this.registered = true
|
}
|
}
|
export { RouteRegistry }
|