/* eslint-disable */ import axios from "axios"; import Cookies from "js-cookie"; import router from "@/router"; import qs from "qs"; import { clearLoginInfo } from "@/utils"; import isPlainObject from "lodash/isPlainObject"; import Vue from "vue"; import { Loading } from "element-ui"; //引入Loading服务 // 默认超时时间60s axios.defaults.timeout = 1000*60*20; let timer; let loading; //请求时间超过300ms 提示加载 function startLoading() { if (timer) return; timer = setTimeout(() => { loading = Loading.service({ lock: true, //是否锁定 text: "正在加载……", //加载中需要显示的文字 background: "rgba(0,0,0,.7)", //背景颜色 }); }, 300); } //结束加载动画 function endLoading() { if (timer) { clearTimeout(timer); } if (loading) { loading.close(); } } /** * 请求拦截 */ axios.interceptors.request.use( (config) => { config.headers["Accept-Language"] = localStorage.getItem("language") || "zh-CN"; config.headers["token"] = localStorage.getItem("token") || ""; config.headers["Authorization"] = localStorage.getItem("token") || ""; // 默认参数 var defaults = {}; // 防止缓存,GET请求默认带_t参数 if (config.method === "get") { config.params = { ...config.params, ...{ _t: new Date().getTime() }, }; } if (isPlainObject(config.params)) { config.params = { ...defaults, ...config.params, }; } if (isPlainObject(config.data)) { config.data = { ...defaults, ...config.data, }; if ( /^application\/x-www-form-urlencoded/.test( config.headers["content-type"] ) ) { config.data = qs.stringify(config.data); } } return config; }, (error) => { return Promise.reject(error); } ); /** * 响应拦截 */ axios.interceptors.response.use( (response) => { const code = [10007, 401, 10001, 10005]; if (code.includes(response.data.code)) { // debugger; clearLoginInfo(); router.replace({ name: "login" }); return Promise.reject(response.data.msg); } return response; }, (error) => { console.error(error); return Promise.reject(error); } ); const post = (url, params, headers) => { return new Promise((reslove, reject) => { axios .post(processUrl(url), params, headers) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); }); }; export const requestPost = async (url = "", params = {}, headers = {}) => { const ret = await post(url, params, headers); console.log(url, ret); // if (ret.status === 200) { // var data = res.data // if (data.code == 0) { // //业务成功 // if (typeof cb_su === 'function') { // cb_su(data.data, data.msg) // } // } else { // //业务失败 // if (typeof cb_err === 'function') cb_err(data.msg, data.data) // } // } else { // if (typeof cb_err === 'function') cb_err(res) // } }; /* * 1、后台请求成功均返回(业务上的异常也属于请求成功) res.status=200的响应码 * 2、res.data:后台自定义的响应体,包括: * 1)res.data.sysresultcode:请求结果,success业务成功,fail业务失败 * 2)res.data.rspMsg:返回消息,用于进行消息提示 * 3)res.data.data:返回数据,用于获取请求的数据 * 3、异步请求,以cb_su(data.data, data.rspMsg),返回业务层 */ export default { // 并发请求 all(gets, cb) { if (gets && gets.length > 0) { let functions = gets.map((get) => { return axios.get(processUrl(get.url), { params: get.params, }); }); axios.all(functions).then( axios.spread((..._results) => { let results = _results.map((_result) => { return _result.data.data; }); cb(results); }) ); } }, get(url, params, cb_su, cb_err, headers) { var p = { params: params, }; if (headers && JSON.stringify(headers) != "{}") { var h = { headers: headers, }; p = { ...p, ...h, }; } url = url + "?r=" + new Date().getTime(); //时间戳作为随机码,防止IE从缓存获取数据 axios .get(processUrl(url), p) .then((res) => { if (res) { if (res.status === 200) { var data = res.data; if (data.code == 0) { //业务成功 if (typeof cb_su === "function") { cb_su(data.data, data.msg); } } else { //业务失败 if (typeof cb_err === "function") cb_err(data.msg, data.data); } } else { if (typeof cb_err === "function") cb_err(res); } } else { if (typeof cb_err === "function") cb_err(res); } }) .catch((err) => { if (typeof (cb_err === "function")) { cb_err(err); } }); }, put(url, data, cb_su, cb_err) { axios .put(processUrl(url), data) .then((res) => { if (res) { if (res.status === 200) { var data = res.data; if (data.sysresultcode === "success") { //业务成功 if (typeof cb_su === "function") { cb_su(data.data, data.rspMsg); } } else if (data.sysresultcode === "fail") { //业务失败 if (typeof cb_err === "function") cb_err(data.rspMsg, data.data); } } else { if (typeof cb_err === "function") cb_err(res); } } else { if (typeof cb_err === "function") cb_err(res); } }) .catch((err) => { if (typeof cb_err === "function") { cb_err(err); } }); }, post(url, data, cb_su, cb_err, headers) { var h = {}; if (headers && JSON.stringify(headers) != "{}") { h = { headers, }; } //var data = qs.stringify(paramas); axios .post(processUrl(url), data, h) .then((res) => { if (res) { if (res.status === 200) { var data = res.data; if (data.code == 0) { //业务成功 if (typeof cb_su === "function") { cb_su(data.data, data.msg); } } else { //业务失败 if (typeof cb_err === "function") cb_err(data.msg, data.data); } } else { if (typeof cb_err === "function") cb_err(res); } } else { if (typeof cb_err === "function") cb_err(res); } }) .catch((err) => { if (typeof cb_err === "function") { cb_err(err); } }); }, post2(url, data, cb_su, cb_err, headers) { var h = {}; if (headers && JSON.stringify(headers) != "{}") { h = { headers, }; } //var data = qs.stringify(paramas); axios .post(processUrl(url), data) .then((res) => { if (res) { if (res.status === 200) { var data = res.data; cb_su(data, data.msg); } else { if (typeof cb_err === "function") cb_err(data.msg, data); } } else { if (typeof cb_err === "function") cb_err(data.msg, data); } }) .catch((err) => { if (typeof cb_err === "function") { cb_err(err); } }); }, delete(url, params, cb_su, cb_err) { axios .delete(processUrl(url), { params: params, }) .then((res) => { if (res) { if (res.status === 200) { var data = res.data; if (data.sysresultcode === "success") { //业务成功 if (typeof cb_su === "function") { cb_su(data.data, data.rspMsg); } } else if (data.sysresultcode === "fail") { //业务失败 if (typeof cb_err === "function") cb_err(data.rspMsg, data.data); } } else { if (typeof cb_err === "function") cb_err(res); } } else { if (typeof cb_err === "function") cb_err(res); } }) .catch((err) => { if (typeof cb_err === "function") { cb_err(err); } }); }, //导出文件,包括excel,word等 exportFile(url, params, cb_su, cb_err, headers) { var h = {}; if (headers && JSON.stringify(headers) != "{}") { h = headers; } var errorMsg = "操作失败"; url = url + "?r=" + new Date().getTime(); //时间戳作为随机码,防止IE从缓存获取数据 axios({ method: "get", url: processUrl(url), params: params, headers: h, //{ tenantCode: "GDYXB" }, responseType: "blob", }) .then((res) => { if (res) { if (res.status === 200) { var data = res.data; //直接返回blob if (data) { //业务成功 if (typeof cb_su === "function") { cb_su(data, "操作成功"); } } else { //业务失败 if (typeof cb_err === "function") cb_err(errorMsg); } } else { if (typeof cb_err === "function") cb_err(errorMsg); } } else { if (typeof cb_err === "function") cb_err(errorMsg); } }) .catch((err) => { if (typeof (cb_err === "function")) { cb_err(errorMsg); } }); }, //导出文件,包括excel,word等 exportFilePost(url, params, cb_su, cb_err) { //var data = qs.stringify(paramas); // axios // .post(processUrl(url), data) axios({ method: "post", url: processUrl(url), data: params, responseType: "blob", }) .then((res) => { if (res) { if (res.status === 200) { var data = res.data; //直接返回blob // if (data.code == 0) { //业务成功 if (typeof cb_su === "function") { cb_su(data); } else { //业务失败 if (typeof cb_err === "function") cb_err(errorMsg); } // } else { // if (typeof cb_err === 'function') cb_err(errorMsg) } } else { if (typeof cb_err === "function") cb_err(errorMsg); } }) .catch((err) => { if (typeof cb_err === "function") { cb_err(err); } }); }, //上传文件 importFilePut(url, fileFormData, cb_su, cb_err) { var errorMsg = "操作失败"; let requestConfig = { headers: { "Content-Type": "multipart/form-data", // Authorization: auth.loadTokenType() + ' ' + auth.loadAccessToken(), }, }; Vue.http .put(processUrl(url), fileFormData, requestConfig) .then((res) => { if (res && res.status === 200) { var data = res.body; //直接返回blob if (data.sysresultcode === "fail") { //业务失败 if (typeof cb_err === "function") cb_err(data.rspMsg); } else if (data.sysresultcode === "success") { //业务成功 if (typeof cb_su === "function") { cb_su(data, "操作成功"); } } else { if (typeof cb_err === "function") cb_err(errorMsg); } } else { if (typeof cb_err === "function") cb_err(errorMsg); } }) .catch((err) => { if (typeof (cb_err === "function")) { cb_err(errorMsg); } }); }, //上传文件 importFilePost(url, fileFormData, cb_su, cb_err) { var errorMsg = "操作失败"; let requestConfig = { headers: { "Content-Type": "multipart/form-data", // Authorization: auth.loadTokenType() + ' ' + auth.loadAccessToken(), }, }; Vue.http .post(processUrl(url), fileFormData, requestConfig) .then((res) => { if (res && res.status === 200) { var data = res.body; //直接返回blob if (data.sysresultcode === "fail") { //业务失败 if (typeof cb_err === "function") cb_err(data.rspMsg); } else if (data.sysresultcode === "success") { //业务成功 if (typeof cb_su === "function") { cb_su(data, "操作成功"); } } else { if (typeof cb_err === "function") cb_err(errorMsg); } } else { if (typeof cb_err === "function") cb_err(errorMsg); } }) .catch((err) => { if (typeof (cb_err === "function")) { cb_err(errorMsg); } }); }, //登录获取token/刷新token tokenPost(url, paramas, cb_su, cb_err) { var data = qs.stringify(paramas); axios .post(processUrl(url), data) .then((res) => { if (res) { if (res.status === 200) { var data = res.data; if (data) { if (typeof cb_su === "function") { cb_su(data); } } else { if (typeof cb_err === "function") cb_err("登录验证失败"); } } else { if (typeof cb_err === "function") cb_err(res); } } else { if (typeof cb_err === "function") cb_err(res); } }) .catch((err) => { var rspMsg = "登录失败,请重试!"; if ( err && err.response && err.response.status === 401 && err.response.data && err.response.data.error === "unauthorized" ) { // 用户名不存在时: 状态码401 // Response Body: // { // "error": "unauthorized", // "error_description": null // } rspMsg = err.response.data.error_description || "用户名不存在"; } else if ( err && err.response && err.response.status === 400 && err.response.data && err.response.data.error === "invalid_grant" ) { // 用户名存在,密码错误时:状态码400 // { // "error": "invalid_grant", // "error_description": "Bad credentials" // } rspMsg = "用户名或密码输入错误"; } if (typeof cb_err === "function") { cb_err(rspMsg); } }); }, //通过接口传递的token进行验证登录 lyx 20191210 async interfacetokenPost(url, paramas, cb_su, cb_err) { var data = qs.stringify(paramas); await axios .post(processUrl(url), data) .then((res) => { if (res) { if (res.status === 200) { var data = res.data; if (data) { if (typeof cb_su === "function") { cb_su(data); return true; } } else { if (typeof cb_err === "function") { cb_err("接口验证失败"); return false; } } } else { if (typeof cb_err === "function") { cb_err(res); return false; } } } else { if (typeof cb_err === "function") { cb_err(res); return false; } } }) .catch((err) => { var rspMsg = "接口验证失败,请重试!"; if ( err && err.response && err.response.status === 401 && err.response.data && err.response.data.error === "unauthorized" ) { rspMsg = "用户名不存在"; } else if ( err && err.response && err.response.status === 400 && err.response.data && err.response.data.error === "invalid_grant" ) { rspMsg = "用户名或密码输入错误"; } if (typeof cb_err === "function") { cb_err(rspMsg); return false; } }); }, }; // 添加服务器端URL function processUrl(url) { if (url.indexOf("http://") > -1 || url.indexOf("https://") > -1) { return url; } return process.env.VUE_APP_API_SERVER + url; }