Admin:主列表默认100条并优化档口入库码批量匹配反馈 #244

Open
opened 2026-08-15 15:44:50 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:需求调整 / 缺陷修复
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 Admin 四模块可用闭环
  • 阶段:公共列表分页与档口入库码工作台
  • 依赖:#224、#242、#243

要解决什么

用户验收公共分页和档口入库码工作台时确认:

  1. 公共分页已经能在选择 20 / 50 / 100 后立即刷新,可见“应用”按钮成为重复操作;无参数进入列表时默认 20 条也不符合当前批量处理习惯。
  2. 档口入库码操作结果使用列表上方常驻提示条,占用表格高度;匹配失败不够醒目。
  3. 只读“匹配顺运宝商品”与远端“回写快递单号”共用 20 条上限。匹配服务本身已按每批最多 100 个货运单分段读取,但 Handler 提前拒绝超过 20 条,导致当前页不能全选后一次匹配。

做什么 / 不做什么

做

  • 公共分页保留 20 / 50 / 100 三档,无 page_size 时默认 100。
  • 正常页面移除可见“应用”按钮;选择容量后继续立即刷新,并保留加载/重复提交反馈。
  • 档口入库码移除列表上方的流式提示条,让表格直接承接空余高度。
  • 成功结果使用不占布局空间、可被读屏宣布的短暂提示;失败或部分匹配失败使用自动打开的错误弹窗,说明原因和恢复方式。
  • 只读匹配取消 20 条限制,允许一次处理当前页全部选中记录;继续复用 Service 内部每批最多 100 个货运单的远端读取分段。
  • 将回写上限拆成独立常量并继续限制 20 条;不因页面默认 100 放宽远端写操作。

不做

  • 不增加跨页勾选;一次匹配范围仍是当前页实际勾选记录。
  • 不改变 20 / 50 / 100 白名单以外的分页容量。
  • 不取消档口入库码回写的 20 条安全上限。
  • 不修改数据库结构、顺运宝接口、采购流程或 Client 接口。
  • 不引入前端框架或 npm 构建。

已确认的实现方案

  • admin/service/pagination.go
    • 将 DefaultPageSize 调整为 100,非法或缺失参数统一回退 100。
  • admin/templates/partials/footer.html、admin/static/js/app.js
    • 删除正常 UI 中的“应用”按钮;原生 JavaScript 监听容量变化并提交 GET 表单。
    • 提交期间设置 aria-busy,避免重复 change;不得禁用 select,保证 page_size 进入请求。
  • admin/templates/inner_code/list.html、admin/static/css/app.css
    • 删除 .inner-code-notice 流式提示。
    • 成功结果渲染为固定定位、aria-live="polite" 的短暂提示;错误结果渲染为 role="alertdialog" 的服务端弹窗并自动打开。
    • 弹窗必须使用 html/template 自动转义,能用关闭按钮、Esc 和焦点管理关闭。
  • admin/handler/web/inner_code.go
    • 把跳转反馈区分为成功和错误;匹配结果 Failed > 0 时使用错误弹窗。
    • 删除只读匹配的 20 条前置拒绝。
  • admin/service/inner_code_page.go、admin/service/inner_code_apply.go
    • 将共享 InnerCodeRemoteBatchLimit 改为只针对写操作的 InnerCodeApplyBatchLimit = 20;匹配继续由现有 100 条远端读取分批机制承载。
  • 更新分页、模板、Handler、匹配与回写测试,以及 docs/admin/05-ui-specification.md。

