const sessionKey = "mh-dashboard-session"; const loginPanel = document.getElementById("login-panel"); const dashboardPanel = document.getElementById("dashboard-panel"); const loginForm = document.getElementById("login-form"); const loginMessage = document.getElementById("login-message"); const logoutBtn = document.getElementById("logout-btn"); const userBadge = document.getElementById("user-badge"); const userPopover = document.getElementById("user-popover"); const currentViewTitle = document.getElementById("current-view-title"); const navButtons = Array.from(document.querySelectorAll(".header-center [data-view]")); const organizationFrame = document.getElementById("organization-frame"); const organizationStage = document.getElementById("organization-stage"); const emptyStage = document.getElementById("empty-stage"); const viewLabels = { ledger: "사업관리대장", project: "프로젝트별 분석", team: "팀/개인별 분석", organization: "조직 현황", }; let currentView = "organization"; function getSession() { try { return JSON.parse(sessionStorage.getItem(sessionKey) || "null"); } catch { return null; } } function setSession(session) { sessionStorage.setItem(sessionKey, JSON.stringify(session)); } function clearSession() { sessionStorage.removeItem(sessionKey); } function hideUserPopover() { userPopover?.classList.add("hidden"); } function toggleUserPopover() { userPopover?.classList.toggle("hidden"); } function setActiveView(view) { const previousView = currentView; currentView = view in viewLabels ? view : "organization"; if (currentViewTitle) { currentViewTitle.textContent = viewLabels[currentView]; } navButtons.forEach((button) => { const active = button.dataset.view === currentView; button.classList.toggle("active", active); button.classList.toggle("muted", !active); }); const isOrganization = currentView === "organization"; if (organizationStage) { organizationStage.hidden = !isOrganization; organizationStage.style.display = isOrganization ? "flex" : "none"; } if (emptyStage) { emptyStage.hidden = isOrganization; emptyStage.style.display = isOrganization ? "none" : "flex"; } if (isOrganization && previousView !== "organization" && organizationFrame) { const frameSrc = organizationFrame.dataset.src || organizationFrame.src; organizationFrame.src = frameSrc; } } function renderAuth() { const session = getSession(); const authenticated = Boolean(session?.user?.display_name); loginPanel.classList.toggle("hidden", authenticated); dashboardPanel.classList.toggle("hidden", !authenticated); if (authenticated) { const displayName = session.user.display_name || "접속자"; const rank = "-"; userBadge.innerHTML = `${displayName}${rank}`; userBadge.title = `${displayName} / -`; if (userPopover) { userPopover.innerHTML = `