/** * Project Master Overseas Dashboard JS * 기능: 데이터 로드, 활성도 분석, 인증 모달 제어, 크롤링 동기화 및 중단 */ // --- 글로벌 상태 관리 --- let rawData = []; let projectActivityDetails = []; let isCrawling = false; const CONTINENT_ORDER = { "아시아": 1, "아프리카": 2, "아메리카": 3, "지사": 4 }; // --- 초기화 --- async function init() { console.log("Dashboard Initializing..."); if (!document.getElementById('projectAccordion')) return; await loadAvailableDates(); await loadDataByDate(); } // --- 데이터 통신 및 로드 --- async function loadAvailableDates() { try { const response = await fetch(API.AVAILABLE_DATES); const dates = await response.json(); if (dates?.length > 0) { const selectHtml = ` `; const baseDateStrong = document.getElementById('baseDate'); if (baseDateStrong) baseDateStrong.innerHTML = selectHtml; } } catch (e) { console.error("날짜 로드 실패:", e); } } async function loadDataByDate(selectedDate = "") { try { await loadActivityAnalysis(selectedDate); const url = selectedDate ? `${API.PROJECT_DATA}?date=${selectedDate}` : `${API.PROJECT_DATA}?t=${Date.now()}`; const response = await fetch(url); const data = await response.json(); if (data.error) throw new Error(data.error); rawData = data.projects || []; renderDashboard(rawData); } catch (e) { console.error("데이터 로드 실패:", e); alert("데이터를 가져오는 데 실패했습니다."); } } async function loadActivityAnalysis(date = "") { const dashboard = document.getElementById('activityDashboard'); if (!dashboard) return; try { const url = date ? `${API.PROJECT_ACTIVITY}?date=${date}` : API.PROJECT_ACTIVITY; const response = await fetch(url); const data = await response.json(); if (data.error) return; const { summary, details } = data; projectActivityDetails = details; dashboard.innerHTML = `
| 이름 | 소속 | 권한 |
|---|---|---|
| ${admin} | ${dept} | 관리자 |
| 유형 | 내용 | 일시 |
|---|---|---|
| 로그 | 동기화 완료 | ${logTime} |