import React, { useState, useEffect } from 'react'; import { api } from '../api'; const ProjectSelector = ({ onProjectSelect, selectedProject }) => { const [projects, setProjects] = useState([]); const [loading, setLoading] = useState(true); const [searchTerm, setSearchTerm] = useState(''); const [showDropdown, setShowDropdown] = useState(false); useEffect(() => { loadProjects(); }, []); const loadProjects = async () => { try { const response = await api.get('/jobs/'); console.log('프로젝트 API 응답:', response.data); // API 응답 구조에 맞게 처리 let projectsData = []; if (response.data && response.data.success && Array.isArray(response.data.jobs)) { // 실제 API 데이터를 프론트엔드 형식에 맞게 변환 projectsData = response.data.jobs.map(job => ({ job_no: job.job_no, project_name: job.project_name || job.job_name, status: job.status === '진행중' ? 'active' : 'completed', progress: job.status === '진행중' ? 75 : 100, // 임시 진행률 client_name: job.client_name, project_site: job.project_site, delivery_date: job.delivery_date })); } // 데이터가 없으면 목 데이터 사용 if (projectsData.length === 0) { projectsData = [ { job_no: 'TK-2024-001', project_name: '냉동기 시스템', status: 'active', progress: 75 }, { job_no: 'TK-2024-002', project_name: 'BOG 처리 시스템', status: 'active', progress: 45 }, { job_no: 'TK-2024-003', project_name: '다이아프램 펌프', status: 'active', progress: 90 }, { job_no: 'TK-2024-004', project_name: '드라이어 시스템', status: 'completed', progress: 100 }, { job_no: 'TK-2024-005', project_name: '열교환기 시스템', status: 'active', progress: 30 } ]; } setProjects(projectsData); } catch (error) { console.error('프로젝트 목록 로딩 실패:', error); // 목 데이터 사용 const mockProjects = [ { job_no: 'TK-2024-001', project_name: '냉동기 시스템', status: 'active', progress: 75 }, { job_no: 'TK-2024-002', project_name: 'BOG 처리 시스템', status: 'active', progress: 45 }, { job_no: 'TK-2024-003', project_name: '다이아프램 펌프', status: 'active', progress: 90 }, { job_no: 'TK-2024-004', project_name: '드라이어 시스템', status: 'completed', progress: 100 }, { job_no: 'TK-2024-005', project_name: '열교환기 시스템', status: 'active', progress: 30 } ]; setProjects(mockProjects); } finally { setLoading(false); } }; const filteredProjects = projects.filter(project => project.project_name.toLowerCase().includes(searchTerm.toLowerCase()) || project.job_no.toLowerCase().includes(searchTerm.toLowerCase()) ); const getStatusColor = (status) => { const colors = { 'active': '#48bb78', 'completed': '#38b2ac', 'on_hold': '#ed8936', 'cancelled': '#e53e3e' }; return colors[status] || '#718096'; }; const getStatusText = (status) => { const texts = { 'active': '진행중', 'completed': '완료', 'on_hold': '보류', 'cancelled': '취소' }; return texts[status] || '알 수 없음'; }; if (loading) { return (