From a498435522a78b788d2e59f0f0f024c0c946aee1 Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期二, 06 一月 2026 15:03:57 +0800
Subject: [PATCH] 1

---
 项目代码/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue                        |    2 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs |   35 ++++++++---
 项目代码/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js                     |   22 +++++--
 项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/NoStockOut.vue              |   69 +++++++++++++++++++---
 4 files changed, 101 insertions(+), 27 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js"
index 014b9b7..9d75572 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js"
@@ -53,7 +53,7 @@
           if (rows.length > 1) {
             return this.$Message.error("璇烽�夋嫨涓�鏉℃暟鎹�");
           }
-          this.http.post(`api/Inbound/BatchInOrderFeedbackToMes?id=${rows[0].id}`,{},"鏁版嵁澶勭悊涓�...")
+          this.http.post(`api/Inbound/BatchInOrderFeedbackToMes?id=${rows[0].id}`, {}, "鏁版嵁澶勭悊涓�...")
             .then((x) => {
               if (x.status) {
                 this.$Message.success(x.message);
@@ -81,18 +81,28 @@
           column.formatter = (row) => {
             // 鏍¢獙details鏄惁瀛樺湪涓旀湁鏁版嵁
             if (row.details && row.details.length > 0) {
-              //鎸塵aterielCode鍒嗙粍缁熻orderQuantity鎬诲拰
+              // 鎸塵aterielCode鍒嗙粍锛屽悓鏃朵繚瀛樺搴旂殑materielName鍜岀粺璁rderQuantity鎬诲拰
               const materielSumMap = row.details.reduce((acc, item) => {
+                const materielName = item.materielName || "鏈煡鍚嶇О";
                 const materielCode = item.materielCode || "鏈煡鐗╂枡";
                 const quantity = Number(item.orderQuantity) || 0;
-                acc[materielCode] = (acc[materielCode] || 0) + quantity;
+
+                // 鏍稿績淇敼锛氫笉鍐嶅彧瀛樻暟閲忥紝鑰屾槸瀛樺寘鍚悕绉板拰鏁伴噺鐨勫璞�
+                if (!acc[materielCode]) {
+                  acc[materielCode] = {
+                    name: materielName, // 瀛樺偍鐗╂枡鍚嶇О
+                    total: 0 // 瀛樺偍鏁伴噺鎬诲拰
+                  };
+                }
+                acc[materielCode].total += quantity;
                 return acc;
               }, {});
 
-              //姣忎釜鐗╂枡椤圭敓鎴愮嫭绔媎iv锛岃法琛屾樉绀�
+              // 姣忎釜鐗╂枡椤圭敓鎴愮嫭绔媎iv锛屾樉绀虹紪鐮�+鍚嶇О+鏁伴噺
               const displayItems = Object.entries(materielSumMap).map(
-                ([code, total]) => {
-                  return `<div style="line-height: 1.5; white-space: normal;">${code}锛�${total}涓�</div>`;
+                ([code, data]) => {
+                  // 鏄剧ず鏍煎紡锛氱墿鏂欑紪鐮侊紙鐗╂枡鍚嶇О锛夛細鏁伴噺涓�
+                  return `<div style="line-height: 1.5; white-space: normal;">${code}锛�${data.name}锛夛細${data.total}涓�</div>`;
                 }
               );
               const displayContent = displayItems.join("");
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/NoStockOut.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/NoStockOut.vue"
index ec9dd47..157c95f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/NoStockOut.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/NoStockOut.vue"
@@ -8,6 +8,14 @@
       title="铏氭嫙鍑哄叆搴�"
       class="custom-vol-box"
     >
+      <!-- 鎻愪氦閬僵灞傦細瑕嗙洊鏁翠釜寮圭獥鍐呭鍖哄煙 -->
+      <div class="submit-mask" v-show="submitLoading">
+        <div class="mask-content">
+          <el-loading-spinner class="loading-icon" />
+          <span class="loading-text">姝e湪鎻愪氦鍑哄簱锛岃绋嶅��...</span>
+        </div>
+      </div>
+
       <div>
         <!-- 鍗曟嵁杈撳叆鍖哄煙锛堟敮鎸佹壂鐮侊級 -->
         <el-form 
@@ -25,7 +33,7 @@
               @input="handleOutboundInput"
               @keyup.enter="validateOutboundOrder"
               ref="outboundInputRef"
-              :disabled="loading"
+              :disabled="loading || submitLoading"
             ></el-input>
           </el-form-item>
           <el-form-item label="閲囪喘鍗曟嵁:" name="purchaseOrderNo">
@@ -37,6 +45,7 @@
               @input="handlePurchaseInput"
               readonly
               ref="purchaseInputRef"
+              :disabled="submitLoading"
             ></el-input>
           </el-form-item>
         </el-form>
@@ -62,7 +71,7 @@
               @keydown.enter="debouncedHandleScan" 
               autofocus
               class="custom-input"
-              :disabled="!orderForm.outboundOrderNo || loading"
+              :disabled="!orderForm.outboundOrderNo || loading || submitLoading"
             ></el-input>
           </el-form-item>
           <el-form-item>
@@ -71,7 +80,7 @@
               size="small" 
               @click="handleScan" 
               class="custom-button"
-              :disabled="!orderForm.outboundOrderNo || loading"
+              :disabled="!orderForm.outboundOrderNo || loading || submitLoading"
             >
               <Search /> 纭鎵弿
             </el-button>
@@ -123,7 +132,7 @@
                       @click="removeItem(index, item.barcode)"
                       icon="Delete"
                       circle
-                      :disabled="loading"
+                      :disabled="loading || submitLoading"
                     ></el-button>
                   </div>
                 </transition-group>
@@ -142,7 +151,7 @@
             type="primary" 
             size="small" 
             @click="submit" 
-            :disabled="scannedBarcodes.length === 0 || !orderForm.outboundOrderNo || loading" 
+            :disabled="scannedBarcodes.length === 0 || !orderForm.outboundOrderNo || loading || submitLoading" 
             class="submit-btn"
           >
             <Check /> 鎻愪氦鍑哄簱
@@ -156,7 +165,7 @@
               showDetailBox = false;
             }" 
             class="cancel-btn" 
-            :disabled="loading"
+            :disabled="loading || submitLoading"
           >
             鍙栨秷
           </el-button>
@@ -185,6 +194,8 @@
 });
 const scannedBarcodes = ref([]);
 const loading = ref(false);
+// 鏂板锛氭彁浜や笓灞瀕oading鐘舵�侊紝鎺у埗閬僵灞傛樉绀�
+const submitLoading = ref(false);
 
 // 妯℃澘寮曠敤
 const formRef = ref(null);
@@ -217,6 +228,7 @@
   formData.barcode = "";
   orderForm.outboundOrderNo = "";
   orderForm.purchaseOrderNo = "";
+  submitLoading.value = false; // 鎵撳紑寮圭獥鏃堕噸缃彁浜oading
   nextTick(() => {
     outboundInputRef.value?.focus(); // 鎵撳紑寮圭獥浠嶈仛鐒﹀嚭搴撳崟杈撳叆妗�
   });
@@ -333,9 +345,10 @@
     const purchaseOrderNo = await getPurchaseOrderByBarcode(barcode);
     if (purchaseOrderNo) {
       orderForm.purchaseOrderNo = purchaseOrderNo;
-      ElMessage.success(`鎴愬姛鏌ヨ鍒伴噰璐崟锛�${purchaseOrderNo}`);
     } else {
       ElMessage.info("鏈煡璇㈠埌璇ユ潯鐮佸搴旂殑閲囪喘鍗曞彿锛岀户缁獙璇佹潯鐮佹湁鏁堟��");
+      formData.barcode = ""; // 鏂板锛氶獙璇佸け璐ユ椂娓呯┖杈撳叆妗�
+      nextTick(() => barcodeInputRef.value?.focus()); // 鏂板锛氳仛鐒︽潯鐮佽緭鍏ユ
     }
 
     // 姝ラ2锛氶獙璇佹潯鐮佸苟鑾峰彇鐗╂枡淇℃伅
@@ -348,6 +361,8 @@
     if (validateRes.status === true) {
       if (!Array.isArray(validateRes.data) || validateRes.data.length === 0) {
         ElMessage.warning("璇ユ潯鐮侀獙璇佹垚鍔燂紝浣嗘湭杩斿洖鐗╂枡淇℃伅");
+        formData.barcode = ""; // 鏂板锛氭棤鐗╂枡淇℃伅鏃朵篃娓呯┖杈撳叆妗�
+        nextTick(() => barcodeInputRef.value?.focus()); // 鏂板锛氳仛鐒︽潯鐮佹
       } else {
         const newItems = validateRes.data.map(item => ({
           barcode: item.barcode || '',
@@ -360,14 +375,18 @@
         }));
         scannedBarcodes.value.push(...newItems);
         ElMessage.success(`鎵弿鎴愬姛锛屾柊澧� ${newItems.length} 鏉$墿鏂欎俊鎭紝绱 ${scannedBarcodes.value.length} 鏉);
+        formData.barcode = "";
       }
-      formData.barcode = "";
     } else {
       ElMessage.error("鎵弿澶辫触锛�" + (validateRes.message || '鏉$爜楠岃瘉澶辫触'));
+      formData.barcode = ""; // 鏂板锛氶獙璇佸け璐ユ椂娓呯┖杈撳叆妗�
+      nextTick(() => barcodeInputRef.value?.focus()); // 鏂板锛氳仛鐒︽潯鐮佽緭鍏ユ
     }
   } catch (error) {
     ElMessage.error(error.message);
-    formData.barcode = "";
+    formData.barcode = ""; // 淇濈暀锛氭帴鍙e紓甯告椂娓呯┖
+    // 鏂板锛氬紓甯告椂涔熷己鍒惰仛鐒︽潯鐮佹
+    nextTick(() => barcodeInputRef.value?.focus());
   } finally {
     loading.value = false;
     // 鎵弿瀹屾垚鍚庡缁堣仛鐒︽潯鐮佽緭鍏ユ锛堟柟渚胯繛缁壂鎻忥級
@@ -428,7 +447,8 @@
   const purchaseOrderNos = [...new Set(scannedBarcodes.value.map(item => item.purchaseOrderNo).filter(Boolean))];
 
   try {
-    loading.value = true;
+    // 寮�鍚彁浜oading锛屾樉绀洪伄缃╁眰
+    submitLoading.value = true;
     const res = await http.post("/api/OutboundPicking/NoStockOutSubmit", {
       OutOderSubmit: orderForm.outboundOrderNo,
       InOderSubmit: purchaseOrderNos.join(',') || '',
@@ -448,6 +468,8 @@
     ElMessage.error("鍑哄簱鎻愪氦寮傚父锛�" + error.message);
     nextTick(() => barcodeInputRef.value?.focus()); // 寮傚父鑱氱劍鏉$爜妗�
   } finally {
+    // 鍏抽棴鎻愪氦loading锛岄殣钘忛伄缃╁眰
+    submitLoading.value = false;
     loading.value = false;
   }
 };
@@ -476,6 +498,33 @@
   transition: transform 1s ease;
 }
 
+/* 鏂板锛氭彁浜ら伄缃╁眰鏍峰紡 */
+.submit-mask {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background-color: rgba(255, 255, 255, 0.85);
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  z-index: 100;
+  border-radius: inherit;
+}
+.mask-content {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  gap: 12px;
+  color: #409eff;
+  font-size: 15px;
+}
+.loading-icon {
+  font-size: 24px;
+  animation: el-loading-circle 1.5s linear infinite;
+}
+
 .scan-list {
   width: 100%;
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue"
index bd4b66b..06a8a53 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue"
@@ -147,7 +147,7 @@
         field: "orderStatistics",
         title: "鍗曟嵁鐗╂枡缁熻",
         type: "string",
-        width: 230,
+        width: 300,
         align: "left",
       },
       {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs"
index 586cd82..fa4c44d 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs"
@@ -2365,7 +2365,7 @@
                         foreach (var detail in inboundOrder.Details)
                         {
                             if (detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt() &&
-                                !string.IsNullOrEmpty(detail.Barcode))
+                                !string.IsNullOrEmpty(detail.Barcode)&& detail.OutBoxbarcodes == noStockOut.barCode)
                             {
                                 detailLists.Add(detail);
                             }
@@ -2386,11 +2386,18 @@
                 {
                     item.NoStockOutQty = 0;
 
-                    var matchedCode = outboundOrder.Details.FirstOrDefault(detail => detail.MaterielCode == item.MaterielCode && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt() && (detail.OrderQuantity-detail.LockQuantity-detail.MoveQty-detail.NoStockOutQty)>0);
+                    var matchedCode = outboundOrder.Details.FirstOrDefault(detail => detail.MaterielCode == item.MaterielCode && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()&& detail.OrderQuantity - detail.LockQuantity - detail.MoveQty - detail.NoStockOutQty > 0);
 
-                    if (matchedCode == null)
+                    if (matchedCode != null)
                     {
-                        return WebResponseContent.Instance.Error($"鍦ㄥ嚭搴撳崟鐨勭墿鏂欑紪鐮佷腑鏈壘鍒颁笌閲囪喘鍗曚腑鐨剓item.MaterielCode} 瀵瑰簲鐨勭墿鏂欍��");
+                        if(matchedCode.OrderQuantity - matchedCode.LockQuantity - matchedCode.MoveQty - matchedCode.NoStockOutQty < 0)
+                        {
+                            return WebResponseContent.Instance.Error($"鐗╂枡{item.MaterielCode}鍙嚭鏁伴噺婧㈠嚭{(matchedCode.LockQuantity + matchedCode.MoveQty + matchedCode.NoStockOutQty) - matchedCode.OrderQuantity}");
+                        }
+                    }
+                    else
+                    {
+                        return WebResponseContent.Instance.Error($"鍦ㄥ嚭搴撳崟鐨勭墿鏂欑紪鐮佷腑鏈壘鍒颁笌閲囪喘鍗曚腑鐨剓item.MaterielCode} 瀵瑰簲鐨勭墿鏂�");
                     }
                     if (!matchedCode.BatchNo.IsNullOrEmpty() && matchedCode.BatchNo != "")
                     {
@@ -2683,6 +2690,7 @@
                 {
                     item.LockQuantity = item.NoStockOutQty;
                     item.OverOutQuantity = item.NoStockOutQty;
+                    item.CurrentDeliveryQty = item.OverOutQuantity;
                     //娣诲姞鍥炰紶MES鍙傛暟
                     List<Barcodes> barcodesList = new List<Barcodes>();
                     List<Barcodes> documentsNOList = new List<Barcodes>();
@@ -2774,7 +2782,7 @@
                         BusinessType = "3",
                         FactoryArea = inboundOrder.FactoryArea,
                         OperationType = 1,
-                        Operator = inboundOrder.Operator,
+                        Operator = App.User.UserName,
                         OrderNo = inboundOrder.UpperOrderNo,
                         fromWarehouse = allocate?.FromWarehouse ?? "",
                         toWarehouse = allocate?.ToWarehouse ?? "",
@@ -2790,11 +2798,13 @@
 
                     if (response != null && response.IsSuccess)
                     {
-                        _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 });
+                        _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 })
+                            .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand();
                     }
                     else
                     {
-                        _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 });
+                        _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 })
+                            .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand();
                         return content.Error("鍥炰紶MES澶辫触");
                     }
                 }
@@ -2807,7 +2817,7 @@
                         business_type = inboundOrder.BusinessType,
                         factoryArea = inboundOrder.FactoryArea,
                         operationType = 1,
-                        Operator = inboundOrder.Operator,
+                        Operator = App.User.UserName,
                         orderNo = inboundOrder.UpperOrderNo,
                         status = inboundOrder.OrderStatus,
                         details = NoStockOutFeedbackInboundDetailsModelDto(detail)
@@ -2821,11 +2831,16 @@
 
                     if (response != null && response.IsSuccess)
                     {
-                        _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 });
+                        _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 })
+                            .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand();
+                        _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1 })
+                            .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
                     }
                     else
                     {
-                        _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 });
+                        _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 }).Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand();
+                        _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 2 })
+                            .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
                         return content.Error("鍥炰紶MES澶辫触");
                     }
                 }

--
Gitblit v1.9.3