From 7f58edd8ff6fdadbe7b1d15cf86ffe7b47dc4fe3 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期日, 20 九月 2026 11:17:50 +0800
Subject: [PATCH] fix: 领料台账添加序号;批号展出可用库存;可单个进行领料
---
src/views/productionManagement/productionOrder/components/MaterialLedgerDialog.vue | 57 ++++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 42 insertions(+), 15 deletions(-)
diff --git a/src/views/productionManagement/productionOrder/components/MaterialLedgerDialog.vue b/src/views/productionManagement/productionOrder/components/MaterialLedgerDialog.vue
index cda3dd2..d066899 100644
--- a/src/views/productionManagement/productionOrder/components/MaterialLedgerDialog.vue
+++ b/src/views/productionManagement/productionOrder/components/MaterialLedgerDialog.vue
@@ -19,6 +19,10 @@
<el-table-column align="center"
type="selection"
width="55" />
+ <el-table-column align="center"
+ type="index"
+ label="搴忓彿"
+ width="60" />
<el-table-column label="宸ュ簭鍚嶇О"
min-width="100">
<template #default="{ row }">
@@ -63,11 +67,13 @@
multiple
collapse-tags
collapse-tags-indicator
+ clearable
placeholder="璇烽�夋嫨鎵瑰彿"
- style="width: 100%;">
+ style="width: 100%;"
+ @change="val => handleBatchNoChange(row, val)">
<el-option v-for="item in row.batchNoList"
:key="item"
- :label="item"
+ :label="getBatchOptionLabel(row, item)"
:value="item" />
</el-select>
</template>
@@ -246,8 +252,13 @@
stockQty: null,
batchNo: [],
batchNoList,
+ batchQtyMap: {},
};
};
+
+ // 鎵瑰彿閫夐」灞曠ず涓衡�滄壒鍙凤紙搴撳瓨鏁伴噺锛夆��
+ const getBatchOptionLabel = (row, batchNo) =>
+ `${batchNo}锛�${stripTrailingZeros(row.batchQtyMap?.[batchNo] ?? 0)}锛塦;
const getProcessOptions = async () => {
if (!props.orderRow?.id) return;
@@ -374,14 +385,7 @@
// 鍏堟煡鍑哄簱瀛樹綑閲忓啀鍏ヨ〃锛屼繚璇侀娆℃墦寮�鍗冲睍绀猴紙rows 灏氭湭杞负鍝嶅簲寮忎唬鐞嗭紝
// 鍏ヨ〃鍚庡啀鏀瑰師濮嬪璞′笉浼氳Е鍙戣鍥炬洿鏂帮級
await loadStockQtyForRows(rows);
- // 鎵撳紑棰嗘枡鍙拌处榛樿锛氳嚜鍔ㄩ�変腑绗竴涓彲鐢ㄦ壒鍙凤紝棰嗙敤鏁伴噺=闇�姹傛暟閲�
- rows.forEach(row => {
- const batchNoList = Array.isArray(row.batchNoList) ? row.batchNoList : [];
- if (batchNoList.length > 0) {
- row.batchNo = [batchNoList[0]];
- row.pickQty = toNumber(row.demandedQuantity);
- }
- });
+ // 鎵撳紑棰嗘枡鍙拌处涓嶉粯璁ら�変腑鎵瑰彿锛氬彧鏈夋墜鍔ㄩ�夋嫨浜嗘壒鍙风殑琛屾墠浼氶鏂�
materialTableData.value = rows;
} finally {
materialTableLoading.value = false;
@@ -403,12 +407,13 @@
currentMaterialSelectRowIndex.value = -1;
};
- // 鎸夊瀷鍙锋眹鎬绘墍鏈夋壒娆$殑鍘熸枡鍙敤搴撳瓨浣欓噺
+ // 鎸夊瀷鍙锋眹鎬绘墍鏈夋壒娆$殑鍘熸枡鍙敤搴撳瓨浣欓噺锛屽苟璁板綍姣忎釜鎵瑰彿瀵瑰簲鐨勫簱瀛樻暟閲�
const loadStockQtyForRows = async rows => {
const modelIds = [
...new Set(rows.map(row => row.materialModelId).filter(Boolean)),
];
const stockMap = new Map();
+ const batchQtyMap = new Map();
await Promise.all(
modelIds.map(async modelId => {
try {
@@ -416,24 +421,34 @@
const list = Array.isArray(res?.data)
? res.data
: res?.data?.records || res?.data?.rows || [];
- const total = list.reduce(
- (sum, item) => sum + toNumber(item?.qualitity ?? item?.quantity),
- 0
- );
+ const perBatch = {};
+ const total = list.reduce((sum, item) => {
+ const qty = toNumber(item?.qualitity ?? item?.quantity);
+ if (item?.batchNo) {
+ perBatch[item.batchNo] = roundQuantity(
+ toNumber(perBatch[item.batchNo]) + qty
+ );
+ }
+ return sum + qty;
+ }, 0);
stockMap.set(modelId, roundQuantity(total));
+ batchQtyMap.set(modelId, perBatch);
} catch (e) {
stockMap.set(modelId, 0);
+ batchQtyMap.set(modelId, {});
}
})
);
rows.forEach(row => {
if (!row.materialModelId) {
row.stockQty = null;
+ row.batchQtyMap = {};
return;
}
row.stockQty = stockMap.has(row.materialModelId)
? stockMap.get(row.materialModelId)
: 0;
+ row.batchQtyMap = batchQtyMap.get(row.materialModelId) || {};
});
};
@@ -479,6 +494,17 @@
row.technologyOperationId = process?.technologyOperationId;
};
+ // 閫夋嫨鎵瑰彿鍗宠〃绀烘湰琛屾湰娆¢鏂欙細鑷姩甯﹀嚭鍓╀綑闇�棰嗘暟閲忥紱娓呯┖鎵瑰彿琛ㄧず鏈涓嶉鏂�
+ const handleBatchNoChange = (row, batchNo) => {
+ if (!Array.isArray(batchNo) || batchNo.length === 0) {
+ row.pickQty = 0;
+ return;
+ }
+ if (toNumber(row.pickQty) <= 0) {
+ row.pickQty = roundQuantity(row.remainingQty);
+ }
+ };
+
const handleRequiredQtyChange = (row, val) => {
const required = roundQuantity(val);
row.demandedQuantity = required;
@@ -509,6 +535,7 @@
row.unit = product.unit || product.measureUnit || "";
row.batchNoList = Array.isArray(product.batchNoList) ? product.batchNoList : [];
row.batchNo = [];
+ row.pickQty = 0;
currentMaterialSelectRowIndex.value = -1;
materialProductDialogVisible.value = false;
loadStockQtyForRows([row]);
--
Gitblit v1.9.3