import axios from 'axios';
import Toast from "zarm/lib/toast"
import "zarm/lib/toast/style/css"
let appId = "sdjhb-jdhoo-f265-djbhfj-iui"
let stayTime = 3000
axios.defaults.timeout = 10000;
axios.defaults.withCredentials = true;
axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8';
var CancelToken = axios.CancelToken;
let sources = []
let removeSource = (config) => {
for (let source in sources) {
if (sources[source].umet === config.url + '&' + config.method) {
sources[source].cancel("取消请求")
sources.splice(source, 1)
}
}
}
axios.interceptors.request.use(config => {
removeSource(config)
config.cancelToken = new CancelToken((c) => {
sources.push({ umet: config.url + '&' + config.method, cancel: c })
})
return config;
}, error => {
return Promise.reject(error)
}
)
axios.interceptors.response.use(config => {
if (config.data.statusCode >= 3000) {
Toast.show({ content: config.data.msg, stayTime })
}
removeSource(config.config)
return config.data;
}, error => {
if (!error.response) return
switch (error.response.status) {
case 401:
if (window.location.hostname === "localhost") {
axios.post("/api/v1/login?client_name=form", {
"userName": "lixiaoyao4_vendor",
"password": 123456
})
} else {
window.location = error.response.headers.locationurl;
}
break;
case 403:
Toast.show({ content: "登录过期,请重新登录", stayTime })
if (window.location.hostname === "localhost") {
axios.post("/api/v1/login?client_name=form", {
"userName": "lixiaoyao4_vendor",
"password": 123456
})
} else {
window.location = error.response.headers.locationurl;
}
break;
case 404:
Toast.show({ content: "访问资源不存在", stayTime })
break;
default:
Toast.show({ content: error.response.data.message, stayTime })
}
return Promise.reject(error.response)
}
)
function get(url, params) {
return new Promise((resolve, reject) => {
axios.get(url, {
params: {
...params,
appId
},
}).then(res => {
resolve(res);
}).catch(err => {
reject(err.data)
})
});
}
function post(url, params) {
if (url.indexOf("?") === -1) {
url += `?appId=${appId}`
} else {
url += `&appId=${appId}`
}
return new Promise((resolve, reject) => {
axios.post(`${url}`, params)
.then(res => {
resolve(res);
})
.catch(err => {
reject(err)
})
});
}
export { post, get }