2026-05-04-03-21-40 增加前后端协同和NIfTI导出

This commit is contained in:
2026-05-04 03:29:54 +08:00
parent a6f3836460
commit a9b6d2d76a
15 changed files with 1040 additions and 67 deletions

View File

@@ -0,0 +1,132 @@
# 测试方案
时间戳2026-05-04-03-21-40
## 测试目标
验证系统已经从纯前端静态演示升级为前后端协调系统并确认登录同步、默认项目、恢复出厂设置、NIfTI 导出和部署均可用。
## 静态检查
- 检查 `server.ts` 是否提供 API 和前端页面服务。
- 检查 `src/lib/api.ts` 是否统一封装 API 请求。
- 检查项目列表、系统管理、逆向工作区是否不再依赖硬编码假数据。
- 检查 `.gitignore` 是否排除 `WebSite/data/``WebSite/exports/`、DICOM、STL、依赖和构建产物。
## 构建与类型检查
`WebSite/` 下执行:
```bash
npm run lint
npm run build
```
预期结果:
- TypeScript 类型检查通过。
- Vite 构建通过。
## API 验证
启动后端服务后验证:
```bash
curl -s http://127.0.0.1:4000/api/health
curl -s http://127.0.0.1:4000/api/session
curl -s http://127.0.0.1:4000/api/projects
curl -s http://127.0.0.1:4000/api/users
curl -s -X POST http://127.0.0.1:4000/api/demo/reset
```
预期结果:
- health 返回 `ok`
- projects 包含默认项目 `head-ct-demo`
- 默认项目 `dicomCount``300`
- 默认项目 STL 模块包含 `Head_CT_ReConstruct` 下的 `.stl` 文件。
- reset 后默认项目仍存在。
## 登录同步验证
- 浏览器 A 登录 `admin / 123456`
- 浏览器 B 刷新或等待轮询后读取到已登录状态。
- 浏览器 A 或 B 登出后,另一个浏览器轮询后同步到未登录状态。
命令级验证:
```bash
curl -s -X POST http://127.0.0.1:4000/api/login -H 'Content-Type: application/json' -d '{"account":"admin","password":"123456"}'
curl -s http://127.0.0.1:4000/api/session
curl -s -X POST http://127.0.0.1:4000/api/logout
curl -s http://127.0.0.1:4000/api/session
```
## NIfTI 导出验证
执行:
```bash
curl -L -o /tmp/revoxelseg-mask.nii.gz -X POST http://127.0.0.1:4000/api/projects/head-ct-demo/export-mask
file /tmp/revoxelseg-mask.nii.gz
gzip -t /tmp/revoxelseg-mask.nii.gz
```
预期结果:
- 下载文件存在。
- 文件为 gzip 压缩数据。
- `gzip -t` 校验通过。
- 响应文件名后缀为 `.nii.gz`
## 页面验证
- 打开 `http://192.168.3.11:4000/`
- 登录页可正常登录。
- 总体概况显示后端统计数据。
- 项目库默认显示头部 CT 演示项目。
- 项目详情展示 `Head_CT_DICOM``Head_CT_ReConstruct` 相关信息。
- 系统管理页点击“恢复演示环境出厂设置”后,项目仍恢复为默认 DICOM/STL。
- 逆向工作区可导出 `nii.gz` mask。
## 回归风险
- 引入后端后部署方式从纯 Vite 改为 Express + Vite 中间件,需要确认 `4000` 服务由 `server.ts` 托管。
- 后端共享登录状态是演示同步方案,不等同生产级多用户 session。
- NIfTI 文件当前为演示 mask非医学级真实 STL 体素化结果。
## 人工审核状态
本次用户明确要求无需人工二次确认。
状态:自动确认,继续执行。
## 执行结果
- `npm run lint` 执行成功。
- `npm run build` 执行成功。
- Vite 仍有大 chunk 警告,当前不影响本次功能。
- 已新增 Express 后端 `server.ts`,并通过 `npm run serve -- --host 0.0.0.0 --port 4000` 托管前后端。
- `GET /api/health` 返回 `ok: true`
- `GET /api/projects` 返回默认项目 `head-ct-demo`
- 默认项目载入结果:
- `dicomCount: 300`
- `modelCount: 9`
- `dicomPath: Head_CT_DICOM`
- `modelPath: Head_CT_ReConstruct`
- `POST /api/demo/reset` 执行成功,重置后默认项目仍载入 `Head_CT_DICOM``Head_CT_ReConstruct`
- `POST /api/login` 使用 `admin / 123456` 登录成功。
- `GET /api/session` 登录后返回 `authenticated: true`
- `POST /api/logout` 登出成功。
- `GET /api/session` 登出后返回 `authenticated: false`
- `POST /api/projects/head-ct-demo/export-mask?format=nii.gz` 执行成功。
- `/tmp/revoxelseg-mask.nii.gz` 通过 `gzip -t` 校验。
- 解压后 NIfTI magic 为 `n+1\0`
- `POST /api/projects/head-ct-demo/export-mask?format=nii` 执行成功,生成未压缩 `.nii`
- `http://192.168.3.11:4000/` 返回 `HTTP/1.1 200 OK`
- 当前部署由 `tmux` 会话 `revoxelseg-dicom` 托管。
## 剩余说明
- 当前导出的 NIfTI mask 是可下载、格式有效的演示分割体数据。
- 真实医学级 STL 反向体素化仍需后续加入 DICOM 空间解析、STL 坐标配准、网格体素填充和标签体系。