Skip to content

feat:首页公告卡片区与创建公告表单 - #42

Open
Old-cpu wants to merge 5 commits into
masterfrom
new_page
Open

Old-cpu wants to merge 5 commits into
masterfrom
new_page

Conversation

@Old-cpu

@Old-cpu Old-cpu commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

动机

社团公告目前只能在公告页以纯链接列表展示,首页访客完全看不到社团动态;公告页本身也只是 Markdown 链接堆叠,缺少视觉层次;同时公告条目靠手写 Markdown,新成员容易写错格式。本 PR 一次性解决这三件事。

改动内容

1. 首页公告卡片区

  • 覆写 theme/index.tsx 的 HomeLayout,通过官方 afterFeatures 插槽挂载,仅中文站启用
  • 展示最新 6 条公告:日期 + 来源徽章(微信推文 / Gitee / 外部链接 / 里程碑)+ 标题(两行截断)
  • 有链接的卡片点击新标签页跳转原文;无链接的里程碑渲染为静态卡片(不可点击)
  • 区块头部提供「+ 创建公告」与「查看全部 →」两个入口
  • 滚动进入视口时卡片依次浮入(70ms 交错动画),prefers-reduced-motion 下自动关闭
  • 样式全部使用 Rspress 主题变量(--rp-c-*),浅色 / 深色主题自动适配
file

2. 公告页全量卡片墙(/announcement/)

  • 新增 AnnouncementList 组件:展示 announcements.json 的全部条目,按年份分组(新 → 旧),组头显示年份与条数
  • 每个年份分组滚动进入视口时,卡片依次 blur-fade 浮入(组内 60ms 交错,纯 CSS 实现,无额外依赖)
  • 无链接的里程碑条目同样渲染为静态卡片,与首页卡片样式统一
  • 公告页与创建页的 MDX 入口从 .md 升级为 .mdx,直接挂载组件
file-1

3. 「创建公告」表单页(/announcement/create)

  • 表单字段:原文链接(带格式校验)、卡片标题、发布日期(默认今天、可修改);粘贴链接后自动识别来源(微信 / Gitee / 其他)
  • 右侧实时预览卡片效果与生成的 Markdown 片段
  • 一键复制片段;「去 GitHub 提交」按钮按 Fork 状态自动分流:
    • 填写 GitHub 用户名并「检测我的 Fork」(调用免鉴权 GitHub API,60 次 / 小时 / IP)
    • 已 Fork → 直达本人 Fork 的编辑页
    • 未 Fork / 未检测 → 走上游编辑链接,由 GitHub 自动引导一键创建 Fork
  • 包括仓库管理者在内,所有人统一走 Fork + PR,官方仓库历史保持干净
  • 本地预览(localhost / 127.0.0.1)时提交链接自动指向 new_page 分支,避免 announcements.md 尚未合入 master 导致的 404;正式上线后自动指回 master
file-2

4. 数据自动同步管线

  • 公告源文件由 docs/zh/announcement/index.md 迁移到仓库根目录 announcements.md:位置更醒目,编辑入口固定,贡献者一眼能找到
  • 新增 scripts/gen-announcements.mjs:从 announcements.md 提取标题 / 日期 / 链接 / 来源,生成 docs/components/announcements.json(自动倒序,最新在前)
  • 挂到 predev / prebuild 钩子:维护者只维护公告一个文件,首页卡片与公告页自动同步,无需手工改两处

支持的书写格式:

### [标题:2024.9.27](https://mp.weixin.qq.com/s/…)          <!-- 可跳转公告 -->
### [标题:2024.9.21 - 2024.9.22](https://…)                 <!-- 时间范围 -->
### 标题:2023.6.25                                          <!-- 无链接里程碑,生成静态卡片 -->

数据流

announcements.md ──(predev / prebuild: gen-announcements.mjs)──▶ docs/components/announcements.json
                                                                          │
                        ┌─────────────────────────────────────────────────┴──────────────────┐
                        ▼                                                                    ▼
              首页公告卡片区(最新 6 条)                                       公告页全量卡片墙(按年份分组)
                        ▲
                        │
        创建公告表单(实时预览 → 复制 Markdown 片段 → 自己的 Fork 编辑 → PR 回流到 announcements.md)

