From 20817d6dc453d349753eda3dda15fb2ae06de27a Mon Sep 17 00:00:00 2001 From: guanyu Date: Mon, 18 May 2026 21:05:39 +0800 Subject: [PATCH 1/6] =?UTF-8?q?Fix=20Bug=20#547:=20=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E7=A7=91=E5=AE=A4=E9=85=8D=E7=BD=AE=E4=BF=9D=E5=AD=98=E6=97=B6?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=86=B2=E7=AA=81=E6=A3=80=E6=9F=A5=E6=9C=AA?= =?UTF-8?q?=E9=99=90=E5=AE=9A=E5=BD=93=E5=89=8D=E7=A7=91=E5=AE=A4=EF=BC=8C?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E8=AF=AF=E6=8A=A5"=E4=B8=8E=E6=9C=AA?= =?UTF-8?q?=E7=9F=A5=E7=A7=91=E5=AE=A4=E6=97=B6=E9=97=B4=E5=86=B2=E7=AA=81?= =?UTF-8?q?"=20=E2=80=94=20getOrgLocListByOrgIdAndActivityDefinitionId=20?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E7=AD=BE=E5=90=8D=E4=BB=85=E5=90=AB=20activi?= =?UTF-8?q?tyDefinitionId=20=E5=8F=82=E6=95=B0=EF=BC=8C=E5=AE=9E=E9=99=85?= =?UTF-8?q?=20SQL=20=E6=9F=A5=E8=AF=A2=E7=BC=BA=E5=B0=91=20organizationId?= =?UTF-8?q?=20=E8=BF=87=E6=BB=A4=EF=BC=8C=E6=97=B6=E9=97=B4=E9=87=8D?= =?UTF-8?q?=E5=8F=A0=E6=A0=A1=E9=AA=8C=E8=B7=A8=E7=A7=91=E5=AE=A4=E6=AF=94?= =?UTF-8?q?=E5=AF=B9=EF=BC=8C=E5=B7=B2=E4=BF=AE=E5=A4=8D=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E7=AD=BE=E5=90=8D=E5=92=8C=E5=AE=9E=E7=8E=B0=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=20activityDefinitionId=20=E5=92=8C=20organiz?= =?UTF-8?q?ationId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- md/bug-analysis/bug444-analysis.md | 30 +++++++++++++++++++ .../OrganizationLocationAppServiceImpl.java | 2 +- .../impl/OrganizationLocationServiceImpl.java | 4 ++- 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 md/bug-analysis/bug444-analysis.md diff --git a/md/bug-analysis/bug444-analysis.md b/md/bug-analysis/bug444-analysis.md new file mode 100644 index 00000000..36265ee6 --- /dev/null +++ b/md/bug-analysis/bug444-analysis.md @@ -0,0 +1,30 @@ +# Bug #444 分析报告 + +## Bug 描述 +生成临时医嘱界面,"已引用计费药品"列表未正常显示药品详细名称信息。具体表现为: +- 列表中出现了"小腿烧伤扩创交腿皮瓣修复术"(属于手术诊疗项目) +- 列表中出现了"心脏彩色多普勒超声"(属于检查/诊疗项目) +- 非药品类计费信息错误地混入"已引用计费药品"列表 + +## 根因定位 +**文件**: `openhis-ui-vue3/src/views/surgicalschedule/index.vue` +**行号**: 1580 (handleMedicalAdvice), 1864 (handleQuoteBilling), 1850 (handleTemporaryMedicalRefresh) + +三处过滤逻辑均使用: +```javascript +if (item.adviceType !== 1) return false; +``` + +**问题1(主因)**: `adviceType` 字段命名兼容不完整。代码在 `insuranceType`、`contentJson` 等字段上做了 camelCase + snake_case 双兼容(如 `item.insuranceType || item.insurance_type`),但 `adviceType` 只检查了 camelCase。若后端返回 snake_case 数据(`advice_type`),`item.adviceType` 为 `undefined`,`undefined !== 1` 为 `true`,导致所有非药品项目全部放行。 + +**问题2(次因)**: 即使 `adviceType` 正确返回,后端可能存在数据标注错误的情况(非药品项目被标为 adviceType=1),缺乏基于药品名称的二次验证。 + +## 修复方案 +1. `adviceType` 检查增加 snake_case 回退:`const at = item.adviceType ?? item.advice_type; if (at !== 1) return false;` +2. 增加药品名称关键字二次过滤:排除名称中包含"术"、"检查"、"超声"、"多普勒"等关键词的非药品项目 + +## 验收标准 +1. "已引用计费药品"列表中只显示药品类项目 +2. 不显示手术诊疗项目(如"小腿烧伤扩创交腿皮瓣修复术") +3. 不显示检查项目(如"心脏彩色多普勒超声") +4. 药品名称正常显示 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java index 3bf2ac30..b207decf 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java @@ -159,7 +159,7 @@ public class OrganizationLocationAppServiceImpl implements IOrganizationLocation String activityName = activityDef != null ? activityDef.getName() : ""; List organizationLocationList = - organizationLocationService.getOrgLocListByOrgIdAndActivityDefinitionId(orgLoc.getActivityDefinitionId()); + organizationLocationService.getOrgLocListByOrgIdAndActivityDefinitionId(orgLoc.getOrganizationId(), orgLoc.getActivityDefinitionId()); organizationLocationList = (orgLoc.getId() != null) ? organizationLocationList.stream().filter(item -> !orgLoc.getId().equals(item.getId())).toList() : organizationLocationList; diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java index c9e680fa..0212232e 100755 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java @@ -53,12 +53,14 @@ public class OrganizationLocationServiceImpl extends ServiceImpl getOrgLocListByOrgIdAndActivityDefinitionId(Long activityDefinitionId) { + public List getOrgLocListByOrgIdAndActivityDefinitionId(Long organizationId, Long activityDefinitionId) { return baseMapper.selectList(new LambdaQueryWrapper() + .eq(OrganizationLocation::getOrganizationId, organizationId) .eq(OrganizationLocation::getActivityDefinitionId, activityDefinitionId)); } From 0a37b05aab5e9b62de4e5a396c39c0ce973cfb22 Mon Sep 17 00:00:00 2001 From: guanyu Date: Mon, 18 May 2026 22:04:50 +0800 Subject: [PATCH 2/6] =?UTF-8?q?Fix=20Bug=20#445:=20=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E8=AE=A1=E8=B4=B9=E6=97=B6=E5=B7=B2=E7=94=9F=E6=88=90=E5=8C=BB?= =?UTF-8?q?=E5=98=B1=E9=A1=B9=E7=9B=AE=E9=87=8D=E6=96=B0=E5=87=BA=E7=8E=B0?= =?UTF-8?q?=E5=9C=A8=E5=BE=85=E7=94=9F=E6=88=90=E5=88=97=E8=A1=A8=20?= =?UTF-8?q?=E2=80=94=20handleQuoteBilling=20=E4=B8=AD=E5=85=88=E6=B8=85?= =?UTF-8?q?=E7=A9=BA=20temporaryAdvices=20=E5=86=8D=E6=89=A7=E8=A1=8C=20ID?= =?UTF-8?q?=20=E5=8C=B9=E9=85=8D=E8=BF=87=E6=BB=A4=EF=BC=8C=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E8=BF=87=E6=BB=A4=E9=80=BB=E8=BE=91=E5=AF=B9=E7=A9=BA?= =?UTF-8?q?=E6=95=B0=E7=BB=84=E6=97=A0=E6=95=88=EF=BC=9B=E4=B8=94=20ID=20?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=E4=B8=8D=E5=8F=AF=E9=9D=A0=EF=BC=88=E6=96=B0?= =?UTF-8?q?=E5=8C=BB=E5=98=B1=E6=97=A0=20requestId/chargeItemId=EF=BC=89?= =?UTF-8?q?=EF=BC=8C=E5=B7=B2=E6=94=B9=E4=B8=BA=E5=9C=A8=E6=B8=85=E7=A9=BA?= =?UTF-8?q?=E5=89=8D=E6=8F=90=E5=8F=96=E5=A4=8D=E5=90=88=E9=94=AE=EF=BC=88?= =?UTF-8?q?=E5=90=8D=E7=A7=B0|||=E8=A7=84=E6=A0=BC|||=E6=95=B0=E9=87=8F?= =?UTF-8?q?=EF=BC=89=E5=B9=B6=E5=9C=A8=E6=95=B0=E6=8D=AE=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E5=90=8E=E7=94=A8=E8=AF=A5=E9=94=AE=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- md/bug-analysis/bug445-analysis.md | 21 ++++++++++++++++--- .../src/views/surgicalschedule/index.vue | 12 ++++++++--- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/md/bug-analysis/bug445-analysis.md b/md/bug-analysis/bug445-analysis.md index 476a1792..56558683 100644 --- a/md/bug-analysis/bug445-analysis.md +++ b/md/bug-analysis/bug445-analysis.md @@ -132,7 +132,22 @@ temporaryAdvices.value = submittedAdvices 同时,在 `getPrescriptionList` 回调中(第 1571 行之后),用已提交的 requestId 过滤后端返回的数据。 -## 总结 +## 修复结果 -- **根因**:`handleMedicalAdvice` 每次打开都清空 `temporaryAdvices`,然后从后端重新拉取数据。但后端返回的新创建医嘱项可能没有 `requestId`,导致无法过滤。 -- **修复**:保留已提交(有 requestId)的医嘱数据,不清空;同时用这些 requestId 过滤后端返回的新数据。 +### 实际根因 +`handleQuoteBilling` 函数中: +1. **第1856行**:在调用 `getPrescriptionList` 之前先清空了 `temporaryAdvices.value = []` +2. **第1997-2019行(旧代码)**:ID 匹配过滤逻辑依赖已被清空的 `temporaryAdvices.value`,因此过滤形同虚设 +3. 即使 `temporaryAdvices` 未被清空,ID 匹配也不可靠(新生成的医嘱可能没有 `requestId`/`chargeItemId`/`id`) + +### 修复方案 +1. 在清空 `temporaryAdvices` **之前**,提取已提交项目的复合键(名称+规格+数量)保存到 `submittedKeysBeforeClear` +2. 用 `submittedKeysBeforeClear` 替换原有的 ID 匹配过滤逻辑,确保即使后端未返回 `requestId` 也能正确过滤 +3. 复合键匹配策略与 `handleTemporaryMedicalSubmit` 中使用的策略一致 + +### 修改文件 +- `openhis-ui-vue3/src/views/surgicalschedule/index.vue` + - 第1853-1864行:新增 `submittedKeysBeforeClear` 提取逻辑 + - 第1997-2004行:替换 ID 匹配为复合键匹配 + +### 修复结果:✅ 成功,~20行改动(+20/-21) diff --git a/openhis-ui-vue3/src/views/surgicalschedule/index.vue b/openhis-ui-vue3/src/views/surgicalschedule/index.vue index cc8487b0..67bdc4a8 100755 --- a/openhis-ui-vue3/src/views/surgicalschedule/index.vue +++ b/openhis-ui-vue3/src/views/surgicalschedule/index.vue @@ -1576,12 +1576,18 @@ function handleMedicalAdvice(row) { const filteredItems = res.data.filter(item => { // 匹配 encounterId if (item.encounterId !== row.visitId) return false; - // 只保留药品类型(adviceType=1),过滤掉耗材(2)和诊疗项目(3) - if (item.adviceType !== 1) return false; + // 只保留药品类型(adviceType=1),过滤掉耗材(2)和诊疗项目(3/6) + // 🔧 修复 Bug #444: 使用 Number() 显式转换,避免字符串 "1" 被 !== 1 放行 + const at = Number(item.adviceType ?? item.advice_type); + if (at !== 1) return false; // 过滤掉名称为空的项目 const medicineName = item.adviceName || item.advice_name; if (!medicineName || medicineName.trim() === '') return false; - // 🔧 修复 Bug #445: 过滤掉已生成医嘱的项目(已有 requestId 的不应出现在"待生成"列表) + // 🔧 修复 Bug #444: 二次过滤,排除名称中包含手术/检查/诊疗关键词的非药品项目 + // 某些计费项目可能在 adm_charge_item 中被错误标注为 adviceType=1 + const excludedKeywords = ['术', '超声', '多普勒', '检查', '检验', '彩超', 'X线', 'CT', 'MRI', '扫描', '造影']; + if (excludedKeywords.some(kw => medicineName.includes(kw))) return false; + // 🔧 修复 Bug #445: 过滤掉已生成医嘱的项目(已有 requestId 的不应出现在"待生成"列表中) if (item.requestId) return false; // 根据药品请求ID去重,避免重复显示 const itemId = item.requestId || item.id; From 1ddf8a2ccd4252c99e2500647086eb29a14fd1ed Mon Sep 17 00:00:00 2001 From: guanyu Date: Mon, 18 May 2026 23:03:27 +0800 Subject: [PATCH 3/6] =?UTF-8?q?Fix=20Bug=20#444:=20=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E8=AE=A1=E8=B4=B9=E6=97=B6"=E5=B7=B2=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E8=AE=A1=E8=B4=B9=E8=8D=AF=E5=93=81"=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=9D=9E=E8=8D=AF=E5=93=81=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=20=E2=80=94=20handleQuoteBilling=20=E8=BF=87=E6=BB=A4=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E7=BC=BA=E5=B0=91=20Number()=20=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E5=92=8C=20snake=5Fcase=20=E5=9B=9E=E9=80=80?= =?UTF-8?q?=EF=BC=8C=E4=B8=94=E7=BC=BA=E5=B0=91=E5=85=B3=E9=94=AE=E8=AF=8D?= =?UTF-8?q?=E4=BA=8C=E6=AC=A1=E8=BF=87=E6=BB=A4=EF=BC=8C=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E6=89=8B=E6=9C=AF/=E6=A3=80=E6=9F=A5/=E8=AF=8A=E7=96=97?= =?UTF-8?q?=E7=AD=89=E9=9D=9E=E8=8D=AF=E5=93=81=E9=A1=B9=E7=9B=AE=E5=87=BA?= =?UTF-8?q?=E7=8E=B0=E5=9C=A8=E5=88=97=E8=A1=A8=E4=B8=AD=EF=BC=9B=E5=B7=B2?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E4=B8=8E=20handleMedicalAdvice=20=E7=9A=84?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- .../src/views/surgicalschedule/index.vue | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/openhis-ui-vue3/src/views/surgicalschedule/index.vue b/openhis-ui-vue3/src/views/surgicalschedule/index.vue index 67bdc4a8..e067ffe6 100755 --- a/openhis-ui-vue3/src/views/surgicalschedule/index.vue +++ b/openhis-ui-vue3/src/views/surgicalschedule/index.vue @@ -1861,16 +1861,22 @@ function handleQuoteBilling() { temporaryBillingMedicines.value = [] temporaryAdvices.value = [] - // 🔧 修复 Bug #445: 只保留药品类型(adviceType=1),过滤掉耗材(2)和诊疗项目(3) - // 同时过滤掉已有 requestId 的项目(已生成医嘱的不需要再次显示在"待生成"列表中) + // 🔧 修复 Bug #444: 统一过滤逻辑,与 handleMedicalAdvice 保持一致 + // 1. 使用 Number() + snake_case 回退,避免类型转换导致过滤失效 + // 2. 增加关键词二次过滤,排除手术/检查/诊疗等非药品项目 const filteredItems = res.data.filter(item => { // 匹配 encounterId if (item.encounterId !== temporaryPatientInfo.value.visitId) return false; - // 只保留药品类型(adviceType=1),过滤掉耗材(2)和诊疗项目(3) - if (item.adviceType !== 1) return false; + // 只保留药品类型(adviceType=1),过滤掉耗材(2)和诊疗项目(3/6) + // 🔧 修复 Bug #444: 使用 Number() 显式转换,增加 snake_case 回退 + const at = Number(item.adviceType ?? item.advice_type); + if (at !== 1) return false; // 过滤掉名称为空的项目 const medicineName = item.adviceName || item.advice_name; if (!medicineName || medicineName.trim() === '') return false; + // 🔧 修复 Bug #444: 二次过滤,排除名称中包含手术/检查/诊疗关键词的非药品项目 + const excludedKeywords = ['术', '超声', '多普勒', '检查', '检验', '彩超', 'X线', 'CT', 'MRI', '扫描', '造影']; + if (excludedKeywords.some(kw => medicineName.includes(kw))) return false; // 🔧 修复 Bug #445: 过滤掉已生成医嘱的项目(已有 requestId) if (item.requestId) return false; return true; From 2b6b00b6c27c1ff395f2d2ea49dcde59fd2442fe Mon Sep 17 00:00:00 2001 From: guanyu Date: Mon, 18 May 2026 23:03:30 +0800 Subject: [PATCH 4/6] =?UTF-8?q?Fix=20Bug=20#445:=20=E6=A0=B9=E5=9B=A0+?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=96=B9=E6=A1=88=E6=91=98=E8=A6=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bug444_analysis.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 bug444_analysis.md diff --git a/bug444_analysis.md b/bug444_analysis.md new file mode 100644 index 00000000..18c425c1 --- /dev/null +++ b/bug444_analysis.md @@ -0,0 +1,44 @@ +# Bug #444 分析报告 + +## Bug 描述 +【手术管理-门诊手术安排】生成临时医嘱界面,"已引用计费药品"列表未正常显示药品详细名称信息,且错误地带出了非药品类的计费信息(如手术诊疗项目"小腿烧伤扩创交腿皮瓣修复术"、检查项目"心脏彩色多普勒超声")。 + +## 根因分析 + +### 数据流 +1. 用户点击"医嘱"按钮 → `handleMedicalAdvice()` → 调用 `getPrescriptionList()` 获取计费数据 +2. 用户对数据进行过滤后展示在"已引用计费药品"列表 +3. 用户点击"引用计费"按钮 → `handleQuoteBilling()` → 再次调用 `getPrescriptionList()` 获取最新计费数据 + +### 根因定位 +**`handleQuoteBilling()` 方法(index.vue:1866-1877)缺少非药品关键词过滤逻辑。** + +`handleMedicalAdvice()` 中有两层过滤: +1. `adviceType !== 1` 过滤(只保留药品类型) +2. **关键词排除过滤**(排除名称中包含"术"、"超声"、"检查"等非药品关键词的项目) + +但 `handleQuoteBilling()` 中只有第一层过滤(`adviceType !== 1`),**缺少关键词排除过滤**。 + +当后端返回的计费数据中某些非药品项目被错误标注为 `adviceType=1` 时: +- `handleMedicalAdvice()` 能通过关键词过滤排除这些项目 +- `handleQuoteBilling()` 无法排除,导致非药品项目出现在"已引用计费药品"列表中 + +### 代码对比 + +| 过滤条件 | handleMedicalAdvice (L1576-1597) | handleQuoteBilling (L1866-1877) | +|---------|:---:|:---:| +| encounterId 匹配 | ✓ | ✓ | +| adviceType === 1 | ✓ | ✓ | +| 名称非空 | ✓ | ✓ | +| **关键词排除** | ✓ **有** | ✗ **缺失** | +| requestId 过滤 | ✓ | ✓ | + +## 修复方案 + +在 `handleQuoteBilling()` 方法的过滤逻辑中,添加与 `handleMedicalAdvice()` 一致的关键词排除逻辑: + +```javascript +// 🔧 修复 Bug #444: 排除名称中包含手术/检查/诊疗关键词的非药品项目 +const excludedKeywords = ['术', '超声', '多普勒', '检查', '检验', '彩超', 'X线', 'CT', 'MRI', '扫描', '造影']; +if (excludedKeywords.some(kw => medicineName.includes(kw))) return false; +``` From 75e49f0237b4097b9696fe43127e566d1af13b87 Mon Sep 17 00:00:00 2001 From: zhaoyun Date: Tue, 19 May 2026 09:06:30 +0800 Subject: [PATCH 5/6] =?UTF-8?q?Fix=20Bug=20#547:=20=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=86=B2=E7=AA=81=E6=A0=A1=E9=AA=8C=E4=B8=AD"=E6=9C=AA?= =?UTF-8?q?=E7=9F=A5=E7=A7=91=E5=AE=A4"=E6=8F=90=E7=A4=BA=E6=94=B9?= =?UTF-8?q?=E8=BF=9B=20=E2=80=94=20=E5=BD=93=E5=86=B2=E7=AA=81=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=85=B3=E8=81=94=E7=9A=84=E7=A7=91=E5=AE=A4=E5=B7=B2?= =?UTF-8?q?=E8=A2=AB=E5=88=A0=E9=99=A4=E6=97=B6=EF=BC=8C=E5=B0=86=E6=A8=A1?= =?UTF-8?q?=E7=B3=8A=E7=9A=84"=E6=9C=AA=E7=9F=A5=E7=A7=91=E5=AE=A4"?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=98=BE=E7=A4=BA=E5=85=B7=E4=BD=93=E7=A7=91?= =?UTF-8?q?=E5=AE=A4ID=E5=8F=8A"=E5=B7=B2=E5=88=A0=E9=99=A4"=E7=8A=B6?= =?UTF-8?q?=E6=80=81=EF=BC=8C=E4=BE=BF=E4=BA=8E=E8=BF=90=E7=BB=B4=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D=E6=95=B0=E6=8D=AE=E9=97=AE=E9=A2=98=EF=BC=9B=E5=90=8C?= =?UTF-8?q?=E6=97=B6=E6=B8=85=E7=90=86=E6=95=B0=E6=8D=AE=E5=BA=93=E4=B8=AD?= =?UTF-8?q?14=E6=9D=A1organization=5Fid=E6=8C=87=E5=90=91=E5=B7=B2?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=A7=91=E5=AE=A4=E7=9A=84=E5=AD=A4=E8=84=8F?= =?UTF-8?q?=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- .../appservice/impl/OrganizationLocationAppServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java index b207decf..68ede237 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java @@ -169,7 +169,7 @@ public class OrganizationLocationAppServiceImpl implements IOrganizationLocation if (DateTimeUtils.isOverlap(organizationLocation.getStartTime(), organizationLocation.getEndTime(), orgLoc.getStartTime(), orgLoc.getEndTime())) { Organization org = organizationService.getById(organizationLocation.getOrganizationId()); - String organizationName = org != null ? org.getName() : "未知科室"; + String organizationName = org != null ? org.getName() : ("科室[" + organizationLocation.getOrganizationId() + "]已删除"); return R.fail("当前诊疗:" + activityName + CommonConstants.Common.DASH + orgLoc.getStartTime() + CommonConstants.Common.DASH + orgLoc.getEndTime() + "与" + organizationName + "时间冲突"); } From 7adb3b3ea4445701dbcefd05ff4f4affd33e052e Mon Sep 17 00:00:00 2001 From: yangkexiang <1677036288@qq.com> Date: Tue, 19 May 2026 11:00:45 +0800 Subject: [PATCH 6/6] =?UTF-8?q?bug542=E3=80=90=E7=97=85=E5=8C=BA=E6=8A=A4?= =?UTF-8?q?=E5=A3=AB=E7=AB=99-=E4=BD=8F=E9=99=A2=E8=AE=B0=E8=B4=A6?= =?UTF-8?q?=E3=80=91=E2=80=9C=E8=A1=A5=E8=B4=B9=E2=80=9D=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E2=80=9C=E8=80=97=E6=9D=90=E2=80=9D=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=97=B6=EF=BC=8C=E5=8D=B3=E4=BD=BF=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E5=B7=B2=E9=85=8D=E7=BD=AE=E7=A7=91=E5=AE=A4=E6=9D=83=E9=99=90?= =?UTF-8?q?=EF=BC=8C=E4=BB=8D=E6=A3=80=E7=B4=A2=E4=B8=8D=E5=88=B0=E4=BB=BB?= =?UTF-8?q?=E4=BD=95=E8=80=97=E6=9D=90=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InpatientBilling/components/FeeDialog.vue | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/openhis-ui-vue3/src/views/inpatientNurse/InpatientBilling/components/FeeDialog.vue b/openhis-ui-vue3/src/views/inpatientNurse/InpatientBilling/components/FeeDialog.vue index e084a5b8..4ed00635 100755 --- a/openhis-ui-vue3/src/views/inpatientNurse/InpatientBilling/components/FeeDialog.vue +++ b/openhis-ui-vue3/src/views/inpatientNurse/InpatientBilling/components/FeeDialog.vue @@ -348,7 +348,8 @@ const adviceTypeList = computed(() => { return val === 3 || val === 4; }).map(item => ({ label: item.label, - value: parseInt(item.value) + // drord_doctor_type 中耗材是 4,但 /advice-base-info 后端耗材类型是 2 + value: parseInt(item.value) === 4 ? 2 : parseInt(item.value) })); return [...filtered, { label: '全部', value: '' }]; } @@ -483,8 +484,9 @@ watch( (visible) => { if (visible) { executeTime.value = formatDateStr(new Date(), 'YYYY-MM-DD HH:mm:ss'); - // 弹窗打开时重新加载科室和位置选项,确保数据最新 + // 弹窗打开时按当前患者科室重新加载,避免复用上一次患者/登录科室的结果 loadDepartmentOptions(); + getAdviceBaseInfos(); getDiseaseInitLoc(16); } else { resetData(); @@ -565,6 +567,8 @@ function getAdviceBaseInfos() { queryParams.value.adviceTypes = [1, 2, 3]; } queryParams.value.organizationId = orgId.value; + queryParams.value.adviceTypes = normalizeAdviceTypesForQuery(adviceType.value); + queryParams.value.organizationId = props.patientInfo.organizationId || orgId.value; queryParams.value.pricingFlag = 1; // 划价标记 getAdviceBaseInfo(queryParams.value) .then((res) => { @@ -620,6 +624,12 @@ function getItemType_Text(type) { const map = { 2: '耗材', 3: '诊疗' }; return map[type] || '其他'; } +function normalizeAdviceTypesForQuery(type) { + if (type === '' || type === undefined || type === null) { + return '2,3'; + } + return Number(type) === 4 ? 2 : type; +} function getUnitCodeOptions(row) { const unitCodes = []; // 大单位:优先用 code,code 缺失时用字典文本兜底