78 lines
2.6 KiB
Markdown
78 lines
2.6 KiB
Markdown
# 实现方案
|
||
|
||
时间戳:2026-05-04-04-12-34
|
||
|
||
## 修改目标
|
||
|
||
完善项目库导入/下载按钮语义、DICOM 三方向预览、STL 多模型颜色透明度控制、项目创建弹窗、删除确认和编辑自动保存。
|
||
|
||
## 涉及路径
|
||
|
||
- `WebSite/server.ts`
|
||
- `WebSite/src/lib/api.ts`
|
||
- `WebSite/src/types.ts`
|
||
- `WebSite/src/components/ProjectLibrary.tsx`
|
||
- `工程分析/测试方案-2026-05-04-04-12-34.md`
|
||
- `工程分析/经验记录.md`
|
||
|
||
## 技术路线
|
||
|
||
1. 后端 DICOM 预览扩展。
|
||
- `GET /api/projects/:projectId/dicom-preview?slice=&plane=`
|
||
- 支持 `plane=axial|sagittal|coronal`。
|
||
- 横断面读取单张 DICOM。
|
||
- 矢状面/冠状面从 DICOM 序列采样生成重建平面。
|
||
2. 后端项目删除。
|
||
- 新增 `DELETE /api/projects/:projectId`。
|
||
- 删除后写入共享状态。
|
||
3. 前端 API 扩展。
|
||
- `getDicomPreview(projectId, slice, plane)`。
|
||
- `deleteProject(projectId)`。
|
||
4. 项目库交互。
|
||
- 顶部右侧按钮:DICOM/3D 视图显示“导入”;分割结果不显示顶部第二按钮。
|
||
- 创建项目改为点击 `+` 弹窗输入名称。
|
||
- 编辑项目名称改为输入框失焦或回车自动保存。
|
||
- 删除项目点击垃圾桶后弹窗二次确认。
|
||
5. DICOM UI。
|
||
- 增加横断面、矢状面、冠状面切换。
|
||
- 右侧滑块改为稳定轨道,显示 `第 n / 总数`。
|
||
- 圆点与轨道对齐。
|
||
6. 3D 模型 UI。
|
||
- 右侧眼睛为全体显示/隐藏。
|
||
- 每个 STL 使用颜色输入框和透明度滑块。
|
||
- Three.js 同时渲染所有可见 STL,并应用对应颜色和透明度。
|
||
- 删除无意义状态点。
|
||
|
||
## 数据流
|
||
|
||
DICOM:
|
||
|
||
前端选择方向和切片 -> 后端按方向返回灰度像素 -> 前端 canvas 绘制。
|
||
|
||
3D:
|
||
|
||
后端提供 STL 文件 -> 前端为每个 STL 建立颜色/透明度/可见性状态 -> Three.js 渲染多模型。
|
||
|
||
项目:
|
||
|
||
创建弹窗 -> `POST /api/projects`;编辑失焦 -> `PATCH /api/projects/:id`;删除确认 -> `DELETE /api/projects/:id`。
|
||
|
||
## 兼容性与回滚方案
|
||
|
||
- 保留原 `axial` 行为,新增方向参数不影响旧调用。
|
||
- 若矢状面/冠状面解析失败,前端显示错误态。
|
||
- 若 STL 多模型性能不足,可通过全体眼睛或单项眼睛隐藏模型。
|
||
- 回滚时恢复 `ProjectLibrary.tsx` 和相关 API 即可。
|
||
|
||
## 预计文件变更
|
||
|
||
- 修改 `server.ts`、`api.ts`、`types.ts`、`ProjectLibrary.tsx`。
|
||
- 更新测试方案执行结果。
|
||
- 更新经验记录。
|
||
|
||
## 人工审核状态
|
||
|
||
本次用户明确要求无需人工二次确认。
|
||
|
||
状态:自动确认,继续执行。
|