199 lines
6.6 KiB
JavaScript
199 lines
6.6 KiB
JavaScript
// 配置API接口地址
|
|
// var root = '/api/v1'
|
|
// var root = '/api/debugapi'
|
|
var root = "/api";
|
|
// var root = ''
|
|
// 引用axios
|
|
var axios = require("axios");
|
|
|
|
// import Notice from 'iview/src/components/notice';
|
|
import { Message } from "view-design";
|
|
|
|
// 自定义判断元素类型JS
|
|
function toType(obj) {
|
|
return {}.toString
|
|
.call(obj)
|
|
.match(/\s([a-zA-Z]+)/)[1]
|
|
.toLowerCase();
|
|
}
|
|
// 参数过滤函数
|
|
function filterNull(o) {
|
|
for (var key in o) {
|
|
if (o[key] === null) {
|
|
delete o[key];
|
|
}
|
|
if (toType(o[key]) === "string") {
|
|
o[key] = o[key].trim();
|
|
} else if (toType(o[key]) === "object") {
|
|
o[key] = filterNull(o[key]);
|
|
} else if (toType(o[key]) === "array") {
|
|
o[key] = filterNull(o[key]);
|
|
}
|
|
}
|
|
return o;
|
|
}
|
|
/*
|
|
接口处理函数
|
|
这个函数每个项目都是不一样的,我现在调整的是适用于
|
|
https://cnodejs.org/api/v1 的接口,如果是其他接口
|
|
需要根据接口的参数进行调整。参考说明文档地址:
|
|
https://cnodejs.org/topic/5378720ed6e2d16149fa16bd
|
|
主要是,不同的接口的成功标识和失败提示是不一致的。
|
|
另外,不同的项目的处理方法也是不一致的,这里出错就是简单的alert
|
|
*/
|
|
|
|
function apiAxios(method, url, params, success, failure) {
|
|
let conentTypeIsJosn = false;
|
|
if (params && typeof params != "string") {
|
|
params = filterNull(params);
|
|
} else conentTypeIsJosn = true;
|
|
|
|
// if (!window.location.origin) {
|
|
// window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
|
|
// }
|
|
// let redirectUrl=window.location.origin + window.location.hash.replace('#','/xiaoxi/#');
|
|
|
|
// console.log(window.location);
|
|
|
|
axios({
|
|
method: method,
|
|
url: url,
|
|
data: method === "POST" || method === "PUT" ? params : null,
|
|
params: method === "GET" || method === "DELETE" ? params : null,
|
|
baseURL: root,
|
|
withCredentials: true,
|
|
crossDomain: true,
|
|
transformRequest: [
|
|
function (data) {
|
|
// Do whatever you want to transform the data
|
|
if (conentTypeIsJosn) return data;
|
|
let ret = "";
|
|
for (let it in data) {
|
|
ret += encodeURIComponent(it) + "=" + encodeURIComponent(data[it]) + "&";
|
|
}
|
|
return ret;
|
|
},
|
|
],
|
|
headers: {
|
|
// 'Content-Type': 'application/x-www-form-urlencoded',
|
|
"Content-Type": conentTypeIsJosn ? "application/json" : "application/x-www-form-urlencoded",
|
|
// bschapirequest: 1,
|
|
yschapirequest:1,
|
|
yschreferer: strToHexCharCode(window.location.href),
|
|
},
|
|
})
|
|
.then(function (res) {
|
|
let response = res.data;
|
|
if (response.code == 302) {
|
|
window.location.href = response.urlToRedirectTo;
|
|
return;
|
|
} else if (response.code == 0) {
|
|
if (success) {
|
|
success(response);
|
|
}
|
|
}else if (response.code == 4) {
|
|
Message.error(response.msg); //错误处理
|
|
} else {
|
|
if (failure) {
|
|
failure(response);
|
|
} else {
|
|
if (response.data == 2) {
|
|
Message.error(response.msg); //错误处理
|
|
setTimeout(() => {
|
|
location.reload();
|
|
}, 1000);
|
|
} else {
|
|
Message.info(response.msg); //错误处理
|
|
}
|
|
}
|
|
}
|
|
})
|
|
.catch(function (err) {
|
|
let res = err.response;
|
|
console.error(res || err);
|
|
if (res) {
|
|
Message.destroy();
|
|
clearTimeout(tiemObj);
|
|
if (res.data.msg) {
|
|
Message.error(res.data.msg); //错误处理
|
|
} else {
|
|
Message.error("网络请求出错"); //错误处理
|
|
}
|
|
return;
|
|
}
|
|
});
|
|
}
|
|
|
|
//字符串的16进制表达
|
|
function strToHexCharCode(_str) {
|
|
if (_str === "") return "";
|
|
var hexCharCode = [];
|
|
for (var i = 0; i < _str.length; i++) {
|
|
var str = _str.charCodeAt(i).toString(16);
|
|
if (_str.length == 1) str += "0" + _str;
|
|
hexCharCode.push(str);
|
|
}
|
|
return hexCharCode.join("");
|
|
}
|
|
|
|
let requestCount = 0,
|
|
tiemObj;
|
|
// http request 拦截器
|
|
axios.interceptors.request.use(config => {
|
|
requestCount++;
|
|
if (requestCount == 1) {
|
|
tiemObj = setTimeout(() => {
|
|
Message.loading({ content: "加载中...", duration: 0 });
|
|
}, 800);
|
|
}
|
|
// if (localStorage.getItem("currentRole"))
|
|
// config.headers["currentRole"] = localStorage.getItem("currentRole");
|
|
if (localStorage.getItem("currentRole")) {
|
|
let currentRole = localStorage.getItem("currentRole");
|
|
config.headers["currentrole"] = currentRole;
|
|
let { schId, roleId, userId, childId } = JSON.parse(decodeURIComponent(currentRole));
|
|
// config.headers["schoolId"] = schId;
|
|
// config.headers["userId"] = userId;
|
|
// config.headers["roleId"] = roleId;
|
|
if (roleId == 3) {
|
|
config.headers["userId"] = childId;
|
|
}
|
|
sessionStorage.setItem("userId",userId);
|
|
}
|
|
if(sessionStorage.getItem("uType")){
|
|
config.headers["uType"] = sessionStorage.getItem("uType");
|
|
}
|
|
return config;
|
|
});
|
|
|
|
// http response 拦截器
|
|
axios.interceptors.response.use(response => {
|
|
requestCount--;
|
|
if (requestCount === 0) {
|
|
setTimeout(() => {
|
|
Message.destroy();
|
|
}, 1500);
|
|
clearTimeout(tiemObj);
|
|
}
|
|
return response;
|
|
});
|
|
// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
|
|
// axios.defaults.headers.post['Content-Type'] = 'application/json; charset=utf-8';
|
|
// axios.defaults.withCredentials = true
|
|
|
|
// 返回在vue模板中的调用接口
|
|
export default {
|
|
get: function (url, params, success, failure) {
|
|
return apiAxios("GET", url, params, success, failure);
|
|
},
|
|
post: function (url, params, success, failure) {
|
|
return apiAxios("POST", url, params, success, failure);
|
|
},
|
|
put: function (url, params, success, failure) {
|
|
return apiAxios("PUT", url, params, success, failure);
|
|
},
|
|
delete: function (url, params, success, failure) {
|
|
return apiAxios("DELETE", url, params, success, failure);
|
|
},
|
|
};
|