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; }