Hide notification channel internal summaries

This commit is contained in:
2026-05-28 20:43:07 +08:00
parent fdd3f9cade
commit d9ddf83fd2
+1 -1
View File
@@ -16,7 +16,7 @@ document.querySelectorAll('.tab').forEach(b=>b.onclick=()=>{closeDrawer();docume
function statusPill(s){let c=s||'unknown';return `<span class="pill ${c}"><span class="dot"></span>${esc(c)}</span>`}
async function refresh(){DATA=await api('/api/status'); $('now').textContent='当前时间:'+DATA.now_text; let ps=DATA.proxies, up=ps.filter(x=>x.state.status==='up').length, down=ps.filter(x=>x.state.status==='down').length; $('mTotal').textContent=ps.length;$('mUp').textContent=up;$('mDown').textContent=down;$('mChan').textContent=(DATA.notifications.channels||[]).length; renderSettings(); renderProxies(); renderChannels(); renderLogs()}
function renderProxies(){let cards='', list=''; for(const it of DATA.proxies){let p=it.proxy,s=it.state; let recent=(it.recent||[]).slice(0,5).map(r=>`<tr><td>${ts(r.ts)}</td><td class="${r.ok?'up':'down'}">${r.ok?'OK':'FAIL'}</td><td>${r.latency_ms??'-'}ms</td><td class="err">${esc(r.error||'')}</td></tr>`).join(''); let color=s.status==='up'?'green':s.status==='down'?'pink':'blue'; let block=`<div class="card ${color}"><div class="row"><div><h2 style="margin:.1em 0">${esc(p.name||p.id)}</h2><div class="muted mono">${esc(p.host)}:${esc(p.port)}${esc(p.target_host)}:${esc(p.target_port)} · ${esc(p.interval_seconds||DATA.settings.interval_seconds)}s</div></div>${statusPill(s.status)}</div><div class="kv"><div class="muted">最后检测</div><div>${ts(s.last_ts)}</div><div class="muted">延迟</div><div>${s.latency_ms??'-'} ms</div><div class="muted">失败/成功</div><div>${s.fail_count} / ${s.ok_count}</div><div class="muted">错误</div><div class="err">${esc(s.error||'-')}</div></div><div class="toolbar"><button class="btn small" onclick="checkProxy('${esc(p.id)}')">立即检测</button><button class="btn small" onclick="openProxy('${esc(p.id)}')">编辑</button><button class="btn small danger" onclick="delProxy('${esc(p.id)}')">删除</button></div><table style="margin-top:12px"><thead><tr><th>时间</th><th>结果</th><th>延迟</th><th>错误</th></tr></thead><tbody>${recent}</tbody></table></div>`; cards+=block; list+=block } $('proxyCards').innerHTML=cards||'<div class="card muted">还没有节点,点击新增节点。</div>'; $('proxyList').innerHTML=list||'<p class="muted">暂无节点</p>'}
function channelSummary(c){let x=cfg(c); if(c.type==='bark')return x.server||'https://api.day.app'; if(c.type==='pushplus')return 'template='+(x.template||'txt')+(x.topic?' · topic='+x.topic:''); if(c.type==='autman')return (x.url||'') + (x.access_token?' · token已配置':' · token未配置'); return x.url||''}
function channelSummary(c){let x=cfg(c); if(c.type==='bark')return x.key?'Key 已配置':'Key 未配置'; if(c.type==='pushplus')return x.token?'Token 已配置':'Token 未配置'; if(c.type==='autman')return x.access_token?'Token 已配置':'Token 未配置'; return x.url||''}
function renderSettings(){let s=DATA.settings||{}; if($('sTarget')){$('sTarget').textContent=(s.target_host||'-')+':'+(s.target_port||'-');$('sInterval').textContent=s.interval_seconds||'-';$('sTimeout').textContent=s.timeout_seconds||'-';$('sThreshold').textContent='失败 '+(s.fail_threshold||'-')+' / 恢复 '+(s.recover_threshold||'-')}}
function renderChannels(){let html=''; for(const c of DATA.notifications.channels||[]){html+=`<div class="card channel"><div><div class="row" style="justify-content:flex-start"><h3 style="margin:0">${esc(c.name)}</h3><span class="pill">${esc(c.type)}</span><span class="pill ${c.enabled?'up':'unknown'}"><span class="dot"></span>${c.enabled?'启用':'停用'}</span></div><div class="muted mono">${esc(channelSummary(c))}</div></div><div class="toolbar"><button class="btn small" onclick="testChannel('${esc(c.id)}')">测试</button><button class="btn small" onclick="openChannel('${esc(c.id)}')">编辑</button><button class="btn small danger" onclick="delChannel('${esc(c.id)}')">删除</button></div></div>`} $('channelList').innerHTML=html||'<p class="muted">暂无通知渠道</p>'}
function renderLogs(){ $('events').innerHTML=(DATA.events||[]).map(e=>`<tr><td>${ts(e.ts)}</td><td>${esc(e.proxy_id)}</td><td>${esc(e.old_status)}${esc(e.new_status)}</td><td>${esc(e.message)}</td></tr>`).join(''); $('notifLogs').innerHTML=(DATA.notification_logs||[]).map(n=>`<tr><td>${ts(n.ts)}</td><td>${esc(n.channel_name)}</td><td class="${n.ok?'up':'down'}">${n.ok?'OK':'FAIL'}</td><td>${esc(n.title)}</td></tr>`).join('')}