提交流程

  1. 在 /announcement/create 填写原文链接与卡片标题,复制生成的 Markdown 片段
  2. 填写 GitHub 用户名 →「检测我的 Fork」→ 直达本人 Fork(未 Fork 时由 GitHub 引导创建)的 announcements.md 编辑页
  3. 把片段粘贴到文件末尾,点击 Commit changes
  4. GitHub 自动跳转 PR 页,确认目标为 TSGU-OSC/website 的 master 后提交

本地验证

npm install
npm run dev   # predev 钩子会自动生成 docs/components/announcements.json
  • 首页:确认 features 下方出现公告卡片区(切到英文站应不显示)
  • /announcement/:确认年份分组与滚动入场动画
  • /announcement/create:填写链接 / 标题,确认实时预览与片段生成

说明与已知限制

  • 公告数据为纯前端静态数据,站点无后端,所有新增公告都要经 PR 回流
  • Fork 检测使用免鉴权 GitHub API(60 次 / 小时 / IP),限流或断网时仅提示「检测失败」,不影响正常提交
  • 请勿直接修改 docs/components/announcements.json:它由脚本生成,下次 predev / prebuild 会被覆盖,请改 announcements.md
  • 首页卡片区仅中文站挂载(公告数据为中文),英文站如需要可后续补充
  • 首页仅取最新 6 条,完整列表见公告页

变更规模

13 个文件,+1504 / -3,5 个 commit。

- 新增 scripts/gen-announcements.mjs:从公告页 md 自动提取数据生成 JSON,predev/prebuild 钩子自动同步
- 新增 AnnouncementCards 组件:首页展示最新 6 条公告卡片,滚动交错浮入动画,点击跳转原文
- theme/index.tsx 覆写 HomeLayout,经 afterFeatures 插槽挂载(仅中文站)
- 新增 /announcement/create 表单页:填写链接+标题实时预览卡片,生成 Markdown 片段,一键复制并跳转 GitHub 编辑页提交 PR
- 首页公告区新增「创建公告」入口按钮
- 全部样式使用 Rspress 主题变量,深浅色自适应,prefers-reduced-motion 下关闭动画
@Old-cpu
Old-cpu requested a review from CapableCCat September 30, 2026 14:59
- 公告数据独立为仓库根目录 announcements.md(从 docs/zh/announcement/index.md 迁出)
- 公告页改为全量卡片墙:39 条全展示、按年份分组、blur-fade 滚动入场动画(纯 CSS,无新依赖)
- 提取脚本支持无链接里程碑条目,渲染为不可点击的静态卡片
- 创建公告表单改走 Fork 流程:主按钮变为「Fork 仓库并编辑」,步骤说明更新;社团成员保留直链编辑入口
- GitHub 编辑链接指向新的 announcements.md
- 撤销「Fork 仓库并编辑」按钮:已 Fork 的提交者点 /fork 会碰壁
- 改为编辑直链:未 Fork 自动引导创建,已 Fork 自动在自己的 Fork 中编辑,仓库成员提示新建分支
- 步骤文案按三种身份说明,成员提示并入步骤
announcements.md 随本 PR 才合入 master,合并前本地预览点击
「去 GitHub 提交」会因 master 上无此文件而 404。
现检测 localhost 自动切换到 new_page 分支链接,并显示提示;
生产环境(非 localhost)仍指向 master,行为不变。
- 新增 GitHub 用户名字段与「检测我的 Fork」按钮:
  调用免鉴权 API GET /repos/{user}/website 判断 Fork 是否存在
- 已 Fork(含仓库管理者)→ 提交按钮直达本人 Fork 编辑页;
  未 Fork → 上游编辑链接,GitHub 自动引导创建
- 提示 Sync fork 同步要求;步骤与说明文案同步更新

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant