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")。这就是顶部"打印执行单"点了没反应的原因
- 改动:
- 顶部
v-print="printAll"(修无效),printAll = {id: 'execPrintArea', popTitle: '医嘱执行单', preview: false, zIndex: 20002}
- 操作列加「打印」按钮(始终可见,
v-hasPermi="['doctor-order-execute:print']"),width 170→220
- 加单条打印区
#singlePrintArea(grid 2 列展示该行长者/床位/类型/状态/频次/给药时间/途径/计划时间/实际时间/执行护士/医嘱内容 + 跳过原因或备注 + 底部执行护士/核对护士签名横线)
- 加隐藏 anchor
<a ref="singlePrintRef" v-print="printOne">,handlePrintRow 通过 nextTick 后程序 .click() 触发
- import 加
nextTick
- 体验:两个打印并存——顶部"打印执行单"打当日汇总(护理台归档用),操作列"打印"打单条(护士取一张给执行人签名用)
- ESLint 0 错误
修正:两个打印都空白预览(根因=离屏 div)
- 现象:改对象写法后弹出打印对话框但内容是空白页
- 根因:打印区用了
position:absolute; left:-9999px 离屏 div。vue3-print-nb 把该 div 克隆进 iframe 后,负坐标把内容推到视口外 → 浏览器打印空白。项目内 30+ 个 Print.vue 的打印区都在可见的 <Dialog> 内,对话框打开时打印,无离屏写法
- 修复(
execute-doctor-order/index.vue):
- 删除离屏
#execPrintArea/#singlePrintArea div + 隐藏 anchor singlePrintRef/handlePrintRow/nextTick
- 改为一个可见
<el-dialog v-model="printDialogVisible"> 包裹打印区:v-if="printMode==='all'" 显示 #execPrintArea(汇总),v-else 显示 #singlePrintArea(单条,渲染 singlePrintRow)
- 打印区加
style="padding:12px 16px;color:#000;background:#fff"(scoped 样式 clone 到 iframe 会丢,故用 inline)
- 顶部按钮
v-print="printAll" → @click="openPrintDialog('all')";操作列打印 @click="openPrintDialog('single', row)"
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 到项目根目录;交付文档走用户指定位置或先询问