UNPKG

z-react-ui

Version:

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

141 lines (119 loc) 4.56 kB
import "antd/es/message/style"; import _message from "antd/es/message"; import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; import axios from 'axios'; import { cloneDeep } from '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 // 默认是有错误提示 }; export default function request(url) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; options = _objectSpread(_objectSpread(_objectSpread({}, defaultOptions), options), {}, { headers: _objectSpread(_objectSpread({}, defaultHeaders), options.headers), url: url }); handleMethod(options); // 设置 Authorization // const token = storage.getItem(`${prefix}-token`); // if (token) { // options.headers = { // 'Authorization': `Bearer ${token}`, // ...options.headers, // } // } return axios(options).then(function (response) { var status = response.status, statusText = response.statusText; var successed = checkRspStatus(response); if (successed) { var data = response.data || {}; return Promise.resolve(_objectSpread(_objectSpread({}, 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 || _objectSpread(_objectSpread({}, 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(_objectSpread(_objectSpread({}, response), {}, { data: response && (response.data || response.data.data || {}), success: false, status: statusCode, message: msg })); }); } // 检查请求的状态 export 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; // } _message.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 = 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 = _objectSpread({}, options.data); delete options.data; } }