vue3中二次封装elementPlus消息弹窗为hooks(好用)

封装如下,直接复制粘贴即可(快来优化你的代码吧~) 

注意:里面加入了国际化,不需要的话去掉即可,直接传入提示文字

import { ElMessage, ElMessageBox, ElNotification } from 'element-plus'
import { useI18n } from './useI18n'
export const useMessage = () => {
  const { t } = useI18n()

  // 基础消息方法
  const baseMessage = {
    info: (content: string) => ElMessage.info(content),
    error: (content: string) => ElMessage.error(content),
    success: (content: string) => ElMessage.success(content),
    warning: (content: string) => ElMessage.warning(content)
  }

  // 基础弹窗方法
  const baseAlert = (content: string, type: 'info' | 'error' | 'success' | 'warning' = 'info') => {
    return ElMessageBox.alert(content, t('common.confirmTitle'), {
      dangerouslyUseHTMLString: type === 'info',
      type
    })
  }

  // 基础通知方法
  const baseNotify = {
    info: (content: string) => ElNotification.info(content),
    error: (content: string) => ElNotification.error(content),
    success: (content: string) => ElNotification.success(content),
    warning: (content: string) => ElNotification.warning(content)
  }

  // 基础确认框方法
  const baseConfirm = (content: string, tip?: string, type: 'warning' | 'info' = 'warning') => {
    return ElMessageBox.confirm(content, tip || t('common.confirmTitle'), {
      confirmButtonText: t('common.ok'),
      cancelButtonText: t('common.cancel'),
      type
    })
  }

  // 特定业务确认框方法
  const businessConfirm = (type: string, content?: string, tip?: string) => {
    const messageMap = {
      del: t('common.delMessage'),
      release: t('common.releaseMessage'),
      stop: t('common.stopMessage'),
      start: t('common.startMessage'),
      offline: t('common.offlineMessage'),
      uninstall: t('common.uninstallMessage'),
      export: t('common.exportMessage')
    }
    return baseConfirm(content || messageMap[type], tip)
  }

  return {
    ...baseMessage,
    ...baseNotify,
    // 基础弹窗快捷方法
    alert: (content: string) => baseAlert(content),
    alertError: (content: string) => baseAlert(content, 'error'),
    alertSuccess: (content: string) => baseAlert(content, 'success'), 
    alertWarning: (content: string) => baseAlert(content, 'warning'),

    // 基础确认框快捷方法
    confirm: baseConfirm,
    // 删除确认框
    delConfirm: (content?: string, tip?: string) => businessConfirm('del', content, tip),
    // 发布确认框
    releaseConfirm: (content?: string, tip?: string) => businessConfirm('release', content, tip),
    // 停止确认框
    stopConfirm: (content?: string, tip?: string) => businessConfirm('stop', content, tip),
    // 启动确认框
    startConfirm: (content?: string, tip?: string) => businessConfirm('start', content, tip),
    // 下线确认框
    offlineConfirm: (content?: string, tip?: string) => businessConfirm('offline', content, tip),
    // 卸载确认框
    uninstallConfirm: (content?: string, tip?: string) => businessConfirm('uninstall', content, tip),
    // 导出确认框
    exportConfirm: (content?: string, tip?: string) => businessConfirm('export', content, tip),

    // 输入框弹窗方法
    prompt: (content: string, tip: string) => {
      return ElMessageBox.prompt(content, tip, {
        confirmButtonText: t('common.ok'),
        cancelButtonText: t('common.cancel'),
        type: 'warning'
      })
    }
  }
}

使用:

const message = useMessage() // 消息弹窗

例一:
/** 调用操作成功提示框 */
const submitForm = async () => {
  try {
    message.success(t('common.updateSuccess'))
  } finally {
  }
}

例二:
/** 调用删除二次确认框 */
const removeVariable = async (type, index) => {
  try {
    await message.delConfirm()
    updateElementExtensions()
  } catch {}
}

封装后使用非常方便!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

suoh's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值