组件
返回目录
组件详情入口
浮层
@vean/ui
SDialog

Dialog

Dialog 属于 浮层 分类。建议先看演示与用法,再对照 API 表格完成接入和样式调整。

先用快捷跳转面板找到概述、用法、演示和 API,再往下细读完整文档内容。

快速跳转

同分类组件

如果你在同一类交互里做组合,这些组件通常会一起出现。

对话框

概述

覆盖在主窗口或其他对话框之上、并使其下层内容失效的窗口。

SDialog 是用于内联场景的声明式包装组件。dialog(...) 是用于以编程方式创建警告式对话框的命令式 API。它组合 DialogRoot/DialogTrigger/DialogOverlay/DialogPopup/DialogHeader/DialogContent/DialogFooter/DialogTitle/DialogDescription/DialogClose/DialogFullscreen/DialogCancel/DialogConfirm 这一系列 Aria 基础组件(零样式)与 dialogVariants 样式配方(12 个槽、6 种尺寸)。

调用命令式 dialog(...) API 前,请在应用根部附近挂载一次 SDialogProvider。

用法

声明式

命令式 API

<script setup lang="ts">
import { h } from 'vue';
import { SButton, SDialogProvider, dialog } from '@vean/ui';

function openWarningDialog() {
  dialog.warning('删除项目', {
    description: '此操作无法撤销。',
    content: h('div', '请先确认再继续。'),
    confirmText: '删除'
  });
}
</script>

<template>
  <SDialogProvider />

  <SButton color="warning" @click="openWarningDialog">打开对话框</SButton>
</template>

特性

  • 🧩 Aria/样式分离 — DialogCompact 聚合基础组件并组合遮罩/弹层/头部/内容/底部;SDialog 只注入样式并转发插槽/事件
  • 🖱️ 声明式 + 命令式 — 带触发器的内联 SDialog,或由 SDialogProvider 驱动的 dialog.* API
  • 🎭 默认模态 — modal 渲染 aria-modal、useHideOthers、外部指针拦截与焦点陷阱;用 modal={false} 切换
  • ⚠️ 警告模式 — isAlert 切换为 role="alertdialog",并加入类型图标与 aria-live(polite/assertive)
  • 🏷️ 无障碍标题/描述 — title/description 连接 aria-labelledby/aria-describedby
  • ❌ 可关闭 — showClose 渲染关闭控件;Escape、外部指针/焦点与关闭按钮均可关闭
  • 🖐️ 可拖拽 — draggable 支持拖动头部移动对话框(基于 @vueuse/core 的 useDraggable)
  • ⛶ 全屏 — showFullscreen 渲染切换按钮;fullscreen/defaultFullscreen 驱动 v-model:fullscreen 状态
  • 🔘 取消/确认 — showCancel/showConfirm,cancelText/confirmText 取自 dialog.cancel/dialog.confirm 本地化消息
  • 🧹 纯净模式 — pure 移除头部与底部,用于完全自定义内容
  • 📐 6 种尺寸 — xs–2xl size;逐槽 ui 覆盖
  • ♿ 无障碍 — 真实 role="dialog"、焦点陷阱 + 循环、关闭时焦点还原、axe-core 零违规

组件家族

  • SDialog(样式层)— 入口包装组件;dialogVariants 配方配合动态插槽转发
  • SDialogProvider(样式层)— 承载命令式 dialog(...) API;订阅 DialogState
  • DialogRoot(Aria)— 状态持有者;经 useControllableState 维护 open,提供 dir/modal 与 provideDialogRootContext
  • DialogTrigger(Aria)— 打开对话框的 Button
  • DialogOverlay(Aria)— 变暗的背景遮罩
  • DialogPopup / DialogPopupImpl(Aria)— 承载对话框主体的可关闭、焦点陷阱表面
  • DialogTitle / DialogDescription(Aria)— 用于标注/描述的元素
  • DialogClose(Aria)— 关闭控件,切换 open 并发出 close
  • DialogFullscreen(Aria)— 全屏切换按钮,切换 fullscreen 状态并发出 fullscreen
  • DialogCancel / DialogConfirm(Aria)— 底部操作,发出 cancel/confirm
  • DialogHeader / DialogContent / DialogFooter(Aria)— 布局分区
  • DialogCompact(Aria)— 聚合组件;组合所有基础组件并暴露各分区插槽

演示

基础

底部

状态

阻止关闭

Dialog API

可拖拽

全屏

API

Aria 层

19

Dialog

