import React, { useState, useEffect } from 'react' import { View, Text, ScrollView, Swiper, SwiperItem, Image } from '@tarojs/components' import Taro from '@tarojs/taro' import { useUser } from '@/hooks/useUser' import { useScrollHeight } from '@/hooks/useScrollHeight' import { listCmsAd } from '@/api/cms/cmsAd' import { listCmsArticle } from '@/api/cms/cmsArticle' import { pageShopGoods } from '@/api/shop/shopGoods' import type { CmsAd } from '@/api/cms/cmsAd/model' import type { CmsArticle } from '@/api/cms/cmsArticle/model' import type { ShopGoods } from '@/api/shop/shopGoods/model' import Price from '@/components/common/Price' definePageConfig({ navigationBarTitleText: '首页', }) const IndexPage: React.FC = () => { const { user, isLoggedIn } = useUser() const [banners, setBanners] = useState([]) const [announcements, setAnnouncements] = useState([]) const [hotProducts, setHotProducts] = useState([]) const [loading, setLoading] = useState(true) const scrollHeight = useScrollHeight(44) const categories = ['全部', '球拍', '球鞋', '服装', '配件'] // 功能入口(8个) const featureEntries = [ { icon: '🎁', label: '全部商品', url: '/pages/shop/index' }, { icon: '🎯', label: '限时秒杀', url: '/pages/shop/seckill-list/index' }, { icon: '🎫', label: '领券中心', url: '/pages/index/coupon-center/index' }, { icon: '⭐', label: '我的收藏', url: '/pages/user/favorite-list/index' }, { icon: '👑', label: '会员中心', url: '/pages/user/member/index' }, { icon: '💰', label: '积分商城', url: '/pages/points/index' }, { icon: '🏪', label: '门店信息', url: '/pages/store/list/index' }, { icon: '❓', label: '帮助中心', url: '/pages/user/help-center/index' }, ] // 获取轮播图 useEffect(() => { const fetchBanners = async () => { try { const data = await listCmsAd({ adType: 'banner', status: 0 }) setBanners(data || []) } catch (e) { console.error('获取轮播图失败:', e) } } const fetchAnnouncements = async () => { try { const data = await listCmsArticle({ category: 'notice', status: 1 }) setAnnouncements(data || []) } catch (e) { console.error('获取公告失败:', e) } finally { setLoading(false) } } fetchBanners() fetchAnnouncements() fetchHotProducts() }, []) // 获取热销商品 const fetchHotProducts = async () => { try { const res = await pageShopGoods({ page: 1, limit: 4, status: 0, recommend: 1 }) if (res?.list) { setHotProducts(res.list) } } catch (e) { console.error('获取热销商品失败:', e) } } const handleMessageClick = () => { if (!isLoggedIn) { Taro.navigateTo({ url: '/passport/login' }) return } Taro.navigateTo({ url: '/pages/index/notification' }) } // tabBar 页面列表 const tabBarPages = ['/pages/index/index', '/pages/shop/index', '/pages/user/user'] const handleFeatureClick = (url: string) => { if (tabBarPages.includes(url)) { Taro.switchTab({ url }) } else { Taro.navigateTo({ url }) } } return ( {/* 顶部搜索栏 */} Taro.navigateTo({ url: '/pages/index/search' })} > 🔍 搜索商品 🔔 {isLoggedIn && ( )} {/* 轮播图 */} {banners.length > 0 ? ( {banners.map(item => ( { if (item.path) Taro.navigateTo({ url: item.path }) }} /> ))} ) : ( 暂无轮播图 )} {/* 功能入口网格 */} {featureEntries.map(item => ( handleFeatureClick(item.url)} > {item.icon} {item.label} ))} {/* 公告栏 */} {announcements.length > 0 && ( 公告 {announcements.map(item => ( Taro.navigateTo({ url: `/pages/index/article-detail?id=${item.articleId}` })} > {item.title} ))} )} {/* 分类导航 */} 商品分类 {categories.map((item) => ( Taro.navigateTo({ url: '/pages/shop/category' })} > {item.slice(0, 1)} {item} ))} {/* 热销推荐 */} 热销推荐 Taro.switchTab({ url: '/pages/shop/index' })} > 查看更多 {'>'} {hotProducts.length > 0 ? ( hotProducts.map((item) => ( Taro.navigateTo({ url: `/pages/shop/product-detail?id=${item.goodsId}` })} > {item.image ? ( ) : ( 暂无图片 )} {item.goodsName || item.name} {item.sales !== undefined && item.sales > 0 && ( 已售 {item.sales} )} )) ) : ( 暂无热销商品 )} ) } export default IndexPage