Skip to content

Dialog

Popup dialog, commonly used for message prompts, operation confirmation and input collection, supports functional calling.

Tip

Global calling solution see wot-starter, can be used in route guards, request interceptors and other scenarios.

Component Type

Alert Dialog

Alert only displays confirm button, commonly used for message notification.

html
<wd-dialog />
<wd-button @click="openAlert">Open Alert</wd-button>
ts
import { useDialog } from '@/uni_modules/wot-ui'

const dialog = useDialog()

const openAlert = () => {
  dialog.alert({
    title: 'Tip',
    msg: 'Operation successful'
  })
}

Confirm Dialog

Confirm returns user operation result through Promise, then corresponds to confirm, catch corresponds to cancel.

html
<wd-dialog />
<wd-button @click="openConfirm">Open Confirm</wd-button>
ts
import { useDialog } from '@/uni_modules/wot-ui'

const dialog = useDialog()

const openConfirm = () => {
  dialog
    .confirm({
      title: 'Tip',
      msg: 'Confirm to execute this operation?'
    })
    .then(() => {
      console.log('Clicked confirm')
    })
    .catch(() => {
      console.log('Clicked cancel')
    })
}

Prompt Dialog

Prompt displays input box, can be used to collect text and perform validation.

html
<wd-dialog />
<wd-button @click="openPrompt">Open Prompt</wd-button>
ts
import { useDialog } from '@/uni_modules/wot-ui'

const dialog = useDialog()

const openPrompt = () => {
  dialog
    .prompt({
      title: 'Please enter email',
      inputPattern: /.+@.+\..+/i,
      inputError: 'Email format is incorrect'
    })
    .then((res) => {
      console.log(res.value)
    })
}

Component State

Pre-confirm Validation

beforeConfirm receives current input value, supports returning boolean or Promise<boolean>, returning false will intercept close.

html
<wd-dialog />
<wd-button @click="openBeforeConfirm">Pre-confirm validation</wd-button>
ts
import { useDialog, useToast } from '@/uni_modules/wot-ui'

const dialog = useDialog()
const toast = useToast()

const openBeforeConfirm = () => {
  dialog.confirm({
    title: 'Delete Confirmation',
    msg: 'Confirm to delete this record?',
    beforeConfirm: () => {
      toast.loading('Deleting...')
      return new Promise((resolve) => {
        setTimeout(() => {
          toast.close()
          resolve(true)
        }, 1500)
      })
    }
  })
}

Input Validation

Prompt supports both regex validation input-pattern and function validation input-validate.

html
<wd-dialog />
<wd-button @click="openPromptValidate">Input validation</wd-button>
ts
import { useDialog } from '@/uni_modules/wot-ui'

const dialog = useDialog()

const openPromptValidate = () => {
  dialog.prompt({
    title: 'Please enter phone number',
    inputProps: {
      type: 'tel',
      placeholder: 'Please enter 11-digit phone number'
    },
    inputValidate: (value) => /^1[3-9]\d{9}$/.test(String(value)),
    inputError: 'Phone number format is incorrect'
  })
}

Component Variant

Style and Layout

Control dialog button style and arrangement through theme and action-layout.

html
<wd-dialog />
<wd-button @click="openTextTheme">Text style + vertical layout</wd-button>
ts
import { useDialog } from '@/uni_modules/wot-ui'

const dialog = useDialog()

const openTextTheme = () => {
  dialog.confirm({
    title: 'Version Update',
    msg: 'New version found, update now?',
    theme: 'text',
    actionLayout: 'vertical'
  })
}

Custom Action Buttons

Multiple buttons can be defined through actions. When actions and confirm-button-props / cancel-button-props are configured simultaneously, actions takes priority.

html
<wd-dialog />
<wd-button @click="openActions">Custom action buttons</wd-button>
ts
import { useDialog } from '@/uni_modules/wot-ui'

const dialog = useDialog()

const openActions = () => {
  dialog.show({
    title: 'Select Payment Method',
    actionLayout: 'vertical',
    actions: [
      { text: 'WeChat Pay', type: 'success', block: true },
      { text: 'Alipay', type: 'primary', block: true },
      { text: 'Cancel', block: true }
    ]
  })
}

Component Style

Icon and Header Image

Visual style can be configured through icon, icon-color, icon-props, header-image.

