# 日志管理

## 📋 业务与功能

### 1.1 核心目标
> 提供统一的系统日志查询与导出能力，支持按模块、用户与结果追踪。

### 1.2 功能清单
- **日志分类**：系统日志 / 操作日志 / 安全日志
- **筛选与搜索**：按模块、操作人、结果、时间范围筛选
- **日志列表**：展示操作对象、结果、IP、耗时等
- **导出**：按筛选条件导出日志

### 1.3 交互要点
- 侧边菜单点击 → 跳转到对应页面
- Tab 切换 → 切换日志分类
- 搜索/重置 → 更新列表并触发事件
- 导出按钮 → 触发导出事件

---

## 📊 内容规划

### 2.1 信息架构
```
日志管理
├── 分类标签
├── 筛选区
└── 日志表格
```

### 2.2 数据来源
- **数据类型**：日志记录
- **数据源**：用户提供（功能清单）→ 生成示例数据
- **关键字段**：
  - `log_id`: 日志 ID
  - `module`: 模块
  - `operator`: 操作人
  - `result`: 结果
  - `ip`: IP 地址
  - `duration`: 耗时

### 2.3 内容示例
- 模块：“托管账号”
- 结果：成功 / 失败
- 操作：“批量导入客户”

---

## 🎨 布局与结构

### 3.1 整体布局
- **布局模式**：单栏
- **容器宽度**：流式
- **关键尺寸**：表格占满主列

### 3.2 响应式适配
- **桌面端（≥1200px）**：表格完整展示
- **平板端（768-1199px）**：筛选区折行
- **移动端（<768px）**：表格改为卡片列表（可选）

---

## 🎨 视觉规范

### 4.1 设计规范来源
**本设计基于**：
- [ ] 用户提供的设计规范：无
- [x] 主题设计系统：`/src/themes/antd-new/`
- [x] 内置设计指导：`/assets/docs/设计指导（简约）.md`

### 4.2 自定义设计要点
- 分类标签置顶，筛选区使用浅底色卡片

### 4.3 组件状态
- **默认态（default）**：表格行默认展示
- **悬停态（hover）**：行高亮
- **加载态（loading）**：筛选触发加载

---

## ⚙️ Axure API 说明

### 5.1 事件列表（eventList）
| 事件名称 | Payload 类型 | 触发时机 | 说明 |
|---------|-------------|---------|------|
| `on_search` | `string` | 点击搜索 | payload 为筛选条件 JSON 字符串 |
| `on_reset` | `string` | 点击重置 | payload 为 "reset" |
| `on_export` | `string` | 点击导出 | payload 为 "export" |

### 5.2 动作列表（actionList）
| 动作名称 | Params 类型 | 参数说明 | 功能描述 |
|---------|------------|---------|---------|
| `set_filters` | `string` | JSON 字符串 | 设置筛选条件 |
| `switch_tab` | `string` | tab key | 切换日志分类 |

### 5.3 变量列表（varList）
| 变量名称 | 类型 | 默认值 | 说明 |
|---------|-----|-------|------|
| `active_tab` | `string` | `system` | 当前日志分类 |
| `selected_count` | `number` | 0 | 选中记录数 |

### 5.4 配置项列表（configList）
| 配置项名称 | 类型 | 默认值 | 说明 |
|----------|-----|-------|------|
| `page_size` | `number` | `10` | 表格分页大小 |
| `default_tab` | `string` | `system` | 默认日志分类 |

### 5.5 数据项列表（dataList）
**数据结构**：
```typescript
{
  logs: {
    id: string;
    module: string;
    action: string;
    operator: string;
    result: 'success' | 'failed';
    ip: string;
    duration: string;
    created_at: string;
  }[];
}
```
