2026-08-27
长期/临时医嘱 Form resetForm 失效 bug(已修)
- 症状:点编辑→关闭→点「新增」,Dialog 标题仍显示「编辑」,长者选择器 disabled 锁死,里面显示上个长者(桂娃娃2(8978979))
- 根因:
Object.assign(form, JSON.parse(JSON.stringify(defaultForm)))
JSON.stringify({id: undefined}) 会丢弃 undefined 字段(不写入 JSON 字符串)
- 所以反序列化出来的对象根本没有
id / elderId 这两个 key
Object.assign(target, source) 是浅合并 + 仅复制 source 自身可枚举属性 → target.id 仍保留编辑时的旧值
- 触发三个症状:
<Dialog :title="form.id ? '编辑' : '新增'"> 标题误判
<selectElder :disabled="!!form.id"> 锁住
- 提交参数把上次的 id 带出去
- 修复:两个 Form.vue 的
resetForm 改为逐字段显式重置,不依赖 JSON 拷贝:
js
form.id = undefined
form.elderId = undefined
form.elderName = ''
// ...其他字段
- 范式沉淀:表单"重置到默认态"不要用 Object.assign(form, JSON.parse(JSON.stringify(defaultForm))),前者依赖 JSON 序列化语义、后者依赖对象属性存在性。当 defaultForm 含 undefined 字段时,二者叠加静默失效。逐字段显式重置最稳,或用 lodash _.cloneDeepWith / structuredClone,但都要先 unset undefined 字段。