@tanshenghu/web-utils
Version:
web公共方法
1,348 lines (1,162 loc) • 38.5 kB
JavaScript
;
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'];