ÏîÄ¿´úÂë/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js
@@ -349,18 +349,28 @@ column.formatter = (row) => { // æ ¡éªdetailsæ¯å¦åå¨ä¸ææ°æ® if (row.details && row.details.length > 0) { //æmaterielCodeåç»ç»è®¡orderQuantityæ»å // æmaterielCodeåç»ï¼åæ¶ä¿å对åºçmaterielNameåç»è®¡orderQuantityæ»å 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; }, {}); //æ¯ä¸ªç©æé¡¹çæç¬ç«divï¼è·¨è¡æ¾ç¤º // æ¯ä¸ªç©æé¡¹çæç¬ç«divï¼æ¾ç¤ºç¼ç +åç§°+æ°é 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(""); ÏîÄ¿´úÂë/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">æ£å¨æäº¤åºåºï¼è¯·ç¨å...</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); // æ°å¢ï¼æäº¤ä¸å±loadingç¶æï¼æ§å¶é®ç½©å±æ¾ç¤º const submitLoading = ref(false); // 模æ¿å¼ç¨ const formRef = ref(null); @@ -217,6 +228,7 @@ formData.barcode = ""; orderForm.outboundOrderNo = ""; orderForm.purchaseOrderNo = ""; submitLoading.value = false; // æå¼å¼¹çªæ¶éç½®æäº¤loading nextTick(() => { outboundInputRef.value?.focus(); // æå¼å¼¹çªä»èç¦åºåºåè¾å ¥æ¡ }); @@ -435,7 +447,8 @@ const purchaseOrderNos = [...new Set(scannedBarcodes.value.map(item => item.purchaseOrderNo).filter(Boolean))]; try { loading.value = true; // å¼å¯æäº¤loadingï¼æ¾ç¤ºé®ç½©å± submitLoading.value = true; const res = await http.post("/api/OutboundPicking/NoStockOutSubmit", { OutOderSubmit: orderForm.outboundOrderNo, InOderSubmit: purchaseOrderNos.join(',') || '', @@ -455,6 +468,8 @@ ElMessage.error("åºåºæäº¤å¼å¸¸ï¼" + error.message); nextTick(() => barcodeInputRef.value?.focus()); // å¼å¸¸èç¦æ¡ç æ¡ } finally { // å ³éæäº¤loadingï¼éèé®ç½©å± submitLoading.value = false; loading.value = false; } }; @@ -483,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%; } ÏîÄ¿´úÂë/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue
@@ -147,7 +147,7 @@ field: "orderStatistics", title: "åæ®ç©æç»è®¡", type: "string", width: 230, width: 300, align: "left", }, { ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/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} 对åºçç©æãæç©æ{item.MaterielCode}å¯åºæ°é溢åº{(matchedCode.LockQuantity + matchedCode.MoveQty + matchedCode.NoStockOutQty)-matchedCode.OrderQuantity }"); 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 != "") { @@ -2792,12 +2799,12 @@ if (response != null && response.IsSuccess) { _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 }) .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand(); ; .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand(); } else { _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 }) .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand(); ; .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand(); return content.Error("åä¼ MES失败"); } } @@ -2824,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失败"); } }