37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
import { ref } from 'vue'
|
|
import { getConstByKey } from '@/api/const'
|
|
|
|
export function useBanners() {
|
|
const banners = ref([])
|
|
const loading = ref(false)
|
|
|
|
const loadBanners = async () => {
|
|
try {
|
|
loading.value = true
|
|
const response = await getConstByKey('header_banner')
|
|
if (!response) return
|
|
|
|
let list = []
|
|
if (typeof response === 'string') {
|
|
list = JSON.parse(response)
|
|
} else if (typeof response === 'object' && !Array.isArray(response) && 'value' in response) {
|
|
list = typeof response.value === 'string' ? JSON.parse(response.value) : response.value
|
|
} else if (Array.isArray(response) && response.length > 0) {
|
|
const first = response[0]
|
|
if (first.value) {
|
|
list = typeof first.value === 'string' ? JSON.parse(first.value) : first.value
|
|
} else if (first.icon) {
|
|
list = response
|
|
}
|
|
}
|
|
|
|
banners.value = Array.isArray(list) ? list.filter(b => b.show === true) : []
|
|
} catch (error) {
|
|
console.error('Error loading banners:', error)
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
return { banners, loading, loadBanners }
|
|
} |