#3 .content: drop max-width:1460px centering, padding 24px full width (3x-ui content-area parity), 8px under the 760px breakpoint. #5 servers page: remove latency column + average-latency stat cell (stats grid 4->3, table 15->14 cols incl. detail colspan/empty row). #6 icon buttons: native title replaced by data-tip with a 3x-ui style bubble (black/white, rounded, arrow, body-level fixed layer so table scroll containers cannot clip it); customer QR tip renamed to 二维码; covers customers/servers/nodes rows, credentials pane, links pane, address eye toggle, drag grip, filter chip clear, logout, modal close. #9 remove decorative topbar avatar span#avatar, its showApp assignment and the dead .avatar CSS rule. Refresh button untouched. Golden re-captured: sole diff was errors.badSubscription body (the SPA index.html served there) reflecting the avatar/data-tip changes.
64 lines
4.6 KiB
HTML
64 lines
4.6 KiB
HTML
<!doctype html>
|
|
<html lang="zh-CN" data-theme="light">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<meta name="color-scheme" content="light dark">
|
|
<meta name="theme-color" content="#f0f2f5">
|
|
<title>amo</title>
|
|
<script>(function(){try{var t=localStorage.getItem('nexusgate-theme');if(t==='dark'){document.documentElement.setAttribute('data-theme','dark');document.querySelector('meta[name="theme-color"]').content='#1a1b1f';}}catch(e){}})();</script>
|
|
<link rel="stylesheet" href="/styles.css?v=0.7.0">
|
|
</head>
|
|
<body>
|
|
<div id="login" class="login-shell hidden">
|
|
<section class="login-card panel">
|
|
<div class="login-brand">amo</div>
|
|
<form id="login-form" class="stack">
|
|
<label>登录账号<input name="username" autocomplete="username" required></label>
|
|
<label>登录密码<input name="password" type="password" autocomplete="current-password" required></label>
|
|
<button class="btn primary full" type="submit">登录</button>
|
|
</form>
|
|
<p id="login-error" class="form-error"></p>
|
|
<button class="theme-btn login-theme" type="button" data-theme-toggle>🌙 深色</button>
|
|
</section>
|
|
</div>
|
|
|
|
<div id="app" class="layout hidden">
|
|
<aside class="sider">
|
|
<div class="brand">amo</div>
|
|
<nav class="menu" id="nav">
|
|
<a class="mi" data-page="overview" href="#overview"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 12l9-9 9 9"/><path d="M5 10v10h14V10"/></svg>系统状态</a>
|
|
<a class="mi" data-page="servers" href="#servers"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="4" width="18" height="7" rx="2"/><rect x="3" y="13" width="18" height="7" rx="2"/><path d="M7 7.5h.01M7 16.5h.01"/></svg>服务器</a>
|
|
<a class="mi" data-page="customers" href="#customers"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="9" cy="8" r="3.5"/><path d="M2.5 20c.8-3.2 3.4-5 6.5-5s5.7 1.8 6.5 5"/><path d="M16 4.6a3.5 3.5 0 010 6.8M21.5 20c-.6-2.6-2.2-4.2-4.5-4.8"/></svg>客户与订阅</a>
|
|
<a class="mi" data-page="chains" href="#chains"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="5" cy="12" r="2.5"/><circle cx="19" cy="6" r="2.5"/><circle cx="19" cy="18" r="2.5"/><path d="M7.3 10.8l9.4-3.6M7.3 13.2l9.4 3.6"/></svg>转发与节点</a>
|
|
<a class="mi" data-page="commands" href="#commands"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 17l6-5-6-5M12 19h8"/></svg>安装与命令</a>
|
|
<a class="mi" data-page="operations" href="#operations"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="3"/><path d="M19 12a7 7 0 00-.1-1.2l2-1.5-2-3.4-2.3 1a7 7 0 00-2-1.2L14.2 3h-4l-.4 2.5a7 7 0 00-2 1.2l-2.3-1-2 3.4 2 1.5A7 7 0 005 12c0 .4 0 .8.1 1.2l-2 1.5 2 3.4 2.3-1a7 7 0 002 1.2l.4 2.7h4l.4-2.5a7 7 0 002-1.2l2.3 1 2-3.4-2-1.5c.1-.4.1-.8.1-1.2z"/></svg>设置与运维</a>
|
|
</nav>
|
|
<div class="sider-foot"><span id="user-chip"></span><span class="foot-right"><span id="version-label"></span><button id="logout" class="icon-btn" type="button" data-tip="退出登录"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4"/><path d="M16 17l5-5-5-5M21 12H9"/></svg></button></span></div>
|
|
</aside>
|
|
|
|
<div class="main">
|
|
<header class="topbar">
|
|
<span class="crumb">amo / <b id="page-title">系统状态</b></span>
|
|
<span class="sp"></span>
|
|
<input class="top-search" placeholder="搜索服务器、客户、节点…" disabled>
|
|
<button class="theme-btn" id="refresh" type="button" title="刷新数据">刷新</button>
|
|
<button class="theme-btn" type="button" data-theme-toggle>🌙 深色</button>
|
|
</header>
|
|
<main class="content" id="content"></main>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="modal-overlay" class="modal-overlay hidden">
|
|
<section class="modal panel" role="dialog" aria-modal="true">
|
|
<header class="modal-head"><h2 id="modal-title"></h2><button type="button" class="icon-btn" data-close aria-label="关闭" data-tip="关闭"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M18 6L6 18M6 6l12 12"/></svg></button></header>
|
|
<div id="modal-body" class="modal-body"></div>
|
|
</section>
|
|
</div>
|
|
<div id="float-pop" class="float-pop hidden"></div>
|
|
<div id="toasts" aria-live="polite"></div>
|
|
<script src="/vendor/qrcode.js?v=0.4.0" defer></script>
|
|
<script src="/app.js?v=0.7.0" defer></script>
|
|
</body>
|
|
</html>
|