lixin-web
Version:
vue and bootstrap
66 lines (58 loc) • 1.87 kB
JavaScript
import axios from "axios";
import URLSearchParams from "url-search-params";
import { error as swalErr } from "../plugins/sweetalert2";
import { preloadImage } from "./imgTool";
import { store } from "./store";
import { isIE, isEdge } from "./UA";
const ajaxCallback = (
response,
callback,
{ timer = 2000, url, errCb, showError = true } = {}
) => {
const { error, code, message, data } = response;
if (error) {
if (code == "0-1" || code == "0-4") {
store.set("isLogin", false);
return swalErr(message, () =>
preloadImage("login_bg").then(() => location.href = "/")
);
}
if (code == "0-2") {
//repeat login
return (location.href = "/index.html");
} else if (showError) {
return swalErr(message, [
() => (url == "login" || data || errCb) && callback(response),
timer
]);
} else {
return errCb && callback(response);
}
}
callback(data);
};
const instance = axios.create({
timeout: 5000,
baseURL: "/api/"
});
instance.defaults.headers.post["Content-Type"] =
"application/x-www-form-urlencoded";
export const ajax = (url, _data = {}, cb = () => {}, cbCfg) => {
let data = _data;
typeof _data === "function" && ((data = {}), (cb = _data));
let params = new URLSearchParams();
Object.keys(data).forEach(i => params.append(i, data[i]));
if (isIE || isEdge) {
params = params.toString();
}
return instance
.post(url, params)
.then(res => {
ajaxCallback(res.data, cb, { ...cbCfg, url });
})
.catch(err => {
console.error("axios catch", url, err);
if(isDevEnv) return swalErr(`${url}太慢!`,false)
swalErr(err.toString().includes('5000') ? "服务器错误,请联系客服!" : "网络错误,请刷新页面!");
});
};