From d530ec11e715306cb4f1653be1693158be40d86b Mon Sep 17 00:00:00 2001
From: Zuncle <34310384@qq.com>
Date: Thu, 7 May 2026 22:10:15 +0800
Subject: [PATCH] =?UTF-8?q?feat(activity):=20=E6=96=B0=E5=A2=9E=E5=B0=8F?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=A5=96=E5=93=81=E9=A2=86=E5=8F=96=E5=BC=B9?=
=?UTF-8?q?=E7=AA=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
新增首页承载的奖品领取弹窗与领取接口接入,支持待领取检查、会话静默关闭与领取操作展示。
---
App.vue | 3 -
api/prizeClaim.js | 9 +
components/activity/PrizeClaimPopup.vue | 289 ++++++++++++++++++++++++
components/activity/index.js | 1 +
pages/index/index.vue | 70 +++++-
5 files changed, 367 insertions(+), 5 deletions(-)
create mode 100644 api/prizeClaim.js
create mode 100644 components/activity/PrizeClaimPopup.vue
diff --git a/App.vue b/App.vue
index 57e2c25..b610ca1 100755
--- a/App.vue
+++ b/App.vue
@@ -11,7 +11,6 @@ export default {
try { uni.setStorageSync('inviter_code', options.query.invite_code) } catch (e) { console.error('Save invite code failed', e) }
}
- // 加载公开配置 (如订阅消息模板ID)
getPublicConfig().then(res => {
if (res && res.subscribe_templates) {
console.log('Loaded public config:', res)
@@ -20,8 +19,6 @@ export default {
}).catch(err => {
console.warn('Failed to load public config:', err)
})
-
- // 抖音平台现在也显示首页,不再需要强制跳转
},
onShow: function() {
console.log('App Show')
diff --git a/api/prizeClaim.js b/api/prizeClaim.js
new file mode 100644
index 0000000..fedb649
--- /dev/null
+++ b/api/prizeClaim.js
@@ -0,0 +1,9 @@
+import { authRequest } from '@/utils/request'
+
+export function getPendingPrizeGrantActivity() {
+ return authRequest({ url: '/api/app/prize-grant-activities/pending', method: 'GET' })
+}
+
+export function claimPrizeGrantActivity(id) {
+ return authRequest({ url: `/api/app/prize-grant-activities/${id}/claim`, method: 'POST' })
+}
diff --git a/components/activity/PrizeClaimPopup.vue b/components/activity/PrizeClaimPopup.vue
new file mode 100644
index 0000000..eb2302c
--- /dev/null
+++ b/components/activity/PrizeClaimPopup.vue
@@ -0,0 +1,289 @@
+
+
+
+
+
+
+
+ 奖励发放
+ ×
+
+
+ 奖励已到账,待你领取
+ {{ activity.reason }}
+
+
+
+
+ 奖品内容
+
+
+
+
+ {{ typeShortLabel(item.reward_type) }}
+
+
+ {{ item.name || item.reward_type }}
+
+ {{ typeLabel(item.reward_type) }}
+ 单价 ¥{{ (item.value_cents / 100).toFixed(2) }}
+
+
+
+ x{{ item.quantity }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/activity/index.js b/components/activity/index.js
index 6d6583d..71917d9 100755
--- a/components/activity/index.js
+++ b/components/activity/index.js
@@ -8,3 +8,4 @@ export { default as ActivityTabs } from './ActivityTabs.vue'
export { default as RewardsPreview } from './RewardsPreview.vue'
export { default as RewardsPopup } from './RewardsPopup.vue'
export { default as RecordsList } from './RecordsList.vue'
+export { default as PrizeClaimPopup } from './PrizeClaimPopup.vue'
diff --git a/pages/index/index.vue b/pages/index/index.vue
index fae0c1c..163788e 100755
--- a/pages/index/index.vue
+++ b/pages/index/index.vue
@@ -140,19 +140,30 @@
+
+