import { View, Text, Button, Image } from '@tarojs/components' import Taro, { useRouter, useLoad } from '@tarojs/taro' import { useState } from 'react' import { getOrder, prepayMiniprogram } from '../../api' import './detail.scss' export default function OrderDetail() { const router = useRouter() const { id } = router.params const [order, setOrder] = useState(null) const [loading, setLoading] = useState(false) useLoad(async () => { if (id) { fetchOrder(Number(id)) } }) const fetchOrder = async (orderId: number) => { try { const res = await getOrder(orderId) setOrder(res) } catch (e) { console.error(e) Taro.showToast({ title: '获取订单失败', icon: 'none' }) } } const handlePay = async () => { if (!order) return setLoading(true) try { const params = await prepayMiniprogram(order.id) await Taro.requestPayment({ timeStamp: params.timeStamp, nonceStr: params.nonceStr, package: params.package, signType: params.signType, paySign: params.paySign }) Taro.showToast({ title: '支付成功', icon: 'success' }) fetchOrder(order.id) // Refresh order status } catch (err: any) { console.error(err) if (err.errMsg && err.errMsg.indexOf('cancel') > -1) { Taro.showToast({ title: '取消支付', icon: 'none' }) } else { Taro.showToast({ title: '支付失败', icon: 'none' }) } } finally { setLoading(false) } } if (!order) return Loading... const isPending = order.status === 'pending' const isPaid = order.status === 'paid' return ( {isPending ? '待支付' : isPaid ? '已支付' : order.status} ¥{order.total_price} {/* Product Info */} 商品信息 商品名称 {order.config_name || order.course_title} 数量 x {order.quantity} {/* Shipping Info - Only show if available */} {(order.customer_name || order.shipping_address) && ( 收货信息 收货人 {order.customer_name} 联系电话 {order.phone_number} {order.shipping_address && ( 收货地址 {order.shipping_address} )} )} {/* Logistics Info - Only show if shipped */} {(order.courier_name || order.tracking_number) && ( 物流信息 快递公司 {order.courier_name || '-'} 运单号 {order.tracking_number || '-'} )} {/* Order Info */} 订单信息 订单编号 {order.wechat_trade_no || order.id} 下单时间 {order.created_at?.replace('T', ' ').substring(0, 19)} {isPending && ( )} ) }