UNPKG

app-base-react

Version:
460 lines (428 loc) 12.3 kB
"use strict"; 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; } };