Skip to content

xtf-dialog

组件说明

xtf-dialog 是对话框组件,用于展示信息、确认操作和收集输入。支持多种类型(默认/信息/成功/警告/危险/输入/选择/操作列表)、预设图标、自定义按钮、输入框、选项列表和命令式调用,适用于操作确认、表单输入和操作菜单等场景。


基础用法

1. 确认对话框

通过 titlemessage 设置标题和内容:

vue
<template>
  <view>
    <xtf-button label="确认删除" theme="danger" @click="showDialog = true" />
    <xtf-dialog
      v-model:show="showDialog"
      title="删除确认"
      message="确定要删除这条记录吗?此操作不可撤销。"
      theme="danger"
      @confirm="showDialog = false"
      @cancel="showDialog = false"
    />
  </view>
</template>

<script>
export default {
  data() {
    return {
      showDialog: false
    }
  }
}
</script>

2. 预设类型

通过 type 使用预设样式:

vue
<template>
  <view style="display: flex; gap: 12rpx; flex-wrap: wrap">
    <xtf-button label="信息" theme="info" @click="openPreset('info')" />
    <xtf-button label="成功" theme="success" @click="openPreset('success')" />
    <xtf-button label="警告" theme="warning" @click="openPreset('warning')" />
    <xtf-button label="危险" theme="danger" @click="openPreset('danger')" />
    <xtf-dialog
      v-model:show="presetVisible"
      :type="presetType"
      title="提示"
      message="这是一条预设类型的对话框消息。"
    />
  </view>
</template>

<script>
export default {
  data() {
    return {
      presetVisible: false,
      presetType: 'info'
    }
  },
  methods: {
    openPreset(type) {
      this.presetType = type
      this.presetVisible = true
    }
  }
}
</script>

3. 输入对话框

通过 type="prompt" 启用输入框:

vue
<template>
  <view>
    <xtf-button label="输入备注" @click="showInput = true" />
    <xtf-dialog
      v-model:show="showInput"
      type="prompt"
      title="备注"
      input-placeholder="请输入备注内容"
      :input-maxlength="200"
      @confirm="showInput = false"
    />
  </view>
</template>

<script>
export default {
  data() {
    return {
      showInput: false
    }
  }
}
</script>

4. 操作列表

通过 type="actions" 显示操作列表:

vue
<template>
  <view>
    <xtf-button label="更多操作" @click="showActions = true" />
    <xtf-dialog
      v-model:show="showActions"
      type="actions"
      title="操作"
      :actions="actionList"
      @action="onAction"
    />
  </view>
</template>

<script>
export default {
  data() {
    return {
      showActions: false,
      actionList: [
        { label: '编辑', icon: 'edit', theme: 'primary' },
        { label: '复制', icon: 'copy', theme: 'primary' },
        { label: '删除', icon: 'delete', theme: 'danger', danger: true }
      ]
    }
  },
  methods: {
    onAction({ action }) {
      console.log('选择操作:', action.label)
      this.showActions = false
    }
  }
}
</script>

全部属性

属性类型默认值作用描述适用范围
showBooleanfalse是否显示显示控制
titleString''标题标题
subtitleString''副标题副标题
typeString'default'类型:'default' / 'info' / 'success' / 'warning' / 'danger' / 'prompt' / 'textarea' / 'select' / 'multi-select' / 'actions'类型
messageString''消息内容内容
contentString''内容(同 message)内容
descriptionString''描述文字描述
confirmTextString''确认按钮文字按钮
cancelTextString''取消按钮文字按钮
showCancelBooleantrue是否显示取消按钮按钮
serviceBooleanfalse使用 dialogManager 的服务模式服务模式
preset / iconTheme / iconColor / align / showCloseIconString / Boolean'' / false图标、对齐和关闭图标控制展示
closeOnPressEscape / beforeClose / lockScrollBoolean | String / Function / Boolean | Stringfalse / null / true关闭拦截及滚动锁定关闭行为
confirmLoading / cancelLoading / footerNote / footerStyleBoolean / Stringfalse / ''操作按钮与底部显示控制底部
optionValue / optionValues / optionRequired / optionSearchable多类型 / Array / Boolean'' / [] / false单选、多选及检索控制选项
inputType / inputLabel / inputRows / inputRequired / inputAutoFocus多类型'text' / '' / 4 / false / false内置输入框配置输入
optionSearchPlaceholder / optionHelperString'' / ''选项搜索框占位文字、搜索框下方辅助说明选项
overlayBooleantrue是否显示遮罩遮罩
overlayStyle / overlayBlurString | Object | Array / String | Number'' / 0遮罩自定义样式与背景模糊强度,数字按 rpx 处理模糊遮罩
closeOnClickOverlayBoolean | Stringfalse点击遮罩是否关闭关闭行为
asyncCloseBooleanfalse是否异步关闭异步关闭
draggable / fullscreenBooleanfalse / false添加对应样式状态:可拖拽样式标记、全屏对话框布局
loadingBooleanfalse是否加载中加载状态
themeString'primary'主题色主题
avatarString''头像 URL头像
iconString''图标名称图标
actionsArray[]操作按钮列表操作列表
showInputBooleanfalse是否显示输入框输入框
optionsArray[]选项列表选项
inputValueString | Number''输入框值输入值
inputPlaceholderString''输入框占位符占位符
inputMaxlengthString | Number140最大输入长度长度限制
widthString | Number'620rpx'对话框宽度宽度
radiusString | Number32圆角大小圆角
buttonDirectionString'horizontal'按钮方向按钮方向
titleStyle / bodyStyle / footerCustomStyleString | Object | Array''标题区、内容区、底部操作区自定义样式对话框区域样式
zIndex / durationString | Number'' / ''透传给内部弹层的层级和动画时长弹层
customClassString''自定义类名样式覆盖
customStyleString | Object''自定义样式动态样式覆盖

事件

事件名称触发时机回调参数参数说明
confirm点击确认按钮时触发(detail)确认详情
cancel点击取消按钮时触发--
action点击操作列表项或自定义 actions 按钮时触发(payload)actionindexvalueoptionValue(仅操作列表)、typepreset;自定义按钮还含原始 event
option-select选择选项时触发(option)选中的选项
input-change输入值变化时触发(value)输入值
open打开时触发--
close关闭时触发--
update:show显示状态变化时触发(show)显示状态
update:inputValue / update:optionValue / update:optionValues输入或选择变化(value)对应双向绑定值
opened / closed / click-overlay / blocked-close弹层生命周期(payload) 或无参数透传 popup 生命周期
confirm-detail / cancel-detail确认或取消时(payload)sourcevalue、选项和值列表

插槽

title 替换标题,默认插槽替换正文,footer 替换整个底部。

vue
<template>
  <xtf-dialog v-model:show="show" title="删除" @confirm-detail="confirm">
    <template #footer><xtf-button label="关闭" @click="show = false" /></template>
    <text>自定义正文</text></xtf-dialog>

</template>
<script>
export default {
  data() {
    return { show: true }
  },
  methods: {
    confirm(payload) {
      console.log(payload.value)
    }
  }
}
</script>

主题说明

  • 弹出层使用 xtf-popup 组件
  • 按钮使用 xtf-button 组件
  • 输入框使用 xtf-input 组件
  • 图标使用 xtf-icon 组件
  • 文字使用 xtf-text 组件

如需全局调整主题,请在 xtf-config-provider 或主题配置中覆盖相关 CSS 变量。

MIT Licensed