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.
 
 
 
 
 
 

7.4 KiB

路由同步系统优化总结

优化概述

根据您的需求,我们对路由同步系统进行了全面优化,主要解决了以下三个问题:

  1. 移除 frontend_backend_routes 表的 delete_at 字段
  2. 移除 frontend_routesroute_mappings 表的 delete_at 字段
  3. 优化路由映射逻辑,支持弹窗按钮的路由

详细优化内容

1. 数据库表结构优化

1.1 移除 delete_at 字段

影响表:

  • frontend_backend_routes
  • frontend_routes
  • route_mappings

优化原因:

  • frontend_backend_routes 表:更新时直接删除记录,不需要软删除
  • frontend_routes 表:同步时只增加,不删除,冗余数据由人工删除
  • route_mappings 表:同步时只增加,不删除,冗余数据由人工删除

实现方式:

// 更新模型定义,移除 BaseModel 继承
type FrontendBackendRoute struct {
    ID              uint      `gorm:"primarykey" json:"id"`
    CreatedAt       time.Time `json:"created_at"`
    UpdatedAt       time.Time `json:"updated_at"`
    // ... 其他字段
}

1.2 数据库迁移

创建了专门的迁移文件 remove_delete_at_fields.go,自动处理表结构更新:

func RemoveDeleteAtFields(db *gorm.DB, log *zap.Logger) error {
    // 移除三个表的 delete_at 字段
    removeDeleteAtFromFrontendBackendRoutes(db, log)
    removeDeleteAtFromFrontendRoutes(db, log)
    removeDeleteAtFromRouteMappings(db, log)
}

2. 前端路由映射优化

2.1 增强路由收集器

新增功能:

  • 自动识别页面内操作路由(弹窗、按钮等)
  • 支持用户管理和角色管理的操作路由

实现方式:

// 添加页面内操作路由
_addPageOperationRoutes() {
    this._addUserManagementOperations()
    this._addRoleManagementOperations()
}

// 用户管理操作路由
_addUserManagementOperations() {
    const operations = [
        { path: '/user-management/create', name: 'CreateUser', description: '新增用户' },
        { path: '/user-management/edit', name: 'EditUser', description: '编辑用户' },
        { path: '/user-management/delete', name: 'DeleteUser', description: '删除用户' },
        { path: '/user-management/assign-roles', name: 'AssignUserRoles', description: '分配用户角色' },
        // ... 更多操作
    ]
}

2.2 优化路由映射器

增强功能:

  • 支持弹窗操作的路由类型识别
  • 为不同操作类型生成对应的API映射
  • 按模块分组处理,避免重复同步

新增路由类型:

// 确定路由类型
_determineRouteType(route) {
    // 检查是否是弹窗操作
    if (path.includes('modal') || name.includes('modal')) return 'modal'
    if (path.includes('dialog') || name.includes('dialog')) return 'modal'
    if (path.includes('popup') || name.includes('popup')) return 'modal'
    
    // 检查是否是表单操作
    if (path.includes('form') || name.includes('form')) return 'form'
    // ... 其他类型
}

2.3 用户管理模块API映射

完整的CRUD操作映射:

'user-management': {
    basePath: '/api/users',
    operations: {
        // 列表页面相关
        list: { method: 'GET', path: '' },
        search: { method: 'GET', path: '' },
        filter: { method: 'GET', path: '' },
        
        // 弹窗操作相关
        create: { method: 'POST', path: '' },
        update: { method: 'PUT', path: '/:id' },
        delete: { method: 'DELETE', path: '/:id' },
        detail: { method: 'GET', path: '/:id' },
        
        // 角色分配相关
        assignRoles: { method: 'POST', path: '/:id/roles' },
        getRoles: { method: 'GET', path: '/roles' },
        
        // 状态管理
        enable: { method: 'PUT', path: '/:id/enable' },
        disable: { method: 'PUT', path: '/:id/disable' }
    }
}

3. 同步策略优化

3.1 按模块分组同步

优化前: 逐个同步每个路由映射 优化后: 按模块分组,批量同步

// 按模块分组处理,避免重复同步
const moduleGroups = this._groupMappingsByModule(routeMappings)

for (const [module, mappings] of Object.entries(moduleGroups)) {
    // 构建前台路由数据
    const frontendRouteData = this._buildFrontendRouteData(module, mappings)
    // 批量同步
}

3.2 智能路由数据构建

优化功能:

  • 自动去重相同的前端路由
  • 合并多个后端路由到同一个前端路由
  • 保持数据结构的完整性
_buildFrontendRouteData(module, mappings) {
    // 按前台路由分组
    const frontendRouteGroups = {}
    
    mappings.forEach(mapping => {
        const frontendRoute = mapping.frontend_route
        if (!frontendRouteGroups[frontendRoute]) {
            frontendRouteGroups[frontendRoute] = {
                path: frontendRoute,
                name: frontendRoute.split('/').pop() || 'default',
                component: 'Unknown',
                module: module,
                description: mapping.description,
                sort: 0,
                backend_routes: []
            }
        }
        
        frontendRouteGroups[frontendRoute].backend_routes.push({
            backend_route: mapping.backend_route,
            http_method: mapping.http_method,
            module: module,
            description: mapping.description
        })
    })
    
    return Object.values(frontendRouteGroups)
}

测试验证

测试脚本

创建了 test-route-sync-optimized.ps1 测试脚本,验证:

  1. 后端服务启动正常
  2. 前端应用启动正常
  3. 路由同步API测试通过
  4. 数据库表结构优化完成
  5. 前端路由收集功能正常

测试内容

  • 路由同步状态获取
  • 手动触发路由同步
  • 获取同步后的路由列表
  • 获取前后台路由关系
  • 数据库表结构检查

使用说明

同步策略

  1. 只增加,不删除:同步时只增加新记录,不删除旧记录
  2. 手动清理:冗余数据需要手动清理
  3. 按模块处理:避免重复同步,提高效率

弹窗操作支持

  • 自动识别用户管理页面的弹窗操作
  • 自动生成对应的API映射
  • 支持新增、编辑、删除、角色分配等操作

数据完整性

  • 保持前后台路由关系的完整性
  • 支持一对多的路由映射关系
  • 维护模块和权限分组信息

优化效果

性能提升

  1. 同步效率:按模块分组处理,减少API调用次数
  2. 数据一致性:避免软删除带来的数据不一致问题
  3. 维护成本:简化数据清理流程

功能增强

  1. 操作覆盖:完整支持用户管理的所有操作
  2. 路由识别:自动识别弹窗和按钮操作
  3. 映射准确:更精确的路由到API映射

数据质量

  1. 结构清晰:移除不必要的软删除字段
  2. 关系明确:前后台路由关系更加清晰
  3. 冗余可控:明确的数据清理策略

后续建议

  1. 定期清理:建议定期清理冗余的路由数据
  2. 监控同步:监控路由同步的成功率和错误情况
  3. 扩展支持:可以扩展到其他模块的路由映射
  4. 权限集成:与权限系统深度集成,支持动态权限控制

总结: 本次优化解决了您提出的三个核心问题,提升了路由同步系统的性能、功能和数据质量,为后续的功能扩展奠定了良好的基础。