/* 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 = 60000 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'] = Cookies.get('language') || 'zh-CN' config.headers['token'] = Cookies.get('token') || '' config.headers['Authorization'] = Cookies.get('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) => { if (response.data.code === 401 || response.data.code === 10001 || response.data.code === 10005) { // debugger; clearLoginInfo() localStorage.setItem('userType', 'work') let userType = localStorage.getItem("userType"); // if (userType === 'work'){ // router.replace({ name: 'loginWork' }) // }else { 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 }