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