feat(api): 添加成就系统并升级SDK

- 升级 HaveADrink SDK 从 1.0.16 到 1.0.17 版本
- 新增 GetAchievements API 接口及相关数据类型定义
- 添加 17 个成就定义,包括打卡次数、连续打卡、标准杯累计、酒类探索等类别
- 实现成就解锁逻辑计算,支持 category_records 类型成就判断
- 创建成就徽章对接文档,定义接口格式和存储建议
- 在用户资料页面集成成就展示功能,优化图标匹配逻辑
This commit is contained in:
cg
2026-08-17 23:07:23 +08:00
parent 06ec10cf10
commit 18e7b4fd50
12 changed files with 644 additions and 29 deletions
+9 -6
View File
@@ -173,7 +173,7 @@
<script>
import AchievementBadge from '../../components/AchievementBadge.vue'
import client, { clearAuth } from '../../common/api'
import client, { clearAuth, GetAchievements } from '../../common/api'
import { checkAchievements, getCatIcon, isIconPath, calcLocalStreak, isValidAvatar } from '../../common/utils'
import { ACHIEVEMENTS, DRINK_CATEGORIES } from '../../common/constants'
import themeMixin from '../../common/theme-mixin'
@@ -290,7 +290,7 @@ export default {
const [userResp, statsResp, achieveResp] = await Promise.allSettled([
client.GetUserProfile({}),
client.GetStatsOverview({}),
client.GetAchievements({})
GetAchievements()
])
// 用户信息
@@ -332,8 +332,8 @@ export default {
id: a.achievement_id || a.id,
name: a.name,
desc: a.desc,
// 后端返回的 icon 是不存在的图片路径,按顺序复用本地 emoji 图标
icon: this.resolveAchievementIcon(i),
// 后端返回的 icon 是不存在的图片路径,优先按成就 id 匹配本地 emoji 图标
icon: this.resolveAchievementIcon(a.achievement_id || a.id, i),
condition: a.condition || '',
unlocked: !!a.unlocked,
progress: a.progress || 0
@@ -373,8 +373,11 @@ export default {
console.warn('本地计算连续天数失败:', e)
}
},
// 后端返回的 icon 是无效图片路径,按索引复用本地成就的 emoji 图标(超出后循环取)
resolveAchievementIcon(index) {
// 后端返回的 icon 是无效图片路径,优先按成就 id 匹配本地 ACHIEVEMENTS 的 emoji 图标,
// 匹配不到(后端新增成就)时再按索引循环兜底
resolveAchievementIcon(id, index) {
const local = ACHIEVEMENTS.find(a => a.id === id)
if (local) return local.icon
if (!ACHIEVEMENTS.length) return '🏅'
return ACHIEVEMENTS[index % ACHIEVEMENTS.length].icon
},