以 hub-kimi.html + SPEC-V11.md(v12) 为唯一视觉基线,将 /admin/ 重写为 运行总览 / 数据源配置 / 数据血缘 三页单一入口;接入 HEL-543 只读旁路 与既有 admin API,保留调度/发布/审计与危险操作入口,零新依赖。 Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: multica-agent <github@multica.ai>
113 lines
5.2 KiB
HTML
113 lines
5.2 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>小白复盘 · 数据中枢</title>
|
||
<link rel="stylesheet" href="/admin/styles.css" />
|
||
</head>
|
||
<body>
|
||
<div id="app">
|
||
|
||
<div id="login-view" class="auth-wrap bg-ambient" hidden>
|
||
<section class="panel auth-panel">
|
||
<h1>数据中枢</h1>
|
||
<p class="muted">内网管理后台 · 运行总览 / 数据源配置 / 数据血缘。</p>
|
||
<form id="login-form">
|
||
<label>账号 <input name="username" value="hub_admin" autocomplete="username" /></label>
|
||
<label>密码 <input name="password" type="password" autocomplete="current-password" /></label>
|
||
<button type="submit">登录</button>
|
||
<p id="login-error" class="error" hidden></p>
|
||
</form>
|
||
</section>
|
||
</div>
|
||
|
||
<div id="change-view" class="auth-wrap bg-ambient" hidden>
|
||
<section class="panel auth-panel">
|
||
<h1>修改初始密码</h1>
|
||
<p class="muted">首次登录需先设置新密码才能进入。</p>
|
||
<form id="change-form">
|
||
<label>当前密码 <input name="current" type="password" autocomplete="current-password" /></label>
|
||
<label>新密码(至少 8 位) <input name="new_password" type="password" autocomplete="new-password" /></label>
|
||
<button type="submit">保存并继续</button>
|
||
<p id="change-error" class="error" hidden></p>
|
||
</form>
|
||
</section>
|
||
</div>
|
||
|
||
<div class="app bg-ambient" id="appRoot" hidden>
|
||
<div class="bg-layer bg-gridlines z0"></div>
|
||
<div class="bg-layer scanlines z50"></div>
|
||
|
||
<header class="hdr">
|
||
<div class="hdr-in">
|
||
<div class="radar" style="width:26px;height:26px" id="radarLogo">
|
||
<div class="sweep radar-sweep"></div>
|
||
<div class="ring1" style="inset:5.72px"></div>
|
||
<div class="ring2" style="inset:9.88px"></div>
|
||
<div class="center"></div>
|
||
</div>
|
||
<div class="brand"><span class="b1">小白复盘 <span style="color:#22d3ee">·</span> 数据中枢</span><span class="b2">DATA-HUB · HEL-529</span></div>
|
||
<span class="vsep"></span>
|
||
<nav class="nav" id="navEl">
|
||
<button class="navbtn" data-nav="overview"><span class="tri">▸</span>运行总览<span class="en">OVERVIEW</span></button>
|
||
<button class="navbtn" data-nav="sources"><span class="tri">▸</span>数据源配置<span class="en">SOURCES</span></button>
|
||
<button class="navbtn" data-nav="lineage"><span class="tri">▸</span>数据血缘<span class="en">LINEAGE</span></button>
|
||
</nav>
|
||
<span class="flex1"></span>
|
||
<span class="mdtag" id="phaseTag"></span>
|
||
<span class="livespan" id="liveSpan"><span class="livedot pulse-dot"></span>LIVE</span>
|
||
<span class="clock num" id="clock"><span id="ckD"></span><span class="csep">|</span><span class="ct"><span id="ckH"></span><span class="csep">:</span><span id="ckM"></span><span class="csep">:</span><span id="ckS"></span></span></span>
|
||
<span class="vsep"></span>
|
||
<button class="tbtn" id="opsBtn" style="font-size:10px">调度 / 发布 / 审计</button>
|
||
<button class="tbtn" id="calmBtn" style="font-size:10px">减少动态</button>
|
||
<span id="who" class="muted" style="font-size:10px"></span>
|
||
<button class="tbtn" id="logout-btn" style="font-size:10px">退出</button>
|
||
</div>
|
||
</header>
|
||
|
||
<main class="main" id="mainEl"></main>
|
||
|
||
<footer class="tape">
|
||
<span class="tape-label" id="tapeLed">EVENT TAPE</span>
|
||
<div class="tape-view"><div class="marquee-track" id="marqueeTrack"><span style="display:inline-flex;align-items:center" id="tapeA"></span><span style="display:inline-flex;align-items:center" id="tapeB"></span></div></div>
|
||
</footer>
|
||
</div>
|
||
|
||
<div class="drawer-mask" id="drawerMask">
|
||
<aside class="drawer">
|
||
<div class="drawer-hd">
|
||
<span class="ttl">调度 / 发布 / 审计</span>
|
||
<span class="sub" id="drawerSub"></span>
|
||
<button class="drawer-close" id="drawerClose">×</button>
|
||
</div>
|
||
<div class="drawer-tabs" id="drawerTabs">
|
||
<button class="drawer-tab" data-dtab="jobs">调度任务</button>
|
||
<button class="drawer-tab" data-dtab="release">盘后发布</button>
|
||
<button class="drawer-tab" data-dtab="audit">审计</button>
|
||
</div>
|
||
<div class="drawer-body" id="drawerBody"></div>
|
||
</aside>
|
||
</div>
|
||
|
||
<div class="modal-mask" id="modalMask">
|
||
<div class="modal-box">
|
||
<h3 id="modalTitle">危险操作确认</h3>
|
||
<p id="modalDesc"></p>
|
||
<label>管理密码 <input id="modalPassword" type="password" autocomplete="current-password" /></label>
|
||
<label id="modalConfirmWrap">请输入确认词 <span id="modalConfirmWord" class="num" style="color:#fbbf24"></span> <input id="modalConfirm" type="text" autocomplete="off" /></label>
|
||
<p class="modal-err" id="modalErr"></p>
|
||
<div class="modal-actions">
|
||
<button class="tbtn" id="modalCancel">取消</button>
|
||
<button class="tbtn danger" id="modalOk">确认执行</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="toast" id="toastEl"></div>
|
||
|
||
</div>
|
||
<script src="/admin/app.js"></script>
|
||
</body>
|
||
</html>
|