'use client' import { useField, useFormFields } from '@payloadcms/ui' import React, { useEffect, useState } from 'react' interface PreorderItem { id: string title: string variant_id: string variant_sku?: string variant_title?: string quantity: number unit_price: number total: number } interface Order { id: string display_id: number status: string payment_status: string fulfillment_status: string email: string total: number preorder_amount: number preorder_quantity: number currency_code: string created_at: string preorder_items: PreorderItem[] } interface Statistics { total_orders: number total_quantity: number total_amount: number status_breakdown: Record } export const PreorderOrdersField: React.FC = () => { const { value: medusaId } = useField({ path: 'medusaId' }) const { value: seedId } = useField({ path: 'seedId' }) const [orders, setOrders] = useState([]) const [loading, setLoading] = useState(false) const [error, setError] = useState(null) const [stats, setStats] = useState(null) useEffect(() => { if (medusaId || seedId) { fetchOrders() } }, [medusaId, seedId]) const fetchOrders = async () => { const productId = seedId || medusaId if (!productId) return try { setLoading(true) setError(null) const response = await fetch(`/api/preorders/${productId}/orders`) if (!response.ok) { throw new Error('Failed to fetch orders') } const data = await response.json() setOrders(data.orders || []) setStats(data.statistics ?? null) } catch (err: any) { console.error('Failed to fetch orders:', err) setError(err.message || 'Failed to load orders') } finally { setLoading(false) } } const formatCurrency = (amount: number, currency: string) => { return new Intl.NumberFormat('zh-CN', { style: 'currency', currency: currency.toUpperCase(), }).format(amount / 100) } const formatDate = (dateString: string) => { return new Date(dateString).toLocaleString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', }) } if (!medusaId && !seedId) { return (

产品尚未同步到 Medusa,无法查看订单

) } if (loading) { return (

加载订单中...

) } if (error) { return (

加载失败: {error}

) } if (orders.length === 0) { return (

暂无订单

) } return (
{/* 统计信息 */} {stats && (
订单总数
{stats.total_orders}
预购数量
{stats.total_quantity}
预购金额
{formatCurrency(stats.total_amount, orders[0]?.currency_code || 'CNY')}
)} {/* 订单列表 */}
{orders.map((order, index) => ( ))}
订单号 客户 商品 金额 状态 时间
#{order.display_id}
{order.id.slice(0, 8)}
{order.email} {(order.preorder_items || []).map((item, i) => (
{item.variant_title ? `${item.title} · ${item.variant_title}` : item.title} × {item.quantity}
))}
{formatCurrency(order.total, order.currency_code)} {order.status} {formatDate(order.created_at)}
) }