From a6baad20258a61d9ce9a786029ca4cb63a7c992e Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期二, 21 四月 2026 17:31:33 +0800
Subject: [PATCH] 优化出入库功能,新增对未完全入库和出库商品的检查,更新相关API接口以支持审批人字段的统一命名
---
src/pages/inventoryManagement/scanIn/scanIn.submit.ts | 18 ++++----
src/pages/inventoryManagement/scanOut/index.vue | 44 +++++++++++++++++++++-
src/pages/inventoryManagement/scanIn/index.vue | 13 +++++-
3 files changed, 62 insertions(+), 13 deletions(-)
diff --git a/src/pages/inventoryManagement/scanIn/index.vue b/src/pages/inventoryManagement/scanIn/index.vue
index 6502574..f68ebd5 100644
--- a/src/pages/inventoryManagement/scanIn/index.vue
+++ b/src/pages/inventoryManagement/scanIn/index.vue
@@ -303,6 +303,11 @@
item.operateQuantity = String(Math.max(0, n));
};
+ const hasEditableInboundItems = computed(() => {
+ if (!recordList.value?.length) return false;
+ return recordList.value.some(item => !isFullyStocked(item));
+ });
+
const formatCell = (item, row, idx) => {
if (row.key === "index") {
const v = item.index;
@@ -426,6 +431,10 @@
modal.msgError("缂哄皯璁㈠崟淇℃伅锛岃閲嶆柊鎵爜");
return;
}
+ if (!hasEditableInboundItems.value) {
+ modal.msgError("璇ヤ骇鍝佸凡缁忓叏閮ㄥ叆搴�");
+ return;
+ }
const salesLedgerProductList = buildSalesLedgerProductList(recordList.value);
if (!hasAnyPositiveStockedQty(salesLedgerProductList)) {
modal.msgError("璇疯嚦灏戝~鍐欎竴琛屽ぇ浜� 0 鐨勫叆搴撴暟閲�");
@@ -438,10 +447,10 @@
return;
}
const runApi = currentSubmitConfig.runApi;
- const inboundApproveUserIds = stockApproverNodes.value.map(node => node.userId).join(",");
+ const approveUserIds = stockApproverNodes.value.map(node => node.userId).join(",");
const payload = currentSubmitConfig.payloadBuilder(
salesLedgerProductList,
- inboundApproveUserIds
+ approveUserIds
);
try {
submitLoading.value = true;
diff --git a/src/pages/inventoryManagement/scanIn/scanIn.submit.ts b/src/pages/inventoryManagement/scanIn/scanIn.submit.ts
index e27145f..8e997e0 100644
--- a/src/pages/inventoryManagement/scanIn/scanIn.submit.ts
+++ b/src/pages/inventoryManagement/scanIn/scanIn.submit.ts
@@ -16,41 +16,41 @@
type SubmitConfig = {
runApi: (data: any) => Promise<any>;
- payloadBuilder: (list: AnyRow[], inboundApproveUserIds: string) => any;
+ payloadBuilder: (list: AnyRow[], approveUserIds: string) => any;
};
export function createSubmitConfig(scanLedgerIdRef: AnyRef<string | number | null>) {
const cfg: Record<string, SubmitConfig> = {
[`${CONTRACT_KIND.sales}-${QUALITY_TYPE.qualified}`]: {
runApi: scanInboundSales,
- payloadBuilder: (list: AnyRow[], inboundApproveUserIds: string) => ({
+ payloadBuilder: (list: AnyRow[], approveUserIds: string) => ({
salesLedgerId: scanLedgerIdRef.value,
salesLedgerProductList: list,
- inboundApproveUserIds,
+ approveUserIds,
}),
},
[`${CONTRACT_KIND.sales}-${QUALITY_TYPE.unqualified}`]: {
runApi: scanInboundSalesUnqualified,
- payloadBuilder: (list: AnyRow[], inboundApproveUserIds: string) => ({
+ payloadBuilder: (list: AnyRow[], approveUserIds: string) => ({
salesLedgerId: scanLedgerIdRef.value,
salesLedgerProductList: list,
- inboundApproveUserIds,
+ approveUserIds,
}),
},
[`${CONTRACT_KIND.purchase}-${QUALITY_TYPE.qualified}`]: {
runApi: scanInboundPurchase,
- payloadBuilder: (list: AnyRow[], inboundApproveUserIds: string) => ({
+ payloadBuilder: (list: AnyRow[], approveUserIds: string) => ({
purchaseLedgerId: scanLedgerIdRef.value,
salesLedgerProductList: list,
- inboundApproveUserIds,
+ approveUserIds,
}),
},
[`${CONTRACT_KIND.purchase}-${QUALITY_TYPE.unqualified}`]: {
runApi: scanInboundPurchaseUnqualified,
- payloadBuilder: (list: AnyRow[], inboundApproveUserIds: string) => ({
+ payloadBuilder: (list: AnyRow[], approveUserIds: string) => ({
purchaseLedgerId: scanLedgerIdRef.value,
salesLedgerProductList: list,
- inboundApproveUserIds,
+ approveUserIds,
}),
},
};
diff --git a/src/pages/inventoryManagement/scanOut/index.vue b/src/pages/inventoryManagement/scanOut/index.vue
index e5ef746..8359451 100644
--- a/src/pages/inventoryManagement/scanOut/index.vue
+++ b/src/pages/inventoryManagement/scanOut/index.vue
@@ -188,8 +188,7 @@
</view>
- <view
-
+ <view v-if="!isFullyOutbound(item)"
class="stocked-qty-block">
<view class="kv-row stocked-qty-row">
@@ -512,6 +511,43 @@
};
+ const parseUnqualifiedInboundQty = item => {
+ return (
+ parseOptionalNumber(
+ item?.unqualifiedStockedQuantity ??
+ item?.unQualifiedStockedQuantity ??
+ item?.unqualifiedStockedQty ??
+ item?.unqualifiedInboundQuantity
+ ) ?? 0
+ );
+ };
+
+ const parseUnqualifiedOutboundQty = item => {
+ return (
+ parseOptionalNumber(
+ item?.unqualifiedShippedQuantity ??
+ item?.unQualifiedShippedQuantity ??
+ item?.unqualifiedShippedQty ??
+ item?.unqualifiedOutboundQuantity
+ ) ?? 0
+ );
+ };
+
+ const isFullyOutbound = item => {
+ if (type.value === QUALITY_TYPE.unqualified) {
+ return parseUnqualifiedInboundQty(item) - parseUnqualifiedOutboundQty(item) <= 0;
+ }
+ const remaining = parseOptionalNumber(item?.remainingShippedQuantity);
+ if (remaining !== null) return remaining <= 0;
+ const fallback = parseOptionalNumber(defaultStockedQuantityFromRow(item, "outbound"));
+ return fallback !== null ? fallback <= 0 : false;
+ };
+
+ const hasEditableOutboundItems = computed(() => {
+ if (!recordList.value?.length) return false;
+ return recordList.value.some(item => !isFullyOutbound(item));
+ });
+
const formatCell = (item, row, idx) => {
@@ -634,6 +670,10 @@
return;
}
+ if (!hasEditableOutboundItems.value) {
+ modal.msgError("璇ヤ骇鍝佸凡缁忓叏閮ㄥ嚭搴�");
+ return;
+ }
const salesLedgerProductList = buildSalesLedgerProductList(recordList.value);
--
Gitblit v1.9.3