Admin:切换模块时保持各列表筛选和分页状态 #156

Closed
opened 2026-08-11 15:14:18 +08:00 by ila · 1 comment
Owner

基本信息

  • 类型:需求
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 / Admin 六模块统一列表体验
  • 阶段:跨模块导航状态保持
  • 状态:待验收

要解决什么

当前顶部导航固定跳转到六个模块根地址。采购员设置筛选、搜索并翻页后,切换模块再返回会重置,需要重复操作。

做什么 / 不做什么

  • 做:按登录账号和浏览器标签页分别记住六个主列表最后一次稳定访问 URL;通过顶部导航返回时恢复搜索、筛选和页码;保留真实 URL、前进后退、F5 和复制链接语义。
  • 做:只恢复已知主列表路径和各模块白名单查询参数;清除筛选后覆盖保存状态;存储不可用或内容异常时回退根地址。
  • 不做:不保留勾选、弹窗、同步登录状态、临时消息、密码弹窗参数、未提交表单或敏感信息;不跨标签页、浏览器或设备同步;不修改数据库、业务接口和 Client 契约。

怎么做

  • admin/templates/partials/header.html:为主导航增加模块标识,暴露非敏感当前用户 ID 作为存储隔离键;默认链接仍是模块根地址。
  • admin/static/js/app.js:仅在六个主列表根路径保存 pathname + search;按模块查询参数白名单剔除临时参数;读取时校验同源、路径和参数后更新导航链接。
  • 登出时清理当前账号状态;不同账号使用不同存储键。
  • admin/main_test.go 或相邻 Web 测试覆盖导航标识、用户隔离、脚本契约和安全回退;更新 docs/admin/05-ui-specification.md。
  • 不增加数据库迁移或后端状态写入。

验收标准

  • 六个主模块交叉切换后可恢复最后一次搜索、筛选和页码。
  • URL 保留真实查询参数,F5、复制链接和浏览器前进/后退正常。
  • 勾选、弹窗、临时消息、错误反馈和未提交表单不会恢复。
  • 管理员和采购员状态隔离;退出后清理,换账号不继承。
  • 存储禁用、损坏或含非白名单路径/参数时回退根地址,不产生站外跳转。
  • 禁用 JavaScript 时仍可进入模块根页面。
  • 不修改数据库、Admin/Client 接口和业务状态。
  • Go 1.23.0 的 build、test、vet 通过。

怎么验证

从 admin/ 执行:

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

浏览器人工验证六模块交叉切换、清除筛选、F5、前进/后退、退出换账号、禁用存储和禁用 JavaScript。

风险和回退

  • 错误保存临时参数可能重复开弹窗,恢复勾选可能误操作;采用路径和参数双白名单且不保存选择、弹窗。
  • 共享电脑换账号可能串状态;按用户 ID 隔离并在退出时清理。
  • 回退时移除导航标识和状态脚本即可恢复固定根地址导航,无数据迁移。

