You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
6.8 KiB
HTML

<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Triangulation Control Panel</title>
<link rel="stylesheet" href="/static/styles.css" />
</head>
<body>
<div class="bg-glow bg-glow-a"></div>
<div class="bg-glow bg-glow-b"></div>
<main class="app-shell">
<aside class="side-nav card">
<p class="kicker">Triangulation</p>
<h1 class="side-title">Control</h1>
<div class="menu-wrap">
<button id="menu-toggle" class="btn btn-primary menu-toggle">Sections ▼</button>
<div id="menu-list" class="menu-list">
<button class="menu-item menu-item-active" data-section="overview">Overview</button>
<button class="menu-item" data-section="frequencies">Frequencies</button>
<button class="menu-item" data-section="receivers">Receivers</button>
<button class="menu-item" data-section="delivery">Delivery</button>
<button class="menu-item" data-section="servers">Servers</button>
<button class="menu-item" data-section="json">Raw JSON</button>
</div>
</div>
<div class="side-meta">
<span id="updated-at" class="badge">updated: n/a</span>
<span id="health-status" class="badge">health: n/a</span>
<span id="delivery-status" class="badge">delivery: n/a</span>
</div>
</aside>
<section class="content-area">
<section id="section-overview" class="panel panel-active">
<header class="hero card">
<h2>RF Positioning Dashboard</h2>
<p class="muted">Мониторинг и контроль расчета пересечения 3 сфер.</p>
<div class="hero-actions">
<button id="refresh-now" class="btn btn-primary">Refresh</button>
</div>
</header>
<article class="card">
<h2>Итоговая позиция</h2>
<div class="result-box">
<div><span class="muted">Selected Freq:</span> <b id="selected-freq">-</b></div>
<div><span class="muted">X:</span> <b id="pos-x">-</b></div>
<div><span class="muted">Y:</span> <b id="pos-y">-</b></div>
<div><span class="muted">Z:</span> <b id="pos-z">-</b></div>
<div><span class="muted">RMSE:</span> <b id="rmse">-</b></div>
</div>
</article>
</section>
<section id="section-frequencies" class="panel">
<article class="card">
<h2>Таблица пересечений по частотам</h2>
<div class="table-wrap">
<table id="freq-table">
<thead>
<tr>
<th>Frequency (MHz)</th>
<th>X</th>
<th>Y</th>
<th>Z</th>
<th>RMSE</th>
<th>Exact</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</article>
</section>
<section id="section-receivers" class="panel">
<article class="card">
<h2>Ресиверы</h2>
<div id="receivers-list" class="mono small"></div>
</article>
</section>
<section id="section-delivery" class="panel">
<article class="card">
<h2>Отправка на конечный сервер</h2>
<div id="delivery-details" class="mono small"></div>
</article>
</section>
<section id="section-servers" class="panel">
<article class="card">
<h2>Настройка серверов</h2>
<p class="muted">Изменения сохраняются в конфиг и требуют перезапуска сервиса.</p>
<div class="server-grid">
<label>Receiver
<select id="receiver-select"></select>
</label>
<label>Receiver URL<input id="rx-url" type="text" /></label>
<label>Filter enabled
<select id="rx-filter-enabled">
<option value="true">true</option>
<option value="false">false</option>
</select>
</label>
<label>Min freq MHz<input id="rx-min-freq" type="number" step="0.001" min="0" /></label>
<label>Max freq MHz<input id="rx-max-freq" type="number" step="0.001" min="0" /></label>
<label>Min RSSI dBm<input id="rx-min-rssi" type="number" step="0.1" /></label>
<label>Max RSSI dBm<input id="rx-max-rssi" type="number" step="0.1" /></label>
<label>Write API token (session only)<input id="write-token" type="password" /></label>
<label>Output enabled
<select id="out-enabled">
<option value="true">true</option>
<option value="false">false</option>
</select>
</label>
<label>Freq filter enabled
<select id="out-freq-filter-enabled">
<option value="true">true</option>
<option value="false">false</option>
</select>
</label>
<label>Min frequency MHz<input id="out-min-freq" type="number" step="0.001" min="0" /></label>
<label>Max frequency MHz<input id="out-max-freq" type="number" step="0.001" min="0" /></label>
<label>Output IP/host<input id="out-ip" type="text" /></label>
<label>Output port<input id="out-port" type="number" min="1" /></label>
<label>Output path<input id="out-path" type="text" /></label>
<label>Output timeout s<input id="out-timeout" type="number" step="0.1" min="0.1" /></label>
</div>
<div class="editor-actions">
<button id="load-servers" class="btn">Load</button>
<button id="save-servers" class="btn btn-primary">Save servers</button>
<span id="servers-state" class="badge">servers: n/a</span>
</div>
</article>
</section>
<section id="section-json" class="panel">
<article class="card">
<h2>Конфигурация (Raw JSON)</h2>
<div class="editor-actions">
<button id="load-config" class="btn">Load</button>
<button id="save-config" class="btn btn-primary">Save JSON</button>
<span id="config-state" class="badge">config: n/a</span>
</div>
<textarea id="config-editor" class="editor" spellcheck="false"></textarea>
</article>
</section>
</section>
</main>
<script src="/static/app.js"></script>
</body>
</html>