- ErrorBoundary 组件:全局错误捕获与优雅降级 - 提取 5 个自定义 hooks:useCountUp, useDarkMode, useDebouncedValue, usePaginatedData, useApiRequest - 从 11 个 API 文件提取 PaginatedResponse 共享类型到 api/types.ts - 统一 API 错误处理(api/errors.ts) - client.ts 迁移到 axios adapter 模式(替代废弃的 CancelToken) - 添加 react-i18next 国际化基础设施 + zh-CN 语言包
32 lines
766 B
TypeScript
32 lines
766 B
TypeScript
import client from './client';
|
|
import type { PaginatedResponse } from './types';
|
|
|
|
export interface AuditLogItem {
|
|
id: string;
|
|
tenant_id: string;
|
|
action: string;
|
|
resource_type: string;
|
|
resource_id: string;
|
|
user_id: string;
|
|
old_value?: string;
|
|
new_value?: string;
|
|
ip_address?: string;
|
|
user_agent?: string;
|
|
created_at: string;
|
|
}
|
|
|
|
export interface AuditLogQuery {
|
|
resource_type?: string;
|
|
user_id?: string;
|
|
page?: number;
|
|
page_size?: number;
|
|
}
|
|
|
|
export async function listAuditLogs(query: AuditLogQuery = {}) {
|
|
const { data } = await client.get<{ success: boolean; data: PaginatedResponse<AuditLogItem> }>(
|
|
'/audit-logs',
|
|
{ params: { page: query.page ?? 1, page_size: query.page_size ?? 20, ...query } },
|
|
);
|
|
return data.data;
|
|
}
|