35 属性13 事件9 插槽
属性
属性名类型默认值描述
showFullscreen
boolean
false
是否在对话框的标题栏中显示全屏切换按钮。
class
ClassValue
—
对话框的 popup 类
size
ThemeSize
—
组件的视觉尺寸。
ui
Partial<DialogUi>
—
该组件的按槽类重写。
title
string
—
对话框的标题。此标题用于辅助功能,若未提供 `title` 槽,则会显示在对话框的标题栏中。
description
string
—
对话框的描述。此描述用于辅助功能,若未提供 `description` 槽,则会在对话框内容中显示。
icon
IconValue
—
对话框的图标。该图标用于辅助功能,若未提供 `icon` 槽,则会显示在对话框的标题栏中。
showClose
boolean
true
是否在对话框的标题栏中显示关闭按钮。
pure
boolean
false
是否使用不包含页眉和页脚的“纯版”对话框。 当您希望完全控制对话框内容且不需要内置页眉和页脚时,此选项非常有用。
showCancel
boolean | 'onlyWarning'
'onlyWarning'
是否显示“取消”按钮。 当设置为 `onlyWarning` 时,只有当对话框是 `alertType="warning"` 的警告对话框时,才会显示“取消”按钮。 当设置为 `true` 时,将始终显示“取消”按钮。
cancelText
string
—
“取消”按钮的文本。此文本用于辅助功能,若未提供 `cancel` 插槽,则会在对话框的页脚中显示。 默认采用来自 `ConfigProvider` 的本地化 `dialog.cancel` 消息。
showConfirm
boolean
—
当对话框为提示对话框时,是否显示确认按钮。 当对话框为提示对话框时,默认值为 `true`。
confirmText
string
—
“确认”按钮的文本。此文本用于辅助功能,若未提供 `confirm` 插槽,则会显示在对话框的页脚中。 默认采用来自 `ConfigProvider` 的本地化 `dialog.confirm` 消息。
triggerProps
DialogTriggerProps
—
转发给触发元素的属性。
overlayProps
DialogOverlayProps
—
转发给覆盖元素的属性。
portalProps
PortalProps
—
转发给 portal 元素的属性。
popupProps
DialogPopupProps
—
转发给弹出窗口元素的属性。
headerProps
DialogHeaderProps
—
转发至 header 元素的属性。
contentProps
DialogContentProps
—
转发给内容元素的属性。
footerProps
DialogFooterProps
—
转发至页脚元素的属性。
titleProps
DialogTitleProps
—
传递给 title 元素的属性。
descriptionProps
DialogDescriptionProps
—
已将属性转发至 description 元素。
closeProps
DialogCloseProps
—
转发至 close 元素的属性。
fullscreenProps
DialogFullscreenProps
—
转发给全屏元素的属性。
cancelProps
DialogCancelProps
—
转发给 cancel 元素的属性。
confirmProps
DialogConfirmProps
—
转发给 confirm 元素的属性。
modal
ModalityTier
true
对话框的模态属性。当设置为 `true` 时,将禁用与外部元素的交互,且屏幕阅读器仅能读取对话框 内容。 设置为 `'trap-focus'` 可在捕获焦点的同时仍允许外部指针事件通过(非模态侧边面板,例如 `'trap-focus'` 层级的 `Drawer`)。
dir
Direction
—
对话框的文本方向
isAlert
boolean
false
该对话框是否为警报对话框。警报对话框是一种会中断用户工作流程以传达重要信息并需要用户做出响应的对话框。 当设置为 `true` 时,对话框将具有 `role="alertdialog"` 属性,并需要提供 `DialogTitle`。此设置用于辅助功能支持。
alertType
DialogAlertType
—
对话框的“alert”类型,当对话框为警报对话框时,该类型将决定默认图标和样式。
draggable
boolean
false
是否可以通过拖动对话框的标题来移动该对话框。
fullscreen
boolean
undefined
对话框的可控全屏状态。可通过 `v-model:fullscreen` 进行绑定。
defaultFullscreen
boolean
false
对话框初次渲染时的全屏状态。当您无需控制其全屏状态时使用此选项。
open
boolean
undefined
对话框的受控打开状态。可通过 `v-model:open` 进行绑定。
defaultOpen
boolean
false
对话框在初始渲染时的打开状态。当无需控制其打开状态时使用。
事件
事件名参数描述
update:open
boolean
当对话框的打开状态发生变化时调用的事件处理程序。
update:fullscreen
boolean
当对话框的全屏状态发生变化时调用的事件处理程序。
click
PointerEvent
当对话框触发器被激活时调用的事件处理程序。
escapeKeyDown
KeyboardEvent
当 Esc 键被按下时触发的事件处理程序。可被阻止。
pointerDownOutside
PointerDownOutsideEvent
当 `pointerdown` 事件发生在 `DismissableLayer` 外部时调用的事件处理程序。可被阻止。
focusOutside
FocusOutsideEvent
当焦点移出 `DismissableLayer` 时触发的事件处理程序。可被阻止。
interactOutside
PointerDownOutsideEvent | FocusOutsideEvent
当在 `DismissableLayer` 外部发生交互时触发的事件处理程序。具体而言,当 `pointerdown` 事件在该区域外部发生,或焦点移出该区域时触发。此事件可被阻止。
openAutoFocus
Event
在打开页面时自动聚焦时触发的事件处理程序。可被阻止。
closeAutoFocus
Event
在关闭时自动聚焦时触发的事件处理程序。可被阻止。
close
MouseEvent
当请求关闭对话框时调用的事件处理程序。
fullscreen
MouseEvent
当请求切换对话框的全屏状态时,会调用此事件处理程序。
confirm
MouseEvent
当通过确认操作请求关闭对话框时,将调用此事件处理程序。
cancel
MouseEvent
当请求取消对话框时调用的事件处理程序。
插槽
插槽名参数描述
default
props: DialogCompactBaseSlotProps
默认插槽的自定义内容。
trigger
DialogCompactBaseSlotProps
触发槽的自定义内容。
title
DialogCompactBaseSlotProps
标题槽位的自定义内容。
description
DialogCompactBaseSlotProps
描述字段的自定义内容。
close
DialogCompactBaseSlotProps
close 插槽的自定义内容。
fullscreen
DialogCompactBaseSlotProps
全屏插槽的自定义内容。
footer
DialogCompactBaseSlotProps
页脚位置的自定义内容。
cancel
DialogCompactBaseSlotProps
“cancel”插槽的自定义内容。
confirm
DialogCompactBaseSlotProps
用于 confirm 插槽的自定义内容。