验收标准

  • 不带 page_size 打开任一公共分页主列表时默认 100 条,明确选择 20 / 50 后仍按选择显示。
  • 公共分页正常页面不显示“应用”按钮;鼠标和键盘切换容量后立即刷新,URL、筛选和模块状态保持正确。
  • 档口入库码列表上方不再渲染占高度的结果提示条,表格获得对应空间。
  • 匹配失败、会话/配置失败以及匹配结果含失败记录时自动显示可访问错误弹窗,文案说明原因和下一步。
  • 成功反馈不占用表格布局,并在 3–5 秒内自动消失。
  • 当前页勾选超过 20 条可一次完成只读匹配;远端读取仍按最多 100 个货运单分段。
  • 档口入库码回写超过 20 条仍被服务端拒绝,安全语义不变。
  • 模板输出继续自动转义;没有数据库、Client 接口和采购安全行为变化。
  • 固定 Go 1.23.0 下 go test ./... -count=1、go build ./...、go vet ./... 通过,node --check static/js/app.js 通过。

怎么验证

从 admin/ 执行:

$env:GOTOOLCHAIN="go1.23.0"
go test ./... -count=1
go build ./...
go vet ./...
node --check static/js/app.js
Remove-Item Env:GOTOOLCHAIN

浏览器验证:

  1. 直接进入各主列表,确认默认 100 条且没有“应用”按钮。
  2. 使用鼠标和键盘切换 20 / 50 / 100,确认立即刷新并保留筛选。
  3. 档口入库码页选择 21–100 条待匹配记录执行匹配。
  4. 分别模拟整体失败、部分失败和全部成功,检查错误弹窗、成功短提示、焦点和表格高度。
  5. 回写选择超过 20 条,确认仍被服务端拒绝。

风险和回退

  • 风险:100 行会增加单页渲染量;现有 SQL 真分页和图片懒加载继续生效,测试各列表查询与模板。
  • 风险:只读匹配时间随选中订单数增加;Service 继续按 100 个货运单分批且失败时不保存不完整规划。
  • 风险:反馈从流式提示改为浮层后可能被读屏忽略;成功提示使用 aria-live,错误使用 alertdialog 和焦点管理。
  • 风险:不能误删回写上限;单独常量和超过 20 条回归测试固定该约束。
  • 回退:回退本工单提交即可恢复默认 20、可见按钮、流式提示和匹配 20 条上限;无数据库回滚。
