4.7 KiB
4.7 KiB
App.tsx 路由与页面结构重构需求(首页与业务页分离)
一、需求背景
当前 frontend-web/src/App.tsx 同时承载了:
- 登录/首页相关路由(如
/login、/landing) - 工作台业务相关路由(如
/workspace/chats、/workspace/agents、/workspace/scheduled/*) - 业务页所需布局与运行时包装(
WorkspaceLayout、ChatRuntime)
这会导致 App.tsx 过重,职责不够单一,不利于后续维护和扩展。
二、目标(你提出的核心诉求)
你希望:
- 除了登录与首页入口内容外,将
App.tsx中其余业务页面路由整体迁移到pages下一个新组件中。 - 再创建一个“承接导航/入口”的页面(或路由容器),用于放置这些导航逻辑。
App.tsx最终只保留顶层路由分发和基础 Provider,变得更薄。
你提到“
App.tsx 74-75 login”,可理解为:保留登录/首页相关入口,其他工作台内容抽离。
三、重构范围
1)保留在 App.tsx 的内容
- 全局 Provider:
HashRouter、AppProviders - 登录/首页路由:
//login/login/:username/landing
- 404 路由(可留在
App.tsx或交给新路由容器统一处理,二选一)
2)迁移出 App.tsx 的内容
将以下与工作台有关的路由从 App.tsx 抽离:
/workspace(重定向)/workspace/chats/workspace/chats/:thread_id/workspace/agents/workspace/agents/new/workspace/agents/:agent_id/chats(重定向)/workspace/agents/:agent_id/chats/:thread_id/workspace/scheduled/workspace/scheduled/tasks/workspace/scheduled/runs/:run_id
以及配套的包装组件职责:
WorkspaceLayoutChatRuntime
四、建议的新结构(方案)
方案 A(推荐):新增“业务路由容器组件”
在 pages 下新增一个路由容器组件,例如:
src/pages/WorkspaceRoutes.tsx(或src/pages/AppWorkspaceRoutes.tsx)
职责:
- 专门维护
/workspace/*相关路由 - 内部统一使用
WorkspaceLayout与ChatRuntime - 输出一个可被
App.tsx挂载的路由节点
同时在 App.tsx 里只保留:
- 登录/首页/404
- 一个
Route path="/workspace/*" element={<WorkspaceRoutes />} />
五、“再建立一个页面放置导航”的落地解释
你说的“建立一个页面放置这些导航”,可以有两种理解:
-
路由容器页(推荐):
- 不强调视觉 UI,重点是集中管理导航与路由跳转规则。
- 即上面的
WorkspaceRoutes.tsx。
-
可见的导航页(可选):
- 例如新建
WorkspaceHomePage.tsx,展示聊天/Agents/定时任务入口按钮。 - 路由上把
/workspace指向该页,而不是直接重定向到/workspace/chats/new。
- 例如新建
当前从你的描述看,优先建议第 1 种(先做结构整理),之后若有产品需求再做第 2 种可见导航页。
六、实施步骤(开发任务拆解)
- 新建
WorkspaceRoutes组件(pages目录下)。 - 把所有
/workspace/*路由从App.tsx搬入该组件。 - 把
WorkspaceLayout与ChatRuntime移入该组件(或抽到共享 layout/runtime 文件)。 - 在
App.tsx中保留登录/首页路由,并挂载/workspace/*到新组件。 - 校验以下访问路径行为一致:
/workspace重定向- chats/agents/scheduled 各页面可正常进入
- 动态参数路由(
thread_id、agent_id、run_id)正常 - 404 不受影响
- 运行前端并做手工回归。
七、验收标准
App.tsx明显瘦身,主要负责顶层入口路由。/workspace/*全部由新建组件统一管理。- 功能行为与改造前一致(或符合新定义)。
- 代码可读性提升:登录入口与业务入口职责分离。
八、注意事项
- 当前项目使用
HashRouter,路由写法需保持兼容。 Navigate重定向逻辑要完整迁移,避免出现死循环或空白页。WorkspaceLayout与ChatRuntime的包裹层级不能错,否则可能影响侧边栏、输入区、子任务/Artifacts 状态。- 若后续再加模块(例如
/workspace/settings),优先在WorkspaceRoutes中扩展。
九、建议的命名(可直接采用)
- 新增组件文件:
src/pages/WorkspaceRoutes.tsx - (可选)可见导航页:
src/pages/WorkspaceHomePage.tsx
十、后续可选优化
- 将
WorkspaceLayout抽到src/layouts/WorkspaceLayout.tsx。 - 将
ChatRuntime抽到src/runtime/ChatRuntime.tsx。 - 把路由常量集中到
src/core/router/paths.ts,减少硬编码路径。