From a9eeae8b5b9441aa5f214789f0238a2e2c097651 Mon Sep 17 00:00:00 2001
From: 647556386 <647556386@qq.com>
Date: 星期二, 06 一月 2026 14:50:34 +0800
Subject: [PATCH] 1
---
项目代码/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue | 2
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs | 28 ++++++++++----
项目代码/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js | 30 ++++++++++-----
项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/NoStockOut.vue | 56 ++++++++++++++++++++++++---
4 files changed, 90 insertions(+), 26 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 e70505c..d77a94e 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"
@@ -31,7 +31,7 @@
name: "鎾ら攢缁勭洏",
type: "primary",
value: "鎾ら攢缁勭洏",
- onClick: function() {
+ onClick: function () {
console.log("鎾ら攢缁勭洏鎸夐挳琚偣鍑�");
const mountNode = document.createElement("div");
document.body.appendChild(mountNode);
@@ -57,9 +57,9 @@
try {
const response = await http.post(
"/api/InboundOrder/UndoPalletGroup?palletCode=" +
- formData.palletCode.trim() +
- "&barcode=" +
- formData.barcode.trim()
+ formData.palletCode.trim() +
+ "&barcode=" +
+ formData.barcode.trim()
);
const { status, message, data } = response;
if (status) {
@@ -292,7 +292,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);
@@ -349,18 +349,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 d19a48e..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(); // 鎵撳紑寮圭獥浠嶈仛鐒﹀嚭搴撳崟杈撳叆妗�
});
@@ -435,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(',') || '',
@@ -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%;
}
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 6312766..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} 瀵瑰簲鐨勭墿鏂欍�傛垨鐗╂枡{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澶辫触");
}
}
--
Gitblit v1.9.3