From 6ca1cd17e2a2c55fa4f8def66d638808bdaa5b4c Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Fri, 18 Jul 2025 17:12:47 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20BOMStatusPage=20=EB=9D=BC=EC=9A=B0?= =?UTF-8?q?=ED=8C=85=20=EB=B0=8F=20API=20=ED=98=B8=EC=B6=9C=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿ”ง ๋ผ์šฐํŒ… ๋ฌธ์ œ ์ˆ˜์ •: - ProjectSelectionPage์—์„œ /bom โ†’ /bom-status๋กœ ๊ฒฝ๋กœ ์ˆ˜์ • - 'No routes matched location' ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ๐Ÿ”ง BOMStatusPage API ๊ฐœ์„ : - fetchFiles, deleteFile API ํ•จ์ˆ˜ ์‚ฌ์šฉ (ํ•˜๋“œ์ฝ”๋”ฉ๋œ fetch ์ œ๊ฑฐ) - ๋””๋ฒ„๊น…์šฉ console.log ์ถ”๊ฐ€ - jobNo ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ฐ•ํ™” ๐Ÿ“ ๋ฐฑ์—… ์ปค๋ฐ‹: - ์•ˆ์ •์ ์ธ ์ƒํƒœ๋กœ ๋ณต์›์„ ์œ„ํ•œ ๋ฐฑ์—…์šฉ ์ปค๋ฐ‹ --- frontend/src/pages/BOMStatusPage.jsx | 38 ++++++++++++++------- frontend/src/pages/ProjectSelectionPage.jsx | 2 +- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/frontend/src/pages/BOMStatusPage.jsx b/frontend/src/pages/BOMStatusPage.jsx index 78d28fc..b576def 100644 --- a/frontend/src/pages/BOMStatusPage.jsx +++ b/frontend/src/pages/BOMStatusPage.jsx @@ -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('์‚ญ์ œ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.'); } } diff --git a/frontend/src/pages/ProjectSelectionPage.jsx b/frontend/src/pages/ProjectSelectionPage.jsx index 15c920f..625628f 100644 --- a/frontend/src/pages/ProjectSelectionPage.jsx +++ b/frontend/src/pages/ProjectSelectionPage.jsx @@ -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}`)} > ํ™•์ธ