Kaynağa Gözat

docs: add design for reimburse apply page size options pilot

Co-authored-by: Cursor <cursoragent@cursor.com>
zlwu 2 ay önce
ebeveyn
işleme
38c830ef99

+ 50 - 0
docs/superpowers/specs/2026-08-21-reimburse-apply-page-size-options-design.md

@@ -0,0 +1,50 @@
+# 报销申请列表 · 扩大每页条数选项(试点)
+
+**日期:** 2026-08-21  
+**状态:** 设计已确认,待实现  
+**范围:** 仅【报销申请】列表页试点;合适后再推广其它列表
+
+## 背景
+
+- 列头过滤是**当前页前端过滤**,不能像 Excel 那样滤全量。
+- 用户希望通过更大的「每页条数」在单页加载更多行,再配合列头过滤使用。
+- 曾考虑「全部」分批拉取,因进度体验与大数据量风险已放弃。
+- OpenSpec `api-conventions` 规定分页 `pageSize` 全局最大 **100**(超限 422)。本试点**不修改**该全局规范,仅对报销申请「我的列表」接口放宽。
+
+## 目标
+
+1. 分页选项改为:`10 / 20 / 30 / 50 / 100 / 200 / 500`
+2. 后端对应列表接口显式允许 `pageSize` 最大 **500**;`> 500` 仍返回 **422**
+3. 不做「全部」、不做分批拼接、不改列头过滤语义
+
+## 方案(已选)
+
+**只改【报销申请】前端页 + `GET /reimburses/my` 上限到 500。**
+
+| 项 | 说明 |
+|----|------|
+| 前端 | `web-admin/src/views/bx/reimburse/apply/index.vue`:`el-pagination` 的 `:page-sizes` 改为 `[10, 20, 30, 50, 100, 200, 500]` |
+| 数据流 | 仍用 `useServerPaged` + `reimburseApi.my`;换页大小时一次请求、沿用现有 `loading` |
+| 后端 | `backend/app/api/bx/reimburse.py` 的 `my_reimburses`:`pageSize` 增加显式校验 `ge=1, le=500`(建议 `Query(..., ge=1, le=500)`) |
+| 规范 | **不改** OpenSpec 全局「最大 100」;本接口为试点例外 |
+
+说明:当前 `my_reimburses` 的 `pageSize` **尚未**声明 `le=100`,大页码有时可能已能通过;本改动将上限**显式**定为 500,避免契约模糊,也防止后续全局中间件/规范收紧时行为不一致。
+
+## 非目标
+
+- 不改其它报销列表(审批、备用金、发放等)及其接口
+- 不改全局 OpenSpec `pageSize` 上限
+- 不引入「全部」选项、分批加载进度条
+- 不改变列头客户端过滤「仅当前页」行为
+- 不调整默认每页条数(仍沿用 `useServerPaged` / `DEFAULT_LIST_PAGE_SIZE`)
+
+## 验收
+
+- 可选 `10~500`,列表行数与分页文案(`显示 x-y / total`)正确
+- `pageSize=501`(或更大)→ **422**
+- 切换每页条数后回到第 1 页并重新请求(现有 `onSizeChange` 行为保持)
+- 列头过滤仍只过滤当前页已加载行
+
+## 后续(非本次)
+
+试点满意后,可按相同档位推广其它列表,并评估是否将 OpenSpec 全局上限从 100 调整为 500。