400 lines
36 KiB
HTML
400 lines
36 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN" data-theme="dark">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>司命台 · 管理面 — 魂镜 Hunjing</title>
|
||
<link rel="stylesheet" href="assets/app.css?v=10">
|
||
</head>
|
||
<body>
|
||
<svg style="display:none" aria-hidden="true">
|
||
<symbol id="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></symbol>
|
||
<symbol id="i-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9 22V12h6v10"/></symbol>
|
||
<symbol id="i-shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></symbol>
|
||
<symbol id="i-kanban" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h4v18H5z"/><path d="M10 3h4v12h-4z"/><path d="M15 3h4v8h-4z"/></symbol>
|
||
<symbol id="i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></symbol>
|
||
<symbol id="i-package" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></symbol>
|
||
<symbol id="i-monitor" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></symbol>
|
||
<symbol id="i-sliders" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></symbol>
|
||
<symbol id="i-clock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></symbol>
|
||
<symbol id="i-file" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></symbol>
|
||
<symbol id="i-download" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></symbol>
|
||
<symbol id="i-lock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></symbol>
|
||
<symbol id="i-search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></symbol>
|
||
<symbol id="i-refresh" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"/><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"/></symbol>
|
||
<symbol id="i-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></symbol>
|
||
<symbol id="i-x" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></symbol>
|
||
<symbol id="i-activity" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></symbol>
|
||
<symbol id="i-database" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"/><path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"/></symbol>
|
||
<symbol id="i-server" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="8" rx="2"/><rect x="2" y="14" width="20" height="8" rx="2"/><line x1="6" y1="6" x2="6.01" y2="6"/><line x1="6" y1="18" x2="6.01" y2="18"/></symbol>
|
||
<symbol id="i-cpu" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="16" height="16" rx="2"/><rect x="9" y="9" width="6" height="6"/><line x1="9" y1="1" x2="9" y2="4"/><line x1="15" y1="1" x2="15" y2="4"/><line x1="9" y1="20" x2="9" y2="23"/><line x1="15" y1="20" x2="15" y2="23"/><line x1="20" y1="9" x2="23" y2="9"/><line x1="20" y1="14" x2="23" y2="14"/><line x1="1" y1="9" x2="4" y2="9"/><line x1="1" y1="14" x2="4" y2="14"/></symbol>
|
||
<symbol id="i-alert" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></symbol>
|
||
<symbol id="i-chevrons" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="11 17 6 12 11 7"/><polyline points="18 17 13 12 18 7"/></symbol>
|
||
</svg>
|
||
|
||
<div class="app">
|
||
<aside class="sidebar">
|
||
<div class="brand">
|
||
<div class="brand__mark" aria-hidden="true"></div>
|
||
<div class="brand__text">
|
||
<div class="brand__name">魂镜</div>
|
||
<div class="brand__sub">司命台 · 管理面</div>
|
||
</div>
|
||
</div>
|
||
<nav class="side-nav" aria-label="管理面导航">
|
||
<div class="nav-group">
|
||
<div class="nav-group__title">运营</div>
|
||
<a class="nav-item is-active" href="#queue" aria-current="page"><svg><use href="#i-kanban"/></svg><span style="font-size:14.5px">治理队列</span></a>
|
||
<a class="nav-item" href="#tickets"><svg><use href="#i-file"/></svg><span style="font-size:14.5px">支持工单</span><span class="nav-plain">3</span></a>
|
||
<a class="nav-item" href="#users"><svg><use href="#i-users"/></svg><span style="font-size:14.5px">用户</span></a>
|
||
<a class="nav-item" href="#perms"><svg><use href="#i-shield"/></svg><span style="font-size:14.5px">权限管理</span></a>
|
||
</div>
|
||
<div class="nav-group">
|
||
<div class="nav-group__title">部署</div>
|
||
<a class="nav-item" href="#health"><svg><use href="#i-server"/></svg><span style="font-size:14.5px">服务健康</span></a>
|
||
<a class="nav-item" href="#backup"><svg><use href="#i-database"/></svg><span style="font-size:14.5px">迁移与备份</span></a>
|
||
<a class="nav-item" href="#queue" title="插件案件在治理队列「插件」分类"><svg><use href="#i-package"/></svg><span style="font-size:14.5px">插件治理</span></a>
|
||
</div>
|
||
<div class="nav-group">
|
||
<div class="nav-group__title">观测</div>
|
||
<a class="nav-item" href="#slo"><svg><use href="#i-activity"/></svg><span style="font-size:14.5px">SLO 与指标</span></a>
|
||
<a class="nav-item" href="#audit"><svg><use href="#i-shield"/></svg><span style="font-size:14.5px">审计日志</span></a>
|
||
</div>
|
||
<div class="nav-group">
|
||
<div class="nav-group__title">边界</div>
|
||
<a class="nav-item" href="governance.html"><svg><use href="#i-lock"/></svg><span style="font-size:14.5px">治理边界说明</span></a>
|
||
</div>
|
||
</nav>
|
||
<div class="side-foot">
|
||
<button class="icon-btn side-fold-btn" data-sidebar-fold aria-label="收起侧栏" title="收起 / 展开侧栏(记忆偏好)"><svg><use href="#i-chevrons"/></svg></button>
|
||
<span class="avatar avatar--sm avatar--user">司</span>
|
||
<span style="font-size:12.5px">运维 · 管理员</span>
|
||
<button class="icon-btn" data-theme-toggle style="margin-left:auto" aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
|
||
</div>
|
||
<div style="border-top:1px solid var(--line-soft);padding:10px 16px">
|
||
<a href="home.html" style="font-size:12px;display:flex;align-items:center;gap:6px"><svg style="width:13px;height:13px"><use href="#i-home"/></svg>返回用户界面</a>
|
||
</div>
|
||
</aside>
|
||
|
||
<main class="main">
|
||
<header class="topbar">
|
||
<div class="crumbs"><span class="cn">司命台</span><span class="crumbs__sep">/</span><span class="here">管理面 · 运营与部署</span></div>
|
||
<div class="topbar__spacer"></div>
|
||
<span class="badge badge--warn"><span class="badge__dot"></span>双人授权会话 · 剩 41 分钟 <span class="mono">admin_session</span></span>
|
||
<span class="prototype-tag">静态原型 · 待审查</span>
|
||
<button class="icon-btn" data-theme-toggle aria-label="切换到月白主题"><svg><use href="#i-moon"/></svg></button>
|
||
</header>
|
||
|
||
<div class="content">
|
||
<div class="realm-banner" role="note">
|
||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
|
||
管理面边界:管理员不可读取私箧与用户明文内容;产品宪章的永久禁域不可被管理员配置关闭;敏感操作需双人授权(本次会话已授权)且全部写入审计。
|
||
</div>
|
||
|
||
<div class="hero" style="margin-bottom:22px">
|
||
<div>
|
||
<h1>治理总览</h1>
|
||
<p style="color:var(--text-2);font-size:13px;margin-top:4px">2026-09-16 09:40 · 自托管标准部署 · 区域驻留 cn-east-1(不跨区漂移)</p>
|
||
</div>
|
||
<div class="hero__stats">
|
||
<div class="hero__stat"><b style="color:var(--warn)">1</b><span>活跃告警</span></div>
|
||
<div class="hero__stat"><b>5</b><span>待处理司议</span></div>
|
||
<div class="hero__stat"><b>3</b><span>支持工单(未结)</span></div>
|
||
<div class="hero__stat"><b style="color:var(--ok)">99.87%</b><span>SLO 30 天(目标 99.9%)</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<section class="section card" id="astrolabe">
|
||
<div class="card__head">
|
||
<span class="cn">灵台星盘<span class="cn__plain">引擎六枢 · 活的仪表</span></span>
|
||
<span class="mirror-state mirror-state--steady" style="margin-left:auto"><i></i>稳镜 · steady <span class="cn__plain">铜镜四态:虚镜 / 息镜 / 稳镜 / 裂镜</span></span>
|
||
</div>
|
||
<div class="astrolabe-wrap">
|
||
<div class="astrolabe">
|
||
<svg viewBox="0 0 320 320" role="img" aria-label="灵台六枢星盘:太一居中,小周天、洛书、河图、陶钧、烛照环绕;烛照告警闪烁">
|
||
<g class="ast-spin"><circle cx="160" cy="160" r="148" fill="none" stroke="var(--gilt-faint)" stroke-width="0.7" stroke-dasharray="2 9"/></g>
|
||
<circle cx="160" cy="160" r="122" fill="none" stroke="var(--line-soft)" stroke-width="0.8"/>
|
||
<g stroke="var(--gilt-faint)" stroke-width="0.8">
|
||
<line x1="160" y1="160" x2="272" y2="160"/>
|
||
<line x1="160" y1="160" x2="160" y2="48"/>
|
||
<line x1="160" y1="160" x2="51" y2="102"/>
|
||
<line x1="160" y1="160" x2="51" y2="218"/>
|
||
<line x1="160" y1="160" x2="160" y2="272" transform="rotate(0)"/>
|
||
</g>
|
||
<!-- 太一(中枢) -->
|
||
<circle class="ast-breathe" cx="160" cy="160" r="40" fill="none" stroke="var(--gilt-dim)" stroke-width="0.8" stroke-dasharray="3 6"/>
|
||
<circle cx="160" cy="160" r="30" fill="var(--bg-raised)" stroke="var(--gilt-dim)"/>
|
||
<text class="ast-core-text" x="160" y="158" text-anchor="middle" font-size="14" font-weight="600">太一</text>
|
||
<text class="ast-node__plain" x="160" y="171" text-anchor="middle">总枢 · v1.4.2</text>
|
||
<!-- 小周天(东) -->
|
||
<g class="ast-node" title="小周天 · 流式引擎 hj_stream:增量、节流与事件序">
|
||
<circle cx="272" cy="160" r="22" fill="var(--bg-raised)" stroke="var(--accent)" stroke-opacity=".55"/>
|
||
<text class="ast-node__name" x="272" y="158" text-anchor="middle">小周天</text>
|
||
<circle cx="272" cy="184" r="3" fill="var(--ok)"/>
|
||
</g>
|
||
<!-- 洛书(北) -->
|
||
<g class="ast-node" title="洛书 · 计划引擎 hj_plan:预算与上下文装配">
|
||
<circle cx="160" cy="48" r="22" fill="var(--bg-raised)" stroke="var(--accent)" stroke-opacity=".55"/>
|
||
<text class="ast-node__name" x="160" y="46" text-anchor="middle">洛书</text>
|
||
<circle cx="160" cy="72" r="3" fill="var(--ok)"/>
|
||
</g>
|
||
<!-- 河图(西) -->
|
||
<g class="ast-node" title="河图 · 检索引擎 hj_recall:离线索引与重排">
|
||
<circle cx="51" cy="102" r="22" fill="var(--bg-raised)" stroke="var(--accent)" stroke-opacity=".55"/>
|
||
<text class="ast-node__name" x="51" y="100" text-anchor="middle">河图</text>
|
||
<circle cx="51" cy="126" r="3" fill="var(--ok)"/>
|
||
</g>
|
||
<!-- 陶钧(西南) -->
|
||
<g class="ast-node" title="陶钧 · 内容引擎 hj_transform:Markdown 规范化">
|
||
<circle cx="51" cy="218" r="22" fill="var(--bg-raised)" stroke="var(--accent)" stroke-opacity=".55"/>
|
||
<text class="ast-node__name" x="51" y="216" text-anchor="middle">陶钧</text>
|
||
<circle cx="51" cy="242" r="3" fill="var(--ok)"/>
|
||
</g>
|
||
<!-- 烛照(南 · 告警闪烁) -->
|
||
<g class="ast-node" title="烛照 · 策略引擎 hj_policy:校验、验签与决断——当前校验超时 2 次">
|
||
<circle cx="160" cy="272" r="22" fill="var(--bg-raised)" stroke="var(--cinnabar)"/>
|
||
<text class="ast-node__name" x="160" y="270" text-anchor="middle">烛照</text>
|
||
<circle class="ast-alert" cx="160" cy="296" r="3.4" fill="var(--cinnabar)"/>
|
||
</g>
|
||
</svg>
|
||
</div>
|
||
<div style="flex:1;min-width:230px">
|
||
<div class="clash-row">
|
||
<div class="clash-row__pair"><b>相克告警</b> · 错误率 vs 自动重试率 <span style="color:var(--text-3)">——重试正在掩盖错误,建议查 Sandbox 慢执行根因</span></div>
|
||
<div class="clash-strength" title="耦合强度 0.82"><i style="width:82%"></i></div>
|
||
</div>
|
||
<div class="clash-row">
|
||
<div class="clash-row__pair"><b>相生正常</b> · 候选生成率 → 人工审阅吞吐 <span style="color:var(--text-3)">——生成与审阅同速,息壤无积压</span></div>
|
||
<div class="clash-strength"><i style="width:46%;background:var(--accent)"></i></div>
|
||
</div>
|
||
<p style="font-size:11.5px;color:var(--text-3);margin-top:8px;line-height:1.7">星盘为活的仪表:呼吸刻度 7s、慢旋轨道 120s、告警枢点 1.8s 闪烁;点击枢点下钻。烛照(gRPC 形态)受阻时宿主 fail closed,不降级——引擎缺失即拒绝执行。指标对健康不是灯板而是关系动力学(相生 / 相克)。</p>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<div class="two-col">
|
||
<div>
|
||
<section class="section" id="queue">
|
||
<div class="section__head">
|
||
<span class="cn">司议<span class="cn__plain">治理案件 · 运营视角</span></span>
|
||
<a class="more" href="#">全部 →</a>
|
||
</div>
|
||
<div class="tabs" role="tablist" aria-label="治理队列分类">
|
||
<button class="tab is-on" role="tab" aria-selected="true">内容 <span class="cnt">2</span></button>
|
||
<button class="tab" role="tab" aria-selected="false">插件 <span class="cnt">1</span></button>
|
||
<button class="tab" role="tab" aria-selected="false">市场 <span class="cnt">1</span></button>
|
||
<button class="tab" role="tab" aria-selected="false">申诉 <span class="cnt">1</span></button>
|
||
</div>
|
||
<div class="card case-card" style="margin-bottom:14px;padding-left:20px">
|
||
<div class="card__head">
|
||
<span class="badge badge--warn"><span class="badge__dot"></span>待审 <span class="mono">pending_review</span></span>
|
||
<span class="badge badge--err" style="font-size:11px"><span class="badge__dot"></span>处理时限剩 6 小时</span>
|
||
<span style="font-size:11.5px;color:var(--text-3);margin-left:auto">09-16 03:12 · 鸣冤 ×3 · 举报人已匿名保护</span>
|
||
</div>
|
||
<p style="font-size:13.5px">雅集帖子「未署名的守砚人立像二创」:疑似违反 CC BY-NC 署名要求。系统预检:来源谱系比对确认与原作者资产相似度 91%。</p>
|
||
<div style="display:flex;gap:8px;margin-top:12px;flex-wrap:wrap">
|
||
<button class="btn btn--outline btn--sm">查看原文(记录访问)</button>
|
||
<button class="btn btn--outline btn--sm">限观 · 限制展示</button>
|
||
<button class="btn btn--danger btn--sm">移除</button>
|
||
<button class="btn btn--ghost btn--sm">驳回举报</button>
|
||
</div>
|
||
</div>
|
||
<div class="card case-card" style="padding-left:20px">
|
||
<div class="card__head">
|
||
<span class="badge badge--warn"><span class="badge__dot"></span>待审 <span class="mono">pending_review</span></span>
|
||
<span style="font-size:11.5px;color:var(--text-3);margin-left:auto">09-15 18:47 · 自动扫描 + 人工复核</span>
|
||
</div>
|
||
<p style="font-size:13.5px">市场商品「曲谱排版插件 v1.4」:Manifest 声明与实际网络请求域不一致(2 个未声明域)。已触发自动下架保护,等待复核结论。</p>
|
||
<div style="display:flex;gap:8px;margin-top:12px;flex-wrap:wrap">
|
||
<button class="btn btn--outline btn--sm">查看扫描报告</button>
|
||
<button class="btn btn--danger btn--sm">确认下架</button>
|
||
<button class="btn btn--outline btn--sm">恢复上架(需备注)</button>
|
||
<button class="btn btn--ghost btn--sm">通知创作者</button>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="users" class="section">
|
||
<div class="section__head">
|
||
<span class="cn">用户<span class="cn__plain">账户状态治理</span></span>
|
||
<div class="searchbar" style="width:220px"><svg><use href="#i-search"/></svg><input type="search" placeholder="搜索用户 / ID" aria-label="搜索用户"></div>
|
||
</div>
|
||
<div class="card" style="padding:6px 18px">
|
||
<div class="list-row">
|
||
<span class="avatar avatar--sm avatar--user">岁</span>
|
||
<div class="list-row__body">
|
||
<div class="list-row__title">用户 u_7a2c… <span class="badge badge--warn" style="font-size:11px"><span class="badge__dot"></span>保全态 · 只读</span></div>
|
||
<div class="list-row__sub">欠费进入保全:角色与记忆只读保留,不删除数据(ADR-021);补缴后自动恢复</div>
|
||
</div>
|
||
<button class="btn btn--ghost btn--sm">查看保全详情</button>
|
||
</div>
|
||
<div class="list-row">
|
||
<span class="avatar avatar--sm avatar--user">尘</span>
|
||
<div class="list-row__body">
|
||
<div class="list-row__title">用户 u_31f0… <span class="badge badge--err" style="font-size:11px"><span class="badge__dot"></span>封禁 · 申诉中</span></div>
|
||
<div class="list-row__sub">封禁同样进入只读保全;申诉司议 #2041 处理中</div>
|
||
</div>
|
||
<button class="btn btn--ghost btn--sm">处理申诉</button>
|
||
</div>
|
||
</div>
|
||
<p style="font-size:12px;color:var(--text-3);margin-top:8px">不按记忆、感情或亲密等级计费;保全与删除是独立操作,删除需冷静期与二次双人授权。</p>
|
||
</section>
|
||
|
||
<section id="perms" class="section">
|
||
<div class="section__head">
|
||
<span class="cn">权限管理<span class="cn__plain">管理员账号与角色授权</span></span>
|
||
<button class="btn btn--outline btn--sm" style="margin-left:auto">新增管理员</button>
|
||
</div>
|
||
<div class="card" style="margin-bottom:14px">
|
||
<div class="card__head"><span class="cn" style="font-size:14px">管理员账号</span><span style="margin-left:auto;font-size:11.5px;color:var(--text-3)">4 个账号 · 全部启用双因素</span></div>
|
||
<div class="table-wrap"><table class="data">
|
||
<thead><tr><th>账号</th><th>角色</th><th>双因素</th><th>状态</th><th>操作</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>运维 · 甲(你)</td><td>超级管理员</td><td class="mono">TOTP + 硬件钥匙</td><td><span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>在线</span></td><td><button class="btn btn--ghost btn--sm">编辑</button></td></tr>
|
||
<tr><td>运维 · 乙</td><td>运营管理员</td><td class="mono">TOTP</td><td><span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>双人会话中</span></td><td><button class="btn btn--ghost btn--sm">编辑</button></td></tr>
|
||
<tr><td>审核 · 丙</td><td>内容审核员</td><td class="mono">TOTP</td><td><span class="badge badge--muted" style="font-size:11px"><span class="badge__dot"></span>离线</span></td><td><button class="btn btn--ghost btn--sm">编辑</button></td></tr>
|
||
<tr><td class="mono">svc-audit-ro</td><td>只读服务账号</td><td class="mono">API key · scope audit:read</td><td><span class="badge badge--muted" style="font-size:11px"><span class="badge__dot"></span>90 天轮换</span></td><td><button class="btn btn--ghost btn--sm">轮换</button></td></tr>
|
||
</tbody>
|
||
</table></div>
|
||
</div>
|
||
<div class="card" style="margin-bottom:14px">
|
||
<div class="card__head"><span class="cn" style="font-size:14px">角色权限矩阵<span class="cn__plain">RBAC</span></span><span style="margin-left:auto;font-size:11.5px;color:var(--text-3)">编辑 / 发布 / 上架 / 财务分离,与同契台同规则</span></div>
|
||
<div class="table-wrap"><table class="data">
|
||
<thead><tr><th>角色</th><th>治理裁决</th><th>支持包</th><th>用户保全</th><th>部署设置</th><th>审计读取</th><th>权限管理</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>超级管理员</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td></tr>
|
||
<tr><td>运营管理员</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td><td class="mark-ok">✓</td><td class="mark-no">—</td><td class="mark-ok">✓</td><td class="mark-no">—</td></tr>
|
||
<tr><td>内容审核员</td><td class="mark-ok">✓(内容)</td><td class="mark-no">—</td><td class="mark-no">—</td><td class="mark-no">—</td><td class="mark-ok">✓(只读)</td><td class="mark-no">—</td></tr>
|
||
<tr><td>只读服务账号</td><td class="mark-no">—</td><td class="mark-no">—</td><td class="mark-no">—</td><td class="mark-no">—</td><td class="mark-ok">✓</td><td class="mark-no">—</td></tr>
|
||
</tbody>
|
||
</table></div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="card__head"><span class="cn" style="font-size:14px">双人授权策略</span><span style="margin-left:auto;font-size:11.5px;color:var(--text-3)">策略本身修改也需要双人授权</span></div>
|
||
<div class="set-row">
|
||
<div class="set-row__body"><div class="set-row__t">敏感操作双人授权</div><div class="set-row__d">治理裁决移除 / 用户保全变更 / 支持包生成 / 权限变更,均需两名管理员在线授权</div></div>
|
||
<span class="switch"><input type="checkbox" checked disabled aria-label="双人授权已启用(策略锁定)"><i></i></span>
|
||
</div>
|
||
<div class="set-row">
|
||
<div class="set-row__body"><div class="set-row__t">管理会话时长上限</div><div class="set-row__d">60 分钟 · 到期自动退出并留审计</div></div>
|
||
<span class="mono" style="font-size:12.5px;color:var(--text-2)">60 min</span>
|
||
</div>
|
||
<div class="set-row">
|
||
<div class="set-row__body"><div class="set-row__t">Break-glass 紧急通道</div><div class="set-row__d">默认关闭;紧急启用后所有操作事后复核,48 小时内强制复盘</div></div>
|
||
<span class="badge badge--muted" style="font-size:11px"><span class="badge__dot"></span>关闭 <span class="mono">off</span></span>
|
||
</div>
|
||
</div>
|
||
<p style="font-size:12px;color:var(--text-3);margin-top:8px">角色与权限变更即时生效并写入审计;被移除管理员的进行中双人会话立即失效。权限矩阵不包含「读取私箧 / 读取消息明文」——该权限不存在。</p>
|
||
</section>
|
||
|
||
<section id="tickets" class="section">
|
||
<div class="section__head">
|
||
<span class="cn">支持工单<span class="cn__plain">3 未结</span></span>
|
||
<a class="more" href="#">全部 →</a>
|
||
</div>
|
||
<div class="card" style="padding:6px 18px">
|
||
<div class="list-row">
|
||
<span class="badge badge--info" style="flex:none;font-size:11px"><span class="badge__dot"></span>处理中</span>
|
||
<div class="list-row__body">
|
||
<div class="list-row__title">#88231 · 对话流中断后未收到最终答复</div>
|
||
<div class="list-row__sub">用户云舟 · 09-15 21:04 提交 · 已关联 Run 快照(诊断双授权待用户批准)</div>
|
||
</div>
|
||
<button class="btn btn--outline btn--sm">回复</button>
|
||
</div>
|
||
<div class="list-row">
|
||
<span class="badge badge--muted" style="flex:none;font-size:11px"><span class="badge__dot"></span>待分派</span>
|
||
<div class="list-row__body">
|
||
<div class="list-row__title">#88229 · 退款争议:雾中茶寮 v3 下载后要求退款</div>
|
||
<div class="list-row__sub">按市契 14 天未下载规则预检:已下载,转争议流程</div>
|
||
</div>
|
||
<button class="btn btn--outline btn--sm">分派</button>
|
||
</div>
|
||
</div>
|
||
<div class="card" style="margin-top:12px">
|
||
<div class="card__head">
|
||
<span class="cn">支持包<span class="cn__plain">脱敏诊断导出</span></span>
|
||
<button class="btn btn--cinnabar btn--sm" style="margin-left:auto">生成 #88231 支持包</button>
|
||
</div>
|
||
<p style="font-size:12.5px;color:var(--text-2)">支持包为脱敏导出:包含 Run 结构化轨迹、错误与计数;<span style="color:var(--text-1)">不包含</span>消息明文、私箧、隐藏推理、密钥与签名 URL。生成需双人授权并计入审计,用户侧可见支持包被生成的记录。</p>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
|
||
<div>
|
||
<section id="health" class="section card">
|
||
<div class="card__head"><span class="cn">部署健康<span class="cn__plain">自托管 · 标准服务器</span></span><button class="icon-btn" aria-label="刷新"><svg><use href="#i-refresh"/></svg></button></div>
|
||
<div class="set-row">
|
||
<svg style="width:16px;height:16px;color:var(--text-3)"><use href="#i-database"/></svg>
|
||
<div class="set-row__body"><div class="set-row__t">PostgreSQL 主库</div><div class="set-row__d">权威事实源 · 复制延迟 0.4s</div></div>
|
||
<span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>正常</span>
|
||
</div>
|
||
<div class="set-row">
|
||
<svg style="width:16px;height:16px;color:var(--text-3)"><use href="#i-server"/></svg>
|
||
<div class="set-row__body"><div class="set-row__t">Worker ×2</div><div class="set-row__sub set-row__d">Outbox 消费 · 队列深度 14</div></div>
|
||
<span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>正常</span>
|
||
</div>
|
||
<div class="set-row">
|
||
<svg style="width:16px;height:16px;color:var(--text-3)"><use href="#i-package"/></svg>
|
||
<div class="set-row__body"><div class="set-row__t">Sandbox Worker</div><div class="set-row__d">隔离容器池 · 无符合策略后端时拒绝执行(fail closed)</div></div>
|
||
<span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>正常</span>
|
||
</div>
|
||
<div class="set-row">
|
||
<svg style="width:16px;height:16px;color:var(--text-3)"><use href="#i-cpu"/></svg>
|
||
<div class="set-row__body"><div class="set-row__t cn">灵台<span class="cn__plain">引擎核心运行中 · 进程内 C ABI</span></div><div class="set-row__d mono">hj_core v1.4.2 · ABI 快照一致 · fuzz 无新增</div></div>
|
||
<span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>运转</span>
|
||
</div>
|
||
<div class="set-row" style="border-color:color-mix(in srgb,var(--warn) 35%,transparent)">
|
||
<svg style="width:16px;height:16px;color:var(--warn)"><use href="#i-server"/></svg>
|
||
<div class="set-row__body"><div class="set-row__t cn">灵台 · 服务形态<span class="cn__plain">gRPC · 内网 mTLS</span></div><div class="set-row__d">健康检查超时 2 次 · 语义与进程内形态一致(golden 通过);不可达时宿主 fail closed,不降级</div></div>
|
||
<span class="badge badge--warn" style="font-size:11px"><span class="badge__dot"></span>受阻 <span class="mono">degraded</span></span>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="backup" class="section card">
|
||
<div class="card__head"><span class="cn">迁移与备份</span><button class="icon-btn" aria-label="立即备份"><svg><use href="#i-refresh"/></svg></button></div>
|
||
<div class="set-row" style="padding:8px 0"><div class="set-row__body"><div class="set-row__t">最近全量备份</div><div class="set-row__d">今日 03:00 · 增量每 5 分钟 · 连续 7 日校验通过</div></div><span class="mono" style="font-size:12.5px;color:var(--ok)">42s RPO</span></div>
|
||
<div class="set-row" style="padding:8px 0"><div class="set-row__body"><div class="set-row__t">迁移状态</div><div class="set-row__d">Alembic head · 34 个版本 · 无漂移</div></div><span class="badge badge--ok" style="font-size:11px"><span class="badge__dot"></span>一致</span></div>
|
||
<div class="set-row" style="padding:8px 0"><div class="set-row__body"><div class="set-row__t">恢复演练</div><div class="set-row__d">09-01 通过 · 删除重放与插件撤架演练各 1 次</div></div><button class="btn btn--outline btn--sm">发起演练</button></div>
|
||
</section>
|
||
|
||
<section class="section card" style="border-color:color-mix(in srgb,var(--warn) 40%,transparent)">
|
||
<div class="card__head"><span class="cn" style="color:var(--warn)">活跃告警<span class="cn__plain">1</span></span></div>
|
||
<div style="display:flex;gap:10px;align-items:flex-start">
|
||
<svg style="width:16px;height:16px;color:var(--warn);flex:none;margin-top:3px"><use href="#i-alert"/></svg>
|
||
<div>
|
||
<div style="font-size:13.5px">对象存储写入延迟 P99 超阈值(2.8s > 2s,持续 12 分钟)</div>
|
||
<div style="font-size:12px;color:var(--text-3);margin-top:4px">影响:媒体上传整备变慢 · 自动扩容已触发 · 事故响应等级 S3</div>
|
||
<div style="display:flex;gap:8px;margin-top:10px">
|
||
<button class="btn btn--outline btn--sm">查看指标</button>
|
||
<button class="btn btn--ghost btn--sm">认领处理</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="slo" class="section card">
|
||
<div class="card__head"><span class="cn">SLO 与恢复目标</span><a class="more" href="#">指标 →</a></div>
|
||
<div class="drive-row"><span class="drive-row__label">可用性</span><div class="progress"><div class="progress__bar" style="width:99.87%"></div></div><span class="drive-row__val">99.87%</span></div>
|
||
<div class="set-row" style="padding:8px 0"><div class="set-row__body"><div class="set-row__t">RPO(数据丢失上限)</div></div><span class="mono" style="font-size:12.5px">≤ 5 分钟 · 实测 42s</span></div>
|
||
<div class="set-row" style="padding:8px 0"><div class="set-row__body"><div class="set-row__t">RTO(恢复时限)</div></div><span class="mono" style="font-size:12.5px">≤ 1 小时 · 演练 09-01 通过</span></div>
|
||
<div class="set-row" style="padding:8px 0"><div class="set-row__body"><div class="set-row__t">区域驻留</div></div><span style="font-size:12px;color:var(--ok)">cn-east-1 · 未跨区漂移</span></div>
|
||
</section>
|
||
|
||
<section id="audit" class="section card">
|
||
<div class="card__head"><span class="cn">审计快照<span class="cn__plain">管理面操作全部留痕</span></span><a class="more" href="#">完整审计 →</a></div>
|
||
<div class="timeline">
|
||
<div class="timeline-volume">卷 · 0916</div>
|
||
<div class="timeline__item"><div class="timeline__date">09-16 09:31</div><div class="timeline__title">双人授权会话开启</div><div class="timeline__sub">运维甲 + 运维乙 · 60 分钟</div></div>
|
||
<div class="timeline__item"><div class="timeline__date">09-16 09:12</div><div class="timeline__title">限观决定:帖子 #77213</div><div class="timeline__sub">双人授权 · 操作者已留痕</div></div>
|
||
<div class="timeline__item timeline__item--muted"><div class="timeline__date">09-16 02:40</div><div class="timeline__title">私箧读取尝试(自动拦截)</div><div class="timeline__sub">策略拒绝 · 管理员不可读私箧 · 已通知账户持有人</div></div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</main>
|
||
</div>
|
||
<script src="assets/app.js?v=3"></script>
|
||
</body>
|
||
</html>
|