import { View, Text, Image, Button } from '@tarojs/components' import Taro from '@tarojs/taro' import { useState, useEffect } from 'react' import './index.scss' import { useThemeContext } from '../../context/ThemeContext' import { useSafeArea } from '../../hooks/useSafeArea' import { useStatusBar } from '../../hooks/useStatusBar' import { getOrderList, getDefaultAddress, getAddressList, type AddressItem, type OrderItem } from '../../utils/store' import { PRODUCT_ICON_MAP } from '../../utils/productConfig' export default function OrderDetailPage() { const { theme, resolvedTheme } = useThemeContext() const safe = useSafeArea() useStatusBar(resolvedTheme) const params = Taro.getCurrentInstance().router?.params const orderId = params?.orderId || '' const [order, setOrder] = useState(null) const [address, setAddress] = useState(null) const [showAddrPicker, setShowAddrPicker] = useState(false) const [addrList, setAddrList] = useState([]) useEffect(() => { const orders = getOrderList() const o = orders.find(x => x.id === orderId) if (o) { setOrder(o) // 优先显示订单已有地址,否则用默认地址 if ((o as any).address) { setAddress((o as any).address) } else { setAddress(getDefaultAddress()) } } setAddrList(getAddressList()) }, [orderId]) const handlePickAddress = (addr: AddressItem) => { setAddress(addr) setShowAddrPicker(false) // 同步更新订单里的地址 const orders = getOrderList() const idx = orders.findIndex(x => x.id === orderId) if (idx >= 0) { orders[idx] = { ...orders[idx], address: addr } as any // 这里不直接写回 store,用临时状态即可,实际后端会有 order update API } Taro.showToast({ title: '地址已更改', icon: 'success' }) } if (!order) { return ( 订单不存在 ) } return ( Taro.navigateBack()}>← 订单详情 {/* 状态横幅 */} {order.statusCode === 'pending' && '待付款'} {order.statusCode === 'paid' && '待发货'} {order.statusCode === 'shipping' && '待收货'} {order.statusCode === 'done' && '已完成'} {order.statusCode === 'pending' && '请在30分钟内完成支付'} {order.statusCode === 'paid' && '商品正在打包中,即将发货'} {order.statusCode === 'shipping' && '快递运输中,请注意查收'} {order.statusCode === 'done' && '交易已完成,感谢惠顾'} {/* 物流信息(仅 shipping/done) */} {(order.statusCode === 'shipping' || order.statusCode === 'done') && ( 物流信息 单号: SF1234567890 运输中 2024-01-15 14:30 【北京市】快件已到达北京朝阳转运中心 已发货 2024-01-15 09:00 【深圳市】商家已发货,等待揽收 已下单 2024-01-14 20:15 订单已生成,等待商家发货 )} {/* 商品信息 */} {order.productName} {order.sku} 实付款 {order.price} {/* 收货地址 */} 收货地址 setShowAddrPicker(true)}> 更改收货地址 {address ? ( {address.name} {address.phone} {address.region?.join(' ')} {address.detail} ) : ( 暂无收货地址,请先添加 )} {/* 订单信息 */} 订单信息 订单编号 {order.id} 创建时间 {order.date} 数量 {order.count} 件 {/* 地址选择底部弹窗 */} {showAddrPicker && ( 选择收货地址 setShowAddrPicker(false)}>✕ {addrList.map((addr) => ( handlePickAddress(addr)} > {addr.name} {addr.phone} {addr.isDefault && 默认} {addr.region?.join(' ')} {addr.detail} ))} {addrList.length === 0 && ( 暂无地址,请先添加收货地址 )} { setShowAddrPicker(false); Taro.navigateTo({ url: '/pages/address/index' }) }}> + 新建收货地址 )} ) }