美文网首页
ElementUI MessageBox 防止多次弹框

ElementUI MessageBox 防止多次弹框

作者: 草帽lufei | 来源:发表于2021-06-16 17:42 被阅读0次

    项目使用 axios 拦截器进行接口响应判断处理,通过判断返回的 code 验证用户 token 是否过期,或者 token 无效, 使用
    Element MessageBox 弹框提示。

    又因为项目中有个地方需要定时请求服务,获取对应的数据,结果导致在用户在其他设备上登录后(Token无效了),出现定时请求每一次请求拦截器都创建一个 MessageBox 的情况。

    解决方式

    通过一个变量来标记 MessageBox 状态,如果点击 关闭 , 去登录取消 按钮操作,标记此 MessageBox 已经关闭,否则不创建 MessageBox 询问框。

    代码如下
    ...
    
    let messageBoxFlag = 0 // 默认 MessageBox 未打开
    // axios 响应拦截
    service.interceptors.response.use(
      async response => {
        const res = response.data
        // 208:未登录,Token过期,Token无效,需要登录
        if (res.code === 208) {
          if (messageBoxFlag === 0) {
            messageBoxFlag = 1 // 修改标记,打开 MessageBox
            MessageBox.confirm('系统检测到您的账号长时间未操作或账号在其他设备登录, 是否重新登录?', '警告', {
              confirmButtonText: '去登录',
              cancelButtonText: '取消',
              type: 'error'
            }).then(() => {
              messageBoxFlag = 0  // 修改标记
              window.location = window.location.origin
            }).catch(() => {
              messageBoxFlag = 0  // 修改标记
            })
          }
        } else {
          return res
        }
      },
      error => {
        Message({
          message: error.message,
          type: 'error',
          duration: 5 * 1000
        })
        return Promise.reject(error)
      }
    )
    
    ...
    

    Element Message 消息框内置了 close 函数,因此这里不能通过调用 close 的方式解决问题。

    参考链接

    https://element.eleme.cn/#/zh-CN/component/message-box

    https://element.eleme.cn/#/zh-CN/component/message

    相关文章

      网友评论

          本文标题:ElementUI MessageBox 防止多次弹框

          本文链接:https://www.haomeiwen.com/subject/kvrfyltx.html