> ## Documentation Index
> Fetch the complete documentation index at: https://docs.2024921.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# 留言板

> 导航直达的留言 / 优化方案双分区留言板，复用评论安全管道

## 概述

留言板是前台导航直达的页面（`/guestbook`），分为两个分区：

| 分区      | 合成 post ID | 用途            |
| ------- | ---------- | ------------- |
| 💬 留言   | `gb-note`  | 访客留言、闲聊问候     |
| 💡 优化方案 | `gb-idea`  | 对博客的功能建议与优化方案 |

### 实现原理：零新接口

留言板**没有独立的后端接口和数据表**——它通过两个合成文章 ID 复用整套评论管道：

```
POST /api/posts/gb-note/comments   → 提交留言
POST /api/posts/gb-idea/comments   → 提交优化方案
GET  /api/posts/gb-note/comments   → 拉取留言列表
```

所有安全机制（限流、Origin 校验、控制字符清洗、长度上限、重复拦截、审核模式）自动生效，零额外维护成本。

<Info>
  合成 ID 以 `gb-` 为前缀，不会与真实文章冲突；管理后台「全局评论列表」中 `post_id` 为 `gb-note` / `gb-idea` 的评论即留言板内容，可正常审核 / 删除。
</Info>

## 接口

与评论接口完全一致，仅 `:id` 换成合成 ID：

```http theme={null}
GET  /api/posts/:id/comments       # :id = gb-note | gb-idea
POST /api/posts/:id/comments
```

**响应：** 列表按插入顺序返回（最旧在前），前端倒序展示（最新在最上）。

错误码、安全机制、长度上限与[评论接口](/comments)完全相同——包括**重复发送拦截**（同分区同昵称同内容 → `409`）。

## 前端行为

| 行为   | 说明                                                        |
| ---- | --------------------------------------------------------- |
| 分区切换 | Tab 切换「留言 / 优化方案」，各自独立列表与计数                               |
| 提交反馈 | 成功清空输入框并显示 ✓；失败**保留已输入内容**，状态行显示后端透传的具体原因（重复 / 频控 / 来源校验） |
| 无下划线 | 列表条目悬停 / 点击均无下划线，与全站样式统一                                  |
| 排序   | 最新留言显示在最上方                                                |
| i18n | 全部界面文案走 5 语言语言包（`guestbook.*` 键）                          |

## 局限

* 留言板内容不在 RSS / Sitemap 中（不属于真实文章）
* 分区计数上限与文章评论一致（每分区 300 条）
