Browse Source

✨ feat(logs): 增强日志筛选功能

- 重构筛选参数构建逻辑,支持通用CRUD的增强筛选功能
- 添加endpoint和ipAddress字段的模糊搜索支持
- 优化日期范围筛选,支持完整范围、仅开始日期和仅结束日期三种场景
- 使用filters对象统一管理筛选条件,提高代码可维护性
yourname 4 months ago
parent
commit
8b8e78342a
1 changed files with 34 additions and 9 deletions
  1. 34 9
      src/client/admin/pages/Logs.tsx

+ 34 - 9
src/client/admin/pages/Logs.tsx

@@ -33,15 +33,40 @@ const Logs: React.FC = () => {
     const queryParams: Record<string, any> = { page, pageSize };
     
     if (searchText) queryParams.keyword = searchText;
-    if (filters.resourceType) queryParams.resourceType = filters.resourceType;
-    if (filters.action) queryParams.action = filters.action;
-    if (filters.method) queryParams.method = filters.method;
-    if (filters.endpoint) queryParams.endpoint = filters.endpoint;
-    if (filters.userId) queryParams.userId = filters.userId;
-    if (filters.ipAddress) queryParams.ipAddress = filters.ipAddress;
-    if (filters.status) queryParams.status = filters.status;
-    if (filters.dateRange?.[0]) queryParams.startDate = filters.dateRange[0].format('YYYY-MM-DD');
-    if (filters.dateRange?.[1]) queryParams.endDate = filters.dateRange[1].format('YYYY-MM-DD');
+    
+    // 构建filters对象以支持通用CRUD的增强筛选功能
+    const filtersObj: Record<string, any> = {};
+    
+    if (filters.resourceType) filtersObj.resourceType = filters.resourceType;
+    if (filters.action) filtersObj.action = filters.action;
+    if (filters.method) filtersObj.method = filters.method;
+    if (filters.endpoint) filtersObj.endpoint = { '%': `%${filters.endpoint}%` };
+    if (filters.userId) filtersObj.userId = filters.userId;
+    if (filters.ipAddress) filtersObj.ipAddress = { '%': `%${filters.ipAddress}%` };
+    if (filters.status) filtersObj.status = filters.status;
+    
+    // 处理日期范围
+    if (filters.dateRange?.[0] && filters.dateRange?.[1]) {
+      filtersObj.createdAt = {
+        between: [
+          filters.dateRange[0].format('YYYY-MM-DD'),
+          filters.dateRange[1].format('YYYY-MM-DD')
+        ]
+      };
+    } else if (filters.dateRange?.[0]) {
+      filtersObj.createdAt = {
+        gte: filters.dateRange[0].format('YYYY-MM-DD')
+      };
+    } else if (filters.dateRange?.[1]) {
+      filtersObj.createdAt = {
+        lte: filters.dateRange[1].format('YYYY-MM-DD')
+      };
+    }
+    
+    // 如果有筛选条件,添加到filters参数
+    if (Object.keys(filtersObj).length > 0) {
+      queryParams.filters = JSON.stringify(filtersObj);
+    }
     
     const response = await operationLogsClient.$get({ query: queryParams });
     if (!response.ok) throw new Error('Failed to fetch logs');