在用户管理的创建/重置密码弹窗中,从密码输入框内按住鼠标拖选文字,指针移到弹窗外的灰色遮罩后松开,弹窗会意外关闭,已输入内容丢失。
复现步骤:
click
根因位于 admin/static/js/app.js 的公共弹窗逻辑:只判断 click.target === modal,没有判断手势从哪里开始。该问题会影响所有复用公共遮罩逻辑的弹窗。
admin/static/js/app.js
click.target === modal
pointerdown
.modal-backdrop
data-modal-close
e.target === modal
pointercancel
预计修改:
admin/main_test.go
docs/admin/05-ui-specification.md
go vet ./...
go test ./...
从 admin/ 执行:
admin/
gofmt -w . go vet ./... go test ./... $env:GOTOOLCHAIN="go1.23.0" go build ./... go test ./... -count=1 Remove-Item Env:GOTOOLCHAIN
浏览器验证:
pointerup
使用项目实际 admin/static/js/app.js:
cd admin 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,构建和全部测试通过。
go version go1.23.0 windows/amd64
未验证:尚未在用户当前浏览器和实际数据环境人工操作。
ff75b27
2cbb98f
docs/task/56-修复拖选密码时弹窗意外关闭.md
工单保持打开,等待用户验收后再关闭并同步 #15、#14。
用户已于 2026-08-09 明确通过全部 Admin 待验收工单。本工单验收通过,现关闭,并同步父级 #15、#14 的任务清单。
No dependencies set.
The note is not visible to the blocked user.
基本信息
要解决什么
在用户管理的创建/重置密码弹窗中,从密码输入框内按住鼠标拖选文字,指针移到弹窗外的灰色遮罩后松开,弹窗会意外关闭,已输入内容丢失。
复现步骤:
click目标设为遮罩,公共弹窗逻辑关闭弹窗。根因位于
admin/static/js/app.js的公共弹窗逻辑:只判断click.target === modal,没有判断手势从哪里开始。该问题会影响所有复用公共遮罩逻辑的弹窗。做什么 / 不做什么
pointerdown是否发生在遮罩本身;只有按下和最终 click 都在遮罩时关闭。怎么做
.modal-backdrop上监听pointerdown,记录本次指针手势是否从遮罩开始。click时:data-modal-close仍无条件关闭;e.target === modal且本次手势从遮罩开始才关闭;pointercancel清理状态,避免取消的手势污染下一次操作。预计修改:
admin/static/js/app.jsadmin/main_test.go(静态回归守卫)docs/admin/05-ui-specification.md验收标准
go vet ./...、go test ./...通过。怎么验证
从
admin/执行:浏览器验证:
pointerdown→ 拖到遮罩 →pointerup:弹窗不关闭。pointerdown→pointerup:弹窗关闭。风险和回退
实施完成,待用户验收
修复结果
pointerdown是否从遮罩本身开始。pointercancel会清理手势状态。Chrome 真实事件回归
使用项目实际
admin/static/js/app.js:Go 验证
结果:
go version go1.23.0 windows/amd64,构建和全部测试通过。未验证:尚未在用户当前浏览器和实际数据环境人工操作。
提交与归档
ff75b272cbb98fdocs/task/56-修复拖选密码时弹窗意外关闭.md工单保持打开,等待用户验收后再关闭并同步 #15、#14。
用户已于 2026-08-09 明确通过全部 Admin 待验收工单。本工单验收通过,现关闭,并同步父级 #15、#14 的任务清单。