diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 0c98ee2..f50f5bb 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -12,6 +12,7 @@ import PCSchedule from './pages/pc/Schedule'; // 관리자 페이지 import AdminLogin from './pages/pc/admin/AdminLogin'; import AdminDashboard from './pages/pc/admin/AdminDashboard'; +import AdminAlbums from './pages/pc/admin/AdminAlbums'; // PC 레이아웃 import PCLayout from './components/pc/Layout'; @@ -24,6 +25,7 @@ function App() { {/* 관리자 페이지 (레이아웃 없음) */} } /> } /> + } /> {/* 일반 페이지 (레이아웃 포함) */} { + // 로그인 확인 + const token = localStorage.getItem('adminToken'); + const userData = localStorage.getItem('adminUser'); + + if (!token || !userData) { + navigate('/admin'); + return; + } + + setUser(JSON.parse(userData)); + + // 앨범 목록 로드 + fetch('/api/albums') + .then(res => res.json()) + .then(data => { + setAlbums(data); + setLoading(false); + }) + .catch(error => { + console.error('앨범 로드 오류:', error); + setLoading(false); + }); + }, [navigate]); + + const handleLogout = () => { + localStorage.removeItem('adminToken'); + localStorage.removeItem('adminUser'); + navigate('/admin'); + }; + + // 날짜 포맷팅 + const formatDate = (dateStr) => { + if (!dateStr) return ''; + const date = new Date(dateStr); + return `${date.getFullYear()}.${String(date.getMonth() + 1).padStart(2, '0')}.${String(date.getDate()).padStart(2, '0')}`; + }; + + // 검색 필터링 + const filteredAlbums = albums.filter(album => + album.title.toLowerCase().includes(searchQuery.toLowerCase()) + ); + + return ( +
+ {/* 헤더 */} +
+
+
+ + fromis_9 + + + Admin + +
+
+ + 안녕하세요, {user?.username}님 + + +
+
+
+ + {/* 메인 콘텐츠 */} +
+ {/* 브레드크럼 */} +
+ + + + + 앨범 관리 +
+ + {/* 타이틀 & 액션 */} +
+
+

앨범 관리

+

앨범, 트랙, 사진을 관리합니다

+
+ +
+ + {/* 검색 */} +
+
+ + setSearchQuery(e.target.value)} + placeholder="앨범 검색..." + className="w-full pl-10 pr-4 py-2 border border-gray-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent" + /> +
+
+ + {/* 앨범 목록 */} + {loading ? ( +
+
+
+ ) : ( +
+ + + + + + + + + + + + {filteredAlbums.map((album, index) => ( + + + + + + + + ))} + +
앨범타입발매일트랙관리
+
+ {album.title} +
+

{album.title}

+
+
+
+ + {album.album_type} + + +
+ + {formatDate(album.release_date)} +
+
+
+ + {album.tracks?.length || 0}곡 +
+
+
+ + + +
+
+ + {filteredAlbums.length === 0 && ( +
+ {searchQuery ? '검색 결과가 없습니다.' : '등록된 앨범이 없습니다.'} +
+ )} +
+ )} +
+
+ ); +} + +export default AdminAlbums;