// 작업 관리 페이지 JavaScript // 전역 변수 let statsData = { projects: 0, workers: 0, tasks: 0, codeTypes: 0 }; // 페이지 초기화 document.addEventListener('DOMContentLoaded', function() { initializePage(); loadStatistics(); }); // 페이지 초기화 function initializePage() { // 시간 업데이트 시작 updateCurrentTime(); setInterval(updateCurrentTime, 1000); // 사용자 정보 업데이트 updateUserInfo(); // 프로필 메뉴 토글 setupProfileMenu(); // 로그아웃 버튼 setupLogoutButton(); } // 현재 시간 업데이트 (시 분 초 형식으로 고정) function updateCurrentTime() { const now = new Date(); const hours = String(now.getHours()).padStart(2, '0'); const minutes = String(now.getMinutes()).padStart(2, '0'); const seconds = String(now.getSeconds()).padStart(2, '0'); const timeString = `${hours}시 ${minutes}분 ${seconds}초`; const timeElement = document.getElementById('timeValue'); if (timeElement) { timeElement.textContent = timeString; } } // navbar/sidebar는 app-init.js에서 공통 처리 function updateUserInfo() { // app-init.js가 navbar 사용자 정보를 처리 } // 프로필 메뉴 설정 function setupProfileMenu() { const userProfile = document.getElementById('userProfile'); const profileMenu = document.getElementById('profileMenu'); if (userProfile && profileMenu) { userProfile.addEventListener('click', function(e) { e.stopPropagation(); const isVisible = profileMenu.style.display === 'block'; profileMenu.style.display = isVisible ? 'none' : 'block'; }); // 외부 클릭 시 메뉴 닫기 document.addEventListener('click', function() { profileMenu.style.display = 'none'; }); } } // 로그아웃 버튼 설정 function setupLogoutButton() { const logoutBtn = document.getElementById('logoutBtn'); if (logoutBtn) { logoutBtn.addEventListener('click', function() { if (confirm('로그아웃 하시겠습니까?')) { if (window.clearSSOAuth) window.clearSSOAuth(); window.location.href = window.getLoginUrl ? window.getLoginUrl() : '/login'; } }); } } // 통계 데이터 로드 async function loadStatistics() { try { // 프로젝트 수 조회 try { const projectsResponse = await apiCall('/projects', 'GET'); if (projectsResponse && Array.isArray(projectsResponse)) { statsData.projects = projectsResponse.length; updateStatDisplay('projectCount', statsData.projects); } } catch (error) { console.warn('프로젝트 통계 로드 실패:', error); updateStatDisplay('projectCount', '오류'); } // 작업자 수 조회 try { const workersResponse = await apiCall('/workers', 'GET'); if (workersResponse && Array.isArray(workersResponse)) { const activeWorkers = workersResponse.filter(w => w.status === 'active'); statsData.workers = activeWorkers.length; updateStatDisplay('workerCount', statsData.workers); } } catch (error) { console.warn('작업자 통계 로드 실패:', error); updateStatDisplay('workerCount', '오류'); } // 작업 유형 수 조회 try { const tasksResponse = await apiCall('/tasks', 'GET'); if (tasksResponse && Array.isArray(tasksResponse)) { const activeTasks = tasksResponse.filter(t => t.is_active); statsData.tasks = activeTasks.length; updateStatDisplay('taskCount', statsData.tasks); } } catch (error) { console.warn('작업 유형 통계 로드 실패:', error); updateStatDisplay('taskCount', '오류'); } // 코드 타입 수 조회 (임시로 고정값) statsData.codeTypes = 3; // ISSUE_TYPE, ERROR_TYPE, WORK_STATUS updateStatDisplay('codeTypeCount', statsData.codeTypes); } catch (error) { console.error('통계 데이터 로딩 오류:', error); } } // 통계 표시 업데이트 function updateStatDisplay(elementId, value) { const element = document.getElementById(elementId); if (element) { element.textContent = value; // 애니메이션 효과 element.style.transform = 'scale(1.1)'; setTimeout(() => { element.style.transform = 'scale(1)'; }, 200); } } // 최근 활동 관련 함수들 제거됨 // 페이지 네비게이션 function navigateToPage(url) { // 로딩 효과 const card = event.currentTarget; const originalContent = card.innerHTML; card.style.opacity = '0.7'; card.style.pointerEvents = 'none'; // 잠시 후 페이지 이동 setTimeout(() => { window.location.href = url; }, 300); } // showToast → api-base.js 전역 사용 // 전역 함수로 노출 window.navigateToPage = navigateToPage;