import { api, stats } from "../api.js"; import { emptyChart, mixedChart } from "../charts.js"; import { emptyState, sectionHeader } from "../components.js"; import { escapeHtml, formatCount, formatDateTime, formatNumber, } from "../format.js"; function taskRows(tasks) { const entries = Object.entries(tasks || {}); if (!entries.length) return emptyState("暂无任务记录", "运行一次同步、快照或发现后会写入最近结果。"); return `
| 任务 | 结果 | 完成时间 | 摘要 / 错误 |
|---|---|---|---|
| ${escapeHtml(name)} | ${record.ok ? "成功" : `失败`} | ${escapeHtml(formatDateTime(record.finished_at))} | ${escapeHtml(summary || record.error || "—")} |
柱状为每日 PV,折线为每日 UV(按客户端 IP 去重)。数据来自前端埋点,先落内存、每分钟批量入库;仅统计页面访问,不含 API 与静态资源请求。
${(visitStats.top_pages || []).length ? `| 页面 | PV | UV |
|---|---|---|
| ${escapeHtml(page.path)} | ${formatNumber(page.pv)} | ${formatNumber(page.uv)} |
暂无访问记录。
`}数据 ${escapeHtml(system.data_date || "—")} · 快照 ${formatCount(system.snapshot_days)} 天
预计时间按配置和最近任务完成时间推算;实际以常驻进程为准。
系统已不再同步收藏夹;下列统计仅保留历史来源。收藏夹由人工维护,重排序使用 favsort.py。
${(system.folders || []).map((folder) => `历史快照 ${escapeHtml(formatDateTime(folder.last_ids_at))}
只影响未来搜索发现;已入库视频继续追踪。移除请使用 CLI 或数据库。
${(system.blacklist || []).length ? `| mid | 昵称 | 原因 | 在库视频 |
|---|---|---|---|
| ${item.mid} | ${escapeHtml(item.name || "—")} | ${escapeHtml(item.reason || "—")} | ${formatNumber(item.video_count || 0)} |