性能:看板改为单次请求加载,从5个并发请求优化为1个

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-18 17:31:21 +08:00
parent 852be25413
commit 4c287ca690
2 changed files with 25 additions and 18 deletions

View File

@@ -98,6 +98,15 @@ export namespace AiotAlarmApi {
hour: number;
count: number;
}
/** 看板聚合数据 */
export interface DashboardData {
statistics: AlertStatistics;
trend: TrendItem[];
deviceTop: DeviceTopItem[];
hourDistribution: HourDistItem[];
recentAlerts: Alert[];
}
}
// ==================== 告警管理 API ====================
@@ -133,6 +142,14 @@ export function deleteAlert(id: number | string) {
return requestClient.delete(`/aiot/alarm/alert/delete?id=${id}`);
}
/** 获取看板聚合数据(单次请求) */
export function getAlertDashboard(trendDays: number = 7) {
return requestClient.get<AiotAlarmApi.DashboardData>(
'/aiot/alarm/alert/dashboard',
{ params: { trendDays } },
);
}
/** 获取告警统计 */
export function getAlertStatistics(startTime?: string, endTime?: string) {
return requestClient.get<AiotAlarmApi.AlertStatistics>(

View File

@@ -23,11 +23,8 @@ import {
} from 'ant-design-vue';
import {
getAlertDeviceTop,
getAlertHourDistribution,
getAlertStatistics,
getAlertDashboard,
getAlertTrend,
getRecentAlerts,
} from '#/api/aiot/alarm';
import {
@@ -94,23 +91,16 @@ const STATUS_NAMES: Record<string, string> = {
ignored: '已忽略',
};
/** 加载全部数据 */
/** 加载全部数据(单次请求) */
async function loadAll() {
loading.value = true;
try {
const [statsRes, trendRes, deviceRes, hourRes, alertsRes] =
await Promise.all([
getAlertStatistics(),
getAlertTrend(trendDays.value),
getAlertDeviceTop(10, 7),
getAlertHourDistribution(7),
getRecentAlerts(10),
]);
stats.value = statsRes;
trendData.value = trendRes;
deviceTopData.value = deviceRes;
hourDistData.value = hourRes;
recentAlerts.value = alertsRes?.list || [];
const data = await getAlertDashboard(trendDays.value);
stats.value = data.statistics;
trendData.value = data.trend;
deviceTopData.value = data.deviceTop;
hourDistData.value = data.hourDistribution;
recentAlerts.value = data.recentAlerts || [];
} finally {
loading.value = false;
await nextTick();