UNPKG

fork-reap-design

Version:

A high quality UI components Library with Vue.js

142 lines (135 loc) 5.4 kB
/** * @author jonasli * @module ajax 封装 * @date 2018/09/09 */ /* eslint-disable */ import axios from 'axios'; // 0.2M import epaasTools from 'epaas-private-tools'; export function setDefault(options) { if (options && options.defaults && options.defaults.baseURL) { Reap.root = options.defaults.baseURL; } // axios.defaults.baseURL = eduBaseUrl; axios.defaults.headers = { 'Content-Type': 'application/x-www-form-urlencoded' }; // 接口默认超时 10s;timeout => 0:不需要超时; !0 自定义超时时间 axios.defaults.timeout = 30 * 1000; axios.defaults.transformRequest = [function (data) { // 检测 request是否为 FormData ,则不做任何序列化操作 if (data && data.entries) return data; // 2.0正常接口需要序列化 return JSON.stringify(data); }]; // request 拦截 1.设置登录态token 2.post Content-Type = 'application/json' // 开放平台扫码登录:https://te.qq.com/open/app/2345 // openuserid: 1094577996007748608 axios.interceptors.request.use( response => { let url = response.url.toLocaleLowerCase().split('?'); console.log('axios response', url); // 接口权限 // token 改造,当有 50000 登录态的时候用 50000 登录态,如果没有的话用 10000 const mapiToken = window.localStorage.getItem('views.login.mapiToken'); console.log('mapiToken', mapiToken); let token = mapiToken; let method = response.method; response.headers.Authorization = token; epaasTools.checkParams(response); // 接口为上传,导入,导出,下载等接口不进行超时限制 if (url[0].match(/upload|export|import|download/)) { response.timeout = 0; } if (['post', 'put'].includes(method)) { response.headers['Content-Type'] = 'application/json'; } return response; }, error => { return error; } ); // response 拦截 axios.interceptors.response.use( response => { return response; }, error => { let response = {}; // response 整个对象 if (error.response) { response = error.response; // 网络转态码: // 401:登录态过期 // 更多错误码 let status = response.status; if (status === 401) { // TODO 需要执行重定向到首页操作,暂时不操作 // Vue.prototype.$Message.error('登录态已过期,请重新登录'); console.log('登录态过期,请重新登录'); // redirect(); } if (status >= 500) { // Vue.prototype.$Message.error('网络开小差了'); if (status === 504) { console.log('接口服务宕机'); // redirect(); } } } else { // 前端模拟404错误:404 接口不会捕获到错误信息的问题 if (error.config) { response.status = 404; response.statusText = "API Not Found" } // Vue.prototype.$Message.error('网络开小差了'); } // 接口错误前端模拟错误供每个页面接口捕获 throw response; return error; } ); if (options) { Object.assign(axios, options); } } // 项目登出 export const redirect = () => { console.log('axios.js redirect'); // let platformParams = { // env: 'online', // appid: '10000' // }; // let params = JSON.parse(window.localStorage.getItem('views.login.platformParams')) || platformParams; // let env = params.env; // let appid = params.appid; // let url = `https://sso.qq.com/open/logout/${appid}?callback=https://sso.qq.com/open/app/${appid}`; // window.sessionStorage.clear(); // window.localStorage.clear(); // // 清除线上登陆态 // if (env === 'dev') url = `https://dev-sso.qq.com/open/logout/${appid}?callback=https://dev-sso.qq.com/open/app/${appid}`; // if (env === 'test') url = `https://test-sso.qq.com/open/logout/${appid}?callback=https://test-sso.qq.com/open/app/${appid}`; // if (env === 'pre') url = `https://pre-sso.qq.com/open/logout/${appid}?callback=https://pre-sso.qq.com/open/app/${appid}`; // window.location.href = url; }; // =================== ajax封装 ================== function request (url, params, method) { return new Promise((resolve, reject) => { axios[method](url, params) .then((res) => { let code = res.data.ErrorCode; if (code && typeof(code) === 'string') { res.data.ErrorCode = code.toLocaleUpperCase(); } resolve(res.data) }) .catch((resp) => { reject(resp) }); }) } export function ajaxRequest(url, params, method) { return request(url, params, method) } export default axios;