html
<wd-dialog />
<wd-button @click="openStyledDialog">Icon and header image</wd-button>
ts
import { useDialog } from '@/uni_modules/wot-ui'

const dialog = useDialog()

const openStyledDialog = () => {
  dialog.alert({
    title: 'Activity Notification',
    msg: 'Congratulations on getting exclusive benefits',
    icon: 'success',
    headerImage: 'https://example.com/banner.png'
  })
}

Custom Button Style

Button properties can be passed through confirm-button-props, cancel-button-props.

html
<wd-dialog />
<wd-button @click="openCustomButtons">Custom button style</wd-button>
ts
import { useDialog } from '@/uni_modules/wot-ui'

const dialog = useDialog()

const openCustomButtons = () => {
  dialog.confirm({
    title: 'Tip',
    msg: 'Continue?',
    confirmButtonProps: {
      type: 'success',
      customClass: 'custom-shadow'
    },
    cancelButtonProps: {
      type: 'danger',
      customClass: 'custom-shadow'
    }
  })
}

Special Style

Slot

Distinguish multiple instances through selector, and use useDialog(selector) to call specified dialog.

html
<wd-dialog selector="wd-dialog-slot">
  <wd-rate v-model="rate" />
</wd-dialog>
<wd-button @click="openSlotDialog">Open slot dialog</wd-button>
ts
import { ref } from 'vue'
import { useDialog } from '@/uni_modules/wot-ui'

const rate = ref(1)
const slotDialog = useDialog('wd-dialog-slot')

const openSlotDialog = () => {
  slotDialog.confirm({
    title: 'Please rate us'
  })
}

OpenType

confirm-button-props, cancel-button-props and actions support passing button open capability properties (such as openType) and corresponding event callbacks.

html
<wd-dialog />
<wd-button @click="openOpenTypeDialog">Get phone number</wd-button>
ts
import { useDialog } from '@/uni_modules/wot-ui'

const dialog = useDialog()

const openOpenTypeDialog = () => {
  dialog.confirm({
    title: 'Get phone number',
    confirmButtonProps: {
      text: 'Authorize to get',
      openType: 'getPhoneNumber',
      onGetphonenumber: (detail) => {
        console.log(detail)
      }
    }
  })
}

Methods

useDialog() returns the following methods:

Method NameDescriptionParametersReturn Value
showOpen dialogstring | DialogOptionsPromise<DialogResult>
alertOpen Alert dialogstring | DialogOptionsPromise<DialogResult>
confirmOpen Confirm dialogstring | DialogOptionsPromise<DialogResult>
promptOpen Prompt dialogstring | DialogOptionsPromise<DialogResult>
closeClose current dialog-void

Options

ParameterDescriptionTypeDefault Value
titleTitlestring''
msgMessage contentstring''
typeDialog type, optional values are alert, confirm, promptDialogType'alert'
themeButton style, optional values are button, textDialogTheme'button'
zIndexDialog z-indexnumber99
lazyRenderDialog content lazy renderbooleantrue
headerImageTop banner image addressstring-
iconIcon name. Optional values are success, info, warning, danger, can also pass custom icon namestring-
iconColorIcon colorstring-
iconPropsPass wd-icon propertiesPartial<IconProps>-
inputValuePrompt input box initial valuestring | number-
inputPropsPrompt mode wd-input propertiesPartial<InputProps>-
textareaPropsPrompt mode wd-textarea propertiesPartial<TextareaProps>-
inputPatternPrompt input regex validation ruleRegExp-
inputValidatePrompt input function validation rule, returns boolean or error message string(inputValue: string | number) => boolean | string-
inputErrorPrompt validation failure prompt textstring-
showErrWhether to show error messagebooleanfalse
actionLayoutAction button arrangement, optional values are horizontal, verticalDialogActionLayout'horizontal'
showCancelButtonWhether to show cancel buttonbooleanalert is false, confirm/prompt is true
confirmButtonTextConfirm button textstring-
cancelButtonTextCancel button textstring-
confirmButtonProps v1.5.0Confirm button advanced configuration, supports passing string, object or nullDialogBoxButtonOption{}
cancelButtonProps v1.5.0Cancel button advanced configuration, supports passing string, object or nullDialogBoxButtonOptionDerived from showCancelButton
actionsCustom action button array, takes priority over confirm/cancel buttons after configurationDialogAction[]-
closeOnClickModalWhether to support clicking mask to close (returns action as modal)booleanfalse
showCloseWhether to show top right close buttonbooleanfalse
beforeConfirmPre-confirm interception function, returns boolean or Promise<boolean>DialogBeforeConfirm-

