UNPKG

lixin-web

Version:

vue and bootstrap

66 lines (58 loc) 1.87 kB
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') ? "服务器错误,请联系客服!" : "网络错误,请刷新页面!"); }); };