调用 RecheckReciprocal,开启检测且有回链页时可复检。 Co-authored-by: Cursor <cursoragent@cursor.com>
9.7 KiB
06 · 页面、交互与信息架构
读者:实现前台 / 后台 UI 的 AI
前置:02-features.md
源码:[frontend/src/App.tsx]((仅 main)frontend/src/App.tsx)、[frontend/src/pages/]((仅 main)frontend/src/pages/)、[frontend/src/components/]((仅 main)frontend/src/components/)、[frontend/src/layouts/]((仅 main)frontend/src/layouts/)
视觉可重设;信息架构与关键操作流应对齐。新站建议 SSR 直出同等信息,而不是先空壳再 fetch。
1. 路由表
本分支(
rebuild/gitea-ssr):浏览器 UI 走routers/web模板 + 表单,不依赖论坛 JSON/api。下表「SSR」列表示是否已迁。
1.1 认证
| 路径 | 说明 | SSR |
|---|---|---|
/login |
登录 / 登出 | 已迁 |
/register |
注册(图形验证码;邮件就绪时要邮箱验证码) | 已迁 |
/forgot-password |
忘记密码 | 已迁 |
1.2 前台
| 路径 | 说明 | SSR |
|---|---|---|
/ |
Feed | 已迁 |
/board/:id |
板块 Feed | 已迁 |
/boards |
板块索引 | 已迁 |
/post/:id |
帖详情 + 评论(回复/赞/私密)/赞/藏 | 已迁 |
/compose |
发帖(normal / poll;textarea + 图片 + 门控插入) | 已迁 |
/post/:id/edit |
编辑帖 | 已迁 |
/profile |
个人中心(资料/密码/头像/积分钱包) | 已迁 |
/user/:id |
公开用户页 | 已迁 |
/favorites |
收藏 | 已迁 |
/projects |
Gitea 码桶 | 后置 |
/links |
友链 | 已迁 |
/messages |
私信/通知会话列表 | 已迁 |
/messages/with/:peerId |
会话详情(peer=0 系统通知) | 已迁 |
/page/:slug |
站点单页 | 已迁 |
* |
404 / pending | 已迁 |
1.3 后台(Admin SSR,表单 + CSRF,不挂管理 JSON /api)
| 路径 | 说明 | SSR |
|---|---|---|
/admin |
重定向 dashboard | 已迁 |
/admin/dashboard |
概览计数 | 已迁 |
/admin/boards |
板块 CRUD | 已迁 |
/admin/moderation |
待审帖/评 通过/拒绝 | 已迁 |
/admin/settings |
品牌 + 基础限流 + 敏感词 + SMTP | 已迁 |
/admin/friend-links |
品牌友链、申请审核、入口开关 | 已迁 |
/admin/pages |
站点单页 CRUD / 发布 | 已迁 |
/admin/reports |
举报处理 | 已迁 |
/admin/trash |
帖回收站 | 已迁 |
/admin/login |
重定向前台登录 | 已迁 |
未迁(原 SPA):users / badges / media / 完整 Limits 等。
2. 三栏布局(桌面)
+------------------+---------------------------+------------------+
| Sidebar | Feed / 主内容 | RightPanel |
| - 全部/收藏/码桶 | - FeedHeader / SortBar | - 签到条(登录) |
| - 板块列表 | - VirtualPostList | - 热门帖 |
| - 站点页/友链 | - 或 PostDetail 等 | - aside_widgets |
| - 管理入口 | | 标签云/评论/ |
| | | 用户/友链 |
+------------------+---------------------------+------------------+
| Footer: ICP / 友链入口 / 站点页链接 |
+------------------------------------------------------------------+
2.1 左栏 Sidebar
- 全部帖子、我的收藏(登录)、开源码桶
- 板块列表(图标 + 色点 + 名称);空站引导「创建第一个板块」
- 站点区:友链入口(
nav_show_friend_links)、show_in_nav的站点页 - 管理员:管理后台入口
2.2 中栏
Feed:排序条(最新发帖 / 最新回复 / 热门)+ 搜索面板(关键词、标签、作者、仅标题;已迁 SSR GET)+ 列表项(标题、作者、板块徽章、回复数、置顶/精华)。虚拟滚动 / feed_list_style 未迁。
帖子详情:标题区操作(赞、藏、举报、编辑、管理操作)→ 待审/被拒横幅(作者/管理员)→ 特殊组件(投票卡 / 悬赏条 / 抽奖卡)→ 正文 PostContent(门控块 UI)→ 文章目录 → 作者卡片 → 修订入口 → 评论线程 + 评论框。
2.3 右栏 RightPanel
- 登录用户:
AsideCheckInStrip(签到 + 抽奖 + 积分入口)— 已迁 SSR 右栏;流水/详情仍在/profile#wallet - 热门帖 — 已迁 SSR(固定块)
- 可配置 widgets:
tag_cloud/recent_comments/recent_users/friend_links(顺序与开关来自aside_widgets)— 已迁 SSR;Admin/admin/settings侧栏组件开关与排序;友链页 aside 勾选共用同一 JSON - 桌面三列;≤900px 隐藏右栏
2.4 移动端
- 侧栏抽屉化;顶栏搜索/发帖/登录触手可及
PullToRefresh下拉刷新- 触控友好列表行高
2.5 主题
- 浅色 / 暗色;
localStorage记忆;可跟随系统
3. 发帖页 Compose
组件:ComposeHeader、ComposeContextBar(帖类型)、ComposeSpecialFields、ComposeDocument / ArticleEditor。
3.1 帖类型切换
| 类型 | 附加 UI |
|---|---|
| 讨论 | 无 |
| 问答 | 无额外字段(解决状态在详情) |
| 投票 | 选项列表、多选开关、最多可选、截止时间或无截止 |
| 悬赏 | 积分输入(显示余额) |
| 抽奖 | 中奖人数 1–20 |
3.2 编辑器能力(应对齐)
源:[ArticleEditor.tsx]((仅 main)frontend/src/components/ArticleEditor.tsx) 与 editor/ 扩展
- 标题 h2–h6(无 h1,避免与帖标题冲突)
- 粗体/斜体/删除线等基础标记
- 链接对话框
- 代码块(语言、选项对话框)
- 表格插入/编辑
- 图片上传 + 图片组布局 + 浮动/清除浮动
- 表情 / 贴纸选择器(多套:bilibili/douyin/tieba/weibo 等静态资源)
- 登录可见 / 回复可见 / 积分可见(价格 1–9999)节点
- 富文本 ↔ Markdown 双模(门控块有 markdown 约定,见 [
utils/markdownContent.ts]((仅 main)frontend/src/utils/markdownContent.ts)) - Tab 缩进
未保存离开:UnsavedChangesDialog。
4. 帖子详情关键交互
| 模块 | 行为 |
|---|---|
| 门控块 | 锁定壳 UI(长度/价格/引导);POST /post/:id/unlock 返回 inner HTML 后替换 |
| 投票卡 | 选选项提交;显示百分比;作者可结束 — SSR `/post/:id/poll/vote |
| 悬赏条 | 显示积分与状态;采纳按钮在他人评论上;退款按钮按规则禁用并提示 |
| 抽奖卡 | 显示参与人数;开奖;中奖名单 |
| 评论 | 楼层列表、reply_to 引用、私密开关、点赞、举报、编辑(时限)、删除、回复/@ 通知 — SSR;嵌套树 UI 未做 |
| 修订 | 列表 + 单条快照 — SSR /post/:id/revisions(作者/管理员;无 diff) |
| 图片 | Lightbox 查看 |
5. 消息页
- 左:会话列表(系统会话单独)— SSR
/messages;快捷链到回复/提及筛选 - 右:消息时间线;发送框 — SSR
/messages/with/:peerId - 顶:未读角标(全局导航也可显示)
- 通知筛选(kind)— 系统会话
?kind=reply|mention|…
6. 个人中心 / 公开主页
- 资料编辑、密码、头像直传(本迭代无裁剪器)— SSR
/profile - 公开页:签名、等级/积分只读、统计、最近帖 — SSR
/user/:id(无邮箱) - 收藏列表 — SSR
/favorites - 积分钱包面板(余额、近 N 条流水、签到/抽奖表单 PRG)— SSR
/profile;导航展示当前积分 - 徽章展示:未迁
7. 友链页
- 展示品牌友链 — SSR
/links - 登录申请表单:名称、URL、Logo(地址或上传)、是否上首页、回链页 —
POST /links/apply - 我的申请状态列表;待审可取消
- Admin:
/admin/friend-links品牌增删、申请通过/拒绝、nav/footer/回链检测开关
8. 管理后台操作流(按页)
| 页 | 关键操作 |
|---|---|
| Dashboard | 看计数与待办;点进对应列表 |
| Boards | 拖拽或数字排序;图标/色板选择;增删改 |
| Pages | 列表发布开关;编辑正文(HTML textarea);nav/footer 勾选 — SSR /admin/pages |
| Links | 品牌友链增删;申请通过/拒绝/回链复检;回链检测开关;nav/footer/aside 开关 — SSR /admin/friend-links(aside 与 Settings 侧栏组件共用 aside_widgets) |
| Posts | 审核通过/拒绝 — SSR /admin/moderation;置顶/版顶/精华/锁编/锁评/软删 — 帖详情 Admin 条;回收站恢复/清除 — SSR /admin/trash |
| Comments | 审核 — SSR /admin/moderation;修订查看未迁 |
| Reports | 处理动作:dismiss / resolve / reject_post / reject_comment — SSR /admin/reports |
| Users | 搜索;禁言;认证;设等级;调积分;授徽章 |
| Badges | 定义自动/限定徽章 |
| Media | 分类浏览;批量删 |
| Settings | Tab:论坛限制、侧栏组件、伪静态、邮件、OIDC+客户端、Gitea、存储、品牌、敏感词、备份 — SSR /admin/settings 已迁品牌/限流/侧栏/敏感词/邮件/SQLite 备份(OIDC/Gitea/存储/伪静态未迁) |
9. 全局 UX 细节
- Toast(sonner)反馈成功/失败
- 路由级 ErrorBoundary / AppRouteError
- 懒加载页面 + retry(
lazyWithRetry) - 新标签打开帖子 / 正文外链:受
open_posts_in_new_tab、open_content_links_in_new_tab控制 - 文档标题:
站点名 - 标语;详情页应换成帖标题(SSR 时首屏即正确)
10. SSR 重构提示(交互层)
当前 SPA 在客户端挂载后才拉 /api/posts/:id。新站应:
- 服务端渲染列表项与帖文 HTML(已按门控红action)
- 水合后接上赞/评/解锁等交互
- 管理后台仍可为 CSR,但前台公开页优先 SSR
勿再维护「爬虫一套 HTML、用户一套空壳」双轨,除非过渡期兼容。