// My Dashboard - 나의 대시보드 JavaScript import './api-config.js'; // 전역 변수 let currentYear = new Date().getFullYear(); let currentMonth = new Date().getMonth() + 1; // 페이지 초기화 document.addEventListener('DOMContentLoaded', async () => { console.log('📊 나의 대시보드 초기화 시작'); await loadUserInfo(); await loadVacationBalance(); await loadMonthlyCalendar(); await loadWorkHoursStats(); await loadRecentReports(); console.log('✅ 나의 대시보드 초기화 완료'); }); // 사용자 정보 로드 async function loadUserInfo() { try { const response = await apiCall('/users/me', 'GET'); const user = response.data || response; document.getElementById('userName').textContent = user.name || '사용자'; document.getElementById('department').textContent = user.department || '-'; document.getElementById('jobType').textContent = user.job_type || '-'; document.getElementById('hireDate').textContent = user.hire_date || '-'; } catch (error) { console.error('사용자 정보 로드 실패:', error); } } // 연차 정보 로드 async function loadVacationBalance() { try { const response = await apiCall('/users/me/vacation-balance', 'GET'); const balance = response.data || response; const total = balance.total_annual_leave || 15; const used = balance.used_annual_leave || 0; const remaining = total - used; document.getElementById('totalLeave').textContent = total; document.getElementById('usedLeave').textContent = used; document.getElementById('remainingLeave').textContent = remaining; // 프로그레스 바 업데이트 const percentage = (used / total) * 100; document.getElementById('vacationProgress').style.width = `${percentage}%`; } catch (error) { console.error('연차 정보 로드 실패:', error); } } // 월별 캘린더 로드 async function loadMonthlyCalendar() { try { const response = await apiCall( `/users/me/attendance-records?year=${currentYear}&month=${currentMonth}`, 'GET' ); const records = response.data || response; renderCalendar(currentYear, currentMonth, records); document.getElementById('currentMonth').textContent = `${currentYear}년 ${currentMonth}월`; } catch (error) { console.error('캘린더 로드 실패:', error); renderCalendar(currentYear, currentMonth, []); } } // 캘린더 렌더링 function renderCalendar(year, month, records) { const calendar = document.getElementById('calendar'); const firstDay = new Date(year, month - 1, 1).getDay(); const daysInMonth = new Date(year, month, 0).getDate(); let html = ''; // 요일 헤더 const weekdays = ['일', '월', '화', '수', '목', '금', '토']; weekdays.forEach(day => { html += `