Files
Your Name b5205d0543 feat: 用户视角 — 按用户聚合 LD 板使用信息
- 新增 DomainDetail 数据模型存储逐域归属 (Owner/PID/T-Pod/Design)
- 解析详细版 test_server 输出 (Logic drawer X has N domains 格式)
- 新增 /users 页面 + /api/users API 按用户聚合 LD 板
- 修复邮件配置保存时中文逗号收件人分割问题
- 修复邮件发送时 ASCII 编码错误 (收件人含中文逗号)
2026-07-15 12:32:48 +08:00

64 lines
2.8 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>{% block title %}Palladium Monitor{% endblock %}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
{% block head %}{% endblock %}
</head>
<body>
<nav class="topnav">
<div class="nav-brand">
<span class="nav-logo"></span>
<span class="nav-title">Palladium Monitor</span>
</div>
<div class="nav-links">
<a href="{{ url_for('dashboard') }}" class="{% if request.endpoint == 'dashboard' %}active{% endif %}">仪表板</a>
<a href="{{ url_for('history') }}" class="{% if request.endpoint == 'history' %}active{% endif %}">历史记录</a>
<a href="{{ url_for('users_page') }}" class="{% if request.endpoint == 'users_page' %}active{% endif %}">👤 用户</a>
<a href="{{ url_for('email_config') }}" class="{% if request.endpoint == 'email_config' %}active{% endif %}">⚙️ 设置</a>
<button class="nav-btn" onclick="openPasteModal()">📥 粘贴数据</button>
</div>
</nav>
<main class="container">
{% block content %}{% endblock %}
</main>
<!-- 粘贴数据弹窗 -->
<div id="pasteModal" class="modal-overlay" style="display:none;">
<div class="modal">
<div class="modal-header">
<h2>📥 粘贴 test_server -short 输出</h2>
<button class="modal-close" onclick="closePasteModal()"></button>
</div>
<form action="{{ url_for('paste_data') }}" method="POST">
<div class="modal-body">
<p class="modal-hint">在 Palladium 主机执行 <code>test_server -short</code>,将输出粘贴到下方:</p>
<textarea name="raw_output" rows="20" class="paste-textarea"
placeholder="Emulator: sc01_emu Hardware: Palladium ..."></textarea>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" onclick="closePasteModal()">取消</button>
<button type="submit" class="btn btn-primary">解析并存储</button>
</div>
</form>
</div>
</div>
<script>
function openPasteModal() {
document.getElementById('pasteModal').style.display = 'flex';
}
function closePasteModal() {
document.getElementById('pasteModal').style.display = 'none';
}
document.getElementById('pasteModal').addEventListener('click', function(e) {
if (e.target === this) closePasteModal();
});
</script>
{% block scripts %}{% endblock %}
</body>
</html>