拦截报错信息
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)
}
}