5abc705eae
- web/: 产品官网(Hero 事件流终端、功能矩阵、架构、快速开始、下载、博客 + Markdown 详情页),青瓷绿双主题 - admin/: 内容管理(JWT 登录、文章分页/搜索/CRUD、草稿与发布),embed 挂 /admin - server/: Gin + GORM,MySQL(DSN 走 .env,SQLite 兜底);规范落地:sundynix_ 表前缀、字符串雪花主键、snake_case 列名、统一响应信封、公共分页参数 - 双 SPA embed 单二进制部署,make build 一键出包 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
28 lines
890 B
TypeScript
28 lines
890 B
TypeScript
import { Navigate, Outlet, Route, Routes } from 'react-router-dom'
|
|
import { getToken } from '@/api/client'
|
|
import { AdminLayout } from '@/components/admin-layout'
|
|
import LoginPage from '@/pages/login'
|
|
import PostsListPage from '@/pages/posts-list'
|
|
import PostEditPage from '@/pages/post-edit'
|
|
|
|
function RequireAuth() {
|
|
if (!getToken()) return <Navigate to="/login" replace />
|
|
return <Outlet />
|
|
}
|
|
|
|
export default function App() {
|
|
return (
|
|
<Routes>
|
|
<Route path="/login" element={<LoginPage />} />
|
|
<Route element={<RequireAuth />}>
|
|
<Route element={<AdminLayout />}>
|
|
<Route index element={<PostsListPage />} />
|
|
<Route path="posts/new" element={<PostEditPage />} />
|
|
<Route path="posts/:id" element={<PostEditPage />} />
|
|
</Route>
|
|
</Route>
|
|
<Route path="*" element={<Navigate to="/" replace />} />
|
|
</Routes>
|
|
)
|
|
}
|