Commit Graph

477 Commits

Author SHA1 Message Date
chengkai3 7022d7f266 [fix]:[FL-213][修复高程文件记录服务导入失败]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 14:34:38 +08:00
chengkai3 bf8b77af80 [fix]:[FL-152][对齐角色分页交互细节]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 12:10:57 +08:00
chengkai3 58d6efe6fe [fix]:[FL-212][修复高程文件记录页构建类型错误]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 12:00:23 +08:00
chengkai3 faa47e26cd [fix]:[FL-153][系统参数状态交互对齐]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 11:20:24 +08:00
chengkai3 f8eef853a7 [fix]:[FL-151][补齐菜单管理页一致性细节]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 11:15:44 +08:00
chengkai3 260e6598ef [fix]:[FL-160][对齐系统日志筛选交互]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 11:12:47 +08:00
chengkai3 3d8013da57 [fix]:[FL-156][任务监控页面分页细节对齐]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 11:11:26 +08:00
chengkai3 64dbe4567e [fix]:[FL-157][对齐Worker移动卡片间距]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 11:08:36 +08:00
chengkai3 86870f4610 feat: 高程管理重构 - 从数据集中心到文件中心
## 重构目标

将高程数据管理从"数据集中心"模式重构为"文件中心"模式,去掉 ElevationDataset 概念,
扁平化为 ElevationFileRecord,每条记录对应一个高程文件。

## 主要变更

### 数据库层
- 新增 `elevation_file_record` 表,合并原 dataset 核心字段
- 更新 `elevation_apply_job` 和 `elevation_data_import_job`,添加 `file_record_id` 字段
- 创建数据迁移脚本 `001_add_elevation_file_record.sql`
- 保留旧表用于向后兼容

### 后端 API
- 新增 `/api/v1/elevation/records` 路由组(推荐使用)
  - GET /records - 文件记录列表
  - POST /records - 上传文件并创建记录(上传即创建)
  - GET /records/{id} - 获取记录详情
  - PATCH /records/{id} - 更新记录
  - DELETE /records/{id} - 删除记录
  - POST /records/{id}/analyze - 触发分析
  - POST /records/{id}/terrain/build - 生成地形瓦片
  - GET /records/{id}/preview - 预览数据
- 保留 `/api/v1/elevation/datasets` 路由用于向后兼容
- Apply API 支持 `file_record_id` 和 `dataset_id` 双 ID

### 后端代码
- 新增 `elevation_file_record_service.py` (601 行),包含完整 CRUD 和操作逻辑
- 新增模型 `ElevationFileRecord`
- 新增 Schema:FileRecordSummary, CreateRequest, UpdateRequest 等
- 新增 Celery 任务:
  - `analyze_elevation_file_record_job`
  - `build_elevation_file_record_terrain_job`
- 新增执行函数:
  - `execute_file_record_analysis_job`
  - `execute_file_record_terrain_build_job`
- 更新模型字段,支持双 ID 关联

### 前端
- 新增简化页面 `/admin/elevation-records` (542 行)
- 从原 1760 行简化到 542 行
- 上传即创建,无需先建数据集
- 每行直接对应一个文件
- 操作更直观

### 文档
- 新增 `REFACTOR_SUMMARY.md` 完整重构说明
- 新增 `api/migrations/README.md` 迁移指南

## 用户体验改进

旧流程(4步):
1. 创建数据集(填编码+名称)
2. 导入文件到数据集
3. 分析数据集
4. 预览/地形/回填

新流程(2步):
1. 上传文件(填来源+分辨率)→ 自动创建+分析
2. 预览/地形/回填

## 向后兼容

- 保留旧表和旧 API,新旧系统可并存
- Apply Job 同时支持新旧 ID
- 提供平滑迁移路径

## 技术指标