Attributes

wd-dialog component instance supports the following attributes:

ParameterDescriptionTypeDefault Value
selectorSpecify unique identifier, used to distinguish multiple instances in pagestring''
root-portal v1.11.0Whether to detach from page document flow rendering, used to solve fixed invalidation problembooleanfalse
custom-classRoot node custom class namestring''
custom-styleRoot node custom stylestring''

Slots

NameDescriptionParameters
headerCustom header area-
imageCustom image area-
titleCustom title area{ icon, title, iconProps }
defaultCustom content area{ msg, type, inputValue, showErr, inputError }
actionsCustom action area{ confirm, cancel, close }

主题定制

CSS 变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 全局配置

名称默认值描述
--wot-dialog-bg$filled-oppo对话框背景色
--wot-dialog-width280px对话框宽度
--wot-dialog-radius$radius-large对话框圆角
--wot-dialog-body-padding$padding-super-loose $padding-super-loose 0对话框主体内边距
--wot-dialog-body-element-spacing$spacing-tight主体元素间距
--wot-dialog-body-element-spacing-large$spacing-extra-loose主体大间距
--wot-dialog-title-color$text-main标题文字颜色
--wot-dialog-title-font-size$typography-body-size-extra-large标题文字字号
--wot-dialog-title-line-height$typography-body-line--height-size-extra-large标题文字行高
--wot-dialog-title-font-weight$font-weight-medium标题文字字重
--wot-dialog-title-margin-bottom$spacing-tight标题底部外边距
--wot-dialog-content-color$text-secondary内容文字颜色
--wot-dialog-content-font-size$typography-body-size-main内容文字字号
--wot-dialog-content-line-height$typography-body-line--height-size-main内容文字行高
--wot-dialog-content-padding$spacing-loose内容区内边距
--wot-dialog-content-max-height340px内容区最大高度
--wot-dialog-content-input-bg$filled-bottom输入框背景色
--wot-dialog-content-input-error-color$danger-main输入错误文字颜色
--wot-dialog-content-input-font-size$typography-label-size-main输入错误文字字号
--wot-dialog-content-input-line-height$typography-label-line--height-size-main输入错误文字行高
--wot-dialog-content-input-padding-top$spacing-tight输入提示顶部内边距
--wot-dialog-scrollbar-color$border-main滚动条颜色
--wot-dialog-scrollbar-width$stroke-blod滚动条宽度
--wot-dialog-scrollbar-radius$radius-small滚动条圆角
--wot-dialog-primary-color$primary-6默认图标颜色
--wot-dialog-success-color$success-main成功图标颜色
--wot-dialog-warning-color$warning-main警告图标颜色
--wot-dialog-error-color$danger-main危险图标颜色
--wot-dialog-icon-size$n-48图标尺寸
--wot-dialog-icon-margin-bottom$spacing-tight图标底部外边距
--wot-dialog-close-icon-size$n-18关闭图标尺寸
--wot-dialog-close-icon-color$icon-secondary关闭图标颜色
--wot-dialog-close-icon-top$spacing-extra-loose关闭图标顶部偏移
--wot-dialog-close-icon-right$spacing-extra-loose关闭图标右侧偏移
--wot-dialog-actions-padding$padding-super-loose操作区内边距
--wot-dialog-actions-padding-vertical$padding-super-loose $padding-loose $padding-loose垂直操作区内边距
--wot-dialog-actions-spacing$spacing-loose操作按钮水平间距
--wot-dialog-actions-spacing-vertical$spacing-tight操作按钮垂直间距
--wot-dialog-actions-confirm-font-weight$font-weight-medium确认按钮字重
--wot-dialog-img-border-radius$radius-large图片圆角
--wot-dialog-action-text-border-color$border-main文本按钮边框颜色
--wot-dialog-action-text-button-padding$padding-loose $padding-extra-loose文本按钮内边距
--wot-dialog-action-text-border$stroke-light文本按钮边框宽度

Source Code

Documentation
Component

Released under the MIT License.

Released under the MIT License.