From 753f816f32c6ac839d357d143237a2d06decc11a Mon Sep 17 00:00:00 2001 From: chengma Date: Tue, 11 Aug 2026 15:18:31 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=BD=92=E6=A1=A3=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?#156?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/task/156-admin切换模块保持列表状态.md | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 docs/task/156-admin切换模块保持列表状态.md diff --git a/docs/task/156-admin切换模块保持列表状态.md b/docs/task/156-admin切换模块保持列表状态.md new file mode 100644 index 0000000..de7ccde --- /dev/null +++ b/docs/task/156-admin切换模块保持列表状态.md @@ -0,0 +1,60 @@ +# 156 Admin:切换模块时保持各列表筛选和分页状态 + +- 类型:需求 +- 父级大工单:#14 +- 所属 MVP / 版本:#15 / Admin 六模块统一列表体验 +- 状态:已完成 +- 日期:2026-08-11 +- Gitea 工单: + +## 背景与目标 + +顶部导航原来固定进入各模块根地址。采购员在列表中搜索、筛选或翻页后, +切换模块再返回会丢失这些状态,需要重复操作。本任务让六个主模块在当前 +浏览器标签页内分别记住最后一次稳定列表状态。 + +## 最终方案 + +筛选和分页继续使用现有 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)