- 抽取 ConsoleShell 共享外壳(Layout/Header/Sider/主题切换/侧边栏折叠) - Sidebar 纯化为接受 menuItems prop 的展示组件 - Admin 管理台:/ 总览 + /projects 项目管理 - Workbench 工作台:/workbench/:projectId 项目作用域 - WorkbenchProjectGate 入口守卫(loading/error/archived/不存在拦截) - ProjectContext 提供当前项目上下文 - 项目管理表格 active 行增加'进入工作台'按钮 - 项目名称 trim 后最多 10 字符(前后端一致) - Workbench 总览页展示项目 Descriptions - Header 区分:管理台显示副标题,工作台显示项目名 + 返回管理台按钮 - 28/28 前端测试通过 - 文档更新:frontend.md ConsoleShell 规范、usage.md 双入口说明
18 lines
595 B
TypeScript
18 lines
595 B
TypeScript
import { createContext, type ReactNode, useContext } from "react";
|
|
|
|
import type { Project } from "../../../shared/api";
|
|
|
|
const ProjectContext = createContext<null | Project>(null);
|
|
|
|
export function ProjectProvider({ children, project }: { children: ReactNode; project: Project }) {
|
|
return <ProjectContext.Provider value={project}>{children}</ProjectContext.Provider>;
|
|
}
|
|
|
|
export function useCurrentProject(): Project {
|
|
const project = useContext(ProjectContext);
|
|
if (!project) {
|
|
throw new Error("useCurrentProject 必须在 Workbench 项目上下文内使用");
|
|
}
|
|
return project;
|
|
}
|