# 操作日志分页需求

## 背景

操作日志会持续增长，如果一次性展示全部日志，页面会变长，查找和点击都不方便。日志列表需要分页展示，并且页码数量较多时不能把所有页码全部铺开。

## 功能目标

1. 操作日志列表每页显示 20 条。
2. 日志列表上方和下方都显示分页控件。
3. 支持上一页、下一页和指定页码跳转。
4. 页码超过 10 页时，远离当前页的页码用省略号折叠。
5. 分页需要和现有筛选条件联动：
   - 操作类型。
   - 对象类型。
   - 风险等级。
   - 关键词。
6. 切换筛选条件后，从第 1 页重新查询。
7. 导出日志不受当前页限制，仍按当前筛选条件导出全部匹配日志。

## 页码展示规则

分页控件始终显示：

- 第 1 页。
- 最后一页。
- 当前页前后 2 页。
- 中间缺失页码用 `...` 表示。

示例：

- 当前第 1 页，共 3 页：`1 2 3`
- 当前第 6 页，共 20 页：`1 ... 4 5 6 7 8 ... 20`
- 当前第 19 页，共 20 页：`1 ... 17 18 19 20`

## 接口约定

日志列表接口支持：

- `page`：页码，从 1 开始，默认 1。
- `page_size`：每页数量，默认 20。

返回：

```json
{
  "items": [],
  "total": 0,
  "page": 1,
  "page_size": 20,
  "total_pages": 1
}
```

## 自行决策记录

- 默认每页 20 条，兼顾浏览效率和页面密度。
- 页码折叠规则采用“首页 + 尾页 + 当前页前后 2 页”，避免页码过多时挤压布局。
- 上下各放一组分页控件，避免用户滚动到底部后还要回到顶部翻页。
