From 78e5aff6133ae8720a9c2ab84f1bea279636ec05 Mon Sep 17 00:00:00 2001 From: guanyu Date: Mon, 18 May 2026 17:08:21 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#443:=20=E6=89=8B=E6=9C=AF=E8=AE=A1?= =?UTF-8?q?=E8=B4=B9=E7=AD=BE=E5=8F=91=E8=80=97=E6=9D=90=E6=97=B6=E5=9B=A0?= =?UTF-8?q?=20bizRequestFlag=20=E8=BF=87=E6=BB=A4=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E7=AD=BE=E5=8F=91=E7=9A=84=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:prescriptionlist.vue 中 handleSave()、changeCheck()、watch、handleSingOut() 四处使用 bizRequestFlag 过滤(仅允许操作本人开立的医嘱)。 在手术计费场景下,手术医生创建的手术申请及其耗材的 requester_id 为医生ID, 手术室护士的 practitionerId 与之不匹配,bizRequestFlag='0',导致所有耗材 被过滤掉,saveList 为空,后端返回"医嘱列表为空"错误。 修复:在四处过滤逻辑中增加 isSurgeryChargeBillingContext() 判断(generateSourceEnum=6), 手术计费场景下跳过 bizRequestFlag 限制,允许任何授权用户签发/签退。 门诊划价场景保留 bizRequestFlag 限制,不影响原有安全校验。 Co-Authored-By: Claude Opus 4.7 --- .../bargain/component/prescriptionlist.vue | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/prescriptionlist.vue b/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/prescriptionlist.vue index 9adbfb4d2..8a66146ee 100755 --- a/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/prescriptionlist.vue +++ b/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/prescriptionlist.vue @@ -461,6 +461,10 @@ watch( console.log(prescriptionList.value,"prescriptionList.value") if(newValue&&newValue.length>0){ let saveList = prescriptionList.value.filter((item) => { + // 手术计费场景(generateSourceEnum=6)不限制 bizRequestFlag + if (isSurgeryChargeBillingContext()) { + return item.check && item.statusEnum == 1 + } return item.check && item.statusEnum == 1&&(Number(item.bizRequestFlag)==1||!item.bizRequestFlag) }) console.log(saveList,"prescriptionList.value") @@ -1025,7 +1029,9 @@ function changeCheck(value,index,row){ groupList.value.map(k=>{ if(k.check){ if(k.statusEnum == 1){//待签发 - if(Number(k.bizRequestFlag)==1||!k.bizRequestFlag){ + // 手术计费场景(generateSourceEnum=6)不限制 bizRequestFlag + const bizAllowed = isSurgeryChargeBillingContext() || Number(k.bizRequestFlag)==1||!k.bizRequestFlag + if(bizAllowed){ if(handleSaveDisabled.value&&!handleSingOutDisabled.value&&groupList.value.length>1){ proxy.$modal.msgWarning('请选择相同的状态的项目进行操作') return @@ -1040,7 +1046,9 @@ function changeCheck(value,index,row){ } } if(k.statusEnum == 2){ //已签发 - if(Number(k.bizRequestFlag)==1||!k.bizRequestFlag){ + // 手术计费场景(generateSourceEnum=6)不限制 bizRequestFlag + const bizAllowed = isSurgeryChargeBillingContext() || Number(k.bizRequestFlag)==1||!k.bizRequestFlag + if(bizAllowed){ if(!handleSaveDisabled.value&&handleSingOutDisabled.value&&groupList.value.length>1){ proxy.$modal.msgWarning('请选择相同的状态的项目进行操作') return @@ -1067,6 +1075,11 @@ function handleSave() { return; } let saveList = prescriptionList.value.filter((item) => { + // 手术计费场景(generateSourceEnum=6)不限制 bizRequestFlag,允许任何授权用户签发 + // 门诊划价场景保留 bizRequestFlag 限制,只能操作本人开立的医嘱 + if (isSurgeryChargeBillingContext()) { + return item.check && item.statusEnum == 1 + } return item.check && item.statusEnum == 1&&(Number(item.bizRequestFlag)==1||!item.bizRequestFlag) }); // let saveList = prescriptionList.value @@ -1185,6 +1198,10 @@ function handleSingOut() { return item.check; }) .filter((item) => { + // 手术计费场景(generateSourceEnum=6)不限制 bizRequestFlag + if (isSurgeryChargeBillingContext()) { + return item.statusEnum == 2 && item.chargeStatus != 5 + } return item.statusEnum == 2 && item.chargeStatus != 5 && (Number(item.bizRequestFlag)==1||!item.bizRequestFlag) }) .map((item) => {