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.

256 lines
7.4 KiB

# 路由同步系统优化总结
## 优化概述
根据您的需求,我们对路由同步系统进行了全面优化,主要解决了以下三个问题:
1. **移除 `frontend_backend_routes` 表的 `delete_at` 字段**
2. **移除 `frontend_routes` 和 `route_mappings` 表的 `delete_at` 字段**
3. **优化路由映射逻辑,支持弹窗按钮的路由**
## 详细优化内容
### 1. 数据库表结构优化
#### 1.1 移除 `delete_at` 字段
**影响表:**
- `frontend_backend_routes`
- `frontend_routes`
- `route_mappings`
**优化原因:**
- `frontend_backend_routes` 表:更新时直接删除记录,不需要软删除
- `frontend_routes` 表:同步时只增加,不删除,冗余数据由人工删除
- `route_mappings` 表:同步时只增加,不删除,冗余数据由人工删除
**实现方式:**
```go
// 更新模型定义,移除 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`,自动处理表结构更新:
```go
func RemoveDeleteAtFields(db *gorm.DB, log *zap.Logger) error {
// 移除三个表的 delete_at 字段
removeDeleteAtFromFrontendBackendRoutes(db, log)
removeDeleteAtFromFrontendRoutes(db, log)
removeDeleteAtFromRouteMappings(db, log)
}
```
### 2. 前端路由映射优化
#### 2.1 增强路由收集器
**新增功能:**
- 自动识别页面内操作路由(弹窗、按钮等)
- 支持用户管理和角色管理的操作路由
**实现方式:**
```javascript
// 添加页面内操作路由
_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映射
- 按模块分组处理,避免重复同步
**新增路由类型:**
```javascript
// 确定路由类型
_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操作映射:**
```javascript
'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 按模块分组同步
**优化前:** 逐个同步每个路由映射
**优化后:** 按模块分组,批量同步
```javascript
// 按模块分组处理,避免重复同步
const moduleGroups = this._groupMappingsByModule(routeMappings)
for (const [module, mappings] of Object.entries(moduleGroups)) {
// 构建前台路由数据
const frontendRouteData = this._buildFrontendRouteData(module, mappings)
// 批量同步
}
```
#### 3.2 智能路由数据构建
**优化功能:**
- 自动去重相同的前端路由
- 合并多个后端路由到同一个前端路由
- 保持数据结构的完整性
```javascript
_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. **权限集成**:与权限系统深度集成,支持动态权限控制
---
**总结:** 本次优化解决了您提出的三个核心问题,提升了路由同步系统的性能、功能和数据质量,为后续的功能扩展奠定了良好的基础。