zcloud-ui
Version:
A Component Library for Vue.js.
203 lines (166 loc) • 6.49 kB
JavaScript
;
exports.__esModule = true;
var _message = require('element-ui/lib/theme-chalk/message.css');
var _message2 = _interopRequireDefault(_message);
var _message3 = require('element-ui/lib/message');
var _message4 = _interopRequireDefault(_message3);
require('element-ui/lib/theme-chalk/base.css');
var _nprogress = require('nprogress');
var _nprogress2 = _interopRequireDefault(_nprogress);
require('nprogress/nprogress.css');
var _index = require('zcloud-ui/lib/config/index');
var _ruleCode = require('./ruleCode');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /**
* axios interceptor 拦截器配置
*/
// Progress 进度条
// Progress 进度条 样式
// import qs from 'qs';序列化数据
var Interceptor = function () {
function Interceptor(_ref) {
var TimeOut = _ref.TimeOut,
axios = _ref.axios;
_classCallCheck(this, Interceptor);
this.axios = axios;
this.req = {
timeout: TimeOut
}; // 防止同个链接连续请求
this.request();
this.response();
}
// isBrowser () {
// return process.client;
// }
Interceptor.prototype.requestTimeout = function requestTimeout(name, time) {
var _this = this;
setTimeout(function () {
if (_this.req[name]) {
delete _this.req[name];
}
}, time || this.req.timeout);
};
// 对请求数据做些什么
Interceptor.prototype.request = function request() {
var _this2 = this;
this.axios.interceptors.request.use(function (request) {
request.urlGuid = request.url; // 防止同个链接连续请求
// 本地
if (~request.url.indexOf('.json')) {
request.method = 'GET';
request.url = '/data/' + request.url;
// 线上
} else if (request.headers.ignoreRepeat || !_this2.req[request.urlGuid]) {
request.url = request.url.includes('http') ? request.url : _index.Environment.REQUEST_URL + request.url;
_this2.req[request.urlGuid] = true;
_this2.requestTimeout(request.urlGuid, request.timeout);
_this2.cancel(request);
} else if (_this2.req[request.urlGuid]) {
return Promise.reject('重复请求' + request.url);
}
_nprogress2.default.start();
return request;
}, function (error) {
return Promise.reject(error);
});
};
// 超时处理
Interceptor.prototype.cancel = function cancel(request) {
var _this3 = this;
request.timer = setTimeout(function () {
_nprogress2.default.done();
delete _this3.req[request.urlGuid]; // 防止同个链接连续请求
if (!request.headers.ignoreError) {
_message4.default.error({
showClose: true,
message: '请求超时,请稍后再试',
customClass: 'yl-fix-mask'
});
}
request.cancel();
}, request.timeout);
};
Interceptor.prototype.isAppDo = function isAppDo(item, response) {
if (item.show) {
//eslint-disable-line
if (window.localStorage.getItem('comeform') === 'app') {
console.log('isApp = true', response.data);
response.data.isApp = true;
} else {
_message4.default.error({
showClose: true,
message: item.show.msg || '' + response.data.msg,
customClass: 'zl-fix-mask'
});
item.show.clear ? sessionStorage.clear() : '';
setTimeout(function () {
item.show.href ? window.location.href = item.show.href() : '';
}, 1500);
}
}
return response.data;
};
// 对响应数据做点什么
Interceptor.prototype.response = function response() {
var _this4 = this;
this.axios.interceptors.response.use(function (response) {
clearTimeout(response.config.timer);
_nprogress2.default.done();
delete _this4.req[response.config.urlGuid]; // 防止同个链接连续请求
if (response.data) {
for (var _iterator = _ruleCode.codeResponse, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
var _ref2;
if (_isArray) {
if (_i >= _iterator.length) break;
_ref2 = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
_ref2 = _i.value;
}
var item = _ref2;
if (item.code.includes(response.data.code)) {
if (item.success) {
// 为 omp特殊处理
return _index.Environment.PLATFORM === 'OMP' && !response.config.headers.inside || response.config.headers.returnAll ? response.data : response.data.result || response.data.data;
} else {
// 针对app 如果是app进入的页面 localStoragec存储字段 comeform='app'
// 如果token失效 则不跳转sso 直接根据抛出的异常来判断与原生交互
return Promise.reject(_this4.isAppDo(item, response));
}
}
}
if (!(response.config.headers && response.config.headers.ignoreError)) {
_message4.default.error({
showClose: true,
message: '' + response.data.msg,
customClass: 'zl-fix-mask'
});
}
return Promise.reject(_this4.formatResponseData(response));
}
return response;
}, function (error) {
_nprogress2.default.done();
return Promise.reject(error);
});
};
Interceptor.prototype.formatResponseData = function formatResponseData(response) {
var responsex = {},
apiCode = response.config.url;
try {
responsex = {
api: apiCode,
req: JSON.parse(response.config.data || {}),
res: response.data,
reqStr: response.config.data,
resStr: JSON.stringify(response.data || {})
};
} catch (error) {
responsex = {};
}
return responsex;
};
return Interceptor;
}();
exports.default = Interceptor;