All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m20s
v0.9.5 — 账号安全管控 + 内容资产页: - 首次登录强制改密(must_change_password + ForceChangePasswordModal) - 并发会话限制(ActiveSession + SessionJWT认证,可配置桌面/移动端会话数) - Token生命周期缩短(access 30min, refresh 1天) - 登录IP记录(LoginRecord模型,为异常检测打基础) - 内容资产页(超管三级折叠/团队管两级折叠,按需懒加载) v0.9.6 — UI修缮: - 侧栏导航排序(内容资产移到用户管理下方) - 视频网格高度调整(440px,3行+暗示可滚动) - 秒数单位统一(不再换算为分钟/小时) - 提示词标签溢出修复 + 弹窗方向自适应 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
102 lines
3.4 KiB
TypeScript
102 lines
3.4 KiB
TypeScript
import { useEffect } from 'react';
|
|
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
|
|
import { AmbientBackground } from './components/AmbientBackground';
|
|
import { Toast } from './components/Toast';
|
|
import { VideoGenerationPage } from './components/VideoGenerationPage';
|
|
import { ProtectedRoute } from './components/ProtectedRoute';
|
|
import { LandingPage } from './pages/LandingPage';
|
|
|
|
import { AdminLayout } from './pages/AdminLayout';
|
|
import { DashboardPage } from './pages/DashboardPage';
|
|
import { TeamsPage } from './pages/TeamsPage';
|
|
import { UsersPage } from './pages/UsersPage';
|
|
import { RecordsPage } from './pages/RecordsPage';
|
|
import { SettingsPage } from './pages/SettingsPage';
|
|
import { AuditLogsPage } from './pages/AuditLogsPage';
|
|
import { ProfilePage } from './pages/ProfilePage';
|
|
import { AssetsPage } from './pages/AssetsPage';
|
|
|
|
import { TeamAdminLayout } from './pages/TeamAdminLayout';
|
|
import { TeamDashboardPage } from './pages/TeamDashboardPage';
|
|
import { TeamMembersPage } from './pages/TeamMembersPage';
|
|
import { AdminAssetsPage } from './pages/AdminAssetsPage';
|
|
import { TeamAssetsPage } from './pages/TeamAssetsPage';
|
|
|
|
import { useAuthStore } from './store/auth';
|
|
|
|
export default function App() {
|
|
const initialize = useAuthStore((s) => s.initialize);
|
|
|
|
useEffect(() => {
|
|
initialize();
|
|
}, [initialize]);
|
|
|
|
return (
|
|
<BrowserRouter>
|
|
<AmbientBackground />
|
|
<Toast />
|
|
<Routes>
|
|
<Route path="/" element={<LandingPage />} />
|
|
<Route path="/login" element={<LandingPage autoLogin />} />
|
|
<Route
|
|
path="/app"
|
|
element={
|
|
<ProtectedRoute requireTeamMember>
|
|
<VideoGenerationPage />
|
|
</ProtectedRoute>
|
|
}
|
|
/>
|
|
<Route
|
|
path="/assets"
|
|
element={
|
|
<ProtectedRoute requireTeamMember>
|
|
<AssetsPage />
|
|
</ProtectedRoute>
|
|
}
|
|
/>
|
|
<Route
|
|
path="/profile"
|
|
element={
|
|
<ProtectedRoute requireTeamMember>
|
|
<ProfilePage />
|
|
</ProtectedRoute>
|
|
}
|
|
/>
|
|
{/* Super Admin routes */}
|
|
<Route
|
|
path="/admin"
|
|
element={
|
|
<ProtectedRoute requireAdmin>
|
|
<AdminLayout />
|
|
</ProtectedRoute>
|
|
}
|
|
>
|
|
<Route index element={<Navigate to="/admin/dashboard" replace />} />
|
|
<Route path="dashboard" element={<DashboardPage />} />
|
|
<Route path="teams" element={<TeamsPage />} />
|
|
<Route path="users" element={<UsersPage />} />
|
|
<Route path="records" element={<RecordsPage />} />
|
|
<Route path="settings" element={<SettingsPage />} />
|
|
<Route path="logs" element={<AuditLogsPage />} />
|
|
<Route path="assets" element={<AdminAssetsPage />} />
|
|
</Route>
|
|
{/* Team Admin routes */}
|
|
<Route
|
|
path="/team"
|
|
element={
|
|
<ProtectedRoute requireTeamAdmin>
|
|
<TeamAdminLayout />
|
|
</ProtectedRoute>
|
|
}
|
|
>
|
|
<Route index element={<Navigate to="/team/dashboard" replace />} />
|
|
<Route path="dashboard" element={<TeamDashboardPage />} />
|
|
<Route path="members" element={<TeamMembersPage />} />
|
|
<Route path="assets" element={<TeamAssetsPage />} />
|
|
</Route>
|
|
<Route path="*" element={<Navigate to="/" replace />} />
|
|
</Routes>
|
|
</BrowserRouter>
|
|
);
|
|
}
|