无限动画逻辑更新
This commit is contained in:
parent
0e174f220b
commit
2d218018e8
@ -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
|
||||
|
||||
@ -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`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user