| 
					
				 | 
			
			
				@@ -105,8 +105,25 @@ $(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let realNo = $("#realNoLabel").val(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 从全局变量获取药师执业资格证号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let pharPracCertNo = window.currentPharPracCertNo || ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        sendMedicineProcessing(realNo, orderNo, receiptNo, times, patientId, name, pharPracCertNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 先验证追溯码数量,再决定是否发药 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        validateTracCodgQuantity(realNo, orderNo, receiptNo, times, patientId, name, pharPracCertNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 追溯码数量确认弹框的确认发药按钮 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $("#confirmTracCodgSend").click(function (t) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 获取存储的发药参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let sendParams = window.pendingSendParams; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (sendParams) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 隐藏确认弹框 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $('#tracCodgConfirmModal').modal('hide'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 执行发药处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sendMedicineProcessing(sendParams.realNo, sendParams.orderNo, sendParams.receiptNo,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                sendParams.times, sendParams.patientId, sendParams.name, sendParams.pharPracCertNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 清除存储的参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            window.pendingSendParams = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     $("#printSend").click(function (t) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $('#zydybqModal').modal('hide'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $("#zyypbq_name").attr("value", $("#zydyNameLabel").val()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3539,4 +3556,102 @@ function callYbReturnGoodsItemWithData(ybData, item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 医保接口失败不影响退药流程,只记录日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 验证追溯码数量与处方数量的匹配情况 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @param realNo 流水号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @param orderNo 处方号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @param receiptNo 发票分票号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @param times 次数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @param patientId 病人ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @param name 病人姓名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @param pharPracCertNo 药师执业资格证号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function validateTracCodgQuantity(realNo, orderNo, receiptNo, times, patientId, name, pharPracCertNo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 获取处方明细表格数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let tableData = $("#tb_table_right").bootstrapTable('getData'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let mismatchDetails = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let hasMismatch = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    console.log('开始验证追溯码数量,表格数据:', tableData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 遍历每种药品,检查追溯码数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (let i = 0; i < tableData.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let drug = tableData[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let prescriptionQuantity = parseInt(drug.quantity) || 0; // 处方数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let tracCodgCount = 0; // 追溯码数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 计算该药品的追溯码数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!isEmpty(drug.drugTracCodg)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 按<br>分割追溯码,过滤空值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let tracCodgList = drug.drugTracCodg.split('<br>').filter(code => code.trim().length > 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tracCodgCount = tracCodgList.length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log('药品:', drug.drugname, '处方数量:', prescriptionQuantity, '追溯码数量:', tracCodgCount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 检查数量是否匹配 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (tracCodgCount !== prescriptionQuantity) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            hasMismatch = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let mismatchInfo = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                drugName: drug.drugname, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                prescriptionQuantity: prescriptionQuantity, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                tracCodgCount: tracCodgCount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                difference: tracCodgCount - prescriptionQuantity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            mismatchDetails.push(mismatchInfo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 如果有不匹配的情况,显示确认弹框 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (hasMismatch) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 存储发药参数,供确认后使用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        window.pendingSendParams = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            realNo: realNo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderNo: orderNo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            receiptNo: receiptNo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            times: times, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            patientId: patientId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            name: name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pharPracCertNo: pharPracCertNo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 构建不匹配详情HTML 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let detailsHtml = '<div class="table-responsive"><table class="table table-bordered table-striped">'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        detailsHtml += '<thead><tr><th>药品名称</th><th>处方数量</th><th>追溯码数量</th><th>差异</th></tr></thead><tbody>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (let i = 0; i < mismatchDetails.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let detail = mismatchDetails[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let differenceText = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let rowClass = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (detail.difference > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                differenceText = '<span style="color: orange;">多输入 ' + detail.difference + ' 个</span>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rowClass = 'warning'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (detail.difference < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                differenceText = '<span style="color: red;">缺少 ' + Math.abs(detail.difference) + ' 个</span>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rowClass = 'danger'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            detailsHtml += '<tr class="' + rowClass + '">'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            detailsHtml += '<td>' + detail.drugName + '</td>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            detailsHtml += '<td>' + detail.prescriptionQuantity + '</td>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            detailsHtml += '<td>' + detail.tracCodgCount + '</td>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            detailsHtml += '<td>' + differenceText + '</td>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            detailsHtml += '</tr>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        detailsHtml += '</tbody></table></div>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 显示确认弹框 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $('#tracCodgMismatchDetails').html(detailsHtml); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $('#tracCodgConfirmModal').modal('show'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log('追溯码数量不匹配,显示确认弹框:', mismatchDetails); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 数量匹配,直接发药 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log('追溯码数量匹配,直接发药'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sendMedicineProcessing(realNo, orderNo, receiptNo, times, patientId, name, pharPracCertNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |