返回 AiToEarn
README.md
根目录 / project / aitoearn-web / src / app / layout / README.md
1 # Layout 布局组件文档
2
3 本目录包含应用 App Shell 与全局布局私有组件。这里的组件默认服务布局、侧边栏、移动导航、全局 Provider 或全局挂载弹窗,不作为普通页面的共享组件目录。
4
5 ## 目录结构
6
7 | 目录/文件 | 描述 |
8 | ---------------------- | ---------------------------------------------------------------------------------------------------- |
9 | `LayoutSidebar/` | 桌面端左侧侧边栏组件。 |
10 | `MobileNav/` | 移动端底部导航组件(BottomBar + 抽屉)。 |
11 | `MainContent/` | 页面主滚动容器,主滚动元素为 `id="main-content"`。 |
12 | `LoginDialog/` | 全局登录弹窗,状态在 `src/store/login-dialog`。 |
13 | `SettingsModal/` | 全局设置弹窗,仅由 layout/Provider 挂载;跨页面控制状态放在 `src/store/settingsModal.ts`。 |
14 | `ConfigManagerDialog/` | 全局配置管理弹窗,仅由 layout/Provider 挂载;跨页面控制状态放在 `src/store/configManagerDialog.ts`。 |
15 | `HomeComponents/` | 首页布局入口组件。 |
16 | `shared/` | 布局内部共享 hooks、工具与展示组件。 |
17 | `Providers.tsx` | 全局 Provider 包装组件。 |
18 | `routerData.tsx` | 路由/导航数据配置(含图标)。 |
19 | `layout.utils.ts` | 布局工具函数。 |
20 | `images/` | 布局相关图片资源。 |
21
22 ## 放置边界
23
24 - 可以放:侧边栏、移动导航、登录弹窗、设置弹窗、通知面板、全局 Provider、布局私有工具。
25 - 可以放:只由 layout 挂载、不被普通页面直接复用的全局弹窗 UI。
26 - 不要放:普通页面之间复用的业务组件;这类组件应放到 `src/components/<业务域>/`。
27 - 不要放:页面私有组件;这类组件应放到对应页面目录的 `components/`。
28 - 普通页面如果需要打开 layout 弹窗,应通过 `src/store/` 中立状态或事件协作,不要 import `src/app/layout` 内部组件。
29
30 ## LayoutSidebar - 桌面端侧边栏
31
32 - Logo 区域。
33 - 主导航菜单使用 `routerData` 数据和图标。
34 - 底部功能区包含频道入口、插件入口、设置、用户头像/登录按钮。
35 - 桌面端(md 及以上)显示,移动端隐藏。
36
37 ## MobileNav - 移动端导航
38
39 - 固定底部栏展示开源版核心路由。
40 - 抽屉式导航菜单和未登录登录按钮。
41 - 移动端(md 以下)显示,桌面端隐藏。
42
43 ## SettingsModal - 全局设置弹窗
44
45 设置弹窗由 `Providers` 挂载,页面和业务组件通过 `useSettingsModalStore` 打开或关闭。
46
47 ```tsx
48 import { useSettingsModalStore } from '@/store/settingsModal'
49 ```
50
51 - UI 实现在 `src/app/layout/SettingsModal/`。
52 - 状态与 `SettingsTab` 类型在 `src/store/settingsModal.ts`,避免页面直接依赖 layout 内部实现。
53 - 开源版只保留 profile / general 设置入口,不恢复闭源订阅、钱包、API Key、工单等设置页。
54
55 ## ConfigManagerDialog - 全局配置管理弹窗
56
57 配置管理弹窗由 `Providers` 挂载,侧边栏和请求错误提示通过 `useConfigManagerDialogStore` 打开。
58
59 ```tsx
60 import { useConfigManagerDialogStore } from '@/store/configManagerDialog'
61 ```
62
63 - UI 实现在 `src/app/layout/ConfigManagerDialog/`。
64 - 弹框内将后端配置对象转换为可编辑表单,不直接暴露 JSON 编辑。
65 - 保存后可重启服务,并通过账号列表接口确认服务恢复。
66
67 ## routerData - 导航数据配置
68
69 定义导航菜单数据,包含图标、路径和可见性控制。
70
71 ```tsx
72 import { routerData, visibleRouterData } from '@/app/layout/routerData'
73 ```
74
75 - `routerData`:完整导航数据。
76 - `visibleRouterData`:开源版可见导航数据。
77 - 新增路由时同步检查 `src/middleware.ts` 是否需要白名单。
78
79 ## Providers - 全局 Provider
80
81 ```tsx
82 import { Providers } from '@/app/layout/Providers'
83 ;<Providers lng={lng}>{children}</Providers>
84 ```
85
86 - 注入平台元数据初始值、登录弹窗、设置弹窗、插件发布浮窗、Toast 等全局能力。
87 - 集成微信/支付宝内置浏览器蒙版 `WechatBrowserOverlay`。
88
88 lines MARKDOWN