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 } }