From 38c830ef99408a80b9ea7b02a98d318b5ba1f867 Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Fri, 21 Aug 2026 14:11:12 +0800 Subject: [PATCH] docs: add design for reimburse apply page size options pilot Co-authored-by: Cursor --- ...eimburse-apply-page-size-options-design.md | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 docs/superpowers/specs/2026-08-21-reimburse-apply-page-size-options-design.md diff --git a/docs/superpowers/specs/2026-08-21-reimburse-apply-page-size-options-design.md b/docs/superpowers/specs/2026-08-21-reimburse-apply-page-size-options-design.md new file mode 100644 index 000000000..9b86c21af --- /dev/null +++ b/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。