2026-05-24-17-29-17 增加构件加载进度并修正滚轮事件

This commit is contained in:
2026-05-24 17:42:48 +08:00
parent d9572e6966
commit 1dcfc2a4c1
7 changed files with 299 additions and 58 deletions

View File

@@ -1729,3 +1729,21 @@ C. 解决问题方案
D. 后续如何避免问题
凡是导出“当前可见”这类 UI 状态,不能只依赖历史保存结果;后端应以项目当前状态为准,前端最好显式携带本次导出的关键状态,防止异步保存延迟。二维 overlay 如果用于判断实体形状,必须确认 STL 预览不是抽样缺面;对超过预览上限的大模型,应按可见构件高精度加载或在界面提示。细血管、胆管等管状结构应解释为“天然多小截面/窄带”,不要把所有结构都承诺成单一大实体块。
## 2026-05-24-17-29-17 构件层级切换要有加载反馈并避免 passive 事件告警
A. 具体问题
用户反馈调整逆向工作区“构件层级”时可能出现暂时不显示或看起来像 bug同时浏览器控制台反复打印 `Unable to preventDefault inside passive event listener invocation`
B. 产生问题原因
逆向分割映射视图为了修正抽样缺面,已经改成按当前可见构件高精度加载 STL preview。构件眼睛切换后新 preview 在网络和前端缓存返回前,旧 overlay 被清空或尚未绘制,界面没有明确进度反馈。另一个问题是项目库 DICOM 画布和逆向映射画布仍使用 React `onWheel` 调用 `preventDefault`,部分浏览器会把 wheel/touch 合成事件按 passive 处理;按钮 `onTouchStart` 中的 `preventDefault` 也会增加同类告警风险。
C. 解决问题方案
为逆向分割映射视图新增 `overlayLoadState`,在可见 STL 构件列表变化时清空旧 preview、显示 `loaded/total` 进度条,并在每个构件 preview 成功或失败后更新进度,全部完成后再绘制最新 overlay。项目库 DICOM 画布和逆向映射画布改为原生 `addEventListener('wheel', ..., { passive: false })`,保留滚轮缩放和阻止页面滚动能力。长按步进按钮改用 pointer 事件和 `touch-none`,移除 touch 合成事件里的 `preventDefault`
D. 后续如何避免问题
后续只要某个 UI 操作会触发异步加载大 STL、DICOM 或导出预计算,都应提供明确加载状态、进度和空状态,避免用户把正常等待理解为显示故障。需要阻止滚轮默认滚动时,应使用原生非被动 wheel 监听并在卸载时清理;触摸按钮优先使用 pointer 事件和 `touch-action` 控制,不要在 passive-prone 的 touch 合成事件中调用 `preventDefault`