feat(每日充值活动): 针对数据的获取问题进行调整
This commit is contained in:
parent
16c9bb70c0
commit
d217d9de78
@ -70,7 +70,7 @@ export const apiGetActivityResource = async (activityType) => {
|
|||||||
return response
|
return response
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to get activity resource:', error)
|
console.error('Failed to get activity resource:', error)
|
||||||
console.error('error:' + error.response.errorMsg)
|
console.error('error:' + (error.response?.errorMsg || error.errorMsg || error.message || ''))
|
||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -82,7 +82,7 @@ export const getDailyRechargeInfo = async () => {
|
|||||||
return response
|
return response
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to get daily recharge info:', error)
|
console.error('Failed to get daily recharge info:', error)
|
||||||
console.error('error:' + error.response.errorMsg)
|
console.error('error:' + (error.response?.errorMsg || error.errorMsg || error.message || ''))
|
||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -94,7 +94,7 @@ export const claimDailyRechargeTask1 = async (data) => {
|
|||||||
return response
|
return response
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to claim daily recharge task1 reward:', error)
|
console.error('Failed to claim daily recharge task1 reward:', error)
|
||||||
console.error('error:' + error.response.errorMsg)
|
console.error('error:' + (error.response?.errorMsg || error.errorMsg || error.message || ''))
|
||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -106,7 +106,7 @@ export const claimDailyRechargeTask2 = async (data) => {
|
|||||||
return response
|
return response
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to claim daily recharge task2 reward:', error)
|
console.error('Failed to claim daily recharge task2 reward:', error)
|
||||||
console.error('error:' + error.response.errorMsg)
|
console.error('error:' + (error.response?.errorMsg || error.errorMsg || error.message || ''))
|
||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -334,7 +334,7 @@ justify-content: flex-start;
|
|||||||
class="reward-showcase-vap-wrap"
|
class="reward-showcase-vap-wrap"
|
||||||
:key="mainRewardRenderKey"
|
:key="mainRewardRenderKey"
|
||||||
:class="{
|
:class="{
|
||||||
'reward-showcase-vap-wrap-playable': isIosDevice && mainReward?.sourceUrl,
|
'reward-showcase-vap-wrap-playable': isIosDevice && mainRewardVapSourceUrl,
|
||||||
}"
|
}"
|
||||||
@click="handleMainRewardPreviewClick"
|
@click="handleMainRewardPreviewClick"
|
||||||
>
|
>
|
||||||
@ -782,7 +782,7 @@ const mainReward = computed(() => {
|
|||||||
return selectedRewardList.value[0] || null
|
return selectedRewardList.value[0] || null
|
||||||
})
|
})
|
||||||
const mainRewardVapSourceUrl = computed(() => {
|
const mainRewardVapSourceUrl = computed(() => {
|
||||||
return normalizeVapSourceUrl(mainReward.value?.sourceUrl)
|
return getRewardVapSourceUrl(mainReward.value)
|
||||||
})
|
})
|
||||||
const shouldPlayMainRewardVap = computed(() => {
|
const shouldPlayMainRewardVap = computed(() => {
|
||||||
return (
|
return (
|
||||||
@ -813,8 +813,35 @@ const getRewardDisplayText = (reward) => {
|
|||||||
return formatRewardDisplay(reward.type, reward)
|
return formatRewardDisplay(reward.type, reward)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const isEmptySourceValue = (value) => {
|
||||||
|
if (typeof value !== 'string' && typeof value !== 'number') {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return ['', 'null', 'undefined'].includes(String(value || '').trim().toLowerCase())
|
||||||
|
}
|
||||||
|
|
||||||
|
const getRewardRawSourceUrl = (reward = {}) => {
|
||||||
|
const sourceCandidates = [
|
||||||
|
reward.sourceUrl,
|
||||||
|
reward.mp4Url,
|
||||||
|
reward.vapUrl,
|
||||||
|
reward.animationUrl,
|
||||||
|
reward.resourceUrl,
|
||||||
|
reward.dynamicUrl,
|
||||||
|
reward.url,
|
||||||
|
reward?.source?.url,
|
||||||
|
reward?.resource?.url,
|
||||||
|
reward?.extValues?.sourceUrl,
|
||||||
|
reward?.extValues?.mp4Url,
|
||||||
|
reward?.extValues?.vapUrl,
|
||||||
|
]
|
||||||
|
|
||||||
|
return sourceCandidates.find((value) => !isEmptySourceValue(value)) || ''
|
||||||
|
}
|
||||||
|
|
||||||
const normalizeVapSourceUrl = (sourceUrl = '') => {
|
const normalizeVapSourceUrl = (sourceUrl = '') => {
|
||||||
const resolvedUrl = resolveProtectedAssetUrl(sourceUrl || '').trim()
|
const resolvedUrl = String(resolveProtectedAssetUrl(sourceUrl || '') || '').trim()
|
||||||
if (!resolvedUrl) {
|
if (!resolvedUrl) {
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
@ -846,6 +873,19 @@ const normalizeVapSourceUrl = (sourceUrl = '') => {
|
|||||||
return `https://${resolvedUrl}`
|
return `https://${resolvedUrl}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const isValidVapSourceUrl = (sourceUrl = '') => {
|
||||||
|
if (!sourceUrl) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return /^https?:\/\/.+\.mp4(?:[?#].*)?$/i.test(sourceUrl) || /^\/oss\/.+\.mp4(?:[?#].*)?$/i.test(sourceUrl)
|
||||||
|
}
|
||||||
|
|
||||||
|
const getRewardVapSourceUrl = (reward = {}) => {
|
||||||
|
const sourceUrl = normalizeVapSourceUrl(getRewardRawSourceUrl(reward))
|
||||||
|
return isValidVapSourceUrl(sourceUrl) ? sourceUrl : ''
|
||||||
|
}
|
||||||
|
|
||||||
const getRewardRenderKey = (reward, index) => {
|
const getRewardRenderKey = (reward, index) => {
|
||||||
return [
|
return [
|
||||||
selectedRewardLevel.value,
|
selectedRewardLevel.value,
|
||||||
@ -853,14 +893,14 @@ const getRewardRenderKey = (reward, index) => {
|
|||||||
reward?.type || '',
|
reward?.type || '',
|
||||||
reward?.detailType || '',
|
reward?.detailType || '',
|
||||||
reward?.cover || '',
|
reward?.cover || '',
|
||||||
reward?.sourceUrl || '',
|
getRewardVapSourceUrl(reward) || '',
|
||||||
].join('-')
|
].join('-')
|
||||||
}
|
}
|
||||||
|
|
||||||
const getRewardVapUrls = (rewardTopList) => {
|
const getRewardVapUrls = (rewardTopList) => {
|
||||||
return (rewardTopList || [])
|
return (rewardTopList || [])
|
||||||
.flatMap((rewardTop) => rewardTop?.propsGroup?.activityRewardProps || [])
|
.flatMap((rewardTop) => rewardTop?.propsGroup?.activityRewardProps || [])
|
||||||
.map((reward) => normalizeVapSourceUrl(reward?.sourceUrl))
|
.map((reward) => getRewardVapSourceUrl(reward))
|
||||||
.filter(Boolean)
|
.filter(Boolean)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1063,7 +1103,6 @@ const handleRewardVapError = (error, sourceUrl = '') => {
|
|||||||
if (normalizedSourceUrl) {
|
if (normalizedSourceUrl) {
|
||||||
failedRewardVapUrls.value = new Set([...failedRewardVapUrls.value, normalizedSourceUrl])
|
failedRewardVapUrls.value = new Set([...failedRewardVapUrls.value, normalizedSourceUrl])
|
||||||
}
|
}
|
||||||
showError(error?.message || t('active_game_vap_playback_failed'))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleMainRewardPreviewClick = () => {
|
const handleMainRewardPreviewClick = () => {
|
||||||
@ -1125,18 +1164,64 @@ const getDailyRechargeTaskInfo = async () => {
|
|||||||
levelList: Array.isArray(res.body.levelList) ? res.body.levelList : [],
|
levelList: Array.isArray(res.body.levelList) ? res.body.levelList : [],
|
||||||
}
|
}
|
||||||
selectedRewardLevel.value = currentLevel.value
|
selectedRewardLevel.value = currentLevel.value
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
throw new Error('Invalid daily recharge task info response')
|
||||||
}
|
}
|
||||||
|
|
||||||
const getActivityRewards = async () => {
|
const getActivityRewards = async () => {
|
||||||
const res = await apiGetActivityResource('DAILY_RECHARGE_TASK2')
|
const res = await apiGetActivityResource('DAILY_RECHARGE_TASK2')
|
||||||
if (res.status && res.body) {
|
if (res.status && res.body) {
|
||||||
activityRewards.value = Array.isArray(res.body) ? appendExtraRewards(res.body) : []
|
activityRewards.value = Array.isArray(res.body) ? appendExtraRewards(res.body) : []
|
||||||
|
failedRewardVapUrls.value = new Set()
|
||||||
|
rewardVapPreloadStarted = false
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
throw new Error('Invalid daily recharge activity reward response')
|
||||||
|
}
|
||||||
|
|
||||||
|
const delay = (duration) => {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
window.setTimeout(resolve, duration)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const runWithRetry = async (runner, retryCount = 1, retryDelay = 600) => {
|
||||||
|
let lastError = null
|
||||||
|
|
||||||
|
for (let attempt = 0; attempt <= retryCount; attempt += 1) {
|
||||||
|
try {
|
||||||
|
return await runner()
|
||||||
|
} catch (error) {
|
||||||
|
lastError = error
|
||||||
|
if (attempt < retryCount) {
|
||||||
|
await delay(retryDelay)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw lastError
|
||||||
}
|
}
|
||||||
|
|
||||||
const initData = async () => {
|
const initData = async () => {
|
||||||
await Promise.all([getDailyRechargeTaskInfo(), getActivityRewards()])
|
const [taskResult, rewardResult] = await Promise.allSettled([
|
||||||
|
runWithRetry(getDailyRechargeTaskInfo, 2, 800),
|
||||||
|
runWithRetry(getActivityRewards, 1, 800),
|
||||||
|
])
|
||||||
|
|
||||||
|
if (taskResult.status === 'rejected') {
|
||||||
|
console.error('Failed to initialize daily recharge task info:', taskResult.reason)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rewardResult.status === 'rejected') {
|
||||||
|
console.error('Failed to initialize daily recharge activity rewards:', rewardResult.reason)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (taskResult.status === 'rejected' && rewardResult.status === 'rejected') {
|
||||||
|
throw taskResult.reason || rewardResult.reason
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const preloadCriticalImages = async () => {
|
const preloadCriticalImages = async () => {
|
||||||
@ -1190,8 +1275,8 @@ const startPageInitialization = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const connectToAppHandler = async () => {
|
const connectToAppHandler = async () => {
|
||||||
const result = await connectToApp(() => {
|
const result = await connectToApp(async () => {
|
||||||
void startPageInitialization()
|
await startPageInitialization()
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!result?.success) {
|
if (!result?.success) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user