feat(role): enable admin login, default Admin to Dashboard, and default Practitioner to Server list

This commit is contained in:
2026-06-10 09:13:46 +09:00
parent 2f88a0fae7
commit b87ca2854b

View File

@@ -138,17 +138,42 @@ function initRoleSwitcher() {
if (!checkbox || !userLabel || !adminLabel) return; if (!checkbox || !userLabel || !adminLabel) return;
checkbox.addEventListener('change', () => { checkbox.addEventListener('change', () => {
const mainContent = document.getElementById('main-content')!;
if (checkbox.checked) { if (checkbox.checked) {
alert('관리자 모드는 현재 준비 중입니다. 나중에 관리자 전용 페이지와 연결될 예정입니다.'); state.currentUserRole = 'admin';
checkbox.checked = false; // UI 강제 되돌리기 userLabel.classList.remove('active');
return; adminLabel.classList.add('active');
} document.body.classList.add('admin-mode');
// 실무자 모드 전환 (현재는 Admin 진입이 차단되므로 사실상 fallback 로직) // 관리자 모드 전환 시 대시보드로 이동
state.currentUserRole = 'user'; state.activeCategory = 'hw';
adminLabel.classList.remove('active'); state.activeSubTab = '대시보드';
userLabel.classList.add('active'); refreshView();
document.body.classList.remove('admin-mode'); renderNavigation((tab) => {
if (tab === '대시보드') {
renderDashboard(mainContent);
} else {
renderSWTable(mainContent);
}
});
} else {
state.currentUserRole = 'user';
adminLabel.classList.remove('active');
userLabel.classList.add('active');
document.body.classList.remove('admin-mode');
// 실무자 모드 전환 시 서버 목록으로 이동
state.activeCategory = 'hw';
state.activeSubTab = '서버';
refreshView();
renderNavigation((tab) => {
if (tab === '대시보드') {
renderDashboard(mainContent);
} else {
renderSWTable(mainContent);
}
});
}
}); });
} }
@@ -159,42 +184,57 @@ function handleLogin() {
const loginContainer = document.getElementById('login-container'); const loginContainer = document.getElementById('login-container');
const appLayout = document.getElementById('app-layout'); const appLayout = document.getElementById('app-layout');
const roleCards = document.querySelectorAll('.role-card'); const roleCards = document.querySelectorAll('.role-card');
const userLabel = document.querySelector('.role-label.user');
const adminLabel = document.querySelector('.role-label.admin');
if (!loginContainer || !appLayout || roleCards.length === 0) return; if (!loginContainer || !appLayout || roleCards.length === 0) return;
roleCards.forEach(card => { roleCards.forEach(card => {
card.addEventListener('click', () => { card.addEventListener('click', () => {
const role = card.getAttribute('data-role'); const role = card.getAttribute('data-role');
const checkbox = document.getElementById('role-toggle-checkbox') as HTMLInputElement;
if (role === 'admin') { if (role === 'admin') {
alert('관리자 모드는 현재 준비 중입니다. 실무자 모드를 이용해 주세요.'); console.log('🔓 Entering as Admin');
state.currentUserRole = 'admin';
state.activeCategory = 'hw';
state.activeSubTab = '대시보드'; // 관리자는 대시보드로 진입
if (checkbox) checkbox.checked = true;
if (userLabel) userLabel.classList.remove('active');
if (adminLabel) adminLabel.classList.add('active');
document.body.classList.add('admin-mode');
} else if (role === 'user') {
console.log('🔓 Entering as Practitioner');
state.currentUserRole = 'user';
state.activeCategory = 'hw';
state.activeSubTab = '서버'; // 실무자는 서버 목록으로 진입
if (checkbox) checkbox.checked = false;
if (userLabel) userLabel.classList.add('active');
if (adminLabel) adminLabel.classList.remove('active');
document.body.classList.remove('admin-mode');
} else {
return; return;
} }
if (role === 'user') { // UI 전환
console.log('🔓 Entering as Practitioner'); loginContainer.style.display = 'none';
appLayout.style.display = 'flex';
// 초기 토글 상태 설정 (실무자 고정) // 역할 스위처 및 앱 초기화 시작
const checkbox = document.getElementById('role-toggle-checkbox') as HTMLInputElement; initRoleSwitcher();
if (checkbox) checkbox.checked = false; initApp();
state.currentUserRole = 'user';
// UI 전환 // 로고 클릭 시 초기화면 복귀 로직 (한 번만 등록)
loginContainer.style.display = 'none'; const brand = document.querySelector('.brand') as HTMLElement;
appLayout.style.display = 'flex'; if (brand) {
brand.style.cursor = 'pointer';
// 역할 스위처 및 앱 초기화 시작 brand.onclick = () => {
initRoleSwitcher(); location.reload(); // 즉시 초기화면으로 복귀
initApp(); };
// 로고 클릭 시 초기화면 복귀 로직 (한 번만 등록)
const brand = document.querySelector('.brand') as HTMLElement;
if (brand) {
brand.style.cursor = 'pointer';
brand.onclick = () => {
location.reload(); // 즉시 초기화면으로 복귀
};
}
} }
}); });
}); });