阅读量:0
目录
前言
由于需要在登录时,附上一些用户说明书的弹窗
对于ElMessageBox的基本知识详细了解
可通过官网了解基本的语法知识ElMessageBox官网基本知识
1. 基本知识
Element Plus 是一个基于 Vue 3 的组件库,其中包括各种类型的弹窗组件,用于在网页上显示信息或与用户进行交互
主要的弹窗组件包括 ElMessageBox.alert、ElMessageBox.prompt 和 ElMessageBox.confirm 等
ElMessageBox.prompt
用于显示带有输入框的对话框
用于需要用户输入信息的场景
import { ElMessageBox } from 'element-plus' ElMessageBox.prompt( '请输入你的邮箱', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', } ).then(({ value }) => { console.log('用户输入的邮箱:', value) }).catch(() => { console.log('取消输入') })
ElMessageBox.alert
用于显示带有确认按钮的对话框
用于告知用户某些信息
import { ElMessageBox } from 'element-plus' ElMessageBox.alert( '这是一段内容', '标题', { confirmButtonText: '确定', callback: action => { console.log(action) } } )
ElMessageBox.confirm
用于显示带有确认和取消按钮的对话框
用于需要用户确认或取消某些操作的场景
import { ElMessageBox } from 'element-plus' ElMessageBox.confirm( '此操作将永久删除该文件, 是否继续?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning', } ).then(() => { console.log('确认') }).catch(() => { console.log('取消') })
对于上述基本参数
参数 | 描述 |
---|---|
title | 对话框的标题 |
message | 对话框的消息内容,可以是字符串或 HTML |
type | 消息类型,如 success, info, warning, error |
iconClass | 自定义图标的类名 |
customClass | 对话框自定义类名 |
showClose | 是否显示右上角关闭按钮,默认为 true |
closeOnClickModal | 是否可以通过点击遮罩层关闭对话框,默认为 true |
closeOnPressEscape | 是否可以通过按下 Esc 键关闭对话框,默认为 true |
showCancelButton | 是否显示取消按钮,默认为 false |
cancelButtonText | 取消按钮的文本内容 |
confirmButtonText | 确认按钮的文本内容 |
cancelButtonClass | 自定义取消按钮的类名 |
confirmButtonClass | 自定义确认按钮的类名 |
beforeClose | 关闭前的回调函数,可以用于阻止对话框的关闭 |
callback | 对话框关闭时的回调函数 |
inputPlaceholder | 输入框的占位符(仅用于 prompt) |
inputValue | 输入框的初始值(仅用于 prompt) |
inputType | 输入框的类型(仅用于 prompt) |
inputPattern | 输入框的校验正则表达式(仅用于 prompt) |
inputValidator | 输入框的校验函数(仅用于 prompt) |
inputErrorMessage | 输入框校验失败时的错误提示(仅用于 prompt) |
2. Demo
对应的Demo示例:
ElMessageBox.prompt
import { ElMessageBox } from 'element-plus' const showPrompt = () => { ElMessageBox.prompt( '请输入你的名字', '输入框', { confirmButtonText: '确定', cancelButtonText: '取消', inputPlaceholder: '名字', showClose: false, closeOnClickModal: false, closeOnPressEscape: false, } ).then(({ value }) => { console.log('输入的名字:', value) }).catch(() => { console.log('已取消') }) }
ElMessageBox.alert
import { ElMessageBox } from 'element-plus' const showAlert = () => { ElMessageBox.alert( '操作成功', '提示', { confirmButtonText: '确定', type: 'success', showClose: false, closeOnClickModal: false, closeOnPressEscape: false, } ).then(() => { console.log('已确认') }) }
ElMessageBox.confirm
import { ElMessageBox } from 'element-plus' const showConfirm = () => { ElMessageBox.confirm( '是否确认删除此项?', '删除确认', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning', showClose: false, closeOnClickModal: false, closeOnPressEscape: false, beforeClose: (action, instance, done) => { if (action === 'confirm') { // 执行一些操作 done() } else { done() } } } ).then(() => { console.log('已确认') }).catch(() => { console.log('已取消') }) }
如果需要自定义的样式,可通过如下:
ElMessageBox.confirm( '内容', '标题', { customClass: 'my-custom-class', confirmButtonText: '确认', cancelButtonText: '取消', } )
css如下:
.my-custom-class .el-message-box__btns { justify-content: center; } .my-custom-class .el-button--primary { width: 100%; margin: 0; }
3. 实战
const handleLogin = async (params) => { loginLoading.value = true try { await getTenantId() const data = await validForm() if (!data) { return } loginData.loginForm.captchaVerification = params.captchaVerification const res = await LoginApi.login(loginData.loginForm) if (!res) { return } loading.value = ElLoading.service({ lock: true, text: '正在加载系统中...', background: 'rgba(0, 0, 0, 0.7)' }) if (loginData.loginForm.rememberMe) { authUtil.setLoginForm(loginData.loginForm) } else { authUtil.removeLoginForm() } authUtil.setToken(res) if (!redirect.value) { redirect.value = '/' } // 判断是否为SSO登录 if (redirect.value.indexOf('sso') !== -1) { window.location.href = window.location.href.replace('/login?redirect=', '') } else { push({ path: redirect.value || permissionStore.addRouters[0].path }) } } finally { loginLoading.value = false loading.value.close() // 登录成功后显示弹窗提示 await ElMessageBox.confirm( `<div> <p>尊敬的客户:<br><br> 您好!xxxx前认真阅读以下须知:<br><br> 1xxxxxx<br><br> <input type="checkbox" id="agree-checkbox" /> <label for="agree-checkbox">我已认真阅读并知悉以上须知</label> </p> </div>`, 'xxx须知', { confirmButtonText: '同意', showClose: false, // 禁止关闭 showCancelButton: false, // 隐藏右上角的关闭按钮 closeOnClickModal: false, // 禁止点击遮罩层关闭 closeOnPressEscape: false, // 禁止按下 Esc 键关闭 dangerouslyUseHTMLString: true, customClass: 'full-width-button', // 添加自定义类名 beforeClose: (action, instance, done) => { if (action === 'confirm' && !document.getElementById('agree-checkbox').checked) { instance.confirmButtonLoading = false return ElMessageBox.alert('请勾选“我已认真阅读并知悉以上须知”以继续', '提示', { confirmButtonText: '确定', type: 'warning' }) } done() } } ); } } // 添加样式以使按钮占据整个宽度 const style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = ` .el-message-box.full-width-button .el-message-box__btns { display: flex; justify-content: center; } .el-message-box.full-width-button .el-button--primary { width: 100%; margin: 0; } `; document.head.appendChild(style);
总体截图如下:
下半部分的截图如下:
4. 模版
针对上述应用的需求,可以附实战的Demo
import { ElMessage, ElMessageBox, ElNotification } from 'element-plus' import { useI18n } from './useI18n' export const useMessage = () => { const { t } = useI18n() return { // 消息提示 info(content: string) { ElMessage.info(content) }, // 错误消息 error(content: string) { ElMessage.error(content) }, // 成功消息 success(content: string) { ElMessage.success(content) }, // 警告消息 warning(content: string) { ElMessage.warning(content) }, // 弹出提示 alert(content: string) { ElMessageBox.alert(content, t('common.confirmTitle')) }, // 错误提示 alertError(content: string) { ElMessageBox.alert(content, t('common.confirmTitle'), { type: 'error' }) }, // 成功提示 alertSuccess(content: string) { ElMessageBox.alert(content, t('common.confirmTitle'), { type: 'success' }) }, // 警告提示 alertWarning(content: string) { ElMessageBox.alert(content, t('common.confirmTitle'), { type: 'warning' }) }, // 通知提示 notify(content: string) { ElNotification.info(content) }, // 错误通知 notifyError(content: string) { ElNotification.error(content) }, // 成功通知 notifySuccess(content: string) { ElNotification.success(content) }, // 警告通知 notifyWarning(content: string) { ElNotification.warning(content) }, // 确认窗体 confirm(content: string, tip?: string) { return ElMessageBox.confirm(content, tip ? tip : t('common.confirmTitle'), { confirmButtonText: t('common.ok'), cancelButtonText: t('common.cancel'), type: 'warning' }) }, // 删除窗体 delConfirm(content?: string, tip?: string) { return ElMessageBox.confirm( content ? content : t('common.delMessage'), tip ? tip : t('common.confirmTitle'), { confirmButtonText: t('common.ok'), cancelButtonText: t('common.cancel'), type: 'warning' } ) }, // 导出窗体 exportConfirm(content?: string, tip?: string) { return ElMessageBox.confirm( content ? content : t('common.exportMessage'), tip ? tip : t('common.confirmTitle'), { confirmButtonText: t('common.ok'), cancelButtonText: t('common.cancel'), type: 'warning' } ) }, // 提交内容 prompt(content: string, tip: string) { return ElMessageBox.prompt(content, tip, { confirmButtonText: t('common.ok'), cancelButtonText: t('common.cancel'), type: 'warning' }) } } }