## 基本信息 - 类型:需求调整 / 缺陷修复 - 父级大工单:#14 - 所属 MVP / 版本:#15 Admin 四模块可用闭环 - 阶段:公共列表分页与档口入库码工作台 - 依赖:#224、#242、#243 ## 要解决什么 用户验收公共分页和档口入库码工作台时确认: 1. 公共分页已经能在选择 20 / 50 / 100 后立即刷新,可见“应用”按钮成为重复操作;无参数进入列表时默认 20 条也不符合当前批量处理习惯。 2. 档口入库码操作结果使用列表上方常驻提示条,占用表格高度;匹配失败不够醒目。 3. 只读“匹配顺运宝商品”与远端“回写快递单号”共用 20 条上限。匹配服务本身已按每批最多 100 个货运单分段读取,但 Handler 提前拒绝超过 20 条,导致当前页不能全选后一次匹配。 ## 做什么 / 不做什么 ### 做 - 公共分页保留 20 / 50 / 100 三档,无 `page_size` 时默认 100。 - 正常页面移除可见“应用”按钮;选择容量后继续立即刷新,并保留加载/重复提交反馈。 - 档口入库码移除列表上方的流式提示条,让表格直接承接空余高度。 - 成功结果使用不占布局空间、可被读屏宣布的短暂提示;失败或部分匹配失败使用自动打开的错误弹窗,说明原因和恢复方式。 - 只读匹配取消 20 条限制,允许一次处理当前页全部选中记录;继续复用 Service 内部每批最多 100 个货运单的远端读取分段。 - 将回写上限拆成独立常量并继续限制 20 条;不因页面默认 100 放宽远端写操作。 ### 不做 - 不增加跨页勾选;一次匹配范围仍是当前页实际勾选记录。 - 不改变 20 / 50 / 100 白名单以外的分页容量。 - 不取消档口入库码回写的 20 条安全上限。 - 不修改数据库结构、顺运宝接口、采购流程或 Client 接口。 - 不引入前端框架或 npm 构建。 ## 已确认的实现方案 - `admin/service/pagination.go` - 将 `DefaultPageSize` 调整为 100,非法或缺失参数统一回退 100。 - `admin/templates/partials/footer.html`、`admin/static/js/app.js` - 删除正常 UI 中的“应用”按钮;原生 JavaScript 监听容量变化并提交 GET 表单。 - 提交期间设置 `aria-busy`,避免重复 change;不得禁用 select,保证 `page_size` 进入请求。 - `admin/templates/inner_code/list.html`、`admin/static/css/app.css` - 删除 `.inner-code-notice` 流式提示。 - 成功结果渲染为固定定位、`aria-live="polite"` 的短暂提示;错误结果渲染为 `role="alertdialog"` 的服务端弹窗并自动打开。 - 弹窗必须使用 `html/template` 自动转义,能用关闭按钮、Esc 和焦点管理关闭。 - `admin/handler/web/inner_code.go` - 把跳转反馈区分为成功和错误;匹配结果 `Failed > 0` 时使用错误弹窗。 - 删除只读匹配的 20 条前置拒绝。 - `admin/service/inner_code_page.go`、`admin/service/inner_code_apply.go` - 将共享 `InnerCodeRemoteBatchLimit` 改为只针对写操作的 `InnerCodeApplyBatchLimit = 20`;匹配继续由现有 100 条远端读取分批机制承载。 - 更新分页、模板、Handler、匹配与回写测试,以及 `docs/admin/05-ui-specification.md`。 ## 验收标准 - [ ] 不带 `page_size` 打开任一公共分页主列表时默认 100 条,明确选择 20 / 50 后仍按选择显示。 - [ ] 公共分页正常页面不显示“应用”按钮;鼠标和键盘切换容量后立即刷新,URL、筛选和模块状态保持正确。 - [ ] 档口入库码列表上方不再渲染占高度的结果提示条,表格获得对应空间。 - [ ] 匹配失败、会话/配置失败以及匹配结果含失败记录时自动显示可访问错误弹窗,文案说明原因和下一步。 - [ ] 成功反馈不占用表格布局,并在 3–5 秒内自动消失。 - [ ] 当前页勾选超过 20 条可一次完成只读匹配;远端读取仍按最多 100 个货运单分段。 - [ ] 档口入库码回写超过 20 条仍被服务端拒绝,安全语义不变。 - [ ] 模板输出继续自动转义;没有数据库、Client 接口和采购安全行为变化。 - [ ] 固定 Go 1.23.0 下 `go test ./... -count=1`、`go build ./...`、`go vet ./...` 通过,`node --check static/js/app.js` 通过。 ## 怎么验证 从 `admin/` 执行: ```powershell $env:GOTOOLCHAIN="go1.23.0" go test ./... -count=1 go build ./... go vet ./... node --check static/js/app.js Remove-Item Env:GOTOOLCHAIN ``` 浏览器验证: 1. 直接进入各主列表,确认默认 100 条且没有“应用”按钮。 2. 使用鼠标和键盘切换 20 / 50 / 100,确认立即刷新并保留筛选。 3. 档口入库码页选择 21–100 条待匹配记录执行匹配。 4. 分别模拟整体失败、部分失败和全部成功,检查错误弹窗、成功短提示、焦点和表格高度。 5. 回写选择超过 20 条,确认仍被服务端拒绝。 ## 风险和回退 - 风险:100 行会增加单页渲染量;现有 SQL 真分页和图片懒加载继续生效,测试各列表查询与模板。 - 风险:只读匹配时间随选中订单数增加;Service 继续按 100 个货运单分批且失败时不保存不完整规划。 - 风险:反馈从流式提示改为浮层后可能被读屏忽略;成功提示使用 `aria-live`,错误使用 `alertdialog` 和焦点管理。 - 风险:不能误删回写上限;单独常量和超过 20 条回归测试固定该约束。 - 回退:回退本工单提交即可恢复默认 20、可见按钮、流式提示和匹配 20 条上限;无数据库回滚。
Author
Owner

