import { View, Text, Image } from '@tarojs/components'; import Taro, { useRouter } from '@tarojs/taro'; import { useState, useEffect } from 'react'; import { getBenefitPackageDetail, exchangeBenefitPackage } from '@/api/shop/shopMemberBenefit'; import { getDefaultAddress } from '@/api/shop/shopUserAddress'; import { getUserBalance } from '@/api/system/user/balance'; import './index.scss'; definePageConfig({ navigationBarTitleText: '确认兑换', }); export default function BenefitExchangeConfirmPage() { const router = useRouter(); const pkgId = Number(router.params.id); const [pkg, setPkg] = useState(null); const [address, setAddress] = useState(null); const [userBalance, setUserBalance] = useState('--'); const [userPoints, setUserPoints] = useState('--'); const [submitting, setSubmitting] = useState(false); useEffect(() => { loadPackage(); loadAddress(); loadUserBalance(); }, []); const loadPackage = async () => { const res = await getBenefitPackageDetail(pkgId); if (res.code === 200) setPkg(res.data); }; const loadAddress = async () => { const res = await getDefaultAddress(); if (res.code === 200 && res.data) setAddress(res.data); }; const loadUserBalance = async () => { try { const data = await getUserBalance(); setUserBalance(data.balance || '0'); setUserPoints(String(data.points || 0)); } catch { // ignore } }; const handleSelectAddress = () => { Taro.navigateTo({ url: '/pages/user/address-list?select=1' }); }; const handleExchange = async () => { if (!pkg) return; if (pkg.needShip && !address) { Taro.showToast({ title: '请先选择收货地址', icon: 'none' }); return; } Taro.showModal({ title: '确认兑换', content: `确认兑换「${pkg.name}」?`, success: async (res) => { if (!res.confirm) return; setSubmitting(true); try { const res2 = await exchangeBenefitPackage({ packageId: pkgId, addressId: address?.id, }); if (res2.code === 200) { Taro.showToast({ title: '兑换申请成功', icon: 'success' }); setTimeout(() => { Taro.redirectTo({ url: '/pages/user/benefit-exchange-list/index' }); }, 1500); } else { Taro.showToast({ title: res2.message || '兑换失败', icon: 'none' }); } } catch (e) { Taro.showToast({ title: '网络错误', icon: 'none' }); } finally { setSubmitting(false); } }, }); }; if (!pkg) return null; return ( {/* 收货地址 */} {pkg.needShip === 1 && ( {address ? ( <> {address.name} {address.phone} {address.province}{address.city}{address.district}{address.detail} ) : ( + 请选择收货地址 )} > )} {/* 权益包信息 */} {pkg.coverImage && ( )} {pkg.name} {pkg.description && ( {pkg.description} )} {pkg.pointsCost > 0 && ( {pkg.pointsCost} 积分 )} {pkg.balanceCost > 0 && ( ¥{pkg.balanceCost} )} {!pkg.pointsCost && !pkg.balanceCost && ( 免费兑换 )} {/* 我的资产 */} 我的资产 {pkg.pointsCost > 0 && ( {userPoints} 当前积分 )} {pkg.balanceCost > 0 && ( {userBalance} 当前余额 )} {/* 须知 */} 兑换须知 · 兑换后平台将安排配送,请耐心等待 · 仅待处理状态可申请取消 · 如有问题请联系客服 {pkg.validDays && ( · 权益有效期:{pkg.validDays}天 )} {/* 底部按钮 */} {submitting ? '提交中...' : '确认兑换'} ); }