Browse Source

最后的获奖列表还未测试

songtongtong/feature-20250717104937-众筹
Ethereal 4 weeks ago
parent
commit
c0f0078056
  1. 6
      src/api/API.js
  2. 2
      src/views/choujiang/index.vue
  3. 2
      src/views/choujiang/lottery/CardItem.vue
  4. 2
      src/views/choujiang/lottery/Lottery3D.vue
  5. 9
      src/views/choujiang/lottery/PrizePanel.vue
  6. 44
      src/views/choujiang/lottery/dataManager.js
  7. 20
      src/views/choujiang/lottery/lotteryEngine.js

6
src/api/API.js

@ -37,8 +37,10 @@ export function drawLottery(data){
data: { data: {
gradeName: data.gradeName, gradeName: data.gradeName,
prizeName: data.prizeName, prizeName: data.prizeName,
perWin: data.perWin
// round: data.round
perWin: data.perWin,
remainNum: data.remainNum,
gradeId: data.gradeId,
prizeId: data.prizeId
} }
}) })
} }

2
src/views/choujiang/index.vue

@ -177,7 +177,7 @@ async function handleLotteryClick() {
// result // result
await lottery3DRef.value?.switchScreen?.("lottery"); await lottery3DRef.value?.switchScreen?.("lottery");
await new Promise((resolve) => setTimeout(resolve, 2000));
await new Promise((resolve) => setTimeout(resolve, 2500));
// //
lottery3DRef.value?.changeCard1?.(); lottery3DRef.value?.changeCard1?.();

2
src/views/choujiang/lottery/CardItem.vue

@ -57,7 +57,7 @@ const startTextSwitch = () => {
if (lotteryState.value === "idle" || lotteryState.value === "ready") { if (lotteryState.value === "idle" || lotteryState.value === "ready") {
const scheduleNextSwitch = () => { const scheduleNextSwitch = () => {
// 1-4 // 1-4
const randomInterval = Math.random() * 20000 + 1000; // 10000-20000
const randomInterval = Math.random() * 10000 + 10000; // 10000-20000
textSwitchInterval.value = setTimeout(() => { textSwitchInterval.value = setTimeout(() => {
switchText(); switchText();
// //

2
src/views/choujiang/lottery/Lottery3D.vue

@ -525,7 +525,7 @@ function changeCard(cardIndex, user) {
const username = user.username || user[1] || ""; const username = user.username || user[1] || "";
const company = user.company || user[2] || "PSST"; const company = user.company || user[2] || "PSST";
card.innerHTML = `<div style="font-size: 16px; font-weight: bold; color: #ffffff; text-align: center; display: flex; justify-content: center; align-items: center; width: 100%; height: 100%;">${jwcode}</div>`;
card.innerHTML = `<div style="font-size: 30px; font-weight: bold; color: #ffffff; text-align: center; display: flex; justify-content: center; align-items: center; width: 100%; height: 100%;">${jwcode}</div>`;
// //
card.classList.add("prize"); card.classList.add("prize");

9
src/views/choujiang/lottery/PrizePanel.vue

@ -273,7 +273,7 @@ function getLeftCount(prize) {
let luckyUsers = let luckyUsers =
(window.dataManager && window.dataManager.state.basicData.luckyUsers) || {}; (window.dataManager && window.dataManager.state.basicData.luckyUsers) || {};
let got = luckyUsers[prize.type]?.length || 0; let got = luckyUsers[prize.type]?.length || 0;
return prize.count - got;
return prize.remainNum;
} }
// //
@ -566,6 +566,13 @@ function getProgressPercent(prize) {
padding: 0; padding: 0;
margin: 0; margin: 0;
list-style: none; 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 { .winner-list li {
padding: 8px 0; padding: 8px 0;

44
src/views/choujiang/lottery/dataManager.js

@ -33,7 +33,10 @@ export function useDataManager() {
title: item.gradeName, title: item.gradeName,
text: item.prizeName, text: item.prizeName,
count: item.amount, 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); const fakeEachCount = prizeList.data.map(item => item.perWin);
@ -154,6 +157,42 @@ export function useDataManager() {
state.currentRound = getCurrentRound(state.currentPrizeIndex); 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 { return {
state, state,
getBasicData, getBasicData,
@ -169,6 +208,7 @@ export function useDataManager() {
getTotalRounds, getTotalRounds,
getCurrentRound, getCurrentRound,
getLeftCount, getLeftCount,
updateCurrentRound
updateCurrentRound,
updatePrizeList
}; };
} }

20
src/views/choujiang/lottery/lotteryEngine.js

@ -45,24 +45,24 @@ export function useLotteryEngine(dataManager, renderer3D) {
// 请求后端进行抽奖 // 请求后端进行抽奖
try { try {
const lotteryData = { const lotteryData = {
gradeName: prize.title,
prizeName: prize.text,
gradeId: prize.gradeId,
prizeId: prize.prizeId,
perWin: basePerCount, perWin: basePerCount,
round: dataManager.state.currentRound
remainNum: prize.remainNum
}; };
console.log('请求后端抽奖,参数:', lotteryData); console.log('请求后端抽奖,参数:', lotteryData);
const response = await drawLottery(lotteryData); const response = await drawLottery(lotteryData);
console.log('response', response); console.log('response', response);
winners.value = response.data;
winners.value = response.data.data;
console.log('抽奖的winners', winners.value); console.log('抽奖的winners', winners.value);
// winners.value = response.data; // winners.value = response.data;
console.log('后端抽奖返回结果:', response); 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, jwcode: item.jwcode,
username: item.username username: item.username
})); }));
@ -143,6 +143,14 @@ export function useLotteryEngine(dataManager, renderer3D) {
console.log('executeLottery - selectCard completed'); console.log('executeLottery - selectCard completed');
} }
// 抽奖完成后更新奖品列表数据
try {
await dataManager.updatePrizeList();
console.log('抽奖完成后奖品列表已更新');
} catch (error) {
console.error('更新奖品列表失败:', error);
}
dataManager.setLotteryStatus(false); dataManager.setLotteryStatus(false);
isLotting.value = false; isLotting.value = false;
} }

Loading…
Cancel
Save