> 技术文档 > 手滑误操作? vue + Element UI 封装二次确认框 | 附源码_elementui 气泡确认

手滑误操作? vue + Element UI 封装二次确认框 | 附源码_elementui 气泡确认

一诺最近在做后台管理系统时,遇到一个很常见但又容易被忽视的小问题:单选框切换时,用户一不小心点错,原有配置就没了,数据丢失,后悔也来不及。

你是不是也遇到过类似的场景?比如切换网络模式、切换支付方式、切换重要设置……
有时候,用户只是想点点看,结果页面直接切换,之前填的内容全没了,体验很糟糕。

1. 解决思路

其实,最简单的办法就是——切换前弹个确认提示,问一句“你确定要切换吗?”

功能拆解

我们想要的效果很简单:

  • 用户切换单选框时,弹出确认气泡
  • 用户点“确定”才真的切换
  • 用户点“取消”就啥也不变
  • 最好还能自定义提示文案、按钮、气泡位置

如果每个页面都手写一遍,既麻烦又容易出错。有没有现成的轮子?

有!一诺基于 ElementUI 二次封装了一个【ConfirmRadioGroup】组件,专门解决这个问题。

先看效果,如果有启发,记得点赞收藏哈

手滑误操作? vue + Element UI 封装二次确认框 | 附源码_elementui 气泡确认

3. 组件介绍

ConfirmRadioGroup 是一个带确认提示的单选框组件,底层用的是 el-radio-group 和自研的气泡确认框。
它的特点:

  • 切换选项时自动弹出确认气泡,防止误操作
  • 支持自定义提示文案、按钮、图标、气泡位置
  • 可以指定哪些选项需要确认
  • 完全兼容原生单选框的用法,支持 v-model
  • 事件丰富,方便业务扩展

 

4. 基本用法

假如你有一个“支付方式”切换,选项有“支付宝”和“微信支付”。切换时需要用户确认。

 

手滑误操作? vue + Element UI 封装二次确认框 | 附源码_elementui 气泡确认

  支付宝 微信支付 import { ConfirmRadioGroup } from \'@/components\'export default { components: { ConfirmRadioGroup }, data() { return { payType: \'alipay\' } }, methods: { onChange(val) { // 这里才真正切换 console.log(\'支付方式切换为\', val) } }}

这里可以插入一张“支付方式切换弹窗”的截图
【截图3:支付方式切换弹窗】

5. 进阶玩法

5.1 只对部分选项弹窗

有时候,并不是所有切换都需要确认。比如只有切到“微信支付”才需要提示。

 

手滑误操作? vue + Element UI 封装二次确认框 | 附源码_elementui 气泡确认

 支付宝 微信支付

5.2 自定义按钮和图标

你可以自定义按钮文案、颜色、图标样式,让提示更贴合业务。

 激活 停用

5.3 气泡位置随心选

气泡默认在下方(bottom),也可以放到上、左、右。

 

手滑误操作? vue + Element UI 封装二次确认框 | 附源码_elementui 气泡确认

 左侧 右侧

5.4 彻底关闭确认功能

有些场景你不想弹窗,直接加个 :enable-confirm=\"false\" 就行。

 模式1 模式2

 

6.API事件说明

Props

参数

说明

类型

默认值

value / v-model

绑定值

string / number / boolean

\'\'

disabled

是否禁用

boolean

false

size

尺寸

string

\'medium\'

text-color

激活时的文本颜色

string

\'#ffffff\'

fill

激活时的填充色和边框色

string

\'#409EFF\'

enable-confirm

是否启用确认提示

boolean

true

confirm-title

确认提示标题

string

\'切换选项后将清空当前相关配置,确认继续操作吗?\'

confirm-button-text

确认按钮文本

string

\'确定\'

cancel-button-text

取消按钮文本

string

\'取消\'

confirm-button-type

确认按钮类型

string

\'primary\'

confirm-icon-class

确认图标的 class 类名

string

\'sec-icon-warning\'

confirm-icon-color

确认图标颜色

string

\'#E6A23C\'

confirm-icon-style

确认图标的自定义样式

object

{}

placement

气泡位置

string

\'top\'

confirm-values

需要确认的值数组

array

[]

confirm-on-same

相同值时是否也显示确认

boolean

false

Events

事件名

说明

参数

change

选项改变时触发

(value)

confirm

确认切换时触发

({ oldValue, newValue })

cancel

取消切换时触发

({ oldValue, cancelValue })

7. 常见问题

  • Q:和原生 el-radio-group 用法一样吗?
    A:完全一样,支持 v-model、插槽、所有属性。
  • Q:可以只对某些选项弹窗吗?
    A:可以,配置 confirm-values 即可。
  • Q:会不会影响表单校验?
    A:不会,和普通单选框一样。
  • Q:支持响应式吗?
    A:支持,窗口大小变化会自动适配。

如果有用,记得点赞收藏哈