diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 09e4ac3..c11878c 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -13,6 +13,7 @@ import PCAlbumDetail from './pages/pc/public/AlbumDetail'; import PCAlbumGallery from './pages/pc/public/AlbumGallery'; import PCTrackDetail from './pages/pc/public/TrackDetail'; import PCSchedule from './pages/pc/public/Schedule'; +import PCNotFound from './pages/pc/public/NotFound'; // 모바일 페이지 import MobileHome from './pages/mobile/public/Home'; @@ -22,6 +23,7 @@ import MobileAlbumDetail from './pages/mobile/public/AlbumDetail'; import MobileAlbumGallery from './pages/mobile/public/AlbumGallery'; import MobileTrackDetail from './pages/mobile/public/TrackDetail'; import MobileSchedule from './pages/mobile/public/Schedule'; +import MobileNotFound from './pages/mobile/public/NotFound'; // 관리자 페이지 import AdminLogin from './pages/pc/admin/AdminLogin'; @@ -82,6 +84,7 @@ function App() { } /> } /> } /> + } /> } /> @@ -97,6 +100,7 @@ function App() { } /> } /> } /> + } /> diff --git a/frontend/src/components/pc/Layout.jsx b/frontend/src/components/pc/Layout.jsx index d35ad38..f388727 100644 --- a/frontend/src/components/pc/Layout.jsx +++ b/frontend/src/components/pc/Layout.jsx @@ -18,8 +18,10 @@ function Layout({ children }) { return ( - - {children} + + + {children} + {!hideFooter && } diff --git a/frontend/src/pages/mobile/public/NotFound.jsx b/frontend/src/pages/mobile/public/NotFound.jsx new file mode 100644 index 0000000..aa64f50 --- /dev/null +++ b/frontend/src/pages/mobile/public/NotFound.jsx @@ -0,0 +1,90 @@ +import { motion } from "framer-motion"; +import { Link } from "react-router-dom"; +import { Home, ArrowLeft } from "lucide-react"; + +function MobileNotFound() { + return ( + + + {/* 404 숫자 */} + + + 404 + + + + {/* 메시지 */} + + + 페이지를 찾을 수 없습니다 + + + 요청하신 페이지가 존재하지 않거나 + + 이동되었을 수 있습니다. + + + + {/* 장식 요소 */} + + {[...Array(5)].map((_, i) => ( + + ))} + + + {/* 버튼들 */} + + + + 홈으로 가기 + + window.history.back()} + className="flex items-center justify-center gap-2 px-6 py-3.5 border-2 border-primary text-primary rounded-full font-medium active:bg-primary/5 transition-colors" + > + + 이전 페이지 + + + + + ); +} + +export default MobileNotFound; diff --git a/frontend/src/pages/pc/public/NotFound.jsx b/frontend/src/pages/pc/public/NotFound.jsx new file mode 100644 index 0000000..5ba7609 --- /dev/null +++ b/frontend/src/pages/pc/public/NotFound.jsx @@ -0,0 +1,90 @@ +import { motion } from "framer-motion"; +import { Link } from "react-router-dom"; +import { Home, ArrowLeft } from "lucide-react"; + +function NotFound() { + return ( + + + {/* 404 숫자 */} + + + 404 + + + + {/* 메시지 */} + + + 페이지를 찾을 수 없습니다 + + + 요청하신 페이지가 존재하지 않거나 이동되었을 수 있습니다. + + 주소를 다시 확인해 주세요. + + + + {/* 장식 요소 */} + + {[...Array(5)].map((_, i) => ( + + ))} + + + {/* 버튼들 */} + + window.history.back()} + className="flex items-center gap-2 px-6 py-3 border-2 border-primary text-primary rounded-full font-medium hover:bg-primary hover:text-white transition-colors duration-200" + > + + 이전 페이지 + + + + 홈으로 가기 + + + + + ); +} + +export default NotFound;
+ 요청하신 페이지가 존재하지 않거나 + + 이동되었을 수 있습니다. +
+ 요청하신 페이지가 존재하지 않거나 이동되었을 수 있습니다. + + 주소를 다시 확인해 주세요. +