diff --git a/src/components/production/WorkerScreen/actions.ts b/src/components/production/WorkerScreen/actions.ts index 6dc3ab90..04726d6e 100644 --- a/src/components/production/WorkerScreen/actions.ts +++ b/src/components/production/WorkerScreen/actions.ts @@ -243,7 +243,8 @@ export async function completeWorkOrder( errorMessage: '작업 완료 처리에 실패했습니다.', }); if (!result.success) return { success: false, error: result.error }; - const lotNo = `KD-SA-${new Date().toISOString().slice(2, 10).replace(/-/g, '')}-01`; + // 백엔드에서 생성한 실제 LOT 번호 사용 + const lotNo = result.data?.lot_no || null; return { success: true, lotNo }; } diff --git a/src/components/production/WorkerScreen/index.tsx b/src/components/production/WorkerScreen/index.tsx index 66dfbde7..f09ae389 100644 --- a/src/components/production/WorkerScreen/index.tsx +++ b/src/components/production/WorkerScreen/index.tsx @@ -1016,18 +1016,10 @@ export default function WorkerScreen() { setIsMaterialModalOpen(true); }, []); - // MaterialInputModal 완료 후 → 작업 완료 결과 팝업 - const handleWorkCompletion = useCallback(() => { + // MaterialInputModal 완료 후 → API 완료 처리 → 결과 팝업 + const handleWorkCompletion = useCallback(async () => { if (!selectedOrder) return; - const lotNo = `KD-SA-${new Date().toISOString().slice(2, 10).replace(/-/g, '')}-01`; - setCompletionLotNo(lotNo); - setIsCompletionResultOpen(true); setIsCompletionFlow(false); - }, [selectedOrder]); - - // 완료 결과 팝업 확인 → API 완료 처리 - const handleCompletionResultConfirm = useCallback(async () => { - if (!selectedOrder) return; try { const materials = inputMaterialsMap.get(selectedOrder.id); @@ -1041,7 +1033,9 @@ export default function WorkerScreen() { ); if (result.success) { - toast.success('작업이 완료되었습니다.'); + // 백엔드에서 받은 실제 LOT 번호로 결과 팝업 표시 + setCompletionLotNo(result.lotNo || ''); + setIsCompletionResultOpen(true); setInputMaterialsMap((prev) => { const next = new Map(prev); next.delete(selectedOrder.id); @@ -1053,14 +1047,17 @@ export default function WorkerScreen() { } } catch (error) { if (isNextRedirectError(error)) throw error; - console.error('[WorkerScreen] handleCompletionResultConfirm error:', error); + console.error('[WorkerScreen] handleWorkCompletion error:', error); toast.error('작업 완료 중 오류가 발생했습니다.'); - } finally { - setSelectedOrder(null); - setCompletionLotNo(''); } }, [selectedOrder, inputMaterialsMap]); + // 완료 결과 팝업 확인 → 상태 정리 + const handleCompletionResultConfirm = useCallback(() => { + setSelectedOrder(null); + setCompletionLotNo(''); + }, []); + // 하단 버튼용 합성 WorkOrder (사이드바 선택 우선, 없으면 첫 번째, 그래도 없으면 목업 폴백) const getTargetOrder = useCallback((): WorkOrder | null => { // 사이드바에서 선택된 작업지시 우선