|
|
@ -19,6 +19,12 @@ |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div v-if="showPrizeExhaustedModal1" class="prize-exhausted-modal"> |
|
|
|
<div class="modal-content"> |
|
|
|
<p class="modal-text">请先揭秘一个礼品</p> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- <UserList |
|
|
|
:lucky-users=" |
|
|
|
dataManager.state.basicData.luckyUsers[ |
|
|
@ -44,10 +50,12 @@ import { useDataManager } from "./lottery/dataManager.js"; |
|
|
|
import { useLotteryEngine } from "./lottery/lotteryEngine.js"; |
|
|
|
|
|
|
|
import { useLotteryStore } from "../../store/lottery"; // 路径根据实际情况调整 |
|
|
|
import { drawLottery } from "../../api/API"; |
|
|
|
|
|
|
|
const qipaoText = ref(""); |
|
|
|
const showQipao = ref(false); |
|
|
|
const showPrizeExhaustedModal = ref(false); |
|
|
|
const showPrizeExhaustedModal1 = ref(false); |
|
|
|
|
|
|
|
// const lotteryState = ref('idle'); // idle, ready, rotating, result |
|
|
|
|
|
|
@ -68,6 +76,11 @@ const waitingForNextReveal = computed({ |
|
|
|
set: (val) => lotteryStore.setWaitingForNextReveal(val), |
|
|
|
}); |
|
|
|
|
|
|
|
const winnerList = computed({ |
|
|
|
get: () => lotteryStore.winnerList, |
|
|
|
set: (val) => lotteryStore.setWinnerList(val), |
|
|
|
}); |
|
|
|
|
|
|
|
const isDisabled = ref(false); |
|
|
|
|
|
|
|
watch(isDisabled, (newVal, oldVal) => { |
|
|
@ -88,6 +101,11 @@ const lotteryEngine = useLotteryEngine(dataManager, { |
|
|
|
}); |
|
|
|
|
|
|
|
onMounted(async () => { |
|
|
|
isDisabled.value = true; |
|
|
|
setTimeout(() => { |
|
|
|
isDisabled.value = false; |
|
|
|
}, 4000); |
|
|
|
|
|
|
|
await dataManager.getBasicData(); |
|
|
|
await dataManager.getUsers(); |
|
|
|
|
|
|
@ -121,12 +139,15 @@ function showLotteryQipao() { |
|
|
|
async function handleLotteryClick() { |
|
|
|
if (isDisabled.value) return; // 2秒内不能重复点击 |
|
|
|
isDisabled.value = true; |
|
|
|
setTimeout(() => { |
|
|
|
isDisabled.value = false; |
|
|
|
}, 2000); |
|
|
|
// setTimeout(() => { |
|
|
|
// isDisabled.value = false; |
|
|
|
// }, 2000); |
|
|
|
|
|
|
|
switch (lotteryState.value) { |
|
|
|
case "idle": |
|
|
|
setTimeout(() => { |
|
|
|
isDisabled.value = false; |
|
|
|
}, 2000); |
|
|
|
// 先切换到球体布局 |
|
|
|
await lottery3DRef.value?.switchScreen?.("lottery"); |
|
|
|
|
|
|
@ -135,6 +156,7 @@ async function handleLotteryClick() { |
|
|
|
|
|
|
|
lotteryState.value = "ready"; |
|
|
|
console.log("lotteryState 变更后:", lotteryState.value); |
|
|
|
|
|
|
|
break; |
|
|
|
case "ready": |
|
|
|
if (waitingForNextReveal.value) { |
|
|
@ -144,25 +166,72 @@ async function handleLotteryClick() { |
|
|
|
setTimeout(() => { |
|
|
|
showPrizeExhaustedModal.value = false; |
|
|
|
}, 1000); |
|
|
|
isDisabled.value = false; |
|
|
|
|
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
if (lastRevealed.value === -1) { |
|
|
|
console.log("lastRevealed.value", lastRevealed.value); |
|
|
|
showPrizeExhaustedModal1.value = true; |
|
|
|
setTimeout(() => { |
|
|
|
showPrizeExhaustedModal1.value = false; |
|
|
|
}, 1000); |
|
|
|
isDisabled.value = false; |
|
|
|
|
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
// 立即切换为“停止抽奖” |
|
|
|
console.log("lotteryState 变更前:", lotteryState.value, "-> rotating"); |
|
|
|
lotteryState.value = "rotating"; |
|
|
|
console.log("lotteryState 变更后:", lotteryState.value); |
|
|
|
// 开始转动 |
|
|
|
// isRunning.value = false; // 无论如何都恢复 |
|
|
|
|
|
|
|
await lottery3DRef.value?.rotateBallStart?.(); |
|
|
|
const prize = dataManager.state.basicData.prizes[lastRevealed.value]; |
|
|
|
console.log("准备调用 drawLottery,prize:", prize); |
|
|
|
console.log("lastRevealed.value:", lastRevealed.value); |
|
|
|
// 先让球转起来,不等它结束 |
|
|
|
const rotatePromise = lottery3DRef.value?.rotateBallStart?.(); |
|
|
|
|
|
|
|
// 同时请求接口 |
|
|
|
try { |
|
|
|
winnerList.value = await drawLottery({ |
|
|
|
perWin: prize.perWin, |
|
|
|
remainNum: prize.remainNum, |
|
|
|
gradeId: prize.gradeId, |
|
|
|
prizeId: prize.prizeId, |
|
|
|
}); |
|
|
|
setTimeout(() => { |
|
|
|
isDisabled.value = false; |
|
|
|
}, 2000); |
|
|
|
|
|
|
|
console.log("drawLottery 调用成功,结果:", winnerList.value); |
|
|
|
} catch (error) { |
|
|
|
console.error("drawLottery 调用失败:", error); |
|
|
|
} |
|
|
|
|
|
|
|
// 如果你还需要等球转完再做别的,可以 await rotatePromise |
|
|
|
|
|
|
|
break; |
|
|
|
case "rotating": |
|
|
|
setTimeout(() => { |
|
|
|
isDisabled.value = false; |
|
|
|
}, 2000); |
|
|
|
// 停止转动并开奖 |
|
|
|
// const prize = dataManager.state.basicData.prizes[lastRevealed.value]; |
|
|
|
// console.log("准备调用 drawLottery,prize:", prize); |
|
|
|
// console.log("lastRevealed.value:", lastRevealed.value); |
|
|
|
// try { |
|
|
|
// winnerList.value = await drawLottery({ |
|
|
|
// perWin: prize.perWin, |
|
|
|
// remainNum: prize.remainNum, |
|
|
|
// gradeId: prize.gradeId, |
|
|
|
// prizeId: prize.prizeId, |
|
|
|
// }); |
|
|
|
// console.log("drawLottery 调用成功,结果:", winnerList.value); |
|
|
|
// } catch (error) { |
|
|
|
// console.error("drawLottery 调用失败:", error); |
|
|
|
// } |
|
|
|
|
|
|
|
await lottery3DRef.value?.rotateBallStop?.(); |
|
|
|
await lotteryEngine.executeLottery(); |
|
|
|
await nextTick(); |
|
|
@ -174,7 +243,11 @@ async function handleLotteryClick() { |
|
|
|
|
|
|
|
break; |
|
|
|
case "result": |
|
|
|
setTimeout(() => { |
|
|
|
isDisabled.value = false; |
|
|
|
}, 2800); |
|
|
|
// result 状态下点击不做任何事,或者你可以加提示 |
|
|
|
|
|
|
|
await lottery3DRef.value?.switchScreen?.("lottery"); |
|
|
|
|
|
|
|
await new Promise((resolve) => setTimeout(resolve, 2500)); |
|
|
|