无限动画逻辑更新

This commit is contained in:
tsui110 2025-12-22 11:37:00 +08:00
parent 0e174f220b
commit 2d218018e8
2 changed files with 49 additions and 14 deletions

View File

@ -137,7 +137,7 @@
</template>
<script setup>
import { ref, computed } from 'vue'
import { ref, computed, nextTick } from 'vue'
import FlipGrid from '../../../components/FlipGrid.vue'
import { onLoad } from '@dcloudio/uni-app'
import PaymentPopup from '../../../components/PaymentPopup.vue'
@ -422,9 +422,46 @@ async function fetchCoupons() {
}
}
function buildRewardLookup(list) {
const map = new Map()
const arr = Array.isArray(list) ? list : []
arr.forEach(it => {
const id = it && (it.id ?? it.reward_id ?? it.product_id)
const key = Number(id)
if (Number.isFinite(key)) map.set(key, it)
})
return map
}
function extractResultList(resultRes) {
const root = resultRes && (resultRes.data ?? resultRes.result ?? resultRes)
if (!root) return []
if (Array.isArray(root.results)) return root.results
if (Array.isArray(root.list)) return root.list
if (Array.isArray(root.items)) return root.items
if (Array.isArray(root.data)) return root.data
if (root.results && root.results.data && Array.isArray(root.results.data)) return root.results.data
return []
}
function mapResultsToFlipItems(resultRes, poolRewards) {
const list = extractResultList(resultRes)
const lookup = buildRewardLookup(poolRewards)
const poolArr = Array.isArray(poolRewards) ? poolRewards : []
return list.filter(Boolean).map(d => {
const rewardId = d.reward_id ?? d.rewardId ?? d.product_id ?? d.productId ?? d.id
const rewardName = String((d.reward_name ?? d.rewardName ?? d.product_name ?? d.productName ?? d.title ?? d.name) || '')
const key = Number(rewardId)
const fromId = Number.isFinite(key) ? lookup.get(key) : null
const fromName = !fromId && rewardName ? (poolArr.find(x => String(x && x.title || '') === rewardName) || poolArr.find(x => String(x && x.title || '').includes(rewardName))) : null
const it = fromId || fromName || null
const title = rewardName || String((it && it.title) || '奖励')
const image = String((it && it.image) || d.image || d.img || d.pic || d.product_image || '')
return { title, image }
})
}
async function onMachineDraw(count) {
showFlip.value = true
try { if (flipRef.value && flipRef.value.reset) flipRef.value.reset() } catch (_) {}
const aid = activityId.value || ''
const iid = currentIssueId.value || ''
if (!aid || !iid) { uni.showToast({ title: '期数未选择', icon: 'none' }); return }
@ -468,16 +505,14 @@ async function onMachineDraw(count) {
})
})
const resultRes = await getLotteryResult(orderNo)
const raw = resultRes && (resultRes.list || resultRes.items || resultRes.data || resultRes.result || resultRes)
const arr = Array.isArray(raw) ? raw : (Array.isArray(resultRes?.data) ? resultRes.data : [raw])
const items = arr.filter(Boolean).map(d => {
const title = String((d && (d.title || d.name || d.product_name)) || '奖励')
const image = String((d && (d.image || d.img || d.pic || d.product_image)) || '')
return { title, image }
})
if (flipRef.value && flipRef.value.revealResults) flipRef.value.revealResults(items)
const items = mapResultsToFlipItems(resultRes, currentIssueRewards.value)
showFlip.value = true
await nextTick()
try { if (flipRef.value && flipRef.value.reset) flipRef.value.reset() } catch (_) {}
setTimeout(() => {
if (flipRef.value && flipRef.value.revealResults) flipRef.value.revealResults(items)
}, 100)
} catch (e) {
if (flipRef.value && flipRef.value.revealResults) flipRef.value.revealResults([{ title: e.message || '抽选失败', image: '' }])
uni.showToast({ title: e.message || '操作失败', icon: 'none' })
} finally {
drawLoading.value = false

View File

@ -1,4 +1,4 @@
const BASE_URL = 'http://localhost:9991'
const BASE_URL = 'https://mini-chat.1024tool.vip'
let authModalShown = false
@ -119,4 +119,4 @@ function buildDefaultHeaders() {
'Cache-Control': 'no-cache',
'User-Agent': `UniApp/${platform} (${brand} ${model}; ${osName} ${osVersion}) MiniProgram`
}
}
}