## 问题原因 - 数据库报错 `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"}` 或按你的要求填充。 确认后我将立即修复代码、重新初始化并验证页面数据。