// /js/work-report-ui.js const DEFAULT_PROJECT_ID = '13'; // 나중에는 API나 설정에서 받아오는 것이 좋음 const DEFAULT_TASK_ID = '15'; /** * 주어진 데이터를 바탕으로 ${worker.worker_name} `; // 이벤트 리스너 설정 const workTypeSelect = tr.querySelector('[name="work_type"]'); const projectSelect = tr.querySelector('[name="project_id"]'); const taskSelect = tr.querySelector('[name="task_id"]'); workTypeSelect.addEventListener('change', () => { const isDisabled = ['연차', '휴무', '유급'].includes(workTypeSelect.value); projectSelect.disabled = isDisabled; taskSelect.disabled = isDisabled; if (isDisabled) { projectSelect.value = DEFAULT_PROJECT_ID; taskSelect.value = DEFAULT_TASK_ID; } }); tr.querySelector('.remove-btn').addEventListener('click', () => { tr.remove(); updateRowNumbers(tr.parentElement); }); return tr; } /** * 작업 보고서 테이블을 초기화하고 데이터를 채웁니다. * @param {{workers: Array, projects: Array, tasks: Array}} initialData - 초기 데이터 */ export function initializeReportTable(initialData) { const tableBody = document.getElementById('reportBody'); if (!tableBody) return; tableBody.innerHTML = ''; // 기존 내용 초기화 const { workers, projects, tasks } = initialData; if (!workers || workers.length === 0) { tableBody.innerHTML = '등록할 작업자 정보가 없습니다.'; return; } workers.forEach((worker, index) => { const row = createReportRow(worker, projects, tasks, index); tableBody.appendChild(row); }); } /** * 테이블에서 폼 데이터를 추출하여 배열로 반환합니다. * @returns {Array|null} - 추출된 데이터 배열 또는 유효성 검사 실패 시 null */ export function getReportData() { const tableBody = document.getElementById('reportBody'); const rows = tableBody.querySelectorAll('tr'); if (rows.length === 0 || (rows.length === 1 && rows[0].cells.length < 2)) { alert('등록할 내용이 없습니다.'); return null; } const reportData = []; const workerIds = new Set(); for (const tr of rows) { const workerId = tr.querySelector('[name="worker_id"]').value; if (workerIds.has(workerId)) { alert(`오류: 작업자 '${tr.cells[1].textContent.trim()}'가 중복 등록되었습니다.`); return null; } workerIds.add(workerId); reportData.push({ worker_id: workerId, project_id: tr.querySelector('[name="project_id"]').value, task_id: tr.querySelector('[name="task_id"]').value, overtime_hours: tr.querySelector('[name="overtime"]').value || 0, work_details: tr.querySelector('[name="work_type"]').value, memo: tr.querySelector('[name="memo"]').value }); } return reportData; }