diff --git a/src/frontend/src/App.tsx b/src/frontend/src/App.tsx new file mode 100644 index 0000000..e739ea1 --- /dev/null +++ b/src/frontend/src/App.tsx @@ -0,0 +1,94 @@ +// App 主入口 + +import React, { useState, useCallback } from 'react'; +import { TaskBoard } from './pages/TaskBoard'; +import { Monitor } from './pages/Monitor'; +import { Config } from './pages/Config'; +import { Briefing } from './pages/Briefing'; +import { TaskModal } from './components/TaskModal'; +import { useProjects } from './hooks/useApi'; +import type { Task } from './types'; + +type Page = 'tasks' | 'monitor' | 'config' | 'briefing'; + +export default function App() { + const [page, setPage] = useState('tasks'); + const [selectedProject, setSelectedProject] = useState(null); + const [selectedTask, setSelectedTask] = useState(null); + const { projects } = useProjects(); + + const handleSelectTask = useCallback((task: Task) => { + setSelectedTask(task); + }, []); + + return ( +
+ {/* Sidebar */} + + + {/* Main content */} +
+ {page === 'tasks' && ( + + )} + {page === 'monitor' && } + {page === 'briefing' && } + {page === 'config' && } +
+ + {/* Task detail modal */} + setSelectedTask(null)} /> +
+ ); +} diff --git a/src/frontend/src/main.tsx b/src/frontend/src/main.tsx new file mode 100644 index 0000000..dc3f4b5 --- /dev/null +++ b/src/frontend/src/main.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; +import './styles/global.css'; + +ReactDOM.createRoot(document.getElementById('root')!).render( + + + +);