Files
REVOXELSEG_DICOM/工程分析/实现方案-2026-05-20-02-32-47.md

69 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 实现方案-2026-05-20-02-32-47
## 实现方案文档路径
`工程分析/实现方案-2026-05-20-02-32-47.md`
## 修改目标
将顶部“导出全部 NII.GZ”改为一次性下载 `.tar.gz` 导出包;分割影像导出时自动附带 label/category 映射 JSON并支持“所有类别/可见类别”范围选择。
## 涉及路径
- `WebSite/server.ts`
- `WebSite/src/lib/api.ts`
- `WebSite/src/components/ReverseWorkspace.tsx`
- `工程分析/需求分析-2026-05-20-02-32-47.md`
- `工程分析/实现方案-2026-05-20-02-32-47.md`
- `工程分析/测试方案-2026-05-20-02-32-47.md`
- `工程分析/经验记录.md`
## 技术路线
1. 后端扩展分割生成参数:
- 增加 `SegmentationExportScope = all | visible`
- `createSegmentationData` 按 scope 决定是否跳过隐藏构件。
2. 后端新增类别映射 JSON
- 根据 `project.stlFiles``project.moduleStyles` 生成 label/name/fileName/color/opacity/visible。
- scope 为 visible 时只包含可见构件。
3. 后端新增导出包接口:
- `GET /api/projects/:projectId/export-bundle`
- 参数:`targets=dicom,segmentation,pose``format=nii.gz``pose=...``segmentationScope=visible|all`
- 使用现有 tar header 工具封装为 `.tar.gz`
4. 前端 API
- 新增 `downloadProjectExportBundle`
- 保留单个分割 NII/NII.GZ 下载兼容。
5. 前端菜单:
- “导出所选”改为下载单个压缩包。
- 增加分割类别范围的 segmented control。
- 仅选中分割影像时显示类别范围选项。
## 执行步骤
- 新增后端 tar entry 通用函数和 bundle 生成函数。
- 修改 NIfTI 分割生成函数支持 scope。
- 新增 label map JSON 生成逻辑。
- 调整前端 API 和导出菜单。
- 执行 `npm run lint``npm run build`
- 用临时/正式服务验证 bundle 接口返回 `.tar.gz`,并检查包内文件名。
- 追加经验记录、commit、push、部署。
## 兼容性与回滚方案
- `/export-nifti``/export-mask` 保持可用。
- 单独分割导出默认沿用 visible scope。
- 若 bundle 导出异常,可回滚到多文件直链下载。
## 预计文件变更
- `server.ts`:新增 bundle、分割 scope、类别映射 JSON。
- `api.ts`:新增 bundle 下载 API。
- `ReverseWorkspace.tsx`:导出菜单增加 scope 选择并调用 bundle。
- 工程分析文档:新增本次文档,更新经验记录。
## 提交与部署策略
- Commit message`2026-05-20-02-32-47 支持NII导出包与分割类别范围`
- 显式暂存本次相关文件,避免提交历史删除状态。
- 推送到 Gitea `origin/main`,并使用 `tmux` 会话 `revoxelseg-dicom` 重新部署。