import type { Dispatch, SetStateAction } from 'react'; import { ArrowDown, ArrowUp, Download, Filter, Maximize2, RefreshCw, RotateCcw } from 'lucide-react'; import PlateMultiSelect from '../../PlateMultiSelect'; import type { MileageSourceGroup, MonitoringFilters } from '../../types'; import { getRangePreset, type RangePreset } from '../date-range'; import BatchMultiSelect from './BatchMultiSelect'; import SearchableSelect from './SearchableSelect'; import SourcePriorityControl from './SourcePriorityControl'; type SortBy = 'today' | 'total' | 'statisticTime'; type SortOrder = 'asc' | 'desc'; export default function MonitoringToolbar({ onToggleFullscreen, onDownload, exporting, lastRefreshedAt, onManualRefresh, manualRefreshing, sortBy, onSortByChange, sortOrder, onSortOrderChange, sourcePriority, onSourcePriorityChange, filterOptions, filterTargetNames, onFilterTargetNamesChange, filterRegion, onFilterRegionChange, plateNumbers, filterPlates, onFilterPlatesChange, isFilterOpen, onFilterOpenChange, searchTerm, filterDept, filterCustomer, filterRentStatus, filterProject, filterBrands, rangeStart, rangeEnd, onApplyRangePreset, rangeLabel, }: { onToggleFullscreen: () => void; onDownload: () => void; exporting: boolean; lastRefreshedAt: Date | null; onManualRefresh: () => void; manualRefreshing: boolean; sortBy: SortBy; onSortByChange: Dispatch>; sortOrder: SortOrder; onSortOrderChange: Dispatch>; sourcePriority: MileageSourceGroup[]; onSourcePriorityChange: (value: MileageSourceGroup[]) => void; filterOptions: MonitoringFilters; filterTargetNames: string[]; onFilterTargetNamesChange: (value: string[]) => void; filterRegion: string; onFilterRegionChange: (value: string) => void; plateNumbers: string[]; filterPlates: string[]; onFilterPlatesChange: (value: string[]) => void; isFilterOpen: boolean; onFilterOpenChange: (value: boolean) => void; searchTerm: string; filterDept: string; filterCustomer: string; filterRentStatus: string; filterProject: string; filterBrands: string[]; rangeStart: string; rangeEnd: string; onApplyRangePreset: (preset: RangePreset) => void; rangeLabel: string; }) { return (

里程看板

数据监控 • OneOS 实时查询
{lastRefreshedAt ? lastRefreshedAt.toLocaleTimeString('zh-CN', { hour12: false }) : '--:--:--'}
{([ ['today', '今天'], ['yesterday', '昨天'], ['thisWeek', '本周'], ['thisMonth', '本月'], ['last15', '近15天'], ] as Array<[RangePreset, string]>).map(([preset, label]) => { const range = getRangePreset(preset); const active = rangeStart === range.start && rangeEnd === range.end; return ( ); })} {rangeLabel}
); }