Commit Graph

488 Commits

Author SHA1 Message Date
chengkai3 21f9839dd6 feat: [FL-166] 实现AI问答功能
- 后端实现:
  - 添加 ai_chat_conversations 和 ai_chat_messages 数据模型
  - 创建 AI 问答 API 路由(/api/v1/ai-chat)
  - 实现对话管理和消息发送服务
  - 集成 OpenAI API 进行对话交互
  - 支持流式对话历史和上下文管理

- 前端实现:
  - 创建 ChatGPT 风格的聊天界面(/admin/ai-chat)
  - 支持新建、选择、删除对话
  - 实现消息发送和实时显示
  - 使用 Ant Design 组件构建响应式 UI

- 系统参数配置:
  - ai_chat.openai_api_key: OpenAI API 密钥
  - ai_chat.model: 使用的 AI 模型(默认 gpt-3.5-turbo)
  - ai_chat.base_url: API 基础 URL(支持第三方兼容接口)

- 数据库迁移:
  - 002_add_ai_chat.sql: 创建对话和消息表
  - 003_add_ai_chat_params.sql: 添加系统参数默认配置

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 23:20:26 +08:00
chengkai3 b1df2d0b40 [feat]:[FL-164][高程数据管理页面一致性优化]
重构高程数据管理页面,与用户管理页面保持一致的UI规范和交互体验。

主要改动:
- 页面容器结构:使用admin-elevation-page-card类和flex布局
- 移动端适配:新增useMobileDetection hook,支持桌面表格/移动卡片双视图
- 筛选表单:桌面使用inline布局,移动使用vertical布局
- 关键词搜索:实现500ms防抖逻辑,优化用户体验
- 表格配置:添加tableLayout="fixed",动态计算scroll.y高度
- 分页管理:使用useState管理分页状态,筛选变更自动重置页码
- 操作列:提取"预览"为独立按钮,删除使用Popconfirm替代Modal.confirm
- 卡片视图:实现移动端无限滚动加载和专属卡片样式
- CSS样式:新增admin-elevation系列样式类,支持暗色主题

测试说明:
- 由于运行环境缺少node_modules依赖,无法执行构建测试
- 代码严格遵循users/page.tsx的已验证模式,结构一致
- 所有改动点均按需求文档实施,未引入新的API调用

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 23:17:09 +08:00
chengkai3 03758b9a9a feat:[FL-162][地闪密度统计页面一致性优化]
实现地闪密度统计页面与用户管理页面的风格、样式、交互完全一致:

1. 修复Card组件导入来源 - 从antd导入并使用类型转换
2. 修复页面容器结构 - 使用flex布局替代Space,添加pageCardRef
3. 添加移动端响应式支持 - 实现viewMode切换和卡片视图
4. 实现搜索防抖 - 分离input和search状态,500ms防抖
5. 筛选条件即时生效 - 移除Form提交,通过onChange即时触发
6. 添加表格动态高度计算 - 实现updateTableScrollY和resize监听
7. 完善表格布局配置 - 添加tableLayout="fixed"
8. 添加专用CSS样式 - 新增lightning-distribution相关样式类

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 23:13:19 +08:00
chengkai3 330260502d fix:[FL-221][登录页面暗黑主题背景色适配]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 22:44:44 +08:00
chengkai3 b32201711a fix:[FL-222][文件管理页标题栏暗黑主题背景对齐]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 19:04:55 +08:00
chengkai3 6a653a4960 fix:[FL-220][菜单禁用访问控制]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 18:40:29 +08:00
chengkai3 899d5316cf feat:[FL-211][高程管理扁平化为文件记录]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 18:03:27 +08:00
chengkai3 fac00c0536 fix:[FL-218][角色管理列表接口返回 500]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 16:13:47 +08:00
chengkai3 93b580649a fix:[FL-216][菜单管理页面暗黑主题适配]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 15:48:11 +08:00
chengkai3 0f62776cbd [feat]:[FL-214][fl-analysis 防雷计算页面UI交互重构]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 15:25:29 +08:00
chengkai3 57fbdbf25a [fix]:[FL-156][任务监控移动端无限滚动对齐]
Co-authored-by: multica-agent <github@multica.ai>
2026-06-20 15:10:03 +08:00
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