feat(api): 添加成就系统并升级SDK
- 升级 HaveADrink SDK 从 1.0.16 到 1.0.17 版本 - 新增 GetAchievements API 接口及相关数据类型定义 - 添加 17 个成就定义,包括打卡次数、连续打卡、标准杯累计、酒类探索等类别 - 实现成就解锁逻辑计算,支持 category_records 类型成就判断 - 创建成就徽章对接文档,定义接口格式和存储建议 - 在用户资料页面集成成就展示功能,优化图标匹配逻辑
This commit is contained in:
+12
-1
@@ -1,7 +1,7 @@
|
||||
/* 碰盏日记 - API 服务层
|
||||
* 基于 HaveADrink SDK 封装后端接口
|
||||
*/
|
||||
import HaveADrink from 'HaveADrink'
|
||||
import HaveADrink, { GetAchievementsReq } from 'HaveADrink'
|
||||
import UniAppWebSocket from './uni-websocket'
|
||||
|
||||
// ==========================================
|
||||
@@ -343,6 +343,17 @@ export async function GetUnreadCount() {
|
||||
return { data: res }
|
||||
}
|
||||
|
||||
// ==========================================
|
||||
// 成就 API
|
||||
// ==========================================
|
||||
|
||||
/** 获取成就列表(使用 SDK GetAchievementsReq 请求实例) */
|
||||
export async function GetAchievements() {
|
||||
const req = new GetAchievementsReq()
|
||||
const res = await client.GetAchievements(req)
|
||||
return { data: res }
|
||||
}
|
||||
|
||||
// ==========================================
|
||||
// 文件上传 API
|
||||
// ==========================================
|
||||
|
||||
+99
-10
@@ -179,6 +179,7 @@ export const DRINK_QUOTES = [
|
||||
|
||||
// 成就定义
|
||||
export const ACHIEVEMENTS = [
|
||||
// 打卡次数类
|
||||
{
|
||||
id: 'first_checkin',
|
||||
name: '初来乍到',
|
||||
@@ -187,11 +188,33 @@ export const ACHIEVEMENTS = [
|
||||
condition: { type: 'total_records', value: 1 }
|
||||
},
|
||||
{
|
||||
id: 'hundred_cups',
|
||||
name: '百杯不醉',
|
||||
desc: '累计饮用100标准杯',
|
||||
icon: '🏆',
|
||||
condition: { type: 'total_standard_cups', value: 100 }
|
||||
id: 'records_10',
|
||||
name: '小有心得',
|
||||
desc: '累计打卡10次,记录已成习惯',
|
||||
icon: '📖',
|
||||
condition: { type: 'total_records', value: 10 }
|
||||
},
|
||||
{
|
||||
id: 'records_50',
|
||||
name: '记录老手',
|
||||
desc: '累计打卡50次,每一杯都有迹可循',
|
||||
icon: '✒️',
|
||||
condition: { type: 'total_records', value: 50 }
|
||||
},
|
||||
{
|
||||
id: 'records_100',
|
||||
name: '酒档宗师',
|
||||
desc: '累计打卡100次,个人酒档初具规模',
|
||||
icon: '🏵️',
|
||||
condition: { type: 'total_records', value: 100 }
|
||||
},
|
||||
// 连续打卡类
|
||||
{
|
||||
id: 'streak_7',
|
||||
name: '七日之约',
|
||||
desc: '连续打卡7天,一周不落',
|
||||
icon: '📅',
|
||||
condition: { type: 'streak_days', value: 7 }
|
||||
},
|
||||
{
|
||||
id: 'streak_30',
|
||||
@@ -201,11 +224,48 @@ export const ACHIEVEMENTS = [
|
||||
condition: { type: 'streak_days', value: 30 }
|
||||
},
|
||||
{
|
||||
id: 'baijiu_master',
|
||||
name: '白酒达人',
|
||||
desc: '白酒累计打卡20次',
|
||||
icon: '/static/icons/baijiu.svg',
|
||||
condition: { type: 'category_records', category: 'baijiu', value: 20 }
|
||||
id: 'streak_100',
|
||||
name: '百日坚持',
|
||||
desc: '连续打卡100天,毅力惊人',
|
||||
icon: '💯',
|
||||
condition: { type: 'streak_days', value: 100 }
|
||||
},
|
||||
// 标准杯累计类
|
||||
{
|
||||
id: 'cups_10',
|
||||
name: '微醺初体验',
|
||||
desc: '累计饮用10标准杯',
|
||||
icon: '🥂',
|
||||
condition: { type: 'total_standard_cups', value: 10 }
|
||||
},
|
||||
{
|
||||
id: 'cups_50',
|
||||
name: '五十杯之路',
|
||||
desc: '累计饮用50标准杯,微醺是最好的状态',
|
||||
icon: '🍻',
|
||||
condition: { type: 'total_standard_cups', value: 50 }
|
||||
},
|
||||
{
|
||||
id: 'hundred_cups',
|
||||
name: '百杯不醉',
|
||||
desc: '累计饮用100标准杯',
|
||||
icon: '🏆',
|
||||
condition: { type: 'total_standard_cups', value: 100 }
|
||||
},
|
||||
{
|
||||
id: 'cups_300',
|
||||
name: '海量传说',
|
||||
desc: '累计饮用300标准杯,记得理性饮酒哦',
|
||||
icon: '🌊',
|
||||
condition: { type: 'total_standard_cups', value: 300 }
|
||||
},
|
||||
// 酒类探索类
|
||||
{
|
||||
id: 'variety_3',
|
||||
name: '探索起步',
|
||||
desc: '尝试过3种不同类型的酒',
|
||||
icon: '🧭',
|
||||
condition: { type: 'category_variety', value: 3 }
|
||||
},
|
||||
{
|
||||
id: 'tasting_master',
|
||||
@@ -213,6 +273,35 @@ export const ACHIEVEMENTS = [
|
||||
desc: '尝试过5种以上不同类型的酒',
|
||||
icon: '🌈',
|
||||
condition: { type: 'category_variety', value: 5 }
|
||||
},
|
||||
{
|
||||
id: 'variety_8',
|
||||
name: '酒类百科',
|
||||
desc: '尝试过8种以上不同类型的酒,尝遍百味',
|
||||
icon: '📚',
|
||||
condition: { type: 'category_variety', value: 8 }
|
||||
},
|
||||
// 单一酒类深耕类
|
||||
{
|
||||
id: 'baijiu_master',
|
||||
name: '白酒达人',
|
||||
desc: '白酒累计打卡20次',
|
||||
icon: '/static/icons/baijiu.svg',
|
||||
condition: { type: 'category_records', category: 'baijiu', value: 20 }
|
||||
},
|
||||
{
|
||||
id: 'beer_master',
|
||||
name: '啤酒之王',
|
||||
desc: '啤酒累计打卡20次,冰爽永不停',
|
||||
icon: '🍺',
|
||||
condition: { type: 'category_records', category: 'beer', value: 20 }
|
||||
},
|
||||
{
|
||||
id: 'wine_master',
|
||||
name: '红酒绅士',
|
||||
desc: '红酒累计打卡20次,品味微酸的美好',
|
||||
icon: '🍷',
|
||||
condition: { type: 'category_records', category: 'wine', value: 20 }
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
+3
-2
@@ -388,8 +388,9 @@ export function checkAchievements(stats, achievements) {
|
||||
unlocked = stats.categoryVariety >= value
|
||||
break
|
||||
case 'category_records':
|
||||
// 需要更细粒度的数据,这里简化处理
|
||||
unlocked = false
|
||||
// 依赖 stats.categoryRecords({ baijiu: n, beer: n, ... });
|
||||
// 统计中无该字段时保守判为未解锁
|
||||
unlocked = ((stats.categoryRecords && stats.categoryRecords[category]) || 0) >= value
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user