diff --git a/src/components/FinishedGoodSearch/GoodPickExecution.tsx b/src/components/FinishedGoodSearch/GoodPickExecution.tsx index 73ebd76..7d8147b 100644 --- a/src/components/FinishedGoodSearch/GoodPickExecution.tsx +++ b/src/components/FinishedGoodSearch/GoodPickExecution.tsx @@ -22,7 +22,7 @@ import { useCallback, useEffect, useState, useRef, useMemo } from "react"; import { useTranslation } from "react-i18next"; import { useRouter } from "next/navigation"; import { - fetchALLPickOrderLineLotDetails, + fetchAllPickOrderLotsHierarchical, updateStockOutLineStatus, createStockOutLine, recordPickExecutionIssue, @@ -426,14 +426,69 @@ const fetchFgPickOrdersData = useCallback(async () => { return; } - // Use the non-auto-assign endpoint - this only fetches existing data - const allLotDetails = await fetchALLPickOrderLineLotDetails(userIdToUse); + // ✅ Fix: fetchAllPickOrderLotsHierarchical returns hierarchical data, not a flat array + const hierarchicalData = await fetchAllPickOrderLotsHierarchical(userIdToUse); + console.log(" Hierarchical data:", hierarchicalData); + + // ✅ Fix: Ensure we always set an array + // If hierarchicalData is not in the expected format, default to empty array + let allLotDetails: any[] = []; + + if (hierarchicalData && Array.isArray(hierarchicalData)) { + // If it's already an array, use it directly + allLotDetails = hierarchicalData; + } else if (hierarchicalData?.pickOrders && Array.isArray(hierarchicalData.pickOrders)) { + // Process hierarchical data into flat array (similar to GoodPickExecutiondetail.tsx) + const mergedPickOrder = hierarchicalData.pickOrders[0]; + if (mergedPickOrder?.pickOrderLines) { + mergedPickOrder.pickOrderLines.forEach((line: any) => { + if (line.lots && line.lots.length > 0) { + line.lots.forEach((lot: any) => { + allLotDetails.push({ + pickOrderConsoCode: mergedPickOrder.consoCode, + pickOrderTargetDate: mergedPickOrder.targetDate, + pickOrderStatus: mergedPickOrder.status, + pickOrderId: line.pickOrderId || mergedPickOrder.pickOrderIds?.[0] || 0, + pickOrderCode: mergedPickOrder.pickOrderCodes?.[0] || "", + pickOrderLineId: line.id, + pickOrderLineRequiredQty: line.requiredQty, + pickOrderLineStatus: line.status, + itemId: line.item?.id, + itemCode: line.item?.code, + itemName: line.item?.name, + uomDesc: line.item?.uomDesc, + uomShortDesc: line.item?.uomShortDesc, + lotId: lot.id, + lotNo: lot.lotNo, + expiryDate: lot.expiryDate, + location: lot.location, + stockUnit: lot.stockUnit, + availableQty: lot.availableQty, + requiredQty: lot.requiredQty, + actualPickQty: lot.actualPickQty, + lotStatus: lot.lotStatus, + lotAvailability: lot.lotAvailability, + processingStatus: lot.processingStatus, + stockOutLineId: lot.stockOutLineId, + stockOutLineStatus: lot.stockOutLineStatus, + stockOutLineQty: lot.stockOutLineQty, + routerId: lot.router?.id, + routerIndex: lot.router?.index, + routerRoute: lot.router?.route, + routerArea: lot.router?.area, + }); + }); + } + }); + } + } + console.log(" All combined lot details:", allLotDetails); setCombinedLotData(allLotDetails); setOriginalCombinedData(allLotDetails); - // 计算完成状态并发送事件 - const allCompleted = allLotDetails.length > 0 && allLotDetails.every(lot => + // ✅ Fix: Add safety check - ensure allLotDetails is an array before using .every() + const allCompleted = Array.isArray(allLotDetails) && allLotDetails.length > 0 && allLotDetails.every((lot: any) => lot.processingStatus === 'completed' ); @@ -462,6 +517,7 @@ const fetchFgPickOrdersData = useCallback(async () => { } }, [currentUserId, combinedLotData]); + // Only fetch existing data when session is ready, no auto-assignment useEffect(() => { if (session && currentUserId && !initializationRef.current) { @@ -1038,10 +1094,15 @@ const fetchFgPickOrdersData = useCallback(async () => { }); }, []); - // Pagination data with sorting by routerIndex const paginatedData = useMemo(() => { + // ✅ Fix: Add safety check to ensure combinedLotData is an array + if (!Array.isArray(combinedLotData)) { + console.warn("⚠️ combinedLotData is not an array:", combinedLotData); + return []; + } + // Sort by routerIndex first, then by other criteria - const sortedData = [...combinedLotData].sort((a, b) => { + const sortedData = [...combinedLotData].sort((a: any, b: any) => { const aIndex = a.routerIndex || 0; const bIndex = b.routerIndex || 0; @@ -1063,9 +1124,6 @@ const fetchFgPickOrdersData = useCallback(async () => { const endIndex = startIndex + paginationController.pageSize; return sortedData.slice(startIndex, endIndex); }, [combinedLotData, paginationController]); - -// ... existing code ... - return ( {/* 修复:改进条件渲染逻辑 */}