diff --git a/src/components/production/WorkerScreen/MaterialInputModal.tsx b/src/components/production/WorkerScreen/MaterialInputModal.tsx index 9240750b..e53f3d15 100644 --- a/src/components/production/WorkerScreen/MaterialInputModal.tsx +++ b/src/components/production/WorkerScreen/MaterialInputModal.tsx @@ -14,7 +14,7 @@ */ import { useState, useEffect, useCallback, useMemo, useRef } from 'react'; -import { Loader2, Check, Zap } from 'lucide-react'; +import { Loader2, Check, Zap, Info } from 'lucide-react'; import { ContentSkeleton } from '@/components/ui/skeleton'; import { Dialog, @@ -547,6 +547,47 @@ export function MaterialInputModal({ {group.materialCode} )} + {/* 매칭 정보 말풍선 */} + + l.stockLotId !== null) ? "text-blue-400" : "text-red-400" + )} /> + + 자재 매칭 정보 + + 품목코드: {group.materialCode || '-'}
+ 규격: {group.lots[0]?.specification || '-'}
+ 매칭기준: 품목코드 + 규격 일치하는 입고 LOT 검색 (FIFO) +
+ {(() => { + const availableLots = group.lots.filter(l => l.stockLotId !== null); + const noStockLots = group.lots.filter(l => l.stockLotId === null); + if (availableLots.length > 0) { + return ( + + + ✓ {availableLots.length}건 매칭 완료 + + {availableLots.map((l, i) => ( + + LOT {l.lotNo} | 가용 {formatNumber(l.lotAvailableQty)}{group.unit} | FIFO #{l.fifoRank} + + ))} + + ); + } + return ( + + ✗ 매칭 가능한 입고 LOT 없음 + + → [{group.materialCode}] {group.lots[0]?.specification || ''} 자재를 입고해주세요 + + + ); + })()} +
+