import React, { useState, useEffect } from 'react' import { View, Text, Image, ScrollView, RichText } from '@tarojs/components' import Taro, { useRouter, useShareAppMessage } from '@tarojs/taro' import { getShopPointsProduct } from '@/api/shop/shopPointsProduct' import type { ShopPointsProduct } from '@/api/shop/shopPointsProduct/model' import EmptyState from '@/components/common/EmptyState' definePageConfig({ navigationBarTitleText: '积分商品', }) const PointsProductDetail: React.FC = () => { const router = useRouter() const id = Number(router.params.id) const [product, setProduct] = useState(null) const [loading, setLoading] = useState(true) // 微信分享 useShareAppMessage(() => { return { title: product?.productName || '积分商品推荐', path: `/pages/points/product-detail?id=${id}`, imageUrl: product?.productImage || '' } }) useEffect(() => { if (id) { loadProduct() } }, [id]) const loadProduct = async () => { setLoading(true) try { const data = await getShopPointsProduct(id) setProduct(data) } catch (e) { console.error('加载积分商品失败:', e) Taro.showToast({ title: '加载失败', icon: 'none' }) } finally { setLoading(false) } } const getProductTypeLabel = (type?: number) => { switch (type) { case 0: return '实物商品' case 1: return '优惠券' case 2: return '虚拟商品' default: return '商品' } } const handleExchange = () => { if (!product) return if ((product.stock || 0) <= 0) { Taro.showToast({ title: '商品已售罄', icon: 'none' }) return } // 跳转兑换确认页,传递商品信息 Taro.navigateTo({ url: `/pages/points/exchange/index?id=${product.id}` }) } if (loading) { return ( ) } if (!product) { return ( ) } const isSoldOut = (product.stock || 0) <= 0 return ( {/* 商品图片 */} {product.productImage ? ( Taro.previewImage({ current: product.productImage, urls: [product.productImage!] })} /> ) : ( 暂无图片 )} {/* 价格与基本信息 */} {getProductTypeLabel(product.productType)} {product.isHot === 1 && ( 热门 )} {product.productName || '积分商品'} {product.pointsPrice || 0} 积分 {Number(product.moneyPrice) > 0 && ( <> + {'\u00A5'}{product.moneyPrice} )} 已兑换 {product.sales || 0} 件 {isSoldOut ? '已售罄' : `剩余 ${product.stock || 0} 件`} {/* 商品描述 */} {product.description && ( 商品介绍 )} {/* 底部占位,防止被固定栏遮挡 */} {/* 底部兑换按钮 */} {isSoldOut ? '已售罄' : '立即兑换'} ) } export default PointsProductDetail