Files
opsxapi/apps/web/public/design-proxy-layers.html
T
logan 39f4d5addc 桌面应用图标替换为 B-brackets 设计(深藏青 + 白/蓝花括号)
- icon.svg 取自 opsx-icon-options/api/B-brackets.svg,全套光栅重生成:
  icon.icns(iconutil)、icon.ico(PNG-in-ICO 6 尺寸)、16-1024 PNG、Windows Square*/StoreLogo
- 替换 Tauri 脚手架默认五角星图标;GUI 重启实测 Dock 图标已生效
- 服务全量重启:server 8787(官网/文档 200)+ web 5173 + 桌面 GUI
2026-09-20 00:14:32 +08:00

58 lines
3.5 KiB
HTML

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<title>OpsxAPI · 路径 B 代理错误分层验收</title>
<style>
:root { --bg:#0f1419; --text:#e7ecf3; --muted:#8b98a8; --border:#2a3441; --btn:#1e2733; }
* { box-sizing: border-box; }
body { margin:0; font:13px/1.45 ui-sans-serif,system-ui,sans-serif; background:var(--bg); color:var(--text); padding:24px; }
h1 { font-size:16px; margin:0 0 4px; }
.sub { color:var(--muted); margin-bottom:20px; }
.stack { display:flex; flex-direction:column; gap:14px; max-width:720px; }
.banner { border-radius:10px; border:1px solid; padding:12px 14px; }
.row { display:flex; align-items:center; gap:8px; margin-bottom:6px; }
.pill { display:inline-flex; align-items:center; border-radius:999px; padding:2px 8px; font-size:11px; font-weight:650; ring:1px; }
.title { font-weight:650; }
.detail { white-space:pre-wrap; opacity:.9; }
.actions { display:flex; flex-wrap:wrap; gap:10px; align-items:center; margin-top:10px; }
.btn { background:var(--btn); color:var(--text); border:1px solid var(--border); border-radius:8px; padding:5px 10px; font-size:12px; }
.link { font-size:12px; opacity:.8; text-decoration:underline; text-underline-offset:2px; background:none; border:0; color:inherit; cursor:pointer; }
.proxy { border-color:rgba(245,158,11,.4); background:rgba(245,158,11,.1); }
.proxy .pill { background:rgba(245,158,11,.25); color:#fde68a; }
.target { border-color:rgba(14,165,233,.4); background:rgba(14,165,233,.1); }
.target .pill { background:rgba(14,165,233,.25); color:#bae6fd; }
.auth { border-color:rgba(244,63,94,.4); background:rgba(244,63,94,.1); }
.auth .pill { background:rgba(244,63,94,.25); color:#fecdd3; }
.unknown { border-color:rgba(113,113,122,.45); background:rgba(113,113,122,.12); }
.unknown .pill { background:rgba(113,113,122,.35); color:#e4e4e7; }
</style>
</head>
<body>
<h1>路径 B · ProxyErrorBanner 中文分层芯片</h1>
<div class="sub">线框:代理 / 目标 / 鉴权 · unknown 中性灰 · 主按钮 / 次链接</div>
<div class="stack">
<div class="banner proxy">
<div class="row"><span class="pill">代理</span><span class="title">代理层失败</span></div>
<div class="detail">Failed to fetch · ECONNREFUSED 127.0.0.1:8787</div>
<div class="actions"><button class="btn">检查本地代理</button><button class="btn">切换桌面直连</button><button class="link">查看通道说明</button></div>
</div>
<div class="banner target">
<div class="row"><span class="pill">目标</span><span class="title">目标服务失败</span></div>
<div class="detail">HTTP 502 · ENOTFOUND api.internal.example</div>
<div class="actions"><button class="btn">检查 BaseURL / VPN</button></div>
</div>
<div class="banner auth">
<div class="row"><span class="pill">鉴权</span><span class="title">鉴权层失败</span></div>
<div class="detail">401 Unauthorized · Bearer 无效</div>
<div class="actions"><button class="btn">检查 Token / Auth</button></div>
</div>
<div class="banner unknown">
<div class="row"><span class="pill">未知</span><span class="title">请求失败(请按层排查)</span></div>
<div class="detail">Unexpected error</div>
<div class="actions"><button class="btn">查代理 :8787</button><button class="btn">切换桌面直连</button><button class="link">查环境 / BaseURL</button></div>
</div>
</div>
</body>
</html>