双端兼容 · 桌面 + 移动
Dialog 对话框
移动端:居中模态让位于底部动作面板与全屏表单页,参见 移动端 · 反馈与浮层。
模态对话框,在保留页面上下文的前提下承载临时交互:表单填报、操作确认、内容详情等。内置焦点圈禁(Tab 循环锁定在对话框内)、ESC 关闭、遮罩点击关闭、计数式滚动锁定与 zIndex 自动递增;v-model 控制显隐,before-close 可统一拦截所有关闭途径(右上角按钮 / ESC / 遮罩 / 程序化 handleClose)。
基础用法
v-model 绑定显隐;title 设置标题(同时作为 aria-label),width 控制宽度,数字按 px、字符串原样输出(默认 520px,且最大不超过视口减 32px)。footer 通过插槽传入操作按钮。
垂直居中与顶部偏移
对话框默认距视口顶部 15vh,top 可调整偏移;align-center 让对话框在视口内水平垂直双居中(设置后 top 不生效),适合确认类小弹窗。
全屏与自定义头部
fullscreen 铺满整个视口(忽略 width 与 top);#header 插槽替换默认标题区,右上角关闭按钮独立于插槽渲染,不会被覆盖。
拦截关闭(before-close)
before-close 接收 done 回调:不调用 done 则本次关闭被阻止。右上角关闭按钮、ESC、点击遮罩触发的关闭都会先经过它,可在此做异步校验或二次确认。
禁用遮罩与 ESC 关闭
表单类对话框不希望误触丢失内容:close-on-click-modal 与 close-on-press-escape 置为 false 后,只能通过显式按钮关闭;show-close 置为 false 还可隐藏右上角关闭按钮。
API
Dialog Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| v-model | 显示控制(源 prop 为 modelValue) | boolean | false |
| title | 标题,同时作为 aria-label 兜底 | string | |
| width | 宽度,数字按 px,最大不超过视口减 32px | string | number | 520px |
| fullscreen | 全屏铺满(忽略 width / top) | boolean | false |
| top | 距视口顶部偏移,align-center 时失效 | string | 15vh |
| modal | 遮罩模式,false 时点击遮罩不关闭 | boolean | true |
| close-on-click-modal | 点击遮罩关闭 | boolean | true |
| close-on-press-escape | 按 ESC 关闭 | boolean | true |
| show-close | 右上角关闭按钮 | boolean | true |
| destroy-on-close | 关闭后销毁默认插槽内容,下次打开重新渲染 | boolean | false |
| append-to-body | Teleport 到 body,避免父级层叠上下文裁剪 | boolean | true |
| lock-scroll | 打开期间锁定页面滚动(计数式,多层叠加安全) | boolean | true |
| center | 头部与底部操作区水平居中 | boolean | false |
| align-center | 对话框在视口水平垂直双居中 | boolean | false |
| glass | 面板磨砂玻璃质感;缺省跟随全局(EbConfigProvider 的 glass) | boolean | — |
| blur | 面板磨砂模糊半径(px),仅磨砂生效时应用;缺省跟随 --eb-glass-blur 令牌(14px) | number | string | — |
| before-close | 关闭前拦截,不调用入参 done 则阻止关闭 | (done) => void | — |
Slots
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| default | 对话框内容,destroy-on-close 时随关闭销毁 | — | — |
| header | 替换标题区(关闭按钮独立于插槽) | — | — |
| footer | 底部操作区,未提供时不渲染 footer | — | — |
Events
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| update:modelValue | 显隐受控更新 | (v: boolean) => void | — |
| open | 打开时立即触发 | () => void | — |
| opened | 打开动画结束后触发 | () => void | — |
| close | 开始关闭时触发(走完 before-close 拦截流程后) | () => void | — |
| closed | 关闭动画结束后触发 | () => void | — |
Exposes
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| visible | 当前显示状态 | boolean | — |
| handleClose | 程序化关闭(同样经过 before-close 拦截流程) | () => void | — |
| ref | 对话框根 DOM 元素(焦点圈禁容器) | HTMLElement | — |