UNPKG

z-react-ui

Version:

z-react-ui,是一款基于 Dumi,由 React + TypeScript 开发的组件库 🎉。

158 lines (126 loc) 5.06 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = request; exports.checkRspStatus = checkRspStatus; require("antd/es/message/style"); var _message2 = _interopRequireDefault(require("antd/es/message")); var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _axios = _interopRequireDefault(require("axios")); var _lodash = require("lodash"); var defaultHeaders = { 'X-Requested-With': 'XMLHttpRequest', Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8' }; var defaultOptions = { method: 'GET', headers: defaultHeaders, hasErrorTip: true // 默认是有错误提示 }; function request(url) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; options = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, defaultOptions), options), {}, { headers: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, defaultHeaders), options.headers), url: url }); handleMethod(options); // 设置 Authorization // const token = storage.getItem(`${prefix}-token`); // if (token) { // options.headers = { // 'Authorization': `Bearer ${token}`, // ...options.headers, // } // } return (0, _axios.default)(options).then(function (response) { var status = response.status, statusText = response.statusText; var successed = checkRspStatus(response); if (successed) { var data = response.data || {}; return Promise.resolve((0, _objectSpread2.default)((0, _objectSpread2.default)({}, response), {}, { success: true, message: statusText, statusCode: status, data: data })); } // 错误时 var error = { message: 'http response status error', config: options, code: "".concat(status), response: response, isAxiosError: false }; return Promise.reject(error); }).catch(function (error) { var response = error.response, message = error.message, code = error.code; // 错误提示 if (options.hasErrorTip) { tipError(response || (0, _objectSpread2.default)((0, _objectSpread2.default)({}, error), {}, { status: 600 })); } var msg = ''; var statusCode; if (response && response instanceof Object) { var statusText = response.statusText; statusCode = code || response.status; msg = message || response.data.message || statusText || '请求错误,请刷新重试'; } else { statusCode = 600; msg = message || 'Network Error'; } return Promise.resolve((0, _objectSpread2.default)((0, _objectSpread2.default)({}, response), {}, { data: response && (response.data || response.data.data || {}), success: false, status: statusCode, message: msg })); }); } // 检查请求的状态 function checkRspStatus(_ref) { var status = _ref.status, _ref$data = _ref.data, data = _ref$data === void 0 ? {} : _ref$data; if (status >= 200 && status < 300 && (data.code === 0 || data.code === 200 || data.status === 'done') // code 码是服务端返回的 ) { return true; } return false; } function tipError(response) { var _response$data = response.data, data = _response$data === void 0 ? {} : _response$data, status = response.status, statusText = response.statusText; var errorMsg = data.message || statusText || '请求错误,请刷新重试'; console.error('http返回结果的 status 码错误,错误信息是:', response); // if (status === 401 || data.code === 401 || data.state === 401) { // storage.removeItem(`${prefix}-token`); // message.error('token过期,正在返回登录页...', 3, () => { // window.location.replace('/mini/login'); // }); // return; // } _message2.default.error(errorMsg); } // 处理请求参数 var methodArr = ['PUT', 'POST', 'DELETE', 'PATCH']; function handleMethod(options) { var method = options.method.toUpperCase(); //get post 类型需要拼接url参数 isAddUrlParams=true if (method === 'GET' && options.data || method === 'POST' && options.data && options.data.isAddUrlParams) { options.params = (0, _lodash.cloneDeep)(options.data); delete options.data; return; } // 说明:如果post/put/delete请求携带参数通过 x-www-form-urlencoded的方式 isUrl=true if (methodArr.includes(method)) byXWWWFormUrlencoded(options, method); } // post、put等通过 x-www-form-urlencoded的方式,那么就需要在请求中加上一个isUrl=true做一个标识 function byXWWWFormUrlencoded(options, method) { if (options.method.toUpperCase() === method.toUpperCase() && options.data && options.data.isUrl) { delete options.data.isUrl; options.params = (0, _objectSpread2.default)({}, options.data); delete options.data; } }