2026-08-26.md 5.7 KB

2026-08-26 工作日志

护士执行医嘱 - 跳过加原因弹窗

  • 文件:src/views/elderly/elder/doctor-orders/execute-doctor-order/index.vue
  • 改动:原「跳过」用 message.confirm 简单确认,改为独立 el-dialog 弹窗(标题"跳过执行")
    • 弹窗含:长者·床位 alert 提示(含医嘱内容)+ 计划时间 + 「跳过原因」必填 textarea(maxlength 200 / show-word-limit)
    • confirmSkip:原因 trim 后非空才放行,调 executeDoctorOrder(payload) 传 status: 2 + remark
    • 原因留痕写入 DoctorOrderExecution.remark,已跳过记录可在「查看」弹窗(ExecuteDialog)看到
  • ExecuteDialog.vue 未改(其 :disabled="isView" 下备注 textarea 已能展示已跳过记录的 remark)
  • 注意:handleSkip 不再用 message.confirm;executeDoctorOrder 同时承担"执行(status=1)"与"跳过(status=2)"两种写入,靠 payload.status 区分
  • ESLint 0 错误

修复顶部"打印执行单"无效 + 操作列加单条打印

  • 文件:src/views/elderly/elder/doctor-orders/execute-doctor-order/index.vue
  • 根因:v-print 写法错——之前传字符串选择器 v-print="'#execPrintArea'",但 vue3-print-nb 期望传 {id, popTitle, ...} 配置对象(项目内 30+ 处用法都是 v-print="print")。这就是顶部"打印执行单"点了没反应的原因
  • 改动:
    1. 顶部 v-print="printAll"(修无效),printAll = {id: 'execPrintArea', popTitle: '医嘱执行单', preview: false, zIndex: 20002}
    2. 操作列加「打印」按钮(始终可见,v-hasPermi="['doctor-order-execute:print']"),width 170→220
    3. 加单条打印区 #singlePrintArea(grid 2 列展示该行长者/床位/类型/状态/频次/给药时间/途径/计划时间/实际时间/执行护士/医嘱内容 + 跳过原因或备注 + 底部执行护士/核对护士签名横线)
    4. 加隐藏 anchor <a ref="singlePrintRef" v-print="printOne">,handlePrintRow 通过 nextTick 后程序 .click() 触发
    5. import 加 nextTick
  • 体验:两个打印并存——顶部"打印执行单"打当日汇总(护理台归档用),操作列"打印"打单条(护士取一张给执行人签名用)
  • ESLint 0 错误

修正:两个打印都空白预览(根因=离屏 div)

  • 现象:改对象写法后弹出打印对话框但内容是空白页
  • 根因:打印区用了 position:absolute; left:-9999px 离屏 div。vue3-print-nb 把该 div 克隆进 iframe 后,负坐标把内容推到视口外 → 浏览器打印空白。项目内 30+ 个 Print.vue 的打印区都在可见的 <Dialog> 内,对话框打开时打印,无离屏写法
  • 修复(execute-doctor-order/index.vue):
    1. 删除离屏 #execPrintArea/#singlePrintArea div + 隐藏 anchor singlePrintRef/handlePrintRow/nextTick
    2. 改为一个可见 <el-dialog v-model="printDialogVisible"> 包裹打印区:v-if="printMode==='all'" 显示 #execPrintArea(汇总),v-else 显示 #singlePrintArea(单条,渲染 singlePrintRow)
    3. 打印区加 style="padding:12px 16px;color:#000;background:#fff"(scoped 样式 clone 到 iframe 会丢,故用 inline)
    4. 顶部按钮 v-print="printAll" → @click="openPrintDialog('all')";操作列打印 @click="openPrintDialog('single', row)"
    5. openPrintDialog(mode,row) 设 printMode/singlePrintRow/printDialogVisible;footer 用两个互斥按钮各自 v-print="printAll"/printOne(绑固定对象,避免 computed 动态对象重复绑 click)
  • 经验:v-print 打印区绝对不能离屏,必须放在可见 Dialog 内(参考 long-doctor-order/Print.vue 范式)
  • ESLint 0 错误

产出后端设计规格文档(交付后端)

  • 文件:doctor-order-backend-spec.md(项目根目录)
  • 背景:用户要向后端说明医嘱执行模块怎么设计。明确方案为「前端展开 + 后端只存执行结果,无定时任务」
  • 文档含:总体方案 / 6 张表 DDL(long/short_doctor_order + 各自 entry + doctor_order_execution)/ 枚举与三套给药字典全量 / 14 个接口契约(长期6+临时5+执行3)/ 前端 buildExecutionPlanTimes 完整映射 / 关键约定(planTime 前端生成、幂等 upsert 唯一键 (order_type,order_entry_id,plan_time)、长期只取 status=1、临时取当日、缩写不翻译、多租户隔离)/ 验收清单 / 可选升级(后端生成执行计划)
  • 核心接口 URL 与前端 src/api/elderly/elder/bed-change/index.ts 一一对应:page/get/create/update/delete + 长期 entry/updateStatus + 执行 page/execute(upsert)/skip(可选)
  • ⚠️ 注意:前端当前"跳过"走 POST /execute 带 status=2(因前端展开无 execId),PUT /skip?id= 暂未使用,文档标注为可选

09:46 确认文档幂等内容 + 清理项目根

  • 用户问"upsert 幂等是否在 md 文件里"——实际已在文件 4 处体现:DDL uk_exec 唯一索引(140)、接口契约幂等说明(412)、关键约定第7条(449)、验收清单(460)
  • 应"只发文件没口头说"的顾虑,在文档末尾新增「第十节 后端重点须知」,集中强调:执行接口必须 upsert 幂等(护士端无前端防重、全靠后端唯一键)、跳过走 execute(status=2)、缩写不翻译、planTime 前端生成、多租户隔离
  • 文件实际位置:用户已发出的在微信缓存 D:/Users/chenjun/Documents/WXWork/1688856573655686/Cache/File/2026-08/doctor-order-backend-spec.md(项目根那次 Write 未真正落盘)。为可维护曾 cp 回项目根,但用户明确要求项目保持整洁、不要把交付文档放项目根,已删除项目根副本
  • 📌 偏好:非源码交付物(md/规格文档等)不要 Write 到项目根目录;交付文档走用户指定位置或先询问