/** * 관리자 페이지 */ import { useEffect, useState } from 'react'; import { useNavigate, useLocation } from 'react-router-dom'; import { useAuth } from '../contexts/AuthContext'; import { Shield, LogOut, Settings, Server, Users, Loader2 } from 'lucide-react'; import { motion, AnimatePresence } from 'framer-motion'; export default function Admin() { const { isLoggedIn, isAdmin, user, loading, logout } = useAuth(); const navigate = useNavigate(); const location = useLocation(); const [toast, setToast] = useState(null); // 권한 확인 useEffect(() => { if (!loading) { if (!isLoggedIn) { // 로그인 후 다시 admin으로 돌아올 수 있도록 현재 경로 전달 navigate('/login', { state: { from: location.pathname } }); } else if (!isAdmin) { setToast('관리자 권한이 필요합니다.'); setTimeout(() => { navigate('/'); }, 1500); } } }, [isLoggedIn, isAdmin, loading, navigate, location.pathname]); const handleLogout = () => { logout(); navigate('/'); }; // 토스트 자동 숨기기 useEffect(() => { if (toast) { const timer = setTimeout(() => setToast(null), 3000); return () => clearTimeout(timer); } }, [toast]); if (loading) { return (
); } if (!isLoggedIn || !isAdmin) { return ( <> {/* 토스트 알림 */} {toast && ( {toast} )}
); } return (
{/* 헤더 */}

관리자 페이지

서버 관리 및 설정

{/* 사용자 정보 */}

로그인 정보

이름

{user?.name || '-'}

이메일

{user?.email}

{/* 관리 기능 카드 */}
{/* 서버 상태 */}

서버 상태

마인크래프트 서버 상태 모니터링 및 관리

정상 작동 중
{/* 플레이어 관리 */}

플레이어 관리

접속 중인 플레이어 목록 및 관리 기능

추후 업데이트 예정
{/* 설정 */}

설정

대시보드 설정 및 구성 관리

추후 업데이트 예정
); }