v1.8.0: 🌙 静默期 - 舆情监控/持仓跟踪/定时报告三大自动化任务独立配置静默时段, 命中时段不发送邮件(多段/跨午夜, 日志标quiet, 水位照常推进不补发积压)

This commit is contained in:
2026-08-20 23:43:02 +08:00
parent 4da5e091a5
commit 9340577f7b
10 changed files with 196 additions and 32 deletions
+22 -1
View File
@@ -52,6 +52,26 @@ async function sendReport(kind) {
btn.disabled = false;
}
/* 定时报告 · 静默期 */
async function loadReportQuiet() {
try {
const d = await api('/api/settings');
const q = (d.quiet && d.quiet.report) || {};
$('#reportQuietEnabled').checked = !!q.enabled;
$('#reportQuietRanges').value = q.ranges || '';
} catch (e) {}
}
async function saveReportQuiet() {
try {
const r = await api('/api/settings', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ quiet: { report: {
enabled: $('#reportQuietEnabled').checked,
ranges: $('#reportQuietRanges').value.trim()
} } }) });
toast(r.msg || '已保存');
} catch (e) { toast('保存失败:' + e.message); }
}
async function loadReportLog() {
try {
const d = await api('/api/report/log');
@@ -62,7 +82,7 @@ async function loadReportLog() {
<td style="color:var(--muted)">${r.sent_at}</td>
<td>${r.kind === 'premarket' ? '🌅 盘前' : '🌇 盘后'}</td>
<td>${escapeHtml(r.subject)}</td>
<td><span class="tag ${r.status === 'sent' ? 'tag-推荐' : 'tag-负'}">${r.status}</span></td>
<td><span class="tag ${r.status === 'sent' ? 'tag-推荐' : r.status === 'quiet' ? 'tag-关注' : 'tag-负'}">${r.status === 'sent' ? '已发送' : r.status === 'quiet' ? '🌙 静默' : '失败'}</span></td>
<td style="color:var(--text2);font-size:12px">${escapeHtml(r.message || '')}</td>
</tr>`).join('');
} catch (e) {}
@@ -96,3 +116,4 @@ async function health() {
refreshStats();
loadReportLog();
loadReportQuiet();