From a2207cb20837d72b45a01a409a5f42215f6168f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 1 Sep 2026 15:21:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B=E5=90=8E=E5=8F=B0=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E6=8A=A5=E5=91=8A=E5=88=97=E8=A1=A8=E4=BA=A4=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 防止列表请求过期响应覆盖当前筛选结果 为报告行增加键盘打开详情支持 截断详情事件预览并延迟回收下载对象 URL --- .../src/pages/AdminErrorReportsPage.tsx | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/apps/admin-web/src/pages/AdminErrorReportsPage.tsx b/apps/admin-web/src/pages/AdminErrorReportsPage.tsx index 9c58a5ef7..0ac7f508c 100644 --- a/apps/admin-web/src/pages/AdminErrorReportsPage.tsx +++ b/apps/admin-web/src/pages/AdminErrorReportsPage.tsx @@ -24,15 +24,18 @@ export function AdminErrorReportsPage({ token, onUnauthorized }: Props) { const [busy, setBusy] = useState(false); const [filterStatus, setFilterStatus] = useState(''); const openReportRequestId = useRef(0); + const loadRequestId = useRef(0); const load = useCallback(async () => { + const requestId = ++loadRequestId.current; setStatus(''); try { const response = await listAdminErrorReports(token, { status: filterStatus || undefined, }); - setReports(response.reports); + if (requestId === loadRequestId.current) setReports(response.reports); } catch (error) { + if (requestId !== loadRequestId.current) return; if (isAdminApiError(error) && error.status === 401) return onUnauthorized(); setStatus(formatAdminApiError(error)); @@ -88,7 +91,7 @@ export function AdminErrorReportsPage({ token, onUnauthorized }: Props) { document.body.appendChild(anchor); anchor.click(); anchor.remove(); - URL.revokeObjectURL(url); + setTimeout(() => URL.revokeObjectURL(url), 1000); } catch (error) { if (isAdminApiError(error) && error.status === 401) onUnauthorized(); else setStatus(formatAdminApiError(error)); @@ -139,6 +142,14 @@ export function AdminErrorReportsPage({ token, onUnauthorized }: Props) { void openReport(report.batchId)} + role="button" + tabIndex={0} + onKeyDown={(event) => { + if (event.key === 'Enter' || event.key === ' ') { + event.preventDefault(); + void openReport(report.batchId); + } + }} > {report.batchId} {report.eventCount} @@ -168,7 +179,7 @@ export function AdminErrorReportsPage({ token, onUnauthorized }: Props) { 用户:{selected.userId} · 事件:{selected.eventCount} · 日志: {selected.logCount}

-
{JSON.stringify(selected.events, null, 2)}
+
{JSON.stringify(selected.events.slice(0, 20), null, 2)}
{selected.userDescription ? (

用户描述:{selected.userDescription}

) : null}