code码报错优先使用当前接口code报错信息 不使用错误拦截报错信息

拦截报错信息

 let ignoreCode = url.searchParams.get("ignoreCode");
    if(ignoreCode == response.data.code) return Promise.resolve(response.data);

这样使用

   request(
        "post",
        "cms/parkingOrder/editParkingOrderById?ignoreCode=5002",
        data
      )

这里就可以单独使用自定义code 报错码

 .catch((err) => {
          this.$myLoading.hide();
          this.isLoading = false;
          if (err.response.data.code == "5002") {
            this.getOrderStatus(false);
          } else if (err.response.data.code == 40013) {
            // 人工确认车牌是否正确
            this.plateShow = true;
            this.txnId = err.response.data.msg.split(",")[1];
          }
        });
import axios from 'axios';
import { getCookie, delCookie } from '../utils/cookies'
import { getStore } from '../utils/storage'
import { remove } from '../utils/storage'
import { Message } from 'view-design'
import vueI18n from '../utils/i18n'
import { baseUrl, codeUrl ,isLocal} from '../config/config'
import {MessageBox} from 'element-ui';
import { Toast } from "vant";
// 定义全局默认配置
// axios.defaults.headers.post['content-Type'] = 'application/json;charset=UTF-8'
//过滤请求
axios.interceptors.request.use(config => {

  switch (config.url) {
      //这里是超时10秒,因为后台是5分钟超时,前端超时要比后台长一点,这样不会遗漏接收到后台返回的消息。
    case baseUrl + 'cms/async/getData': config.timeout = 5 * 60 * 1000+10000;
      break;
    case baseUrl + 'cms/async/getMonitorData': config.timeout = 5 * 60 * 1000+10000;
      break;
    default:
      config.timeout = 5 * 60 * 1000;
  }
  // 权限接口需要设置请求头
  config.headers['Accept-Language'] = getStore('lang') || 'en-US'
  if (getCookie('token')) {
    config.headers['HPT-TOKEN'] = getCookie('token')
  }
  return config
}, error => {
  return Promise.reject(error)
})
// 响应请求拦截
axios.interceptors.response.use(
  response => {
    let url = new URL(response.config.url.replace("#", ""));
    let ignoreCode = url.searchParams.get("ignoreCode");
    if(ignoreCode == response.data.code) return Promise.resolve(response.data);
    if(response.data.code != 200 && response.request.responseURL.indexOf("version/getNewVersion")>0) return Promise.resolve(response.data)
    //服务端定义的响应code码为200时请求成功 
    if (response.data.code === 200) {
      response.data = decodeData(response.data);
      //使用Promise.resolve 正常响应
      return Promise.resolve(response.data)
    } else if (response.data.code == '2013' || response.data.code == '2014') {
      // 用户未登录
      delCookie("token")
      delCookie('hpt-account')
      delCookie('hpt-park') 
      delCookie('user')
      remove()
      // window.localStorage.clear();
      location.reload();
    }else if (response.data.code == '4003') {
      return Promise.resolve(response.data);
    } else if (response.data.code == '30001') {
      // 系统过期3s后退出系统
      Message.error(vueI18n.t(`tag.${code}`))
      setTimeout(() => {
        delCookie("token");
        delCookie('hpt-account');
        delCookie('hpt-park')
        delCookie('user')
        remove()
        // window.localStorage.clear();
        location.reload();
      }, 3000)
    } else {
      const code = response.data.code;
      if (code != 40013) {
        Message.error(vueI18n.t(`tag.${code}`));
      }
      return Promise.resolve(response.data);
    }
    // return Promise.resolve(response.data);
  },
  err => {
     if (err && err.response) {
      let url = new URL(err.response.request.responseURL.replace("#", ""));
      let ignoreCode = url.searchParams.get("ignoreCode");
      if(ignoreCode == err.response.data.code) return Promise.reject(err);
      if(err.response.request.responseURL.indexOf("version/getNewVersion")>0) return Promise.reject(err)
      // if(err.response.status != 401){
      //   let url = new URL(response.config.url.replace("#", ""));
      //   let isShowToast = url.searchParams.get("isShowToast");
      //   if(!isShowToast) return;
      // }
      // 处理不同错误情况
      switch (err.response.status) {
        case 404:
          Message.error(vueI18n.t(`tag.${err.response.status}`))
          break;
        case 403:
          if(err.response.data.code == '31301'){
            MessageBox('该车已进场,暂不支持取消订单'
            , 'Tips', {
              confirmButtonText: 'confirm',
              cancelButtonText: 'cancel',
              type: 'warning'
            })
          }
          break;
          case 400:
            if(err.response.data.code == '40012'){
              Message.error(vueI18n.t(`tag.40012`))
            }else if(err.response.data.code == '40013'||err.response.data.code == '40001'){
              return Promise.reject(err)
            }else{
              Message.error(err.response.status)
            }
            break;
        case 401:
          Message.error(vueI18n.t(`tag.${err.response.status}`))
          remove()
          delCookie("token")
          delCookie('hpt-account')
          delCookie('hpt-park')
          delCookie('user')
          location.reload()
          break;
        case 406:

        if(err.response.data.code == '31301'){
            MessageBox('该车位有车主预约至'+err.response.data.msg+'暂不支持解绑'
            , 'Tips', {
              confirmButtonText: 'confirm',
              cancelButtonText: 'cancel',
              type: 'warning'
            })
        }else if(err.response.data.code == '31302'){
          MessageBox('与该车位绑定的用户的有效期截止为'+err.response.data.msg+'暂不支持解绑'
          , 'Tips', {
            confirmButtonText: 'confirm',
            cancelButtonText: 'cancel',
            type: 'warning'
            
          })
        }else if(err.response.data.code == '51003'){
          MessageBox(vueI18n.t(`tag.${err.response.data.code}`).replace("carNum",err.response.data.msg) 
          , 'Tips', {
            confirmButtonText: 'confirm',
            type: 'warning',
            customClass:'width:300px'
          })
        }else if( err.response.data.code == '400'){
          Message.error( err.response.data.msg)

        }else if( err.response.data.code == '1007'){
            Message.error(vueI18n.t('tag.1007', err.response.data.msg, { days: err.response.data.msg }))

          }else if(err.response.data.code == '2010'){
            Message.error(vueI18n.t(`tag.2010`))
          }else if(err.response.data.code == '2004'){
            Message.error(vueI18n.t(`tag.2004`))
          }else if(err.response.data.code == '3101'){
            Message.error(vueI18n.t(`tag.3101`))
          }else if(err.response.data.code == '4206'){
            Message.error(vueI18n.t(`${err.response.data.msg}`))
          }else if(err.response.data.code == '409'){
            Message.error( vueI18n.t(`${err.response.data.msg}`))
        // Message.error(vueI18n.t(`${err.response.data.msg}`))
          }else if(err.response.data.code == '30101'||err.response.data.code == '52003'){
            Toast(vueI18n.t(`${err.response.data.msg}`));
          }else{
            Message.error(vueI18n.t(`tag.${err.response.data.code}`))
          }
          break;
        case 500:
          Message.error(vueI18n.t(`tag.${err.response.status}`))
          break;
        default:
          Message.error(vueI18n.t(`tag.${err.response.status}`))
      }

    } else {
      if (err.message.includes('300000ms')) {
      }else{
        Message.error(vueI18n.t(`tag.serveError`))
      }

    }
    // if (err.message.includes('timeout')) {


    // }

    // 异常抛出
    return Promise.reject(err)
  }
)

