湖北省养老机构系统前端(yudao 框架:Vue3 + TS + Element Plus)。重点模块:九防看板、合同(湖北2024版)、入住登记、长期/临时医嘱单、护士执行医嘱。
long-doctor-order/:长者 + 多条 entries 子表,条目含 status 启用/停止short-doctor-order/:一次性,无启停,含 executeTimeexecute-doctor-order/:前端按频次展开待执行行 + 执行/跳过弹窗 + 打印 Dialog(v-print 走可见 Dialog,禁止离屏)src/api/elderly/elder/bed-change/index.tsserializeLongOrder/serializeShortOrder/serializeExecution 把字符串转毫秒(dayjs().valueOf())fromTs helper 把毫秒(兼容 10 位秒)转回 "YYYY-MM-DD HH:mm:ss" 字符串,挂载在 5 个 GET 接口的 .then(getLongDoctorOrderPage / getLongDoctorOrder / getShortDoctorOrderPage / getShortDoctorOrder / getDoctorOrderExecutionPage),列表与详情/打印/表单都按字符串使用planDate 查询参数保持 YYYY-MM-DD 字符串(按日期匹配,不是具体时刻)MED_*_OPTIONS 翻译;状态枚举 LONG_ORDER_STATUS / EXEC_STATUSdoctor-order-backend-spec.md,已交付后端<Dialog> 内,禁止 position:absolute; left:-9999px 离屏(会空白)src/config/axios/service.ts:277 原只认 code === 200(result_code=200),code !== 200 走 Promise.reject('error') 分支code:0 表示成功(医嘱/执行接口),所以调用方 await 后其实是被 reject 的,但 Network 看似"成功"code:0 + UI 完全不刷新 + 没抛错」,立刻打开 service.ts 看拦截器await 不抛错service.ts:277 改为 code !== 200 && code !== 0,兼容 yudao 标准成功码 code:0(不影响原 code:200 接口)。所有返回 code:0 的接口(含 doctorOrderExecution/page 读接口)现在 await 正常返回 datadoctorOrderExecution/page 接口返回的 execution 记录(含 orderType/orderEntryId/planTime/status)。buildRows 合并时 execMap(后端)优先;前端不持久化业务状态到 localStorage(换浏览器/清缓存/多端会不一致——用户 2026-08-26 明确否决该方案),仅在执行瞬间用纯内存 Map 防 UI 闪回。page 接口缺关键字段时会 console.warn('[执行医嘱] execution 记录缺少关键字段')——若刷新后状态回退为「待执行」,说明该接口未返回正确 execution 记录,需后端修接口,前端无法凭空持久elderly/doctorOrderExecution/execute 入库时 planTime 未按请求体毫秒戳精确写入,page 返回的 planTime 总是同一个固定值/当前时间,与前端展开值对不上。前端在 execute-doctor-order/index.vue buildRows 做了精确优先 + (entry,索引) 兜底两层匹配:
${orderType}-${orderEntryId}-${planTime}createTime 升序、row 按 planTime 升序,用各自桶内索引对齐console.warn('[执行医嘱] 检测到 N 条 execution.planTime 与前端展开值不一致...') 输出 {rowPlanTime, execPlanTime, key}console.info('[执行医嘱] execution 合并: 精确 X / 兜底 Y / 总行 N')planTime 精确入库Object.assign(form, JSON.parse(JSON.stringify(defaultForm)))
JSON.stringify({id:undefined, ...}) 会丢弃 undefined 字段(不写入 JSON 字符串)id/elderId keyObject.assign 只复制 source 自身可枚举属性 → target 上的 form.id 残留不变form.id = undefined; form.entries = [emptyEntry()]; ...),不依赖 JSON 拷贝。如果 defaultForm 不含 undefined 字段才能用 JSON 拷贝路径