- 代码简化:前端从 1760 行 → 542 行(-69%)
- 概念简化:去除"数据集"中间层
- API 数量:新增 8 个文件记录端点

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 09:01:16 +08:00
chengkai3 09835543a2 [feat]:[FL-159][杆塔模型管理页面一致性优化]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 08:38:07 +08:00
chengkai3 495c73cc9e [feat]:[FL-160][系统日志页面一致性优化]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 08:17:14 +08:00
chengkai3 c9b2b332fd [fix]:[FL-152][对齐角色管理弹窗与分页细节]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 08:12:35 +08:00
chengkai3 b2dd07d8e8 feat:[FL-158][ATP模型管理页面一致性优化]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 08:04:37 +08:00
chengkai3 90309ee0e4 [feat]:[FL-156][任务监控页面一致性优化]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 07:59:23 +08:00
chengkai3 7e4a1ff5e4 [feat]:[FL-157][Worker监控页面一致性优化]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 07:53:19 +08:00
chengkai3 21b23c1cce fix:[FL-42][统一系统日志错误反馈]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 07:30:40 +08:00
chengkai3 83956f2587 [fix]:[FL-155][菜单管理页面最后3项细节优化]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 07:15:48 +08:00
chengkai3 a9a2d32fd5 [feat]:[FL-154][系统消息页面一致性优化]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 07:00:47 +08:00
chengkai3 012b62fab9 [feat]:[FL-153][系统参数管理页面一致性优化]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 06:50:53 +08:00
chengkai3 6989775abe [fix]:[FL-151][菜单管理页React Query架构对齐]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 04:13:56 +08:00
chengkai3 06c23e5ff0 [fix]:[FL-152][补齐角色管理页面一致性细节]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 02:17:21 +08:00
chengkai3 2c1a4cd361 [feat]:[FL-152][角色管理页面一致性优化]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 01:04:52 +08:00
chengkai3 763a7814e1 [fix]:[FL-151][菜单管理页面一致性优化]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 00:52:07 +08:00
chengkai3 fcc8dfc01e feat:[FL-122][杆塔模型管理页面对齐用户管理页面风格样式交互]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 23:27:00 +08:00
chengkai3 4834a567a8 [feat]:[FL-120][角色管理页面对齐用户管理分页交互]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 23:26:20 +08:00
chengkai3 455b7c54bb [feat]:[FL-118][菜单管理页对齐用户管理页规范]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 23:18:45 +08:00
chengkai3 22ef1f0055 [fix]:[FL-125][系统参数管理页面继续对齐用户管理页面交互与移动端样式]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 23:13:00 +08:00
chengkai3 0a776c1cf8 fix:[FL-119][菜单管理状态切换接口统一]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 23:06:15 +08:00
chengkai3 8084561d10 [fix]:[FL-210][修复系统消息菜单类型错误]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 22:41:19 +08:00
chengkai3 1309251017 [fix]:[FL-89][杆塔模型管理页面:统一初始化加载状态展示]
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:15:32 +08:00
chengkai3 cb87f3832b [feat]:[FL-108][系统日志页面:实现关键词防抖搜索,对齐用户管理页面交互]
实现系统日志页面的防抖搜索功能,提升交互体验与用户管理页面保持一致

