Files
yunhaifinance/frontend/src/App.tsx
T

195 lines
8.2 KiB
TypeScript

import React from 'react'
import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom'
import { ConfigProvider } from 'antd'
import dayjs from 'dayjs'
// 样式导入
import './App.css'
// 页面组件
import LoginPage from './pages/auth/LoginPage'
import DashboardPage from './pages/dashboard/DashboardPage'
import ProjectsPage from './pages/projects/ProjectsPage'
import ProjectDetail from './pages/projects/ProjectDetail'
import AdvancesPage from './pages/advances/AdvancesPage'
import AdvanceVerificationStatusPage from './pages/advances/AdvanceVerificationStatusPage'
import ReimbursementsPage from './pages/reimbursements/ReimbursementsPage'
import FinancePage from './pages/finance/FinancePage'
import PurchaseRequestsPage from './pages/PurchaseRequestsPage'
import PurchaseOrdersPage from './pages/PurchaseOrdersPage'
import PaymentPlansPage from './pages/PaymentPlansPage'
import PaymentRequestsPage from './pages/PaymentRequestsPage'
import VerificationPage from './pages/VerificationPage'
import LayoutShowcase from './pages/LayoutShowcase'
import ProcurementPage from './pages/ProcurementPage'
import ExchangeRatePage from './pages/ExchangeRatePage'
import SuppliersPage from './pages/SuppliersPage'
import SupplierDetail from './pages/SupplierDetail'
import ProductPage from './pages/ProductPage'
import SubcontractorsPage from './pages/SubcontractorsPage'
import SubcontractorDetail from './pages/SubcontractorDetail'
import CustomersPage from './pages/CustomersPage'
import CustomerDetail from './pages/CustomerDetail'
import UsersPage from './pages/UsersPage'
import RolesPage from './pages/RolesPage'
import SystemLogsPage from './pages/SystemLogsPage'
import LogisticsCompaniesPage from './pages/LogisticsCompaniesPage'
import ProjectCostPage from './pages/ProjectCostPage'
import InventoryPage from './pages/InventoryPage'
import ProfilePage from './pages/ProfilePage'
import ApprovalManagement from './pages/approval/ApprovalManagement'
import ExecutionManagement from './pages/approval/ExecutionManagement'
import ReportsPage from './pages/reports/ReportsPage'
import TestPage from './pages/test/TestPage'
import TestPage2 from './pages/TestPage2'
import TestAPI from './pages/TestAPI'
// 预算报价页面
import BudgetProjectList from './pages/budget/BudgetProjectList'
import BudgetProjectCreate from './pages/budget/BudgetProjectCreate'
import BudgetProjectDetail from './pages/budget/BudgetProjectDetail'
// 施工管理页面
import ConstructionList from './pages/construction'
import ConstructionLog from './pages/construction/ConstructionLog'
import ConstructionMilestones from './pages/construction/ConstructionMilestones'
// 后台管理
import AdminLayout from './layouts/AdminLayout'
import BackupPage from './pages/admin/BackupPage'
import ProcessManagement from './pages/admin/ProcessManagement'
import AboutPage from './pages/admin/AboutPage'
// 布局组件
import MainLayout from './components/layout/MainLayout'
import ErrorBoundary from './components/ErrorBoundary'
// 状态管理
import { useAuthStore } from './store/authStore'
import { useLanguageStore } from './store/languageStore'
// 路由守卫组件
const PrivateRoute: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const { isAuthenticated, user, isLoading } = useAuthStore()
if (isLoading) {
return (
<div style={{
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
height: '100vh',
fontSize: '24px'
}}>
加载中...
</div>
)
}
if (!isAuthenticated) {
return <Navigate to="/login" replace />
}
return <>{children}</>
}
function App() {
const { currentLanguage, getLanguageInfo } = useLanguageStore()
const languageInfo = getLanguageInfo()
const localeMap: Record<string, string> = {
'zh-CN': 'zh-cn',
'th-TH': 'th',
'lo-LA': 'en',
'en-US': 'en'
}
dayjs.locale(localeMap[currentLanguage] || 'zh-cn')
return (
<ConfigProvider
locale={languageInfo.antdLocale}
theme={{
token: {
colorPrimary: '#1890ff',
borderRadius: 6,
colorLink: '#1890ff',
},
components: {
Layout: {
headerBg: '#fff',
headerPadding: '0 24px',
},
Menu: {},
Card: {
margin: 16,
},
},
}}
>
<Router future={{ v7_startTransition: true, v7_relativeSplatPath: true }}>
<ErrorBoundary>
<Routes>
<Route path="/login" element={<LoginPage />} />
{/* 前台路由 */}
<Route path="/" element={<PrivateRoute><MainLayout /></PrivateRoute>}>
<Route index element={<Navigate to="/dashboard" replace />} />
<Route path="dashboard" element={<DashboardPage />} />
<Route path="projects" element={<ProjectsPage />} />
<Route path="projects/:id" element={<ProjectDetail />} />
<Route path="budget-projects" element={<BudgetProjectList />} />
<Route path="budget-projects/create" element={<BudgetProjectCreate />} />
<Route path="budget-projects/:id" element={<BudgetProjectDetail />} />
<Route path="construction" element={<ConstructionList />} />
<Route path="construction/:id/logs" element={<ConstructionLog />} />
<Route path="construction/:id/milestones" element={<ConstructionMilestones />} />
<Route path="approval" element={<ApprovalManagement />} />
<Route path="execution" element={<ExecutionManagement />} />
<Route path="advances" element={<AdvancesPage />} />
<Route path="advances/verification-status" element={<AdvanceVerificationStatusPage />} />
<Route path="reimbursements" element={<ReimbursementsPage />} />
<Route path="finance" element={<FinancePage />} />
<Route path="exchange-rates" element={<ExchangeRatePage />} />
<Route path="reports" element={<ReportsPage />} />
<Route path="payment-requests" element={<PaymentRequestsPage />} />
<Route path="verification" element={<VerificationPage />} />
<Route path="layout-showcase" element={<LayoutShowcase />} />
<Route path="procurement" element={<ProcurementPage />} />
<Route path="products" element={<ProductPage />} />
<Route path="purchase-requests" element={<PurchaseRequestsPage />} />
<Route path="purchase-orders" element={<PurchaseOrdersPage />} />
<Route path="payment-plans" element={<PaymentPlansPage />} />
<Route path="inventory" element={<InventoryPage />} />
<Route path="logistics-companies" element={<LogisticsCompaniesPage />} />
<Route path="project-cost" element={<ProjectCostPage />} />
<Route path="suppliers" element={<SuppliersPage />} />
<Route path="suppliers/:id" element={<SupplierDetail />} />
<Route path="subcontractors" element={<SubcontractorsPage />} />
<Route path="subcontractors/:id" element={<SubcontractorDetail />} />
<Route path="customers" element={<CustomersPage />} />
<Route path="customers/:id" element={<CustomerDetail />} />
<Route path="profile" element={<ProfilePage />} />
<Route path="test" element={<TestPage />} />
<Route path="test2" element={<TestPage2 />} />
<Route path="test-api" element={<TestAPI />} />
</Route>
{/* 后台管理路由 */}
<Route path="/admin" element={<PrivateRoute><AdminLayout /></PrivateRoute>}>
<Route index element={<Navigate to="/admin/users" replace />} />
<Route path="users" element={<UsersPage />} />
<Route path="roles" element={<RolesPage />} />
<Route path="process" element={<ProcessManagement />} />
<Route path="logs" element={<SystemLogsPage />} />
<Route path="backup" element={<BackupPage />} />
<Route path="about" element={<AboutPage />} />
</Route>
</Routes>
</ErrorBoundary>
</Router>
</ConfigProvider>
)
}
export default App