feat: readable report and host detail layout in web UI (0.9.8)

Field grid for event/host cards, human-readable daily report labels,
and normalized plain-text report bodies.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-11 10:25:53 +10:00
parent fed21c536b
commit befaf86bf4
8 changed files with 203 additions and 139 deletions
+9 -5
View File
@@ -1,15 +1,14 @@
<template>
<h1>Отчёты агентов</h1>
<p class="report-intro">
Ежедневные сводки с узлов (<code>report.daily.ssh</code>, <code>report.daily.rdp</code>). Нажмите на строку,
чтобы открыть полный отчёт с форматированием.
Ежедневные сводки с агентов. Нажмите на строку, чтобы открыть полный отчёт с форматированием.
</p>
<div class="filters">
<input v-model="hostname" placeholder="hostname / имя сервера" @keyup.enter="load(1)" />
<select v-model="reportType" @change="load(1)">
<option value="report.daily.ssh">SSH (report.daily.ssh)</option>
<option value="report.daily.rdp">RDP (report.daily.rdp)</option>
<option value="report.daily.ssh">Отчёты ssh клиентов</option>
<option value="report.daily.rdp">Отчёты RDP клиентов</option>
</select>
<button type="button" @click="load(1)">Применить</button>
</div>
@@ -42,7 +41,7 @@
<strong>{{ e.hostname }}</strong>
</td>
<td>{{ formatServerName(e.display_name) }}</td>
<td><code>{{ e.type }}</code></td>
<td>{{ reportTypeLabel(e.type) }}</td>
<td class="report-summary-cell">{{ e.summary }}</td>
</tr>
</tbody>
@@ -67,6 +66,11 @@ import { onMounted, ref, watch } from "vue";
import { useRoute, useRouter } from "vue-router";
import { apiFetch, type EventListResponse } from "../api";
import { formatServerName } from "../utils/hostDisplay";
import { dailyReportTypeLabel } from "../utils/reportDisplay";
function reportTypeLabel(type: string) {
return dailyReportTypeLabel(type);
}
const route = useRoute();
const router = useRouter();