import { useEffect, useMemo, useState } from 'react'; import { useNavigate, useSearchParams } from 'react-router-dom'; import PageHeader from '@dukang/shared-ui/PageHeader'; import { request } from '../lib/api'; import { toastError } from '../lib/toast'; import type { PartnerProxyOrderOptions, PartnerProxyOrderProductOption } from '@dukang/shared-types'; function fmtMoney(n: number) { return n.toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); } type FulfillmentFilter = 'ALL' | 'ONLINE' | 'CROSS_CITY' | 'ON_SITE'; const FILTERS: Array<{ key: FulfillmentFilter; label: string }> = [ { key: 'ALL', label: '全部' }, { key: 'ONLINE', label: '线上' }, { key: 'CROSS_CITY', label: '跨城' }, { key: 'ON_SITE', label: '现场' }, ]; function matchFilter(p: PartnerProxyOrderProductOption, filter: FulfillmentFilter): boolean { if (filter === 'ALL') return true; if (filter === 'ONLINE') return p.allowOnlinePurchase !== false; if (filter === 'CROSS_CITY') return p.allowCrossCityDelivery !== false; return !!p.allowOnSitePickup; } export default function ProxyOrderProductsPage() { const navigate = useNavigate(); const [searchParams] = useSearchParams(); const selectedId = searchParams.get('selected') || ''; const [products, setProducts] = useState([]); const [loading, setLoading] = useState(true); const [keyword, setKeyword] = useState(''); const [filter, setFilter] = useState('ALL'); useEffect(() => { request('PARTNER_H5', '/partner/proxy-orders/options') .then((data) => setProducts(Array.isArray(data.products) ? data.products : [])) .catch((e) => toastError(e instanceof Error ? e.message : '加载失败')) .finally(() => setLoading(false)); }, []); const filtered = useMemo(() => { const q = keyword.trim().toLowerCase(); return products.filter((p) => { if (!matchFilter(p, filter)) return false; if (!q) return true; return `${p.name} ${p.spec}`.toLowerCase().includes(q); }); }, [products, keyword, filter]); function pick(product: PartnerProxyOrderProductOption) { navigate(`/proxy-order?productId=${encodeURIComponent(product.id)}`, { replace: true }); } return (
navigate(-1)} />
setKeyword(e.target.value)} />
{FILTERS.map((f) => ( ))}
{loading ?

加载中…

: null} {!loading && filtered.length === 0 ? (

暂无符合条件的商品

) : null} {filtered.map((p) => { const benefit = p.benefitAmount != null ? Number(p.benefitAmount) : Number(p.price); const active = p.id === selectedId; return ( ); })}
); }