You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

89 lines
2.5 KiB

// 路由收集器 - 收集前端路由信息
import router from '@/router'
import { RouteUtils } from './RouteUtils.js'
// 加载生成的路由映射文件
const generatedMapping = RouteUtils.loadGeneratedMapping()
export class RouteCollector {
constructor() {
this.routes = []
}
// 收集所有路由信息
collectRoutes() {
this.routes = []
// 如果存在生成的路由映射,使用它
if (generatedMapping && generatedMapping.mainRoutes) {
console.log('🔧 使用生成的路由映射文件')
this._collectFromGeneratedMapping()
} else {
console.log('🔧 生成的路由映射文件不存在,无法收集路由')
console.warn('⚠ 请确保 route-mapping-plugin 已正确生成路由映射文件')
}
// 检查所有路由的模块信息
console.log('🔍 检查收集到的路由模块信息:')
this.routes.forEach((route, index) => {
if (!route.module) {
console.error(`❌ 路由 ${index} 缺少模块信息:`, route)
// 尝试重新提取模块信息
route.module = this._extractModuleFromPath(route.path)
console.log(`🔧 重新提取模块信息: ${route.path} -> ${route.module}`)
}
})
return this.routes
}
// 从生成的路由映射收集
_collectFromGeneratedMapping() {
if (!generatedMapping || !generatedMapping.mainRoutes) {
console.warn('⚠ 生成的路由映射文件无效,无法收集路由')
return
}
console.log('📋 从生成的路由映射收集主入口路由:')
generatedMapping.mainRoutes.forEach(route => {
this.routes.push({
path: route.path,
name: route.name,
module: route.module,
description: route.description,
type: route.type
})
console.log(`✅ 添加主入口路由: ${route.path} -> 模块: ${route.module}`)
})
}
// 从路径中提取模块名
_extractModuleFromPath(path) {
return RouteUtils.extractModuleFromPath(path)
}
// 获取菜单路由
getMenuRoutes() {
return this.routes.filter(route => route.name && route.name !== '')
}
// 获取操作路由
getOperationRoutes() {
return this.routes.filter(route => route.type && route.type !== 'list')
}
// 按模块分组路由
getRoutesByModule() {
const grouped = {}
this.routes.forEach(route => {
const module = route.module
if (!grouped[module]) {
grouped[module] = []
}
grouped[module].push(route)
})
return grouped
}
}