Browse Source

垃圾向日葵,无法打字,重新提交

master
hejl 15 hours ago
parent
commit
3757d24771
  1. 129
      gofaster/app/src/renderer/modules/route-sync/RouteSyncService.js
  2. 63
      gofaster/app/test-sync.js

129
gofaster/app/src/renderer/modules/route-sync/RouteSyncService.js

@ -64,24 +64,23 @@ export class RouteSyncService { @@ -64,24 +64,23 @@ export class RouteSyncService {
const results = {
success: true,
errors: [],
details: {}
details: {
frontend_routes: { success: false, count: 0 }
}
}
// 处理每个模块的API映射
for (const moduleMapping of directMappings.apiMappings) {
try {
const result = await this._syncModuleFromDirectMappings(moduleMapping, directMappings.routes)
results.details[moduleMapping.module] = result
if (!result.success) {
results.success = false
results.errors.push(...result.errors)
}
} catch (error) {
results.success = false
results.errors.push(`模块 "${moduleMapping.module}" 同步失败: ${error.message}`)
results.details[moduleMapping.module] = { success: false, error: error.message }
}
// 构建包含前后台路由关系的完整数据
console.log('🔄 开始同步路由数据(包含前后台路由关系)...')
const frontendRoutesResult = await this._syncFrontendRoutesWithRelations(
directMappings.routes,
directMappings.apiMappings,
directMappings.componentRelationships
)
results.details.frontend_routes = frontendRoutesResult
if (!frontendRoutesResult.success) {
results.success = false
results.errors.push(...frontendRoutesResult.errors)
}
return results
@ -287,6 +286,104 @@ export class RouteSyncService { @@ -287,6 +286,104 @@ export class RouteSyncService {
}
// 同步包含前后台路由关系的完整数据
async _syncFrontendRoutesWithRelations(routes, apiMappings, componentRelationships) {
try {
if (!routes || routes.length === 0) {
return { success: false, errors: ['没有导航菜单路由需要同步'], count: 0 }
}
// 创建路由ID映射表(用于快速查找)
const routeIdMap = {}
routes.forEach(route => {
routeIdMap[route.id] = route
})
// 创建组件关系映射表
const relationshipMap = {}
if (componentRelationships) {
componentRelationships.forEach(rel => {
if (!relationshipMap[rel.triggerSourceId]) {
relationshipMap[rel.triggerSourceId] = []
}
relationshipMap[rel.triggerSourceId].push(rel)
})
}
// 构建包含前后台路由关系的完整数据
const frontendRouteData = routes.map(route => {
const routeData = {
path: route.path,
name: route.name || route.component,
component: route.component,
module: route.module,
description: route.description || `${route.name || route.component}页面`,
sort: this._generateSort(route.module),
status: 1, // 启用状态
backend_routes: []
}
// 查找该路由相关的API映射
if (apiMappings && apiMappings.length > 0) {
apiMappings.forEach(apiMapping => {
// 为每个触发源查找对应的前端路由
apiMapping.triggerSources.forEach(triggerSource => {
const relationships = relationshipMap[triggerSource.id] || []
relationships.forEach(relationship => {
if (relationship.routeId === route.id) {
// 检查是否已存在相同的后端路由
const existingRoute = routeData.backend_routes.find(backendRoute =>
backendRoute.backend_route === apiMapping.path &&
backendRoute.http_method === apiMapping.method
)
if (!existingRoute) {
routeData.backend_routes.push({
backend_route: apiMapping.path,
http_method: apiMapping.method,
module: apiMapping.module,
description: apiMapping.apiMethodName || 'unknown',
is_default: relationship.relationshipType === 'self',
sort: this._generateSort(apiMapping.module),
status: 1
})
}
}
})
})
})
}
return routeData
})
// 发送到后端
const response = await this.axios.post('/api/frontend-routes/batch-sync', frontendRouteData)
return {
success: true,
data: response.data,
count: frontendRouteData.length
}
} catch (error) {
if (error.response) {
return {
success: false,
errors: [`HTTP ${error.response.status}: ${error.response.data?.message || error.message}`],
count: 0
}
} else {
return {
success: false,
errors: [`网络错误: ${error.message}`],
count: 0
}
}
}
}
// 获取同步状态
getSyncStatus() {
return {

63
gofaster/app/test-sync.js

@ -0,0 +1,63 @@ @@ -0,0 +1,63 @@
// 实际测试同步逻辑
import { RouteSyncService } from './src/renderer/modules/route-sync/RouteSyncService.js'
import directRouteMappings from './src/renderer/modules/route-sync/direct-route-mappings.js'
async function testRealSync() {
console.log('🧪 开始实际测试同步逻辑...')
try {
// 创建同步服务实例
const routeSyncService = new RouteSyncService('http://localhost:8080')
// 显示要同步的数据概览
console.log('📊 要同步的数据概览:')
console.log(` - 导航菜单路由: ${directRouteMappings.routes.length}`)
console.log(` - API映射: ${directRouteMappings.apiMappings.length}`)
console.log(` - 组件关系: ${directRouteMappings.componentRelationships.length}`)
// 显示路由详情
console.log('\n📋 路由详情:')
directRouteMappings.routes.forEach(route => {
console.log(` - ${route.path} (${route.component}) - ${route.module}`)
})
// 显示API映射详情
console.log('\n🔗 API映射详情:')
directRouteMappings.apiMappings.forEach(apiMapping => {
console.log(` - ${apiMapping.method} ${apiMapping.path} (${apiMapping.apiMethodName})`)
console.log(` 触发源: ${apiMapping.triggerSources.length}`)
})
// 执行同步
console.log('\n🔄 开始执行同步...')
const result = await routeSyncService.syncFromDirectMappings(directRouteMappings)
// 显示同步结果
console.log('\n📊 同步结果:')
console.log(` - 同步状态: ${result.success ? '✅ 成功' : '❌ 失败'}`)
if (result.success) {
console.log(` - 前端路由同步: ${result.details.frontend_routes.count}`)
console.log(' - 同步详情:', JSON.stringify(result.details, null, 2))
} else {
console.log(' - 错误信息:', result.errors)
}
return result
} catch (error) {
console.error('❌ 测试过程中发生错误:', error)
console.error('错误堆栈:', error.stack)
return { success: false, error: error.message }
}
}
// 运行测试
testRealSync().then(result => {
if (result.success) {
console.log('\n🎉 同步测试成功完成!')
} else {
console.log('\n💥 同步测试失败!')
}
process.exit(result.success ? 0 : 1)
})
Loading…
Cancel
Save