DialogCancel

4 属性1 事件
属性
属性名类型默认值描述
type
ButtonType
'button'
按钮元素的类型。可以是 'button'、'submit' 或 'reset' 之一。
disabled
boolean
—
该组件是否已禁用。
asChild
boolean
—
将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。
as
AsTag | Component
'div'
该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。
事件
事件名参数描述
cancel
MouseEvent
当请求取消对话框时调用的事件处理程序。

DialogClose

4 属性1 事件
属性
属性名类型默认值描述
type
ButtonType
'button'
按钮元素的类型。可以是 'button'、'submit' 或 'reset' 之一。
disabled
boolean
—
该组件是否已禁用。
asChild
boolean
—
将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。
as
AsTag | Component
'div'
该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。
事件
事件名参数描述
close
MouseEvent
当请求关闭对话框时调用的事件处理程序。

DialogCompact

32 属性13 事件9 插槽
属性
属性名类型默认值描述
title
string
—
对话框的标题。此标题用于辅助功能,若未提供 `title` 槽,则会显示在对话框的标题栏中。
description
string
—
对话框的描述。此描述用于辅助功能,若未提供 `description` 槽,则会在对话框内容中显示。
icon
IconValue
—
对话框的图标。该图标用于辅助功能,若未提供 `icon` 槽,则会显示在对话框的标题栏中。
showClose
boolean
true
是否在对话框的标题栏中显示关闭按钮。
showFullscreen
boolean
true
是否在对话框的标题栏中显示全屏切换按钮。
pure
boolean
false
是否使用不包含页眉和页脚的“纯版”对话框。 当您希望完全控制对话框内容且不需要内置页眉和页脚时,此选项非常有用。
showCancel
boolean | 'onlyWarning'
'onlyWarning'
是否显示“取消”按钮。 当设置为 `onlyWarning` 时,只有当对话框是 `alertType="warning"` 的警告对话框时,才会显示“取消”按钮。 当设置为 `true` 时,将始终显示“取消”按钮。
cancelText
string
—
“取消”按钮的文本。此文本用于辅助功能,若未提供 `cancel` 插槽,则会在对话框的页脚中显示。 默认采用来自 `ConfigProvider` 的本地化 `dialog.cancel` 消息。
showConfirm
boolean
—
当对话框为提示对话框时,是否显示确认按钮。 当对话框为提示对话框时,默认值为 `true`。
confirmText
string
—
“确认”按钮的文本。此文本用于辅助功能,若未提供 `confirm` 插槽,则会显示在对话框的页脚中。 默认采用来自 `ConfigProvider` 的本地化 `dialog.confirm` 消息。
triggerProps
DialogTriggerProps
—
转发给触发元素的属性。
overlayProps
DialogOverlayProps
—
转发给覆盖元素的属性。
portalProps
PortalProps
—
转发给 portal 元素的属性。
popupProps
DialogPopupProps
—
转发给弹出窗口元素的属性。
headerProps
DialogHeaderProps
—
转发至 header 元素的属性。
contentProps
DialogContentProps
—
转发给内容元素的属性。
footerProps
DialogFooterProps
—
转发至页脚元素的属性。
titleProps
DialogTitleProps
—
传递给 title 元素的属性。
descriptionProps
DialogDescriptionProps
—
已将属性转发至 description 元素。
closeProps
DialogCloseProps
—
转发至 close 元素的属性。
fullscreenProps
DialogFullscreenProps
—
转发给全屏元素的属性。
cancelProps
DialogCancelProps
—
转发给 cancel 元素的属性。
confirmProps
DialogConfirmProps
—
转发给 confirm 元素的属性。
modal
ModalityTier
true
对话框的模态属性。当设置为 `true` 时,将禁用与外部元素的交互,且屏幕阅读器仅能读取对话框 内容。 设置为 `'trap-focus'` 可在捕获焦点的同时仍允许外部指针事件通过(非模态侧边面板,例如 `'trap-focus'` 层级的 `Drawer`)。
dir
Direction
—
对话框的文本方向
isAlert
boolean
false
该对话框是否为警报对话框。警报对话框是一种会中断用户工作流程以传达重要信息并需要用户做出响应的对话框。 当设置为 `true` 时,对话框将具有 `role="alertdialog"` 属性,并需要提供 `DialogTitle`。此设置用于辅助功能支持。
alertType
DialogAlertType
—
对话框的“alert”类型,当对话框为警报对话框时,该类型将决定默认图标和样式。
draggable
boolean
false
是否可以通过拖动对话框的标题来移动该对话框。
fullscreen
boolean
undefined
对话框的可控全屏状态。可通过 `v-model:fullscreen` 进行绑定。
defaultFullscreen
boolean
false
对话框初次渲染时的全屏状态。当您无需控制其全屏状态时使用此选项。
open
boolean
undefined
对话框的受控打开状态。可通过 `v-model:open` 进行绑定。
defaultOpen
boolean
false
对话框在初始渲染时的打开状态。当无需控制其打开状态时使用。
事件
事件名参数描述
update:open
boolean
当对话框的打开状态发生变化时调用的事件处理程序。
update:fullscreen
boolean
当对话框的全屏状态发生变化时调用的事件处理程序。
click
PointerEvent
当对话框触发器被激活时调用的事件处理程序。
escapeKeyDown
KeyboardEvent
当 Esc 键被按下时触发的事件处理程序。可被阻止。
pointerDownOutside
PointerDownOutsideEvent
当 `pointerdown` 事件发生在 `DismissableLayer` 外部时调用的事件处理程序。可被阻止。
focusOutside
FocusOutsideEvent
当焦点移出 `DismissableLayer` 时触发的事件处理程序。可被阻止。
interactOutside
PointerDownOutsideEvent | FocusOutsideEvent
当在 `DismissableLayer` 外部发生交互时触发的事件处理程序。具体而言,当 `pointerdown` 事件在该区域外部发生,或焦点移出该区域时触发。此事件可被阻止。
openAutoFocus
Event
在打开页面时自动聚焦时触发的事件处理程序。可被阻止。
closeAutoFocus
Event
在关闭时自动聚焦时触发的事件处理程序。可被阻止。
close
MouseEvent
当请求关闭对话框时调用的事件处理程序。
fullscreen
MouseEvent
当请求切换对话框的全屏状态时,会调用此事件处理程序。
confirm
MouseEvent
当通过确认操作请求关闭对话框时,将调用此事件处理程序。
cancel
MouseEvent
当请求取消对话框时调用的事件处理程序。
插槽
插槽名参数描述
default
props: DialogCompactBaseSlotProps
默认插槽的自定义内容。
trigger
DialogCompactBaseSlotProps
触发槽的自定义内容。
title
DialogCompactBaseSlotProps
标题槽位的自定义内容。
description
DialogCompactBaseSlotProps
描述字段的自定义内容。
close
DialogCompactBaseSlotProps
close 插槽的自定义内容。
fullscreen
DialogCompactBaseSlotProps
全屏插槽的自定义内容。
footer
DialogCompactBaseSlotProps
页脚位置的自定义内容。
cancel
DialogCompactBaseSlotProps
“cancel”插槽的自定义内容。
confirm
DialogCompactBaseSlotProps
用于 confirm 插槽的自定义内容。

