feat(client): 增加审计日志页面与权限路由菜单
这个提交包含在:
@@ -0,0 +1,50 @@
|
||||
import { apiRequestData } from "./http";
|
||||
|
||||
export type AuditLogItem = {
|
||||
id: string;
|
||||
requestId: string;
|
||||
actorId: string;
|
||||
actorName: string;
|
||||
actorEmail: string;
|
||||
action: string;
|
||||
targetType: string;
|
||||
targetId: string | null;
|
||||
ipAddress: string | null;
|
||||
userAgent: string | null;
|
||||
extra: Record<string, unknown>;
|
||||
createdAt: string;
|
||||
};
|
||||
|
||||
export type AuditLogListResponse = {
|
||||
page: number;
|
||||
pageSize: number;
|
||||
total: number;
|
||||
items: AuditLogItem[];
|
||||
};
|
||||
|
||||
export type AuditLogQuery = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
actorId?: string;
|
||||
action?: string;
|
||||
targetType?: string;
|
||||
dateFrom?: string;
|
||||
dateTo?: string;
|
||||
};
|
||||
|
||||
function toQueryString(query: AuditLogQuery) {
|
||||
const params = new URLSearchParams();
|
||||
for (const [key, value] of Object.entries(query)) {
|
||||
if (value == null || value === "") {
|
||||
continue;
|
||||
}
|
||||
params.set(key, String(value));
|
||||
}
|
||||
|
||||
const encoded = params.toString();
|
||||
return encoded ? `?${encoded}` : "";
|
||||
}
|
||||
|
||||
export async function fetchAuditLogs(query: AuditLogQuery) {
|
||||
return apiRequestData<AuditLogListResponse>(`/api/audit-logs${toQueryString(query)}`);
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户