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:
@@ -1,7 +1,7 @@
|
|||||||
import React, { useState, useEffect } from 'react';
|
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 { 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 { 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 BOMStatusPage = () => {
|
||||||
const [files, setFiles] = useState([]);
|
const [files, setFiles] = useState([]);
|
||||||
@@ -22,15 +22,20 @@ const BOMStatusPage = () => {
|
|||||||
setLoading(true);
|
setLoading(true);
|
||||||
setError('');
|
setError('');
|
||||||
try {
|
try {
|
||||||
let url = 'http://localhost:8000/files';
|
console.log('fetchFiles 호출 - jobNo:', jobNo);
|
||||||
if (jobNo) {
|
const response = await fetchFilesApi({ job_no: jobNo });
|
||||||
url += `?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) {
|
} catch (e) {
|
||||||
setError('파일 목록을 불러오지 못했습니다.');
|
setError('파일 목록을 불러오지 못했습니다.');
|
||||||
console.error('파일 목록 로드 에러:', e);
|
console.error('파일 목록 로드 에러:', e);
|
||||||
@@ -40,7 +45,12 @@ const BOMStatusPage = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchFiles();
|
console.log('useEffect 실행 - jobNo:', jobNo);
|
||||||
|
if (jobNo) {
|
||||||
|
fetchFiles();
|
||||||
|
} else {
|
||||||
|
console.log('jobNo가 없어서 fetchFiles 실행하지 않음');
|
||||||
|
}
|
||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
}, [jobNo]);
|
}, [jobNo]);
|
||||||
|
|
||||||
@@ -302,13 +312,15 @@ const BOMStatusPage = () => {
|
|||||||
onClick={async () => {
|
onClick={async () => {
|
||||||
if (confirm(`정말 "${file.revision || 'Rev.0'}"을 삭제하시겠습니까?`)) {
|
if (confirm(`정말 "${file.revision || 'Rev.0'}"을 삭제하시겠습니까?`)) {
|
||||||
try {
|
try {
|
||||||
const res = await fetch(`http://localhost:8000/files/${file.id}`, { method: 'DELETE' });
|
const response = await deleteFileApi(file.id);
|
||||||
if (res.ok) {
|
if (response.data.success) {
|
||||||
fetchFiles();
|
fetchFiles();
|
||||||
|
alert('삭제되었습니다.');
|
||||||
} else {
|
} else {
|
||||||
alert('삭제 실패');
|
alert('삭제 실패: ' + (response.data.message || '알 수 없는 오류'));
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
console.error('삭제 오류:', e);
|
||||||
alert('삭제 중 오류가 발생했습니다.');
|
alert('삭제 중 오류가 발생했습니다.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ const ProjectSelectionPage = () => {
|
|||||||
variant="contained"
|
variant="contained"
|
||||||
sx={{ mt: 4, minWidth: 120 }}
|
sx={{ mt: 4, minWidth: 120 }}
|
||||||
disabled={!selectedJob}
|
disabled={!selectedJob}
|
||||||
onClick={() => navigate(`/bom?job_no=${selectedJob}`)}
|
onClick={() => navigate(`/bom-status?job_no=${selectedJob}`)}
|
||||||
>
|
>
|
||||||
확인
|
확인
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
Reference in New Issue
Block a user