feat: 新增错误问题追踪与管理功能

- 升级程序版本至 v1.5.25
- 新增对比度文本颜色计算与垂直滚动条绘制工具函数,优化选择界面滚动显示
- 网页端新增问题记录管理页面,配套完整的表格与详情展示样式
- 实现issue记录标准化处理、实时事件推送接收与按时间倒序排序展示
- 重构原有选择界面的滚动逻辑,替换为通用滚动条绘制函数
This commit is contained in:
2026-07-29 12:29:54 +08:00
parent 0e8f86b478
commit 7e72bbeae5
5 changed files with 394 additions and 28 deletions
+27 -8
View File
@@ -961,7 +961,7 @@
</div>
</div>
<table v-if="issues && issues.length > 0">
<table v-if="issues && issues.length > 0" class="jr-issue-table">
<thead>
<tr>
<th>时间</th>
@@ -974,14 +974,33 @@
<tbody>
<tr v-for="(issue, idx) in issues" :key="idx">
<td style="white-space: nowrap;">{{ formatTime(issue.ts) }}</td>
<td class="mono">{{ issue.device || issue.machine_id }}</td>
<td>{{ issue.station_code }}</td>
<td style="color: var(--danger); font-weight: bold;">{{ issue.error_msg }}</td>
<td>
<details v-if="issue.detail">
<summary class="text-muted" style="cursor: pointer;">查看详情</summary>
<pre style="white-space: pre-wrap; margin: 8px 0 0; font-size: 0.85rem; line-height: 1.35; color: #fff;">{{ issue.detail }}</pre>
</details>
<div class="jr-issue-primary mono">{{ issue.displayDevice }}</div>
<div v-if="issue.machine_id && issue.machine_id !== issue.displayDevice" class="jr-issue-sub mono">{{ issue.machine_id }}</div>
</td>
<td>
<div class="jr-issue-primary">{{ issue.displayStation }}</div>
<div v-if="issue.station_code" class="jr-issue-sub mono">{{ issue.station_code }}</div>
</td>
<td>
<div class="jr-issue-error">{{ issue.displayError }}</div>
</td>
<td class="jr-issue-detail-cell">
<div v-if="issue.detailEntries && issue.detailEntries.length" class="jr-issue-detail-card">
<div class="jr-issue-detail-grid">
<div v-for="entry in issue.detailEntries" :key="`${idx}-${entry.key}`" class="jr-issue-detail-item">
<span>{{ entry.label }}</span>
<strong>{{ entry.value }}</strong>
</div>
</div>
<details v-if="issue.detailRaw" class="jr-issue-raw-block">
<summary>查看原始内容</summary>
<pre>{{ issue.detailRaw }}</pre>
</details>
</div>
<div v-else-if="issue.detailRaw" class="jr-issue-plain-detail">
<pre>{{ issue.detailRaw }}</pre>
</div>
<span v-else class="text-muted">无</span>
</td>
</tr>