现象
console 新建/编辑弹窗没有任何未保存内容保护:表单填到一半刷新页面(F5)或导航离开,内容静默丢失——既不弹 beforeunload 确认,也没有草稿暂存/恢复。
实测证据(17.0.0-rc.0,真机 UI)
设备记录编辑弹窗填入备注后刷新:
- 派发可取消的
beforeunload 事件 → defaultPrevented === false(全链路无人拦截);
- 刷新全程零浏览器确认框;
- 刷新后弹窗被 URL 复原、但已填内容丢失。
影响
长表单(下游项目里 20~28 字段的表单不少)误刷新即全部白填。弹窗生命周期与卸载拦截都在渲染层,应用层元数据(view/formViews)无对应开关,自建插件也接不进表单卸载时机——应用层无对策。
建议
表单 dirty 时注册 beforeunload 守卫(React Router 场景加路由离开确认);进阶:localStorage 草稿暂存+恢复提示。
下游登记:os-project-titanwind-ehr PLAT-DEF-012(项目 #633 W-2)。
现象
console 新建/编辑弹窗没有任何未保存内容保护:表单填到一半刷新页面(F5)或导航离开,内容静默丢失——既不弹
beforeunload确认,也没有草稿暂存/恢复。实测证据(17.0.0-rc.0,真机 UI)
设备记录编辑弹窗填入备注后刷新:
beforeunload事件 →defaultPrevented === false(全链路无人拦截);影响
长表单(下游项目里 20~28 字段的表单不少)误刷新即全部白填。弹窗生命周期与卸载拦截都在渲染层,应用层元数据(view/formViews)无对应开关,自建插件也接不进表单卸载时机——应用层无对策。
建议
表单 dirty 时注册
beforeunload守卫(React Router 场景加路由离开确认);进阶:localStorage 草稿暂存+恢复提示。下游登记:os-project-titanwind-ehr PLAT-DEF-012(项目 #633 W-2)。