81 lines
2.6 KiB
JavaScript
81 lines
2.6 KiB
JavaScript
// /js/daily-report-viewer.js
|
|
|
|
import { fetchReportData } from './report-viewer-api.js';
|
|
import { renderReport, processReportData, showLoading, showError } from './report-viewer-ui.js';
|
|
import { exportToExcel, printReport } from './report-viewer-export.js';
|
|
import { getUser } from './auth.js';
|
|
|
|
// 전역 상태: 현재 화면에 표시된 데이터
|
|
let currentProcessedData = null;
|
|
|
|
/**
|
|
* 날짜를 기준으로 보고서를 검색하고 화면에 렌더링합니다.
|
|
*/
|
|
async function searchReports() {
|
|
const dateInput = document.getElementById('reportDate');
|
|
const selectedDate = dateInput.value;
|
|
|
|
if (!selectedDate) {
|
|
showError('날짜를 선택해주세요.');
|
|
return;
|
|
}
|
|
|
|
showLoading(true);
|
|
currentProcessedData = null; // 새 검색이 시작되면 이전 데이터 초기화
|
|
|
|
try {
|
|
const rawData = await fetchReportData(selectedDate);
|
|
currentProcessedData = processReportData(rawData, selectedDate);
|
|
renderReport(currentProcessedData);
|
|
} catch (error) {
|
|
showError(error.message);
|
|
renderReport(null); // 에러 발생 시 데이터 없는 화면 표시
|
|
} finally {
|
|
showLoading(false);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 페이지의 모든 이벤트 리스너를 설정합니다.
|
|
*/
|
|
function setupEventListeners() {
|
|
document.getElementById('searchBtn')?.addEventListener('click', searchReports);
|
|
document.getElementById('todayBtn')?.addEventListener('click', () => {
|
|
const today = new Date().toISOString().split('T')[0];
|
|
document.getElementById('reportDate').value = today;
|
|
searchReports();
|
|
});
|
|
|
|
document.getElementById('reportDate')?.addEventListener('keypress', (e) => {
|
|
if (e.key === 'Enter') searchReports();
|
|
});
|
|
|
|
document.getElementById('exportExcelBtn')?.addEventListener('click', () => {
|
|
exportToExcel(currentProcessedData);
|
|
});
|
|
|
|
document.getElementById('printBtn')?.addEventListener('click', printReport);
|
|
}
|
|
|
|
/**
|
|
* 페이지가 처음 로드될 때 실행되는 초기화 함수
|
|
*/
|
|
function initializePage() {
|
|
// auth.js를 사용하여 인증 상태 확인
|
|
const user = getUser();
|
|
if (!user) {
|
|
showError('로그인이 필요합니다. 2초 후 로그인 페이지로 이동합니다.');
|
|
setTimeout(() => window.location.href = '/index.html', 2000);
|
|
return;
|
|
}
|
|
|
|
setupEventListeners();
|
|
|
|
// 페이지 로드 시 오늘 날짜로 자동 검색
|
|
const dateInput = document.getElementById('reportDate');
|
|
dateInput.value = new Date().toISOString().split('T')[0];
|
|
searchReports();
|
|
}
|
|
|
|
// DOM이 로드되면 페이지 초기화를 시작합니다.
|
|
document.addEventListener('DOMContentLoaded', initializePage); |