## 任务目标
请核查当前 Vue 业务弹窗的保存、关闭与异常恢复,使用户能明确完成操作并在失败后继续处理。
以核查和评审为主,给出有证据的判断及可复核的修改建议;本次用户另有明确实现要求时,按其授权范围执行。
## 输入信息(选填)
两项均可留空,也可直接用一句话说明目标并附上已有资料。无需自行整理版本、配置或完整需求表;能读取的内容由执行者补齐。
弹窗业务目标:
弹窗或接口资料:
## 信息不完整时
先使用本次对话中已经说明的信息;用户留空、写“暂无/不清楚”或未替换输入标记,都按缺失处理,不当作真实路径、参数或业务值。已能从资料确定的内容不重复询问,不编造文件、日志、接口、业务值或执行结果。在用户已授权的范围内读取相关工程和材料,不为补齐输入擅自扩大操作范围。
### 优先确认
- 确认弹窗唯一任务、对象、visible 所有者和真实请求周期。
- 核对取消、关闭按钮、遮罩和 Escape 的实现及当前版本是否支持异步拦截。
- 检查回车与表单提交重复触发、编辑回填、销毁重建、旧响应和成功后的页面刷新。
### 可采用的默认处理
- 默认核查并给状态表和必要修正;明确修复要求时在现有组件能力内实现,不额外建立弹窗框架。
- 保存失败保留合理输入并恢复操作,服务端结果未明确前不展示成功或自动关闭。
- 沿用已有草稿和关闭约定,前端提交锁仅防重复触发,不当作后端幂等保证。
### 必须有依据的事项
- 未保存草稿是否允许丢弃、提交中是否允许关闭缺少业务约定,且实现必须改变当前数据保留行为。
- 接口可能已受理但无返回,缺少幂等或结果查询依据时不能自行再次写入。
只有缺口会改变业务结果、权限边界或关键实现,且无法从现有资料确认时,才集中提出最多 3 个关键问题;说明影响,并继续完成不依赖答案的部分。一般命名、排版和可逆实现细节按现有约定决定,不逐项等待确认。
### 资料仍不足时的交付
- 缺源码时交付显示和请求状态、各关闭来源处理及失败恢复方案,组件 API 明确待按版本核对。
- 后端不可用时用隔离的成功、校验失败、延迟和未知结果验证前端处理,真实联调单列。
## 执行要求
按当前版本的 TDesign Dialog 能力处理显示、加载和关闭事件。业务操作的幂等、授权以及是否允许取消,需要依照项目事实实现。
1. 列出弹窗承担的唯一主要任务、操作对象和完成条件。区分确认删除、编辑保存、结果提示等场景,按钮直接写业务动作;需要说明影响范围时描述真实后果,不使用笼统的“温馨提示”掩盖关键内容。
2. 设计未操作、输入中、提交中、成功、失败等状态,确定谁控制 visible。把确认按钮加载与真实请求周期绑定,避免请求尚未结束弹窗就关闭,或请求失败后按钮一直处于不可用状态。
3. 分别处理取消按钮、关闭按钮、遮罩点击和 Escape。存在未保存修改时按业务约定保留、确认放弃或阻止关闭;不要把返回 void 的动画前回调误当成支持异步拦截的关闭守卫,应检查该版本真实接口能力。
4. 核对回车确认与内部表单提交是否可能同时触发请求。对连续点击、键盘触发和慢请求期间再次操作进行限制;前端限制只减少重复触发,涉及不可重复业务操作时同时核查服务端约定。
5. 明确关闭时是否销毁子内容以及重新打开时如何初始化。编辑另一条记录时清理旧对象、错误提示与异步回调,成功后根据接口实际结果刷新列表或详情;不得把本地假定值直接当成服务器保存结果。
6. 验收焦点进入与返回、键盘操作、长内容滚动、遮罩遮挡和中文按钮长度。模拟业务校验失败、网络中断、延迟响应、重复触发及用户切换记录,检查能否继续编辑或安全返回原页面。
## 交付与验收
输出:弹窗状态表、每种关闭来源的处理、必要代码修改和验收记录。对接口已受理但客户端未收到结果的情况单独说明确认结果的办法,避免直接再次提交。缺少版本或源码时先给处理方案和待核实 API,不声称组件天然保证全部业务安全。
### 本条完成检查
- 给出状态表、关闭来源与草稿处理,确认异步守卫采用实际 API 而非动画回调。
- 验证点击与回车重复、失败保留输入、切换记录、旧响应和成功后真实数据刷新。
- 检查焦点进入返回、键盘、长内容滚动及遮挡,分别记录已执行与待联调行为。
按本条要求组织结果,使用简洁中文和一致的编号、术语、缩进及空行;已有项目格式优先。只说明实际完成的内容,将采用的假设、未完成项和缺少的条件写在相关位置,不额外生成无关文档。未执行、无法复现或缺少证据的检查如实标注,不宣称已通过或已有性能收益。
## 参考资料与适用边界
官方来源(2026-09-08 核验):
- [腾讯 TDesign《TDesign Vue Next Dialog 类型与接口说明》](https://github.com/Tencent/tdesign-vue-next/blob/develop/packages/components/dialog/type.ts)