const { useState, useEffect, useCallback, useRef } = React; const OrdersPage = () => { const { user, showToast, handleLogin, authReady } = useApp(); const [orders, setOrders] = useState([]); const [loading, setLoading] = useState(true); const [confirmingOrder, setConfirmingOrder] = useState(null); const fetchOrders = async () => { if (user?._authenticated) { try { const data = await api.getOrders(); setOrders(data); } catch (error) { console.error('Fetch orders error:', error); } } setLoading(false); }; useEffect(() => { fetchOrders(); }, [user]); const handleConfirmReceived = async (orderNumber) => { if (!user?._authenticated) return; setConfirmingOrder(orderNumber); try { const result = await api.confirmReceived(orderNumber); setOrders(prev => prev.map(o => o.order_number === orderNumber ? result.order : o )); showToast('已確認收貨'); } catch (error) { showToast(error.message || '確認收貨失敗'); } setConfirmingOrder(null); }; const statusText = { pending: '待確認', pending_payment: '待付款', paid: '已付款', confirmed: '已確認', shipped: '已出貨', ready_pickup: '待取貨', completed: '已完成', cancelled: '已取消', rejected: '已拒絕' }; const receivableStatuses = new Set(['shipped', 'ready_pickup']); if (loading) return ; if (!user) { return (

請先登入查看訂單

{authReady && ( )}
); } if (orders.length === 0) { return (

尚無訂單記錄

); } return (
{orders.map((order, index) => (
{order.order_number} {statusText[order.status] || order.status}
{order.items?.slice(0, 2).map(item => item.product_name).join(', ')} {order.items?.length > 2 && ` 等 ${order.items.length} 件商品`}
{PAYMENT_LABELS[order.payment_method] || order.payment_method} {order.payment_method === 'store_pickup' && order.shipping_address && ( {order.shipping_address} )}
NT$ {order.total_amount?.toLocaleString()}
{new Date(order.created_at).toLocaleString('zh-TW')} {receivableStatuses.has(order.status) && ( )}
))}
); };