Files
news-tracker/templates/dashboard.html
T

82 lines
3.2 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{% extends "base.html" %}
{% set active = 'dashboard' %}
{% block title %}仪表盘 - 新闻智能跟踪{% endblock %}
{% block content %}
<div class="page-head">
<h1>📊 仪表盘</h1>
<div class="actions">
<button class="btn" onclick="doAct('collect')">🔁 立即采集</button>
<button class="btn" onclick="doAct('llm')">🧠 LLM深度分析</button>
<button class="btn accent" onclick="doAct('summary')">📰 立即发汇总</button>
<button class="btn" onclick="doAct('reanalyze')">♻️ 重新打分</button>
</div>
</div>
<div class="stat-grid">
<div class="stat"><div class="stat-num">{{ stats.total }}</div><div class="stat-label">资讯总数</div></div>
<div class="stat hot"><div class="stat-num">{{ stats.important }}</div><div class="stat-label">重要资讯</div></div>
<div class="stat"><div class="stat-num">{{ stats.notified }}</div><div class="stat-label">已通知</div></div>
<div class="stat warn"><div class="stat-num">{{ stats.pending_llm }}</div><div class="stat-label">待深度分析</div></div>
</div>
<div class="two-col">
<section class="card">
<h3>🔥 重要资讯 TOP <a class="more" href="/news?important=1">更多 </a></h3>
{% for a in important %}
<div class="item">
<a class="item-title" href="/news/{{ a.id }}">{{ a.title }}</a>
<div class="item-meta">
<span class="score s{{ a.total_score }}">{{ a.total_score }}</span>
<span>{{ a.domain }}</span>
<span>{{ a.published_at }}</span>
</div>
</div>
{% else %}
<div class="empty">暂无重要资讯</div>
{% endfor %}
</section>
<section class="card">
<h3>🗂️ 领域分布</h3>
<div class="bars">
{% for d in domain_stats %}
<div class="bar-row">
<span class="bar-label">{{ d.name }}</span>
<div class="bar-track"><div class="bar-fill" style="width:{{ (d.count / domain_stats[0].count * 100)|int if domain_stats and domain_stats[0].count else 0 }}%"></div></div>
<span class="bar-val">{{ d.count }}</span>
</div>
{% endfor %}
</div>
</section>
</div>
<section class="card">
<h3>🕒 最新收录 <a class="more" href="/news">更多 </a></h3>
{% for a in latest %}
<div class="item">
<a class="item-title" href="/news/{{ a.id }}">{{ a.title }}</a>
<div class="item-meta">
<span class="score s{{ a.total_score }}">{{ a.total_score }}</span>
<span>{{ a.source_name }}</span>
<span>{{ a.collected_at }}</span>
</div>
</div>
{% else %}
<div class="empty">尚未收录资讯,点击「立即采集」</div>
{% endfor %}
</section>
{% endblock %}
{% block script %}
<script>
async function doAct(action) {
const btn = event.target; btn.disabled = true;
const r = await API.json('/api/actions', {action});
btn.disabled = false;
if (action === 'summary') toast(r.sent ? `✅ 汇总邮件已发送 ${r.sent} 条` : '✅ 无可汇总资讯');
else if (action === 'llm') toast(`✅ 深度分析完成 ${r.done} 条` + (r.error ? `,失败 ${r.error}` : ''));
else if (action === 'collect') toast(r.added ? `✅ 采集到 ${r.added} 条新资讯` : '✅ 暂无新资讯');
else toast('✅ 已重新打分');
setTimeout(() => location.reload(), 800);
}
</script>
{% endblock %}