feat: initial frontend - React + TypeScript + Vite

- Login page with JWT auth
- Dashboard with stats and charts
- Issues list with pagination, filtering
- Issue detail with comments, status transitions
- Create issue form
- Dark theme UI
- Docker (nginx) with API proxy to backend
- Sidebar navigation
This commit is contained in:
Zhi
2026-02-27 09:47:19 +00:00
parent 32557f1de2
commit 853594f447
20 changed files with 831 additions and 0 deletions

39
src/App.tsx Normal file
View File

@@ -0,0 +1,39 @@
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'
import { useAuth } from '@/hooks/useAuth'
import Sidebar from '@/components/Sidebar'
import LoginPage from '@/pages/LoginPage'
import DashboardPage from '@/pages/DashboardPage'
import IssuesPage from '@/pages/IssuesPage'
import IssueDetailPage from '@/pages/IssueDetailPage'
import CreateIssuePage from '@/pages/CreateIssuePage'
export default function App() {
const { user, loading, login, logout } = useAuth()
if (loading) return <div className="loading">...</div>
if (!user) {
return (
<BrowserRouter>
<LoginPage onLogin={login} />
</BrowserRouter>
)
}
return (
<BrowserRouter>
<div className="app-layout">
<Sidebar user={user} onLogout={logout} />
<main className="main-content">
<Routes>
<Route path="/" element={<DashboardPage />} />
<Route path="/issues" element={<IssuesPage />} />
<Route path="/issues/new" element={<CreateIssuePage />} />
<Route path="/issues/:id" element={<IssueDetailPage />} />
<Route path="*" element={<Navigate to="/" />} />
</Routes>
</main>
</div>
</BrowserRouter>
)
}