import axios from 'axios';
var moment = require("moment");
import md5 from 'js-md5'
import {
Message
} from 'element-ui';
// 生成随机字符串
function randString(len) {
len = len || 32;
var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
var maxPos = $chars.length;
var tmp = '';
for (let i = 0; i < len; i++) {
tmp += $chars.charAt(Math.floor(Math.random() * maxPos));
}
return tmp;
};
// 生成请求id
function generateRequestId() {
// 没登录的随机7位数
let userId = "pcRandid-" + randString(7)
// 登录后加入用户id
if (localStorage.getItem('Token')) {
userId = "pcUserid-" + JSON.parse(localStorage.getItem("court")).id
}
userId = userId + "-" + moment().format('x') + "-" + randString(7)
// console.log("+++ 生成的用户id为:",userId)
// md5
let tmp = md5(userId);
// console.log("+++ 生成的请求id未格式化之前:",tmp)
// 生成固定格式的字符
let resString = ""
const format = [8, 4, 4, 4, 12]
let start = 0
format.forEach(item => {
if (start != 0) {
resString += "-"
}
resString += tmp.substr(start, item)
start += item
});
// console.log("+++ 生成的请求id未格式化之后:",resString)
return resString
};
axios.defaults.timeout = 10000;
// axios.defaults.baseURL =
//http request 拦截器
axios.interceptors.request.use(
config => {
const token = localStorage.getItem('Token') || '';
const CSRFToken = localStorage.getItem('CSRFToken') || ''
config.headers = {
'Content-Type': 'application/json;charset=UTF-8',
'JWTToken': token,
'CSRFToken': CSRFToken,
'RequestId': generateRequestId()
}
// if(token){
// config.params = {'token':token}
// }
return config;
},
error => {
return Promise.reject(err);
}
);
//http 拦截器
axios.interceptors.response.use(
response => {
if (response.data.code == '2002' || response.data.code == '2005' ) {
parent.location.href="/login"
Message.error('登录过期,请重新登录')
// router.replace({
// path: "/login",
// query: {
// redirect: router.currentRoute.fullPath
// } //从哪个页面跳转
// })
}else if(response.data.code == '1007'){
parent.location.href="/login"
Message.error('用户已在其他地方登陆,请重新登录')
}
return response;
},
error => {
console.log(error)
return Promise.reject(error)
}
)
export default axios.defaults.baseURL
/**
* 封装get方法
* @param url
* @param data
* @returns {Promise}
*/
export function fetch(url, params = {}) {
return new Promise((resolve, reject) => {
axios.get(url, {
params: params
})
.then(response => {
resolve(response.data);
})
.catch(err => {
reject(err)
})
})
}
/**
* 封装post请求
* @param url
* @param data
* @returns {Promise}
*/
export function post(url, data) {
return new Promise((resolve, reject) => {
axios.post(url, data)
.then(response => {
resolve(response.data);
}, err => {
reject(err)
})
})
}
/**
* 封装patch请求
* @param url
* @param data
* @returns {Promise}
*/
export function patch(url, data = {}) {
return new Promise((resolve, reject) => {
axios.patch(url, data)
.then(response => {
resolve(response.data);
}, err => {
reject(err)
})
})
}
/**
* 封装put请求
* @param url
* @param data
* @returns {Promise}
*/
export function put(url, data = {}) {
return new Promise((resolve, reject) => {
axios.put(url, data)
.then(response => {
resolve(response.data);
}, err => {
reject(err)
})
})
}
/**
* 封装upload请求
* @param url
* @param data
* @returns {Promise}
*/
export function upload(url, data = {}) {
let instance = axios.create({
baseURL: axios.defaults.baseURL,
headers: {
'Content-Type': 'multipart/form-data;',
'JWTToken': localStorage.getItem('Token'),
'CSRFToken': localStorage.getItem('CSRFToken')
},
});
return new Promise((resolve, reject) => {
instance.post(url, data)
.then(response => {
resolve(response.data);
}, err => {
reject(err)
})
})
}
/**
* 封装delete请求
* @param url
* @param data
* @returns {Promise}
*/
export function delet(url, data = {}) {
return new Promise((resolve, reject) => {
axios.delete(url, data)
.then(response => {
resolve(response.data);
}, err => {
reject(err)
})
})
}
/**
* 封装get请求
* @param url
* @param data
* @returns {Promise}
*/
export function get(url, data = {}) {
return new Promise((resolve, reject) => {
axios.get(url, data)
.then(response => {
resolve(response.data);
}, err => {
reject(err)
})
})
}
export function fetchBold(url, data = {}) {
const token = localStorage.getItem('Token') || '';
const CSRFToken = localStorage.getItem('CSRFToken') || ''
let instance = axios.create({
baseURL: axios.defaults.baseURL,
timeout: 30000,
headers: {
'Content-Type': 'multipart/form-data;',
'JWTToken': token,
'CSRFToken': CSRFToken,
'RequestId': generateRequestId()
},
responseType: 'blob', //接收的值类型
});
return new Promise((resolve, reject) => {
instance.get(url, data)
.then(response => {
resolve(response.data);
}, err => {
reject(err)
})
})
}
封装
最新推荐文章于 2024-05-11 22:17:43 发布