z-react-ui
Version:
z-react-ui,是一款基于 Dumi,由 React + TypeScript 开发的组件库 🎉。
158 lines (126 loc) • 5.06 kB
JavaScript
;
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;
}
}