# 需求:Admin_Template 缺站内信发送端点（只有读接口，POST /api/messages/send 404）

状态: proposed
归属: 公司运营
来源: 登记缺口（盘点异常）
日期: 2026-11-09
建议: 做,模板是公司后台标准件，站内信是开通/回收通知的必经通道，缺口会顺着生成器污染所有下游实例

## 现状

2026-11-09 本机起 sqlite 实例（Go 后端 3122 / 前端 3121，只绑 127.0.0.1；**本机临时实例、未部署线上**，未装 docker、未碰 NAS、未碰线上）实测，正本 `docs/归档/2026-11-08-AdminTemplate-实例/checkpoint.md`（阶段 0~4 命令与输出原文）：

- 登录 ✅ `POST /api/auth/login` → 200、`code=0`、`expiresIn=86400`、token 253 字、`perms=22`
- 菜单 ✅ 200，一级菜单 3 个（数据概览/系统管理/会员管理）
- 站内信列表 ✅ `GET /api/messages/my` → 200 `{"list":[],"total":0}`
- 站内信发送 ❌ `POST /api/messages/send` → 404 page not found
- 发版 ✅ 前端构建 55.60s、5276 modules、产物 124 文件，入口 `jse/index-index-XsWP6h5w.js`

读码核对：模板 backend 站内信只有两个读接口（我的列表、未读计数），没有发送端点，也没有对应的路由与 service 写入路径；前端站内信页也只有列表，没有发送入口。

后果：
- TD-028 的「站内信」段按原判据（发送并读回）在本模板上走不通，只能落到「列表可读」；
- 下游实例（onboard-hub 开通/回收、会员到期提醒等）需要等运营通知时无接口可发——生成器复制这份模板，缺口同步复制到每一个下游实例。

## 方案

1. 模板 backend 补 `POST /api/messages/send`：入参 `toUserId`（或全体广播标志）、`title`、`body`；落库到站内信表，状态置未读，返回新建消息 `id`。
2. 补路由与鉴权：必须登录态（无 token 401）；做越权校验——非管理员只能发给自己或有权限的对象，越权对象返回 403。
3. 前端站内信页补发送入口（收件人/标题/正文，提交后回列表可见）。
4. 改动范围＝模板仓 `backend` + 前端站内信页；**不动生成器外发链**，也不改生成器现有模板变量。

## 验收标准

- [ ] 本机实例 `POST /api/messages/send` 返回 200 且响应含非空 id
- [ ] 发送后 `GET /api/messages/my` 能读到该条（total 比发前 +1，标题一致）
- [ ] 无 token POST 返回 401；越权发给无权对象返回 403
- [ ] 前端有可用的发送入口（e2e 或截图 + 一句操作路径）

## 关联

- `ops/debt.yaml` TD-028（Admin_Template 整链复验）：该债的判据已按模板真实语义修订——站内信段只要求列表可读，本缺口不吞，由本票承接。
