atm-request
Version:
基于axios的前端异步请求,提供便捷API以供调用
329 lines (286 loc) • 10.3 kB
JavaScript
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}