unis_crm/frontend/src/App.tsx

53 lines
1.6 KiB
TypeScript
Raw Normal View History

2026-03-19 06:23:03 +00:00
/**
* @license
* SPDX-License-Identifier: Apache-2.0
*/
2026-03-20 08:39:07 +00:00
import type { ReactNode } from "react";
import { BrowserRouter, Navigate, Routes, Route } from "react-router-dom";
2026-03-19 06:23:03 +00:00
import Layout from "./components/Layout";
import Dashboard from "./pages/Dashboard";
import Expansion from "./pages/Expansion";
import Opportunities from "./pages/Opportunities";
import Work from "./pages/Work";
import Profile from "./pages/Profile";
import { ThemeProvider } from "./components/ThemeProvider";
2026-03-20 08:39:07 +00:00
import LoginPage from "./pages/Login";
import WecomLoginCallbackPage from "./pages/WecomLoginCallback";
2026-03-20 08:39:07 +00:00
import { isAuthed } from "./lib/auth";
function RequireAuth({ children }: { children: ReactNode }) {
if (!isAuthed()) {
return <Navigate to="/login" replace />;
}
return children;
}
2026-03-19 06:23:03 +00:00
export default function App() {
return (
<ThemeProvider defaultTheme="light" storageKey="crm-theme">
<BrowserRouter>
<Routes>
2026-03-20 08:39:07 +00:00
<Route path="/login" element={<LoginPage />} />
<Route path="/login/wecom" element={<WecomLoginCallbackPage />} />
2026-03-20 08:39:07 +00:00
<Route
path="/"
element={
<RequireAuth>
<Layout />
</RequireAuth>
}
>
2026-03-19 06:23:03 +00:00
<Route index element={<Dashboard />} />
<Route path="expansion" element={<Expansion />} />
<Route path="opportunities" element={<Opportunities />} />
2026-03-26 09:29:55 +00:00
<Route path="work/*" element={<Work />} />
2026-03-19 06:23:03 +00:00
<Route path="profile" element={<Profile />} />
</Route>
</Routes>
</BrowserRouter>
</ThemeProvider>
);
}