diff --git a/src/components/production/WorkerScreen/MaterialInputModal.tsx b/src/components/production/WorkerScreen/MaterialInputModal.tsx index cbc1c85e..da05aa5e 100644 --- a/src/components/production/WorkerScreen/MaterialInputModal.tsx +++ b/src/components/production/WorkerScreen/MaterialInputModal.tsx @@ -89,6 +89,12 @@ export function MaterialInputModal({ const [isSubmitting, setIsSubmitting] = useState(false); const materialsLoadedRef = useRef(false); + // 재공품 여부 판별 — 재공품이면 검색 시 원자재(RM)만 조회 + const isWipOrder = useMemo(() => { + if (!order) return false; + return order.projectName === '재고생산' || order.salesOrderNo?.startsWith('STK'); + }, [order]); + // 재고 검색 상태 const [searchOpenGroup, setSearchOpenGroup] = useState(null); const [searchQuery, setSearchQuery] = useState(''); @@ -98,12 +104,14 @@ export function MaterialInputModal({ // 품목 검색 결과 (재고 없는 품목 포함) const [itemSearchResults, setItemSearchResults] = useState([]); - const handleStockSearch = useCallback(async (query: string) => { - if (!query.trim()) { setSearchResults([]); setItemSearchResults([]); return; } + const handleStockSearch = useCallback(async (query: string | undefined) => { + if (!query?.trim()) { setSearchResults([]); setItemSearchResults([]); return; } setIsSearching(true); + // 재공품: 원자재(RM)만 검색, 일반: 전체 검색 + const typeFilter = isWipOrder ? 'RM' : undefined; const [stockResult, itemResult] = await Promise.all([ - searchStockByCode(query.trim()), - searchItems(query.trim()), + searchStockByCode(query.trim(), typeFilter), + searchItems(query.trim(), typeFilter), ]); if (stockResult.success) setSearchResults(stockResult.data); if (itemResult.success) { @@ -112,7 +120,7 @@ export function MaterialInputModal({ setItemSearchResults(itemResult.data.filter(i => !stockItemIds.has(i.itemId))); } setIsSearching(false); - }, []); + }, [isWipOrder]); const [isForceCreating, setIsForceCreating] = useState(false); @@ -570,7 +578,7 @@ export function MaterialInputModal({ value={searchQuery} onChange={(e) => setSearchQuery(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && handleStockSearch(searchQuery)} - placeholder="품목코드 또는 자재명으로 재고 검색" + placeholder={isWipOrder ? "원자재 코드 또는 자재명으로 검색" : "품목코드 또는 자재명으로 재고 검색"} className="flex-1 text-xs px-2 py-1.5 border rounded bg-white" />