- 新增注册页面 (RegisterPage) 和设置页面 (SettingsPage) - 实现多图片上传功能,支持 FormData 文件上传 - 添加 multer 中间件处理图片文件 - 实现 OCR 异步处理服务,自动触发文字识别 - 添加 OCR 处理状态轮询,显示处理进度 - 修复图片显示问题,拼接完整的后端 URL - 添加图片重新处理 API (POST /api/images/:id/reprocess) - 更新 Card 组件支持 extra 属性 - 创建 CLAUDE.md 项目文档 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
|
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
import { useAuthStore } from './stores/authStore';
|
|
import LoginPage from './pages/LoginPage';
|
|
import RegisterPage from './pages/RegisterPage';
|
|
import DashboardPage from './pages/DashboardPage';
|
|
import DocumentsPage from './pages/DocumentsPage';
|
|
import TodosPage from './pages/TodosPage';
|
|
import ImagesPage from './pages/ImagesPage';
|
|
import SettingsPage from './pages/SettingsPage';
|
|
import Layout from './components/Layout';
|
|
|
|
const queryClient = new QueryClient({
|
|
defaultOptions: {
|
|
queries: {
|
|
refetchOnWindowFocus: false,
|
|
retry: 1,
|
|
},
|
|
},
|
|
});
|
|
|
|
function ProtectedRoute({ children }: { children: React.ReactNode }) {
|
|
const isAuthenticated = useAuthStore((state) => state.isAuthenticated);
|
|
|
|
if (!isAuthenticated) {
|
|
return <Navigate to="/login" replace />;
|
|
}
|
|
|
|
return <>{children}</>;
|
|
}
|
|
|
|
function App() {
|
|
return (
|
|
<QueryClientProvider client={queryClient}>
|
|
<BrowserRouter>
|
|
<Routes>
|
|
<Route path="/login" element={<LoginPage />} />
|
|
<Route path="/register" element={<RegisterPage />} />
|
|
<Route
|
|
path="/"
|
|
element={
|
|
<ProtectedRoute>
|
|
<Layout />
|
|
</ProtectedRoute>
|
|
}
|
|
>
|
|
<Route index element={<Navigate to="/dashboard" replace />} />
|
|
<Route path="dashboard" element={<DashboardPage />} />
|
|
<Route path="documents" element={<DocumentsPage />} />
|
|
<Route path="todos" element={<TodosPage />} />
|
|
<Route path="images" element={<ImagesPage />} />
|
|
<Route path="settings" element={<SettingsPage />} />
|
|
</Route>
|
|
</Routes>
|
|
</BrowserRouter>
|
|
</QueryClientProvider>
|
|
);
|
|
}
|
|
|
|
export default App;
|