mirror of https://github.com/cppla/ServerStatus
update bug
parent
34e30d9873
commit
4c17623dff
|
@ -103,6 +103,11 @@ table.data thead th:last-child, table.data tbody td:last-child { text-align:cent
|
|||
.spark{width:52px}
|
||||
#panel-servers .table-wrap{display:none;}
|
||||
#serversCards{display:grid!important;grid-template-columns:1fr;gap:.75rem;margin-top:.5rem;}
|
||||
/* 服务与证书移动端卡片 */
|
||||
#panel-monitors .table-wrap, #panel-ssl .table-wrap{display:none;}
|
||||
#monitorsCards,#sslCards{display:grid!important;grid-template-columns:1fr;gap:.75rem;margin-top:.5rem;}
|
||||
.modal-box{max-width:100%;border-radius:14px;padding:1rem .95rem;}
|
||||
.modal-content{max-height:65vh;overflow:auto;}
|
||||
}
|
||||
.cards .card{border:1px solid var(--border);border-radius:12px;padding:.75rem .85rem;background:linear-gradient(145deg,var(--bg),var(--bg-alt));display:flex;flex-direction:column;gap:.45rem;position:relative;}
|
||||
.cards .card-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<meta name="description" content="简洁现代 ServerStatus" />
|
||||
<meta name="description" content="云监控,ServerStatus中文版,ServerStatus,ServerStatus cppla" />
|
||||
<title>云监控</title>
|
||||
<link rel="icon" type="image/svg+xml" href="favicon.svg" />
|
||||
<link rel="alternate icon" href="favicon.ico" />
|
||||
|
@ -76,6 +76,8 @@
|
|||
<tbody id="monitorsBody"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- 移动端卡片布局 (服务) -->
|
||||
<div id="monitorsCards" class="cards" style="display:none;"></div>
|
||||
</section>
|
||||
|
||||
<section id="panel-ssl" class="panel" aria-labelledby="证书">
|
||||
|
@ -94,6 +96,8 @@
|
|||
<tbody id="sslBody"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- 移动端卡片布局 (证书) -->
|
||||
<div id="sslCards" class="cards" style="display:none;"></div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
|
@ -107,7 +111,7 @@
|
|||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
<a href="https://github.com/cppla/ServerStatus" target="_blank" rel="noopener">ServerStatus</a>
|
||||
<a href="https://github.com/cppla/ServerStatus" target="_blank" rel="noopener">ServerStatus中文版</a>
|
||||
<span class="sep">·</span>
|
||||
<span id="buildInfo" class="muted"></span>
|
||||
</footer>
|
||||
|
|
|
@ -60,7 +60,9 @@ function render(){
|
|||
renderServers();
|
||||
renderServersCards();
|
||||
renderMonitors();
|
||||
renderMonitorsCards();
|
||||
renderSSL();
|
||||
renderSSLCards();
|
||||
updateTime();
|
||||
}
|
||||
function renderServers(){
|
||||
|
@ -152,6 +154,25 @@ function renderMonitors(){
|
|||
tbody.innerHTML = html || `<tr><td colspan="4" class="muted" style="text-align:center;padding:1rem;">无数据</td></tr>`;
|
||||
}
|
||||
|
||||
// 服务卡片 (移动端)
|
||||
function renderMonitorsCards(){
|
||||
const wrap = document.getElementById('monitorsCards');
|
||||
if(!wrap) return; if(window.innerWidth>700){ wrap.innerHTML=''; return; }
|
||||
let html='';
|
||||
S.servers.forEach(s=>{
|
||||
const online = (s.online4||s.online6)?'在线':'离线';
|
||||
const pill = `<span class="status-pill ${online==='在线'?'on':'off'}">${online}</span>`;
|
||||
html += `<div class="card">
|
||||
<div class="card-header"><div class="card-title">${s.name||'-'} <span class="tag">${s.location||'-'}</span></div>${pill}</div>
|
||||
<div class="kvlist" style="grid-template-columns:repeat(2,minmax(0,1fr));">
|
||||
<div><span class="key">监测内容</span><span>${s.custom||'-'}</span></div>
|
||||
<div><span class="key">协议</span><span>${online}</span></div>
|
||||
</div>
|
||||
</div>`;
|
||||
});
|
||||
wrap.innerHTML = html || '<div class="muted" style="font-size:.75rem;text-align:center;padding:1rem;">无数据</div>';
|
||||
}
|
||||
|
||||
function renderSSL(){
|
||||
const tbody = els.sslBody();
|
||||
let html='';
|
||||
|
@ -171,6 +192,28 @@ function renderSSL(){
|
|||
tbody.innerHTML = html || `<tr><td colspan="6" class="muted" style="text-align:center;padding:1rem;">无证书数据</td></tr>`;
|
||||
}
|
||||
|
||||
// 证书卡片 (移动端)
|
||||
function renderSSLCards(){
|
||||
const wrap = document.getElementById('sslCards');
|
||||
if(!wrap) return; if(window.innerWidth>700){ wrap.innerHTML=''; return; }
|
||||
let html='';
|
||||
S.ssl.forEach(c=>{
|
||||
const cls = c.expire_days<=0? 'err': c.expire_days<=7? 'warn':'ok';
|
||||
const status = c.expire_days<=0? '已过期': c.expire_days<=7? '将到期':'正常';
|
||||
const dt = c.expire_ts? new Date(c.expire_ts*1000).toISOString().replace('T',' ').replace(/\.\d+Z/,''):'-';
|
||||
html += `<div class="card">
|
||||
<div class="card-header"><div class="card-title">${c.name||'-'}</div><span class="status-pill ${cls==='err'?'off':'on'}">${status}</span></div>
|
||||
<div class="kvlist" style="grid-template-columns:repeat(2,minmax(0,1fr));">
|
||||
<div><span class="key">域名</span><span>${(c.domain||'').replace(/^https?:\/\//,'')}</span></div>
|
||||
<div><span class="key">端口</span><span>${c.port||443}</span></div>
|
||||
<div><span class="key">剩余(天)</span><span>${c.expire_days??'-'}</span></div>
|
||||
<div><span class="key">到期</span><span>${dt.split(' ')[0]||dt}</span></div>
|
||||
</div>
|
||||
</div>`;
|
||||
});
|
||||
wrap.innerHTML = html || '<div class="muted" style="font-size:.75rem;text-align:center;padding:1rem;">无证书数据</div>';
|
||||
}
|
||||
|
||||
function updateTime(){
|
||||
const el = els.last();
|
||||
if(S.updated){ el.textContent = '最后更新: '+ humanAgo(S.updated); }
|
||||
|
@ -309,7 +352,12 @@ function drawLatencyChart(key){
|
|||
// 在每次 render 后若弹窗打开则重绘最新图
|
||||
const _oldRender = render;
|
||||
render = function(){ _oldRender(); if(S._openDetailKey){ drawLatencyChart(S._openDetailKey); } };
|
||||
window.addEventListener('resize', ()=>{ if(S._openDetailKey){ drawLatencyChart(S._openDetailKey); drawLoadChart(S._openDetailKey); } });
|
||||
window.addEventListener('resize', ()=>{
|
||||
if(S._openDetailKey){ drawLatencyChart(S._openDetailKey); drawLoadChart(S._openDetailKey); }
|
||||
renderServersCards();
|
||||
renderMonitorsCards();
|
||||
renderSSLCards();
|
||||
});
|
||||
|
||||
// 绘制小型折线 (sparklines)
|
||||
function drawSparks(){
|
||||
|
|
Loading…
Reference in New Issue