- 集成 tauri-plugin-opener:Cargo/lib.rs/capabilities/npm 四处接线,新增 src/openExternal.ts(桌面走 opener,浏览器回退 window.open,相对路径绝对化) - 关于页 4 个链接、活动栏官网菜单、代理错误横幅 2 处健康检查链接全部改走 openExternal,桌面端可正常跳转 - 设置→外观 主题顺序调整为 深色/浅色/跟随系统 - release 二进制重编并验证(浏览器实测关于页链接可开文档页) - 附带工作区中未提交的扁平化重构现状(另一会话进行中) - homepage 落地页与文档终检通过(8787 / 与 /docs 双 200)
58 lines
3.5 KiB
HTML
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>
|