2026-05-20-14-19-23 逆向分割结果流程调整
This commit is contained in:
79
工程分析/实现方案-2026-05-20-14-19-23.md
Normal file
79
工程分析/实现方案-2026-05-20-14-19-23.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# 实现方案:逆向分割结果单结果化与入口统一
|
||||
|
||||
实现方案文档路径:`工程分析/实现方案-2026-05-20-14-19-23.md`
|
||||
|
||||
## 修改目标
|
||||
|
||||
调整项目库与逆向工作区的逆向分割结果保存、展示、读取和导出交互,使结果只保留一个、命名统一、入口集中、退出有保存提醒。
|
||||
|
||||
## 涉及路径
|
||||
|
||||
- `WebSite/src/App.tsx`
|
||||
- `WebSite/src/components/ProjectLibrary.tsx`
|
||||
- `WebSite/src/components/ReverseWorkspace.tsx`
|
||||
- `WebSite/src/types.ts`
|
||||
- `WebSite/src/lib/api.ts`
|
||||
- `WebSite/server.ts`
|
||||
- `工程分析/需求分析-2026-05-20-14-19-23.md`
|
||||
- `工程分析/实现方案-2026-05-20-14-19-23.md`
|
||||
- `工程分析/测试方案-2026-05-20-14-19-23.md`
|
||||
- `工程分析/经验记录.md`
|
||||
|
||||
## 技术路线
|
||||
|
||||
1. 后端保存分割结果接口改为覆盖保存,只保留最新一条记录。
|
||||
2. 项目归一化时保留最新一条 `segmentationResults`,兼容旧状态中已有多条记录。
|
||||
3. 扩展 `SegmentationResult` 存储必要的切片范围、当前映射切片、显示/融合配置等上下文,用于重新进入工作区恢复。
|
||||
4. 逆向工作区加载项目时读取最新保存结果,恢复位姿、构件样式、分割范围和映射切片。
|
||||
5. `App.tsx` 接入工作区离开保护:离开逆向工作区时调用工作区注册的保存确认逻辑。
|
||||
6. 项目库页签改名为“逆向分割结果”,内容改为两张视图预览卡片和右侧导出面板。
|
||||
7. 顶部导出文案统一改为“导出项目及结果”,并将保存按钮移动到旁边。
|
||||
8. 删除映射视图标题旁边的 `NII`、`NII.GZ` 小下载按钮。
|
||||
9. 保存成功后显示顶部悬浮提示并渐隐消失。
|
||||
|
||||
## 执行步骤
|
||||
|
||||
- 阅读现有类型、API、后端保存接口、项目库和逆向工作区组件结构。
|
||||
- 更新类型定义与后端归一化/保存逻辑。
|
||||
- 更新 API payload 和前端保存调用。
|
||||
- 更新项目库 UI 与导出按钮文案。
|
||||
- 更新逆向工作区顶部操作区和映射视图标题区。
|
||||
- 接入退出保存确认和进入工作区结果恢复。
|
||||
- 运行类型/构建检查、服务部署验证。
|
||||
|
||||
## 兼容性与回滚方案
|
||||
|
||||
- 后端归一化兼容旧的多条 `segmentationResults`,只取最后一条作为当前结果。
|
||||
- 若保存上下文字段缺失,前端继续使用默认位姿、默认切片范围和默认显示配置。
|
||||
- 若导出按钮菜单异常,可继续调用现有 `/api/projects/:projectId/export-bundle` 后端接口。
|
||||
|
||||
## 预计文件变更
|
||||
|
||||
程序文件:
|
||||
|
||||
- `WebSite/src/App.tsx`
|
||||
- `WebSite/src/components/ProjectLibrary.tsx`
|
||||
- `WebSite/src/components/ReverseWorkspace.tsx`
|
||||
- `WebSite/src/types.ts`
|
||||
- `WebSite/src/lib/api.ts`
|
||||
- `WebSite/server.ts`
|
||||
|
||||
工程分析:
|
||||
|
||||
- 本轮三份分析文档。
|
||||
- `工程分析/经验记录.md`。
|
||||
|
||||
## 提交与部署策略
|
||||
|
||||
- 暂存本轮程序改动与工程分析文档。
|
||||
- 避免提交软著材料、运行态导出文件、旧历史文档删除状态。
|
||||
- commit message 包含 `2026-05-20-14-19-23`。
|
||||
- 构建通过后重启 `tmux` 会话 `revoxelseg-dicom` 并验证服务。
|
||||
|
||||
## 实际实现记录
|
||||
|
||||
- 后端 `segmentationResults` 归一化改为只保留最新一条,并扩展保存切片、显示、边界与切割状态字段。
|
||||
- 导出接口默认使用最新保存结果的位姿、构件样式和类别范围。
|
||||
- 逆向工作区进入时恢复最新保存结果,退出时注册保存确认守卫。
|
||||
- 项目库“逆向分割结果”改为两张预览图加右侧统一导出面板。
|
||||
- 顶部保存按钮迁移到导出按钮旁,并加入保存成功悬浮渐隐提示。
|
||||
58
工程分析/测试方案-2026-05-20-14-19-23.md
Normal file
58
工程分析/测试方案-2026-05-20-14-19-23.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# 测试方案:逆向分割结果保存与导出 UI 验证
|
||||
|
||||
测试方案文档路径:`工程分析/测试方案-2026-05-20-14-19-23.md`
|
||||
|
||||
## 静态检查
|
||||
|
||||
- 全局搜索确认“导出全部 NII.GZ”文案已替换为“导出项目及结果”。
|
||||
- 全局搜索确认项目库页签“分割结果”改为“逆向分割结果”。
|
||||
- 检查“逆向分割映射视图”标题旁不再存在 `NII`、`NII.GZ` 小下载按钮。
|
||||
- 检查保存接口后端只保留一条结果。
|
||||
|
||||
## 构建检查
|
||||
|
||||
- 在 `WebSite/` 执行 `npm run build`。
|
||||
|
||||
## 关键业务场景验证
|
||||
|
||||
- 进入项目库,确认“逆向分割结果”页签存在。
|
||||
- 在逆向工作区顶部确认“保存至项目库”与“导出项目及结果”并列。
|
||||
- 点击保存后,确认顶部出现“已保存至项目库的分割结果区域”悬浮提示并自动消失。
|
||||
- 从逆向工作区切换到其他模块时,确认出现是否保存当前结果的弹窗。
|
||||
- 重新进入逆向工作区,确认读取项目库最新逆向分割结果的位姿、构件样式、切片范围等上下文。
|
||||
- 项目库“逆向分割结果”区域仅展示融合视角和映射视图两张结果预览图,并有导出按钮。
|
||||
|
||||
## 医学影像数据相关边界验证
|
||||
|
||||
- 导出包仍使用现有后端导出能力,位姿和构件样式来自最新保存结果或当前工作区结果。
|
||||
- 不改变 DICOM/STL 原始数据。
|
||||
- 不提交运行态导出文件。
|
||||
|
||||
## 部署验证
|
||||
|
||||
- 验证 `http://127.0.0.1:4000/api/health`。
|
||||
- 验证 `http://127.0.0.1:4000/` 返回 200。
|
||||
|
||||
## Git/Gitea 备份验证
|
||||
|
||||
- commit message 包含 `2026-05-20-14-19-23`。
|
||||
- 推送 Gitea 成功后记录 commit。
|
||||
- 确认未暂存软著文档、运行态导出文件和历史删除状态。
|
||||
|
||||
## 风险与回归关注点
|
||||
|
||||
- 覆盖保存会改变旧多条结果历史展示方式,需确认项目库只保留当前结果。
|
||||
- 退出弹窗若在保存失败时仍切换页面,可能丢状态,需处理失败阻断。
|
||||
- 恢复保存结果时需防止不完整旧数据造成 NaN 或空样式。
|
||||
|
||||
## 实际执行记录
|
||||
|
||||
- 已执行 `rg` 静态搜索,确认 `导出全部 NII.GZ` 文案已替换为 `导出项目及结果`。
|
||||
- 已执行 `rg` 静态搜索,确认项目库页签使用 `逆向分割结果`。
|
||||
- 已删除逆向工作区映射视图标题旁的 `NII`、`NII.GZ` 小下载按钮入口。
|
||||
- 已执行 `npm run lint`,结果通过。
|
||||
- 已执行 `npm run build`,结果通过;仅保留 Vite 大 chunk 体积提示。
|
||||
- 已重启 `tmux` 会话 `revoxelseg-dicom`,服务监听 `http://0.0.0.0:4000/`。
|
||||
- 已验证 `http://127.0.0.1:4000/api/health` 返回 `ok: true`。
|
||||
- 已验证 `http://127.0.0.1:4000/` 返回 HTTP 200。
|
||||
- 已验证默认项目接口中 `segmentationResults` 数量为 1,最新结果名称为 `逆向分割结果`。
|
||||
18
工程分析/经验记录.md
18
工程分析/经验记录.md
@@ -1243,3 +1243,21 @@ C. 解决问题方案
|
||||
D. 后续如何避免问题
|
||||
|
||||
软著截图默认采用完整页面截图;只有用户明确要求“局部图”“放大细节图”时才裁剪。若同一完整页面用于多个章节,校验 Word 时应统计正文图片位置数量,而不能只看 `word/media` 文件数,因为 Word 会复用相同图片二进制。
|
||||
|
||||
## 2026-05-20-14-19-23 逆向分割结果单结果化需要前后端同时收口
|
||||
|
||||
A. 具体问题
|
||||
|
||||
用户要求项目库“分割结果”改为“逆向分割结果”,并且只保留一个当前结果,同时逆向工作区退出时询问是否保存、再次进入时读取项目库结果。如果只改前端展示,后端仍保存多条记录,导出和重新进入工作区会继续使用不一致的状态。
|
||||
|
||||
B. 产生问题原因
|
||||
|
||||
原有设计把 `segmentationResults` 作为历史列表保存,前端项目库按列表展示,后端导出接口默认使用当前请求参数或项目样式。新的业务语义改成项目级唯一当前结果,涉及保存接口、状态归一化、导出默认参数、工作区加载恢复和视图切换守卫多个链路。
|
||||
|
||||
C. 解决问题方案
|
||||
|
||||
后端归一化和保存接口均改为只保留最新一条逆向分割结果,并把位姿、构件样式、切片范围、映射切片和显示状态一起保存;导出接口默认读取最新保存结果。前端项目库改为两张结果预览图和统一导出面板;逆向工作区顶部集中保存与导出按钮,保存后显示渐隐提示;主应用视图切换时调用工作区离开守卫,保存失败时阻断退出。
|
||||
|
||||
D. 后续如何避免问题
|
||||
|
||||
凡是把“历史记录”改为“当前唯一状态”的需求,都要同步检查数据模型、归一化逻辑、保存接口、列表 UI、导出默认参数和重新进入页面的恢复逻辑。提交前用 `rg` 搜索旧文案和旧入口,避免残留重复下载按钮或旧命名造成用户误解。
|
||||
|
||||
67
工程分析/需求分析-2026-05-20-14-19-23.md
Normal file
67
工程分析/需求分析-2026-05-20-14-19-23.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# 需求分析:逆向分割结果保存、展示与导出入口调整
|
||||
|
||||
开始时间:`2026-05-20-14-19-23`
|
||||
|
||||
## 原始需求摘要
|
||||
|
||||
用户要求修改程序:
|
||||
|
||||
1. 项目库中“分割结果”改名为“逆向分割结果”,该区域只显示“影像与模型融合视角”和“逆向分割映射视图”两张图;右侧也提供“导出全部 NII.GZ”同等功能按钮。
|
||||
2. 逆向工作区中“保存至项目库”按钮移动到顶部“导出全部 NII.GZ”按钮旁边,按钮样式相近。
|
||||
3. 项目库分割结果只保留一个;从逆向工作区退出时弹窗询问是否保存当前结果;每次进入逆向工作区读取项目库中“逆向分割结果”的结果。
|
||||
4. 删除“逆向分割映射视图”旁边的 `NII`、`NII.GZ` 下载按钮。
|
||||
5. 全部“导出全部 NII.GZ”文案改为“导出项目及结果”。
|
||||
6. 点击保存至项目库后,在上方悬浮显示“已保存至项目库的分割结果区域”,并渐隐消失。
|
||||
|
||||
## 业务目标
|
||||
|
||||
- 将“逆向分割结果”从多条历史记录改为项目级单一当前结果,便于用户明确当前项目最终分割状态。
|
||||
- 统一导出入口,避免右侧映射视图附近存在重复的 NII/NII.GZ 小按钮。
|
||||
- 在项目库中以两张关键视图预览保存状态,强化“融合视角 + 映射视图”的复核语义。
|
||||
- 保证工作区退出和重新进入时,用户的位姿、构件样式、切片范围等关键上下文能够延续。
|
||||
|
||||
## 输入与输出
|
||||
|
||||
输入:
|
||||
|
||||
- `WebSite/src/components/ProjectLibrary.tsx`
|
||||
- `WebSite/src/components/ReverseWorkspace.tsx`
|
||||
- `WebSite/src/App.tsx`
|
||||
- `WebSite/src/types.ts`
|
||||
- `WebSite/src/lib/api.ts`
|
||||
- `WebSite/server.ts`
|
||||
|
||||
输出:
|
||||
|
||||
- 项目库页签和内容改名为“逆向分割结果”。
|
||||
- 逆向工作区顶部新增/迁移“保存至项目库”按钮。
|
||||
- 删除映射视图标题旁边的 `NII`、`NII.GZ` 下载按钮。
|
||||
- 导出按钮文案统一为“导出项目及结果”。
|
||||
- 保存结果只保留单条,并支持退出弹窗保存与进入工作区读取。
|
||||
- 保存后显示顶部悬浮渐隐提示。
|
||||
|
||||
## 影响范围
|
||||
|
||||
- 前端主框架、项目库和逆向工作区交互。
|
||||
- 后端项目状态归一化与分割结果保存接口。
|
||||
- 项目导出包入口复用现有后端导出逻辑。
|
||||
|
||||
## 关键约束
|
||||
|
||||
- 保留现有导出包功能和参数能力,不破坏 DICOM、分割影像、位姿数据、STL 原始模型的可选导出。
|
||||
- 只保留最新一个逆向分割结果,旧多条结果列表不再展示。
|
||||
- 退出逆向工作区时不能直接丢弃当前工作状态,需要询问是否保存。
|
||||
- 重新进入逆向工作区时应读取项目库中保存的位姿、构件样式和分割范围。
|
||||
- UI 风格贴合现有医疗工具风格,避免过度装饰。
|
||||
|
||||
## 风险点
|
||||
|
||||
- `App.tsx` 当前直接切换工作区,退出工作区弹窗需要在视图切换链路中接入。
|
||||
- 保存结果如果写入多个历史记录,会与“只保留一个”要求冲突,需要前后端一致改为覆盖。
|
||||
- 若前端只恢复位姿而不恢复构件样式,项目库中的逆向分割结果与重新进入工作区显示会不一致。
|
||||
- 当前工作区存在历史工程分析文档删除状态和软著未跟踪目录,提交时需精确暂存。
|
||||
|
||||
## 默认假设
|
||||
|
||||
- “两个图”优先采用当前项目库中的可视化预览卡片表达:影像与模型融合视角、逆向分割映射视图。若没有保存结果则显示空状态。
|
||||
- 本轮不引入真实截图持久化文件,先以保存上下文驱动两张结果预览图和导出入口;避免在运行态中持久化大体积 base64 图片。
|
||||
Reference in New Issue
Block a user