topfans/frontend/pages/square/composables/useBanner.js
2026-04-13 16:16:41 +08:00

40 lines
1.3 KiB
JavaScript

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