From 62a7b5355a690cb3ed83ce226abd0db069a1bb99 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Tue, 4 Nov 2025 23:56:12 +0800 Subject: [PATCH] update --- .../GoodPickExecutionForm.tsx | 16 +++++++++--- .../GoodPickExecutiondetail.tsx | 26 ++++++++++++++++--- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/components/FinishedGoodSearch/GoodPickExecutionForm.tsx b/src/components/FinishedGoodSearch/GoodPickExecutionForm.tsx index 90e2e7c..ab9f480 100644 --- a/src/components/FinishedGoodSearch/GoodPickExecutionForm.tsx +++ b/src/components/FinishedGoodSearch/GoodPickExecutionForm.tsx @@ -200,16 +200,26 @@ const PickExecutionForm: React.FC = ({ }; const handleSubmit = async () => { - if (!validateForm() || !formData.pickOrderId) { + // ✅ 先验证表单 + if (!validateForm()) { + console.error('Form validation failed:', errors); + return; // ✅ 阻止提交,显示验证错误 + } + + if (!formData.pickOrderId) { + console.error('Missing pickOrderId'); return; } setLoading(true); try { await onSubmit(formData as PickExecutionIssueData); - onClose(); - } catch (error) { + // ✅ 成功时会自动关闭(由 onClose 处理) + } catch (error: any) { console.error('Error submitting pick execution issue:', error); + // ✅ 显示错误消息(可以通过 props 或 state 传递错误消息到父组件) + // 或者在这里显示 toast/alert + alert(t('Failed to submit issue. Please try again.') + (error.message ? `: ${error.message}` : '')); } finally { setLoading(false); } diff --git a/src/components/FinishedGoodSearch/GoodPickExecutiondetail.tsx b/src/components/FinishedGoodSearch/GoodPickExecutiondetail.tsx index edcbd6f..aa7f54f 100644 --- a/src/components/FinishedGoodSearch/GoodPickExecutiondetail.tsx +++ b/src/components/FinishedGoodSearch/GoodPickExecutiondetail.tsx @@ -507,14 +507,31 @@ console.log("🔍 DEBUG fgOrder.deliveryNos:", fgOrder.deliveryNos); mergedPickOrder.pickOrderLines.forEach((line: any) => { if (line.lots && line.lots.length > 0) { - // ✅ 有 lots 的情况 + // ✅ 修复:先对 lots 按 lotId 去重并合并 requiredQty + const lotMap = new Map(); + line.lots.forEach((lot: any) => { + const lotId = lot.id; + if (lotMap.has(lotId)) { + // ✅ 如果已存在,合并 requiredQty + const existingLot = lotMap.get(lotId); + existingLot.requiredQty = (existingLot.requiredQty || 0) + (lot.requiredQty || 0); + // ✅ 保留其他字段(使用第一个遇到的 lot 的字段) + } else { + // ✅ 首次遇到,添加到 map + lotMap.set(lotId, { ...lot }); + } + }); + + // ✅ 遍历去重后的 lots + lotMap.forEach((lot: any) => { flatLotData.push({ // ✅ 使用合并后的数据 pickOrderConsoCode: mergedPickOrder.consoCode, pickOrderTargetDate: mergedPickOrder.targetDate, pickOrderStatus: mergedPickOrder.status, - + pickOrderId: mergedPickOrder.pickOrderIds?.[0] || 0, // ✅ 使用第一个 pickOrderId + pickOrderCode: mergedPickOrder.pickOrderCodes?.[0] || "", pickOrderLineId: line.id, pickOrderLineRequiredQty: line.requiredQty, pickOrderLineStatus: line.status, @@ -531,7 +548,7 @@ console.log("🔍 DEBUG fgOrder.deliveryNos:", fgOrder.deliveryNos); location: lot.location, stockUnit: lot.stockUnit, availableQty: lot.availableQty, - requiredQty: lot.requiredQty, + requiredQty: lot.requiredQty, // ✅ 使用合并后的 requiredQty actualPickQty: lot.actualPickQty, inQty: lot.inQty, outQty: lot.outQty, @@ -561,7 +578,8 @@ console.log("🔍 DEBUG fgOrder.deliveryNos:", fgOrder.deliveryNos); pickOrderConsoCode: mergedPickOrder.consoCodes?.[0] || "", // ✅ 修复:consoCodes 是数组 pickOrderTargetDate: mergedPickOrder.targetDate, pickOrderStatus: mergedPickOrder.status, - + pickOrderId: mergedPickOrder.pickOrderIds?.[0] || 0, // ✅ 使用第一个 pickOrderId + pickOrderCode: mergedPickOrder.pickOrderCodes?.[0] || "", pickOrderLineId: line.id, pickOrderLineRequiredQty: line.requiredQty, pickOrderLineStatus: line.status,