Files
cdp_hub/docs/tasks/T-306.md
T

39 lines
3.1 KiB
Markdown

---
id: T-306
title: 精简代理下拉编辑与实例行安全操作布局
phase: 3
deps: [T-304, T-305]
status: DOING
created: 2026-07-25
owner: codex
---
## 需求与背景
设置页的代理管理需要从“名称加列表行编辑”简化为单一选择器和地址输入。用户需要在下拉框中直接识别完整代理地址,选择后可编辑,未选择时可新增。实例列表需要把高频主操作放在第一位,并增加操作间距以降低误点风险。
## 方案与边界
- 设置页使用“已保存代理”单选下拉框、单一“代理地址”输入框,以及同一行的“保存代理 / 删除代理”按钮。默认不选任何代理且输入框为空;选择已有项会回填其地址,修改后保存更新同一稳定 `proxyId`,未选择时保存创建新项。
- UI 只展示完整、已规范化的无认证 `scheme://host:port` 地址。配置与实例关联继续使用稳定 `proxyId`,不以地址字符串作为关联键;为保持已有 JSON 兼容,新增或改写时内部名称同步为地址但不再作为 UI 字段。
- 保存前拒绝认证信息、非法地址和规范化后重复地址。保存成功保留选中项和输入内容,并通过非模态反馈说明其只影响后续启动。
- 删除仅针对已选代理,先显示带完整地址的确认对话框;Escape 和取消不做更改,初始焦点在取消。若仍被实例引用,则不打开可执行删除确认,改为说明引用数量并保持选择与输入不变。
- 新建和编辑实例统一使用同一代理选择器,展示完整地址与“无代理”,只保存 `proxyId`。运行中实例改代理只影响下次启动。
- 实例行操作顺序固定为“启动/停止/重新检测 → 编辑 → 删除”。图标按钮有至少 8epx 间隔与独立 36–40epx 命中区;删除继续使用危险色和确认弹层。单击行只选中,行内操作不触发行默认编辑。
## 验收要点
- 设置页初始代理输入为空;下拉项显示完整地址。选择、修改、保存、新增、清空选择、格式错误和重复地址均有可恢复反馈。
- 删除未引用代理时先展示“删除代理?”确认,包含代理地址、取消和删除按钮;确认成功后下拉框和输入框清空,焦点返回下拉框。引用中代理不可删除且不会改变任何实例选择。
- 新建和编辑实例的代理选择器展示完整地址;保存和重启后仍关联同一 `proxyId`,地址更新后下一次启动使用新地址。
- 行操作视觉和键盘顺序为主操作、编辑、删除;各目标互不重叠,删除与相邻操作有更大间隔,启动/停止状态机和外部实例不接管边界保持不变。
- 覆盖空代理库、选择、地址规范化、重复值、删除取消/确认/引用保护、编辑脏状态、操作顺序、窄窗口、键盘 Escape/Enter 与焦点恢复。
- `gofmt`、`go test ./...`、`go vet ./...`、`go build -o build/chub.exe ./cmd/chub`、`scripts/smoke-browser.ps1` 与 `scripts/smoke-windows.ps1` 通过。
## 执行记录
- 状态:DOING
- 变更:待实现。
- 验证:待执行。
- 阻塞:无。