feat(api): 添加成就系统并升级SDK
- 升级 HaveADrink SDK 从 1.0.16 到 1.0.17 版本 - 新增 GetAchievements API 接口及相关数据类型定义 - 添加 17 个成就定义,包括打卡次数、连续打卡、标准杯累计、酒类探索等类别 - 实现成就解锁逻辑计算,支持 category_records 类型成就判断 - 创建成就徽章对接文档,定义接口格式和存储建议 - 在用户资料页面集成成就展示功能,优化图标匹配逻辑
This commit is contained in:
@@ -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
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user