待办:项目待办模型 + /projects/{id}/todos 接口 + 控制台待办页

This commit is contained in:
host committed 2026-10-30 05:11:06 +08:00
1 parent c10fda4e4a
commit b3b3b35042
8 files changed
+962 -23

No files matched your search

+5 -2
View File
@@ -19,6 +19,7 @@ import SkillsSection from "./sections/SkillsSection";
import SkillsToolsPanel from "./sections/SkillsToolsPanel";
import AutomationsSection from "./sections/AutomationsSection";
import TriageSection from "./sections/TriageSection";
import TodosSection from "./sections/TodosSection";
// Redesign (2026-10-30): the old layout is gone — no top tab bar, no
// data-cards row on top of a long stacked page, no detail stack
@@ -35,9 +36,10 @@ import TriageSection from "./sections/TriageSection";
// unmounted with a view. The view is synced to location.hash
// (#view-tasks etc.) so a reload or a shared link lands on the
// same view; unknown hashes fall back to the task workspace.
type ViewId = "tasks" | "projects" | "resources" | "automation" | "admin";
type ViewId = "tasks" | "todos" | "projects" | "resources" | "automation" | "admin";
const VIEWS: Array<[ViewId, string, string]> = [
["tasks", "任务工作台", "任务"],
["todos", "项目待办", "任务"],
["projects", "项目与成员", "管理"],
["resources", "环境与 Workers", "管理"],
["automation", "技能与自动化", "管理"],
@@ -135,7 +137,8 @@ export default function App() {
</div>
) : (
<main className="page">
{view === "projects" ? (<><ProjectsSection /><MembersPanel /></>)
{view === "todos" ? (<><TodosSection /></>)
: view === "projects" ? (<><ProjectsSection /><MembersPanel /></>)
: view === "resources" ? (<><EnvSection /><EnvContextPanel /><WorkersSection /><HealthPanel /></>)
: view === "automation" ? (<><SkillsSection /><SkillsToolsPanel /><AutomationsSection /><TriageSection /></>)
: (<><AdminSection /><ApiKeySection /></>)}