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
256 lines
7.4 KiB
6 days ago
|
# 路由同步系统优化总结
|
||
|
|
||
|
## 优化概述
|
||
|
|
||
|
根据您的需求,我们对路由同步系统进行了全面优化,主要解决了以下三个问题:
|
||
|
|
||
|
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. **权限集成**:与权限系统深度集成,支持动态权限控制
|
||
|
|
||
|
---
|
||
|
|
||
|
**总结:** 本次优化解决了您提出的三个核心问题,提升了路由同步系统的性能、功能和数据质量,为后续的功能扩展奠定了良好的基础。
|