import {useEffect, useState} from 'react' import {View} from '@tarojs/components' import {Swiper} from '@nutui/nutui-react-taro' import {CmsAd} from "@/api/cms/cmsAd/model"; import {Image} from '@nutui/nutui-react-taro' import {getCmsAdByCode} from "@/api/cms/cmsAd"; import navTo from "@/utils/common"; import {pageCmsArticle} from "@/api/cms/cmsArticle"; import {CmsArticle} from "@/api/cms/cmsArticle/model"; const MyPage = () => { const [carouselData, setCarouselData] = useState() const [hotToday, setHotToday] = useState() const [item, setItem] = useState() const [loading, setLoading] = useState(true) // 加载数据 const loadData = async () => { try { setLoading(true) // 轮播图 const flash = await getCmsAdByCode('flash') // 今日热卖 const hotToday = await getCmsAdByCode('hot_today') // 时里动态 const news = await pageCmsArticle({limit:1,recommend:1}) // 赋值 if(flash){ setCarouselData(flash) } if(hotToday){ setHotToday(hotToday) } if(news && news.list.length > 0){ setItem(news.list[0]) } } catch (error) { console.error('Banner数据加载失败:', error) } finally { setLoading(false) } } useEffect(() => { loadData() }, []) // 轮播图高度,默认300px const carouselHeight = carouselData?.height || 300; // 骨架屏组件 const BannerSkeleton = () => ( {/* 左侧轮播图骨架屏 */} {/* 右侧骨架屏 */} {/* 上层骨架屏 */} {[1, 2].map(i => ( ))} {/* 下层骨架屏 */} ) // 如果正在加载,显示骨架屏 if (loading) { return } return ( {/* 左侧轮播图区域 */} {carouselData && carouselData?.imageList?.map((img, index) => ( navTo(`${img.path}`)} lazyLoad={false} style={{ height: `${carouselHeight}px`, borderRadius: '4px' }} /> ))} {/* 右侧上下图片区域 - 从API获取数据 */} {/* 上层图片 - 使用今日热卖素材 */} 今日热卖 { hotToday?.imageList?.map(item => ( navTo('/shop/category/index?id=4424')} /> {item.title || '到手价¥9.9'} )) } {/* 下层图片 - 使用社区拼团素材 */} 走进社区 navTo('cms/detail/index?id=' + item?.articleId)} /> ) } export default MyPage