UNPKG

@tanshenghu/web-utils

Version:

web公共方法

1,348 lines (1,162 loc) 38.5 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /* eslint-disable */ var G = globalThis; var noop = function noop() {}; var class2type = {}; var burstTid = null; var burstFlag = 0; var extend = function extend() { var hasOwn = class2type.hasOwnProperty; var fnToString = hasOwn.toString; var toString = class2type.toString; var getProto = Object.getPrototypeOf; var ObjectFunctionString = fnToString.call(Object); function isFunction(tar) { return typeof tar === 'function'; } function isPlainObject(obj) { var proto = void 0;var Ctor = void 0; if (!obj || toString.call(obj) !== '[object Object]') { return false; }proto = getProto(obj);if (!proto) { return true; }Ctor = hasOwn.call(proto, 'constructor') && proto.constructor;return typeof Ctor === 'function' && fnToString.call(Ctor) === ObjectFunctionString; }; var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if (typeof target === "boolean") { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; } // Handle case when target is a string or something (possible in deep copy) if ((typeof target === 'undefined' ? 'undefined' : _typeof(target)) !== "object" && !isFunction(target)) { target = {}; } // extend jQuery itself if only one argument is passed if (length === i) { target = this; --i; } for (; i < length; i++) { // Only deal with non-null/undefined values if ((options = arguments[i]) != null) { // Extend the base object for (name in options) { src = target[name]; copy = options[name]; // Prevent never-ending loop if (target === copy) { continue; } // Recurse if we're merging plain objects or arrays if (deep && copy && (isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) { if (copyIsArray) { copyIsArray = false; clone = src && Array.isArray(src) ? src : []; } else { clone = src && isPlainObject(src) ? src : {}; } // Never move original objects, clone them target[name] = extend(deep, clone, copy); // Don't bring in undefined values } else if (copy !== undefined) { target[name] = copy; } } } } // Return the modified object return target; }; var Common = { /** * 数据类型的判断 * @param {any} data - 需要判断的原始数据 * @param {string} [type] - 期望的数据类型名称 * @returns {boolean|string} */ isType: function isType(data, type) { return type && typeof type === 'string' ? class2type.toString.call(data) === '[object ' + type.replace(/^(\w)/, function (a) { return a.toUpperCase(); }) + ']' : class2type.toString.call(data).replace(/.+(?=\s)\s|]/g, ''); }, /** * 带样式的log日志 * @example * ``` * log('demo','color:red;'); * ``` */ log: function log() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var styleCount = args.filter(function (v) { return ('' + v).indexOf(':') > 1 && ('' + v).slice(-1) === ';'; }).length; var content = ''; var others = []; args.forEach(function (v, i) { if (i < styleCount && (typeof v === 'undefined' ? 'undefined' : _typeof(v)) !== 'object') { content += '%c ' + v + ' '; } else { others.push(v); } }); console.log.apply(console, [].concat(content || []).concat(others)); }, /** * 数据对象继承 */ extend: extend, /** * 判断空对象,不包含空字符串 * @param {object} data - 传入的对象参数 * @returns {(boolean|object)} */ isEmpty: function isEmpty(data) { return this.isType(data, 'array') || this.isType(data, 'object') ? '[]{}'.indexOf(JSON.stringify(data)) > -1 : null; }, /** * 数据克隆 * @param {array|object} data - 需要克隆的数据 * @returns {array|object} 克隆之后的全新数据 */ clone: function clone(data) { if (this.isType(data, 'array')) { return extend(true, {}, { data: data }).data; } else if (this.isType(data, 'object')) { return extend(true, {}, data); } return data; }, /** * 获取客户端Cookie * @param {string} cName - cookie键名 * @returns {string|null} */ getCookie: function getCookie(cName) { var reg = new RegExp(cName + '=([^$;]*)'); var result = reg.exec(document.cookie); return result && result.length ? unescape(result[1]) : result; }, /** * 设置客户端Cookie * @param {string} options.key - 键名 * @param {string} options.value - 键值 * @param {number} options.expire - 过期时间以小时为单位 * @param {string} options.domain - 业务域名 * @param {string} options.path - 存储路径 */ setCookie: function setCookie(options) { var _ref = options || {}, key = _ref.key, value = _ref.value, expire = _ref.expire, domain = _ref.domain, _ref$path = _ref.path, path = _ref$path === undefined ? '/' : _ref$path; if (!this.isType(key, 'undefined') && !this.isType(value, 'undefined')) { var cookie = key + '=' + escape(value) + ';'; if (domain && this.isType(key, 'string')) { cookie += ' domain=' + domain + ';'; } if (expire) { var exp = new Date(); exp.setTime(exp.getTime() + expire * 60 * 1000); cookie += ' expires=' + exp.toGMTString() + ';'; } cookie += ' path=' + path; document.cookie = cookie; } else { console.warn('key,value参数必传'); } }, /** * 删除客户端Cookie * @param {string} key - 需要删除的cookie键名 */ removeCookie: function removeCookie(key) { var exp = new Date('1970-01-01'); var value = this.getCookie(key); if (value) { document.cookie = key + '=' + escape(value) + '; expires=' + exp.toGMTString(); } }, /** * 日期时间格式化 * @param {number|date} date 时间戳、日期对象 * @param {string} t 需要转化的日期格式 */ dateFormat: function dateFormat(date, t) { if (typeof t === 'undefined') { t = 'yyyy-mm-dd'; };if (typeof date === 'string' && typeof t === 'undefined') { t = date;date = new Date(); } else if (/^\d+$/.test('' + date)) { date = new Date(+date); } else if (date && class2type.toString.call(date) !== '[object Date]') { date = new Date(date); };if (this.isType(date) !== 'Date') { return date; };var e = { "m+": date.getMonth() + 1, "d+": date.getDate(), "h+": date.getHours(), "i+": date.getMinutes(), "s+": date.getSeconds(), "q+": Math.floor((date.getMonth() + 3) / 3), S: date.getMilliseconds() };/(y+)/.test(t) && (t = t.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)));for (var i in e) { new RegExp("(" + i + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? e[i] : ("00" + e[i]).substr(("" + e[i]).length))); }return t; }, /** * 文件下载 * @param {object} data - 文件的Blob对象 * @param {string} fileName - 保存的文件名称 * @param {string} type - 文件的Type类型 * @description 因为现在大多前后端分离,都是发接口请求,所以需要另外写这种方法完成下载功能 */ download: function download(data, fileName, type) { if (!data) { return false; } var types = { excel: 'application/vnd.ms-excel' }; var ndata = new Blob([data], { type: this.isType(type, 'undefined') ? 'text/plain' : types[type] || type }); var oa = document.createElement('a'); var ohref = this.isType(data, 'string') && (data.indexOf('//') > -1 || data.indexOf('/') === 0) ? data : URL.createObjectURL(ndata); oa.download = fileName || '未命名文件'; oa.style.display = 'none'; oa.href = ohref; document.body.appendChild(oa); oa.click(); setTimeout(function () { document.body.removeChild(oa); // 析构 URL创建的对象 URL.revokeObjectURL(ohref); }); }, /** * 告别多重的if else switch等判断语句 * @returns {object} * @exports * seek() * .equal(1+0===1, '一') * .equal(1+1===2, '二') * .equal(1+2===3, '三') * .else('十') * .get() */ seek: function seek() { var _this = this; var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, all = _ref2.all; var result = []; var isFunc = function isFunc(v) { return _this.isType(v, 'function'); }; return { equal: function equal(expression, target) { if (all !== true && result.length > 0) { return this; } if (isFunc(expression)) expression = expression(); if (expression) { result.push(target); } return this; }, else: function _else(target) { if (all !== true && result.length > 0) { return this; } result.push(target); return this; }, get: function get() { return all === true ? result : result[0]; } }; }, /** * 根据uri获取其中的文件名称 * @param {string} url - uri链接地址 * @returns {string} */ getUriFileName: function getUriFileName(url) { url = '' + url; return (url.match(/\/([^\/]+)$/, 'g') || [, null])[1]; }, /** * 根据uri获取其中的域名 * @param {string} url - uri链接地址 */ getUriHostName: function getUriHostName(url) { url = '' + url; return (url.match(/.*\/\/[^\/]+/) || [null])[0]; }, /** * 根据uri获取其中的pathname部分 * @param {string} url - uri链接地址 * @param {boolean} [search = false] - 是否带search、hash */ getUriPathName: function getUriPathName(url) { var search = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var iUrl = '' + url; if (iUrl.indexOf('//') > -1) { var ret = iUrl.replace(/.*\/\//, '').replace(/[^/]+\//, '/'); return search === false ? ret.replace(/\?.*/, '').replace(/\#.*/, '') : ret; } return url; }, /** * url parse方法 * @param {string} url - url字符串参数 */ urlParse: function urlParse(url) { if (!url) { throw new Error('The "url" argument must be of type string and required.'); } var oa = document.createElement('a'); oa.href = url; var result = { protocol: oa.protocol, slashes: !!oa.protocol, host: oa.host, port: oa.port, hostname: oa.hostname, hash: oa.hash, search: oa.search, query: oa.search && oa.search.slice(1), pathname: oa.pathname, href: url }; oa = null; return result; }, /** * 金额保留N位有效小数 * @param {string|number} n - 金额 * @param {number} decimal - 小数位数 * @param {boolean} least - 至少两位小数 * @returns {string} */ moneyfixed: function moneyfixed(n) { var decimal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2; var least = arguments[2]; var vnc = ('' + n).replace(/-?\d+\.?/, ''); var n2 = Number(n); var nn = 1e-14; if (n2.toFixed && n2 === n2) { if (least === true) { if (vnc.length < decimal) { return (n2 + nn).toFixed(decimal); } else { return n; } } return (n2 + nn).toFixed(decimal); } return n; }, /** * 保留两位有效小数 一般运用于金额显示 * @param {string|number} n - 金额 * @param {boolean} least - 至少两位小数 least为true至少两位有效小数 * @returns {string} */ money2fixed: function money2fixed(n, least) { return this.moneyfixed(n, 2, least); }, /** * 金额千分位处理 * @param {number|string} n 金额 */ moneyFormat: function moneyFormat(n) { // toLocaleString var money = '' + n; return (/\d/.test(money) ? money.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,") : n ); }, /** * 复制文案 * @param {string} text - 需要复制的文案 * @returns {void} */ copyText: function copyText(text) { var el = document.createElement('textarea'); el.value = text; el.style = 'position:fixed;width:1px;height:1px;left:-100px;top:-100px;opacity:0'; G.document.body.appendChild(el); el.select(); el.setSelectionRange(0, text.length); // 兼容其它浏览器 G.document.execCommand('Copy'); setTimeout(function () { G.document.body.removeChild(el); }, 30); }, /** * 获取url所有参数 * @param {string} urlQuery - url路径 * @returns {object} */ getRequest: function getRequest() { var urlQuery = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : G.location.search; if (urlQuery.indexOf('//') > -1) { urlQuery = urlQuery.replace(/[^?]+\?/, '?'); // 没有 问号 证明没有参数情况 if (urlQuery.indexOf('?') === -1) { urlQuery = ''; } } urlQuery = urlQuery.slice(1); var result = {}; var kvs = urlQuery.split('&'); kvs.forEach(function (item) { if (item) { var paramsItems = item.split('='); result[paramsItems[0]] = paramsItems[1]; } }); return result; }, /** * 手工清除FormBinder Error信息 */ clearVerifyMsg: function clearVerifyMsg(myform, field) { var erIdx = myform.state.errors.findIndex(function (v) { return v.field === field; }); if (erIdx > -1) { myform.state.errors.splice(erIdx, 1); myform.setState({}); } }, /** * list数据向上,向下移动 * @param {array} list - 列表list数据 * @param {number} index - 当前操作的数据索引 * @param {number} step - 移动的步数 * @returns {array} - 返回移动好的list数据 */ moveUpDown: function moveUpDown(list, index) { var step = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; var current = list[index]; var insertIndex = Math.min(Math.max(index + step, 0), list.length); list.splice(index, 1); list.splice(insertIndex, 0, current); return list; }, /** * unicode 转换 * @param {string} str - 待转换的原字符串 * @param {string} [type] - 类型 * @returns {string} */ getUnicode: function getUnicode(str, type) { if (str || str === 0) { var _context; return (_context = '' + str, escape).call(_context, str).replace(/\%u/mg, type === 'css' ? '\\' : type === 'html' ? '&#x' : '\\u'); } return str; }, /** * 把对象转为常量只读属性 * @param {array|object} data - 需要定义为常量的数据 * @returns {array|object} */ constant: function constant(data) { var _this2 = this; if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) !== 'object') { return data; } if (this.isType(data, 'array')) { return Object.freeze(data.map(function (item) { return _this2.constant(item); })); } else { Object.keys(data).forEach(function (item) { if (_this2.isType(data[item], 'array')) { data[item] = _this2.constant(data[item]); } }); return Object.freeze(data); } }, /** * 数据删除 * @param {array} list - 数组对象 * @param {function} callback - 回调函数,需要返回boolean类型,告知组件方法是否需要删除该选项 * @param {boolean} depth - 是否需要递归深层次的删除 * @returns {array} */ removeItems: function removeItems(list, callback, depth) { if (this.isType(list, 'array') && this.isType(callback, 'function') && list.length) { if (depth) { var loop = function loop(dlist) { var fidx = dlist.findIndex(callback); if (fidx > -1) { dlist.splice(fidx, 1); loop(dlist); } }; loop(list); } else { var fidx = list.findIndex(callback); if (fidx > -1) { list.splice(fidx, 1); } } } return list; }, /** * 将数组、对象等数据序列化操作 * @param {array|object} data - 将要序列化操作的数据 */ serialize: function serialize(data) { var _this3 = this; var isObj = function isObj(v) { return _this3.isType(v, 'object'); }; function clean(d) { if (isObj(d)) { for (var k in d) { if (d.hasOwnProperty(k)) { delete d[k]; } } } else if (Array.isArray(d)) { d.length = 0; } return d; } function loop(d) { if (isObj(d)) { // 数据备份 var bank = JSON.parse(JSON.stringify(d)); // 该对象下所有属性节点 var keys = Object.keys(d).sort(); // 清空原对象 clean(d); keys.forEach(function (item) { d[item] = bank[item]; if (isObj(bank[item]) || Array.isArray(bank[item])) { loop(bank[item]); } }); } else if (Array.isArray(d)) { d.sort(); d.forEach(function (item) { if (Array.isArray(item) || isObj(item)) { loop(item); } }); } } loop(data); return data; }, /** * 手动触发某个事件 只运用于浏览器端 * @param {object} ele - 节点DOM对象 * @param {string} eventName - 事件名称 */ trigger: function trigger(ele, eventName) { if (ele && ele.dispatchEvent && eventName) { var e = document.createEvent("Event"); e.initEvent(eventName, true, true); ele.dispatchEvent(e); } }, /** * 拼接参数字符串 * @param {object} params - 数据对象参数 * @returns {string} */ queryString: function queryString(params) { if (G.URLSearchParams) { return new G.URLSearchParams(params).toString(); } var result = ''; var encode = function encode(v) { return typeof v === 'string' ? v.replace(/\&/gm, '%26').replace(/\?/gm, '%3F') : v; }; Object.keys(params).forEach(function (v) { result += '&' + v + '=' + encode(params[v]); }); return result.slice(1); }, /** * 轮询调用 * @param {function} param0.func - 需要轮询的函数 * @param {number} param0.interval - 轮询的间隔 * @param {number} param0.execCount - 轮询时最多不超过的次数 */ pollQuery: function pollQuery(_ref3) { var func = _ref3.func, _ref3$interval = _ref3.interval, interval = _ref3$interval === undefined ? 1000 : _ref3$interval, _ref3$execCount = _ref3.execCount, execCount = _ref3$execCount === undefined ? 1 : _ref3$execCount; var loopCount = 0; if (this.isType(func, 'function')) { var loop = function loop() { loopCount += 1; var ret = func(); if ((execCount === -1 || loopCount <= execCount) && ret !== false) { setTimeout(function () { loop(); }, interval); } }; loop(); } }, /** * 类似open方法 可新开启一个tab界面,支持get、post等方式 * @param {url} options.url - 需要打开调用的url路径 * @param {object} [options.params] - 调用url时所需要的参数 * @param {string} [options.type] - url以某种方式调用 * @param {string} [options.target] - 打开tab的方式,如: _blank, _new, _self 等等 * @param {function} [options.getEle] - 获取触发DOM节点,过时即失效 */ winOpen: function winOpen(options) { var url = options.url, params = options.params, _options$type = options.type, type = _options$type === undefined ? 'get' : _options$type, _options$target = options.target, target = _options$target === undefined ? '_blank' : _options$target, _options$getEle = options.getEle, getEle = _options$getEle === undefined ? noop : _options$getEle; var wraper = G.document.createElement('div'); var myform = G.document.createElement('form'); var ifm = G.document.createElement('iframe'); myform.method = type; myform.action = url; wraper.style = 'position:fixed;left:-100px;top:-100px;opacity:0;width:1px;height:1px;overflow:hidden;'; var ifmName = 'ifm_' + Date.now() + '_' + Math.ceil(Math.random() * 1000); ifm.name = ifmName; if (target) { myform.target = target === 'ifm' ? ifmName : target; } // 添加 input hidden function appendInput(data, fel) { Object.keys(data).forEach(function (item) { var itemEl = G.document.createElement('input'); itemEl.type = 'hidden'; itemEl.name = item; itemEl.value = data[item]; fel.appendChild(itemEl); }); } if (type.toLowerCase() === 'get') { var getParams = this.getRequest(url); appendInput(getParams, myform); } if (this.isType(params, 'object')) { appendInput(params, myform); } wraper.appendChild(myform); wraper.appendChild(ifm); G.document.body.appendChild(wraper); getEle(wraper); setTimeout(function () { myform.submit(); }); setTimeout(function () { G.document.body.removeChild(wraper); }, 1500); }, /** * 添加内链样式 * @param {string} css - css样式表 * @param {object} [options.ele] - 添加至指定的容器里面 * @param {object} [options.before] - 添加至指定的容器之前 * @param {object} [options.id] - 添加id属性 */ appendStyle: function appendStyle(css) { var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref4$ele = _ref4.ele, ele = _ref4$ele === undefined ? document.getElementsByTagName('head')[0] : _ref4$ele, before = _ref4.before, id = _ref4.id; var cssNode = document.createTextNode(css); var styleNode = document.createElement('style'); var head = document.getElementsByTagName('head')[0]; styleNode.appendChild(cssNode); if (id) { styleNode.setAttribute('id', id); } if (before && before.nodeType === 1) { before.parentNode.insertBefore(styleNode, before); } else { ele.appendChild(styleNode); } }, /** * 取深层的数据值 * @param {object} obj - 原始数据对象 * @param {string} keyName - 取值 链式key * @param {boolean} [log=true] - 是否打印错误日志 */ deepValue: function deepValue(obj, keyName) { var log = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; var result = void 0; try { result = eval('(obj.' + keyName + ')'); } catch (err) { log && console.error(err); result = void 0; } return result; }, /** * 过滤指定的数据 * @param {object} obj - 将要过滤的对象 * @param {string|array} fields - 指定需要过滤的字段名称 * @param {boolean} ignore - 是否忽略字段 * @returns {object} */ omit: function omit(obj, fields) { var _this4 = this; var ignore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var result = this.isType(obj, 'array') ? [] : {}; if ((this.isType(obj, 'array') || this.isType(obj, 'object')) && (this.isType(fields, 'string') || this.isType(fields, 'array'))) { var fieldsName = (',' + fields + ',').replace(/\s+/g, ''); if (this.isType(obj, 'object')) { Object.keys(obj).forEach(function (item) { if (ignore === true) { if (fieldsName.indexOf(',' + item + ',') === -1) { result[item] = obj[item]; } } else { if (fieldsName.indexOf(',' + item + ',') > -1) { result[item] = obj[item]; } } }); } else if (this.isType(obj, 'array') && obj.length && this.isType(obj[0], 'object')) { result = obj.map(function (item) { return _this4.omit(item, fieldsName, ignore); }); } return result; } return obj; }, /** * 组件Key * 生成随机数 */ getRndKey: function getRndKey() { return Math.ceil(Math.random() * 1000) + ('' + Date.now()).slice(3); }, /** * 获取html纯文本、与防xss转义 * @param {Element | string} el - DOM节点 * @param {number} [type] - DOM节点 */ elementText: function elementText(el) { var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; el = el.nodeName ? el : document.querySelector(el); var ifn = function ifn() { var iel = document.createElement('div'); iel.innerText = iel.textContent = el.innerHTML; var ret = iel.innerHTML; iel = null; return ret; }; if (el) { return type === 1 ? ifn() : el.innerText || el.textContent; } return ''; }, /** * 不同色值的转换 不支持英文名称色值 * @param {string} colorValue - 色值 * @param {boolean} [intact] - 是否返回完整的处理结果 */ color: function color(colorValue) { var intact = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var result = void 0; if (colorValue.indexOf('#') === 0) { if (colorValue.length < 5) { colorValue = colorValue.replace(/(\w)/g, '$1$1'); } result = colorValue.replace('#', '').replace(/(\w{2})/g, '$1,').split(',').filter(Boolean).map(function (v) { return parseInt(v, 16); }).join(','); } else if (colorValue.indexOf('rgb') === 0) { var itemValues = /(?:\d+,?){3}/.exec(colorValue); if (itemValues) { result = itemValues[0].split(',').filter(Boolean).map(function (v) { return (v * 1).toString(16); }).join(''); } } if (intact) { return result.indexOf(',') > 0 ? 'rgba(' + result + ',1)' : '#' + result; } return result; }, /** * 精度处理 */ decNumber: function decNumber(num) { var nowNum = num * 1; if (nowNum) { return nowNum.toFixed(6) * 1; } return num; }, /** * toFixed 精度处理 */ decToFixed: function decToFixed(num) { var digit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; if (isNaN(num) || !num.toFixed) { return num; } return this.decNumber((num + 1e-14).toFixed(digit)).toFixed(digit); }, /** * 创建默认的数据结构 */ wideJson: function wideJson(keyPath) { var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var key2obj = eval('(' + keyPath + ')'); return this.extend(true, key2obj, data); }, /** * 将svg源码转换为background-image的形式,当背景用 * 此方法一般很少用到,在此作为工具方法提供 * background-image: url('data:image/svg+xml;utf8,%3Csvg%20...'); */ svg2bg: function svg2bg(svgCode) { var strs = { "%": "%25", "<": "%3C", ">": "%3E", " ": "%20", "!": "%21", "*": "%2A", "'": "%27", '"': "%22", "(": "%28", ")": "%29", ";": "%3B", ":": "%3A", "@": "%40", "&": "%26", "=": "%3D", "+": "%2B", "$": "%24", ",": "%2C", "/": "%2F", "?": "%3F", "#": "%23", "[": "%5B", "]": "%5D" }; svgCode = svgCode.replace(/\n\r\f\t/mg, ' ').replace(/\s+/g, ' '); Object.keys(strs).forEach(function (k) { svgCode = svgCode.replace(new RegExp('\\' + k, 'mg'), strs[k]); }); svgCode = svgCode.replace(/(?:%20)+/g, '%20'); return svgCode; }, /** * isNaN * Number.isNaN 原生方法 */ isNaN: function isNaN(n) { return this.isType(Number.isNaN, 'function') ? Number.isNaN(n) : this.isType(n, 'number') && n !== n; }, /** * 睡眠方法 */ sleep: function sleep(timer) { return new Promise(function (resolve) { setTimeout(function () { resolve(); }, typeof timer === 'function' ? timer() : ~~timer); }); }, /** * 合并参数, 注意hash,一般运用场景少,不包含此功能 */ concatSearch: function concatSearch(url, data) { if (!url) { return url; } data = data || {}; /** * 防止hash */ var surl = url.split('#'); var queryString = searchParams(data); function searchParams(d) { var result = ''; for (var i in d) { if (d.hasOwnProperty(i)) { result += '&' + i + '=' + d[i]; // 一般来讲需要去除原有参数,附加新参数 surl[0] = surl[0].replace(new RegExp('(?:\\?|\\&)' + i + '=[^&$]+'), ''); } } return result; } function checkSearch(iurl) { if (iurl.indexOf('&') > 0) { iurl = iurl.replace('?', '&').replace('&', '?'); } return iurl; } return checkSearch(surl[0] + queryString) + (surl[1] ? '#' + surl[1] : ''); }, /** * 定时任务 * @param {function} func - 执行主体函数 * @param {number} [time] - 执行时间间隔 * @param {function} [premise] - 前提条件, 主要功能针对某些情况满足条件需要自动放弃任务 * @returns object */ setTimeTask: function setTimeTask(func, time, premise) { var idTimer = null; var status = 'Off'; var loopCount = 0; var whole = false; var _execFunc = function execFunc() { for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } // 针对条件满足,并自动放弃执行任务情况 if (typeof premise === 'function' && premise.apply(undefined, args.concat([loopCount])) === false) { helpers.stop(); } if (status === 'ON') { idTimer = setTimeout.apply(undefined, [function () { for (var _len3 = arguments.length, props = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { props[_key3] = arguments[_key3]; } func.apply(undefined, props.concat([loopCount])); loopCount++; _execFunc.apply(undefined, props); }, time].concat(args)); if (whole) { whole = false; func.apply(undefined, _toConsumableArray(props)); } } }; var helpers = { start: function start() { status = 'ON'; _execFunc.apply(undefined, arguments); return this; }, intact: function intact() { whole = true; this.start.apply(this, arguments); return this; }, stop: function stop() { status = 'Off'; whole = false; clearTimeout(idTimer); return this; }, destruct: function destruct() { this.stop(); whole = loopCount = idTimer = status = _execFunc = null; } }; return helpers; }, /** * css属性支持情况 * @param {string} name - css属性名称 * @returns boolean */ checkCssProperty: function checkCssProperty(name) { return typeof document.body.style[name] !== 'undefined'; }, /** * 隐身数据展示 如:姓名、手机、身份证 等 * @param {string} value - 字符串数据 * @param {array} indexs - 显示位的坐标 * @returns string */ secrecy: function secrecy(value, indexs) { if (!value) return value; value = value.toString(); if (value.length === 1) return value; var _indexs = _slicedToArray(indexs, 2), start = _indexs[0], end = _indexs[1]; if (start > end) { var _ref5 = [start, end]; end = _ref5[0]; start = _ref5[1]; } start = Math.max(0, start); end = Math.min(value.length, end); return value.slice(0, start) + '*'.repeat(value.length - start - end) + value.slice(end === 0 ? value.length : -end); }, /** * uuid 生成 * @param {string} [tpl] - 生成的uuid模板 * @returns string */ uuid: function uuid() { var tpl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'; return ('' + tpl).replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0; var v = c === 'x' ? r : r & 0x3 | 0x8; return v.toString(16); }); }, /** * proTable中的 valueEnum 与 dataSource数据结构互转 * @param {array|object} data - 需要转换的数据 */ enumSource: function enumSource(data) { var _this5 = this; var result = void 0; if (Array.isArray(data)) { result = {}; data.forEach(function (v) { result[v.value] = _extends({ text: v.label }, _this5.omit(v, ['value', 'label'], true)); }); } else if (this.isType(data, 'object')) { result = []; Object.keys(data).forEach(function (v) { result.push(_extends({ label: data[v].text, value: v }, _this5.omit(data[v], ['text'], true))); }); } return result || data; }, /** * 简单的防爆处理函数, 简单的场景可以适用, 严格场景还是采用节流、防抖来处理比较好 * @param {number} sleep - 相隔下个事务处理间隔的秒数 */ burst: function burst() { var sleep = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1200; if (burstTid) { clearTimeout(burstTid); } burstTid = setTimeout(function () { burstFlag = 0; }, sleep); burstFlag++; return burstFlag < 2; }, /** * 多个参数、对象之间的数据合并操作 * 与assign最大不同之处就是assign没有排除忽略字段,如果undefined也会合并过来 */ merge: function merge() { var objs = arguments; if (objs.length < 2 || this.isType(objs[1]) !== 'Object') { return objs[0]; } var refer = objs.length > 2 && Array.isArray(objs[objs.length - 1]) ? objs[objs.length - 1] : [undefined]; for (var i in objs[1]) { if (Object.hasOwnProperty.call(objs[1], i) && refer.indexOf(objs[1][i]) === -1) { objs[0][i] = objs[1][i]; } } var ia = Array.from(objs).slice(2); ia.unshift(objs[0]); return this.merge.apply(this, ia); } }; exports.default = Common; /** 一家说 楼书功能缩放功能 pageScale: function(){ // 扫码, 分享等途径出来的页面是没有父页面的, 这里需要调用自己的缩放方法 var ifmPageScale = function( debar ){ debar = parseFloat( debar ) || 0; var phoneScale = 1, phoneWidth = $(window).width(), height = $(window).height(), phoneScale = phoneWidth/640, phoneYScale = (height-debar)/1038, scale = 1/phoneScale*100; return {x: phoneScale, y: phoneYScale, height: 1/phoneYScale*100+"%", width: scale+'%'} } var phoneScale = ifmPageScale( ), dom = $('#coolapp .wrap'), musDom = $('#soundbox'), CSS = { 'transform':'scale('+phoneScale.x+','+phoneScale.y+')', 'transform-origin':'left top', 'height':phoneScale.height, 'width':phoneScale.width }; dom.css( CSS ); musDom.css({transform:'scale('+phoneScale.x+','+phoneScale.y+')','transform-origin':'left top'} ); } */ // 由平级关系的对象转化为树型数据tree /** function deal2Tree(data, options) { options = options || {parentId:'parentId',id:'menuId'}; const originData = JSON.parse(JSON.stringify(data)); function Delete(array, callback) { const result = []; let retIdx = 0; while(Array.isArray(array) && retIdx>-1) { retIdx = array.findIndex(callback); if (retIdx > -1) { result.push(array.splice(retIdx, 1)[0]); } } return result; } function execMain() { function findLeaf(arr, cb) { if (Array.isArray(arr) && arr.length) { arr.forEach(item => { if (Array.isArray(item.children) && item.children.length) { findLeaf(item.children, cb); } else { // 查找到目标元素 cb(item); } }); } } let flag = Date.now(); while(Array.isArray(originData) && originData.length && Date.now() - flag < 800) { findLeaf(result, (row) => { row.children = Delete(originData, (v) => v[options.parentId] === row[options.id]); }); } } const result = Delete(originData, (v) => v[options.parentId] === 0); execMain(); return result } */ module.exports = exports['default'];