fix: BOMStatusPage 라우팅 및 API 호출 문제 해결

🔧 라우팅 문제 수정:
- ProjectSelectionPage에서 /bom → /bom-status로 경로 수정
- 'No routes matched location' 오류 해결

🔧 BOMStatusPage API 개선:
- fetchFiles, deleteFile API 함수 사용 (하드코딩된 fetch 제거)
- 디버깅용 console.log 추가
- jobNo 유효성 검사 강화

📝 백업 커밋:
- 안정적인 상태로 복원을 위한 백업용 커밋
This commit is contained in:
Hyungi Ahn
2025-07-18 17:12:47 +09:00
parent 28431ee490
commit 6ca1cd17e2
2 changed files with 26 additions and 14 deletions

View File

@@ -1,7 +1,7 @@
import React, { useState, useEffect } from 'react';
import { Box, Typography, Button, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Paper, CircularProgress, Alert, TextField, Dialog, DialogTitle, DialogContent, DialogActions } from '@mui/material';
import { useSearchParams, useNavigate } from 'react-router-dom';
import { uploadFile as uploadFileApi } from '../api';
import { uploadFile as uploadFileApi, fetchFiles as fetchFilesApi, deleteFile as deleteFileApi } from '../api';
const BOMStatusPage = () => {
const [files, setFiles] = useState([]);
@@ -22,15 +22,20 @@ const BOMStatusPage = () => {
setLoading(true);
setError('');
try {
let url = 'http://localhost:8000/files';
if (jobNo) {
url += `?job_no=${jobNo}`;
console.log('fetchFiles 호출 - jobNo:', jobNo);
const response = await fetchFilesApi({ job_no: jobNo });
console.log('API 응답:', response);
if (Array.isArray(response.data)) {
console.log('데이터 배열 형태:', response.data.length, '개');
setFiles(response.data);
} else if (response.data && Array.isArray(response.data.files)) {
console.log('데이터.files 배열 형태:', response.data.files.length, '개');
setFiles(response.data.files);
} else {
console.log('빈 배열로 설정');
setFiles([]);
}
const res = await fetch(url);
const data = await res.json();
if (Array.isArray(data)) setFiles(data);
else if (data && Array.isArray(data.files)) setFiles(data.files);
else setFiles([]);
} catch (e) {
setError('파일 목록을 불러오지 못했습니다.');
console.error('파일 목록 로드 에러:', e);
@@ -40,7 +45,12 @@ const BOMStatusPage = () => {
};
useEffect(() => {
fetchFiles();
console.log('useEffect 실행 - jobNo:', jobNo);
if (jobNo) {
fetchFiles();
} else {
console.log('jobNo가 없어서 fetchFiles 실행하지 않음');
}
// eslint-disable-next-line
}, [jobNo]);
@@ -302,13 +312,15 @@ const BOMStatusPage = () => {
onClick={async () => {
if (confirm(`정말 "${file.revision || 'Rev.0'}"을 삭제하시겠습니까?`)) {
try {
const res = await fetch(`http://localhost:8000/files/${file.id}`, { method: 'DELETE' });
if (res.ok) {
const response = await deleteFileApi(file.id);
if (response.data.success) {
fetchFiles();
alert('삭제되었습니다.');
} else {
alert('삭제 실패');
alert('삭제 실패: ' + (response.data.message || '알 수 없는 오류'));
}
} catch (e) {
console.error('삭제 오류:', e);
alert('삭제 중 오류가 발생했습니다.');
}
}

View File

@@ -60,7 +60,7 @@ const ProjectSelectionPage = () => {
variant="contained"
sx={{ mt: 4, minWidth: 120 }}
disabled={!selectedJob}
onClick={() => navigate(`/bom?job_no=${selectedJob}`)}
onClick={() => navigate(`/bom-status?job_no=${selectedJob}`)}
>
확인
</Button>