// MOMO Pro - 訂單管理頁 const OrdersPage = ({ density = 'comfortable', cardStyle = 'shadow', buttonStyle = 'gradient' }) => { const [selected, setSelected] = React.useState(new Set()); const [statusFilter, setStatusFilter] = React.useState('all'); const [search, setSearch] = React.useState(''); const filtered = MOMO_DATA.orders.filter(o => { if (statusFilter !== 'all' && o.status !== statusFilter) return false; if (search && !o.id.toLowerCase().includes(search.toLowerCase()) && !o.customer.includes(search)) return false; return true; }); 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 tabs = [ { id: 'all', label: '全部', count: MOMO_DATA.orders.length }, { id: 'pending', label: '待處理', count: MOMO_DATA.orders.filter(o => o.status === 'pending').length }, { id: 'processing', label: '處理中', count: MOMO_DATA.orders.filter(o => o.status === 'processing').length }, { id: 'shipped', label: '已出貨', count: MOMO_DATA.orders.filter(o => o.status === 'shipped').length }, { id: 'completed', label: '已完成', count: MOMO_DATA.orders.filter(o => o.status === 'completed').length }, { id: 'cancelled', label: '已取消', count: MOMO_DATA.orders.filter(o => o.status === 'cancelled').length }, ]; const rowPad = density === 'compact' ? '8px 16px' : '14px 16px'; const headPad = density === 'compact' ? '8px 16px' : '12px 16px'; return (
} /> {/* Tabs */}
{tabs.map(t => ( ))}
{/* Toolbar */}
setSearch(e.target.value)} size="sm" />
{/* Bulk action bar */} {selected.size > 0 && (
已選取 {selected.size} 筆訂單
)} {/* Table */}
{[ { label: '訂單編號', sort: true }, { label: '會員', sort: false }, { label: '金額', sort: true, align: 'right' }, { label: '商品', sort: false, align: 'right' }, { label: '狀態', sort: false }, { label: '付款', sort: false }, { label: '通路', sort: false }, { label: '建立時間', sort: true }, { label: '', sort: false, align: 'right' }, ].map((h, i) => ( ))} {filtered.map(order => { const isSelected = selected.has(order.id); return ( !isSelected && (e.currentTarget.style.background = 'var(--momo-bg-subtle)')} onMouseLeave={e => !isSelected && (e.currentTarget.style.background = 'transparent')} > ); })}
0} indeterminate={selected.size > 0 && selected.size < filtered.length} onChange={toggleAll} /> {h.sort ? ( ) : h.label}
toggleOne(order.id)} /> {order.id}
{order.customer}
{order.email}
NT$ {order.total.toLocaleString()} {order.items} 項 {STATUS_MAP[order.status].label} {STATUS_MAP[order.payment].label} {order.channel} {order.date}
{/* Pagination */}
顯示 1-{filtered.length} 筆,共 {filtered.length} 筆結果
))}
); }; window.OrdersPage = OrdersPage;