DialogCompactBase

DialogConfirm

4 属性1 事件
属性
属性名类型默认值描述
type
ButtonType
'button'
按钮元素的类型。可以是 'button'、'submit' 或 'reset' 之一。
disabled
boolean
—
该组件是否已禁用。
asChild
boolean
—
将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。
as
AsTag | Component
'div'
该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。
事件
事件名参数描述
confirm
MouseEvent
当通过确认操作请求关闭对话框时,将调用此事件处理程序。

DialogContent

DialogDescription

DialogFooter

DialogFullscreen

4 属性1 事件
属性
属性名类型默认值描述
type
ButtonType
'button'
按钮元素的类型。可以是 'button'、'submit' 或 'reset' 之一。
disabled
boolean
—
该组件是否已禁用。
asChild
boolean
—
将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。
as
AsTag | Component
'div'
该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。
事件
事件名参数描述
fullscreen
MouseEvent
当请求切换对话框的全屏状态时,会调用此事件处理程序。

DialogFullscreenState

1 事件
事件
事件名参数描述
update:fullscreen
boolean
当对话框的全屏状态发生变化时调用的事件处理程序。

DialogHeader

DialogOverlay

1 属性
属性
属性名类型默认值描述
forceMount
boolean
—
用于在需要更多控制时强制挂载。 在使用 Vue 动画库控制动画时非常有用。