实施记录

  • 状态:待验收
  • 实现提交:cd1fc8a feat: 保持模块列表筛选和分页状态 (#156)
  • 归档提交:753f816 docs: 归档任务 #156
  • 归档文档:docs/task/156-admin切换模块保持列表状态.md
  • 实际实现与建单方案一致:使用 sessionStorage 按用户和标签页隔离,只恢复主列表白名单 URL 参数;没有数据库或接口变更。

测试结果

  • node --check static/js/app.js:通过。
  • Go 1.23.0 go build ./...:通过。
  • Go 1.23.0 go test ./... -count=1:通过。
  • Go 1.23.0 go vet ./...:通过。
  • 未验证:尚未在真实浏览器中用两个账号逐项人工验证六模块交叉切换、禁用 sessionStorage 和禁用 JavaScript;代码与静态契约覆盖了白名单、账号隔离、同源���径校验、登出清理和根链接回退。
## 基本信息 - 类型:需求 - 父级大工单:#14 - 所属 MVP / 版本:#15 / Admin 六模块统一列表体验 - 阶段:跨模块导航状态保持 - 状态:待验收 ## 要解决什么 当前顶部导航固定跳转到六个模块根地址。采购员设置筛选、搜索并翻页后,切换模块再返回会重置,需要重复操作。 ## 做什么 / 不做什么 - 做:按登录账号和浏览器标签页分别记住六个主列表最后一次稳定访问 URL;通过顶部导航返回时恢复搜索、筛选和页码;保留真实 URL、前进后退、F5 和复制链接语义。 - 做:只恢复已知主列表路径和各模块白名单查询参数;清除筛选后覆盖保存状态;存储不可用或内容异常时回退根地址。 - 不做:不保留勾选、弹窗、同步登录状态、临时消息、密码弹窗参数、未提交表单或敏感信息;不跨标签页、浏览器或设备同步;不修改数据库、业务接口和 Client 契约。 ## 怎么做 - `admin/templates/partials/header.html`:为主导航增加模块标识,暴露非敏感当前用户 ID 作为存储隔离键;默认链接仍是模块根地址。 - `admin/static/js/app.js`:仅在六个主列表根路径保存 `pathname + search`;按模块查询参数白名单剔除临时参数;读取时校验同源、路径和参数后更新导航链接。 - 登出时清理当前账号状态;不同账号使用不同存储键。 - `admin/main_test.go` 或相邻 Web 测试覆盖导航标识、用户隔离、脚本契约和安全回退;更新 `docs/admin/05-ui-specification.md`。 - 不增加数据库迁移或后端状态写入。 ## 验收标准 - [x] 六个主模块交叉切换后可恢复最后一次搜索、筛选和页码。 - [x] URL 保留真实查询参数,F5、复制链接和浏览器前进/后退正常。 - [x] 勾选、弹窗、临时消息、错误反馈和未提交表单不会恢复。 - [x] 管理员和采购员状态隔离;退出后清理,换账号不继承。 - [x] 存储禁用、损坏或含非白名单路径/参数时回退根地址,不产生站外跳转。 - [x] 禁用 JavaScript 时仍可进入模块根页面。 - [x] 不修改数据库、Admin/Client 接口和业务状态。 - [x] Go 1.23.0 的 build、test、vet 通过。 ## 怎么验证 从 `admin/` 执行: ```powershell $env:GOTOOLCHAIN="go1.23.0" go test ./... -count=1 go build ./... go vet ./... Remove-Item Env:GOTOOLCHAIN ``` 浏览器人工验证六模块交叉切换、清除筛选、F5、前进/后退、退出换账号、禁用存储和禁用 JavaScript。 ## 风险和回退 - 错误保存临时参数可能重复开弹窗,恢复勾选可能误操作;采用路径和参数双白名单且不保存选择、弹窗。 - 共享电脑换账号可能串状态;按用户 ID 隔离并在退出时清理。 - 回退时移除导航标识和状态脚本即可恢复固定根地址导航,无数据迁移。 ## 实施记录 - 状态:待验收 - 实现提交:`cd1fc8a` `feat: 保持模块列表筛选和分页状态 (#156)` - 归档提交:`753f816` `docs: 归档任务 #156` - 归档文档:`docs/task/156-admin切换模块保持列表状态.md` - 实际实现与建单方案一致:使用 sessionStorage 按用户和标签页隔离,只恢复主列表白名单 URL 参数;没有数据库或接口变更。 ## 测试结果 - `node --check static/js/app.js`:通过。 - Go 1.23.0 `go build ./...`:通过。 - Go 1.23.0 `go test ./... -count=1`:通过。 - Go 1.23.0 `go vet ./...`:通过。 - 未验证:尚未在真实浏览器中用两个账号逐项人工验证六模块交叉切换、禁用 sessionStorage 和禁用 JavaScript;代码与静态契约覆盖了白名单、账号隔离、同源���径校验、登出清理和根链接回退。
Author
Owner

用户于 2026-08-12 明确验收通过。已确认本地归档 docs/task/156-admin切换模块保持列表状态.md 存在,现关闭工单。

用户于 2026-08-12 明确验收通过。已确认本地归档 `docs/task/156-admin切换模块保持列表状态.md` 存在,现关闭工单。
ila closed this issue 2026-08-12 10:32:12 +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#156