Collapse dashboard server status into top bar and include .env in backup restore.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -25,6 +25,48 @@
|
||||
font-size: 0.78rem;
|
||||
}
|
||||
|
||||
.dash-server-compact {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.35rem 0.45rem;
|
||||
max-width: 100%;
|
||||
padding: 0.28rem 0.55rem;
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
border-radius: 999px;
|
||||
background: rgba(0, 0, 0, 0.22);
|
||||
color: var(--text-title);
|
||||
font-size: 0.76rem;
|
||||
line-height: 1.35;
|
||||
cursor: pointer;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.dash-server-compact:hover {
|
||||
border-color: rgba(76, 217, 127, 0.35);
|
||||
}
|
||||
|
||||
.dash-server-compact[aria-expanded="true"] .dash-toggle-icon {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.dash-server-compact-label {
|
||||
font-weight: 600;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.dash-server-summary {
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||||
font-size: 0.72rem;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.dash-server-compact .dash-toggle-icon {
|
||||
font-size: 0.62rem;
|
||||
opacity: 0.75;
|
||||
transition: transform 0.2s ease;
|
||||
}
|
||||
|
||||
.dashboard-account-card {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
@@ -46,6 +88,10 @@
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.dashboard-server-card[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.dash-server-head {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
|
||||
@@ -41,6 +41,9 @@
|
||||
var serverDiskSubEl = document.getElementById('dash-server-disk-sub');
|
||||
var serverNetUpEl = document.getElementById('dash-server-net-up');
|
||||
var serverNetDownEl = document.getElementById('dash-server-net-down');
|
||||
var serverCardEl = document.getElementById('dash-server-card');
|
||||
var serverToggleEl = document.getElementById('dash-server-toggle');
|
||||
var serverSummaryEl = document.getElementById('dash-server-summary');
|
||||
|
||||
var pollTimer = null;
|
||||
var pollInFlight = false;
|
||||
@@ -78,6 +81,30 @@
|
||||
riskToggleEl.setAttribute('aria-expanded', expanded ? 'true' : 'false');
|
||||
}
|
||||
|
||||
function initServerToggle() {
|
||||
if (!serverCardEl || !serverToggleEl) return;
|
||||
serverCardEl.hidden = true;
|
||||
serverToggleEl.setAttribute('aria-expanded', 'false');
|
||||
function toggleServer() {
|
||||
var expanded = serverCardEl.hidden;
|
||||
serverCardEl.hidden = !expanded;
|
||||
serverToggleEl.setAttribute('aria-expanded', expanded ? 'true' : 'false');
|
||||
}
|
||||
serverToggleEl.addEventListener('click', toggleServer);
|
||||
}
|
||||
|
||||
function buildServerSummary(server) {
|
||||
if (!server) return '—';
|
||||
var parts = [];
|
||||
if (server.hostname) parts.push(server.hostname);
|
||||
if (server.public_ip) parts.push('外网 ' + server.public_ip);
|
||||
if (server.private_ip) parts.push('内网 ' + server.private_ip);
|
||||
if (server.cpu_pct != null) parts.push('CPU ' + server.cpu_pct + '%');
|
||||
if (server.memory_pct != null) parts.push('内存 ' + server.memory_pct + '%');
|
||||
if (server.disk_pct != null) parts.push('硬盘 ' + server.disk_pct + '%');
|
||||
return parts.length ? parts.join(' · ') : '—';
|
||||
}
|
||||
|
||||
function initRiskToggle() {
|
||||
if (!riskCardEl || !riskToggleEl) return;
|
||||
if (shouldCollapseRiskDefault()) {
|
||||
@@ -524,6 +551,7 @@
|
||||
|
||||
function applyServer(server) {
|
||||
if (!server) return;
|
||||
if (serverSummaryEl) serverSummaryEl.textContent = buildServerSummary(server);
|
||||
if (serverHostEl) serverHostEl.textContent = server.hostname || '—';
|
||||
if (serverUptimeEl) {
|
||||
serverUptimeEl.textContent = server.uptime_label
|
||||
@@ -1102,6 +1130,7 @@
|
||||
|
||||
startPolling();
|
||||
connectPositionStream();
|
||||
initServerToggle();
|
||||
initRiskToggle();
|
||||
initDetailModal();
|
||||
initMobileLists();
|
||||
|
||||
Reference in New Issue
Block a user