diff --git a/frontend/src/components/Layout.tsx b/frontend/src/components/Layout.tsx
new file mode 100644
index 0000000..abb2be5
--- /dev/null
+++ b/frontend/src/components/Layout.tsx
@@ -0,0 +1,64 @@
+import { Link, Outlet } from 'react-router-dom'
+import { useAuthStore } from '../stores/auth'
+import { useThemeStore } from '../stores/theme'
+
+export default function Layout() {
+ const { user, logout } = useAuthStore()
+ const { theme, toggleTheme } = useThemeStore()
+
+ return (
+ <>
+
+
+
+
+ >
+ )
+}
diff --git a/frontend/src/pages/GeneratePage.tsx b/frontend/src/pages/GeneratePage.tsx
index 0fc55ce..868e553 100644
--- a/frontend/src/pages/GeneratePage.tsx
+++ b/frontend/src/pages/GeneratePage.tsx
@@ -1,5 +1,5 @@
import { useEffect } from 'react'
-import { Link, useNavigate, useParams } from 'react-router-dom'
+import { useNavigate, useParams } from 'react-router-dom'
import { useTaskStore } from '../stores/task'
import { useGenerationStore } from '../stores/generation'
import GenerateForm from '../components/GenerateForm'
@@ -46,28 +46,7 @@ export default function GeneratePage() {
return (
- {/* 顶栏 */}
-
-
新建生成
-
- 返回工程
-
-
+
新建生成
{/* 生成表单 */}
{status === 'idle' || status === 'submitting' ? (
diff --git a/frontend/src/pages/ProjectPage.tsx b/frontend/src/pages/ProjectPage.tsx
index 8dbefc8..df40981 100644
--- a/frontend/src/pages/ProjectPage.tsx
+++ b/frontend/src/pages/ProjectPage.tsx
@@ -1,7 +1,6 @@
import { useEffect, useState } from 'react'
import { Link, useParams } from 'react-router-dom'
import { useProjectStore } from '../stores/project'
-import { useAuthStore } from '../stores/auth'
import { getTasks } from '../api/project'
import type { Task } from '../api/types'
import StyleSelector from '../components/StyleSelector'
@@ -15,7 +14,6 @@ const STATUS_LABELS: Record
= {
export default function ProjectPage() {
const { projectId = 'proj-default' } = useParams()
- const { user, logout } = useAuthStore()
const {
name,
style,
@@ -45,25 +43,7 @@ export default function ProjectPage() {
return (
- {/* 顶栏 */}
-
-
{loading ? '加载中...' : name}
-
-
- {user?.username}
-
-
-
-
+
{loading ? '加载中...' : name}
{/* 工程风格 */}
diff --git a/frontend/src/pages/ResultPage.tsx b/frontend/src/pages/ResultPage.tsx
index 4a0bd62..83738b1 100644
--- a/frontend/src/pages/ResultPage.tsx
+++ b/frontend/src/pages/ResultPage.tsx
@@ -42,28 +42,7 @@ export default function ResultPage() {
return (
- {/* 顶栏 */}
-
-
生成结果
-
- 返回工程
-
-
+
生成结果
{/* 任务信息 */}
diff --git a/frontend/src/router/index.tsx b/frontend/src/router/index.tsx
index f29091d..8c6f1c7 100644
--- a/frontend/src/router/index.tsx
+++ b/frontend/src/router/index.tsx
@@ -1,5 +1,6 @@
import { createBrowserRouter, Navigate, Outlet } from 'react-router-dom'
import { useAuthStore } from '../stores/auth'
+import Layout from '../components/Layout'
import LoginPage from '../pages/LoginPage'
import RegisterPage from '../pages/RegisterPage'
import ProjectPage from '../pages/ProjectPage'
@@ -25,20 +26,25 @@ export const router = createBrowserRouter([
element: ,
children: [
{
- path: '/',
- element: ,
- },
- {
- path: '/projects/:projectId',
- element: ,
- },
- {
- path: '/projects/:projectId/generate',
- element: ,
- },
- {
- path: '/projects/:projectId/tasks/:taskId',
- element: ,
+ element: ,
+ children: [
+ {
+ path: '/',
+ element: ,
+ },
+ {
+ path: '/projects/:projectId',
+ element: ,
+ },
+ {
+ path: '/projects/:projectId/generate',
+ element: ,
+ },
+ {
+ path: '/projects/:projectId/tasks/:taskId',
+ element: ,
+ },
+ ],
},
],
},