import React, { useState, useEffect } from 'react'; import { api, fetchFiles, deleteFile as deleteFileApi } from '../api'; import BOMFileUpload from '../components/BOMFileUpload'; const BOMStatusPage = ({ jobNo, jobName, onNavigate, selectedProject }) => { const [files, setFiles] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [uploading, setUploading] = useState(false); const [selectedFile, setSelectedFile] = useState(null); const [bomName, setBomName] = useState(''); useEffect(() => { if (jobNo) { fetchFilesList(); } }, [jobNo]); const fetchFilesList = async () => { try { setLoading(true); const response = await api.get('/files/', { params: { job_no: jobNo } }); // API가 배열로 직접 반환하는 경우 if (Array.isArray(response.data)) { setFiles(response.data); } else if (response.data && response.data.success) { setFiles(response.data.files || []); } else { setFiles([]); } } catch (err) { console.error('파일 목록 로딩 실패:', err); setError('파일 목록을 불러오는데 실패했습니다.'); } finally { setLoading(false); } }; // 파일 업로드 const handleUpload = async () => { if (!selectedFile || !bomName.trim()) { alert('파일과 BOM 이름을 모두 입력해주세요.'); return; } try { setUploading(true); const formData = new FormData(); formData.append('file', selectedFile); formData.append('bom_name', bomName.trim()); formData.append('job_no', jobNo); const response = await api.post('/files/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' } }); if (response.data && response.data.success) { alert('파일이 성공적으로 업로드되었습니다!'); setSelectedFile(null); setBomName(''); await fetchFilesList(); // 목록 새로고침 } else { throw new Error(response.data?.message || '업로드 실패'); } } catch (err) { console.error('파일 업로드 실패:', err); setError('파일 업로드에 실패했습니다.'); } finally { setUploading(false); } }; // 파일 삭제 const handleDelete = async (fileId) => { if (!window.confirm('정말로 이 파일을 삭제하시겠습니까?')) { return; } try { await deleteFileApi(fileId); await fetchFilesList(); // 목록 새로고침 } catch (err) { console.error('파일 삭제 실패:', err); setError('파일 삭제에 실패했습니다.'); } }; // 자재 관리 페이지로 바로 이동 (단순화) const handleViewMaterials = (file) => { if (onNavigate) { onNavigate('materials', { file_id: file.id, jobNo: file.job_no, bomName: file.bom_name || file.original_filename, revision: file.revision, filename: file.original_filename }); } }; return (
| BOM 이름 | 파일명 | 리비전 | 자재 수 | 업로드 일시 | 작업 |
|---|---|---|---|---|---|
|
{file.bom_name || file.original_filename}
{file.description || ''}
|
{file.original_filename} | {file.revision || 'Rev.0'} | {file.parsed_count || 0}개 | {new Date(file.created_at).toLocaleDateString()} |
|