1.修复自动创建下一期bug
This commit is contained in:
@@ -278,6 +278,8 @@ const serverSkewSeconds = ref(0)
|
||||
const clockTick = ref(0)
|
||||
let clockTimer: number | null = null
|
||||
let payoutStuckRefreshTimer: number | null = null
|
||||
let drawStuckRefreshTimer: number | null = null
|
||||
let drawStuckSeconds = 0
|
||||
let fallbackPollTimer: number | null = null
|
||||
let betStreamRefreshTimer: number | null = null
|
||||
/** 合并并发 snapshot 请求,避免 axios 重复请求取消导致控制台报错 */
|
||||
@@ -1003,10 +1005,44 @@ function schedulePayoutEndRefresh(delayMs: number): void {
|
||||
if (!snapshot.is_payout_phase) {
|
||||
return
|
||||
}
|
||||
if (!wsConnected.value) {
|
||||
void loadSnapshot({ force: true })
|
||||
}, delayMs)
|
||||
}
|
||||
|
||||
/** 下注/开奖倒计时均已归零但仍未进入派彩(常见于 live ticker 未跑或开奖锁竞争失败) */
|
||||
function isPrePayoutDrawStuck(): boolean {
|
||||
if (snapshot.is_payout_phase || !snapshot.can_calculate) {
|
||||
return false
|
||||
}
|
||||
const bet = snapshot.bet_remaining_seconds ?? 0
|
||||
const draw = snapshot.remaining_seconds ?? 0
|
||||
if (bet > 0 || draw > 0) {
|
||||
return false
|
||||
}
|
||||
const st = numberValue(snapshot.record?.status)
|
||||
return st === 0 || st === 1
|
||||
}
|
||||
|
||||
function tickPrePayoutDrawStuckRecovery(): void {
|
||||
if (!isPrePayoutDrawStuck()) {
|
||||
drawStuckSeconds = 0
|
||||
if (drawStuckRefreshTimer !== null) {
|
||||
window.clearTimeout(drawStuckRefreshTimer)
|
||||
drawStuckRefreshTimer = null
|
||||
}
|
||||
return
|
||||
}
|
||||
drawStuckSeconds++
|
||||
if (drawStuckSeconds < 8 || drawStuckRefreshTimer !== null) {
|
||||
return
|
||||
}
|
||||
drawStuckRefreshTimer = window.setTimeout(() => {
|
||||
drawStuckRefreshTimer = null
|
||||
drawStuckSeconds = 0
|
||||
if (isPrePayoutDrawStuck()) {
|
||||
void loadSnapshot({ force: true })
|
||||
}
|
||||
}, delayMs)
|
||||
}, 300)
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
@@ -1014,6 +1050,7 @@ onMounted(async () => {
|
||||
window.addEventListener('resize', updateIsMobile)
|
||||
clockTimer = window.setInterval(() => {
|
||||
clockTick.value++
|
||||
tickPrePayoutDrawStuckRecovery()
|
||||
}, 1000)
|
||||
fallbackPollTimer = window.setInterval(() => {
|
||||
if (!wsConnected.value) {
|
||||
@@ -1040,6 +1077,10 @@ onUnmounted(() => {
|
||||
window.clearTimeout(payoutStuckRefreshTimer)
|
||||
payoutStuckRefreshTimer = null
|
||||
}
|
||||
if (drawStuckRefreshTimer !== null) {
|
||||
window.clearTimeout(drawStuckRefreshTimer)
|
||||
drawStuckRefreshTimer = null
|
||||
}
|
||||
if (betStreamRefreshTimer !== null) {
|
||||
window.clearTimeout(betStreamRefreshTimer)
|
||||
betStreamRefreshTimer = null
|
||||
|
||||
Reference in New Issue
Block a user