From c0f0078056ebed3a845d0952d67c6e24df861851 Mon Sep 17 00:00:00 2001
From: Ethereal <3432649580@qq.com>
Date: Mon, 21 Jul 2025 14:04:44 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9C=80=E5=90=8E=E7=9A=84=E8=8E=B7=E5=A5=96?=
=?UTF-8?q?=E5=88=97=E8=A1=A8=E8=BF=98=E6=9C=AA=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/API.js | 6 ++--
src/views/choujiang/index.vue | 2 +-
src/views/choujiang/lottery/CardItem.vue | 2 +-
src/views/choujiang/lottery/Lottery3D.vue | 2 +-
src/views/choujiang/lottery/PrizePanel.vue | 9 +++++-
src/views/choujiang/lottery/dataManager.js | 44 ++++++++++++++++++++++++++--
src/views/choujiang/lottery/lotteryEngine.js | 20 +++++++++----
7 files changed, 71 insertions(+), 14 deletions(-)
diff --git a/src/api/API.js b/src/api/API.js
index abe6dfd..79d641c 100644
--- a/src/api/API.js
+++ b/src/api/API.js
@@ -37,8 +37,10 @@ export function drawLottery(data){
data: {
gradeName: data.gradeName,
prizeName: data.prizeName,
- perWin: data.perWin
- // round: data.round
+ perWin: data.perWin,
+ remainNum: data.remainNum,
+ gradeId: data.gradeId,
+ prizeId: data.prizeId
}
})
}
\ No newline at end of file
diff --git a/src/views/choujiang/index.vue b/src/views/choujiang/index.vue
index d27f3b3..89b690a 100644
--- a/src/views/choujiang/index.vue
+++ b/src/views/choujiang/index.vue
@@ -177,7 +177,7 @@ async function handleLotteryClick() {
// result 状态下点击不做任何事,或者你可以加提示
await lottery3DRef.value?.switchScreen?.("lottery");
- await new Promise((resolve) => setTimeout(resolve, 2000));
+ await new Promise((resolve) => setTimeout(resolve, 2500));
// 去除高光
lottery3DRef.value?.changeCard1?.();
diff --git a/src/views/choujiang/lottery/CardItem.vue b/src/views/choujiang/lottery/CardItem.vue
index 3e592dd..c3112fb 100644
--- a/src/views/choujiang/lottery/CardItem.vue
+++ b/src/views/choujiang/lottery/CardItem.vue
@@ -57,7 +57,7 @@ const startTextSwitch = () => {
if (lotteryState.value === "idle" || lotteryState.value === "ready") {
const scheduleNextSwitch = () => {
// 生成1-4秒之间的随机间隔
- const randomInterval = Math.random() * 20000 + 1000; // 10000-20000毫秒
+ const randomInterval = Math.random() * 10000 + 10000; // 10000-20000毫秒
textSwitchInterval.value = setTimeout(() => {
switchText();
// 递归调用,继续下一次随机切换
diff --git a/src/views/choujiang/lottery/Lottery3D.vue b/src/views/choujiang/lottery/Lottery3D.vue
index f488723..9ad7de7 100644
--- a/src/views/choujiang/lottery/Lottery3D.vue
+++ b/src/views/choujiang/lottery/Lottery3D.vue
@@ -525,7 +525,7 @@ function changeCard(cardIndex, user) {
const username = user.username || user[1] || "";
const company = user.company || user[2] || "PSST";
- card.innerHTML = `
${jwcode}
`;
+ card.innerHTML = `${jwcode}
`;
// 添加中奖样式类
card.classList.add("prize");
diff --git a/src/views/choujiang/lottery/PrizePanel.vue b/src/views/choujiang/lottery/PrizePanel.vue
index 67f6131..4d54b3d 100644
--- a/src/views/choujiang/lottery/PrizePanel.vue
+++ b/src/views/choujiang/lottery/PrizePanel.vue
@@ -273,7 +273,7 @@ function getLeftCount(prize) {
let luckyUsers =
(window.dataManager && window.dataManager.state.basicData.luckyUsers) || {};
let got = luckyUsers[prize.type]?.length || 0;
- return prize.count - got;
+ return prize.remainNum;
}
// 新增部分
@@ -566,6 +566,13 @@ function getProgressPercent(prize) {
padding: 0;
margin: 0;
list-style: none;
+ /* 隐藏滚动条但保留滚动功能 */
+ scrollbar-width: none; /* Firefox */
+ -ms-overflow-style: none; /* IE and Edge */
+}
+
+.winner-list::-webkit-scrollbar {
+ display: none; /* Chrome, Safari and Opera */
}
.winner-list li {
padding: 8px 0;
diff --git a/src/views/choujiang/lottery/dataManager.js b/src/views/choujiang/lottery/dataManager.js
index 0634555..8964180 100644
--- a/src/views/choujiang/lottery/dataManager.js
+++ b/src/views/choujiang/lottery/dataManager.js
@@ -33,7 +33,10 @@ export function useDataManager() {
title: item.gradeName,
text: item.prizeName,
count: item.amount,
- img: item.imageUrl
+ img: item.imageUrl,
+ gradeId: item.gradeId,
+ prizeId: item.prizeId,
+ remainNum: item.remainNum
}));
const fakeEachCount = prizeList.data.map(item => item.perWin);
@@ -154,6 +157,42 @@ export function useDataManager() {
state.currentRound = getCurrentRound(state.currentPrizeIndex);
}
+ // 新增:更新奖品列表数据
+ async function updatePrizeList() {
+ try {
+ console.log('开始更新奖品列表数据...');
+ const prizeList = await getPrizeList();
+ const fakePrizes = prizeList.data.map((item, index) => ({
+ type: index, // 使用索引作为type
+ title: item.gradeName,
+ text: item.prizeName,
+ count: item.amount,
+ img: item.imageUrl,
+ gradeId: item.gradeId,
+ prizeId: item.prizeId,
+ remainNum: item.remainNum
+ }));
+
+ const fakeEachCount = prizeList.data.map(item => item.perWin);
+ console.log("更新后的奖品列表:", fakePrizes);
+ console.log("更新后的每轮数量:", fakeEachCount);
+
+ // 更新配置数据
+ state.config.prizes = fakePrizes;
+ state.config.EACH_COUNT = fakeEachCount;
+ state.basicData.prizes = fakePrizes;
+
+ // 重新确定当前奖品
+ determineCurrentPrize();
+
+ console.log('奖品列表数据更新完成');
+ return Promise.resolve(fakePrizes);
+ } catch (error) {
+ console.error('更新奖品列表失败:', error);
+ return Promise.reject(error);
+ }
+ }
+
return {
state,
getBasicData,
@@ -169,6 +208,7 @@ export function useDataManager() {
getTotalRounds,
getCurrentRound,
getLeftCount,
- updateCurrentRound
+ updateCurrentRound,
+ updatePrizeList
};
}
\ No newline at end of file
diff --git a/src/views/choujiang/lottery/lotteryEngine.js b/src/views/choujiang/lottery/lotteryEngine.js
index 6404d38..e0423fa 100644
--- a/src/views/choujiang/lottery/lotteryEngine.js
+++ b/src/views/choujiang/lottery/lotteryEngine.js
@@ -45,24 +45,24 @@ export function useLotteryEngine(dataManager, renderer3D) {
// 请求后端进行抽奖
try {
const lotteryData = {
- gradeName: prize.title,
- prizeName: prize.text,
+ gradeId: prize.gradeId,
+ prizeId: prize.prizeId,
perWin: basePerCount,
- round: dataManager.state.currentRound
+ remainNum: prize.remainNum
};
console.log('请求后端抽奖,参数:', lotteryData);
const response = await drawLottery(lotteryData);
console.log('response', response);
- winners.value = response.data;
+ winners.value = response.data.data;
console.log('抽奖的winners', winners.value);
// winners.value = response.data;
console.log('后端抽奖返回结果:', response);
- if (response && response.data && Array.isArray(response.data)) {
+ if (response && response.data.data && Array.isArray(response.data.data)) {
// 后端返回中奖用户数据
- const currentLuckys = response.data.map(item => ({
+ const currentLuckys = response.data.data.map(item => ({
jwcode: item.jwcode,
username: item.username
}));
@@ -143,6 +143,14 @@ export function useLotteryEngine(dataManager, renderer3D) {
console.log('executeLottery - selectCard completed');
}
+ // 抽奖完成后更新奖品列表数据
+ try {
+ await dataManager.updatePrizeList();
+ console.log('抽奖完成后奖品列表已更新');
+ } catch (error) {
+ console.error('更新奖品列表失败:', error);
+ }
+
dataManager.setLotteryStatus(false);
isLotting.value = false;
}