diff --git a/sundynix-admin/src/api.ts b/sundynix-admin/src/api.ts index 2e4cb36..9fa22f4 100644 --- a/sundynix-admin/src/api.ts +++ b/sundynix-admin/src/api.ts @@ -647,8 +647,20 @@ export interface GuardrailEventItem { at: string; } -export async function listAudit(limit = 50, offset = 0): Promise { - const res = guard(await fetch(`${ADMIN}/audit?limit=${limit}&offset=${offset}`, { headers: authHeaders() })); +// 筛选走服务端(全库匹配)。此前是取回一页再在前端过滤,翻页外的记录搜不到—— +// 对审计来说,“搜不到”会被当成“没发生过”,是会误导结论的。 +export interface AuditQuery { + action?: string; // HTTP 方法,精确 + path?: string; // 路径前缀 + q?: string; // actor / ip / detail / path 模糊 +} + +export async function listAudit(limit = 50, offset = 0, f: AuditQuery = {}): Promise { + const p = new URLSearchParams({ limit: String(limit), offset: String(offset) }); + if (f.action) p.set("action", f.action); + if (f.path) p.set("path", f.path); + if (f.q?.trim()) p.set("q", f.q.trim()); + const res = guard(await fetch(`${ADMIN}/audit?${p}`, { headers: authHeaders() })); if (!res.ok) throw new Error(`audit failed: ${res.status}`); return ((await res.json()) as { logs?: AuditEntry[] }).logs ?? []; } diff --git a/sundynix-admin/src/components/ModelManager.tsx b/sundynix-admin/src/components/ModelManager.tsx index dfd9b6c..a0401fe 100644 --- a/sundynix-admin/src/components/ModelManager.tsx +++ b/sundynix-admin/src/components/ModelManager.tsx @@ -108,7 +108,15 @@ export function ModelManager({ )}