fix: [worker-screen] 프론트 가짜 LOT 제거, 백엔드 실제 LOT 사용

- actions.ts: 하드코딩 LOT(-01) 제거 → API 응답 lot_no 사용
- index.tsx: API 호출 후 실제 LOT으로 완료 다이얼로그 표시하도록 흐름 변경
This commit is contained in:
2026-03-13 23:46:55 +09:00
parent c210ec1b5f
commit b87b94860b
2 changed files with 14 additions and 16 deletions

View File

@@ -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 };
}

View File

@@ -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 => {
// 사이드바에서 선택된 작업지시 우선