// /js/work-report-create.js import { renderCalendar } from './calendar.js'; import { getInitialData, createWorkReport } from './work-report-api.js'; import { initializeReportTable, getReportData } from './work-report-ui.js'; // 전역 상태 변수 let selectedDate = ''; /** * 날짜가 선택되었을 때 실행되는 콜백 함수. * 초기 데이터를 로드하고 테이블을 렌더링합니다. * @param {string} date - 선택된 날짜 (YYYY-MM-DD 형식) */ async function onDateSelect(date) { selectedDate = date; const tableBody = document.getElementById('reportBody'); tableBody.innerHTML = '데이터를 불러오는 중...'; try { const initialData = await getInitialData(); initializeReportTable(initialData); } catch (error) { alert('데이터를 불러오는 데 실패했습니다: ' + error.message); tableBody.innerHTML = '오류 발생! 데이터를 불러올 수 없습니다.'; } } /** * '전체 등록' 버튼 클릭 시 실행되는 이벤트 핸들러. * 폼 데이터를 서버에 전송합니다. */ async function handleSubmit() { if (!selectedDate) { alert('먼저 달력에서 날짜를 선택해주세요.'); return; } const reportData = getReportData(); if (!reportData) { // getReportData 내부에서 이미 alert으로 사용자에게 알림 return; } // 각 항목에 선택된 날짜 추가 const payload = reportData.map(item => ({ ...item, date: selectedDate })); const submitBtn = document.getElementById('submitBtn'); submitBtn.disabled = true; submitBtn.textContent = '등록 중...'; try { const result = await createWorkReport(payload); if (result.success) { alert('✅ 작업 보고서가 성공적으로 등록되었습니다!'); // 성공 후 폼을 다시 로드하거나, 다른 페이지로 이동 등의 로직 추가 가능 onDateSelect(selectedDate); // 현재 날짜의 폼을 다시 로드 } else { throw new Error(result.error || '알 수 없는 오류로 등록에 실패했습니다.'); } } catch (error) { alert('❌ 등록 실패: ' + error.message); } finally { submitBtn.disabled = false; submitBtn.textContent = '전체 등록'; } } /** * 페이지 초기화 함수 */ function initializePage() { renderCalendar('calendar', onDateSelect); const submitBtn = document.getElementById('submitBtn'); submitBtn.addEventListener('click', handleSubmit); } // DOM이 로드되면 페이지 초기화를 시작합니다. document.addEventListener('DOMContentLoaded', initializePage);