Files
news-tracker/templates/settings.html
T

98 lines
4.4 KiB
HTML

{% extends "base.html" %}
{% set active = 'settings' %}
{% block title %}设置 - 新闻智能跟踪{% endblock %}
{% block content %}
<div class="page-head">
<h1>⚙️ 设置</h1>
<button class="btn accent" onclick="saveAll()">💾 保存设置</button>
</div>
<div class="two-col">
<section class="card">
<h3>🕐 自动化</h3>
<div class="setting-row">
<label>自动定时采集</label>
<input type="checkbox" id="s_auto_collect" {{ 'checked' if auto.auto.auto_collect }} onchange="setNum('auto_collect', this)">
</div>
<div class="setting-row">
<label>采集间隔(分钟)</label>
<input type="number" id="s_scan_interval_min" value="{{ auto.auto.scan_interval_min }}">
</div>
<div class="setting-row">
<label>实时重要资讯邮件</label>
<input type="checkbox" id="s_realtime_enabled" {{ 'checked' if auto.auto.realtime_enabled }} onchange="setNum('realtime_enabled', this)">
</div>
<div class="setting-row">
<label>实时通知阈值(综合分)</label>
<input type="number" id="s_realtime_threshold" value="{{ auto.auto.realtime_threshold }}">
</div>
<div class="setting-row">
<label>LLM 深度分析阈值(规则分)</label>
<input type="number" id="s_llm_threshold" value="{{ auto.auto.llm_threshold }}">
</div>
<div class="setting-row">
<label>每日汇总邮件</label>
<input type="checkbox" id="s_summary_enabled" {{ 'checked' if auto.auto.summary_enabled }} onchange="setNum('summary_enabled', this)">
</div>
<div class="setting-row">
<label>汇总时间</label>
<input type="time" id="s_summary_time" value="{{ auto.auto.summary_time }}">
</div>
<div class="setting-row">
<label>汇总窗口(小时)</label>
<input type="number" id="s_summary_window_hours" value="{{ auto.auto.summary_window_hours }}">
</div>
<div class="setting-row">
<label>汇总邮件最多条目</label>
<input type="number" id="s_max_summary_items" value="{{ auto.auto.max_summary_items }}">
</div>
</section>
<section class="card">
<h3>📮 邮件配置</h3>
<div class="setting-row"><label>SMTP 服务器</label><input id="m_host" value="{{ auto.mail.smtp_host }}"></div>
<div class="setting-row"><label>端口</label><input id="m_port" value="{{ auto.mail.smtp_port }}"></div>
<div class="setting-row"><label>账号</label><input id="m_user" value="{{ auto.mail.smtp_user }}"></div>
<div class="setting-row"><label>口令</label><input id="m_pass" type="password" value="{{ auto.mail.smtp_pass }}"></div>
<div class="setting-row">
<label>加密方式</label>
<select id="m_mode">
<option value="plain" {{ 'selected' if auto.mail.smtp_mode=='plain' }}>无加密</option>
<option value="starttls" {{ 'selected' if auto.mail.smtp_mode=='starttls' }}>STARTTLS</option>
<option value="ssl" {{ 'selected' if auto.mail.smtp_mode=='ssl' }}>SSL</option>
</select>
</div>
<div class="setting-row"><label>收件人</label><input id="m_to" value="{{ auto.mail.email_to }}"></div>
<div class="setting-row"><label>发件人名称</label><input id="m_name" value="{{ auto.mail.sender_name }}"></div>
</section>
</div>
{% endblock %}
{% block script %}
<script>
function setNum(key, cb){ /* checkbox 即时记录 */
}
async function saveAll(){
const g = id => document.getElementById(id).value;
const auto = {
auto_collect: 1, realtime_enabled: 1, summary_enabled: 1,
scan_interval_min: parseInt(g('s_scan_interval_min'))||30,
realtime_threshold: parseInt(g('s_realtime_threshold'))||80,
llm_threshold: parseInt(g('s_llm_threshold'))||60,
summary_time: g('s_summary_time')||'10:00',
summary_window_hours: parseInt(g('s_summary_window_hours'))||24,
max_summary_items: parseInt(g('s_max_summary_items'))||15,
};
auto.auto_collect = document.getElementById('s_auto_collect').checked ? 1 : 0;
auto.realtime_enabled = document.getElementById('s_realtime_enabled').checked ? 1 : 0;
auto.summary_enabled = document.getElementById('s_summary_enabled').checked ? 1 : 0;
const mail = {
smtp_host: g('m_host'), smtp_port: parseInt(g('m_port'))||587,
smtp_user: g('m_user'), smtp_pass: g('m_pass'), smtp_mode: g('m_mode'),
email_to: g('m_to'), sender_name: g('m_name'),
};
const r = await API.json('/api/settings', { ...auto, mail });
toast(r.ok ? '✅ 设置已保存' : '❌ 保存失败', r.ok);
}
</script>
{% endblock %}