DialogPopup

3 属性6 事件
属性
属性名类型默认值描述
asChild
boolean
—
将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。
as
AsTag | Component
'div'
该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。
forceMount
boolean
—
用于在需要更多控制时强制挂载。 在使用 Vue 动画库控制动画时非常有用。
事件
事件名参数描述
escapeKeyDown
KeyboardEvent
当 Esc 键被按下时触发的事件处理程序。可被阻止。
pointerDownOutside
PointerDownOutsideEvent
当 `pointerdown` 事件发生在 `DismissableLayer` 外部时调用的事件处理程序。可被阻止。
focusOutside
FocusOutsideEvent
当焦点移出 `DismissableLayer` 时触发的事件处理程序。可被阻止。
interactOutside
PointerDownOutsideEvent | FocusOutsideEvent
当在 `DismissableLayer` 外部发生交互时触发的事件处理程序。具体而言,当 `pointerdown` 事件在该区域外部发生,或焦点移出该区域时触发。此事件可被阻止。
openAutoFocus
Event
在打开页面时自动聚焦时触发的事件处理程序。可被阻止。
closeAutoFocus
Event
在关闭时自动聚焦时触发的事件处理程序。可被阻止。

DialogPortal

DialogProvider

DialogRoot

9 属性1 事件
属性
属性名类型默认值描述
modal
ModalityTier
true
对话框的模态属性。当设置为 `true` 时,将禁用与外部元素的交互,且屏幕阅读器仅能读取对话框 内容。 设置为 `'trap-focus'` 可在捕获焦点的同时仍允许外部指针事件通过(非模态侧边面板,例如 `'trap-focus'` 层级的 `Drawer`)。
dir
Direction
—
对话框的文本方向
isAlert
boolean
false
该对话框是否为警报对话框。警报对话框是一种会中断用户工作流程以传达重要信息并需要用户做出响应的对话框。 当设置为 `true` 时,对话框将具有 `role="alertdialog"` 属性,并需要提供 `DialogTitle`。此设置用于辅助功能支持。
alertType
DialogAlertType
—
对话框的“alert”类型,当对话框为警报对话框时,该类型将决定默认图标和样式。
draggable
boolean
false
是否可以通过拖动对话框的标题来移动该对话框。
fullscreen
boolean
undefined
对话框的可控全屏状态。可通过 `v-model:fullscreen` 进行绑定。
defaultFullscreen
boolean
false
对话框初次渲染时的全屏状态。当您无需控制其全屏状态时使用此选项。
open
boolean
undefined
对话框的受控打开状态。可通过 `v-model:open` 进行绑定。
defaultOpen
boolean
false
对话框在初始渲染时的打开状态。当无需控制其打开状态时使用。
事件
事件名参数描述
update:open
boolean
当对话框的打开状态发生变化时调用的事件处理程序。

DialogTitle

DialogTrigger

