## 问题原因
- 数据库报错 `Invalid JSON text: "The document is empty."`，说明往 `system_titles.obtain_rules_json` 写入了空字符串 `""`。
- 在 MySQL JSON 列中，空字符串不是合法 JSON；需使用 `"{}"` 或 `"[]"` 等合法文本。
- 代码位置：`internal/api/admin/titles_seed.go` 初始化 `SystemTitles` 时将 `ObtainRulesJSON`、`ScopesJSON` 设为了空字符串。

## 修复方案
- 修改 `internal/api/admin/titles_seed.go` 的种子逻辑：
  - 将 `ObtainRulesJSON` 默认值改为 `"{}"`（或 `{"type":"manual"}` 作为占位规则）。
  - 将 `ScopesJSON` 默认值改为 `"{}"`（空作用域表示全局生效）。
- 保持 `SystemTitleEffects.ParamsJSON` 使用 `json.Marshal(d.Params)`（已为合法 JSON）。

## 执行步骤
1. 更新代码：将空字符串替换为合法 JSON 默认值 `"{}"`。
2. 编译检查：`go build ./...`。
3. 运行初始化：`POST /api/admin/system_titles/seed_default`，预期返回 6 个称号（新建或已存在）。
4. 验证列表：登录后调用 `GET /api/admin/system_titles?page=1&page_size=20`，应返回 `total=6`。

## 风险与回滚
- 仅修改种子默认值，不影响既有数据；若此前插入失败，无需回滚。
- 如你希望 `obtain_rules_json` 有具体规则，我可以将默认值改为 `{"type":"manual"}` 或按你的要求填充。

确认后我将立即修复代码、重新初始化并验证页面数据。