- Privacy.jsx: 개인정보처리방침 (수집항목/목적/보유기간/권리/책임자) - Terms.jsx: 이용약관 (10개 조항, 지오정보기술 정보 포함) - Sitemap.jsx: 전체 메뉴 그리드 안내 (9개 섹션) - App.jsx: /privacy, /terms, /sitemap 라우트 등록 - Common.css: prose/policy 스타일 추가 URL: https://zioinfo.co.kr/privacy https://zioinfo.co.kr/terms https://zioinfo.co.kr/sitemap Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
98 lines
4.1 KiB
JavaScript
98 lines
4.1 KiB
JavaScript
import React, { Suspense, lazy } from 'react';
|
|
import { Routes, Route, Navigate, useLocation } from 'react-router-dom';
|
|
import Header from './components/layout/Header';
|
|
import Footer from './components/layout/Footer';
|
|
|
|
const Home = lazy(() => import('./pages/Home'));
|
|
const GuardiaDetail = lazy(() => import('./pages/GuardiaDetail'));
|
|
const SolutionPage = lazy(() => import('./pages/SolutionPage'));
|
|
const Company = lazy(() => import('./pages/Company'));
|
|
const Business = lazy(() => import('./pages/Business'));
|
|
const Contact = lazy(() => import('./pages/Contact'));
|
|
const Support = lazy(() => import('./pages/Support'));
|
|
const NewsPage = lazy(() => import('./pages/NewsPage'));
|
|
const Recruit = lazy(() => import('./pages/Recruit'));
|
|
const NotFound = lazy(() => import('./pages/NotFound'));
|
|
|
|
// Member Auth
|
|
const MemberLogin = lazy(() => import('./pages/MemberLogin'));
|
|
const Privacy = lazy(() => import('./pages/Privacy'));
|
|
const Terms = lazy(() => import('./pages/Terms'));
|
|
const Sitemap = lazy(() => import('./pages/Sitemap'));
|
|
|
|
// Admin
|
|
const AdminLogin = lazy(() => import('./pages/admin/AdminLogin'));
|
|
const AdminLayout = lazy(() => import('./pages/admin/AdminLayout'));
|
|
const AdminDashboard = lazy(() => import('./pages/admin/AdminDashboard'));
|
|
const AdminNews = lazy(() => import('./pages/admin/AdminNews'));
|
|
const AdminInquiry = lazy(() => import('./pages/admin/AdminInquiry'));
|
|
const AdminRecruit = lazy(() => import('./pages/admin/AdminRecruit'));
|
|
const AdminSettings = lazy(() => import('./pages/admin/AdminSettings'));
|
|
const AdminMember = lazy(() => import('./pages/admin/AdminMember'));
|
|
|
|
function Loading() {
|
|
return (
|
|
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
height: '60vh', color: 'var(--gray-400)', fontSize: '14px' }}>
|
|
로딩 중...
|
|
</div>
|
|
);
|
|
}
|
|
|
|
function PublicLayout({ children }) {
|
|
return (
|
|
<>
|
|
<Header />
|
|
<Suspense fallback={<Loading />}>{children}</Suspense>
|
|
<Footer />
|
|
</>
|
|
);
|
|
}
|
|
|
|
export default function App() {
|
|
const location = useLocation();
|
|
const isAdmin = location.pathname.startsWith('/admin');
|
|
|
|
if (isAdmin) {
|
|
return (
|
|
<Suspense fallback={<Loading />}>
|
|
<Routes>
|
|
<Route path="/admin/login" element={<AdminLogin />} />
|
|
<Route path="/admin" element={<AdminLayout />}>
|
|
<Route index element={<Navigate to="/admin/dashboard" replace />} />
|
|
<Route path="dashboard" element={<AdminDashboard />} />
|
|
<Route path="news" element={<AdminNews />} />
|
|
<Route path="inquiries" element={<AdminInquiry />} />
|
|
<Route path="recruit" element={<AdminRecruit />} />
|
|
<Route path="members" element={<AdminMember />} />
|
|
<Route path="settings" element={<AdminSettings />} />
|
|
</Route>
|
|
<Route path="*" element={<Navigate to="/admin/login" replace />} />
|
|
</Routes>
|
|
</Suspense>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<PublicLayout>
|
|
<Routes>
|
|
<Route path="/" element={<Home />} />
|
|
<Route path="/solution/guardia" element={<GuardiaDetail />} />
|
|
<Route path="/solution/*" element={<SolutionPage />} />
|
|
<Route path="/company/*" element={<Company />} />
|
|
<Route path="/business/*" element={<Business />} />
|
|
<Route path="/support/contact" element={<Contact />} />
|
|
<Route path="/support/*" element={<Support />} />
|
|
<Route path="/recruit/*" element={<Recruit />} />
|
|
<Route path="/news/*" element={<NewsPage />} />
|
|
<Route path="/login" element={<MemberLogin />} />
|
|
<Route path="/register" element={<MemberLogin />} />
|
|
<Route path="/privacy" element={<Privacy />} />
|
|
<Route path="/terms" element={<Terms />} />
|
|
<Route path="/sitemap" element={<Sitemap />} />
|
|
<Route path="*" element={<NotFound />} />
|
|
</Routes>
|
|
</PublicLayout>
|
|
);
|
|
}
|