4 属性1 事件
属性
属性名类型默认值描述
type
ButtonType
'button'
按钮元素的类型。可以是 'button'、'submit' 或 'reset' 之一。
disabled
boolean
—
该组件是否已禁用。
asChild
boolean
—
将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。
as
AsTag | Component
'div'
该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。
事件
事件名参数描述
click
PointerEvent
当对话框触发器被激活时调用的事件处理程序。

注意事项

架构与对标差异

DialogCompact 负责遮罩/弹层/头部/内容/底部组合与命令式 dialog(...) 状态流,所有基础组件保持零样式,仅由 UI 包装组件注入 dialogVariants 类。这与 radix-ui/shadcn-ui 的 headless/样式分离一致。Ant Design、Element Plus、Mantine、Naive UI 提供带 mask/closable/keyboard/width prop 的单一样式化对话框;VeanUI 额外暴露逐槽 *Props 通道、size 尺寸体系,以及单包库通常收敛为静态服务的命令式 provider API(dialog.*)。

能力VeanUIshadcn/uiAnt Design ModalElement Plus DialogMantine ModalNaive UI Dialog
Aria/样式分离✅✅————
命令式 API✅—✅✅✅✅
模态(aria-modal+陷阱)✅✅✅✅✅✅
警告模式(alertdialog)✅✅✅——✅
关闭时焦点还原✅✅✅✅✅✅
尺寸(6)✅—————
本地化取消/确认文本✅—————
纯净(无头/底部)✅—————

— = 不支持或采用不同交互模型。

运行时注意

  • DialogCompact 默认 modal(true);portal 将弹层传送至 document.body,body 滚动由 hide-others 层管理。
  • 警告对话框的 showConfirm 默认为 true;showCancel 默认为 'onlyWarning'(仅 alertType="warning" 时显示取消)。传显式布尔值可覆盖。
  • cancelText/confirmText 默认取 dialog.cancel/dialog.confirm 的本地化消息;可按实例覆盖。
  • isAlert 需要提供 DialogTitle 以保证无障碍(role="alertdialog" 必须被标注)。设置 title 或 title 插槽。
  • pure 会移除头部与底部,因此 title/description 不再渲染——该模式下请自行提供可访问的标注。
  • 命令式 dialog(...) API 需要挂载 SDialogProvider;未挂载时调用为 no-op。

FAQ

如何控制打开状态?

用 v-model 绑定 open,或传 defaultOpen 使用非受控对话框:

<SDialog v-model:open="open" title="偏好设置">...</SDialog>

如何显示警告式对话框?

设置 is-alert 与 alert-type。弹层会获得 role="alertdialog" 及对应类型图标:

<SDialog is-alert alert-type="warning" title="删除" description="此操作无法撤销。">
  <template #trigger><SButton>删除</SButton></template>
</SDialog>

如何使用命令式 API?

挂载一次 SDialogProvider,然后在任意位置调用 dialog.*(完整示例见「概述」):

import { dialog } from '@vean/ui';
dialog.warning('磁盘已满', { description: '请释放空间。' });

如何构建完全自定义的对话框?

使用 pure 并填充默认插槽:

<SDialog v-model:open="open" pure>
  <div class="custom">...</div>
</SDialog>

如何制作非模态对话框?

设置 modal={false} 以允许与对话框外部内容交互:

<SDialog v-model:open="open" :modal="false" title="面板">...</SDialog>

如何制作可拖拽对话框?

设置 draggable,拖动头部即可移动对话框。位置会保持到对话框关闭:

<SDialog draggable title="面板">
  <template #trigger><SButton>打开</SButton></template>
  <div>拖动头部即可移动此对话框。</div>
</SDialog>

如何使用全屏模式?

通过头部按钮切换(showFullscreen,默认隐藏,需显式传 show-fullscreen 开启),或用 v-model:fullscreen 驱动:

<SDialog v-model:fullscreen="fullscreen" title="面板">...</SDialog>

更新日志

版本记录按发布版本分组,便于快速查看这个组件在不同版本里的实际变更。

v0.40.0

2026-09-14

对比版本

修复

通过语言环境为仅含图标的关闭触发器添加标签

范围: dialog作者: soybeanfe查看提交abe07

修复

恢复默认显示全屏切换按钮

范围: dialog作者: soybeanfe查看提交600a0

修复

默认隐藏全屏切换按钮

范围: dialog作者: soybeanfe查看提交3ae1c

重构

移除冗余的默认 showFullscreen 设置

范围: dialog作者: soybeanfe查看提交956d7

修复