状态:进行中。已核对现状:只读匹配的 20 条拒绝位于 Handler,Service 已按每批最多 100 个货运单分段读取;远端回写也共用了同一常量。实施时只取消只读匹配限制,并把回写 20 条上限拆成独立约束。

状态:进行中。已核对现状:只读匹配的 20 条拒绝位于 Handler,Service 已按每批最多 100 个货运单分段读取;远端回写也共用了同一常量。实施时只取消只读匹配限制,并把回写 20 条上限拆成独立约束。
Author
Owner

实施完成,待验收

状态:待验收

已完成:

  • 公共分页缺失或非法 page_size 时默认 100,仍只允许 20 / 50 / 100;
  • 正常页面移除“应用”按钮,容量切换立即刷新,并显示加载状态、防止重复提交;
  • 档口入库码移除列表上方流式提示,成功改为 4 秒短提示,错误/已跳过/部分失败改为自动错误弹窗;
  • 临时反馈展示后清理 URL 参数,避免 F5 重复弹出;
  • 只读匹配取消 20 条上限,远端详情继续按每批最多 100 个货运单读取;
  • 远端回写拆为独立 InnerCodeApplyBatchLimit = 20,超过 20 条仍提前拒绝;
  • 更新 UI 基线和分页、Handler、模板、批量读取、回写安全回归测试。

验证结果:

$env:GOTOOLCHAIN="go1.23.0"
go test ./... -count=1
go build ./...
go vet ./...
node --check static/js/app.js
git diff --check

以上全部通过。批量读取测试确认 205 个模拟货运单按 100 / 100 / 5 分批;回写超过 20 条仍在访问数据库或顺运宝前拒绝。

提交:

  • ad5bd83 feat: 优化批量匹配和分页默认值 (#244)
  • 4d8434b docs: 归档任务 #244

归档:docs/task/244-主列表默认100条并优化档口入库码批量匹配反馈.md

未验证:尚未在登录后的真实浏览器做 1366×768 人工视觉验收;未使用真实顺运宝会话执行 21–100 条匹配;未部署生产。工单保持打开,等待用户验收。

## 实施完成,待验收 状态:**待验收** 已完成: - 公共分页缺失或非法 `page_size` 时默认 100,仍只允许 20 / 50 / 100; - 正常页面移除“应用”按钮,容量切换立即刷新,并显示加载状态、防止重复提交; - 档口入库码移除列表上方流式提示,成功改为 4 秒短提示,错误/已跳过/部分失败改为自动错误弹窗; - 临时反馈展示后清理 URL 参数,避免 F5 重复弹出; - 只读匹配取消 20 条上限,远端详情继续按每批最多 100 个货运单读取; - 远端回写拆为独立 `InnerCodeApplyBatchLimit = 20`,超过 20 条仍提前拒绝; - 更新 UI 基线和分页、Handler、模板、批量读取、回写安全回归测试。 验证结果: ```powershell $env:GOTOOLCHAIN="go1.23.0" go test ./... -count=1 go build ./... go vet ./... node --check static/js/app.js git diff --check ``` 以上全部通过。批量读取测试确认 205 个模拟货运单按 100 / 100 / 5 分批;回写超过 20 条仍在访问数据库或顺运宝前拒绝。 提交: - `ad5bd83` feat: 优化批量匹配和分页默认值 (#244) - `4d8434b` docs: 归档任务 #244 归档:`docs/task/244-主列表默认100条并优化档口入库码批量匹配反馈.md` 未验证:尚未在登录后的真实浏览器做 1366×768 人工视觉验收;未使用真实顺运宝会话执行 21–100 条匹配;未部署生产。工单保持打开,等待用户验收。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#244