Files
cmautobuy/docs/task/156-admin切换模块保持列表状态.md
T
2026-08-11 15:18:31 +08:00

3.0 KiB

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

背景与目标

顶部导航原来固定进入各模块根地址。采购员在列表中搜索、筛选或翻页后, 切换模块再返回会丢失这些状态,需要重复操作。本任务让六个主模块在当前 浏览器标签页内分别记住最后一次稳定列表状态。

最终方案

筛选和分页继续使用现有 URL 查询参数,不增加数据库状态。公共导航为六个 模块标记根路径,公共原生 JavaScript 使用 sessionStorage,按当前用户 ID 和 模块路径保存经过白名单清理的相对 URL。

只保留搜索、筛选、页码及顺运宝日期输入等稳定参数;临时消息、错误、弹窗、 同步登录状态、勾选项和未提交表单不会保存。读取时核对同源、模块路径和 URL 长度,浏览器禁用存储或数据异常时继续使用模板中的模块根地址。退出登录会 清理当前账号在该标签页的记录。

改了哪些

  • admin/templates/partials/header.html:增加账号隔离键和六个模块导航标识, 保留原始根地址作为无 JavaScript 回退。
  • admin/static/js/app.js:保存、校验和恢复每个模块的稳定 URL,登出时清理。
  • admin/main_test.go:增加导航标识、查询参数白名单、同源路径校验和清理契约测试。
  • docs/admin/05-ui-specification.md:记录跨模块状态保持范围和禁止保存的临时状态。

验收结果

验收标准 结果
六个主模块具备独立的搜索、筛选和页码恢复入口 通过
使用真实 URL,不改写浏览器前进、后退、F5 和复制链接语义 通过
勾选、弹窗、临时反馈和未提交表单不进入白名单 通过
按用户 ID 隔离,退出时清理当前账号记录 通过
异常 URL、跨源 URL、错误路径和存储异常安全回退 通过
JavaScript 失效时链接仍进入模块根页面 通过
未修改数据库、Admin/Client 接口和业务状态 通过
Go 1.23.0 build、test、vet 通过 通过

测试

  • 执行的命令:
    • node --check static/js/app.js
    • $env:GOTOOLCHAIN="go1.23.0"; go test ./... -run 'TestModuleNavigation|TestTemplates|TestStatic' -count=1
    • $env:GOTOOLCHAIN="go1.23.0"; go build ./...; go test ./... -count=1; go vet ./...
  • 结果:JavaScript 语法检查通过;Admin 全包构建、测试和静态检查通过。
  • 没验证到的部分:尚未在真实浏览器中使用两个账号逐项人工验证六模块交叉切换、 禁用 sessionStorage 和禁用 JavaScript 的实际交互;对应安全回退已由静态契约和代码检查覆盖。

相关提交

  • cd1fc8a feat: 保持模块列表筛选和分页状态 (#156)