2026-05-20-14-53-31 逆向结果复核与用户管理修复
This commit is contained in:
83
工程分析/实现方案-2026-05-20-14-53-31.md
Normal file
83
工程分析/实现方案-2026-05-20-14-53-31.md
Normal file
@@ -0,0 +1,83 @@
|
||||
# 实现方案:逆向结果复核增强与管理功能修复
|
||||
|
||||
实现方案文档路径:`工程分析/实现方案-2026-05-20-14-53-31.md`
|
||||
|
||||
## 修改目标
|
||||
|
||||
增强项目库逆向分割结果的复核交互,补齐逆向工作区映射视图 DICOM 控制,优化离开保存提示逻辑,修复起始页标题和系统管理用户操作。
|
||||
|
||||
## 涉及路径
|
||||
|
||||
- `WebSite/src/App.tsx`
|
||||
- `WebSite/src/components/Login.tsx`
|
||||
- `WebSite/src/components/ProjectLibrary.tsx`
|
||||
- `WebSite/src/components/ReverseWorkspace.tsx`
|
||||
- `WebSite/src/components/UserManagement.tsx`
|
||||
- `WebSite/src/lib/api.ts`
|
||||
- `WebSite/src/types.ts`
|
||||
- `WebSite/server.ts`
|
||||
- `工程分析/需求分析-2026-05-20-14-53-31.md`
|
||||
- `工程分析/实现方案-2026-05-20-14-53-31.md`
|
||||
- `工程分析/测试方案-2026-05-20-14-53-31.md`
|
||||
- `工程分析/经验记录.md`
|
||||
|
||||
## 技术路线
|
||||
|
||||
1. 检查登录页、主入口、项目库、逆向工作区和用户管理现有实现。
|
||||
2. 后端项目状态归一化时默认项目不再继承旧保存结果,确保初始逆向分割结果为空。
|
||||
3. 项目库逆向分割结果页复用 `NativeStlViewer` 提供可拖拽融合视图,固定精细模型显示和 DICOM 高融合语义;DICOM+分割卡片加入横向 Slice Navigator、DICOM 显示模式和旋转控制。
|
||||
4. 逆向工作区给映射视图加入 DICOM 显示模式与旋转状态,并用该状态请求/渲染预览。
|
||||
5. 逆向工作区保存后建立状态快照,只有当前可视化工具栏状态与快照不同才注册离开确认;确认文本改成单行语义。
|
||||
6. 起始页标题顺序调整;根地址访问时按最初起始页处理共享会话。
|
||||
7. 用户管理前后端补齐新增/更新/删除接口能力,前端禁止删除当前用户。
|
||||
8. 运行类型检查、构建、服务部署与接口验证。
|
||||
|
||||
## 执行步骤
|
||||
|
||||
- 阅读相关源码与 API 封装。
|
||||
- 编写项目状态、API 与用户管理后端补丁。
|
||||
- 编写项目库和逆向工作区 UI/交互补丁。
|
||||
- 修复登录页标题与主入口初始会话策略。
|
||||
- 更新测试方案实际执行记录和经验记录。
|
||||
- 精确暂存本轮文件,提交并推送 Gitea。
|
||||
|
||||
## 兼容性与回滚方案
|
||||
|
||||
- 旧项目若已有保存结果,保留用户保存结果;默认演示项目初始状态按空结果处理。
|
||||
- 用户管理新增接口只操作 `WebSite/data/state.json` 中用户列表,不影响 DICOM/STL 原始数据。
|
||||
- 若项目库预览异常,仍可进入逆向工作区重新保存结果并导出。
|
||||
|
||||
## 预计文件变更
|
||||
|
||||
程序文件:
|
||||
|
||||
- `WebSite/src/App.tsx`
|
||||
- `WebSite/src/components/Login.tsx`
|
||||
- `WebSite/src/components/ProjectLibrary.tsx`
|
||||
- `WebSite/src/components/ReverseWorkspace.tsx`
|
||||
- `WebSite/src/components/UserManagement.tsx`
|
||||
- `WebSite/src/lib/api.ts`
|
||||
- `WebSite/src/types.ts`
|
||||
- `WebSite/server.ts`
|
||||
|
||||
工程分析:
|
||||
|
||||
- 本轮三份分析文档。
|
||||
- `工程分析/经验记录.md`。
|
||||
|
||||
## 提交与部署策略
|
||||
|
||||
- 暂存本轮程序改动与工程分析文档。
|
||||
- 避免提交软著材料、历史删除状态和运行态导出文件。
|
||||
- commit message 包含 `2026-05-20-14-53-31`。
|
||||
- 构建通过后重启 `tmux` 会话 `revoxelseg-dicom`,验证 4000 端口服务。
|
||||
|
||||
## 实际实现记录
|
||||
|
||||
- 项目库逆向分割结果页新增结果 DICOM 显示模式、旋转控制和横向 Slice Navigator。
|
||||
- 项目库融合视角改为可拖拽结果位姿预览,并固定使用精细模型语义。
|
||||
- 后端分割结果记录增加 `schemaVersion`,过滤旧演示结果,默认项目初始结果为空;新保存结果继续持久化。
|
||||
- 逆向工作区映射视图新增默认/骨窗/软组织/高对比和左转/右转控制。
|
||||
- 逆向工作区新增保存快照判断,仅在保存相关状态变化后离开才弹窗。
|
||||
- 根页面启动时清理共享会话,显示起始登录页;登录页标题改为全称在上、简称在下。
|
||||
- 系统管理补齐用户新增、编辑、改密、删除接口和前端表单,并禁止删除当前登录用户。
|
||||
62
工程分析/测试方案-2026-05-20-14-53-31.md
Normal file
62
工程分析/测试方案-2026-05-20-14-53-31.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# 测试方案:逆向结果复核、起始页与用户管理验证
|
||||
|
||||
测试方案文档路径:`工程分析/测试方案-2026-05-20-14-53-31.md`
|
||||
|
||||
## 静态检查
|
||||
|
||||
- 搜索确认项目库逆向分割结果含横向 Slice Navigator、DICOM 模式和旋转控制。
|
||||
- 搜索确认逆向工作区映射视图含 DICOM 模式和左转/右转控制。
|
||||
- 搜索确认离开确认文本不含裸 `\\n`。
|
||||
- 检查用户管理前端按钮与后端接口路径一致。
|
||||
- 检查默认项目状态不会自动带入旧逆向分割结果。
|
||||
|
||||
## 构建检查
|
||||
|
||||
- 在 `WebSite/` 执行 `npm run lint`。
|
||||
- 在 `WebSite/` 执行 `npm run build`。
|
||||
|
||||
## 关键业务场景验证
|
||||
|
||||
- 访问根地址,确认显示起始页而非直接进入工作台。
|
||||
- 起始页标题全称在上且更醒目,简称在下。
|
||||
- 项目库“逆向分割结果”未保存时为空状态;保存后显示可拖拽融合视角和 DICOM+分割预览。
|
||||
- 项目库 DICOM+分割预览可切换默认/骨窗/软组织/高对比,并可左转右转、拖动 Slice Navigator。
|
||||
- 逆向工作区映射视图可切换 DICOM 模式和旋转。
|
||||
- 未修改或刚保存后离开逆向工作区不弹保存确认;修改可视化工具栏后离开才弹确认。
|
||||
- 系统管理中新增用户可用,删除当前用户被阻止,删除其他用户可用。
|
||||
|
||||
## 医学影像数据相关边界验证
|
||||
|
||||
- 不修改 DICOM/STL 原始文件。
|
||||
- 不伪造未保存项目的逆向分割结果。
|
||||
- DICOM 显示模式只影响预览和映射底图,不改变导出数据。
|
||||
|
||||
## 部署验证
|
||||
|
||||
- 验证 `http://127.0.0.1:4000/api/health`。
|
||||
- 验证 `http://127.0.0.1:4000/` 返回 200。
|
||||
- 验证 `/api/projects` 默认项目逆向分割结果为空或仅在用户保存后存在。
|
||||
|
||||
## Git/Gitea 备份验证
|
||||
|
||||
- commit message 包含 `2026-05-20-14-53-31`。
|
||||
- 推送 Gitea 成功后记录 commit。
|
||||
- 确认未暂存软著材料、历史删除状态和无关运行态文件。
|
||||
|
||||
## 风险与回归关注点
|
||||
|
||||
- 根地址强制显示起始页可能影响共享会话自动进入工作台的习惯,需要以用户本轮需求为准。
|
||||
- 用户管理删除接口必须保护当前用户和最后一个管理员。
|
||||
- 保存脏状态需要覆盖位姿、构件样式、切片范围、DICOM 显示模式等关键状态。
|
||||
|
||||
## 实际执行记录
|
||||
|
||||
- 已执行 `npm run lint`,TypeScript 检查通过。
|
||||
- 已执行 `npm run build`,生产构建通过;仅保留 Vite 大 chunk 体积提示。
|
||||
- 已执行 `git diff --check`,未发现空白错误。
|
||||
- 已执行静态搜索,确认旧文案 `导出全部`、裸 `\\n` 保存提示、单独 NII 下载入口未在目标源码中残留。
|
||||
- 已重启 `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。
|
||||
- 已验证默认项目 `head-ct-demo` 的 `segmentationResults` 返回 0 条,初始逆向分割结果为空。
|
||||
- 已通过接口验证用户管理:新增临时用户、编辑科室、删除临时用户成功;删除当前登录用户返回 400。
|
||||
18
工程分析/经验记录.md
18
工程分析/经验记录.md
@@ -1261,3 +1261,21 @@ C. 解决问题方案
|
||||
D. 后续如何避免问题
|
||||
|
||||
凡是把“历史记录”改为“当前唯一状态”的需求,都要同步检查数据模型、归一化逻辑、保存接口、列表 UI、导出默认参数和重新进入页面的恢复逻辑。提交前用 `rg` 搜索旧文案和旧入口,避免残留重复下载按钮或旧命名造成用户误解。
|
||||
|
||||
## 2026-05-20-14-53-31 保存提示与管理操作需要区分状态语义
|
||||
|
||||
A. 具体问题
|
||||
|
||||
用户要求逆向工作区在未修改或刚保存后离开时不再弹出保存确认,同时系统管理工作区的添加、编辑、删除用户按钮必须真正可用,并且不能删除当前登录用户。
|
||||
|
||||
B. 产生问题原因
|
||||
|
||||
上一轮实现的离开守卫只知道“正在离开逆向工作区”,不知道当前可视化状态是否已经保存,因此无条件弹窗;系统管理页原先只实现了用户列表和重置演示环境,操作按钮没有对应 API 和表单逻辑。
|
||||
|
||||
C. 解决问题方案
|
||||
|
||||
为逆向工作区建立保存快照,快照覆盖位姿、构件样式、切片范围、映射切片、模型显示、DICOM 融合强度、边界和切分状态;项目加载和保存成功后刷新快照,离开时只有当前快照与保存快照不同才弹确认。后端补齐 `/api/users` 的新增、编辑和删除接口,删除时拒绝当前登录用户;前端系统管理页改为真实表单和操作流。
|
||||
|
||||
D. 后续如何避免问题
|
||||
|
||||
凡是“离开前确认保存”类交互,都要先定义脏状态快照,不能只按页面离开事件弹窗。后台管理按钮必须有明确接口、成功/失败反馈和权限边界;至少要覆盖新增、编辑、删除自己、删除其他用户四个验证场景。
|
||||
|
||||
72
工程分析/需求分析-2026-05-20-14-53-31.md
Normal file
72
工程分析/需求分析-2026-05-20-14-53-31.md
Normal file
@@ -0,0 +1,72 @@
|
||||
# 需求分析:逆向分割结果交互、起始页与用户管理修复
|
||||
|
||||
开始时间:`2026-05-20-14-53-31`
|
||||
|
||||
## 原始需求摘要
|
||||
|
||||
用户要求修改程序:
|
||||
|
||||
1. 项目库“逆向分割结果”中的结果视图支持拖拽查看;左侧融合视角复刻逆向工作区“影像与模型融合视角”的模型显示精细、DICOM 高融合场景;中间 DICOM+分割视图新增横向 Slice Navigator;项目初始状态下逆向分割结果为空。
|
||||
2. 逆向工作区“逆向分割映射视图”旁边新增 DICOM 可视化方式选择:默认、骨窗、软组织、高对比,并支持左转、右转。
|
||||
3. 若用户未修改,或保存至项目库后未再修改可视化工具栏内容,则退出逆向工作区或跳转其他页面时不再弹出保存确认;弹窗文本中的 `\n` 不应以字符形式出现。
|
||||
4. 访问 `http://192.168.3.11:4000/` 应进入最初起始页。
|
||||
5. 起始页中“基于模型逆向体素化及DICOM分割标注系统”和“模型逆向系统”文字顺序调换,全称放大置上,简称放下。
|
||||
6. 修复系统管理工作区用户操作:不能删除自己,添加用户等操作需要可用。
|
||||
|
||||
## 业务目标
|
||||
|
||||
- 让项目库的逆向分割结果更接近工作区复核体验,保存后可继续拖拽观察融合模型,并可横向浏览 DICOM+分割切片。
|
||||
- 避免无修改状态下反复弹出保存确认,提高逆向工作区切换效率。
|
||||
- 统一访问根地址时的入口体验,确保回到最初起始页。
|
||||
- 修复用户管理后台的新增、删除等核心管理能力。
|
||||
|
||||
## 输入与输出
|
||||
|
||||
输入:
|
||||
|
||||
- `WebSite/src/App.tsx`
|
||||
- `WebSite/src/components/Login.tsx`
|
||||
- `WebSite/src/components/ProjectLibrary.tsx`
|
||||
- `WebSite/src/components/ReverseWorkspace.tsx`
|
||||
- `WebSite/src/components/UserManagement.tsx`
|
||||
- `WebSite/src/lib/api.ts`
|
||||
- `WebSite/src/types.ts`
|
||||
- `WebSite/server.ts`
|
||||
|
||||
输出:
|
||||
|
||||
- 项目库逆向分割结果支持拖拽融合视角、DICOM 模式/旋转、横向 Slice Navigator。
|
||||
- 初始项目无保存结果时,逆向分割结果显示空状态,不伪造旧结果。
|
||||
- 逆向工作区映射视图支持 DICOM 模式选择和旋转。
|
||||
- 离开工作区仅在存在未保存修改时弹窗,弹窗文本无裸 `\n`。
|
||||
- 根地址访问回到起始页,起始页标题顺序调整。
|
||||
- 用户管理的新增/删除/权限限制修复。
|
||||
|
||||
## 影响范围
|
||||
|
||||
- 前端主入口与登录/起始页体验。
|
||||
- 项目库逆向分割结果页。
|
||||
- 逆向工作区保存状态追踪与映射视图控制。
|
||||
- 用户管理 API 与前端交互。
|
||||
- 项目状态归一化逻辑。
|
||||
|
||||
## 关键约束
|
||||
|
||||
- 不伪造医学分割结果;未保存时必须明确为空。
|
||||
- DICOM 可视化模式与旋转应复用已有 `dicom-preview` 能力。
|
||||
- 保存确认只基于逆向工作区可视化工具栏关键状态变化,不应因普通页面切换重复打扰。
|
||||
- 不能删除当前登录用户。
|
||||
- 文档、程序和部署仍需按工程工作流提交备份。
|
||||
|
||||
## 风险点
|
||||
|
||||
- 项目库预览使用 Three.js 和 DICOM Canvas,布局与拖拽需避免遮挡导出面板。
|
||||
- 保存脏状态判断若过宽会误弹窗,过窄会漏保存关键位姿/样式。
|
||||
- 清空默认保存结果会影响当前演示项目已有状态,需要后端默认项目状态归一化兼容。
|
||||
- 用户管理若后端仅有列表接口,需要补齐新增/删除/更新接口并同步前端。
|
||||
|
||||
## 默认假设
|
||||
|
||||
- “最初的起始页”指登录/欢迎页;访问根地址时应清理共享会话并显示该页。
|
||||
- 项目库逆向分割结果中“DICOM+分割”以现有 DICOM 预览叠加保存结果构件提示呈现,若未保存结果则显示空状态。
|
||||
- 系统管理工作区至少需要新增用户、删除非当前用户、编辑用户基础信息可用。
|
||||
Reference in New Issue
Block a user