改动内容:
- 添加 actionDebounceTimeoutRef 和 userIdDebounceTimeoutRef 用于防抖管理
- 新增 handleActionChange 和 handleUserIdChange 处理器,实现500ms防抖逻辑
- 输入框变化时自动重置 offset、cardViewPage 和 allLoadedLogs
- 添加 useEffect 清理函数,组件卸载时清理 timeout
- 更新表格和卡片视图的 Input onChange 使用新的防抖处理器
- 保留"查询"和"重置筛选"按钮作为快捷操作

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:14:53 +08:00
chengkai3 7772ac163c [feat]:[FL-99][ATP模型管理页面搜索表单布局与交互优化]
- 实现实时搜索(debounce 500ms),移除搜索和重置按钮
- 添加 keywordDebounceTimeoutRef 管理防抖定时器
- 添加 handleKeywordChange 处理输入变化并触发防抖
- 添加 cleanup effect 防止内存泄漏
- 与用户管理页面交互模式保持一致

Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:13:34 +08:00
chengkai3 58bb284a09 [feat]:[FL-98][杆塔模型管理页面:实现卡片视图的无限滚动加载]
- 添加 Spin 组件导入用于加载提示
- 新增状态变量: cardViewPage, allLoadedModels, isLoadingMore
- 添加 pageCardRef 引用到主 Card 组件
- 实现累积加载逻辑: 监听数据变化并累积已加载模型
- 实现滚动监听: 滚动到底部时自动加载下一页
- 卡片视图使用 allLoadedModels 替代 pagedItems
- 添加加载状态指示器: 加载更多时显示 Spin,全部加载完成时显示提示
- 移除卡片视图下的 Pagination 组件,仅在列表视图显示
- 添加筛选条件变化时重置卡片视图状态的逻辑

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:13:10 +08:00
chengkai3 e60b303ba9 [feat]:[FL-93][菜单管理页面添加分页状态管理]
- 新增 pagination 状态管理当前页和每页条数
- loadMenus 函数添加 limit 和 offset 参数到 API 请求
- 更新表格分页配置使用状态值并添加 onChange 回调
- 筛选条件变化时重置分页到第一页

Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:12:43 +08:00
chengkai3 2b1aef77ab feat:[FL-95][角色管理页面对齐用户管理页面风格样式交互]
主要改动:
1. 数据管理:迁移到 React Query(useQuery/useMutation),替换手动的 useState + fetchWithAuth
2. 错误和成功提示:添加 success 状态,useToastFeedback 同时处理成功和错误消息
3. 卡片视图:实现无限滚动加载,替换分页模式
4. 表单布局:卡片视图时使用 vertical 布局,去掉"关键词"标签和"搜索"按钮
5. 关键词搜索:实现 500ms 防抖自动搜索,无需手动点击
6. 卡片样式:添加 admin-roles-role-card 和 admin-roles-role-card-field CSS 类
7. Modal 标题:包含角色名称和编码,如"编辑角色:运营管理员(admin.operator)"
8. 按钮样式:与用户管理页面保持一致

技术细节:
- 使用 @tanstack/react-query 管理数据状态和缓存
- 卡片视图累积已加载数据,滚动到底部自动加载更多
- 防抖搜索避免频繁请求
- 统一的成功/错误反馈机制

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:12:15 +08:00
chengkai3 1d180f5040 [fix]:[FL-101][系统参数管理页面对齐用户管理页面风格样式交互]
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:11:52 +08:00
chengkai3 ee62b12393 feat:[FL-94][ATP模型管理页面添加Dropdown组件支持]
- 添加 Dropdown、MenuProps 和 MoreOutlined 导入
- 更新操作列宽度从 200px 到 240px
- 引入 rowBusy 状态管理
- 添加空的 moreMenuItems 菜单项数组(预留扩展)
- 操作列和卡片视图同步添加条件渲染的 Dropdown 按钮
- 对齐用户管理页面的交互模式

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:10:08 +08:00
chengkai3 f3843df6c5 [feat]:[FL-82][菜单管理页面添加防抖定时器清理逻辑]
在组件卸载时清理防抖定时器,防止内存泄漏。

改动说明:
- 添加 useEffect 清理函数,在组件卸载时清除 keywordDebounceTimeoutRef

备注:
菜单管理页面的防抖搜索功能已在之前的提交中实现(FL-85),本次补充缺失的清理逻辑,使其与用户管理页面完全一致。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:09:08 +08:00
chengkai3 c16b1d9fc1 [feat]:[FL-85][菜单管理页面卡片视图添加无限滚动加载功能]
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:07:17 +08:00
chengkai3 810674b389 fix:[FL-87][杆塔模型管理页面:统一未授权页面展示样式]
将杆塔模型管理页面的未授权和未登录展示从 Ant Design Card 组件改为语义化 HTML 结构,与用户管理页面保持一致。

