diff --git a/WebSite/server.ts b/WebSite/server.ts index d7ed622..69edfe3 100644 --- a/WebSite/server.ts +++ b/WebSite/server.ts @@ -1097,7 +1097,7 @@ function normalizeAutoMatchWeights(input: unknown): AutoMatchWeights { function normalizeAutoMatchIterations(value: unknown) { return typeof value === 'number' && Number.isFinite(value) - ? clampNumber(Math.round(value), 2, 12) + ? clampNumber(Math.round(value), 2, 50) : 6; } diff --git a/WebSite/src/components/AutoMatchWorkspace.tsx b/WebSite/src/components/AutoMatchWorkspace.tsx index 1c05fbf..82d249e 100644 --- a/WebSite/src/components/AutoMatchWorkspace.tsx +++ b/WebSite/src/components/AutoMatchWorkspace.tsx @@ -521,9 +521,9 @@ export default function AutoMatchWorkspace({ projectId, initialPose, onOpenRever setIterations(Math.max(2, Math.min(12, Number(event.target.value) || 2)))} + onChange={(event) => setIterations(Math.max(2, Math.min(50, Number(event.target.value) || 2)))} className="mt-1 h-10 w-full rounded-lg border border-slate-200 px-3 font-mono text-sm text-slate-700 outline-none focus:border-blue-400" /> diff --git a/工程分析/实现方案-2026-05-25-13-42-13.md b/工程分析/实现方案-2026-05-25-13-42-13.md new file mode 100644 index 0000000..e3a8438 --- /dev/null +++ b/工程分析/实现方案-2026-05-25-13-42-13.md @@ -0,0 +1,52 @@ +# 实现方案-2026-05-25-13-42-13 + +## 实现方案文档路径 + +`工程分析/实现方案-2026-05-25-13-42-13.md` + +## 修改目标 + +将自动微调匹配工作区“迭代轮次”的最高可选值从 12 提升到 50,并保证后端接口同步支持。 + +## 涉及路径 + +- `WebSite/src/components/AutoMatchWorkspace.tsx` +- `WebSite/server.ts` +- `工程分析/需求分析-2026-05-25-13-42-13.md` +- `工程分析/实现方案-2026-05-25-13-42-13.md` +- `工程分析/测试方案-2026-05-25-13-42-13.md` +- `工程分析/经验记录.md` + +## 技术路线 + +- 前端:把迭代轮次输入框 `max` 和 `onChange` clamp 上限改为 50。 +- 后端:把 `normalizeAutoMatchIterations` 的 clamp 上限改为 50。 +- 保持默认 `iterations = 6`,避免进入页面后默认就触发长耗时运行。 + +## 执行步骤 + +1. 确认已读 `工程分析/经验记录.md`。 +2. 修改前端迭代轮次输入限制。 +3. 修改后端接口参数归一化限制。 +4. 执行 `npm run build`。 +5. 重启 `tmux` 会话 `revoxelseg-dicom` 服务。 +6. 验证本机与公网访问。 +7. 追加经验记录并提交推送。 + +## 兼容性与回滚方案 + +- 旧请求中 `iterations <= 12` 行为不变。 +- 若 50 次导致耗时过长,可再引入运行中取消、进度显示或更严格候选限制。 +- 回滚只需恢复前后端上限为 12。 + +## 预计文件变更 + +- 两处代码常量级修改。 +- 新增本次工程分析三件套。 +- 追加经验记录。 + +## 提交与部署策略 + +- 只暂存本次代码和文档变更。 +- commit message 包含 `2026-05-25-13-42-13` 和简要描述。 +- 提交后推送到 Gitea,并完成重新部署验证。 diff --git a/工程分析/测试方案-2026-05-25-13-42-13.md b/工程分析/测试方案-2026-05-25-13-42-13.md new file mode 100644 index 0000000..ff32e0d --- /dev/null +++ b/工程分析/测试方案-2026-05-25-13-42-13.md @@ -0,0 +1,45 @@ +# 测试方案-2026-05-25-13-42-13 + +## 测试方案文档路径 + +`工程分析/测试方案-2026-05-25-13-42-13.md` + +## 静态检查 + +- 搜索 `normalizeAutoMatchIterations` 和“迭代轮次”输入框,确认前后端上限一致为 50。 +- 检查工作区状态,避免提交无关文件。 + +## 构建检查 + +- 在 `WebSite` 执行 `npm run build`。 +- 关注 TypeScript/Vite 构建错误。 + +## 关键业务场景验证 + +- 自动微调匹配页的迭代轮次输入框允许输入 50。 +- 默认迭代轮次仍为 6。 +- 后端接口收到 50 时不会截断到 12。 + +## 医学影像数据相关边界验证 + +- 本次不修改 DICOM/STL 坐标、采样、评分或导出算法。 +- 50 次迭代只影响用户主动选择后的优化循环次数。 + +## 部署验证 + +- 使用 `tmux` 会话 `revoxelseg-dicom` 重启服务。 +- 验证: + - `http://127.0.0.1:4000/api/health` + - `http://127.0.0.1:4000/` + - `https://revoxel.huijutec.cn/api/health` + - `https://revoxel.huijutec.cn/` + +## Git/Gitea 备份验证 + +- commit message 包含 `2026-05-25-13-42-13`。 +- 推送到 `origin/main`。 + +## 风险与回归关注点 + +- 迭代轮次越高,单次自动匹配耗时越长;后续如需常用 50 次,应考虑进度、取消和服务端超时保护。 +- 注意前端输入限制和后端 clamp 不要再次出现不一致。 diff --git a/工程分析/经验记录.md b/工程分析/经验记录.md index ec2aa73..c3ef67f 100644 --- a/工程分析/经验记录.md +++ b/工程分析/经验记录.md @@ -1959,3 +1959,21 @@ C. 解决问题方案 D. 后续如何避免问题 整理软著代码汇总时,先确认用户要的是“带核对信息的审阅版”还是“纯源码版”。若目标是提交材料,默认减少额外说明、文件标题和行号,只保留源码文本;用于内部核对的行号应放在临时检查结果里,不直接写入最终 docx。 + +## 2026-05-25-13-42-13 自动匹配参数上限要前后端同步 + +A. 具体问题 + +用户要求自动微调匹配工作区“迭代轮次”最高变为 50 次。页面旧输入框最大值为 12,后端 `normalizeAutoMatchIterations` 也会把请求轮次截断到 12。 + +B. 产生问题原因 + +自动匹配的轮次上限同时存在于前端输入控件和后端请求归一化中。若只修改其中一侧,会出现界面可以输入但接口不执行,或接口支持但页面无法选择的状态。 + +C. 解决问题方案 + +将 `AutoMatchWorkspace.tsx` 中迭代轮次输入框的 `max` 和 `onChange` clamp 上限改为 50;同步将 `server.ts` 中 `normalizeAutoMatchIterations` 的服务端 clamp 上限改为 50。默认值仍保留 6,避免进入页面后默认运行变慢。 + +D. 后续如何避免问题 + +后续调整自动匹配参数上限时,要同时检查前端控件、API 类型、服务端归一化、默认值和运行耗时提示。对可能显著增加耗时的参数,只提高上限不改变默认值;若用户常用高上限,应补充进度、取消和超时保护。 diff --git a/工程分析/需求分析-2026-05-25-13-42-13.md b/工程分析/需求分析-2026-05-25-13-42-13.md new file mode 100644 index 0000000..7fd029d --- /dev/null +++ b/工程分析/需求分析-2026-05-25-13-42-13.md @@ -0,0 +1,43 @@ +# 需求分析-2026-05-25-13-42-13 + +## 开始时间 + +2026-05-25-13-42-13 + +## 原始需求摘要 + +用户要求将自动微调匹配工作区中的“迭代轮次”最高值调整为 50 次。 + +## 业务目标 + +- 自动微调匹配页允许用户输入最多 50 次迭代。 +- 后端自动匹配接口也接受并执行最多 50 次迭代,避免前后端上限不一致。 +- 保持默认轮次不变,避免无意增加普通运行耗时。 + +## 输入与输出 + +- 输入:自动微调匹配工作区的迭代轮次输入框、自动匹配 API 请求参数。 +- 输出:界面 `max` 和输入截断上限为 50,服务端 `iterations` 归一化上限为 50。 + +## 影响范围 + +- `WebSite/src/components/AutoMatchWorkspace.tsx` +- `WebSite/server.ts` +- 工程分析本次三件套和经验记录 + +## 关键约束 + +- 必须执行工程分析工作流。 +- 不修改自动匹配默认轮次、候选数量、评分函数和位姿算法。 +- 修改后需要重新构建、部署并验证服务。 + +## 风险点 + +- 50 次迭代可能明显增加自动匹配耗时,需要保留用户手动选择。 +- 如果只改前端不改后端,接口仍会把 50 截为旧上限。 +- 如果只改后端不改前端,用户仍无法通过页面输入 50。 + +## 默认假设 + +- 用户只要求提升最大上限,不要求默认值从 6 改为 50。 +- 每轮候选数量上限仍保持当前 80,不在本次调整范围内。