- 后端新增 plate 查询参数支持 - 前端将 filterPlate 传给 API 并加入依赖数组 - 所有筛选条件(部门/项目/主体/车牌/搜索/里程范围) 均正确传递到后端并触发数据刷新 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
56 lines
2.0 KiB
TypeScript
56 lines
2.0 KiB
TypeScript
import type { MonitoringData, TargetSummary, TargetVehicle, TrendPoint } from './types';
|
|
|
|
const BASE = '/api/mileage';
|
|
|
|
async function fetchJson<T>(url: string): Promise<T> {
|
|
const res = await fetch(url);
|
|
if (!res.ok) throw new Error(`API error: ${res.status} ${res.statusText}`);
|
|
return res.json();
|
|
}
|
|
|
|
export async function fetchMonitoring(params?: {
|
|
sortBy?: string;
|
|
sortOrder?: string;
|
|
limit?: number;
|
|
page?: number;
|
|
search?: string;
|
|
dept?: string;
|
|
customer?: string;
|
|
project?: string;
|
|
entity?: string;
|
|
plate?: string;
|
|
mileageMin?: string;
|
|
mileageMax?: string;
|
|
}): Promise<MonitoringData> {
|
|
const query = new URLSearchParams();
|
|
if (params?.sortBy) query.set('sortBy', params.sortBy);
|
|
if (params?.sortOrder) query.set('sortOrder', params.sortOrder);
|
|
if (params?.limit) query.set('limit', String(params.limit));
|
|
if (params?.page) query.set('page', String(params.page));
|
|
if (params?.search) query.set('search', params.search);
|
|
if (params?.dept) query.set('dept', params.dept);
|
|
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();
|
|
return fetchJson<MonitoringData>(`${BASE}/monitoring${qs ? `?${qs}` : ''}`);
|
|
}
|
|
|
|
export async function fetchTargets(): Promise<TargetSummary[]> {
|
|
return fetchJson<TargetSummary[]>(`${BASE}/targets`);
|
|
}
|
|
|
|
export async function fetchTargetVehicles(targetId: number): Promise<TargetVehicle[]> {
|
|
return fetchJson<TargetVehicle[]>(`${BASE}/target/${targetId}/vehicles`);
|
|
}
|
|
|
|
export async function fetchTrend(targetId?: number, days = 7): Promise<TrendPoint[]> {
|
|
const params = new URLSearchParams();
|
|
if (targetId) params.set('targetId', String(targetId));
|
|
params.set('days', String(days));
|
|
return fetchJson<TrendPoint[]>(`${BASE}/trend?${params.toString()}`);
|
|
}
|