import { useId, useRef, useState } from 'react'; import { ArrowUpRight, Boxes, ChevronDown, ChevronsDownUp, ChevronsUpDown, Filter, MapPin, SearchX, Truck, X } from 'lucide-react'; import { InventoryDesktopTable } from './InventoryDesktopTable'; import { InventoryMobileList } from './InventoryMobileList'; import { inventoryGroups, inventorySelection, inventoryTotal } from './inventory-presentation'; import type { InventoryFilters } from '../../model'; import type { InventoryStatisticsSectionProps } from './types'; import './inventory-statistics.css'; const emptyFilters: InventoryFilters = { region: '', city: '', brand: '', type: '', model: '' }; const filterLabels: Record = { region: '区域', city: '城市', brand: '品牌', type: '车型', model: '型号 / 批次' }; export function InventoryStatisticsSection(props: InventoryStatisticsSectionProps) { const { inventoryFilters: filters, setInventoryFilters: setFilters, draftInventoryFilters: draft, setDraftInventoryFilters: setDraft, isInventoryFilterOpen: filterOpen, setIsInventoryFilterOpen: setFilterOpen, filteredInventoryStats: rows, inventoryTab: tab, setInventoryTab: setTab, setVehicleSelection: select, } = props; const id = useId(); const filterTrigger = useRef(null); const [sort, setSort] = useState<'default' | 'quantity'>('default'); const total = inventoryTotal(rows); const abnormal = rows.reduce((sum, row) => sum + (row.abnormal || 0), 0); const pending = rows.reduce((sum, row) => sum + (row.pending || 0), 0); const activeFilters = (Object.keys(filters) as (keyof InventoryFilters)[]).filter(key => filters[key]); const groups = inventoryGroups(tab === 'region' ? props.inventoryByRegion : props.inventoryByModel, sort, tab); const expanded = tab === 'region' ? props.expandedInventoryRegions : props.expandedInventoryTypes; const toggle = tab === 'region' ? props.toggleInventoryRegion : props.toggleInventoryType; const allExpanded = groups.length > 0 && groups.every(group => expanded.has(group.name)); const closeFilters = () => { setFilterOpen(false); filterTrigger.current?.focus(); }; const resetFilters = () => { setFilters({ ...emptyFilters }); setDraft({ ...emptyFilters }); }; const options = { region: props.uniqueInventoryRegions, city: props.uniqueInventoryCities, brand: props.uniqueInventoryBrands, type: props.uniqueInventoryTypes, model: props.uniqueInventoryModelsForType, }; const listProps = { groups, tab, expanded, toggle, total, filters, select }; return (

库存统计

按区域、车型核对库存分布

{new Set(rows.map(row => row.region)).size} 个区域 · {new Set(rows.map(row => row.city)).size} 个城市待交车、异动已包含在库存总数中
{filterOpen &&
{ if (event.key === 'Escape') { event.preventDefault(); closeFilters(); } }} onSubmit={event => { event.preventDefault(); setFilters({ ...draft }); closeFilters(); }}>
筛选库存
{(Object.keys(filterLabels) as (keyof InventoryFilters)[]).map(key => )}
} {activeFilters.length > 0 &&
已筛选 {activeFilters.map(key => )}
}
{groups.length ? <> :
}
); }