// 깔끔한 로그인 로직 (login.js) import { API } from './api-config.js'; function parseJwt(token) { try { return JSON.parse(atob(token.split('.')[1])); } catch (e) { return null; } } // 역할별 대시보드 라우팅 function routeToDashboard(user) { const accessLevel = (user.access_level || '').toLowerCase().trim(); // 그룹장/리더 관련 키워드들 const leaderKeywords = [ 'group_leader', 'groupleader', 'group-leader', 'leader', 'supervisor', 'team_leader', 'teamleader', '그룹장', '팀장', '현장책임자' ]; // 관리자 관련 키워드들 const adminKeywords = [ 'admin', 'administrator', 'system', '관리자', '시스템관리자' ]; // 지원팀 관련 키워드들 const supportKeywords = [ 'support', 'support_team', 'supportteam', '지원팀', '지원' ]; // 키워드 매칭 if (leaderKeywords.some(keyword => accessLevel.includes(keyword.toLowerCase()))) { return '/pages/dashboard/group-leader.html'; } if (adminKeywords.some(keyword => accessLevel.includes(keyword.toLowerCase()))) { return '/pages/dashboard/admin.html'; } if (supportKeywords.some(keyword => accessLevel.includes(keyword.toLowerCase()))) { return '/pages/dashboard/support.html'; } return '/pages/dashboard/user.html'; } document.getElementById('loginForm').addEventListener('submit', async function (e) { e.preventDefault(); const username = document.getElementById('username').value; const password = document.getElementById('password').value; const errorDiv = document.getElementById('error'); // 로딩 상태 표시 const submitBtn = e.target.querySelector('button[type="submit"]'); const originalText = submitBtn.textContent; submitBtn.disabled = true; submitBtn.textContent = '로그인 중...'; try { const res = await fetch(`${API}/auth/login`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }) }); const result = await res.json(); if (res.ok && result.success && result.token) { localStorage.setItem('token', result.token); localStorage.setItem('user', JSON.stringify(result.user)); // 역할별 대시보드로 리다이렉트 const redirectUrl = routeToDashboard(result.user); // 부드러운 전환 효과 document.body.style.opacity = '0'; setTimeout(() => { window.location.href = redirectUrl; }, 300); } else { localStorage.removeItem('token'); localStorage.removeItem('user'); errorDiv.textContent = result.error || '로그인에 실패했습니다.'; errorDiv.style.display = 'block'; // 에러 메시지 자동 숨김 setTimeout(() => { errorDiv.style.display = 'none'; }, 5000); } } catch (err) { console.error('로그인 오류:', err); errorDiv.textContent = '서버 연결에 실패했습니다. 잠시 후 다시 시도해주세요.'; errorDiv.style.display = 'block'; } finally { // 로딩 상태 해제 submitBtn.disabled = false; submitBtn.textContent = originalText; } });