User Badges Mock API
源码:
web/src/mock/modules/user/badges.ts
接口列表
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/users/me/badges | 获取我的徽章列表(含解锁状态) |
| POST | /api/v1/users/me/badges/:badgeId | 解锁指定徽章 |
请求参数
GET /api/v1/users/me/badges
无请求参数。
POST /api/v1/users/me/badges/:badgeId
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| badgeId | 路径 | string | 徽章ID(来自 BADGE_DEFS) |
响应格式
GET /api/v1/users/me/badges
合并 BADGE_DEFS(徽章定义)与用户已解锁徽章记录,返回每个徽章的定义 + 解锁状态:
json
{
"code": 0,
"msg": "ok",
"data": [
{
"id": "first_write",
"name": "初次书写",
"desc": "完成第一次书写练习",
"category": "write",
"icon": "first_write",
"unlocked": true,
"unlockedAt": "2026-01-01T00:00:00.000Z"
},
{
"id": "learn_100",
"name": "百字探索者",
"desc": "学会100个汉字",
"category": "explore",
"icon": "learn_100",
"unlocked": false,
"unlockedAt": null
}
]
}POST /api/v1/users/me/badges/:badgeId
json
{ "code": 0, "msg": "ok", "data": { "badgeId": "first_write", "unlockedAt": "2026-01-01T00:00:00.000Z" } }错误响应:
- 徽章不存在:
{ "code": 400, "msg": "徽章不存在", "data": null } - 徽章已解锁:
{ "code": 400, "msg": "徽章已解锁", "data": null }
被哪个 Store 调用
- UserStore (
web/src/stores/user.ts)unlockBadge(badgeId)→POST /api/v1/users/me/badges/:badgeId
- AchievementStore (
web/src/stores/achievement.ts)- 通过
user.unlockBadge()间接调用
- 通过