From 2122e30c435e4287a035162aee4469a8e558f408 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期三, 22 四月 2026 13:43:56 +0800
Subject: [PATCH] 新增采购详情和产品明细展示功能
---
src/pages/inventoryManagement/scanOut/index.vue | 156 +++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 124 insertions(+), 32 deletions(-)
diff --git a/src/pages/inventoryManagement/scanOut/index.vue b/src/pages/inventoryManagement/scanOut/index.vue
index bcbe216..8359451 100644
--- a/src/pages/inventoryManagement/scanOut/index.vue
+++ b/src/pages/inventoryManagement/scanOut/index.vue
@@ -188,8 +188,7 @@
</view>
- <view v-if="!isFullyStocked(item)"
-
+ <view v-if="!isFullyOutbound(item)"
class="stocked-qty-block">
<view class="kv-row stocked-qty-row">
@@ -200,7 +199,7 @@
<up-input :key="'stocked-' + idx"
- v-model="item.stockedQuantity"
+ v-model="item.operateQuantity"
type="number"
@@ -322,7 +321,22 @@
- const { detailFieldRows, summaryFieldRows } = useScanOutFieldRows(contractKind);
+ const { detailFieldRows: rawDetailFieldRows, summaryFieldRows: rawSummaryFieldRows } = useScanOutFieldRows(
+ contractKind,
+ "outbound"
+ );
+ const shouldShowOutboundQuantityField = key => {
+ if (type.value === QUALITY_TYPE.qualified)
+ return key !== "unqualifiedShippedQuantity" && key !== "unqualifiedStockedQuantity";
+ if (type.value === QUALITY_TYPE.unqualified) return key !== "shippedQuantity" && key !== "remainingShippedQuantity";
+ return true;
+ };
+ const detailFieldRows = computed(() =>
+ rawDetailFieldRows.value.filter(row => shouldShowOutboundQuantityField(row.key))
+ );
+ const summaryFieldRows = computed(() =>
+ rawSummaryFieldRows.value.filter(row => shouldShowOutboundQuantityField(row.key))
+ );
@@ -412,16 +426,6 @@
- const isFullyStocked = item => {
-
- const s = item?.productStockStatus;
-
- return s == 2 || s === "2";
-
- };
-
-
-
const parseOptionalNumberLocal = raw => {
if (raw === null || raw === undefined || raw === "") return null;
@@ -478,13 +482,11 @@
const onStockedQtyBlur = item => {
- if (isFullyStocked(item)) return;
-
- const raw = item.stockedQuantity;
+ const raw = item.operateQuantity;
if (raw === null || raw === undefined || String(raw).trim() === "") {
- item.stockedQuantity = "0";
+ item.operateQuantity = "0";
return;
@@ -493,16 +495,58 @@
const n = Number(String(raw).trim());
if (Number.isNaN(n)) {
-
- item.stockedQuantity = defaultStockedQuantityFromRow(item);
+ if (type.value === QUALITY_TYPE.unqualified) {
+ const unqualifiedInbound = parseOptionalNumber(item.unqualifiedStockedQuantity) ?? 0;
+ const unqualifiedOutbound = parseOptionalNumber(item.unqualifiedShippedQuantity) ?? 0;
+ item.operateQuantity = String(Math.max(0, unqualifiedInbound - unqualifiedOutbound));
+ } else {
+ item.operateQuantity = defaultStockedQuantityFromRow(item, "outbound");
+ }
return;
}
- item.stockedQuantity = String(Math.max(0, n));
+ item.operateQuantity = String(Math.max(0, n));
};
+
+ 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));
+ });
@@ -528,18 +572,34 @@
if (row.key === "remainingQuantity") {
- const v =
-
- item.remainingQuantity ??
-
- item.remaining_quantity ??
-
- item.remainQuantity ??
-
- item.remain_quantity;
+ const v = item.remainingQuantity;
return emptyDash(v);
+ }
+ if (row.key === "remainingShippedQuantity") {
+ const v = item.remainingShippedQuantity;
+ return emptyDash(v);
+ }
+ if (row.key === "shippedQuantity") {
+ const v = item.shippedQuantity;
+ return emptyDash(v);
+ }
+ if (row.key === "unqualifiedShippedQuantity") {
+ const v =
+ item.unqualifiedShippedQuantity ??
+ item.unQualifiedShippedQuantity ??
+ item.unqualifiedShippedQty ??
+ item.unqualifiedOutboundQuantity;
+ return emptyDash(v);
+ }
+ if (row.key === "stockedQuantity") {
+ const v = item.stockedQuantity;
+ return emptyDash(v);
+ }
+ if (row.key === "unqualifiedStockedQuantity") {
+ const v = item.unqualifiedStockedQuantity;
+ return emptyDash(v);
}
if (row.key === "availableQuality") {
@@ -609,6 +669,10 @@
return;
+ }
+ if (!hasEditableOutboundItems.value) {
+ modal.msgError("璇ヤ骇鍝佸凡缁忓叏閮ㄥ嚭搴�");
+ return;
}
const salesLedgerProductList = buildSalesLedgerProductList(recordList.value);
@@ -799,8 +863,36 @@
recordList.value = res.data.map(row => ({
...row,
-
- stockedQuantity: defaultStockedQuantityFromRow(row),
+ unqualifiedShippedQuantity:
+ row.unqualifiedShippedQuantity ??
+ row.unQualifiedShippedQuantity ??
+ row.unqualifiedShippedQty ??
+ row.unqualifiedOutboundQuantity,
+ unqualifiedStockedQuantity:
+ row.unqualifiedStockedQuantity ??
+ row.unQualifiedStockedQuantity ??
+ row.unqualifiedStockedQty ??
+ row.unqualifiedInboundQuantity,
+ operateQuantity:
+ type.value === QUALITY_TYPE.unqualified
+ ? String(
+ Math.max(
+ 0,
+ (parseOptionalNumber(
+ row.unqualifiedStockedQuantity ??
+ row.unQualifiedStockedQuantity ??
+ row.unqualifiedStockedQty ??
+ row.unqualifiedInboundQuantity
+ ) ?? 0) -
+ (parseOptionalNumber(
+ row.unqualifiedShippedQuantity ??
+ row.unQualifiedShippedQuantity ??
+ row.unqualifiedShippedQty ??
+ row.unqualifiedOutboundQuantity
+ ) ?? 0)
+ )
+ )
+ : defaultStockedQuantityFromRow(row, "outbound"),
}));
--
Gitblit v1.9.3