import type { JsonData } from "@/types/common"; import i18n from "@/i18n"; // Agent 监控相关工具函数(供组件与 API 层共享) // Logan.Li /** 在线判定:3 分钟内有上报视为在线 */ export function isOnline(lastReport: unknown): boolean { if (!lastReport) return false; const t = new Date(lastReport as string | number | Date).getTime(); if (Number.isNaN(t)) return false; return Date.now() - t < 3 * 60 * 1000; } /** 相对时间格式化("3分钟前" / "2小时前") */ export function timeAgo(ts: unknown): string { if (!ts) return '--'; const t = new Date(ts as string | number | Date).getTime(); if (Number.isNaN(t)) return '--'; const diff = Math.floor((Date.now() - t) / 1000); if (diff < 60) return i18n.t('common.duration.secAgo', { count: diff }); if (diff < 3600) return i18n.t('common.duration.minAgo', { count: Math.floor(diff / 60) }); if (diff < 86400) return i18n.t('common.duration.hourAgo', { count: Math.floor(diff / 3600) }); return new Date(ts as string | number | Date).toLocaleString(); } /** 兼容多种列表响应包装:数组 / {list} / {items} / {data} */ export function asList(data: JsonData): JsonData[] { if (!data) return []; if (Array.isArray(data)) return data; if (Array.isArray(data.list)) return data.list; if (Array.isArray(data.items)) return data.items; if (Array.isArray(data.data)) return data.data; return []; }