- 替换 Card/Space/Button/Typography 组件为 <main> 容器和原生 HTML 元素
- 使用与用户管理页面完全相同的 CSS 类和布局结构
- 保持居中布局和响应式效果一致
- 提升页面状态展示的用户体验统一性

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:06:54 +08:00
chengkai3 18eb053ff1 fix:[FL-81][菜单管理页面卡片视图搜索表单布局不符合用户管理页面规范]
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:06:20 +08:00
chengkai3 c48a1f9bcb fix:[FL-83][杆塔模型管理页面:统一页面容器结构]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:06:07 +08:00
chengkai3 81e56893da fix:[FL-84][ATP模型管理页面缺少Modal组件导入]
在 web/src/app/admin/atp-models/page.tsx 的 antd 导入中添加 Modal 组件。

变更:
- 在第13行添加 Modal 导入,保持与 users/page.tsx 一致的导入风格

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:05:40 +08:00
chengkai3 aeabdab275 [fix]:[FL-86][ATP模型管理页面缺少Empty组件导入]
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:05:05 +08:00
chengkai3 3a03cf54ed fix:[FL-88][菜单管理页面卡片删除按钮引用未定义函数导致运行时错误]
- 修复删除按钮 onClick 引用未定义的 requestDeleteMenu 函数
- 改为使用 Modal.confirm 进行二次确认,与用户管理页面保持一致
- 移除 loading 属性,确认对话框内的按钮会显示 loading
- 确认后调用正确的 removeMenu 函数

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 17:03:55 +08:00
chengkai3 7614f134b5 feat:[FL-70][ATP模型管理页面:添加移动端响应式支持(卡片视图)]
- 引入useMobileDetection hook检测移动设备
- 实现卡片布局,包含模型名称、编码、业务维度、版本信息和操作按钮
- 添加视图切换逻辑,移动端自动使用卡片视图
- 新增CSS样式支持卡片视图和暗色模式
- 与用户管理页面保持一致的移动端体验

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 16:45:51 +08:00
chengkai3 c4b2794119 fix:[FL-66][杆塔模型管理页面:表格滚动高度计算逻辑不一致]
对齐杆塔模型管理页面的表格滚动高度计算逻辑,使其与用户管理页面保持一致。

主要改动:
1. 重命名常量:TOWER_MODEL_VIEWPORT_BOTTOM_GAP → TOWER_MODEL_VIEWPORT_GAP
2. 新增常量:TOWER_MODEL_FALLBACK_RESERVE (220)
3. 移除常量:TOWER_MODEL_MAX_GROW_STEP(不再需要)
4. 重构 updateTableScrollY 函数,采用用户管理页面的精确计算逻辑:
   - 基于 anchor 元素的 top 位置计算
   - 考虑 table wrapper 和 table body 的高度差
   - 使用 FALLBACK_RESERVE 和 VIEWPORT_GAP 进行精确计算
5. 将 useLayoutEffect 改为 useEffect,并使用 requestAnimationFrame
6. 移除对 paginationRef 的依赖,计算逻辑不再依赖分页元素
7. 清理未使用的 useLayoutEffect import

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 16:45:19 +08:00
chengkai3 7814318d13 fix:[FL-40][系统参数管理页面Card样式属性配置不规范]
移除系统参数管理页面 Card 组件的内联 style={{ height: '100%' }} 配置,
使其与用户管理页面保持一致的配置规范。

- 移除 Card 组件的 style 属性
- 保持组件配置简洁性
- 确保布局行为与用户管理页面一致

Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 16:44:39 +08:00
chengkai3 31e701d3c7 [fix]:[FL-62][杆塔模型管理页面:空状态提示文案不一致]
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 16:44:11 +08:00
chengkai3 4fb7846ee2 [feat]:[FL-64][系统日志页面:添加移动端响应式卡片视图]
- 导入 useMobileDetection hook 进行设备检测
- 添加 viewMode 状态,根据设备自动切换表格/卡片视图
- 实现 renderLogCard 函数,渲染日志卡片组件
- 添加卡片视图的无限滚动加载支持
- 实现响应式筛选表单(移动端纵向,桌面端横向)
- 在 globals.css 添加卡片视图样式和暗色主题支持
- 修复 system-messages 页面的 git merge 冲突

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-19 16:43:36 +08:00