diff --git a/achievement/assets/figma/badge-gold.png b/achievement/assets/figma/badge-gold.png new file mode 100644 index 0000000..d1d152e Binary files /dev/null and b/achievement/assets/figma/badge-gold.png differ diff --git a/achievement/assets/figma/badge-silver.png b/achievement/assets/figma/badge-silver.png new file mode 100644 index 0000000..93fb8d9 Binary files /dev/null and b/achievement/assets/figma/badge-silver.png differ diff --git a/achievement/assets/figma/bg-stage.png b/achievement/assets/figma/bg-stage.png new file mode 100644 index 0000000..f393030 Binary files /dev/null and b/achievement/assets/figma/bg-stage.png differ diff --git a/achievement/assets/figma/collector-1.png b/achievement/assets/figma/collector-1.png new file mode 100644 index 0000000..1bf4c4a Binary files /dev/null and b/achievement/assets/figma/collector-1.png differ diff --git a/achievement/assets/figma/collector-2.png b/achievement/assets/figma/collector-2.png new file mode 100644 index 0000000..e4f7b86 Binary files /dev/null and b/achievement/assets/figma/collector-2.png differ diff --git a/achievement/assets/figma/collector-3.png b/achievement/assets/figma/collector-3.png new file mode 100644 index 0000000..bbfd58f Binary files /dev/null and b/achievement/assets/figma/collector-3.png differ diff --git a/achievement/assets/figma/collector-4.png b/achievement/assets/figma/collector-4.png new file mode 100644 index 0000000..d1619ba Binary files /dev/null and b/achievement/assets/figma/collector-4.png differ diff --git a/achievement/assets/figma/collector-5.png b/achievement/assets/figma/collector-5.png new file mode 100644 index 0000000..4337520 Binary files /dev/null and b/achievement/assets/figma/collector-5.png differ diff --git a/achievement/assets/figma/empty-cat.png b/achievement/assets/figma/empty-cat.png new file mode 100644 index 0000000..243f205 Binary files /dev/null and b/achievement/assets/figma/empty-cat.png differ diff --git a/achievement/assets/figma/header-frame.png b/achievement/assets/figma/header-frame.png new file mode 100644 index 0000000..9a2030c Binary files /dev/null and b/achievement/assets/figma/header-frame.png differ diff --git a/achievement/assets/figma/lock.png b/achievement/assets/figma/lock.png new file mode 100644 index 0000000..b293657 --- /dev/null +++ b/achievement/assets/figma/lock.png @@ -0,0 +1,5 @@ + + + + + diff --git a/achievement/assets/figma/modal-border.png b/achievement/assets/figma/modal-border.png new file mode 100644 index 0000000..eacb263 Binary files /dev/null and b/achievement/assets/figma/modal-border.png differ diff --git a/achievement/assets/figma/profile-avatar.png b/achievement/assets/figma/profile-avatar.png new file mode 100644 index 0000000..cb8336a Binary files /dev/null and b/achievement/assets/figma/profile-avatar.png differ diff --git a/achievement/index.html b/achievement/index.html new file mode 100644 index 0000000..ec805fe --- /dev/null +++ b/achievement/index.html @@ -0,0 +1,1162 @@ + + + + + + + Achievement + + + + +
+
+ +
+ +
+ + +
+
Name
+
+ Earn 0 achievements +
+
+ + +
+
+
+
+ +
+ Stay Tuned For More Achievements! +
+
+ +
+
+ Loading... +
+
+
+
+ + + + + + + + + + diff --git a/common/api.js b/common/api.js index 521661d..65132f2 100644 --- a/common/api.js +++ b/common/api.js @@ -1493,6 +1493,26 @@ var default_api = 'https://api.global-interaction.com/'; }, }; + // 成就页只读当前用户的 App 成就和徽章展示资料;认证、app_code、env、错误 envelope 仍由 request 统一处理。 + // collection_type 由页面按 tab 传入,避免 H5 自己拼接不同业务集合导致后端筛选语义漂移。 + var achievementAPI = { + list: function (query) { + return request('/api/v1/achievements', { + method: 'GET', + query: query || {}, + }); + }, + badges: function () { + return request('/api/v1/badges/me', { method: 'GET' }); + }, + setDisplay: function (payload) { + return request('/api/v1/badges/display', { + method: 'POST', + body: payload || {}, + }); + }, + }; + // 任务页 API 只封装 H5 需要的两个 App 合约;登录态、app_code、env 和错误 envelope 仍由 request 统一处理。 // 领取奖励的 command_id 必须来自点击动作本身,页面脚本负责生成并在同一次重试中复用,避免重复点击造成多次发奖。 var taskAPI = { @@ -1796,6 +1816,7 @@ var default_api = 'https://api.global-interaction.com/'; superadminCenter: superadminCenterAPI, activityWheel: activityWheelAPI, level: levelAPI, + achievement: achievementAPI, task: taskAPI, weeklyStar: weeklyStarAPI, cpWeeklyRank: cpWeeklyRankAPI, diff --git a/common/locales/ar.json b/common/locales/ar.json index 0796337..97bced5 100644 --- a/common/locales/ar.json +++ b/common/locales/ar.json @@ -621,5 +621,19 @@ "cpSpace.cancelConfirmWithCost": "إلغاء علاقة CP سيكلف {coins} عملة. هل تريد المتابعة؟", "cpSpace.cancelConfirmFree": "هل تريد إلغاء علاقة CP؟", "cpSpace.cancelSuccess": "تم الإلغاء.", - "cpSpace.cancelFailed": "فشل الإلغاء." + "cpSpace.cancelFailed": "فشل الإلغاء.", + "achievement.back": "رجوع", + "achievement.honors": "الأوسمة", + "achievement.event": "الفعاليات", + "achievement.stayTuned": "ترقب المزيد من الإنجازات!", + "achievement.loading": "جار التحميل...", + "achievement.earned": "حصلت على {count} إنجازات", + "achievement.defaultHowTo": "أكمل هدف الإنجاز المطلوب لجمع هذه الشارة.", + "achievement.loadFailed": "فشل التحميل", + "achievement.collection": "مجموعة الإنجازات", + "achievement.notCollected": "لم يتم جمعها", + "achievement.collected": "تم جمعها", + "achievement.collectedWithDate": "تم جمعها في {date}", + "achievement.ownerCount": "يمتلكها {count} أشخاص فقط", + "achievement.ownerUpdating": "يتم تحديث سجلات المجموعة" } diff --git a/common/locales/en.json b/common/locales/en.json index 978d82e..0885f79 100644 --- a/common/locales/en.json +++ b/common/locales/en.json @@ -627,5 +627,19 @@ "cpSpace.cancelConfirmWithCost": "Canceling this CP will cost {coins} coins. Continue?", "cpSpace.cancelConfirmFree": "Cancel this CP relationship?", "cpSpace.cancelSuccess": "Canceled.", - "cpSpace.cancelFailed": "Cancel failed." + "cpSpace.cancelFailed": "Cancel failed.", + "achievement.back": "Back", + "achievement.honors": "Honors", + "achievement.event": "Event", + "achievement.stayTuned": "Stay Tuned For More Achievements!", + "achievement.loading": "Loading...", + "achievement.earned": "Earn {count} achievements", + "achievement.defaultHowTo": "Complete the required achievement goal to collect this badge.", + "achievement.loadFailed": "Load failed", + "achievement.collection": "Achievement Collection", + "achievement.notCollected": "Not Collected", + "achievement.collected": "Collected", + "achievement.collectedWithDate": "{date} Collected", + "achievement.ownerCount": "Only {count} people own it", + "achievement.ownerUpdating": "Collection records are updating" } diff --git a/common/locales/es.json b/common/locales/es.json index 452621e..5c4a42c 100644 --- a/common/locales/es.json +++ b/common/locales/es.json @@ -621,5 +621,19 @@ "cpSpace.cancelConfirmWithCost": "Cancelar este CP costará {coins} monedas. ¿Continuar?", "cpSpace.cancelConfirmFree": "¿Cancelar esta relación CP?", "cpSpace.cancelSuccess": "Cancelado.", - "cpSpace.cancelFailed": "Error al cancelar." + "cpSpace.cancelFailed": "Error al cancelar.", + "achievement.back": "Volver", + "achievement.honors": "Honores", + "achievement.event": "Evento", + "achievement.stayTuned": "¡Pronto habrá más logros!", + "achievement.loading": "Cargando...", + "achievement.earned": "Has conseguido {count} logros", + "achievement.defaultHowTo": "Completa el objetivo requerido para coleccionar esta insignia.", + "achievement.loadFailed": "Error al cargar", + "achievement.collection": "Colección de logros", + "achievement.notCollected": "No coleccionado", + "achievement.collected": "Coleccionado", + "achievement.collectedWithDate": "Coleccionado el {date}", + "achievement.ownerCount": "Solo {count} personas lo tienen", + "achievement.ownerUpdating": "Los registros de colección se están actualizando" } diff --git a/common/locales/id.json b/common/locales/id.json index fd79d84..85b5439 100644 --- a/common/locales/id.json +++ b/common/locales/id.json @@ -588,5 +588,19 @@ "cpSpace.cancelConfirmWithCost": "Membatalkan CP ini akan memakai {coins} koin. Lanjutkan?", "cpSpace.cancelConfirmFree": "Batalkan hubungan CP ini?", "cpSpace.cancelSuccess": "Dibatalkan.", - "cpSpace.cancelFailed": "Gagal membatalkan." + "cpSpace.cancelFailed": "Gagal membatalkan.", + "achievement.back": "Kembali", + "achievement.honors": "Honor", + "achievement.event": "Event", + "achievement.stayTuned": "Nantikan pencapaian lainnya!", + "achievement.loading": "Memuat...", + "achievement.earned": "Mendapat {count} pencapaian", + "achievement.defaultHowTo": "Selesaikan target pencapaian untuk mengoleksi lencana ini.", + "achievement.loadFailed": "Gagal memuat", + "achievement.collection": "Koleksi Pencapaian", + "achievement.notCollected": "Belum dikoleksi", + "achievement.collected": "Dikoleksi", + "achievement.collectedWithDate": "Dikoleksi pada {date}", + "achievement.ownerCount": "Hanya {count} orang yang memilikinya", + "achievement.ownerUpdating": "Catatan koleksi sedang diperbarui" } diff --git a/common/locales/tr.json b/common/locales/tr.json index 05ff874..184e0ca 100644 --- a/common/locales/tr.json +++ b/common/locales/tr.json @@ -588,5 +588,19 @@ "cpSpace.cancelConfirmWithCost": "Bu CP ilişkisini iptal etmek {coins} coin tutar. Devam edilsin mi?", "cpSpace.cancelConfirmFree": "Bu CP ilişkisi iptal edilsin mi?", "cpSpace.cancelSuccess": "İptal edildi.", - "cpSpace.cancelFailed": "İptal başarısız." + "cpSpace.cancelFailed": "İptal başarısız.", + "achievement.back": "Geri", + "achievement.honors": "Onurlar", + "achievement.event": "Etkinlik", + "achievement.stayTuned": "Daha fazla başarı yakında!", + "achievement.loading": "Yükleniyor...", + "achievement.earned": "{count} başarı kazandın", + "achievement.defaultHowTo": "Bu rozeti toplamak için gerekli başarı hedefini tamamla.", + "achievement.loadFailed": "Yüklenemedi", + "achievement.collection": "Başarı Koleksiyonu", + "achievement.notCollected": "Toplanmadı", + "achievement.collected": "Toplandı", + "achievement.collectedWithDate": "{date} tarihinde toplandı", + "achievement.ownerCount": "Sadece {count} kişi sahip", + "achievement.ownerUpdating": "Koleksiyon kayıtları güncelleniyor" } diff --git a/common/locales/zh.json b/common/locales/zh.json index b9326ce..4e8ac48 100644 --- a/common/locales/zh.json +++ b/common/locales/zh.json @@ -594,5 +594,19 @@ "cpSpace.cancelConfirmWithCost": "取消 CP 关系需要支付 {coins} 金币,是否继续?", "cpSpace.cancelConfirmFree": "确定取消 CP 关系?", "cpSpace.cancelSuccess": "已取消", - "cpSpace.cancelFailed": "取消失败" + "cpSpace.cancelFailed": "取消失败", + "achievement.back": "返回", + "achievement.honors": "荣誉", + "achievement.event": "活动", + "achievement.stayTuned": "更多成就敬请期待!", + "achievement.loading": "加载中...", + "achievement.earned": "已获得 {count} 个成就", + "achievement.defaultHowTo": "完成对应成就目标后可收集该徽章。", + "achievement.loadFailed": "加载失败", + "achievement.collection": "成就收藏", + "achievement.notCollected": "未收集", + "achievement.collected": "已收集", + "achievement.collectedWithDate": "{date} 已收集", + "achievement.ownerCount": "仅 {count} 人拥有", + "achievement.ownerUpdating": "收藏记录更新中" }