diff --git a/frontend/src/components/admin/AdminLayout.jsx b/frontend/src/components/admin/AdminLayout.jsx
new file mode 100644
index 0000000..1659916
--- /dev/null
+++ b/frontend/src/components/admin/AdminLayout.jsx
@@ -0,0 +1,25 @@
+/**
+ * AdminLayout 컴포넌트
+ * 모든 Admin 페이지에서 공통으로 사용하는 레이아웃
+ * 헤더 고정 + 본문 스크롤 구조
+ */
+import { useLocation } from 'react-router-dom';
+import AdminHeader from './AdminHeader';
+
+function AdminLayout({ user, children }) {
+ const location = useLocation();
+
+ // 일정 관리 페이지는 내부 스크롤 처리
+ const isSchedulePage = location.pathname.includes('/admin/schedules');
+
+ return (
+
+
- {children}
- {!hideFooter && }
+
+ {children}
+ {!hideFooter && }
+
);
}
diff --git a/frontend/src/pages/pc/admin/AdminAlbumForm.jsx b/frontend/src/pages/pc/admin/AdminAlbumForm.jsx
index fa564b4..38d9821 100644
--- a/frontend/src/pages/pc/admin/AdminAlbumForm.jsx
+++ b/frontend/src/pages/pc/admin/AdminAlbumForm.jsx
@@ -7,7 +7,7 @@ import {
} from 'lucide-react';
import Toast from '../../../components/Toast';
import CustomDatePicker from '../../../components/admin/CustomDatePicker';
-import AdminHeader from '../../../components/admin/AdminHeader';
+import AdminLayout from '../../../components/admin/AdminLayout';
import useToast from '../../../hooks/useToast';
// 커스텀 드롭다운 컴포넌트
@@ -260,15 +260,12 @@ function AdminAlbumForm() {
const albumTypes = ['정규', '미니', '싱글'];
return (
-
+
{/* Toast */}
setToast(null)} />
-
- {/* 헤더 */}
-
{/* 메인 콘텐츠 */}
-
+
{/* 브레드크럼 */}
)}
-
-
+
+
);
}
diff --git a/frontend/src/pages/pc/admin/AdminAlbumPhotos.jsx b/frontend/src/pages/pc/admin/AdminAlbumPhotos.jsx
index c3bad33..2c88c2d 100644
--- a/frontend/src/pages/pc/admin/AdminAlbumPhotos.jsx
+++ b/frontend/src/pages/pc/admin/AdminAlbumPhotos.jsx
@@ -8,7 +8,7 @@ import {
Tag, FolderOpen, Save
} from 'lucide-react';
import Toast from '../../../components/Toast';
-import AdminHeader from '../../../components/admin/AdminHeader';
+import AdminLayout from '../../../components/admin/AdminLayout';
import ConfirmDialog from '../../../components/admin/ConfirmDialog';
import useToast from '../../../hooks/useToast';
import * as authApi from '../../../api/admin/auth';
@@ -513,20 +513,17 @@ function AdminAlbumPhotos() {
if (loading) {
return (
-
- {/* 헤더 */}
-
-
+
{/* 로딩 스피너 */}
-
+
+
+
);
}
return (
-
+
{/* Toast */}
setToast(null)} />
@@ -588,11 +585,8 @@ function AdminAlbumPhotos() {
)}
- {/* 헤더 */}
-
-
{/* 메인 콘텐츠 */}
-
+
{/* 브레드크럼 */}
-
-
+
+
);
}
diff --git a/frontend/src/pages/pc/admin/AdminAlbums.jsx b/frontend/src/pages/pc/admin/AdminAlbums.jsx
index b089cde..0b0803d 100644
--- a/frontend/src/pages/pc/admin/AdminAlbums.jsx
+++ b/frontend/src/pages/pc/admin/AdminAlbums.jsx
@@ -7,13 +7,14 @@ import {
} from 'lucide-react';
import Toast from '../../../components/Toast';
import Tooltip from '../../../components/Tooltip';
-import AdminHeader from '../../../components/admin/AdminHeader';
+import AdminLayout from '../../../components/admin/AdminLayout';
import ConfirmDialog from '../../../components/admin/ConfirmDialog';
import useToast from '../../../hooks/useToast';
import * as authApi from '../../../api/admin/auth';
import { getAlbums } from '../../../api/public/albums';
import * as albumsApi from '../../../api/admin/albums';
+
function AdminAlbums() {
const navigate = useNavigate();
const [albums, setAlbums] = useState([]);
@@ -76,7 +77,7 @@ function AdminAlbums() {
);
return (
-
+
{/* Toast */}
setToast(null)} />
@@ -96,11 +97,8 @@ function AdminAlbums() {
loading={deleting}
/>
- {/* 헤더 */}
-
-
{/* 메인 콘텐츠 */}
-
+
{/* 브레드크럼 */}
@@ -234,8 +232,8 @@ function AdminAlbums() {
)}
)}
-
-
+
+
);
}
diff --git a/frontend/src/pages/pc/admin/AdminDashboard.jsx b/frontend/src/pages/pc/admin/AdminDashboard.jsx
index 5c885d6..2bab25b 100644
--- a/frontend/src/pages/pc/admin/AdminDashboard.jsx
+++ b/frontend/src/pages/pc/admin/AdminDashboard.jsx
@@ -5,7 +5,7 @@ import {
Disc3, Calendar, Users,
Home, ChevronRight
} from 'lucide-react';
-import AdminHeader from '../../../components/admin/AdminHeader';
+import AdminLayout from '../../../components/admin/AdminLayout';
import * as authApi from '../../../api/admin/auth';
import { getMembers } from '../../../api/public/members';
import { getAlbums, getAlbum } from '../../../api/public/albums';
@@ -134,12 +134,9 @@ function AdminDashboard() {
];
return (
-
- {/* 헤더 */}
-
-
+
{/* 메인 콘텐츠 */}
-
+
{/* 브레드크럼 */}
@@ -198,8 +195,8 @@ function AdminDashboard() {
-
-
+
+
);
}
diff --git a/frontend/src/pages/pc/admin/AdminMemberEdit.jsx b/frontend/src/pages/pc/admin/AdminMemberEdit.jsx
index 779a430..1da9ffe 100644
--- a/frontend/src/pages/pc/admin/AdminMemberEdit.jsx
+++ b/frontend/src/pages/pc/admin/AdminMemberEdit.jsx
@@ -7,7 +7,7 @@ import {
} from 'lucide-react';
import Toast from '../../../components/Toast';
import CustomDatePicker from '../../../components/admin/CustomDatePicker';
-import AdminHeader from '../../../components/admin/AdminHeader';
+import AdminLayout from '../../../components/admin/AdminLayout';
import useToast from '../../../hooks/useToast';
import * as authApi from '../../../api/admin/auth';
import * as membersApi from '../../../api/admin/members';
@@ -99,15 +99,12 @@ function AdminMemberEdit() {
};
return (
-