## 现象与猜测
- 运营端“称号管理”页面为空，极可能是尚未调用初始化接口或请求被鉴权拦截。

## 执行步骤
- 后端健康检查
  - 确认服务已启动且数据库连接正常（启动日志不报错）。
- 管理员登录获取 Token
  - 账号：`admin`；密码：`chat2025` → 先做 MD5：`39f841df6f9a4768330b00d3ab9f1b4d`
  - `POST /api/admin/login`，记录返回 `token`
- 初始化 6 个称号与效果
  - `POST /api/admin/system_titles/seed_default`
  - 期望返回：`{ created: N, exists: M, ids: [...] }`（总数 6）
- 菜单补齐（后端动态菜单模式）
  - `POST /api/menu/ensure_titles`
  - 期望返回：`{ ensured: true, parent_id: <Operations>, menu_id: <Titles> }`
- 验证后端数据
  - `GET /api/admin/system_titles?page=1&page_size=20`，请求头加 `Authorization: Bearer <token>`
  - 期望：`list` 含 6 条数据，`total=6`
- 前端验证
  - 进入“运营管理 → 称号管理”，若仍为空：
    - 打开浏览器网络面板检查 `admin/system_titles` 响应码与返回体：401 表示未登录；200 且 `list=[]` 表示数据未初始化或失败（重试初始化）。

## 注意点
- 初始化接口在非认证组，便于快速拉起；列表接口需要登录。
- 之前的路由重复注册已修复（避免 Gin panic）。
- 若你希望把占位参数（券模板 `template_id`、奖品 `target_prize_ids`）替换为真实运营配置，我将更新 `params_json` 并再次初始化。

## 验收标准
- 初始化后，`GET /api/admin/system_titles` 返回 6 条记录；前端列表显示 6 条。

确认后我将按照以上步骤执行初始化与验证，确保页面数据正常展示。