通过语言环境为仅含图标的关闭触发器添加标签

范围: dialog作者: soybeanfe查看提交abe07

v0.30.0

2026-08-20

对比版本

新功能

添加全屏和可拖动功能

范围: dialog作者: soybeanjs查看提交fac2c

新功能

添加全屏和可拖动功能

范围: dialog作者: soybeanjs查看提交fac2c

v0.22.3

2026-05-17

对比版本

修复

调整弹出窗口的最大高度,以提高响应速度

范围: dialog作者: soybeanfe查看提交9e115

v0.17.0

2026-05-03

对比版本

优化

将 DialogRootProps 重命名为扩展 DialogBaseProps,以保持一致性

范围: dialog作者: soybeanjs查看提交7b052

v0.15.0

2026-04-26

对比版本

破坏性变更

实现 DialogCompact 并重构 `useDialog`

范围: dialog作者: soybeanjs查看提交39019

新功能

在 DialogCompact 组件中启用 showConfirm 选项

范围: dialog作者: soybeanfe查看提交e8a13

优化

增强 DialogCompact 组件的插槽道具绑定

范围: dialog作者: soybeanfe查看提交a3c2d

破坏性变更

实现 DialogCompact 并重构 `useDialog`

范围: dialog作者: soybeanjs查看提交39019

新功能

在 DialogCompact 组件中启用 showConfirm 选项

范围: dialog作者: soybeanfe查看提交e8a13

优化

增强 DialogCompact 组件的插槽道具绑定

范围: dialog作者: soybeanfe查看提交a3c2d

v0.13.8

2026-03-24

对比版本

修复

为响应式设计更新内容样式

范围: dialog作者: soybeanjs查看提交77fa2

v0.12.1

2026-03-07

对比版本

优化

更新对话框内容样式,使用 w-max,以提高响应速度

范围: dialog作者: soybeanjs查看提交eb13c

v0.11.4

2026-03-06

对比版本

新功能

为对话框内容大小添加最小宽度限制

范围: dialog作者: soybeanjs查看提交9a5e1

v0.11.3

2026-03-06

对比版本

新功能

更新对话框尺寸变量的最大宽度

范围: dialog作者: soybeanjs查看提交417a0

v0.11.2

2026-03-06

对比版本

新功能

为绑定内容类添加类道具

范围: dialog作者: soybeanjs查看提交1e779

v0.10.3

2026-03-06

对比版本

修复

删除 rounded-lg 类中不必要的 sm: 前缀

范围: dialog作者: soybeanjs查看提交30fd6

v0.0.8

2026-01-01

对比版本

重构

用 DialogPopup 代替 DialogContent,并更新相关类型和上下文管理,以改进结构和功能

范围: dialog作者: soybeanjs查看提交4d82e

重构

将 DialogPopup 更名为 DialogContent

范围: dialog作者: soybeanjs查看提交e0796

v0.0.2

2025-11-18

对比版本

新功能

实现一个具备上下文管理和无障碍功能的对话框组件

范围: dialog作者: soybeanjs查看提交adfcc

新功能

引入 DialogContentImpl 组件,以改进焦点管理并实现可关闭层功能

范围: dialog作者: soybeanjs查看提交8861f

新功能

集成 useHideOthers 可组合函数,以提升无障碍体验和焦点管理

范围: dialog作者: soybeanjs查看提交1139a

新功能

添加一个对话框示例组件,展示 DialogRoot、DialogTrigger 及相关元素的使用方法

范围: dialog作者: soybeanjs查看提交e08d4

新功能

在对话框插槽中暴露 closeModal 函数,以增强控制能力

范围: dialog作者: soybeanjs查看提交2f005

新功能

引入 DialogThemeContext 以支持主题定制,并新增 DialogHeader 和 DialogFooter 组件

范围: dialog作者: soybeanjs查看提交f2b65

新功能

新增 Dialog 组件及其相关上下文、关闭操作和类型,以增强对话框功能

范围: dialog作者: soybeanjs查看提交8378a

新功能

添加多个对话框示例,包括默认、页脚、状态控制以及阻止关闭功能

范围: dialog作者: soybeanjs查看提交9bdd9

新功能

新增 SDialogPure 组件,支持自定义属性及变体

范围: dialog作者: soybeanjs查看提交5ff73

新功能

为 DialogClose 组件添加 beforeClose 属性,用于控制关闭行为

范围: dialog作者: soybeanjs查看提交35bd1

新功能

更新 `beforeClose` 属性,允许在 `Dialog` 和 `AlertDialog` 组件中返回 `void`

