import { dataFetch, routes } from "../core/runtime.js"; const rowsNode = document.querySelector("#event-rows"); export async function loadEvents() { rowsNode.replaceChildren(emptyRow("正在读取")); try { const payload = await dataFetch(routes.events + "?limit=200"); const events = payload.events || []; rowsNode.replaceChildren(...(events.length ? events.map(eventRow) : [emptyRow("暂无日志")])); } catch (error) { rowsNode.replaceChildren(emptyRow("读取失败:" + error.message)); } } function eventRow(item) { const row = document.createElement("tr"); const occurredAt = document.createElement("td"); occurredAt.className = "left"; occurredAt.textContent = formatTime(item.occurred_at); const event = document.createElement("td"); event.className = "left"; event.textContent = item.event || "-"; const status = document.createElement("td"); status.className = "left event-status " + (String(item.status || "").startsWith("成功") ? "ok" : "failed"); status.textContent = item.status || "-"; row.append(occurredAt, event, status); return row; } function emptyRow(message) { const row = document.createElement("tr"); const cell = document.createElement("td"); cell.className = "left empty"; cell.colSpan = 3; cell.textContent = message; row.append(cell); return row; } function formatTime(value) { const date = new Date(value); if (Number.isNaN(date.getTime())) return "-"; return new Intl.DateTimeFormat("zh-CN", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit", hour12: false }).format(date); }