73 lines
2.0 KiB
JavaScript
73 lines
2.0 KiB
JavaScript
/**
|
|
* 活动数据管理 Composable
|
|
*/
|
|
import { ref, computed } from 'vue'
|
|
import { getActivityDetail } from '@/api/appUser'
|
|
import { cleanUrl } from '@/utils/format'
|
|
import { statusToText } from '@/utils/activity'
|
|
|
|
/**
|
|
* 活动数据管理
|
|
* @param {Ref<string>} activityIdRef - 活动ID的响应式引用
|
|
*/
|
|
export function useActivity(activityIdRef) {
|
|
const detail = ref({})
|
|
const loading = ref(false)
|
|
|
|
const coverUrl = computed(() => {
|
|
const d = detail.value || {}
|
|
return cleanUrl(d.image || d.banner || d.cover || '')
|
|
})
|
|
|
|
const statusText = computed(() => statusToText(detail.value?.status))
|
|
|
|
const pricePerDraw = computed(() => {
|
|
const cents = Number(detail.value?.price_draw || 0)
|
|
return cents / 100
|
|
})
|
|
|
|
const activityName = computed(() => {
|
|
const d = detail.value || {}
|
|
return d.name || d.title || ''
|
|
})
|
|
|
|
const scheduledTime = computed(() => detail.value?.scheduled_time || detail.value?.scheduledTime || '')
|
|
|
|
async function fetchDetail() {
|
|
const id = activityIdRef?.value || activityIdRef
|
|
console.log('[useActivity] fetchDetail called with activityId:', id)
|
|
if (!id) return
|
|
loading.value = true
|
|
try {
|
|
const data = await getActivityDetail(id)
|
|
detail.value = data || {}
|
|
console.log('[useActivity] getActivityDetail response:', data)
|
|
console.log('[useActivity] play_type:', data?.play_type)
|
|
} catch (e) {
|
|
console.error('fetchDetail error', e)
|
|
detail.value = {}
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
function setNavigationTitle(fallback = '活动') {
|
|
const title = activityName.value || fallback
|
|
try {
|
|
uni.setNavigationBarTitle({ title })
|
|
} catch (_) { }
|
|
}
|
|
|
|
return {
|
|
detail,
|
|
loading,
|
|
coverUrl,
|
|
statusText,
|
|
pricePerDraw,
|
|
activityName,
|
|
scheduledTime,
|
|
fetchDetail,
|
|
setNavigationTitle
|
|
}
|
|
}
|