范围: dialog作者: soybeanjs查看提交f295b

新功能

实现 useDialog 可组合函数,并集成 DialogProvider 以增强对话框管理功能

范围: dialog作者: soybeanjs查看提交2041c

修复

调整关闭图标的位置,并在对话框内容中添加 `outline-none` 属性,以提升无障碍体验并保持视觉一致性

范围: dialog作者: soybeanjs查看提交40fc9

修复

移除未使用的主题上下文,并更新 DialogClose 类的绑定

范围: dialog作者: soybeanjs查看提交be3ae

优化

更新 DialogClose 组件以使用主题上下文,并将 closeIcon 重命名为 closable

范围: dialog作者: soybeanjs查看提交82210

重构

更新对话框组件,使其在可关闭层和焦点范围属性上使用 v-bind

范围: dialog作者: soybeanjs查看提交ceba2

重构

将 closeModal 替换为 onOpenChange,以改进对话框状态管理

范围: dialog作者: soybeanjs查看提交430be

重构

通过移除未使用的导入并优化焦点管理,简化对话框组件的结构

范围: dialog作者: soybeanjs查看提交5072c

重构

通过更新属性绑定并整合上下文导入,优化对话框组件的结构

范围: dialog作者: soybeanjs查看提交a4447

重构

重构对话框上下文和提供程序,移除遗留代码并增强对话框管理功能

范围: dialog作者: soybeanjs查看提交de4f2

新功能

为 DialogClose 组件添加 beforeClose 属性,用于控制关闭行为

范围: dialog作者: soybeanjs查看提交35bd1

新功能

更新 `beforeClose` 属性,允许在 `Dialog` 和 `AlertDialog` 组件中返回 `void`

范围: dialog作者: soybeanjs查看提交f295b

新功能

实现 useDialog 可组合函数,并集成 DialogProvider 以增强对话框管理功能

范围: dialog作者: soybeanjs查看提交2041c

重构

重构对话框上下文和提供程序,移除遗留代码并增强对话框管理功能

范围: dialog作者: soybeanjs查看提交de4f2

新功能

实现一个具备上下文管理和无障碍功能的对话框组件

范围: dialog作者: soybeanjs查看提交adfcc

新功能

引入 DialogContentImpl 组件,以改进焦点管理并实现可关闭层功能

范围: dialog作者: soybeanjs查看提交8861f

新功能

集成 useHideOthers 可组合函数,以提升无障碍体验和焦点管理

范围: dialog作者: soybeanjs查看提交1139a

新功能

添加一个对话框示例组件,展示 DialogRoot、DialogTrigger 及相关元素的使用方法

范围: dialog作者: soybeanjs查看提交e08d4

新功能

在对话框插槽中暴露 closeModal 函数,以增强控制能力

范围: dialog作者: soybeanjs查看提交2f005

新功能

引入 DialogThemeContext 以支持主题定制,并新增 DialogHeader 和 DialogFooter 组件

范围: dialog作者: soybeanjs查看提交f2b65

新功能

新增 Dialog 组件及其相关上下文、关闭操作和类型,以增强对话框功能

范围: dialog作者: soybeanjs查看提交8378a

新功能

添加多个对话框示例,包括默认、页脚、状态控制以及阻止关闭功能

范围: dialog作者: soybeanjs查看提交9bdd9

新功能

新增 SDialogPure 组件,支持自定义属性及变体

范围: dialog作者: soybeanjs查看提交5ff73

修复

调整关闭图标的位置,并在对话框内容中添加 `outline-none` 属性,以提升无障碍体验并保持视觉一致性

范围: dialog作者: soybeanjs查看提交40fc9

修复

移除未使用的主题上下文,并更新 DialogClose 类的绑定

范围: dialog作者: soybeanjs查看提交be3ae

优化

更新 DialogClose 组件以使用主题上下文,并将 closeIcon 重命名为 closable

范围: dialog作者: soybeanjs查看提交82210

重构

更新对话框组件,使其在可关闭层和焦点范围属性上使用 v-bind

范围: dialog作者: soybeanjs查看提交ceba2

重构

将 closeModal 替换为 onOpenChange,以改进对话框状态管理

范围: dialog作者: soybeanjs查看提交430be

重构

通过移除未使用的导入并优化焦点管理,简化对话框组件的结构

范围: dialog作者: soybeanjs查看提交5072c

重构

通过更新属性绑定并整合上下文导入,优化对话框组件的结构

范围: dialog作者: soybeanjs查看提交a4447