UNPKG

atm-request

Version:

基于axios的前端异步请求,提供便捷API以供调用

329 lines (286 loc) 10.3 kB
import axios from 'axios' import qs from 'qs' import merge from 'lodash/merge' import {clearLoginInfo} from './lib/clearLoginInfo' import terminalencrypt from './lib/terminalencrypt' import atmConfig from '@/atmConfig' const http = axios.create({ baseURL: atmConfig.deployType == '1' ? atmConfig.localServiceHost : atmConfig.serverServiceHost, timeout: atmConfig.connectionTimeout, headers: { 'Content-Type': 'application/json;charset=utf-8' } }) const httpForm = axios.create({ baseURL: atmConfig.deployType == '1' ? atmConfig.localServiceHost : atmConfig.serverServiceHost, timeout: atmConfig.connectionTimeout, headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, transformRequest: [function (data, headers) { if (typeof data == 'object') { return qs.stringify(data); } else { return data; } }], }) http.defaults.withCredentials = true httpForm.defaults.withCredentials = true /** * 请求拦截 */ http.interceptors.request.use(function (config) { if (atmConfig.cryptedConfig.skipInterface.indexOf(config.url)==-1){ let isJson = config.headers['Content-Type'].indexOf('json')!=-1 ||false config.data= terminalencrypt.encrptMethods.cryptoData(config.data||qs.stringify(config.params),isJson) //如果是get请求,就将get请求后面的参数,替换为这里的参数 if (config.method === 'get') { if (config.data && config.params){ //将qs类型的参数转为对象 config.params = qs.parse(config.data) } delete config.data } return config; }else{ return config; } }, function (error) { // 对请求错误做些什么 return Promise.reject(error); }); http.interceptors.request.use(config => { if(window.$stores?.commonStore){ if(!config.notShowLoading){ window.$stores?.commonStore.setLoading(true) } } config.headers[atmConfig.token_key] = sessionStorage.getItem(atmConfig.token_key) // 请求头带上token config.headers['currentUri']=window.location return config }, error => { if(window.$stores?.commonStore){ window.$stores?.commonStore.setLoading(false) } return Promise.reject(error) }) httpForm.interceptors.request.use(function (config) { if (atmConfig.cryptedConfig.skipInterface.indexOf(config.url)==-1) { config.data = terminalencrypt.encrptMethods.cryptoData(config.data || qs.stringify(config.params)) //如果是get请求,就将get请求后面的参数,替换为这里的参数 if (config.method === 'get') { if (config.data && config.params) { //将qs类型的参数转为对象 config.params = qs.parse(config.data) } delete config.data } return config; }else{ return config; } }, function (error) { // 对请求错误做些什么 return Promise.reject(error); }); httpForm.interceptors.request.use(config => { if(window.$stores?.commonStore){ if(!config.notShowLoading){ window.$stores?.commonStore.setLoading(true) } } config.headers[atmConfig.token_key] = window.sessionStorage.getItem(atmConfig.token_key) // 请求头带上token config.headers['currentUri']=window.location return config }, error => { if(window.$stores?.commonStore){ window.$stores?.commonStore.setLoading(false) } return Promise.reject(error) }) /** * 响应拦截 */ http.interceptors.response.use(function (response) { // 2xx 范围内的状态码都会触发该函数。 // 对响应数据做点什么 if (response.status===200 && response.data.data && Object.keys(response.data.data).length===0){ return response }else if(response.status===200){ if (atmConfig.cryptedConfig.skipInterface.indexOf(response.config.url)!=-1){ return response }else{ let result=terminalencrypt.encrptMethods.decryptedParam(response.data) // let result=response.data //判定业务成功的标志,必须要有这个字段 if(result.code===0 && (result.data || result.msg )){ response.data = result return response } if (atmConfig.cryptedConfig.reqDataLevel==0 || response.headers['content-type'].indexOf('text/html')!=-1) { return response } return { serviceSuccess:false, msg:result.msg||'服务调用异常,请重试', data:{} } } } return { errorMsg:'服务调用异常,请重试', serviceSuccess: false, data:{} }; }, function (error) { // 超出 2xx 范围的状态码都会触发该函数。 // 对响应错误做点什么 return Promise.reject(error); }); http.interceptors.response.use(response => { if(window.$stores?.commonStore){ window.$stores?.commonStore.setLoading(false) } //将token写入sessionStorage中 if(response.headers && (response.headers[atmConfig.token_key] || response.headers[atmConfig.token_key]=='')){ sessionStorage.setItem(atmConfig.token_key,response.headers[atmConfig.token_key]) } if(response.data.code && response.data.code !='0'){ $message.error(response.data.msg); return Promise.reject(response) } return response }, error => { if(window.$stores?.commonStore){ window.$stores?.commonStore.setLoading(false) } if (error.response) { if (error.response.status === 401) { $message.error('登陆已失效,请重新登陆!'); setTimeout(() => { clearLoginInfo() }, 1500) } if (error.response.status === 403) { $message.error('您没有该资源的权限,请联系管理员进行处理!'); } } return Promise.reject(error) }) httpForm.interceptors.response.use(function (response) { // 2xx 范围内的状态码都会触发该函数。 // 对响应数据做点什么 if (response.status===200 && response.data.data && Object.keys(response.data.data).length===0){ return response }else if(response.status===200){ if (atmConfig.cryptedConfig.skipInterface.indexOf(response.config.url)!=-1){ return response }else{ let result=terminalencrypt.encrptMethods.decryptedParam(response.data) // let result=response.data //判定业务成功的标志,必须要有这个字段 if(result.code===0 && (result.data || result.msg )){ response.data = result return response } if (atmConfig.cryptedConfig.reqDataLevel==0 || response.headers['content-type'].indexOf('text/html')!=-1) { return response } return { serviceSuccess:false, msg:result.msg||'服务调用异常,请重试', data:{} } } } return { errorMsg:'服务调用异常,请重试', serviceSuccess: false, data:{} }; }, function (error) { // 超出 2xx 范围的状态码都会触发该函数。 // 对响应错误做点什么 return Promise.reject(error); }); httpForm.interceptors.response.use(response => { if(window.$stores?.commonStore){ window.$stores?.commonStore.setLoading(false) } //将token写入sessionStorage中 if(response.headers && (response.headers[atmConfig.token_key] || response.headers[atmConfig.token_key]=='')){ sessionStorage.setItem(atmConfig.token_key,response.headers[atmConfig.token_key]) } if(response.data.code && response.data.code !='0'){ $message.error(response.data.msg); return Promise.reject(response) } return response }, error => { if(window.$stores?.commonStore){ window.$stores?.commonStore.setLoading(false) } if (error.response) { if (error.response.status === 401) { $message.error('登陆已失效,请重新登陆!'); setTimeout(() => { clearLoginInfo() }, 1500) } if (error.response.status === 403) { $message.error('您没有该资源的权限,请联系管理员进行处理!'); } } return Promise.reject(error) }) /** * get请求参数处理 * @param {*} params 参数对象 * @param {*} openDefultParams 是否开启默认参数? */ http.adornParams = (params = {}, openDefultParams = true) => { var defaults = { 't': new Date().getTime() } return openDefultParams ? merge(defaults, params) : params } httpForm.adornParams = (params = {}, openDefultParams = true) => { var defaults = { 't': new Date().getTime() } return openDefultParams ? merge(defaults, params) : params } /** * post请求数据处理 * @param {*} data 数据对象 * @param {*} openDefultdata 是否开启默认数据? * @param {*} contentType 数据格式 * json: 'application/json; charset=utf-8' * form: 'application/x-www-form-urlencoded; charset=utf-8' */ http.adornData = (data = {}, openDefultdata = true) => { var defaults = { 't': new Date().getTime() } data = openDefultdata ? merge(defaults, data) : data return JSON.stringify(data) } httpForm.adornData = (data = {}, openDefultdata = true) => { var defaults = { 't': new Date().getTime() } data = openDefultdata ? merge(defaults, data) : data return qs.stringify(data) } function vueInit(Vue) { // 挂载全局 // ajax请求方法 Vue.config.globalProperties.$http = http // ajax请求方法 Vue.config.globalProperties.$httpForm = httpForm } function install(app,options){ vueInit(app) } export default { http, httpForm,install}