function decodeData(data){
  if(typeof data === 'string'){
    try{
      data = decodeURIComponent(data);
    }catch(err){
    }
  }else if(typeof data === 'object'){
    for (let i in data) {
      data[i] = decodeData(data[i]);
    }
  }
  return data;
}

// 二次封装axios
export default function request(method, url, params,onUploadProgress) {
  // RequestBody
  url = url.startsWith('http') ? url :  (baseUrl + url);
  method = method.toLocaleLowerCase();
  let formData = new FormData();
  for (let i in params) {
    // encodeURIComponent 转义参数里面的特殊字符
    if((typeof params[i] === 'string') && (params[i].indexOf("&") >=0)){
      var reg = new RegExp( "&", "g" );
      params[i] = params[i].replace(reg,encodeURIComponent("&"));
    }
    if (params[i] === null || params[i] === ''||params[i] === undefined){
      delete params[i]
    }else{
      formData.append(i, params[i])
    }
  }
  //封装RESTful API的各种请求方式
  if (method === 'post') {
    return axios.post(url, formData) //axios的post 默认转化为json格式
  } else if (method === 'postjson') {
    return axios.post(url, params,{headers: {'Content-Type': 'application/json'}})
  }else if (method === 'get') {
    return axios.get(url, {
      params: params
    })
  } else if (method === 'delete') {
    return axios.delete(url, {
      params: params
    })
  }else if(method === 'putjson'){
    // 提交JSON数据方式
    return axios.put(url, params,{headers: {'Content-Type': 'application/json'}})
  } else if (method === 'put') {
    return axios.put(url, formData)
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值