2026-08-27.md 1.4 KB

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 仍保留编辑时的旧值
  • 触发三个症状:
    1. <Dialog :title="form.id ? '编辑' : '新增'"> 标题误判
    2. <selectElder :disabled="!!form.id"> 锁住
    3. 提交参数把上次的 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 字段。