79 lines
2.6 KiB
JavaScript
79 lines
2.6 KiB
JavaScript
// /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 = '<tr><td colspan="8" class="text-center">데이터를 불러오는 중...</td></tr>';
|
|
|
|
try {
|
|
const initialData = await getInitialData();
|
|
initializeReportTable(initialData);
|
|
} catch (error) {
|
|
alert('데이터를 불러오는 데 실패했습니다: ' + error.message);
|
|
tableBody.innerHTML = '<tr><td colspan="8" class="text-center error">오류 발생! 데이터를 불러올 수 없습니다.</td></tr>';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* '전체 등록' 버튼 클릭 시 실행되는 이벤트 핸들러.
|
|
* 폼 데이터를 서버에 전송합니다.
|
|
*/
|
|
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); |