docs: 归档任务 #56

This commit is contained in:
chengma
2026-08-09 16:32:12 +08:00
parent ff75b271ee
commit 2cbb98f09c
@@ -0,0 +1,61 @@
# 56 Admin:修复拖选密码时弹窗意外关闭
- 类型:缺陷
- 父级大工单:#14
- 所属 MVP / 版本:#15 Admin 四模块可用闭环
- 状态:已完成
- 日期:2026-08-09
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/56
## 背景与目标
用户在密码输入框内按住鼠标拖选内容,移到弹窗外的灰色遮罩后松开时,浏览器会把
合成的 `click` 目标设为遮罩。原公共逻辑只判断最终目标,因而误关弹窗并丢失输入。
目标是区分“真正点击遮罩”和“从弹窗内容拖到遮罩”:前者继续关闭,后者保留弹窗
和输入内容。
## 最终方案
- 公共弹窗在 `pointerdown` 时记录手势是否从遮罩本身开始。
- 最终 `click` 只有同时满足“目标是遮罩”和“手势从遮罩开始”才关闭。
- `pointercancel` 清理记录,避免取消的手势影响下一次操作。
- 带 `data-modal-close` 的关闭/取消按钮仍直接关闭,Esc 行为不变。
- 该修复位于公共逻辑,对新增用户、重置密码以及其他公共弹窗统一生效。
- 增加静态回归守卫,并使用项目实际 `app.js` 在 Chrome 中验证真实指针事件。
实际实现与建单方案一致,没有修改密码规则、表单提交、数据库或服务端接口。
## 改了哪些
- `admin/static/js/app.js`:增加遮罩手势起点判断和取消状态清理。
- `admin/main_test.go`:增加公共弹窗拖选防误关闭的静态回归守卫。
- `docs/admin/05-ui-specification.md`:记录公共弹窗遮罩关闭的手势边界。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| 从密码框拖到遮罩松开时弹窗保持打开 | 通过 |
| 拖选后输入内容保持不变 | 通过 |
| 直接点击遮罩仍关闭弹窗 | 通过 |
| 关闭按钮和取消按钮仍关闭弹窗 | 通过 |
| Esc 仍关闭弹窗 | 通过 |
| 公共弹窗统一使用修复后的逻辑 | 通过 |
| 不改变表单和服务端行为 | 通过 |
| Go 静态检查和全量测试通过 | 通过 |
| Go 1.23.0 构建和无缓存测试通过 | 通过 |
## 测试
- Chrome 真实指针事件:输入框内按下并拖到遮罩松开,弹窗和密码值保留;
遮罩直点、取消、叉号、Esc 分别验证仍能关闭。
- 执行的命令:`cd admin; gofmt -w main_test.go; go vet ./...; go test ./...`
- 执行的命令:`$env:GOTOOLCHAIN="go1.23.0"; go build ./...; go test ./... -count=1; Remove-Item Env:GOTOOLCHAIN`
- 结果:`go version go1.23.0 windows/amd64`;浏览器回归、构建和所有测试通过。
- **没验证到的部分**:未在用户当前浏览器和实际业务数据环境中人工操作;Chrome
已使用项目实际 `app.js` 完成等价指针事件验证。
## 相关提交
- `ff75b27` fix: 防止拖选内容误关闭弹窗 (#56)