页面同一时间多条提示的问题优化 Notification、Message、element-ui

该文介绍了一个需求背景,即页面上不能同时出现多条错误提示,应限制为同一时间只显示一条。通过改造Message和Notification资源,检查是否存在活动提示,如果已有则不再显示新提示。代码示例展示了如何修改Message和Notification的方法,以及如何在项目中应用这些改变。此外,文中提醒如果项目中有其他提示资源,也需要类似处理,并建议进行多场景测试以确保功能正确。
摘要由CSDN通过智能技术生成

需求背景: 上面的人反馈页面经常一下报出多条错误提示;要求页面上同一时间只能出现一条提示信息;

实现说明

我们页面的提示信息一般都是两种: Message 和 Notification ;因此改造这两个资源就好了,即使用这两个资源弹提示信息前,先看下页面是否已经存在提示了,如果有就拜拜 不走后面逻辑,如果没有就弹出提示信息;然后项目内哪些地方引入了这两个资源 改为引入改造后的,具体见下方代码;
补充:若你的项目内还存在其他的提示信息资源,请参照Message、Notification一样再添加一套逻辑即可,若有疑问请及时咨询;

实现代码

主逻辑文件

代码位置: src\utils\unifiedTip.js ;可自行作出变动;

/*
 * @Author: chengsl
 * @Date: 2023-04-02 11:21:04
 * @LastEditors: chengsl
 * @LastEditTime: 2023-04-02 14:29:56
 * @Description: 需求描述: 页面同一时间只能出现一个错误提示
 */
import { Notification, Message } from 'element-ui'

let MyMessage = Message
let MyNotification = Notification

window.NOW_ACTIVE_TIP = false // 当前是否有提示框展示

/**
 * 是否有提示框展示
 * @returns {
 *  messageCount
 *  notificationCount
 * }
 */
function hasTip() {
  // let hasMessage  hasNotification
  const tipCount = {
    messageCount: document.querySelectorAll('.el-message').length, // 是否有 Message 类型的提示
    notificationCount: document.querySelectorAll('.el-notification').length // 是否有 Notification 类型的提示
  }
  window.NOW_ACTIVE_TIP = tipCount.messageCount !== 0 || tipCount.notificationCount !== 0
  console.log('👉👉👉进入判断是否有提示的逻辑 -- NOW_ACTIVE_TIP', window.NOW_ACTIVE_TIP)
  return tipCount
}

// Message 类型消息 原始方法
const OldMessage = MyMessage
const OldMessageSuccess = MyMessage['success']
const OldMessageWarning = MyMessage['warning']
const OldMessageInfo = MyMessage['info']
const OldMessageError = MyMessage['error']
// message 默认提示
MyMessage = function(options) {
  hasTip() // 检查是否已有提示
  if (window.NOW_ACTIVE_TIP) return
  else return OldMessage(options)
}
MyMessage['success'] = function(options) {
  hasTip() // 检查是否已有提示
  if (window.NOW_ACTIVE_TIP) return
  else return OldMessageSuccess(options)
}
MyMessage['warning'] = function(options) {
  hasTip() // 检查是否已有提示
  if (window.NOW_ACTIVE_TIP) return
  else return OldMessageWarning(options)
}
MyMessage['info'] = function(options) {
  hasTip() // 检查是否已有提示
  if (window.NOW_ACTIVE_TIP) return
  else return OldMessageInfo(options)
}
MyMessage['error'] = function(options) {
  hasTip() // 检查是否已有提示
  if (window.NOW_ACTIVE_TIP) return
  else return OldMessageError(options)
}

// Notification 类型消息 原始方法
const oldNotification = MyNotification
const OldNotificationSuccess = MyNotification['success']
const OldNotificationWarning = MyNotification['warning']
const OldNotificationInfo = MyNotification['info']
const OldNotificationError = MyNotification['error']
// notification 默认提示
MyNotification = function(options) {
  hasTip() // 检查是否已有提示
  if (window.NOW_ACTIVE_TIP) return
  else return oldNotification(options)
}
MyNotification['success'] = function(options) {
  hasTip() // 检查是否已有提示
  if (window.NOW_ACTIVE_TIP) return
  else return OldNotificationSuccess(options)
}
MyNotification['warning'] = function(options) {
  hasTip() // 检查是否已有提示
  if (window.NOW_ACTIVE_TIP) return
  else return OldNotificationWarning(options)
}
MyNotification['info'] = function(options) {
  hasTip() // 检查是否已有提示
  if (window.NOW_ACTIVE_TIP) return
  else return OldNotificationInfo(options)
}
MyNotification['error'] = function(options) {
  hasTip() // 检查是否已有提示
  if (window.NOW_ACTIVE_TIP) return
  else return OldNotificationError(options)
}

console.log('👉👉👉加载统一提示逻辑 完成')

export default {
  Message: MyMessage,
  Notification: MyNotification
}

其他逻辑

然后请搜索下 项目内哪些地方引入了Notification, Message;

import { Notification, Message } from 'element-ui'

改为

import unifiedTip from '@/utils/unifiedTip'// 全局统一提示
const { Notification, Message } = unifiedTip

自测

找项目内接口调用比较多的页面,看多接口报错后原本提示多条错误信息的,是否变为只提示一条错误信息了;
也可以自行写测试方法,多弹几个信息,看显示几个;

补充

写代码时可以参考下统一认证或电子病历项目;
望写完多找几个场景测几下;
如有其他更好的方案及时交流;
若有问题及时反馈;
GoodLuck;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

#老程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值