From 6ad3a8c29472e7db4f52f89d54d0832395fed7be Mon Sep 17 00:00:00 2001 From: cppla Date: Tue, 7 Jul 2026 17:39:32 +0800 Subject: [PATCH] update --- web/css/app.css | 4 ---- web/index.html | 4 ++-- web/js/app.js | 20 +++++++++++++++++--- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/web/css/app.css b/web/css/app.css index ba520aa..9f42b66 100644 --- a/web/css/app.css +++ b/web/css/app.css @@ -148,10 +148,6 @@ body.light .gauge-half .needle{background:linear-gradient(var(--text),var(--text .pill.off:hover{filter:brightness(1.1)} .virt-pill{--virt:var(--accent);display:inline-flex;align-items:center;justify-content:center;min-width:50px;padding:2px 9px;border-radius:999px;border:1px solid color-mix(in srgb,var(--virt) 42%,var(--border));background:color-mix(in srgb,var(--virt) 14%,var(--bg-alt));color:color-mix(in srgb,var(--virt) 72%,#fff);font-size:12px;font-weight:650;line-height:1.2;letter-spacing:.25px;white-space:nowrap} body.light .virt-pill{background:color-mix(in srgb,var(--virt) 12%,#fff);color:color-mix(in srgb,var(--virt) 68%,#111827)} -.virt-kvm{--virt:#06b6d4} -.virt-xen{--virt:#8b5cf6} -.virt-vmware{--virt:#f59e0b} -.virt-hyper,.virt-hyper-v{--virt:#10b981} .node-name{display:inline-block;max-width:160px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;font-weight:750;letter-spacing:.15px;color:var(--text)} .row-server[data-online="0"] .node-name{color:color-mix(in srgb,var(--text) 72%,var(--text-dim));font-weight:650} .row-server:hover .node-name{color:var(--accent)} diff --git a/web/index.html b/web/index.html index 2725b4d..57be97a 100644 --- a/web/index.html +++ b/web/index.html @@ -6,7 +6,7 @@ 云监控 - +
@@ -200,6 +200,6 @@ ServerStatus中文版 - + diff --git a/web/js/app.js b/web/js/app.js index 729b5d5..71f3ccd 100644 --- a/web/js/app.js +++ b/web/js/app.js @@ -267,10 +267,24 @@ function protoPill(s){ const proto = m.online ? (s.online4 && s.online6 ? '双栈' : (s.online4 ? 'IPv4' : 'IPv6')) : '离线'; return `${proto}`; } +const VIRT_PALETTE = ['#06b6d4','#8b5cf6','#10b981','#f59e0b','#3b82f6','#14b8a6','#6366f1','#a855f7','#22c55e','#eab308']; +function stableHash(value){ + let hash = 2166136261; + const text = String(value || '').trim().toLowerCase(); + for(let i = 0; i < text.length; i++){ + hash ^= text.charCodeAt(i); + hash = Math.imul(hash, 16777619); + } + return hash >>> 0; +} +function virtColor(type){ + const key = String(type || 'unknown').trim().toLowerCase() || 'unknown'; + return VIRT_PALETTE[stableHash(key) % VIRT_PALETTE.length]; +} function virtPill(type){ - const text = String(type || '-'); - const key = text.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '') || 'unknown'; - return `${esc(text)}`; + const raw = String(type ?? '').trim(); + const text = raw || '-'; + return `${esc(text)}`; } function trafficCaps(s, small){ const m = metrics(s);