UI Design System
build dev

Popconfirm

就近确认轻量危险操作。中文惯用名:气泡确认。
稳定本期新增已接入

元信息

字段值
规范 IDcomponent.popconfirm
名称Popconfirm
二级分类反馈(feedback)
用途就近确认轻量危险操作
描述中文惯用名:气泡确认。

预览

静态结构:基于 vendored Popover——children(触发元素)经 PopoverTrigger 包裹(外层套 trigger 包装节点),点击后在触发元素旁弹出 PopoverContent 卡片:标题区(data-slot="popconfirm-title",font-medium)+ 说明区(data-slot="popconfirm-description",text-sm text-muted-foreground)+ 右对齐按钮组(outline 取消 + default 确定,danger 时确定按钮为 destructive)。确认或取消后浮层自动关闭并触发对应事件。

DSL 结构

DslNode
{
  "type": "Popconfirm",
  "props": {
    "title": "删除该条记录?",
    "description": "删除后不可恢复。",
    "danger": true
  },
  "children": [
    {
      "type": "Button",
      "props": {
        "text": "删除",
        "danger": true
      }
    }
  ],
  "events": {
    "onConfirm": {
      "action": "setState",
      "params": {
        "deleted": true
      }
    }
  }
}

何时用

何时使用

  • 就近确认轻量危险操作:删除一行、移除标签等,在触发元素旁弹出,二次确认后立即执行。
  • 确认成本低、信息少的场景:标题说清后果,用户一眼可判。
  • 列表操作列、卡片角落动作等触发点明确的场景。

何时不用

  • 需要填写信息、展示详细后果说明或多步决策的确认:使用 Dialog(阻断式对话框)。
  • 纯信息展示、无需确认:使用 Popover 或 Tooltip。
  • 批量 / 不可逆且影响面大的操作:使用 Dialog 并明确列出影响范围,Popconfirm 承载不下。

变体

变体视觉形态适用场景
默认确认标题(+ 说明)+ 取消 / 确定按钮一般性二次确认(如「放弃当前编辑?」)
danger 危险确认确定按钮为 destructive 危险色删除、清空等破坏性操作的二次确认
仅标题省略 description,仅一行标题 + 按钮组后果不言自明的轻量确认
标题 + 说明标题下附辅助说明文案需要补充后果说明(如「删除后不可恢复」)

API 属性

属性类型默认值说明
titlestring—确认框标题
descriptionstring—辅助说明文案
confirmTextstring—确认按钮文案;缺省取 i18n pactor.alertDialog.confirm(zh-CN「确定」)
cancelTextstring—取消按钮文案;缺省取 i18n pactor.alertDialog.cancel(zh-CN「取消」)
dangerbooleanfalse确认按钮使用危险色(destructive)
onConfirm() => void—确认事件:点击确认按钮触发,且浮层自动关闭
onCancel() => void—取消事件:点击取消按钮触发,且浮层自动关闭
childrenReactNode—触发元素(DSL 子树,经 Renderer children 机制渲染)
classNamestring—通用:浮层内容根节点 class(与内置样式合并)
styleCSSProperties—通用:内联样式(同 className 挂载规则)

使用规范

  • 确认 / 取消点击后浮层均自动关闭,事件在关闭后触发——不要在 onConfirm 里手动管理浮层开关。
  • 危险操作必须 danger=true 让确认按钮呈危险色,标题写清后果(「删除后不可恢复」)。
  • 确认文案尽量用动词(「删除」「移出」)代替默认「确定」,让用户不看标题也能预判后果。
  • 触发元素用 children 渲染(通常为 Button / 文字链),Popconfirm 自身不提供触发样式。
  • 与 Dialog 的边界:只需「是 / 否」二选一、信息一两行说清用 Popconfirm;需要表单、长说明或强阻断用 Dialog。

正例

  • ✓ 列表行内 text「删除」按钮外包 Popconfirm:title「确定删除该条目?」、description「删除后不可恢复」、danger、confirmText「删除」。
  • ✓ 编辑器离开页面前:title「放弃未保存的修改?」,确认后丢弃草稿并跳转。
  • ✓ 取消订阅场景:confirmText「取消订阅」、cancelText「再想想」,文案即操作本身。

反例

  • ✕ 用 Popconfirm 承载包含表单或多段说明的复杂确认(应使用 Dialog)。
  • ✕ 危险操作不设 danger,确认按钮与普通确认无异,用户低估后果。
  • ✕ 把 Popconfirm 当 Popover 用,展示纯信息内容而无确认诉求。

Design Token 映射

不适用:组件 tokenRefs 为空:样式 Token 数据尚未接入,三层映射(Primitive → Semantic → Component)待样式 Token 接入后回填。