perf: 实时监控性能优化

- 后端:车辆关联信息缓存5分钟、两库并行查询、支持服务端
  筛选/排序/分页(默认返回100条)
- 前端:筛选和排序参数传给后端,不再加载全量数据
- 筛选选项(部门/客户/车牌)仅首次加载获取

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
kkfluous
2026-04-01 22:11:52 +08:00
parent ad17803ed1
commit 1fb9d53873
4 changed files with 125 additions and 60 deletions

View File

@@ -8,8 +8,25 @@ async function fetchJson<T>(url: string): Promise<T> {
return res.json();
}
export async function fetchMonitoring(): Promise<MonitoringData> {
return fetchJson<MonitoringData>(`${BASE}/monitoring`);
export async function fetchMonitoring(params?: {
sortBy?: string;
sortOrder?: string;
limit?: number;
offset?: number;
search?: string;
dept?: string;
customer?: 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?.offset) query.set('offset', String(params.offset));
if (params?.search) query.set('search', params.search);
if (params?.dept) query.set('dept', params.dept);
if (params?.customer) query.set('customer', params.customer);
const qs = query.toString();
return fetchJson<MonitoringData>(`${BASE}/monitoring${qs ? `?${qs}` : ''}`);
}
export async function fetchTargets(): Promise<TargetSummary[]> {