diff --git a/apps/server/src/routes/admin-audit.ts b/apps/server/src/routes/admin-audit.ts index a4efa2c..ef34d87 100644 --- a/apps/server/src/routes/admin-audit.ts +++ b/apps/server/src/routes/admin-audit.ts @@ -21,7 +21,7 @@ export function adminAuditRoutes() { method: "get", path: "/audit-logs", summary: "审计日志", - description: "分页、时间倒序;可按 domain 过滤(key/payment/member/account)", + description: "分页、时间倒序;可按 domain 与 [from,to) 过滤", tags: ["审计"], security: [{ adminSession: [] }], request: { @@ -31,6 +31,8 @@ export function adminAuditRoutes() { domain: z .enum(["key", "payment", "member", "account"]) .optional(), + from: z.string().optional(), + to: z.string().optional(), }), }, responses: { @@ -49,8 +51,12 @@ export function adminAuditRoutes() { 200, Math.max(1, Number(q.page_size ?? 50) || 50), ); + const from = q.from ? new Date(q.from) : undefined; + const to = q.to ? new Date(q.to) : undefined; const { rows, total } = await c.get("repos").audit.listPage({ domain: q.domain, + from: from && !Number.isNaN(from.getTime()) ? from : undefined, + to: to && !Number.isNaN(to.getTime()) ? to : undefined, page, page_size, }); diff --git a/apps/web/src/api/admin/audit.ts b/apps/web/src/api/admin/audit.ts index 20c18a8..414f91f 100644 --- a/apps/web/src/api/admin/audit.ts +++ b/apps/web/src/api/admin/audit.ts @@ -5,6 +5,8 @@ export async function fetchAuditLogs(params: { page: number; page_size: number; domain?: string; + from?: string; + to?: string; }): Promise> { const { data } = await adminHttp.get>("/audit-logs", { params, diff --git a/apps/web/src/api/query-keys.ts b/apps/web/src/api/query-keys.ts index 6c4e4f8..4c079f9 100644 --- a/apps/web/src/api/query-keys.ts +++ b/apps/web/src/api/query-keys.ts @@ -31,8 +31,8 @@ export const qk = { payments: () => ["admin", "payments"] as const, qpuLatest: () => ["admin", "qpu-latest"] as const, members: () => ["admin", "members"] as const, - auditLogs: (q: PageQuery & { domain?: string }) => - ["admin", "audit-logs", q.page, q.page_size, q.domain ?? ""] as const, + auditLogs: (q: PageQuery & { domain?: string; from?: string; to?: string }) => + ["admin", "audit-logs", q.page, q.page_size, q.domain ?? "", q.from ?? "", q.to ?? ""] as const, }, member: { me: () => ["member", "me"] as const, diff --git a/apps/web/src/queries/admin.ts b/apps/web/src/queries/admin.ts index 4ce3641..2b56e12 100644 --- a/apps/web/src/queries/admin.ts +++ b/apps/web/src/queries/admin.ts @@ -176,7 +176,7 @@ export function useIssueMemberToken() { } export function useAuditLogs( - params: () => PageQuery & { domain?: string }, + params: () => PageQuery & { domain?: string; from?: string; to?: string }, ) { return useQuery({ queryKey: () => qk.admin.auditLogs(params()), diff --git a/apps/web/src/views/admin/audit-view.vue b/apps/web/src/views/admin/audit-view.vue index 7a6bf29..6593ecd 100644 --- a/apps/web/src/views/admin/audit-view.vue +++ b/apps/web/src/views/admin/audit-view.vue @@ -1,20 +1,29 @@