Admin:同步记录弹窗改为局部刷新 #62

Closed
opened 2026-08-09 20:57:50 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 Admin 四模块可用闭环
  • 阶段:顺运宝货运单与采购任务
  • 依赖:#59、#61
  • 状态:已完成

要解决什么

#61 增加了“刷新记录”,但当前实现通过重新加载 /syb 整个页面更新弹窗。虽然不会请求顺运宝接口,却会同时重渲染主货运单列表,并可能影响主表滚动位置、勾选状态和操作上下文。用户确认:“刷新同步记录”只应更新弹窗列表;F5 才刷新整个顺运宝数据页面。

做什么 / 不做什么

做

  • 按钮改名为“刷新同步记录”。
  • 增加只读的同步记录 HTML 片段路由,只查询本系统数据库,不调用顺运宝。
  • 点击刷新后只替换弹窗里的记录表格、总数、页码和翻页组件。
  • 弹窗内首页、上一页、下一页、末页也使用同一局部加载机制。
  • 保持弹窗打开、主页面滚动位置、勾选状态、日期输入和订单号筛选不变。
  • 加载时按钮显示“刷新中…”并禁用;失败时在弹窗内用 role="alert" 显示原因和重试指引。
  • 局部刷新成功后将焦点留在刷新按钮附近,不跳到页面顶部。
  • 保留无 JavaScript 时分页链接可访问的降级路径。
  • 更新 UI 基线、路由和自动化测试。

不做

  • 不调用顺运宝接口,不同步货运单,不推进游标。
  • 不修改同步记录表、同步业务和 Client 四接口。
  • 不增加自动轮询、WebSocket 或 SSE。
  • F5 仍按浏览器默认行为刷新整个 SYB 页面。

怎么做

  1. 在 admin/handler/web 增加受网页登录保护的 GET 片段路由,调用现有 service.ListSybSyncHistory,只渲染同步记录内容。
  2. 把同步记录表格和底部操作抽成独立模板片段,完整 SYB 页面和片段路由共用,避免两份标记漂移。
  3. 片段中的翻页 URL 指向同一只读路由;原生 JavaScript 拦截带标记的刷新和翻页操作,fetch 成功后替换片段容器。
  4. 请求期间保留原内容并显示加载态;失败时不清空记录,显示可读错误并恢复按钮。
  5. 测试认证保护、片段不含整页主表、当前页/筛选保留、页面模板以及脚本语法。

验收标准

  • “刷新同步记录”只请求本系统的同步记录片段路由,不请求 /syb 整页和顺运宝。
  • 刷新成功只更新弹窗表格、总数和分页,主表 DOM、滚动和勾选状态不变。
  • 弹窗内翻页同样局部更新,当前页正确。
  • 加载时有“刷新中…”反馈并防止重复请求。
  • 请求失败保留原记录,在弹窗内显示可访问的错误和重试指引。
  • 弹窗保持打开,焦点不跳到页面顶部。
  • 无 JavaScript 时翻页链接仍能返回可读的同步记录片段。
  • F5 仍刷新整个顺运宝数据页面;“同步”仍是唯一请求顺运宝数据的按钮。
  • 不改变数据库、同步业务和 Client 接口。
  • Go 1.23.0 go build ./...、go test ./... -count=1、go vet ./... 通过。

怎么验证

从 admin/ 执行:

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

另外执行 node --check static/js/app.js,并在浏览器验证局部刷新前后主表滚动和勾选状态不变。

风险和回退

  • HTML 片段替换后必须重新绑定新生成的翻页按钮;使用事件委托避免遗漏。
  • 片段路由继续经过网页登录中间件,不暴露操作账号和失败原因给匿名访问者。
  • 回退本任务会恢复 #61 的整页刷新,不涉及数据回退。
