import { useState } from 'react'; import { View, Image, Swiper, SwiperItem } from '@tarojs/components'; import Taro from '@tarojs/taro'; type ProductCarouselProps = { images: string[]; alt: string; variant?: 'home' | 'detail' | 'store'; previewable?: boolean; }; /** 商品/门店轮播(对齐 h5 ProductCarousel 三变体) */ export default function ProductCarousel({ images, alt, variant = 'detail', previewable = false, }: ProductCarouselProps) { const slides = images.length > 0 ? images : ['']; const [activeIndex, setActiveIndex] = useState(0); const prefix = variant === 'store' ? 'store-detail-carousel' : variant === 'home' ? 'home-carousel' : 'detail-carousel'; function previewAt(index: number) { const urls = slides.filter(Boolean); if (!urls.length) return; const current = slides[index] || urls[0]; Taro.previewImage({ current, urls }).catch(() => undefined); } return ( 1} onChange={(e) => setActiveIndex(e.detail.current)} > {slides.map((src, index) => ( {src ? ( {alt} previewAt(index) : undefined} /> ) : ( )} ))} {slides.length > 1 ? ( {slides.map((_, index) => ( ))} ) : null} ); }