import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { api } from '../api'; import './JobRegistrationPage.css'; const JobRegistrationPage = () => { const navigate = useNavigate(); const [formData, setFormData] = useState({ jobNo: '', projectName: '', clientName: '', location: '', contractDate: '', deliveryDate: '', deliveryMethod: '', description: '', projectType: '냉동기', status: 'PLANNING' }); const [loading, setLoading] = useState(false); const [errors, setErrors] = useState({}); const [projectTypes, setProjectTypes] = useState([ { value: '냉동기', label: '냉동기' }, { value: 'BOG', label: 'BOG' }, { value: '다이아프람', label: '다이아프람' }, { value: '드라이어', label: '드라이어' } ]); const [newProjectType, setNewProjectType] = useState(''); const [showAddProjectType, setShowAddProjectType] = useState(false); const statusOptions = [ { value: 'PLANNING', label: '계획' }, { value: 'DESIGN', label: '설계' }, { value: 'PROCUREMENT', label: '조달' }, { value: 'CONSTRUCTION', label: '시공' }, { value: 'COMPLETED', label: '완료' } ]; const handleInputChange = (e) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); // 입력 시 에러 제거 if (errors[name]) { setErrors(prev => ({ ...prev, [name]: '' })); } }; const addProjectType = () => { if (newProjectType.trim() && !projectTypes.find(type => type.value === newProjectType.trim())) { const newType = { value: newProjectType.trim(), label: newProjectType.trim() }; setProjectTypes(prev => [...prev, newType]); setFormData(prev => ({ ...prev, projectType: newProjectType.trim() })); setNewProjectType(''); setShowAddProjectType(false); } }; const removeProjectType = (valueToRemove) => { if (projectTypes.length > 1) { // 최소 1개는 유지 setProjectTypes(prev => prev.filter(type => type.value !== valueToRemove)); if (formData.projectType === valueToRemove) { setFormData(prev => ({ ...prev, projectType: projectTypes[0].value })); } } }; const validateForm = () => { const newErrors = {}; if (!formData.jobNo.trim()) { newErrors.jobNo = 'Job No.는 필수 입력 항목입니다.'; } if (!formData.projectName.trim()) { newErrors.projectName = '프로젝트명은 필수 입력 항목입니다.'; } if (!formData.clientName.trim()) { newErrors.clientName = '고객사명은 필수 입력 항목입니다.'; } if (formData.contractDate && formData.deliveryDate && new Date(formData.contractDate) > new Date(formData.deliveryDate)) { newErrors.deliveryDate = '납기일은 수주일 이후여야 합니다.'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = async (e) => { e.preventDefault(); if (!validateForm()) { return; } setLoading(true); try { // Job 생성 API 호출 const response = await api.post('/jobs', { job_no: formData.jobNo, job_name: formData.projectName, client_name: formData.clientName, project_site: formData.location || null, contract_date: formData.contractDate || null, delivery_date: formData.deliveryDate || null, delivery_terms: formData.deliveryMethod || null, description: formData.description || null, project_type: formData.projectType, status: formData.status }); if (response.data.success) { alert('프로젝트가 성공적으로 등록되었습니다!'); navigate('/project-selection'); } else { alert('등록에 실패했습니다: ' + response.data.message); } } catch (error) { console.error('Job 등록 오류:', error); if (error.response?.data?.detail) { alert('등록 실패: ' + error.response.data.detail); } else { alert('등록 중 오류가 발생했습니다.'); } } finally { setLoading(false); } }; return (
새로운 프로젝트의 Job No. 및 기본 정보를 입력해주세요