同步包路径与路由,去掉 SPA 构建步骤,对齐 Gitea 式 LICENSE,并更新规格/规则与占位 SSR。 Co-authored-by: Cursor <cursoragent@cursor.com>
7.0 KiB
7.0 KiB
02 · 功能清单(验收级)
读者:实现与验收
前置:01-product.md
交叉:05-business-rules.md、06-pages-ux.md
源码对照:[frontend/src/App.tsx]((仅 main)frontend/src/App.tsx)、router/router.go、README.md
用复选框做验收;重构完成时应全部可勾选(或书面声明砍掉的功能)。
A. 浏览与布局
- 三栏布局:左导航 / 中 Feed / 右栏小组件
- 浅色 / 暗色主题;跟随系统偏好并本地记忆
- 响应式:平板/手机收起侧栏
- 长列表虚拟滚动或等价流畅方案
- Feed 排序:
latest(最新发帖)/reply(最新回复)/hot(热门) - 板块筛选:全部 + 单板块
- 列表样式可配:
title|excerpt|thumbnail - 搜索:关键词、标签、作者、仅标题(
title_only) - 右栏:热门帖、标签云、最新评论、最新用户、友链(可开关排序)
- 登录用户右栏/侧边:签到与抽奖入口
- 下拉刷新(移动端)
- 可选伪静态:
/post/123.html等形式(后缀后台可配) - 404 页
B. 认证与个人中心
- 注册(用户名、密码、昵称、邮箱;可选邮箱验证码)
- 图形验证码接口(注册流程)
- 登录 / 登出(会话 Cookie)
- 忘记密码:邮箱验证码 + 重置
- 注册配置接口:是否首用户、邮件是否就绪、是否开放注册
- 首个用户自动成为管理员
- 个人中心:改昵称、签名、密码、上传头像(可裁剪)
- 个人活动统计:帖数、评数、收藏数、获赞
- 公开用户主页
/user/:id(无邮箱) - 禁言用户无法使用需登录写接口
C. 板块
- 列出板块(含帖数等展示字段)
- 管理员:创建 / 改 / 删板块
- 板块名称、描述、图标、色板索引、排序
- 默认板块保障(空站可引导创建)
D. 帖子(通用)
- 发帖:选板块、标题、标签、正文
- 正文图片上传
- TipTap 富文本能力(见 06-pages-ux.md 编辑器节)
- Markdown 编辑模式(与富文本互转/双模)
- 编辑帖子(时限、锁帖约束)
- 删除帖子 → 软删进回收站
- 修订历史列表与单条详情(可做 diff)
- 点赞切换;收藏切换;收藏列表页
- 浏览量(可
skip_view=1跳过计数) - 举报帖子
- 内容审核状态展示(作者可见待审/被拒)
D.1 帖子类型
normal普通讨论question问答:可标记已解决 / 未解决poll投票:2–10 选项;单选/多选;可选截止时间;投票;作者可结束bounty悬赏:发帖托管积分;采纳评论发奖;可退款(规则见 05)lottery抽奖帖:设定中奖人数;从评论参与者开奖
D.2 运营标记(管理员)
- 全局置顶 / 取消
- 版内置顶 / 取消(仅板块列表抬升)
- 精华 / 取消
- 禁止编辑(edit lock)
- 禁止评论 / 结贴(comments lock)
- 审核通过 / 拒绝(拒绝可通知作者)
- 回收站:恢复 / 彻底删除
E. 内容门控
- 编辑器可插入「登录可见」块
- 编辑器可插入「回复可见」块
- 编辑器可插入「积分可见」块(可设价格)
- 未登录:遮盖 members-only 与 reply-only 正文,保留长度提示
- 已登录未回复:遮盖 reply-only(作者与管理员始终可见)
- 积分块:未解锁遮盖;
POST .../unlock扣积分并返回 inner HTML - 搜索 / SEO 出口对门控内容做红action,不泄露正文
F. 评论
- 按帖拉取评论列表(楼层、嵌套父级、引用目标)
- 发表评论(登录);支持
reply_to、私密评论 - 游客评论(公开接口可写,字段 guest_*)
- 编辑评论(时限);删除评论
- 评论点赞
- 评论举报
- @ 提及 → 通知
- 回复提醒(站内信 + 可选邮件)
- 审核中 / 被拒评论可见性规则
- 管理员:通过 / 拒绝 / 回收站 / 查看评论修订
G. 私信与通知
- 会话列表(含系统会话 peer=0)
- 会话消息(分页 / before 游标)
- 发送私信
- 未读数(可分私信 / 通知)
- 标记会话已读 / 通知已读 / 全部已读
- 系统通知种类:
system/reject/report_result/reply/mention/moderation等
H. 积分、签到、抽奖、徽章、等级
- 积分流水查询
- 每日签到:基础 5,连签每日 +1,封顶 15
- 每日抽奖:奖池加权(0/2/5/10/20),成本 0
- 积分解锁分成:读者付全额,作者约 70%
- 短龄同 IP 互刷拒绝分成
- Exp → 等级 Lv1–10
- 自动徽章(注册天数 / 获赞 / 创作分成)
- 限定徽章:管理员定义与授予/撤销
- 管理员调整积分、设定等级
I. 友链
- 前台友链页;导航/页脚入口可配
- 用户申请(名称、URL、Logo、是否上首页、回链页)
- Logo 上传
- 我的申请列表;修改待审申请;取消
- 管理员审核:通过 / 拒绝 / 重新检测回链
- 管理员维护品牌友链列表(设置里 JSON)
J. 站点单页
- 公开:
/page/:slug列表入口(nav/footer) - 管理员 CRUD;发布开关;排序;nav/footer 展示开关
K. Gitea 码桶
- 后台开关、Base URL、Token、同步间隔
- 手动同步 + 后台定时同步
- 前台
/projects列表与搜索
L. OIDC Provider
- Discovery、JWKS、Authorize、Token、UserInfo、Logout
- 多 OAuth 客户端 CRUD;密钥哈希存储;PKCE 字段支持
- groups claim 映射 admin/user 组
M. 媒体与存储
- 本地 uploads 或 S3 兼容存储(可热切换配置)
- 头像 / 帖图 / 站点品牌资源分类
- 图片展示可选 WebP 转换(
/media/thumb/...) - 管理后台媒体列表与删除
- 媒体索引表同步
N. 管理后台其它
- 仪表盘:计数 + 待审帖/评/举报/友链 + 最近帖
- 敏感词文件读写
- 论坛限流与字数等 Limits
- SMTP 配置与测试信
- 站点品牌:名称、标语、简介、keywords、Logo、Favicon、OG 图、ICP
- SQLite 一键备份与下载
O. 基础设施
GET /healthrobots.txt/sitemap.xml- 静态上传文件可达
- 限流:发帖、评论、注册、登录、举报、私信、友链等
明确不在当前规格内(计划中可后做)
摘自 ROADMAP.md,不是现网必交验收项:
- 通知动态 UX 大幅优化
- 帖子搜索增强(组合筛选更强)
若新站一并实现,可作为加分项,不阻塞「功能对等」验收。