app-base-react
Version:
react development common base package.
460 lines (428 loc) • 12.3 kB
JavaScript
;
var _regenerator = require("babel-runtime/regenerator");
var _regenerator2 = _interopRequireDefault(_regenerator);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
/**
* @module net
*/
var Cookies = require('js-cookie');
module.exports = {
getUrl: function getUrl(url, data) {
var params = "";
if (data) {
for (var key in data) {
if (url.indexOf("?") >= 0) {
params += "&";
} else if (params == "") {
params = "?";
} else {
params += "&";
}
params += key + "=" + data[key];
}
}
return url + params;
},
/**
* 获取面包屑
*
* @param {string} route - 路径
* @return {array} 返回path数组
*/
getBreadcrumbs: function getBreadcrumbs(route) {
return route.split('/');
},
/**
* 获取地址参数
*
* @param {string} name - key
* @return {*} 返回值或null
*/
getParam: function getParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = decodeURI(window.location.search).substr(1).match(reg);
if (r !== null) return r[2];
return null;
},
/**
* 获取地址所有参数
*
* @param {string} href - 地址
* @return {object} 返回所有参数对象
*/
getParams: function getParams(href) {
var url = href ? href : window.location.href;
var _pa = url.substring(url.indexOf('?') + 1),
_arrS = _pa.split('&'),
_rs = {};
for (var i = 0, _len = _arrS.length; i < _len; i++) {
var pos = _arrS[i].indexOf('=');
if (pos === -1) {
continue;
}
var name = _arrS[i].substring(0, pos),
value = window.decodeURIComponent(_arrS[i].substring(pos + 1));
_rs[name] = value;
}
return _rs;
},
getUrlParam: function getUrlParam(url, paramName) {
if (!url) return "";
var arrStr = url.substring(url.indexOf("?") + 1).split("&");
for (var i = 0; i < arrStr.length; i++) {
var loc = arrStr[i].indexOf(paramName + "=");
if (loc != -1) {
return arrStr[i].replace(paramName + "=", "").replace("?", "");
break;
}
}
return "";
},
/**
* ajax请求
*
* @param {object} setting - 选项设置
* @return {*}
*/
ajax: function ajax(setting) {
//设置参数的初始值
var opts = {
method: (setting.method || "GET").toUpperCase(), //请求方式
url: setting.url || "", // 请求地址
async: setting.async || true, // 是否异步
dataType: setting.dataType || "json", // 解析方式
data: setting.data || "", // 参数
success: setting.success || function () {}, // 请求成功回调
error: setting.error || function () {} // 请求失败回调
// 参数格式化
};function params_format(obj) {
var str = '';
for (var i in obj) {
str += i + '=' + obj[i] + '&';
}
return str.split('').slice(0, -1).join('');
}
// 创建ajax对象
var xhr = new XMLHttpRequest();
// 连接服务器open(方法GET/POST,请求地址, 异步传输)
if (opts.method === 'GET') {
xhr.open(opts.method, opts.url + "?" + params_format(opts.data), opts.async);
xhr.send();
} else {
xhr.open(opts.method, opts.url, opts.async);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(opts.data);
}
/*
** 每当readyState改变时,就会触发onreadystatechange事件
** readyState属性存储有XMLHttpRequest的状态信息
** 0 :请求未初始化
** 1 :服务器连接已建立
** 2 :请求已接受
** 3 : 请求处理中
** 4 :请求已完成,且相应就绪
*/
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && (xhr.status === 200 || xhr.status === 304)) {
switch (opts.dataType) {
case "json":
var json = JSON.parse(xhr.responseText);
opts.success(json);
break;
case "xml":
opts.success(xhr.responseXML);
break;
default:
opts.success(xhr.responseText);
break;
}
}
};
xhr.onerror = function (err) {
opts.error(err);
};
},
/**
* fetch请求
* @param url
* @param setting
* @return {Promise<any>}
*/
fetch: function (_fetch) {
function fetch(_x, _x2) {
return _fetch.apply(this, arguments);
}
fetch.toString = function () {
return _fetch.toString();
};
return fetch;
}(function (url, setting) {
var _this = this;
//设置参数的初始值
var opts = {
method: (setting.method || 'GET').toUpperCase(), //请求方式
headers: setting.headers || {}, // 请求头设置
credentials: setting.credentials || true, // 设置cookie是否一起发送
body: setting.body || {},
mode: setting.mode || 'no-cors', // 可以设置 cors, no-cors, same-origin
redirect: setting.redirect || 'follow', // follow, error, manual
cache: setting.cache || 'default' // 设置 cache 模式 (default, reload, no-cache)
};
var dataType = setting.dataType || "json",
// 解析方式
data = setting.data || ""; // 参数
// 参数格式化
function params_format(obj) {
var str = '';
for (var i in obj) {
str += i + "=" + obj[i] + "&";
}
return str.split('').slice(0, -1).join('');
}
if (opts.method === 'GET') {
url = url + (data ? "?" + params_format(data) : '');
} else {
setting.body = data || {};
}
return new Promise(function (resolve, reject) {
fetch(url, opts).then(function () {
var _ref = _asyncToGenerator( /*#__PURE__*/_regenerator2.default.mark(function _callee(res) {
var data;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!(dataType === 'text')) {
_context.next = 6;
break;
}
_context.next = 3;
return res.text();
case 3:
_context.t0 = _context.sent;
_context.next = 16;
break;
case 6:
if (!(dataType === 'blob')) {
_context.next = 12;
break;
}
_context.next = 9;
return res.blob();
case 9:
_context.t1 = _context.sent;
_context.next = 15;
break;
case 12:
_context.next = 14;
return res.json();
case 14:
_context.t1 = _context.sent;
case 15:
_context.t0 = _context.t1;
case 16:
data = _context.t0;
resolve(data);
case 18:
case "end":
return _context.stop();
}
}
}, _callee, _this);
}));
return function (_x3) {
return _ref.apply(this, arguments);
};
}()).catch(function (e) {
reject(e);
});
});
}),
/**
* @mixin
*/
cookie: {
/**
* 格式化cookie
* @param {string} cookies - cookie字符串
* @return {*} 返回cookie值
*/
parse: function parse(cookies) {
var cookie = cookies.split(';'),
cookieObj = {},
cookieArr = [],
key = '',
value = '';
for (var i = 0; i < cookie.length; i++) {
cookieArr = cookie[i].trim().split('=');
key = cookieArr[0];
value = cookieArr[1];
cookieObj[key] = value;
}
return cookieObj;
},
/**
* 从字符串中取cookie
* @param {string} cookieStr - cookie字符串
* @param {string} name - key
* @return {*} 返回cookie值
*/
getFromString: function getFromString(cookieStr, name) {
var cookieName = encodeURIComponent(name) + "=",
cookieStart = cookieStr.indexOf(cookieName),
cookieValue = null;
if (cookieStart > -1) {
var cookieEnd = cookieStr.indexOf(";", cookieStart);
if (cookieEnd === -1) {
cookieEnd = cookieStr.length;
}
cookieValue = decodeURIComponent(cookieStr.substring(cookieStart + cookieName.length, cookieEnd));
}
return cookieValue;
},
/**
* @param key
* @return {*}
*/
getJSON: function getJSON(key) {
return Cookies.getJSON(key);
},
/**
*
* @param key
* @return {*}
*/
get: function get(key) {
var map = Cookies.get() || {};
return map[key];
},
/**
*
* @param key
* @param val
* @param options
* @return {*}
*/
set: function set(key, val, options) {
return Cookies.set(key, val, options);
},
/**
*
* @param key
* @return {*}
*/
remove: function remove(key) {
return Cookies.remove(key);
}
},
/**
* @mixin
*/
localStorage: {
/**
*
* @param key
* @param val
*/
set: function set(key, val) {
var setting = arguments[0];
if (Object.prototype.toString.call(setting).slice(8, -1) === 'Object') {
for (var i in setting) {
localStorage.setItem(i, JSON.stringify(setting[i]));
}
} else {
localStorage.setItem(key, JSON.stringify(val));
}
},
/**
*
* @param key
* @return {*}
*/
get: function get(key) {
if (key) return JSON.parse(localStorage.getItem(key));
return null;
},
/**
*
* @param key
* @return {*}
*/
remove: function remove(key) {
localStorage.removeItem(key);
},
/**
* @return {*}
*/
clear: function clear() {
localStorage.clear();
}
},
/**
* @mixin
*/
sessionStorage: {
/**
*
* @param key
* @param val
*/
set: function set(key, val) {
var setting = arguments[0];
if (Object.prototype.toString.call(setting).slice(8, -1) === 'Object') {
for (var i in setting) {
sessionStorage.setItem(i, JSON.stringify(setting[i]));
}
} else {
sessionStorage.setItem(key, JSON.stringify(val));
}
},
/**
*
* @param key
* @return {*}
*/
get: function get(key) {
if (key) return JSON.parse(sessionStorage.getItem(key));
return null;
},
/**
*
* @param key
* @return {*}
*/
remove: function remove(key) {
sessionStorage.removeItem(key);
},
/**
*
* @return {*}
*/
clear: function clear() {
sessionStorage.clear();
}
},
webSocket: function webSocket(baseUrl, busiType, token, callback) {
var url = void 0;
if (window.location.protocol == 'http:') {
url = 'ws://' + baseUrl + "WebSocket/" + busiType + "/" + token;
} else {
url = 'wss://' + baseUrl + "WebSocket/" + busiType + "/" + token;
}
var ws = new WebSocket(url);
//监听三种状态的变化 。js会回调
ws.onopen = function (message) {};
ws.onclose = function (message) {};
ws.onmessage = function (message) {
if (callback) {
callback(message.data);
}
};
//监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
window.onbeforeunload = function () {
ws.close();
};
return ws;
}
};