## 基本信息 - 类型:缺陷 - 父级大工单:#14 - 所属 MVP / 版本:#15 Admin 四模块可用闭环 - 阶段:顺运宝货运单与采购任务 - 依赖:#59、#61 - 状态:已完成 ## 要解决什么 #61 增加了“刷新记录”,但当前实现通过重新加载 `/syb` 整个页面更新弹窗。虽然不会请求顺运宝接口,却会同时重渲染主货运单列表,并可能影响主表滚动位置、勾选状态和操作上下文。用户确认:“刷新同步记录”只应更新弹窗列表;F5 才刷新整个顺运宝数据页面。 ## 做什么 / 不做什么 ### 做 - 按钮改名为“刷新同步记录”。 - 增加只读的同步记录 HTML 片段路由,只查询本系统数据库,不调用顺运宝。 - 点击刷新后只替换弹窗里的记录表格、总数、页码和翻页组件。 - 弹窗内首页、上一页、下一页、末页也使用同一局部加载机制。 - 保持弹窗打开、主页面滚动位置、勾选状态、日期输入和订单号筛选不变。 - 加载时按钮显示“刷新中…”并禁用;失败时在弹窗内用 `role="alert"` 显示原因和重试指引。 - 局部刷新成功后将焦点留在刷新按钮附近,不跳到页面顶部。 - 保留无 JavaScript 时分页链接可访问的降级路径。 - 更新 UI 基线、路由和自动化测试。 ### 不做 - 不调用顺运宝接口,不同步货运单,不推进游标。 - 不修改同步记录表、同步业务和 Client 四接口。 - 不增加自动轮询、WebSocket 或 SSE。 - F5 仍按浏览器默认行为刷新整个 SYB 页面。 ## 怎么做 1. 在 `admin/handler/web` 增加受网页登录保护的 GET 片段路由,调用现有 `service.ListSybSyncHistory`,只渲染同步记录内容。 2. 把同步记录表格和底部操作抽成独立模板片段,完整 SYB 页面和片段路由共用,避免两份标记漂移。 3. 片段中的翻页 URL 指向同一只读路由;原生 JavaScript 拦截带标记的刷新和翻页操作,`fetch` 成功后替换片段容器。 4. 请求期间保留原内容并显示加载态;失败时不清空记录,显示可读错误并恢复按钮。 5. 测试认证保护、片段不含整页主表、当前页/筛选保留、页面模板以及脚本语法。 ## 验收标准 - [x] “刷新同步记录”只请求本系统的同步记录片段路由,不请求 `/syb` 整页和顺运宝。 - [x] 刷新成功只更新弹窗表格、总数和分页,主表 DOM、滚动和勾选状态不变。 - [x] 弹窗内翻页同样局部更新,当前页正确。 - [x] 加载时有“刷新中…”反馈并防止重复请求。 - [x] 请求失败保留原记录,在弹窗内显示可访问的错误和重试指引。 - [x] 弹窗保持打开,焦点不跳到页面顶部。 - [x] 无 JavaScript 时翻页链接仍能返回可读的同步记录片段。 - [x] F5 仍刷新整个顺运宝数据页面;“同步”仍是唯一请求顺运宝数据的按钮。 - [x] 不改变数据库、同步业务和 Client 接口。 - [x] Go 1.23.0 `go build ./...`、`go test ./... -count=1`、`go vet ./...` 通过。 ## 怎么验证 从 `admin/` 执行: ```powershell $env:GOTOOLCHAIN="go1.23.0" go build ./... go test ./... -count=1 go vet ./... Remove-Item Env:GOTOOLCHAIN ``` 另外执行 `node --check static/js/app.js`,并在浏览器验证局部刷新前后主表滚动和勾选状态不变。 ## 风险和回退 - HTML 片段替换后必须重新绑定新生成的翻页按钮;使用事件委托避免遗漏。 - 片段路由继续经过网页登录中间件,不暴露操作账号和失败原因给匿名访问者。 - 回退本任务会恢复 #61 的整页刷新,不涉及数据回退。
Author
Owner

已开始实施。采用受网页登录保护的只读 HTML 片段 + 原生 fetch,同步记录刷新和分页只替换弹窗内容;不调用顺运宝,不增加轮询或数据库变更。

已开始实施。采用受网页登录保护的只读 HTML 片段 + 原生 `fetch`,同步记录刷新和分页只替换弹窗内容;不调用顺运宝,不增加轮询或数据库变更。
Author
Owner

已完成实现并进入待验收。

  • 实现提交:d8a2424(fix: 同步记录弹窗改为局部刷新 (#62))
  • 归档提交:e5abbfd(docs: 归档任务 #62)
  • 归档路径:docs/task/62-同步记录弹窗局部刷新.md
  • 实现结果:新增受网页登录保护且禁止缓存的本地同步记录片段;“刷新同步记录”和弹窗分页只替换弹窗内容;失败保留旧记录;不增加轮询,不修改数据库、同步业务或 Client 接口,也不请求顺运宝。
  • 验证通过:git diff --check、node --check static/js/app.js、Go 1.23.0 go build ./...、go test ./... -count=1、go vet ./...。
  • 未验证:尚未在真实浏览器中手工确认主表滚动、勾选状态及焦点的视觉表现;未连接真实顺运宝(本任务无需外部请求)。

工单保持打开,等待用户验收;父工单 #14、#15 暂不勾选。

已完成实现并进入待验收。 - 实现提交:`d8a2424`(`fix: 同步记录弹窗改为局部刷新 (#62)`) - 归档提交:`e5abbfd`(`docs: 归档任务 #62`) - 归档路径:`docs/task/62-同步记录弹窗局部刷新.md` - 实现结果:新增受网页登录保护且禁止缓存的本地同步记录片段;“刷新同步记录”和弹窗分页只替换弹窗内容;失败保留旧记录;不增加轮询,不修改数据库、同步业务或 Client 接口,也不请求顺运宝。 - 验证通过:`git diff --check`、`node --check static/js/app.js`、Go 1.23.0 `go build ./...`、`go test ./... -count=1`、`go vet ./...`。 - 未验证:尚未在真实浏览器中手工确认主表滚动、勾选状态及焦点的视觉表现;未连接真实顺运宝(本任务无需外部请求)。 工单保持打开,等待用户验收;父工单 #14、#15 暂不勾选。
Author
Owner

用户已于 2026-08-09 明确通过全部 Admin 待验收工单。本工单验收通过,现关闭,并同步父级 #15、#14 的任务清单。

用户已于 2026-08-09 明确通过全部 Admin 待验收工单。本工单验收通过,现关闭,并同步父级 #15、#14 的任务清单。
ila closed this issue 2026-08-09 21:17:00 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#62