diff --git a/src/modules/mileage/MonitoringView.tsx b/src/modules/mileage/MonitoringView.tsx index d5c56f9..63a166d 100644 --- a/src/modules/mileage/MonitoringView.tsx +++ b/src/modules/mileage/MonitoringView.tsx @@ -133,6 +133,7 @@ export default function MonitoringView() { dept: filterDept !== 'All' ? filterDept : undefined, project: filterProject !== 'All' ? filterProject : undefined, entity: filterEntity !== 'All' ? filterEntity : undefined, + plate: filterPlate !== 'All' ? filterPlate : undefined, mileageMin: appliedMileageRange.min || undefined, mileageMax: appliedMileageRange.max || undefined, }).then(d => { @@ -143,7 +144,7 @@ export default function MonitoringView() { setPage(1); setHasMore(d.page < d.totalPages); }).catch(() => {}); - }, [sortBy, sortOrder, searchTerm, filterDept, filterProject, filterEntity, appliedMileageRange]); + }, [sortBy, sortOrder, searchTerm, filterDept, filterProject, filterEntity, filterPlate, appliedMileageRange]); // 加载更多 const loadMore = useCallback(() => { @@ -159,6 +160,7 @@ export default function MonitoringView() { dept: filterDept !== 'All' ? filterDept : undefined, project: filterProject !== 'All' ? filterProject : undefined, entity: filterEntity !== 'All' ? filterEntity : undefined, + plate: filterPlate !== 'All' ? filterPlate : undefined, mileageMin: appliedMileageRange.min || undefined, mileageMax: appliedMileageRange.max || undefined, }).then(d => { @@ -166,7 +168,7 @@ export default function MonitoringView() { setPage(nextPage); setHasMore(nextPage < d.totalPages); }).catch(() => {}).finally(() => setLoadingMore(false)); - }, [sortBy, sortOrder, searchTerm, filterDept, filterProject, filterEntity, appliedMileageRange, page, loadingMore, hasMore]); + }, [sortBy, sortOrder, searchTerm, filterDept, filterProject, filterEntity, filterPlate, appliedMileageRange, page, loadingMore, hasMore]); // 筛选/排序变化时重新加载 useEffect(() => { diff --git a/src/modules/mileage/api.ts b/src/modules/mileage/api.ts index 27a4709..dfd159f 100644 --- a/src/modules/mileage/api.ts +++ b/src/modules/mileage/api.ts @@ -18,6 +18,7 @@ export async function fetchMonitoring(params?: { customer?: string; project?: string; entity?: string; + plate?: string; mileageMin?: string; mileageMax?: string; }): Promise { @@ -31,6 +32,7 @@ export async function fetchMonitoring(params?: { if (params?.customer) query.set('customer', params.customer); if (params?.project) query.set('project', params.project); if (params?.entity) query.set('entity', params.entity); + if (params?.plate) query.set('plate', params.plate); if (params?.mileageMin) query.set('mileageMin', params.mileageMin); if (params?.mileageMax) query.set('mileageMax', params.mileageMax); const qs = query.toString(); diff --git a/src/server/routes/mileage.ts b/src/server/routes/mileage.ts index b04a1a4..a773947 100644 --- a/src/server/routes/mileage.ts +++ b/src/server/routes/mileage.ts @@ -156,6 +156,7 @@ app.get('/monitoring', (c) => { const entity = c.req.query('entity') || ''; const mileageMin = c.req.query('mileageMin') || ''; const mileageMax = c.req.query('mileageMax') || ''; + const plate = c.req.query('plate') || ''; let vehicles = monitoringCache.vehicles; @@ -172,6 +173,7 @@ app.get('/monitoring', (c) => { if (customer) vehicles = vehicles.filter(v => v.customer === customer); if (project) vehicles = vehicles.filter(v => v.project === project); if (entity) vehicles = vehicles.filter(v => v.entity === entity); + if (plate) vehicles = vehicles.filter(v => v.plate === plate); if (mileageMin) vehicles = vehicles.filter(v => v.dailyKm >= Number(mileageMin)); if (mileageMax) vehicles = vehicles.filter(v => v.dailyKm <= Number(mileageMax));