UNPKG

zcloud-ui

Version:

A Component Library for Vue.js.

203 lines (166 loc) 6.49 kB
'use strict'; 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;