Files
ewoooc/templates/logs.html
OoO fe6180b8ad
All checks were successful
CD Pipeline / deploy (push) Successful in 57s
Polish logs mobile layout
2026-05-12 19:44:54 +08:00

132 lines
4.9 KiB
HTML

{% extends 'ewoooc_base.html' %}
{% block title %}系統日誌 - WOOO TECH{% endblock %}
{% block page_accent %}observability{% endblock %}
{% block extra_css %}
<link rel="stylesheet" href="{{ url_for('static', filename='css/page-logs.css') }}">
{% endblock %}
{% block content %}
<div class="page-logs">
<!-- Page Header -->
<header class="page-header">
<h4><i class="fas fa-file-alt me-2"></i>系統即時日誌</h4>
<div class="status-indicators">
<div class="status-item">
<span class="status-dot"></span>
<span id="connection-status">連接正常</span>
</div>
<div class="status-item">
<i class="fas fa-clock"></i>
<span id="last-update">最後更新: --</span>
</div>
</div>
</header>
<!-- Statistics Cards -->
<section class="stats-grid">
{% set stats = [
('total', 'fa-list', 'total-lines', '總行數'),
('error', 'fa-times-circle', 'error-count', 'ERROR'),
('warning', 'fa-exclamation-triangle','warning-count', 'WARNING'),
('info', 'fa-info-circle', 'info-count', 'INFO')
] %}
{% for kind, icon, vid, label in stats %}
<article class="stat-card stat-card--{{ kind }}">
<div class="stat-icon"><i class="fas {{ icon }}"></i></div>
<div class="stat-content">
<div class="stat-value" id="{{ vid }}">0</div>
<div class="stat-label">{{ label }}</div>
</div>
</article>
{% endfor %}
</section>
<!-- Control Panel -->
<section class="control-panel">
<div class="control-section">
<div class="control-section-title">主要操作</div>
<div class="control-buttons">
<button class="btn-control btn-control--refresh" onclick="refreshLogs()" aria-label="立即刷新">
<i class="fas fa-sync-alt"></i><span>立即刷新</span>
</button>
<button class="btn-control btn-control--pause" id="pause-btn" onclick="toggleAutoRefresh()" aria-label="暫停自動刷新">
<i class="fas fa-pause"></i><span>暫停自動刷新</span>
</button>
<button class="btn-control btn-control--clear" onclick="clearLogs()" aria-label="清除日誌">
<i class="fas fa-eraser"></i><span>清除日誌</span>
</button>
<button class="btn-control btn-control--download" onclick="downloadLogs()" aria-label="下載日誌">
<i class="fas fa-download"></i><span>下載日誌</span>
</button>
</div>
</div>
<div class="control-section">
<div class="control-section-title">過濾與搜尋</div>
<div class="filter-row">
<div class="filter-buttons">
{% for level, icon, label in [
('all', 'fa-list', 'ALL'),
('error', 'fa-times-circle', 'ERROR'),
('warning', 'fa-exclamation-triangle','WARNING'),
('info', 'fa-info-circle', 'INFO')
] %}
<button class="btn-filter btn-filter--{{ level }}{% if level == 'all' %} is-active{% endif %}"
data-level="{{ level }}" onclick="filterByLevel('{{ level }}')">
<i class="fas {{ icon }} me-1"></i>{{ label }}
</button>
{% endfor %}
</div>
<div class="search-box" id="search-box">
<i class="fas fa-search search-icon"></i>
<input type="text" id="search-input" placeholder="搜尋關鍵字..." oninput="searchLogs()">
<i class="fas fa-times clear-icon" onclick="clearSearch()"></i>
</div>
</div>
</div>
<div class="control-section control-section--last">
<div class="control-section-title">顯示選項</div>
<div class="display-row">
<div class="font-size-group">
<span class="form-hint">字體大小:</span>
<div class="font-size-controls">
{% for size, label in [('small','小'), ('medium','中'), ('large','大')] %}
<button class="btn-font-size{% if size == 'medium' %} is-active{% endif %}"
data-size="{{ size }}" onclick="changeFontSize('{{ size }}')">{{ label }}</button>
{% endfor %}
</div>
</div>
<div class="toggle-group">
<div class="toggle-item">
<label class="toggle-switch">
<input type="checkbox" id="auto-scroll-toggle" checked onchange="toggleAutoScroll()">
<span class="slider"></span>
</label>
<span class="toggle-label">自動滾動</span>
</div>
</div>
</div>
</div>
</section>
<!-- Log Container -->
<section class="log-container-wrapper">
<div id="log-container" class="font-medium">
<div class="log-empty">
<i class="fas fa-file-alt"></i>
<p>正在載入日誌...</p>
</div>
</div>
</section>
</div>
{% endblock %}
{% block extra_js %}
<script src="{{ url_for('static', filename='js/page-logs.js') }}"></script>
{% endblock %}