const elementCache = new Map(); export function qs(selector) { if (!elementCache.has(selector)) { elementCache.set(selector, document.querySelector(selector)); } return elementCache.get(selector); } export function escapeHtml(value) { return String(value) .replaceAll("&", "&") .replaceAll("<", "<") .replaceAll(">", ">") .replaceAll('"', """) .replaceAll("'", "'"); } export const VIEW_LABELS = { overview: "系统总览", inspection: "视频巡检", events: "告警中心", robots: "消息机器人", risks: "风险台账", settings: "系统设置", }; export const STATUS_LABELS = { pending: "待处置", acknowledged: "已确认", resolved: "已解决", }; const CLASS_LABELS = { fire: "火焰", smoke: "烟雾" }; export function classLabel(name) { return CLASS_LABELS[name] || escapeHtml(String(name)); } export function formatDate(value) { if (!value) return "--"; return new Date(value).toLocaleString("zh-CN", { hour12: false }); } export function formatTime(seconds) { if (!Number.isFinite(seconds)) return "00:00"; const minutes = Math.floor(seconds / 60); const remaining = Math.floor(seconds % 60); return `${String(minutes).padStart(2, "0")}:${String(remaining).padStart(2, "0")}`; } export function enabledChannelNames(channels = {}) { const names = []; if (channels.wechat) names.push("企业微信"); if (channels.feishu) names.push("飞书"); return names; }