20260726 修复rpki-explorer体验问题32项(#130):RocksDB max_open_files+compose ulimits、objects列表流式早停+scope前置(每页2.85s->10ms级)、未知/过期run统一404、runs倒序、导出文件名Content-Disposition、路径段percent_decode、nginx /api/v1代理与400回SPA;前端serialNumber schema、30s请求超时、reason筛选、组合VRP查询、导出反馈与repo/PP入口、键盘可达、cursor进URL、分页/对比度/skip-link等体验项

This commit is contained in:
2026-07-27 13:05:56 +08:00
parent 001f13209f
commit cf68abf642
36 changed files with 1082 additions and 125 deletions

View File

@@ -36,7 +36,7 @@ import {
truncateMiddle,
} from "../lib/format";
import { withRunParam } from "../lib/run";
import { useRun } from "../lib/useRun";
import { useRun, runErrorTitle } from "../lib/useRun";
/** Semantic colors keyed by validation result — never assigned by index. */
const RESULT_COLORS: Record<string, string> = {
@@ -126,7 +126,7 @@ export default function OverviewPage() {
<ErrorBlock
error={runQuery.error}
onRetry={() => runQuery.refetch()}
title="Failed to load the latest run"
title={runErrorTitle(runId, runQuery.error)}
/>
</div>
);
@@ -170,6 +170,17 @@ export default function OverviewPage() {
numeric: true,
render: (repo) => formatDurationMs(repo.syncDurationMsTotal),
},
{
key: "terminal",
header: "Terminal states",
render: (repo) => (
<span className="chip-list">
{Object.entries(repo.terminalStates ?? {}).map(([state, count]) => (
<StatusPill key={state} status={state} label={`${state} ${formatInt(count)}`} />
))}
</span>
),
},
];
return (
@@ -224,6 +235,7 @@ export default function OverviewPage() {
value={formatInt(counts?.warnings)}
tone="amber"
sub="objects with warnings"
to={withRunParam("/validation", runId)}
/>
</div>
@@ -238,7 +250,7 @@ export default function OverviewPage() {
) : (
<>
<div className="chart-box">
<ResponsiveContainer>
<ResponsiveContainer initialDimension={{ width: 400, height: 240 }}>
<PieChart>
<Pie
data={validationData}
@@ -286,7 +298,7 @@ export default function OverviewPage() {
<p className="text-muted">No object type stats recorded.</p>
) : (
<div className="chart-box">
<ResponsiveContainer>
<ResponsiveContainer initialDimension={{ width: 400, height: 240 }}>
<BarChart data={typeData} layout="vertical" margin={{ left: 12, right: 24 }}>
<XAxis type="number" hide />
<YAxis