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 }