From 5ff3372f2a619f7027380b27a7598d3eb6c37c67 Mon Sep 17 00:00:00 2001 From: kkfluous Date: Wed, 1 Apr 2026 21:05:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=87=8C=E7=A8=8B?= =?UTF-8?q?=E7=AE=A1=E7=90=86=20API=20=E5=AE=A2=E6=88=B7=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/mileage/api.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/modules/mileage/api.ts diff --git a/src/modules/mileage/api.ts b/src/modules/mileage/api.ts new file mode 100644 index 0000000..986c433 --- /dev/null +++ b/src/modules/mileage/api.ts @@ -0,0 +1,28 @@ +import type { MonitoringData, TargetSummary, TargetVehicle, TrendPoint } from './types'; + +const BASE = '/api/mileage'; + +async function fetchJson(url: string): Promise { + const res = await fetch(url); + if (!res.ok) throw new Error(`API error: ${res.status} ${res.statusText}`); + return res.json(); +} + +export async function fetchMonitoring(): Promise { + return fetchJson(`${BASE}/monitoring`); +} + +export async function fetchTargets(): Promise { + return fetchJson(`${BASE}/targets`); +} + +export async function fetchTargetVehicles(targetId: number): Promise { + return fetchJson(`${BASE}/target/${targetId}/vehicles`); +} + +export async function fetchTrend(targetId?: number, days = 7): Promise { + const params = new URLSearchParams(); + if (targetId) params.set('targetId', String(targetId)); + params.set('days', String(days)); + return fetchJson(`${BASE}/trend?${params.toString()}`); +}