import { ref } from 'vue' import { getActivityListApi, getOssPresignedUrlApi } from '@/utils/api.js' export function useBanner() { const bannerActivities = ref([]) const loadBannerActivities = async () => { try { const starId = uni.getStorageSync('star_id') || null const res = await getActivityListApi(starId, 'active', 1, 3) if (res.code === 200 && res.data?.activities) { const activities = res.data.activities // 并行获取所有 OSS URL const urlPromises = activities.map(async (item) => { if (!item.cover_image) return { item, url: null } try { const r = await getOssPresignedUrlApi(item.cover_image, 3600, 'avatar') return { item, url: r?.code === 200 && r.data?.url ? r.data.url : null } } catch (e) { console.error('[useBanner] 获取 OSS URL 失败', e) return { item, url: null } } }) const results = await Promise.all(urlPromises) bannerActivities.value = results.map(({ item, url }) => url ? { ...item, cover_image: url } : item ) } } catch (e) { console.error('[useBanner] 加载 banner 活动失败', e?.message ?? e) } } return { bannerActivities, loadBannerActivities, } }