diff --git a/src/modules/mileage/MonitoringView.tsx b/src/modules/mileage/MonitoringView.tsx index 2fcc305..1b08de3 100644 --- a/src/modules/mileage/MonitoringView.tsx +++ b/src/modules/mileage/MonitoringView.tsx @@ -1,3 +1,774 @@ +import { useState, useEffect, useMemo } from 'react'; +import { motion, AnimatePresence } from 'motion/react'; +import { + Truck, Search, Filter, ChevronDown, + Maximize2, Minimize2, RotateCcw, + ArrowUp, ArrowDown, +} from 'lucide-react'; +import type { MonitoringVehicle } from './types'; +import { fetchMonitoring } from './api'; + +const SearchableSelect = ({ + options, + value, + onChange, + placeholder +}: { + options: string[], + value: string, + onChange: (val: string) => void, + placeholder: string +}) => { + const [isOpen, setIsOpen] = useState(false); + const [search, setSearch] = useState(''); + + const filtered = useMemo(() => { + if (!search) return options; + return options.filter(opt => opt.toLowerCase().includes(search.toLowerCase())); + }, [options, search]); + + return ( +
|
+
+ 车牌号
+
+
+ |
+ 在线状态 | +
+
+ 客户项目
+
+
+ |
+
+
+ 业务部门
+
+
+ |
+ {
+ if (sortBy === 'today') {
+ setSortOrder(sortOrder === 'desc' ? 'asc' : 'desc');
+ } else {
+ setSortBy('today');
+ setSortOrder('desc');
+ }
+ }}
+ >
+
+ 今日里程
+ {sortBy === 'today' && (
+ sortOrder === 'desc' ?
+ |
+ {
+ if (sortBy === 'total') {
+ setSortOrder(sortOrder === 'desc' ? 'asc' : 'desc');
+ } else {
+ setSortBy('total');
+ setSortOrder('desc');
+ }
+ }}
+ >
+
+ 累计里程
+ {sortBy === 'total' && (
+ sortOrder === 'desc' ?
+ |
+ 状态 | +
|---|---|---|---|---|---|---|
| {v.plate} | +
+
+
+
+ {v.isOnline ? '在线' : '离线'}
+
+
+ |
+ {v.customer} | +{v.department} | +
+
+
+
+ {!v.isDataSynced && (
+
+ )}
+
+ {v.dailyKm?.toLocaleString()}
+
+
+ {!v.isDataSynced && 未对接}
+ |
+
+
+
+ {v.totalKm?.toLocaleString()}
+
+
+ |
+ + + {v.isOnline ? '运行中' : '静止/离线'} + + | +
未找到匹配数据
+