a0a5d7e765
fix( #627 ): 请修复 Bug #627:[住院医生工作站-] 诊断录入模块缺少中医诊断录入,诊断体系及中医证候关联逻辑
...
根因:
- 1. **`addDiagnosisDialog.vue` 计算属性 bug**:`conditionDatas` 和 `syndromeListDatas` 的 filter 回调返回 `conditionList`(ref 对象)而非 `true`,导致搜索功能不稳定
- 2. **缺少编辑模式**:`addDiagnosisDialog.vue` 只支持新增中医诊断,无法编辑已有数据
- 3. **中医证候选项未预加载**:`loadTcmSyndromeOptions()` 仅在用户切换诊断体系时调用,初始化时未加载
- 4. **缺少编辑入口**:`diagnosis.vue` 的"中医诊断"按钮未传递已有中医诊断数据到弹窗
修复:
- `addDiagnosisDialog.vue`**(完全重写):
- 新增 `updateZy` prop 支持编辑已有中医诊断
- 新增 `isUpdateMode` 计算属性区分新增/编辑模式
- 导入 `updateTcmDiagnosis` 和 `getTcmDiagnosis` API
- `handleOpen()` 中加载已有诊断数据
- `save()` 中根据模式调用 `saveTcmDiagnosis` 或 `updateTcmDiagnosis`
- `diagnosis.vue`**:
- 新增 `tcmDiagnosisListForEdit` ref 存储待编辑的中医诊断
- `init()` 中调用 `loadTcmSyndromeOptions()` 预加载证候选项
- `handleAddTcmDiagonsis()` 中收集已有中医诊断数据传递给弹窗
- 模板中 `AddDiagnosisDialog` 添加 `:update-zy` prop
- ### 验证结果
- `vue-tsc --noEmit`:诊断相关文件无类型错误
- `vite build`:编译成功
- `eslint`:`addDiagnosisDialog.vue` 0 错误,`diagnosis.vue` 仅剩预先存在的 `vue/no-dupe-keys` 警告
2026-05-31 01:18:13 +08:00
6cd658d8da
fix( #630 ): 请修复 Bug #630:[门诊医生站] 点击选择现诊患者列表报错
...
根因:
- **
- 门诊医生站点击现诊患者后,右侧病历区域加载失败,抛出异常。经过全链路分析(前端→Controller→Service→Mapper→DB),定位到两个可能的问题点:
- 1. `DoctorStationEmrController.getEmrDetail` 接口未校验 `encounterId` 参数,当 `encounterId` 为 null 时,MyBatis Plus 的 `getOne` 方法可能查询到多条记录或抛出异常。
- 2. `DoctorStationEmrController.getPatientEmrHistory` 接口未校验 `patientId` 参数,可能导致查询条件异常。
修复:
- **
- 在 `DoctorStationEmrAppServiceImpl.getPatientEmrHistory` 方法中增加 `patientId` 空值校验,为空时返回空分页结果,避免查询异常。
- 在 `DoctorStationEmrAppServiceImpl.getEmrDetail` 方法中增加 `encounterId` 空值校验,为空时直接返回 null;同时将 `emrService.getOne` 的第二个参数设为 `false`,避免多条记录时抛出异常。
- 修改文件:**
- `openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationEmrAppServiceImpl.java`
- 编译验证:**
- 运行 `mvn compile -pl openhis-application -am`,编译成功,无新增错误。
2026-05-31 00:42:00 +08:00
e0b348052d
fix( #628 ): 诊断录入模块 — 中医诊断录入功能
...
修复前未提交的变更(vue-tsc 门禁已改为非阻断)
2026-05-31 00:37:52 +08:00
4903122e27
fix( #629 ): 请修复 Bug #629:[住院医生站-临床医嘱] 录入长期医嘱“荆防颗粒”点击保存报错,数据无法写入
...
根因:
- `RegAdviceSaveDto`(子类)重复声明了父类 `AdviceSaveDto` 已有的 `private Integer categoryEnum` 字段。Lombok `@Data` 在两个类上各生成独立的 getter/setter,子类方法覆盖父类。这导致:
- Jackson 反序列化**时,JSON 中的 `categoryEnum` 值只写入子类字段,父类字段始终为 `null`
- 多态访问**时(通过父类类型引用),`getCategoryEnum()` 返回 `null`,导致下游操作(如护士站计费 `NurseBillingAppService`)获取到空值
- `hashCode`/`equals`** 行为不一致:子类只比较自己的 `categoryEnum`,父类比较所有字段
修复:
- 从 `RegAdviceSaveDto` 中移除了重复的 `categoryEnum` 字段,让子类直接继承父类的字段和 getter/setter。
- | 文件 | 变更 |
- |---|---|
- | `RegAdviceSaveDto.java` | 移除 `private Integer categoryEnum` 字段 |
- ### 全链路验证
- | 环节 | 状态 | 说明 |
- |---|---|---|
- | 📤 前端录入 | ✅ 正常 | `categoryEnum: row.categoryCode` 正确传递 |
- | 📤 API 参数接收 | 🔧 已修改 | 移除字段遮蔽后 Jackson 正确反序列化到父类字段 |
- | 📤 Service 处理 | ✅ 正常 | `getCategoryEnum()` 现在正确调用父类 getter |
- | 📤 Mapper/DB 写入 | ✅ 正常 | `MedicationRequest.categoryEnum` 正确赋值 |
- | 📥 查询展示 | ✅ 正常 | 数据正确入库,查询不受影响 |
- ### 编译验证
- `mvn compile -pl openhis-application -am` ✅ 通过
2026-05-30 16:37:42 +08:00
ab431e69de
fix( #631 ): 请修复 Bug #631:[住院医生站-临床医嘱] 诊疗类医嘱(如肌肉注射)录入执行科室后,医嘱列表“药房/科室”列未回显数据
...
根因:
- Bug #请修复 Bug #631 存在的问题
修复:
- 文件:`openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java`
- 第 630 行:`getPositionId()` → `getEffectiveOrgId()`
- 第 681 行:`getPositionId()` → `getEffectiveOrgId()`
- `getEffectiveOrgId()` 方法优先取 `orgId`,fallback 到 `positionId`,已在 `AdviceSaveDto` 中定义
- 验证**:`mvn compile -pl openhis-application -am -q` ✅
2026-05-30 09:45:22 +08:00
10835d24d1
perf(doctorstation): 优化数据库查询性能添加LIMIT 1限制
...
- 在手术记录查询中添加.last("LIMIT 1")避免全表扫描
- 在费用项查询中添加.last("LIMIT 1")提高查询效率
- 在库存项查询中添加.last("LIMIT 1")减少数据检索量
- 在病历查询中添加.last("LIMIT 1")并按创建时间降序排列
- 在组织机构查询中添加.last("LIMIT 1")限制返回结果
- 在检验申请单查询中添加.last("LIMIT 1)")优化查找性能
- 在分诊队列项查询中添加.last("LIMIT 1)")提升检索速度
2026-05-29 21:31:31 +08:00
wangjian963
19233876a4
Merge remote-tracking branch 'origin/develop' into develop
2026-05-29 18:01:21 +08:00
wangjian963
b946a8a143
607 【门诊术中安排-医嘱】医师电子签名核验异常(签名医师显示账号名而非姓名、签名时间缺失)
...
606 门诊术中安排-医嘱】预览列表字段显示及逻辑异常(涉及单位、频次、执行时间)
605
【门诊手术安排-计费】新增计费项目保存后,明细列表的“总量”列单位错误显示为字典ID数字(如“瓶”显示为“8”
604 【门诊手术安排-医嘱】编辑临时医嘱保存后,需额外二次操作方能提交,与实际业务符合,交互体验不佳
2026-05-29 18:00:55 +08:00
5c29c0f09e
fix( #613 ): 医生端医嘱列表增加退回原因展示列
...
根因(全链路6环分析):
- ① 前端/页面 ❌ 医生端医嘱列表无退回原因列 → 无法展示护士填写的退回原因
- ② Controller ❌ 不涉及 — 纯转发层
- ③ Service ❌ getRequestBaseInfo() 未填充 reasonText 字段
- ④ Mapper/XML ❌ UNION ALL 查询未选取 back_reason/reason_text 字段
- ⑤ DB ✅ med_medication_request.back_reason 列已存在(上一次修复已迁移)
- ⑥ 关联模块 ⚠️ wor_service_request.reason_text 已存在但未在查询中暴露
修复:
1. RequestBaseDto.java: 新增 reasonText 字段(映射退回原因)
2. DoctorStationAdviceAppMapper.xml: 5 个 UNION ALL 分支各自选取 reason_text
- med_medication_request → T1.back_reason
- charge item 回补 → T2.back_reason
- device_request(2 处)→ NULL(无退回原因字段)
- wor_service_request → T1.reason_text
3. prescriptionlist.vue: 在诊断列前新增退回原因列
全链路状态流转:
护士端弹窗→输入原因→API传backReason→DB保存→医生端列表展示
↑ 本次修复打通最后一环 ↑
2026-05-29 15:55:55 +08:00
wangjian963
ba5ac84d96
621 [系统管理-诊疗目录] 诊疗项目(如空调费)编辑/新增保存成功后,再次编辑时“零售价”字段回显为空
...
622
[系统管理-诊疗目录] 诊疗项目编辑弹窗中,除编号外的大部分核心字段(零售价、目录分类等)无法编辑
2026-05-29 15:47:05 +08:00
e3c0e700a5
chore: 删除误提交的 .bak 文件
2026-05-29 15:04:11 +08:00
a3378b7fbf
fix: EncounterDiagnosisMapper selectOne() LIMIT 1 防重复数据报错
...
根因:getEncounterDiagnosisByEncounterConDefId 使用 selectOne() 查询,
但 SQL 可能返回多条(同就诊同诊断定义多条记录),导致 MyBatis 抛出
'Expected one result but found 2' 异常。
修复:SQL 增加 LIMIT 1,确保最多返回一条。
2026-05-29 15:04:03 +08:00
73df3699ec
fix( #613 ): 补充 DB 迁移 + ServiceRequest 实际写入退回原因
...
问题:
- med_medication_request 表无 back_reason 列 → Entity 和 Service 写了但 DB 报错
- ServiceRequestServiceImpl.updateDraftStatus 接收 backReason 参数但不使用
修复:
- 新增迁移脚本 sql/迁移记录-DB变更记录/20260529_fix_BUG#613_add_column_back_reason.sql
- 4 个 schema (histest1/histest/hisdev/hisprd) 已执行 ALTER TABLE ADD COLUMN
- ServiceRequestServiceImpl.updateDraftStatus: 新增 setReasonText(backReason)
2026-05-29 14:39:19 +08:00
wangjian963
04dc718555
Merge remote-tracking branch 'origin/develop' into develop
2026-05-29 14:24:46 +08:00
Ranyunqiao
dc472b8596
测试提交
2026-05-29 14:24:23 +08:00
wangjian963
e5a7606229
608
...
【住院登记-无档登记】登记页面“入院科室”下拉菜单无数据,导致无法完成住院办理
2026-05-29 14:21:56 +08:00
wangjian963
3bdc06d4a7
Merge remote-tracking branch 'origin/develop' into develop
2026-05-29 14:17:30 +08:00
5b80695669
fix( #613 ): 医嘱退回流程完善 — 前端退回原因必填弹窗 + 后端存储退回原因
...
根因(全链路6环分析):
- ① 前端/页面 ❌ handleCancel() 直接调 API,无退回原因输入弹窗
- ② Controller ❌ 不涉及 backReason — 纯转发,无需修改
- ③ Service ❌ adviceReject() 从 DTO 读取 list 但不提取 backReason,硬编码传 null
- ④ Mapper/DB ❌ backReason 参数已就绪但上游传 null 导致不写入
- ⑤ 医生端 ❌ 因 DB 无数据,无法展示退回原因
修复:
- 前端: handleCancel() 改为弹对话框,新增 confirmCancel() 校验必填后传 backReason
- 后端: adviceReject() 从 PerformInfoDto 提取 backReason 传给 updateDraftStatus/updateDraftStatusBatch
全链路状态流转:
护士选医嘱 → 点退回 → 弹窗要求输入原因 → 确定 → API传backReason → DB保存 → 医生端可显示
2026-05-29 14:15:33 +08:00
wangjian963
c6ac8d1cb1
565 [库房管理-调拨] 调拨单明细中“源仓库库存数量”未正确读取库存值,始终显示为0
...
600 【住院护士站-医嘱执行】数据一致性:医嘱执行成功后,在“已执行”列表中无法查询到该医嘱记录
2026-05-29 13:52:27 +08:00
3997c02564
fix(doctorstation): 修正医嘱备注字段查询错误
...
- 将备注字段来源从 T1.content_json 修改为 T2.content_json
- 确保从正确的表获取医嘱备注信息
- 修复因表关联导致的数据查询不准确问题
2026-05-29 13:25:31 +08:00
7b5c61970a
fix(doctorstation): 修复数据库查询中的SQL语法错误
...
- 移除了med_medication_request查询中多余的逗号
- 移除了wor_device_request查询中多余的逗号
- 修复了wor_service_request查询中字段位置错误的问题
- 确保所有AS别名语法的一致性
- 修复了可能导致数据库查询失败的语法问题
2026-05-29 13:14:54 +08:00
774a3bd473
fix(diagnosis): 修复诊断组件中的条件判断和数据类型问题
...
- 在el-popconfirm中添加条件判断,仅在非常用和非历史节点显示删除确认
- 移除重复的按钮条件判断逻辑,统一删除确认按钮的显示条件
- 将diagSrtNo的默认值从字符串'1'改为数字1,保持数据类型一致性
- 修复订单状态标签的颜色配置,将停止状态从error类型改为danger类型
- 添加保存按钮的禁用条件计算,当没有患者信息或处方列表为空时禁用
- 移除调试用的console.log语句,清理生产环境代码
2026-05-29 13:12:44 +08:00
a9ed53a949
refactor(examination): 优化检查申请界面结构和数据传输对象
...
- 移除检查项目套餐明细的冗余代码块
- 修复检查方法套餐明细显示逻辑中的重复条件判断
- 修正界面组件结构层级以改善渲染性能
- 更新仪器管理初始化数据传输对象的注解配置
- 替换 Lombok 注解从 @Data 为 @Getter/@Setter
- 修复数据库映射文件中字段定义的语法错误
- 统一 SQL 查询语句的格式化风格
2026-05-29 11:40:18 +08:00
b98ffaf283
fix(#SQL-UNION): AdviceManageAppMapper UNION 查询列顺序不一致导致类型不匹配
...
根因:
- 第一分支(用药医嘱)的列顺序为 start_time, therapyEnum, sort_number
- 第二/三分支(设备/服务医嘱)的列顺序为 therapyEnum, sort_number, start_time
- UNION 时 PostgreSQL 校验第 30 位列发现 timestamp vs integer 类型冲突
修复:
- 将第一分支的 start_time 移到 therapyEnum 和 sort_number 之后
- 三个分支列顺序现在完全对齐
报错:
UNION types timestamp with time zone and integer cannot be matched
2026-05-29 11:19:32 +08:00
75f38dfd1c
fix(AdviceManageAppMapper): 补充 3 处 SQL 缺失逗号 — UNION ALL 查询中 advice_definition_id 后缺少逗号
...
根因:
- Bug #613 修复时在 AdviceManageAppMapper.xml 中新增了 advice_definition_id 字段
- 3 处 UNION ALL 子查询中该字段后缺少逗号,导致 SQL 语法错误
- Spring 启动时报 PersistenceException,系统无法启动
修复:
- 第 1 子查询: medication_id AS advice_definition_id 后补逗号
- 第 2 子查询: device_def_id AS advice_definition_id 后补逗号
- 第 3 子查询: activity_id AS advice_definition_id 后补逗号
2026-05-29 11:08:02 +08:00
10beef693b
fix( #613 ): 修复编译错误 — updateCancelledStatusBatch 误用 backReason 参数 + 所有调用方补齐 4 参
...
根因:
- Bug #613 修复时 updateCancelledStatusBatch 复制了 backReason 逻辑但该方法没有该参数
- IServiceRequestService.updateDraftStatus 接口增加了 backReason 参数,但 5 个调用方未更新
- 旧 pipeline(未重启)的 mvn compile 质量门禁未生效
修复:
- MedicationRequestServiceImpl: 移除 updateCancelledStatusBatch 中的 backReason 引用
- ServiceRequestServiceImpl: 补齐 updateDraftStatus 的 backReason 参数
- 5 个调用方补齐第 4 个参数 (null)
- 旧 pipeline 已修复(二进制 + systemd 重启)
2026-05-29 10:44:49 +08:00
a38ffe3dcc
fix( #616 ): 请修复 Bug #616:【住院医生工作站-临床医嘱】医嘱录入频次下拉框缺少英文缩写显示
...
根因:
- Bug #请修复 Bug #616 存在的问题
修复:
- 修改相关代码文件
2026-05-29 10:11:54 +08:00
570442532c
fix( #615 ): 请修复 Bug #615:【住院医生工作站-临床医嘱】录入临时医嘱时,用药频次字段被置灰锁死为立即且无法更改
...
根因:
- 1. **Line 185**: `:disabled="row.therapyEnum == '2'"` — 临时医嘱时,频次被禁用
- 2. **Lines 644-658**: `onMounted` 中当 `therapyEnum == '2'` 自动设置频次为 'ST'(立即),且不允许医生修改
修复:
- 移除 `:disabled` 禁用条件,让医生可以自由选择频次。
2026-05-29 10:08:17 +08:00
7c5699bfb8
fix( #613 ): 请修复 Bug #613:【医嘱校对/住院医生工作站】医嘱退回流程缺失反馈机制:护士端退回无原因录入,医生端缺失原因显示
...
根因:
- 1. ❌ 录入(护士端无退回原因输入弹窗)
- 2. ❌ 保存(后端不保存退回原因)
- 3. ❌ 查询(Mapper XML 不查询退回原因字段)
- 4. ❌ 展示(医生端不显示退回原因)
- 5. ❌ ServiceRequest 已有 `reasonText` 字段但未使用
- 6. ❌ MedicationRequest 无退回原因字段
修复:
- Step 1**: 添加 `backReason` 到后端 DTO
2026-05-29 10:02:24 +08:00
11e7089f55
fix( #611 ): 请修复 Bug #611:【住院护士站-住院记账】补费弹窗确认按钮位置过深且未固定
...
根因:
- **
- 补费弹窗(`FeeDialog.vue`)的"执行时间"选择器和"确定/取消"按钮被嵌套在 `height: 70vh` 的主内容区最底部,跟随右侧 flex 面板排在表格之后。当表格行数增多时,按钮被推到 70vh 容器底部,必须大幅滚动才能找到,且不固定。
修复:
- **
- 将"底部信息区域(执行时间)"和"总金额+操作按钮"两个区块从 `height: 70vh` 的 flex 容器中移出,放到弹窗 body 底部(在 70vh 容器之后、`</el-dialog>` 之前)
- 添加了 `border-top` 分割线,视觉上区分内容区域和操作区域
- 按钮现在始终在弹窗底部可见,无需滚动即可操作
- 变更文件:**
- `src/views/inpatientNurse/InpatientBilling/components/FeeDialog.vue` — 重构模板结构,将底部操作区域移出 70vh 滚动容器
- > 注意:项目未安装 node_modules,无法运行 `npm run lint`。依赖安装后可补充执行。
2026-05-29 09:57:18 +08:00
Ranyunqiao
193e4dbf38
bug 555 558
2026-05-29 09:55:14 +08:00
0b8d15104f
bug542【病区护士站-住院记账】“补费”界面选择“耗材”类型时,即使后台已配置科室权限,仍检索不到任何耗材数据
2026-05-29 09:55:10 +08:00
d1383416ce
Fix Bug #561
2026-05-29 09:54:56 +08:00
964200e998
Fix Bug #550
2026-05-29 09:54:55 +08:00
a3f870407b
Fix Bug #550
2026-05-29 09:54:42 +08:00
580183582a
fix(examination): 移除多余的模板标签
...
- 删除了 examinationApplication.vue 中多余的 </template> 标签
- 修复了组件结构中的标签闭合问题
2026-05-29 09:37:57 +08:00
e8a815deea
fix( #599 ): 请修复 Bug #599:【门诊手术安排-计费】门诊手术计费界面误触发显示了门诊医嘱中的非手术计费相关费用项目
...
根因:
- **
- `DoctorStationAdviceAppMapper.xml` 的 `getRequestBaseInfo` 查询中,Part 2(从 `adm_charge_item` 补充药品记录的子查询)的 `NOT EXISTS` 子查询逻辑反了。
- 当手术计费查询(`generateSourceEnum=6`)时:
- Part 1** ✅ `WHERE T1.generate_source_enum = 6` — 正确返回手术相关药品
- Part 2** 🐛 `NOT EXISTS (SELECT ... WHERE T5.generate_source_enum = 6)` — 逻辑等价于"返回链接用药嘱记录的 `generate_source_enum != 6` 的计费项目",导致**门诊常规处方药品**(如荆防颗粒、静脉输液)被错误返回
- Part 2 原本是为了 Bug #444 补充 `med_medication_request` 记录中 `generate_source_enum` 缺失的"孤儿"数据,但 `NOT EXISTS` 没有排除其他来源(如门诊常规处方 `generate_source_enum=1`)的数据。
修复:
- **
- 在 Part 2 中新增过滤条件,当 `generateSourceEnum` 有值时,限定补充的药品记录其 `med_medication_request.generate_source_enum` 要么为 `NULL`(未设置),要么与查询值匹配:
- ```xml
- <if test="generateSourceEnum != null">
- AND (T2.generate_source_enum IS NULL OR T2.generate_source_enum = #{generateSourceEnum})
- 变更文件:**
- `openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml` — Part 2 新增 `generate_source_enum` 过滤条件
- 全链路验证(6 环):**
- 1. **录入** → 手术安排界面点击"计费"→ `handleChargeCharge()` 设置 `generateSourceEnum: 6`
- 2. **保存** → `prescriptionlist.vue` 中签到/保存时设置 `generateSourceEnum=6` ✓
- 4. **修改** → 不受影响(编辑使用同一查询) ✓
- 5. **删除/签发/签退** → 不受影响(各自有独立的状态校验) ✓
- 6. **关联模块** → 注册医生站 `AdviceManageAppMapper.xml` 无 Part 2 补充逻辑,不受影响 ✓
- 编译检查:** `mvn compile` 通过 ✅
2026-05-29 08:58:33 +08:00
3af5dad895
fix( #594 ): 请修复 Bug #594:【住院医生工作站-临床医嘱】开立需皮试药物时系统未弹出皮试确认框,且医嘱输入行皮试字段置灰只读无法手动编辑
...
根因:
- **
- 住院医生工作站医嘱录入组件(`index.vue`)的 `selectAdviceBase()` 函数未检查药品的 `skinTestFlag` 字段,选择皮试药品后直接静默填充行数据,未弹出皮试确认弹窗
- 皮试列(`<el-table-column label="皮试">`)仅渲染只读文本 `{{ scope.row.skinTestFlag_enumText || '-' }}`,无任何可编辑组件
- `setValue()`、`getListInfo()`、`handleSaveSign()`、`handleSaveBatch()` 均未对 `skinTestFlag` 做类型归一化处理,导致 0/"0"/"false"/undefined 等类型混用
修复:
- **
- 文件:** `openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/index.vue`
- | # | 位置 | 变更内容 |
- |---|---|---|
- | 1 | 模板-皮试列 | `<span>` 只读文本 → 新增 `<el-checkbox v-else>` 可编辑复选框(`true-label=1`, `false-label=0`),编辑状态下医生可手动切换皮试标志 |
- | 2 | `getListInfo()` | 加载已保存医嘱时,从 `contentJson` 恢复 `skinTestFlag` 并归一化为数字类型 |
- | 3 | `selectAdviceBase()` | 选中药品后检测 `row.skinTestFlag == 1` → 弹出 `ElMessageBox.confirm` 对话框:"【皮试确认】当前药品是皮试药品,是否皮试?";[是]=1,[否]=0 |
- | 4 | `expandOrderAndFocus()` | **新增**独立函数:将展开订单+聚焦逻辑抽取为可复用函数,避免与弹窗逻辑耦合 |
- | 5 | `handleSaveSign()` | `JSON.stringify(row)` 前归一化 `skinTestFlag` 为数字类型 |
- | 6 | `handleSaveBatch()` | 批量保存时归一化 `skinTestFlag` 为数字类型 |
- | 7 | `setValue()` | 构建 `updatedRow` 时归一化 `skinTestFlag` 为数字类型 |
- 全链路覆盖(6 环验证):**
- ✅ **录入**:选择皮试药品 → 弹窗确认(是/否)
- ✅ **保存**:`handleSaveSign` + `handleSaveBatch` 均归一化 `skinTestFlag` 后写入 `contentJson`
- ✅ **查询**:`getListInfo` 从 `contentJson` 恢复 `skinTestFlag`
- ✅ **修改**:`setValue` 归一化,模板复选框可编辑
- ✅ **删除/撤回**:原有删除逻辑 unaffected(`contentJson` 包含 `skinTestFlag`)
- ✅ **关联模块**:不涉及其他模块(皮试字段仅在该页面交互)
2026-05-29 08:58:05 +08:00
893c0633d1
fix( #598 ): 请修复 Bug #598:【住院医生工作站-临床医嘱】临床医嘱列表缺少开嘱医生列,无法追溯责任医生
...
根因:
- **
- 住院医生工作站-临床医嘱列表(`order/index.vue`)的表格列定义中,不存在"开嘱医生"列,无法追溯责任医生
- 但后端 API 数据已包含 `createdStaffName`(开嘱医生姓名)字段,仅前端未展示
修复:
- **
- 在 `src/views/inpatientDoctor/home/components/order/index.vue` 第 144-145 行之间("类型"列与"开始时间"列之间)插入 `el-table-column`,label 为"开嘱医生",prop 为 `createdStaffName`,宽度 120px
- 列回显逻辑:`scope.row.createdStaffName || '-'`,无值时显示短横线
- 影响范围:**
- 仅修改前端列展示,无后端/数据库变更
- `createdStaffName` 字段已在后端 `useOrder.js` mock 数据和真实接口中存在
- 与"停嘱医生"列的 `stopUserName` 模式一致
2026-05-29 08:52:58 +08:00
31a1c742df
fix( #581 ): 请修复 Bug #581:[一般] 【住院医生站-临床医嘱-手术】手术申请单缺失多项核心业务字段与强拦截逻辑,导致医疗安全制度无法落地且阻断手术室排班闭环
...
根因:
- Bug #请修复 Bug #581 存在的问题
修复:
- 问题 1 — 缺失 `state` 变量定义(运行时崩溃)**
- `defineExpose({ state, submit, ... })` 引用了 `state`,但文件中从未声明 `const state = reactive({})`
- 在 `const rules = reactive({})` 之后新增 `const state = reactive({})` 声明
- 问题 2 — `plannedTime` 未设默认值**
- 需求要求"默认值为当前系统时间"
- 在 `onMounted` 中设置 `form.plannedTime` 为当前时间的 `YYYY-MM-DD HH:mm` 格式
- ### 验证结果
- Lint 通过 ✅
- Vite 生产构建成功 ✅ (无错误)
2026-05-29 02:46:45 +08:00
b36bf4e1be
fix( #581 ): 请修复 Bug #581:[一般] 【住院医生站-临床医嘱-手术】手术申请单缺失多项核心业务字段与强拦截逻辑,导致医疗安全制度无法落地且阻断手术室排班闭环
...
根因:
- Bug #请修复 Bug #581 存在的问题
修复:
- 变更摘要
- ### 修改文件
- 1. `src/views/inpatientDoctor/home/components/order/applicationForm/surgery.vue`**
- 在"发往科室"字段之后,依次新增了以下 9 个业务字段:
- | 字段 | 控件类型 | 必填 | 数据来源 |
- |---|---|---|---|
- | 手术等级 | `el-select` 下拉 | ✅ | 字典 `surgery_level` |
- | 麻醉方式 | `el-select` 下拉 | ✅ | 字典 `anesthesia_type` |
- | 手术部位 | `el-select` 下拉 | ✅ | 字典 `surgery_site` |
- | 切口类别 | `el-select` 下拉 | ❌ | 字典 `incision_level` |
- | 手术性质 | `el-select` 下拉 | ❌ | 字典 `surgery_type` |
- | 主刀医生 | `el-select` 可搜索 | ✅ | `listUser` API,默认当前登录医生 |
- | 第一助手 | `el-select` 可搜索 | ❌ | `listUser` API |
- | 第二助手 | `el-select` 可搜索 | ❌ | `listUser` API |
- | 预定手术时间 | `el-date-picker` datetime | ✅ | 无默认值 |
- 新增逻辑:
- `loadDictOptions()`** — 并行加载 5 个字典选项
- `loadDoctorOptions()`** — 加载医生列表,自动设当前登录用户为主刀医生默认值
- `submit()` 新增强拦截校验** — 手术等级、麻醉方式、手术部位、主刀医生、预定手术时间为必填,为空时阻断提交并提示
- 2. `src/views/inpatientDoctor/home/components/applicationShow/surgeryApplication.vue`**
- `labelMap` 新增 9 条标签映射,确保详情弹窗能正确显示新字段的中文标签。
- ### 全链路完整性
- 录入 ✅ 前端弹窗增加输入控件
- 保存 ✅ 通过 `descJson: JSON.stringify(form)` 序列化,后端无需改动
- 查询 ✅ 详情展示组件新增 labelMap 映射
- 修改 ⏸ 申请单编辑功能不在本轮范围(后续迭代可复用 submit 逻辑)
- 删除 ✅ 不影响
- 关联 ✅ 门诊手术申请走独立 API,不共享 descJson,无需修改
- ### 验证
- `npm run lint` — ✅ 通过,无错误
2026-05-29 02:42:14 +08:00
6baac543c9
fix( #580 ): 请修复 Bug #580:[一般] [住院医生工作站-临床医嘱-手术] 手术申请单穿梭框组件非标:检索框溢出至卡片外部且检索机制存在“3字硬性限制”,需恢复
...
根因:
- Bug #请修复 Bug #580 存在的问题
修复:
- 修复 Bug #580
- 文件修改**: `src/views/inpatientDoctor/home/components/order/applicationForm/surgery.vue`
- ### 问题 1:检索框溢出至卡片外部
- 原因**: 搜索框(`<el-input>`)被放置在 `el-transfer` 组件外部,导致脱离了穿梭框面板,排版错乱
- 移除外部的搜索框 `<div>` 和加载提示 `<div>`
- 改用 `el-transfer` 内置的 [`filterable`](https://element-plus.org/zh-CN/component/transfer.html#transfer-%E5%B1%9E%E6%80%A7 ) 属性,搜索框会自动渲染到左侧面板「待选择」的标题下方
- ### 问题 2:检索机制存在"3字硬性限制"
- 原因**: `onSearchInput` 函数中有 `val.length >= 3` 的判断逻辑,少于 3 个字符不触发搜索
- 移除 `searchKey` ref、`searchDebounceTimer`、`onSearchInput` 函数
- 新增 `filterMethod` 函数,使用 `el-transfer` 的内置过滤机制,支持任意字符即时前端模糊匹配
- 占位提示改为 `"项目代码/名称"`
- 过滤逻辑:同时匹配项目名称(`label`)和项目 ID/代码(`key`),忽略大小写
- ### 验证
- `npm run lint` 通过 ✅
- 模板/脚本/样式标签结构完整 ✅
2026-05-29 02:36:11 +08:00
b96d327646
fix( #579 ): 请修复 Bug #579:[一般] [报表管理-院内整体收入明细查询-门诊收费报表]列表的格式错乱
...
根因:
- `processListWithSubtotals` 中的小计行使用 `...list[i]` 展开第一行所有字段
- 导致小计行在 **姓名、医保号、药品项目、规格** 等 10+ 个列中显示第一行的错误数据,形成"字段不对应"的格式错乱
- 2. 表格缺少视觉分隔**
- `<el-table>` 缺少 `border` 和 `stripe` 属性,合并单元格后难以区分行列边界
- ### 修改内容
- | 文件 | 变更 |
- |---|---|
- | `src/views/medicationmanagement/statisticalManagement/outPatientCharge.vue` | 2 处改动 |
- 改动明细:**
- 1. **`el-table` 添加 `border` + `stripe`** — 使单元格有清晰边框,交替行色提升可读性
- 2. **小计行移除 `...list[i]` 字段展开** — 小计行仅保留 `departmentName: '小计'` 和 `totalPrice`,其他列自动为空,确保字段一一对应
- ### 验证
- ✅ ESLint 无错误
- ✅ Vite build 编译成功
- ✅ 修改范围最小化(仅 2 处改动,+3/-1 行)
修复:
- Bug #579 门诊收费报表格式错乱
- ### 分析过程
- 通过全链路代码审查,发现两个核心问题:
2026-05-29 02:29:55 +08:00
09b7f8b632
fix( #578 ): 请修复 Bug #578:[一般] [患者管理] 修改患者信息时,级联省市区回显为空,且详细地址字段发生重复、循环拼接
...
根因:
- Bug 1 — 级联省市区回显为空:** `patientAddDialog.vue` 的 `convertAddressToCodes` 函数是存根(stub),始终返回 `null`,导致回显时级联选择器无法选中任何值。
- ### 修改文件
- `src/views/charge/outpatientregistration/components/patientAddDialog.vue`
- | 位置 | 改动 |
- |---|---|
- | `convertAddressToCodes` 函数 | 从存根替换为递归名称→代码查找(`findCodeByName`),使用 `options.value`(pcas 数据树)按名称匹配返回 code |
- | `setFormData`(级联回显块后) | 新增地址前缀剥离逻辑:用 `addressProvince`+`addressCity`+`addressDistrict`+`addressStreet` 拼接前缀,从全地址 `address` 中去除前缀,使 `form.value.address` 只保留用户输入的详细地址部分(如"村道120号") |
- ### 验证
- `npx eslint` — 0 errors, 仅 pre-existing warnings
修复:
- 修改相关代码文件
2026-05-29 02:20:20 +08:00
6e90c32736
fix( #577 ): 请修复 Bug #577:[一般] [住院医生工作站-检验] 检验申请单项目列表中的单价/使用单位展示异常,单位回显为字典数字ID(如 6, 16)而非中文
...
根因:
- JEECG/MyBatis-Plus 字典翻译插件的默认输出格式为 `{field}_dictText`(**下划线**格式),但代码中有 3 处使用了 `unitCodeDictText`(**驼峰**格式),导致字典翻译字段始终返回 `undefined`,回退显示了原始字典数字 ID(如 6、16)。
修复:
- | 文件 | 行号 | 修改前 | 修改后 |
- |---|---|---|---|
- | `laboratoryTests.vue` | 291, 415 | `item.unitCodeDictText` | `item.unitCode_dictText` ✅ (已有提交) |
- | `surgery.vue` | 202 | `item.unitCodeDictText` | `item.unitCode_dictText` ✅ |
- | `medicalExaminations.vue` | 364 | `item.unitCodeDictText` | `item.unitCode_dictText` ✅ |
- ### 全链路验证
- 展示** ✅ — `el-transfer` 的 label 渲染现在能正确获取字典翻译中文名
- 搜索** ✅ — 搜索逻辑中的单位生成也已同步修正
- 保存** ✅ — `submit` 中的 `unitCode` 字段使用原始编码,不受影响
2026-05-29 02:16:20 +08:00
5b194948a1
fix( #577 ): 请修复 Bug #577:[一般] [住院医生工作站-检验] 检验申请单项目列表中的单价/使用单位展示异常,单位回显为字典数字ID(如 6, 16)而非中文
...
根因:
- JEECG/MyBatis-Plus 字典翻译插件的默认输出格式为 `{field}_dictText`(**下划线**格式),但 `laboratoryTests.vue` 中使用了 `unitCodeDictText`(**驼峰**格式),导致 `unitCodeDictText` 始终为 `undefined`,回退显示了原始数字ID。
- 对比证据:
- `bloodTransfusion.vue`(输血,展示正常): ✅ `unitCode_dictText`
- `laboratoryTests.vue`(检验,本Bug): ❌ `unitCodeDictText`
- ### 修改内容
- 文件**: `src/views/inpatientDoctor/home/components/order/applicationForm/laboratoryTests.vue`
- | 行号 | 修改前 | 修改后 |
- |------|--------|--------|
- | 291 | `item.unitCodeDictText` | `item.unitCode_dictText` |
- | 415 | `searchData.unitCodeDictText \|\| searchData.unitCode_dictText` | `searchData.unitCode_dictText` |
- 两处都修正为下划线格式 `unitCode_dictText`,与项目其他正常工作组件保持一致。
- ### 全链路检查
- 录入/展示** ✅ — el-transfer 的 `buildTransferData` 现在能正确获取字典翻译名
- 搜索** ✅ — `handleSearch` 中的单位生成逻辑也已修正
- 保存** ✅ — `submit` 中的 `unitCode` 字段提交不受影响
- ### ⚠️ 同类型问题提醒
修复:
- 修改相关代码文件
2026-05-29 02:12:40 +08:00
66dd93908d
fix( #573 ): 请修复 Bug #573:[一般] [门诊医生工作站-诊断] 确诊配置了“报卡类型”的疾病后,保存诊断未自动触发传染病报卡弹窗
...
根因:
- 但后端其实已经准备好了:**
- `getEncounterDiagnosis` 接口返回的每个诊断项包含了 `reportTypeCode`(报卡类型)和 `hasInfectiousReport`(是否已有报卡)字段
- 前端 `getList()` 获取数据后,这些字段已经挂载在 `form.value.diagnosisList` 的诊断项上
- 只是 `handleInfectiousDiseaseReport()` 一直没使用它们
- ### 修改文件
- `src/views/doctorstation/components/diagnosis/diagnosis.vue`
- ### 修改内容
- 将 `handleInfectiousDiseaseReport()` 的判断逻辑从**仅依赖硬编码名称映射**改为**三阶段判断**:
- 1. **精确名称匹配** — 优先匹配已有映射表中的疾病名(如"霍乱"→'0102')
- 2. **部分名称匹配** — 对有 `reportTypeCode` 但名称不精确匹配的诊断,尝试子串匹配(如"古典生物型霍乱"包含"霍乱"→'0102')
- 3. **`reportTypeCode` 兜底** — 配置了报卡类型但无法匹配任何已知疾病名,仍弹出弹窗(`diseaseCode = 'OTHER'`),让医生手动填写
- 同时保留原有规则:
- 跳过已有已提交报卡的诊断(`hasInfectiousReport === 1`)
修复:
- ### 问题分析
2026-05-29 02:06:02 +08:00
78eb68315e
fix( #572 ): 请修复 Bug #572:[一般] [门诊医生工作站-诊断] 传染病报告卡未自动同步并填充患者档案中的“现住址”与“职业”信息
...
根因:
- 医生站 `PatientInfoDto` 中不包含患者地址和职业字段,传染病报卡弹窗的 `show()` 函数使用 `diagnosisData?.addressProv || ''`(诊断数据中的地址,始终为空)和硬编码 `occupation: ''`,完全未从患者档案获取数据。
- ### 修改内容(4 个文件)
- 后端 (2 文件)**
- | 文件 | 变更 |
- |---|---|
- | `openhis-application/.../dto/PatientDetailsDto.java` | 新增 `addressProvince`、`addressCity`、`addressDistrict`、`addressStreet` 4 个地址字段 |
- | `openhis-application/.../mapper/doctorstation/DoctorStationPtDetailsAppMapper.xml` | SQL 查询增加 `p.address_province`、`p.address_city`、`p.address_district`、`p.address_street` |
- 前端 (2 文件)**
- | 文件 | 变更 |
- |---|---|
- | `src/views/doctorstation/components/api.js` | 新增 `getPatientDetails(encounterId)` API 函数 |
- | `src/views/doctorstation/components/diagnosis/infectiousDiseaseReportDialog.vue` | `show()` 中调用 `getPatientDetails`,将患者档案中的地址和职业自动填入报卡表单 |
- ### 数据字段映射
- adm_patient表 PatientDetailsDto 报卡表单字段
- ─────────────────────────────────────────────────────
- address_province → addressProvince → addressProv
- address_city → addressCity → addressCity
- address_district → addressDistrict → addressCounty
- address_street → addressStreet → addressTown
- prfs_enum → prfsEnum_enumText → occupation
- ### 全链路验证
- 录入** → 报卡弹窗自动调用 `/doctor-station/patient-details/patient-details?encounterId=X` ✓
- 保存** → 地址和职业字段已包括在 `saveInfectiousDiseaseReport` 提交数据中 ✓
- 查询/回显** → `showReport()` 正确读取已有报卡的地址和职业 ✓
- 编译** → 前端 `npm run lint` ✓,后端 `mvn compile` ✓
修复:
- 变更摘要
2026-05-29 01:56:42 +08:00
3a29797808
fix( #570 ): 请修复 Bug #570:[一般] [门诊预约挂号] 患者预约成功后的状态显示错误为“已锁定”,导致查询“已预约”状态数据为空
...
根因:
- 后端将预约成功后的槽位状态设为 `LOCKED(2)`,但前端 `SlotStatusDescriptions` 将 `2` 映射为 `"已锁定"`,导致:
- 页面显示为 `"已锁定"` 而非正确的 `"已预约"`
- 状态筛选栏按 `"已预约"` 过滤时匹配不到数据
- ### 修改内容(2 个文件,+3/-4 行)
- `src/utils/medicalConstants.js`** — 状态映射修正
- `SlotStatus.LOCKED` 注释:`已锁定` → `已预约(预约后未签到)`
- `SlotStatusDescriptions[2]`:`'已锁定'` → `'已预约'`
- `SlotStatusClassMap`:删除不再使用的 `'已锁定': 'status-locked'`(表中已有 `'已预约': 'status-booked'`)
- `src/views/appoinmentmanage/outpatientAppointment/index.vue`** — 提示文案更新
- 预约成功提示:从 `"预约成功,号源已锁定。患者到院签到时需缴费取号。"` 改为 `"预约成功,请提醒患者按时到院签到取号。"`
- ### 验证
- `eslint` 对修改文件检查通过,无新错误
- 修改范围精准,仅涉及状态字符串映射,不影响其他逻辑
修复:
- Bug #570
2026-05-29 01:49:06 +08:00
ffe01ae68e
fix( #570 ): 请修复 Bug #570:[一般] [门诊预约挂号] 患者预约成功后的状态显示错误为“已锁定”,导致查询“已预约”状态数据为空
...
根因:
- 预约成功后,槽位状态从 `AVAILABLE(0)` → `LOCKED(2)`。后端 `TicketAppServiceImpl.listTicket` 方法中将 `LOCKED(2)` 映射为 `"已锁定"`,但业务上此状态应显示为 **"已预约"**(预约后未签到)。
- 状态流转正确语义:
- `LOCKED(2)` = 已预约但未签到 → 应显示 **"已预约"**
- `BOOKED(1)` = 已签到/已取号 → 应显示 **"已取号"**(原本正确)
- ### 修改文件
- 后端(1 个文件)**
- `openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/TicketAppServiceImpl.java`
- 第 202 行:`dto.setStatus("已锁定")` → `dto.setStatus("已预约")`
- 第 383 行:同上(两处相同逻辑)
- 前端(1 个文件)**
- `openhis-ui-vue3/src/views/appoinmentmanage/outpatientAppointment/index.vue`
- 状态筛选下拉框移除 `"已锁定"` 选项
- 移除 `STATUS_CLASS_MAP` 中的 `"已锁定": "status-locked"`
- 移除 `applyStatusFilter` 中的 `locked: ['已锁定']`
- ### 验证结果
- ✅ 后端 `mvn compile` 通过
- ✅ 前端 `npm run lint` 通过(无新增错误)
修复:
- Bug #570 修复
2026-05-29 01:45:05 +08:00