Skip to content

MessageBox 消息弹框

模拟系统原生体验的消息对话框,集成了 YH-UI 标志性的亚克力视觉语言、GPU 加速拖拽交互以及严谨的业务生命周期控制。

基础用法

提供了 alertconfirmprompt 三种最常用的交互模式。

消息提示
确认对话框
提交内容

不同状态

用来显示「成功、警告、消息、错误」类的操作反馈。

成功状态
警告状态
错误状态
信息状态

自定义内容

message 属性支持传入 HTML 字符串或 VNode。

VNode 渲染
使用 HTML 片段

警告

dangerouslyUseHTMLString 属性虽然方便,但容易导致 XSS 攻击。请确保 message 的内容是可信的,永远不要将用户提交的内容赋值给 message 属性。

视觉与布局

YH-UI 旗舰级特性,提供磨砂玻璃质感、拖拽定位以及全方位的中轴对齐。

居中布局
可拖拽

异步关闭拦截

通过 beforeClose 钩子可以精准拦截退出动作。常用于处理异步接口逻辑,并由组件自动维护确认按钮的加载状态。

异步拦截

加载状态

通过 confirmButtonLoading 属性或在 beforeClose 钩子中手动操作 instance.confirmLoading = true,可以直接在确认按钮上显示加载动画。组件会自动处理按钮的禁用逻辑。

异步加载演示

全局默认配置

如果应用中大部分弹窗具有一致的视觉偏好(如全量开启亚克力特效),可以通过 setDefaults 一键启用全局配置,避免重复传参。

全局配置演示

在 Nuxt 中使用

YhMessageBox 已全面适配 Nuxt 3/4。作为一个指令式调用的组件,它在 SSR(服务端渲染)时会自动检测运行环境,确保弹窗逻辑仅在客户端执行。

Nuxt 中使用演示

注意事项

  • 全自动导入:在 Nuxt 项目中,YhMessageBox 及其别名函数会自动映射,无需手动显式 import
  • SSR 安全:函数内部已封装 process.client 检测,可放心在生命周期或方法中调用。
  • 💡 样式同步:组件样式会通过 Nuxt 插件自动注入,确保首屏激活后视觉风格的连续性。

生产实践

在 Nuxt 生态中,推荐在 defineNuxtComponentsetup 逻辑中使用 YhMessageBox 进行业务拦截,配合 useFetch 的拦截器可以实现极佳的全局错误提示体验。

全局方法

如果你完整引入了 YH-UI,它会为 app.config.globalProperties 添加如下全局方法:$msgbox$alert$confirm$prompt。 因此在 Vue 实例中可以采用本页面中的方式来调用 MessageBox

  • $msgbox(options)
  • $alert(message, title, options)$alert(message, options)
  • $confirm(message, title, options)$confirm(message, options)
  • $prompt(message, title, options)$prompt(message, options)

应用程序上下文继承

现在 MessageBox 接受构造器的 context 作为第二个 (如果你正在使用消息框变量的话) 参数。 这个参数允许你将当前应用的上下文注入到消息中,这将允许你继承应用程序的所有属性。

ts
import { getCurrentInstance } from 'vue'
import { YhMessageBox } from '@yh-ui/yh-ui'

// 在你的 setup 方法中
const { appContext } = getCurrentInstance()!
// 你可以像这样传递参数:
YhMessageBox({}, appContext)
// 或者正在使用不同的调用方式
YhMessageBox.alert('Hello world!', 'Title', {}, appContext)

API

方法

方法名说明参数类型返回值
alert弹出消息提示框(message, title?, options?, appContext?)Promise<void>
confirm弹出操作确认框(message, title?, options?, appContext?)Promise<MessageBoxAction>
prompt弹出内容输入框(message, title?, options?, appContext?)Promise<{ value, action }>
setDefaults修改全局默认配置项(defaults: MessageBoxOptions)

MessageBoxOptions

参数说明类型默认值
title标题string提示
message内容string | VNode | (() => VNode)
type弹窗类型'alert' | 'confirm' | 'prompt'
iconType状态图标类型'success' | 'warning' | 'info' | 'error'
icon自定义图标string | Component | VNode
width弹窗宽度string | number420
dangerouslyUseHTMLString是否将 message 渲染为 HTMLbooleanfalse
showClose是否显示右上角关闭按钮booleantrue
showConfirmButton是否显示确认按钮booleantrue
showCancelButton是否显示取消按钮booleantrue
confirmButtonText确认按钮文案string确定
cancelButtonText取消按钮文案string取消
closeOnClickModal点击遮罩层是否关闭booleantrue
closeOnPressEscape按下 ESC 是否关闭booleantrue
lockScroll是否锁定滚动条booleantrue
glass是否开启亚克力玻璃模式booleanfalse
center是否将内容居中排列booleanfalse
roundButton是否采用圆角按钮booleanfalse
draggable是否支持拖拽弹窗booleanfalse
draggableBoundary是否防止拖拽超出可视区域booleantrue
customClass自定义类名string
inputPlaceholder输入框占位符 (仅 prompt)string
inputValue输入框初始值 (仅 prompt)string
inputPattern输入框校验正则表达式 (仅 prompt)RegExp
inputValidator输入框自定义校验函数 (仅 prompt)(value: string) => boolean | string
inputErrorMessage校验错误提示 (仅 prompt)string
beforeClose关闭前的钩子(action, instance, done) => void
callback关闭后的回调(action, instance) => void
appContext应用上下文 (Vue Context)AppContext
autofocus是否在打开时自动获取焦点booleantrue
appendTo设置组件的根元素string | HTMLElementdocument.body
confirmButtonLoading确认按钮是否显示加载中状态booleanfalse
cancelButtonLoading取消按钮是否显示加载中状态booleanfalse
loadingIcon自定义加载图标string | Component | VNode

MessageBoxInstance (instance in beforeClose)

属性/方法说明类型
confirmLoading确认按钮的加载状态boolean
cancelLoading取消按钮的加载状态boolean
open打开弹窗(options: MessageBoxOptions) => void
close关闭弹窗() => void

主题变量 (CSS Variables)

变量名说明默认值
--yh-scrollbar-width当前系统的滚动条宽度 (自动注入)
--yh-bg-color-overlay弹窗背景色var(--yh-bg-color-overlay)
--yh-text-color-primary标题颜色var(--yh-text-color-primary)

Released under the MIT License.