71 lines
1.9 KiB
JavaScript
71 lines
1.9 KiB
JavaScript
import { ref } from 'vue'
|
|
import { getActivityListApi, getMintingActivitiesApi } from '@/utils/api.js'
|
|
|
|
// 默认 banner(接口失败/无数据时兜底)
|
|
const FALLBACK_BANNER = [
|
|
{
|
|
image_url: '/static/sucai/image-05.png',
|
|
title: '这河非遇美学宇宙联名',
|
|
link_type: 'activity',
|
|
link_value: '1'
|
|
}
|
|
]
|
|
|
|
export function useBanner() {
|
|
// 旧的活动 banner(square 顶部)
|
|
const bannerActivities = ref([])
|
|
|
|
// 新的运营 banner(铸造活动)
|
|
const banners = ref([])
|
|
|
|
const loadBannerActivities = async () => {
|
|
try {
|
|
const starId = uni.getStorageSync('star_id') || null
|
|
const res = await getActivityListApi(starId, 1, 10)
|
|
|
|
if (res.code === 200 && res.data?.activities) {
|
|
const activities = res.data.activities
|
|
// 过滤掉已过期的活动
|
|
bannerActivities.value = activities.filter(item => item.status !== 'expired')
|
|
}
|
|
} catch (e) {
|
|
console.error('[useBanner] 加载 banner 活动失败', e?.message ?? e)
|
|
}
|
|
}
|
|
|
|
// 加载运营 banner(铸造活动)
|
|
const loadBanners = async () => {
|
|
try {
|
|
const res = await getMintingActivitiesApi(null, 1, 10)
|
|
|
|
if (res.code === 200 && res.data?.activities) {
|
|
// 将后端数据映射为 BannerCarousel 约定的字段
|
|
banners.value = res.data.activities.map(activity => ({
|
|
id: activity.id,
|
|
image_url: activity.cover_image,
|
|
title: activity.title,
|
|
link_type: 'activity',
|
|
link_value: String(activity.id),
|
|
description: activity.description,
|
|
route: activity.route
|
|
}))
|
|
}
|
|
|
|
// 无数据兜底
|
|
if (banners.value.length === 0) {
|
|
banners.value = [...FALLBACK_BANNER]
|
|
}
|
|
} catch (e) {
|
|
console.error('[useBanner] 加载运营 banner 失败', e?.message ?? e)
|
|
banners.value = [...FALLBACK_BANNER]
|
|
}
|
|
}
|
|
|
|
return {
|
|
bannerActivities,
|
|
banners,
|
|
loadBannerActivities,
|
|
loadBanners
|
|
}
|
|
}
|