## 问题现象
- 前端“运营→称号管理”页面列表为空。
- 可能原因：后端未创建称号数据、未登录导致接口被拦截、数据库未连接、或菜单未展示导致误判。

## 状态检查
- 后端运行：确认服务已启动并连接数据库（`go run ./main.go -env dev` 日志无报错）。
- 登录状态：确认在管理端已登录并持有有效 Token（接口返回 `token`，在请求头 `Authorization: Bearer <token>`）。
- 路由与接口：
  - 列表接口：`GET /api/admin/system_titles`（需要登录）。
  - 初始化接口：`POST /api/admin/system_titles/seed_default`（非认证组，便于快速初始化）。
  - 菜单补齐：`POST /api/menu/ensure_titles`（非认证组，确保“称号管理”菜单出现）。

## 初始化步骤
1. 管理员登录（你提供的账号密码）
   - 账号：`admin`
   - 密码：`chat2025`（需 MD5 后传输：`39f841df6f9a4768330b00d3ab9f1b4d`）
   - `curl -s -X POST http://localhost:9991/api/admin/login -H 'Content-Type: application/json' -d '{"username":"admin","password":"39f841df6f9a4768330b00d3ab9f1b4d"}'`
   - 记录返回 `token`
2. 初始化 6 个称号及效果
   - `curl -s -X POST http://localhost:9991/api/admin/system_titles/seed_default`
   - 预期返回：`{ created: N, exists: M, ids: [...] }`（`created+exists=6`）
3. 菜单补齐（后端动态菜单模式）
   - `curl -s -X POST http://localhost:9991/api/menu/ensure_titles`
   - 预期返回：`{ ensured: true, parent_id: <Operations>, menu_id: <Titles> }`
4. 验证列表
   - `curl -s 'http://localhost:9991/api/admin/system_titles?page=1&page_size=20' -H 'Authorization: Bearer <token>'`
   - 预期返回：`{ list: [...], total: 6, page: 1, page_size: 20 }`

## 前端验证
- 在管理端左侧菜单进入“运营管理 → 称号管理”，页面应显示 6 条数据。
- 若仍为空：
  - 打开浏览器“网络”面板，检查 `admin/system_titles` 响应码与返回体，是否 401（未登录）或 200 但 `list=[]`。
  - 若 `list=[]`，说明初始化未成功或数据库无数据（重复调用步骤2）。

## 说明与已修复事项
- 之前的路由重复注册导致 Gin panic，已修复为仅在“非认证组”保留 `POST /api/admin/system_titles/seed_default`；构建通过。
- 初始化的 6 个称号及效果已内置参数，后续可按你的运营实际替换 `template_id` 与 `target_prize_ids` 等占位参数。

## 后续扩展
- 如需完善“称号模板与效果”的 CRUD 管理页，我将新增后端 CRUD 与前端编辑表单，支持运营在页面上直接增删改查。