// === Orders / Sales history === function OrdersScreen({ orders, setOrders, goto }) { const { PRODUCTS } = window.MOCK; const [statusFilter, setStatusFilter] = useState("all"); const [search, setSearch] = useState(""); const [selected, setSelected] = useState(new Set()); const filtered = useMemo(() => { return orders.filter(o => { if (statusFilter !== "all" && o.status !== statusFilter) return false; if (search) { const q = search.toLowerCase(); if (!o.buyer.toLowerCase().includes(q) && !o.id.toLowerCase().includes(q) && !o.phone.includes(q)) return false; } return true; }); }, [orders, statusFilter, search]); const toggleAll = () => { if (selected.size === filtered.length) setSelected(new Set()); else setSelected(new Set(filtered.map(o => o.id))); }; const toggleOne = (id) => { const s = new Set(selected); if (s.has(id)) s.delete(id); else s.add(id); setSelected(s); }; const orderTotal = (o) => o.items.reduce((s, it) => { const p = PRODUCTS.find(x => x.id === it.pid); return s + (p ? p.price * it.qty : 0); }, 0); const counts = { paid: orders.filter(o => o.status === "paid").length, shipped: orders.filter(o => o.status === "shipped").length, delivered: orders.filter(o => o.status === "delivered").length, }; return (

주문/판매 내역

전체 {orders.length}건 · 결제완료 {counts.paid}건 · 배송중 {counts.shipped}건

setSearch(e.target.value)} />
{[["all", "전체"], ["paid", `결제완료 ${counts.paid}`], ["shipped", `배송중 ${counts.shipped}`], ["delivered", `배송완료 ${counts.delivered}`]].map(([k, l]) => ( ))}
{selected.size > 0 && (
{selected.size}건 선택됨
)}
{filtered.map(o => { const firstItem = PRODUCTS.find(x => x.id === o.items[0].pid); return ( ); })}
0 && selected.size === filtered.length} onChange={toggleAll} /> 주문번호 구매자 상품 결제금액 상태 주문일시
toggleOne(o.id)} /> {o.id}
{o.buyer}
{o.phone}
{firstItem?.name}{o.items.length > 1 ? ` 외 ${o.items.length - 1}건` : ""}
총 {o.items.reduce((s, it) => s + it.qty, 0)}개
{formatKRW(orderTotal(o))} {o.date}
); } window.OrdersScreen = OrdersScreen;