81 行
3.0 KiB
HTML
81 行
3.0 KiB
HTML
|
|
<!doctype html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>websafe authorized lab dashboard</title>
|
|
<link rel="stylesheet" href="./assets/styles.css">
|
|
</head>
|
|
<body>
|
|
<div class="dashboard-shell">
|
|
<header class="hero">
|
|
<div class="hero-grid">
|
|
<div>
|
|
<div class="eyebrow">Authorized Lab Dashboard</div>
|
|
<h1>本地攻防实证工作台</h1>
|
|
<p>面向授权实验场景的本地静态前端。聚合 advisory、run bundle、日志、浏览器证据、失败原因、利用思路与源头信息,并支持可折叠细节与自动刷新。</p>
|
|
<div class="hero-actions">
|
|
<button id="refreshDashboard" class="chip" type="button">Refresh Dashboard</button>
|
|
<label class="ghost-chip"><input id="autoRefresh" type="checkbox" checked> Auto Refresh</label>
|
|
<a class="ghost-chip" href="./summary.json" target="_blank" rel="noreferrer">Open Summary JSON</a>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="panel-header">
|
|
<h2>Sync State</h2>
|
|
<div id="syncState" class="sync-indicator"><span class="dot"></span><strong>Booting</strong><span>Loading generated JSON</span></div>
|
|
</div>
|
|
<div id="metrics" class="hero-meta"></div>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="workspace">
|
|
<aside class="sidebar">
|
|
<section class="glass-panel">
|
|
<div class="panel-header">
|
|
<h2>Filters</h2>
|
|
<span id="runCount" class="tag">0 shown</span>
|
|
</div>
|
|
<div class="filters">
|
|
<label>Search
|
|
<input id="searchInput" placeholder="Search run id, advisory, title">
|
|
</label>
|
|
<label>System
|
|
<select id="systemFilter"><option value="">All systems</option></select>
|
|
</label>
|
|
<label>Status
|
|
<select id="statusFilter"><option value="">All statuses</option></select>
|
|
</label>
|
|
<label>Profile
|
|
<select id="familyFilter"><option value="">All profiles</option></select>
|
|
</label>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="glass-panel">
|
|
<div class="panel-header"><h2>Systems</h2></div>
|
|
<div id="systemCoverage" class="system-grid"></div>
|
|
</section>
|
|
|
|
<section class="glass-panel">
|
|
<div class="panel-header"><h2>Recent Failures</h2></div>
|
|
<div id="failureFeed" class="failure-feed"></div>
|
|
</section>
|
|
|
|
<section class="glass-panel">
|
|
<div class="panel-header"><h2>Run Queue View</h2></div>
|
|
<div id="runList" class="run-list"></div>
|
|
</section>
|
|
</aside>
|
|
|
|
<main id="detailRoot" class="detail-view">
|
|
<div class="glass-panel empty-state">Select a run to inspect full details.</div>
|
|
</main>
|
|
</div>
|
|
</div>
|
|
<script src="./assets/app.js"></script>
|
|
</body>
|
|
</html>
|