plc_control/web/index.html

136 lines
4.4 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>PLC Control</title>
<link rel="stylesheet" href="/ui/styles.css?v=20260320b" />
</head>
<body>
<header class="topbar">
<div class="title">PLC Control</div>
<div class="topbar-actions">
<button type="button" class="secondary" id="openApiDoc">API.md</button>
<div class="status" id="statusText">Ready</div>
</div>
</header>
<main class="grid">
<section class="panel top-left">
<div class="panel-head">
<h2>数据源</h2>
<button id="openSourceForm">+ 新增</button>
</div>
<div class="list" id="sourceList"></div>
</section>
<section class="panel top-right">
<div class="panel-head">
<h2>点位</h2>
<div class="pager">
<button class="secondary" id="prevPoints" title="上一页">&lsaquo;</button>
<span id="pointsPageInfo">1 / 1</span>
<button class="secondary" id="nextPoints" title="下一页">&rsaquo;</button>
</div>
</div>
<div class="table-wrap">
<table class="data-table">
<thead>
<tr>
<th style="width:30%">名称</th>
<th style="width:25%"></th>
<th style="width:10%">质量</th>
<th style="width:30%">更新时间</th>
<th style="width:5%"></th>
</tr>
</thead>
<tbody id="pointList"></tbody>
</table>
</div>
</section>
<section class="panel bottom-left">
<div class="panel-head">
<h2>实时日志</h2>
</div>
<div class="log" id="logView"></div>
</section>
<section class="panel bottom-right">
<div class="panel-head">
<h2 id="chartTitle">测点曲线</h2>
<button class="secondary" id="refreshChart">刷新</button>
</div>
<div class="chart-panel">
<div class="muted" id="chartSummary">点击上方点位表中的某一行查看曲线</div>
<canvas id="chartCanvas" class="chart-canvas" width="820" height="320"></canvas>
</div>
</section>
</main>
<div class="modal hidden" id="pointModal">
<div class="modal-content">
<div class="modal-head">
<h3>选择节点创建 Points</h3>
<button class="secondary" id="closeModal">×</button>
</div>
<div class="toolbar">
<button id="browseNodes">浏览并同步节点</button>
<button class="secondary" id="refreshTree">刷新树</button>
</div>
<div class="tree" id="nodeTree"></div>
<div class="modal-foot">
<div class="muted" id="selectedCount">已选中 0 个节点</div>
<button id="createPoints">创建 Points</button>
</div>
</div>
</div>
<div class="modal hidden" id="sourceModal">
<div class="modal-content modal-sm">
<div class="modal-head">
<h3>Source 配置</h3>
<button class="secondary" id="closeSourceModal">×</button>
</div>
<form id="sourceForm" class="form">
<input type="hidden" id="sourceId" />
<label>
名称
<input id="sourceName" required />
</label>
<label>
Endpoint
<input id="sourceEndpoint" placeholder="opc.tcp://host:port" required />
</label>
<label class="check-row">
<input type="checkbox" id="sourceEnabled" checked />
<span>启用</span>
</label>
<div class="form-actions">
<button type="button" class="secondary" id="sourceReset">清空</button>
<button type="submit" id="sourceSubmit">保存</button>
</div>
</form>
</div>
</div>
<div class="drawer-backdrop hidden" id="apiDocDrawer">
<aside class="drawer" role="dialog" aria-modal="true" aria-labelledby="apiDocTitle">
<div class="drawer-head">
<h3 id="apiDocTitle">API.md</h3>
<button type="button" class="secondary" id="closeApiDoc">关闭</button>
</div>
<div class="drawer-body">
<aside class="doc-toc">
<div class="doc-toc-title">目录</div>
<div class="doc-toc-list" id="apiDocToc">加载中...</div>
</aside>
<div class="markdown-doc" id="apiDocContent">加载中...</div>
</div>
</aside>
</div>
<script src="/ui/app.js?v=20260320b"></script>
</body>
</html>