import {useEffect, useState} from "react"; import {Image, Button, Cell, CellGroup, Input, Space} from '@nutui/nutui-react-taro' import {Location, ArrowRight} from '@nutui/icons-react-taro' import Taro from '@tarojs/taro' import {ShopGoods} from "@/api/shop/shopGoods/model"; import {getShopGoods} from "@/api/shop/shopGoods"; import {View} from '@tarojs/components'; import {listShopUserAddress} from "@/api/shop/shopUserAddress"; import {ShopUserAddress} from "@/api/shop/shopUserAddress/model"; import './index.scss' import {useCart, CartItem} from "@/hooks/useCart"; import Gap from "@/components/Gap"; import {Payment} from "@/api/system/payment/model"; import {PaymentHandler, PaymentType, buildCartOrder} from "@/utils/payment"; const OrderConfirm = () => { const [goods, setGoods] = useState(null); const [address, setAddress] = useState() const [payment, setPayment] = useState() const [checkoutItems, setCheckoutItems] = useState([]); const router = Taro.getCurrentInstance().router; const goodsId = router?.params?.goodsId; const { cartItems, removeFromCart } = useCart(); console.log(goods, 'goods>>>>') console.log(setPayment,'setPayment>>>') const reload = async () => { const address = await listShopUserAddress({isDefault: true}); if (address.length > 0) { console.log(address, '111') setAddress(address[0]) } } // 加载结算商品数据 const loadCheckoutItems = () => { try { const checkoutData = Taro.getStorageSync('checkout_items'); if (checkoutData) { const items = JSON.parse(checkoutData) as CartItem[]; setCheckoutItems(items); // 清除临时存储的数据 Taro.removeStorageSync('checkout_items'); } else { // 如果没有选中商品数据,使用全部购物车商品 setCheckoutItems(cartItems); } } catch (error) { console.error('加载结算商品失败:', error); setCheckoutItems(cartItems); } }; /** * 统一支付入口 */ const onPay = async () => { // 基础校验 if (!address) { Taro.showToast({ title: '请选择收货地址', icon: 'error' }); return; } if (!checkoutItems || checkoutItems.length === 0) { Taro.showToast({ title: '没有要结算的商品', icon: 'error' }); return; } // 构建订单数据 const orderData = buildCartOrder( checkoutItems.map(item => ({ goodsId: item.goodsId!, quantity: item.quantity || 1 })), address.id, { comments: '购物车下单', deliveryType: 0 } ); // 根据支付方式选择支付类型,默认微信支付 const paymentType = payment?.type === 0 ? PaymentType.BALANCE : PaymentType.WECHAT; // 执行支付 await PaymentHandler.pay(orderData, paymentType, { onSuccess: () => { // 支付成功后,从购物车中移除已下单的商品 checkoutItems.forEach(item => { removeFromCart(item.goodsId); }); } }); }; useEffect(() => { if (goodsId) { getShopGoods(Number(goodsId)).then(res => { setGoods(res); }).catch(error => { console.error("Failed to fetch goods detail:", error); }); } reload().then(); loadCheckoutItems(); }, [goodsId, cartItems]); // 计算总价 const getTotalPrice = () => { return checkoutItems.reduce((total, item) => { return total + (parseFloat(item.price) * item.quantity); }, 0).toFixed(2); }; // 计算商品总数量 const getTotalQuantity = () => { return checkoutItems.reduce((total, item) => total + item.quantity, 0); }; return (
{ address && ( Taro.navigateTo({url: '/user/address/index'})}> 送至 {address.province} {address.city} {address.region} {address.address} {address.name} {address.phone} ) } {!address && ( Taro.navigateTo({url: '/user/address/index'})}> 添加收货地址 )} {checkoutItems.map((goods, _) => ( {goods.name} 80g/袋 ¥{goods.price} x {goods.quantity} ))} {'¥' + getTotalPrice()}}/> -¥0.00 )}/> {/**/} )}/>
实付金额: ¥{getTotalPrice()}
); }; export default OrderConfirm;