// work-review.js - 통합 API 설정 적용 버전 // ================================================================= // 🌐 통합 API 설정 import // ================================================================= import { API, getAuthHeaders, apiCall } from '/js/api-config.js'; // 전역 변수 let currentDate = new Date(); let selectedDate = null; let selectedDateData = null; let basicData = { workTypes: [], workStatusTypes: [], errorTypes: [], projects: [] }; // 현재 사용자 정보 가져오기 function getCurrentUser() { try { const token = localStorage.getItem('token'); if (!token) return null; const payloadBase64 = token.split('.')[1]; if (payloadBase64) { const payload = JSON.parse(atob(payloadBase64)); return payload; } } catch (error) { console.log('토큰에서 사용자 정보 추출 실패:', error); } return null; } // 메시지 표시 function showMessage(message, type = 'info') { const container = document.getElementById('message-container'); container.innerHTML = `
`; if (type !== 'loading') { setTimeout(() => { container.innerHTML = ''; }, 5000); } } // 날짜 포맷팅 function formatDate(date) { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } // 월 표시 업데이트 function updateMonthDisplay() { const monthElement = document.getElementById('currentMonth'); const year = currentDate.getFullYear(); const month = currentDate.getMonth() + 1; monthElement.textContent = `${year}년 ${month}월`; } // 근무 유형 분류 function classifyWorkType(totalHours) { if (totalHours === 0) return { type: 'vacation', label: '휴무' }; if (totalHours === 2) return { type: 'vacation', label: '조퇴' }; if (totalHours === 4) return { type: 'vacation', label: '반차' }; if (totalHours === 6) return { type: 'vacation', label: '반반차' }; if (totalHours === 8) return { type: 'normal-work', label: '정시근무' }; if (totalHours > 8) return { type: 'overtime', label: '잔업' }; return { type: 'vacation', label: '기타' }; } // 캘린더 렌더링 (데이터 로드 없이) function renderCalendar() { const calendar = document.getElementById('calendar'); // 기존 날짜 셀들 제거 (헤더는 유지) const dayHeaders = calendar.querySelectorAll('.day-header'); calendar.innerHTML = ''; dayHeaders.forEach(header => calendar.appendChild(header)); const year = currentDate.getFullYear(); const month = currentDate.getMonth(); // 해당 월의 첫째 날과 마지막 날 const firstDay = new Date(year, month, 1); const lastDay = new Date(year, month + 1, 0); // 첫째 주의 시작 (일요일부터 시작) const startDate = new Date(firstDay); startDate.setDate(startDate.getDate() - firstDay.getDay()); // 마지막 주의 끝 const endDate = new Date(lastDay); endDate.setDate(endDate.getDate() + (6 - lastDay.getDay())); // 오늘 날짜 const today = new Date(); const todayStr = formatDate(today); // 날짜 셀 생성 let currentCalendarDate = new Date(startDate); while (currentCalendarDate <= endDate) { const dateStr = formatDate(currentCalendarDate); const isCurrentMonth = currentCalendarDate.getMonth() === month; const isToday = dateStr === todayStr; const isSelected = selectedDate === dateStr; const dayCell = document.createElement('div'); dayCell.className = 'day-cell'; if (!isCurrentMonth) { dayCell.classList.add('other-month'); } if (isToday) { dayCell.classList.add('today'); } if (isSelected) { dayCell.classList.add('selected'); } // 날짜 번호 const dayNumber = document.createElement('div'); dayNumber.className = 'day-number'; dayNumber.textContent = currentCalendarDate.getDate(); dayCell.appendChild(dayNumber); // 클릭 이벤트 - 현재 월의 날짜만 클릭 가능 if (isCurrentMonth) { dayCell.style.cursor = 'pointer'; dayCell.addEventListener('click', () => { selectedDate = dateStr; loadDayData(dateStr); renderCalendar(); // 선택 상태 업데이트를 위해 재렌더링 }); } calendar.appendChild(dayCell); currentCalendarDate.setDate(currentCalendarDate.getDate() + 1); } } // 특정 날짜 데이터 로드 (통합 API 사용) async function loadDayData(dateStr) { try { showMessage(`${dateStr} 데이터를 불러오는 중... (통합 API)`, 'loading'); const data = await apiCall(`${API}/daily-work-reports?date=${dateStr}`); const dataArray = Array.isArray(data) ? data : (data.data || []); // 데이터 처리 processDayData(dateStr, dataArray); renderDayInfo(); document.getElementById('message-container').innerHTML = ''; } catch (error) { console.error('날짜 데이터 로드 실패:', error); showMessage('데이터를 불러올 수 없습니다: ' + error.message, 'error'); selectedDateData = null; renderDayInfo(); } } // 일별 데이터 처리 function processDayData(dateStr, works) { const dayData = { date: dateStr, totalHours: 0, workers: new Set(), reviewed: Math.random() > 0.3, // 임시: 70% 확률로 검토 완료 details: works }; works.forEach(work => { dayData.totalHours += parseFloat(work.work_hours || 0); dayData.workers.add(work.worker_name || work.worker_id); }); const workType = classifyWorkType(dayData.totalHours); dayData.workType = workType.type; dayData.workLabel = workType.label; selectedDateData = dayData; } // 선택된 날짜 정보 렌더링 function renderDayInfo() { const dayInfoContainer = document.getElementById('day-info-container'); if (!selectedDate) { dayInfoContainer.innerHTML = `캘린더에서 날짜를 클릭하면 해당 날짜의 작업 정보를 확인할 수 있습니다.
해당 날짜에 등록된 작업이 없습니다.