// /js/daily-issue.js import { getInitialData, getWorkersByDate, createIssueReport } from './daily-issue-api.js'; import { populateProjects, populateIssueTypes, populateTimeOptions, renderWorkerList, getFormData, setSubmitButtonState } from './daily-issue-ui.js'; const dateSelect = document.getElementById('dateSelect'); const form = document.getElementById('issueForm'); /** * 날짜가 변경될 때마다 해당 날짜의 작업자 목록을 다시 불러옵니다. */ async function handleDateChange() { const selectedDate = dateSelect.value; if (!selectedDate) { document.getElementById('workerList').textContent = '날짜를 먼저 선택하세요.'; return; } document.getElementById('workerList').textContent = '작업자 목록을 불러오는 중...'; try { const workers = await getWorkersByDate(selectedDate); renderWorkerList(workers); } catch (error) { document.getElementById('workerList').textContent = '작업자 목록 로딩에 실패했습니다.'; } } /** * 폼 제출 이벤트를 처리합니다. */ async function handleSubmit(event) { event.preventDefault(); const issueData = getFormData(); if (!issueData) return; // 유효성 검사 실패 setSubmitButtonState(true); try { const result = await createIssueReport(issueData); if (result.success) { alert('✅ 이슈가 성공적으로 등록되었습니다.'); form.reset(); // 폼 초기화 dateSelect.value = new Date().toISOString().split('T')[0]; // 날짜 오늘로 리셋 handleDateChange(); // 작업자 목록 새로고침 } else { throw new Error(result.error || '알 수 없는 오류가 발생했습니다.'); } } catch (error) { alert(`🚨 등록 실패: ${error.message}`); } finally { setSubmitButtonState(false); } } /** * 페이지 초기화 함수 */ async function initializePage() { // 오늘 날짜 기본 설정 dateSelect.value = new Date().toISOString().split('T')[0]; populateTimeOptions(); // 프로젝트, 이슈유형, 작업자 목록을 병렬로 로드 try { const [initialData] = await Promise.all([ getInitialData(), handleDateChange() // 초기 작업자 목록 로드 ]); populateProjects(initialData.projects); populateIssueTypes(initialData.issueTypes); } catch (error) { alert('페이지 초기화 중 오류가 발생했습니다. 새로고침 해주세요.'); } // 이벤트 리스너 설정 dateSelect.addEventListener('change', handleDateChange); form.addEventListener('submit', handleSubmit); } // DOM이 로드되면 페이지 초기화를 시작합니다. document.addEventListener('DOMContentLoaded', initializePage);