LIJU 1 тиждень тому
батько
коміт
0dfe7b827f
1 змінених файлів з 155 додано та 23 видалено
  1. 155 23
      src/main/resources/static/js/mz/west_pharmacy_send.js

+ 155 - 23
src/main/resources/static/js/mz/west_pharmacy_send.js

@@ -1877,29 +1877,49 @@ function fitfymx(patientId, times, receiptNo, orderNo, groupNoOut) {
 function saveRefundMedicine() {
     let zt = $("#confirmFlagSearch").val()
     
+    // ================= 新增:详细调试信息 =================
+    console.log('=== saveRefundMedicine 函数开始 ===');
+    console.log('zt (confirmFlagSearch):', zt);
+    console.log('isTyOk 当前状态:', isTyOk);
+    console.log('scannedCodesMap 当前状态:', scannedCodesMap);
+    console.log('refundQuantityMap 当前状态:', refundQuantityMap);
+    console.log('window.currentRefundData 当前状态:', window.currentRefundData);
+    
     // 检查是否需要进行追溯码匹配
     if (zt === '2') {
+        console.log('=== 进入追溯码匹配检查逻辑 ===');
         // 检查是否已经完成匹配
         if (!isTyOk) {
+            console.error('=== 错误:isTyOk 为 false,匹配未完成 ===');
+            console.log('isTyOk 详细值:', isTyOk);
+            console.log('isTyOk 类型:', typeof isTyOk);
             return errorMesageSimaple('请先匹配退药药品追溯码!');
         }
         
+        console.log('=== isTyOk 检查通过,继续后续逻辑 ===');
+        
         // 获取退药表格数据,检查是否所有需要退药的药品都已匹配
         let tyTable = $('#ty_table_detail').bootstrapTable("getData");
         let refundData = window.currentRefundData || $table.bootstrapTable('getData');
 
-        // ========== 调试日志开始 ==========
-        console.log('=== saveRefundMedicine 调试信息 ===');
-        console.log('refundData 样本:', refundData.length > 0 ? refundData[0] : '空数组');
-        console.log('tyTable 样本:', tyTable.length > 0 ? tyTable[0] : '空数组');
-        console.log('refundData 总数量:', refundData.length);
+        console.log('=== 获取表格数据 ===');
         console.log('tyTable 总数量:', tyTable.length);
-        // ========== 调试日志结束 ==========
+        console.log('tyTable 样本数据:', tyTable.length > 0 ? tyTable[0] : '空数组');
+        console.log('refundData 总数量:', refundData.length);
+        console.log('refundData 样本数据:', refundData.length > 0 ? refundData[0] : '空数组');
+        console.log('$table.bootstrapTable("getData") 总数量:', $table.bootstrapTable('getData').length);
 
         let needRefundItems = [];
         
+        console.log('=== 构建需要退药的药品列表 ===');
         // 找出需要退药的药品
         refundData.forEach(function (item, index, arr) {
+            console.log(`检查第${index + 1}个药品:`, {
+                charge_item_code: item.charge_item_code,
+                dec_amount: item.dec_amount,
+                serial: item.serial,
+                item_no: item.item_no
+            });
             if (item.dec_amount != 0) {
                 needRefundItems.push({
                     chargeItemCode: item.charge_item_code,
@@ -1907,54 +1927,97 @@ function saveRefundMedicine() {
                     itemNo: item.item_no,
                     decAmount: item.dec_amount  // 添加退药数量字段,用于后续校验
                 });
+                console.log(`第${index + 1}个药品需要退药,已添加到列表`);
+            } else {
+                console.log(`第${index + 1}个药品退药数量为0,跳过`);
             }
         });
-        // ========== 调试日志开始 ==========
-        console.log('needRefundItems:', needRefundItems);
-        console.log('第一个需要退药的药品字段信息:');
+        
+        console.log('=== needRefundItems 最终结果 ===');
+        console.log('needRefundItems 总数量:', needRefundItems.length);
+        console.log('needRefundItems 详细内容:', needRefundItems);
         if (needRefundItems.length > 0) {
+            console.log('第一个需要退药的药品字段信息:');
             console.log('- chargeItemCode:', needRefundItems[0].chargeItemCode);
             console.log('- serial:', needRefundItems[0].serial);
             console.log('- itemNo:', needRefundItems[0].itemNo);
+            console.log('- decAmount:', needRefundItems[0].decAmount);
         }
-        // ========== 调试日志结束 ==========
         
         // ================= 新增:智能追溯码匹配校验逻辑 =================
         // 目的:检查是否扫描了足够数量的追溯码,而不是检查是否所有追溯码都已匹配
         // 修改时间:2025年
         // 修改原因:提高退药效率,只要求扫描退药数量对应的追溯码
         
+        console.log('=== 开始检查追溯码匹配状态 ===');
         // 检查每个需要退药的药品是否都已匹配足够数量
         let allMatched = true;
         let unmatchedItems = [];
         
         for (let i = 0; i < tyTable.length; i++) {
             let item = tyTable[i];
+            console.log(`检查第${i + 1}个追溯码项目:`, {
+                chargeItemCode: item.chargeItemCode,
+                serial: item.serial,
+                itemNo: item.itemNo,
+                drugName: item.drugName,
+                drugTracCodg: item.drugTracCodg
+            });
             
             // 检查这个药品是否需要退药
             let needRefund = needRefundItems.find(function(refundItem) {
-                return refundItem.chargeItemCode === item.chargeItemCode && 
+                let matchResult = refundItem.chargeItemCode === item.chargeItemCode && 
                        refundItem.serial === item.serial && 
                        refundItem.itemNo === item.itemNo;
+                console.log(`匹配检查结果:`, {
+                    refundItem: refundItem,
+                    item: {
+                        chargeItemCode: item.chargeItemCode,
+                        serial: item.serial,
+                        itemNo: item.itemNo
+                    },
+                    matchResult: matchResult
+                });
+                return matchResult;
             });
             
             if (needRefund) {
+                console.log(`第${i + 1}个追溯码项目需要退药,开始检查扫描状态`);
                 let drugCode = item.chargeItemCode;
                 let requiredCount = needRefund.decAmount;
                 let scannedCount = scannedCodesMap[drugCode] ? scannedCodesMap[drugCode].length : 0;
                 
+                console.log(`药品 ${item.drugName} 匹配检查:`, {
+                    drugCode: drugCode,
+                    requiredCount: requiredCount,
+                    scannedCount: scannedCount,
+                    scannedCodes: scannedCodesMap[drugCode] || []
+                });
+                
                 // 检查是否扫描了足够的追溯码
                 if (scannedCount < requiredCount) {
                     allMatched = false;
                     unmatchedItems.push(`${item.drugName} (需要${requiredCount}个,已扫描${scannedCount}个)`);
+                    console.error(`药品 ${item.drugName} 扫描数量不足!`);
+                } else {
+                    console.log(`药品 ${item.drugName} 扫描数量满足要求!`);
                 }
+            } else {
+                console.log(`第${i + 1}个追溯码项目不需要退药,跳过检查`);
             }
         }
         
+        console.log('=== 追溯码匹配检查结果 ===');
+        console.log('allMatched:', allMatched);
+        console.log('unmatchedItems:', unmatchedItems);
+        
         if (!allMatched) {
+            console.error('=== 追溯码匹配检查失败 ===');
             return errorMesageSimaple('还有药品未完成追溯码匹配:' + unmatchedItems.join('、') + ',请完成匹配后再退药!');
         }
         
+        console.log('=== 追溯码匹配检查通过,继续退药处理 ===');
+        
         // ================= 原逻辑(已屏蔽,如需恢复请取消注释) =================
         /*
         // 原逻辑:检查是否所有追溯码都已匹配
@@ -2098,7 +2161,8 @@ function saveRefundMedicine() {
                 // 目的:统一管理追溯码匹配状态的重置
                 // 修改时间:2025年
                 // 修改原因:确保状态重置的完整性和一致性
-                resetTraceabilityState();
+                console.log('=== 退药成功,完全重置追溯码状态 ===');
+                resetTraceabilityState(false, false); // 退药成功后完全重置
                 initTbTable();
             } else {
                 console.error('退药处理失败:', res.message);
@@ -2772,8 +2836,19 @@ function matchingDrugCodg(patientId, times, receiptNo, orderNo, realNo){
     // 目的:确保弹窗关闭时清理所有状态,避免状态残留
     // 修改时间:2025年
     // 修改原因:防止状态污染,确保下次打开弹窗时状态正确
+    // 注意:如果匹配成功,不要重置 isTyOk 状态和扫描数据
     $("#tyModal").off('hidden.bs.modal').on('hidden.bs.modal', function () {
-        resetTraceabilityState();
+        console.log('=== 弹窗关闭事件触发 ===');
+        console.log('关闭前 isTyOk 状态:', isTyOk);
+        
+        // 如果匹配成功,保留 isTyOk 状态和扫描数据,只重置其他状态
+        if (isTyOk) {
+            console.log('匹配已成功,保留 isTyOk 状态和扫描数据,只重置其他状态');
+            resetTraceabilityState(true, true); // 保留 isTyOk 状态和扫描数据
+        } else {
+            console.log('匹配未成功,重置所有状态');
+            resetTraceabilityState(false, false); // 完全重置
+        }
     });
     
     // 防抖定时器
@@ -3051,12 +3126,23 @@ function matchTp(){
     */
     // ================= 原逻辑结束 =================
     
+    console.log('=== 确认匹配对话框 ===');
     if (!confirm("确定对当前处方所有退药的药品匹配成功?")) {
+        console.log('用户取消了确认匹配');
         return;
     }
+    
+    console.log('=== 设置匹配完成状态 ===');
+    console.log('设置前 isTyOk:', isTyOk);
     if(!isTyOk){
         isTyOk = true;
+        console.log('isTyOk 已设置为 true');
+    } else {
+        console.log('isTyOk 已经是 true,无需重复设置');
     }
+    console.log('设置后 isTyOk:', isTyOk);
+    
+    console.log('=== 关闭追溯码匹配弹窗 ===');
     $("#tyModal").modal('hide');
 }
 
@@ -3108,15 +3194,60 @@ function updateTraceabilityProgressDisplay() {
 // 修改时间:2025年
 // 修改原因:确保状态管理的一致性,防止状态残留导致的问题
 // 重置内容:
-// - scannedCodesMap: 清空已扫描的追溯码记录
-// - refundQuantityMap: 清空退药数量记录
-// - isTyOk: 重置匹配完成标志
-// - window.currentRefundData: 清空当前退药数据
-function resetTraceabilityState() {
-    scannedCodesMap = {};
-    refundQuantityMap = {};
-    isTyOk = false;
-    window.currentRefundData = null;
+// - scannedCodesMap: 清空已扫描的追溯码记录(可选)
+// - refundQuantityMap: 清空退药数量记录(可选)
+// - isTyOk: 重置匹配完成标志(可选)
+// - window.currentRefundData: 清空当前退药数据(可选)
+// 参数:keepIsTyOk - 是否保留 isTyOk 状态,默认为 false
+// 参数:keepScannedData - 是否保留扫描数据,默认为 false
+function resetTraceabilityState(keepIsTyOk = false, keepScannedData = false) {
+    console.log('=== 重置追溯码状态 ===');
+    console.log('重置前状态:', {
+        scannedCodesMap: scannedCodesMap,
+        refundQuantityMap: refundQuantityMap,
+        isTyOk: isTyOk,
+        currentRefundData: window.currentRefundData
+    });
+    console.log('keepIsTyOk 参数:', keepIsTyOk);
+    console.log('keepScannedData 参数:', keepScannedData);
+    
+    let currentIsTyOk = isTyOk; // 保存当前状态
+    let currentScannedCodesMap = scannedCodesMap; // 保存当前扫描数据
+    let currentRefundQuantityMap = refundQuantityMap; // 保存当前退药数量数据
+    
+    // 根据参数决定是否清空扫描数据
+    if (!keepScannedData) {
+        scannedCodesMap = {};
+        refundQuantityMap = {};
+        console.log('清空扫描数据和退药数量数据');
+    } else {
+        console.log('保留扫描数据和退药数量数据');
+    }
+    
+    // 根据参数决定是否清空当前退药数据
+    if (!keepScannedData) {
+        window.currentRefundData = null;
+        console.log('清空当前退药数据');
+    } else {
+        console.log('保留当前退药数据');
+    }
+    
+    // 根据参数决定是否重置 isTyOk
+    if (!keepIsTyOk) {
+        isTyOk = false;
+        console.log('重置 isTyOk 为 false');
+    } else {
+        isTyOk = currentIsTyOk;
+        console.log('保留 isTyOk 状态:', isTyOk);
+    }
+    
+    console.log('重置后状态:', {
+        scannedCodesMap: scannedCodesMap,
+        refundQuantityMap: refundQuantityMap,
+        isTyOk: isTyOk,
+        currentRefundData: window.currentRefundData
+    });
+    console.log('=== 追溯码状态重置完成 ===');
 }
 
 function printPrescription(patientId, times, orderNo) {
@@ -3495,7 +3626,8 @@ $(document).ready(function () {
     // 目的:确保页面加载时追溯码匹配状态正确初始化
     // 修改时间:2025年
     // 修改原因:统一状态管理,避免状态不一致
-    resetTraceabilityState();
+    console.log('=== 页面加载,初始化追溯码状态 ===');
+    resetTraceabilityState(false, false); // 页面加载时完全重置
     
     initTbTable();
 });