// /js/project-analysis.js import { getMasterData, getAnalysisReport } from './project-analysis-api.js'; import { setDefaultDates, setUIState, updateFilterOptions, renderSummary, renderAnalysisTables, renderDetailTable, switchTab, } from './project-analysis-ui.js'; // DOM 요소 참조 (이벤트 리스너 설정용) const DOM = { startDate: document.getElementById('startDate'), endDate: document.getElementById('endDate'), analyzeBtn: document.getElementById('analyzeBtn'), quickMonthBtn: document.getElementById('quickMonth'), quickLastMonthBtn: document.getElementById('quickLastMonth'), // 필터 버튼은 현재 아무 기능도 하지 않으므로 주석 처리 또는 제거 가능 // applyFilterBtn: document.getElementById('applyFilter'), tabButtons: document.querySelectorAll('.tab-button'), }; /** * 분석 실행 버튼 클릭 이벤트 핸들러 */ async function handleAnalysis() { const startDate = DOM.startDate.value; const endDate = DOM.endDate.value; if (!startDate || !endDate || startDate > endDate) { alert('올바른 분석 기간을 설정해주세요.'); return; } setUIState('loading'); try { const analysisResult = await getAnalysisReport(startDate, endDate); if (!analysisResult.summary.totalHours) { setUIState('no-data'); return; } renderSummary(analysisResult.summary); renderAnalysisTables(analysisResult); renderDetailTable(analysisResult.details); setUIState('data'); } catch (error) { console.error('분석 처리 중 오류:', error); setUIState('error'); alert(error.message); } } /** * 빠른 날짜 설정 버튼 핸들러 */ function handleQuickDate(monthType) { const now = new Date(); const year = now.getFullYear(); const month = now.getMonth(); const firstDay = monthType === 'this' ? new Date(year, month, 1) : new Date(year, month - 1, 1); const lastDay = monthType === 'this' ? new Date(year, month + 1, 0) : new Date(year, month, 0); DOM.startDate.value = firstDay.toISOString().split('T')[0]; DOM.endDate.value = lastDay.toISOString().split('T')[0]; } /** * 이벤트 리스너 설정 */ function setupEventListeners() { DOM.analyzeBtn.addEventListener('click', handleAnalysis); DOM.quickMonthBtn.addEventListener('click', () => handleQuickDate('this')); DOM.quickLastMonthBtn.addEventListener('click', () => handleQuickDate('last')); DOM.tabButtons.forEach(btn => { btn.addEventListener('click', () => switchTab(btn.dataset.tab)); }); // 프론트엔드 필터링은 제거되었으므로 관련 이벤트 리스너는 주석 처리합니다. // DOM.applyFilterBtn.addEventListener('click', ...); } /** * 페이지 초기화 함수 */ async function initialize() { setDefaultDates(); setupEventListeners(); try { const masterData = await getMasterData(); updateFilterOptions(masterData); await handleAnalysis(); } catch (error) { alert(error.message); setUIState('error'); } } // 초기화 실행 document.addEventListener('DOMContentLoaded', initialize);