layui.define([], function (exports) {
'use strict';
var BASE_64 = function () {
var hexIn = false;
var hexOut = false;
var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var base64DecodeChars = new Array(
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
function base64encode(str) {
var out, i, len;
var c1, c2, c3;
var charCode;
len = str.length;
i = 0;
out = "";
while (i < len) {
c1 = (hexIn ? str[i++] : str.charCodeAt(i++)) & 0xff;
if (i == len) {
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt((c1 & 0x3) << 4);
out += "==";
break;
}
c2 = (hexIn ? str[i++] : str.charCodeAt(i++));
if (i == len) {
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
out += base64EncodeChars.charAt((c2 & 0xF) << 2);
out += "=";
break;
}
c3 = (hexIn ? str[i++] : str.charCodeAt(i++));
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
out += base64EncodeChars.charAt(c3 & 0x3F);
}
return out;
}
function base64decode(str) {
var c1, c2, c3, c4;
var i, len, out;
var charCode;
len = str.length;
i = 0;
out = hexOut ? [] : "";
while (i < len) {
/* c1 */
do {
c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
} while (i < len && c1 == -1);
if (c1 == -1)
break;
/* c2 */
do {
c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
} while (i < len && c2 == -1);
if (c2 == -1)
break;
charCode = (c1 << 2) | ((c2 & 0x30) >> 4);
hexOut ? out.push(charCode) : out += String.fromCharCode(charCode);
/* c3 */
do {
c3 = str.charCodeAt(i++) & 0xff;
if (c3 == 61)
return out;
c3 = base64DecodeChars[c3];
} while (i < len && c3 == -1);
if (c3 == -1)
break;
charCode = ((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2);
hexOut ? out.push(charCode) : out += String.fromCharCode(charCode);
/* c4 */
do {
c4 = str.charCodeAt(i++) & 0xff;
if (c4 == 61)
return out;
c4 = base64DecodeChars[c4];
} while (i < len && c4 == -1);
if (c4 == -1)
break;
charCode = ((c3 & 0x03) << 6) | c4;
hexOut ? out.push(charCode) : out += String.fromCharCode(charCode);
}
return out;
}
function utf16to8(str) {
var out, i, len, c;
var charCode;
out = hexIn ? [] : "";
len = str.length;
for (i = 0; i < len; i++) {
c = hexIn ? str[i] : str.charCodeAt(i);
if ((c >= 0x0001) && (c <= 0x007F)) {
hexIn ? out.push(str[i]) : out += str.charAt(i);
} else if (c > 0x07FF) {
charCode = (0xE0 | ((c >> 12) & 0x0F));
hexIn ? out.push(charCode) : out += String.fromCharCode(charCode);
charCode = (0x80 | ((c >> 6) & 0x3F));
hexIn ? out.push(charCode) : out += String.fromCharCode(charCode);
charCode = (0x80 | ((c >> 0) & 0x3F));
hexIn ? out.push(charCode) : out += String.fromCharCode(charCode);
} else {
charCode = (0xC0 | ((c >> 6) & 0x1F));
hexIn ? out.push(charCode) : out += String.fromCharCode(charCode);
charCode = (0x80 | ((c >> 0) & 0x3F));
hexIn ? out.push(charCode) : out += String.fromCharCode(charCode);
}
}
return out;
}
function utf8to16(str) {
var out, i, len, c;
var char2, char3;
var charCode;
out = hexOut ? [] : "";
len = str.length;
i = 0;
while (i < len) {
c = hexOut ? str[i++] : str.charCodeAt(i++);
switch (c >> 4) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
// 0xxxxxxx
hexOut ? out.push(str[i - 1]) : out += str.charAt(i - 1);
break;
case 12:
case 13:
// 110x xxxx 10xx xxxx
char2 = hexOut ? str[i++] : str.charCodeAt(i++);
charCode = ((c & 0x1F) << 6) | (char2 & 0x3F);
hexOut ? out.push(charCode) : out += String.fromCharCode(charCode);
break;
case 14:
// 1110 xxxx 10xx xxxx 10xx xxxx
char2 = hexOut ? str[i++] : str.charCodeAt(i++);
char3 = hexOut ? str[i++] : str.charCodeAt(i++);
charCode = ((c & 0x0F) << 12) |
((char2 & 0x3F) << 6) |
((char3 & 0x3F) << 0);
hexOut ? out.push(charCode) : out += String.fromCharCode(charCode);
break;
}
}
return out;
}
function CharToHex(str) {
var out, i, len, c, h;
out = "";
len = str.length;
i = 0;
while (i < len) {
c = str.charCodeAt(i++);
h = c.toString(16);
if (h.length < 2)
h = "0" + h;
out += "\\x" + h + " ";
if (i > 0 && i % 8 == 0)
out += "\r\n";
}
return out;
}
function base64_encode(src, hI) {
if (isEmpty(hI)) hI = false;
hexIn = hI;
return base64encode(hexIn ? src : utf16to8(src));
}
function base64_decode(src, hO, out_de) {
if (isEmpty(hO)) hO = false;
if (isEmpty(out_de)) out_de = 'text';
hexOut = hO;
var ret = base64decode(src);
if (!hexOut || out_de == 'u' || out_de == 'd') {
ret = utf8to16(ret);
}
return ret;
}
return {
base64encode: base64encode,
base64decode: base64decode,
utf16to8: utf16to8,
utf8to16: utf8to16,
base64_encode: base64_encode,
base64_decode: base64_decode,
}
};
/**
* 时间转换, 年-月-日 / 年-月-日 时:分:秒
* @param {Number, String} utcDate 对应时间到 1970 年 1 月 1 日 的毫秒数
* @param {String} type 返回值格式 'ymd','hms',ymdhms'
* @returns {String} yyyy-mm-dd hh:mm:ss / yyyy-mm-dd / hh:mm:ss
*/
var utcToDate = function (utcDate, type) {
var date = new Date(utcDate);
var Y = date.getFullYear();
var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1);
var D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
var h = date.getHours() < 10 ? '0' + date.getHours() : date.getHours();
var m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();
var s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
var ymd, hms, ymdhms;
ymd = Y + '-' + M + '-' + D;
hms = h + ':' + m + ':' + s;
ymdhms = ymd + ' ' + hms;
switch (type) {
case 'ymd':
return ymd;
case 'hms':
return hms;
case 'ymdhms':
return ymdhms;
default:
return ymd;
}
};
var getNowMonth = function () {
var date = new Date();
var Y = date.getFullYear();
var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1);
var D = getDaysInMonth(Y, M);
return Y + '-' + M + '-01' + ' - ' + Y + '-' + M + '-' + D;
};
var getDaysInMonth = function (year, month) {
month = parseInt(month, 10); //parseInt(number,type)这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制。
var temp = new Date(year, month, 0);
return temp.getDate();
};
var dateToUtc = function (date) {
var index = date.indexOf(' ');
if (index != -1) {
var str1 = date.substring(0, index),
str2 = date.substring(index + 1);
var arr1 = str1.split('-'),
arr2 = str2.split(':');
return Date.UTC(+arr1[0], +arr1[1], +arr1[2], +arr2[0], +arr2[1], +arr2[2]);
} else {
var arr = date.split('-');
return Date.UTC(+arr[0], +arr[1], +arr[2]);
}
};
var MillisecondToDate = function (msd) {
var time = parseFloat(msd) / 1000;
if (null != time && "" != time) {
if (time > 60 && time < 60 * 60) {
time = parseInt(time / 60.0) + "分钟" + parseInt((parseFloat(time / 60.0) -
parseInt(time / 60.0)) * 60) + "秒";
}
else if (time >= 60 * 60 && time < 60 * 60 * 24) {
time = parseInt(time / 3600.0) + "小时" + parseInt((parseFloat(time / 3600.0) -
parseInt(time / 3600.0)) * 60) + "分钟" +
parseInt((parseFloat((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60) -
parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60)) * 60) + "秒";
}
else {
time = parseInt(time / 3600.0) + "小时" + parseInt((parseFloat(time / 3600.0) -
parseInt(time / 3600.0)) * 60) + "分钟" +
parseInt((parseFloat((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60) -
parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60)) * 60) + "秒";
}
}
return time;
};
var MillisecondToTime = function (msd) {
var time = parseFloat(msd) / 1000;
if (null != time && "" != time) {
if (time > 60 && time < 60 * 60) {
var a = parseInt(time / 60.0) < 10 ? ('0' + parseInt(time / 60.0)) : parseInt(time / 60.0);
var ms = parseInt((parseFloat(time / 60.0) - parseInt(time / 60.0)) * 60);
var b = (ms < 10) ? ('0' + ms) : ms;
time = '00:' + a + ':' + b;
}
else if (time >= 60 * 60 && time < 60 * 60 * 24) {
var H = parseInt(time / 3600.0) < 10 ? ('0' + parseInt(time / 3600.0)) : parseInt(time / 3600.0);
var ms = parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60);
var M = (ms < 10) ? ('0' + ms) : ms;
var ss = parseInt((parseFloat((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60) -
parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60)) * 60);
var S = (ss < 10) ? ('0' + ss) : ss;
time = H + ':' + M + ':' + S;
}
else {
var d = parseInt(time) < 10 ? ('0' + parseInt(time)) : parseInt(time);
time = '00:00:' + d;
}
}
return time;
};
var toMiner = function (hour, min, seconds) {
var miner;
miner = hour * (60 * 60 * 1000) + min * (60 * 1000) + seconds * 1000;
return miner;
};
var toHHmmss = function (data) {
var s;
var hours = parseInt((data % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = parseInt((data % (1000 * 60 * 60)) / (1000 * 60));
var seconds = (data % (1000 * 60)) / 1000;
s = (hours < 10 ? ('0' + hours) : hours) + ':' + (minutes < 10 ? ('0' + minutes) : minutes) + ':' + (seconds < 10 ? ('0' + seconds) : seconds);
return s;
};
var hourToSs = function (hour) {
return hour * 3600000;
};
var ssToHms = function (ss) {
var h = parseInt(ss / 3600000);
var m = parseInt(ss % 3600000 / 60000);
var s = parseInt(ss % 3600000 % 60000 / 1000);
return h + ':' + (m < 10 ? ('0' + m) : m) + ':' + (s < 10 ? ('0' + s) : s);
};
/**
* 解析地址信息
* @param {String} url 地址字符串 exam: http://localhost:8080/page/login?name=测试&id=1
* @returns {Object} obj 返回地址信息 exam: { name: '测试', id: 1 }
*/
var parseUrl = function (url) {
if (url.indexOf("?") === -1) {
return {};
}
url = decodeURIComponent(url);
var query = url.split("?")[1];
var queryArr = query.split("&");
var obj = {};
queryArr.forEach(function (item) {
var key = item.split("=")[0];
var value = item.split("=")[1];
obj[key] = decodeURIComponent(value);
});
return obj;
};
/**
* 直接获取当前地址信息
* @returns {Object} obj 返回地址信息 exam: { name: '测试', id: 1 }
*/
var getLocaMsg = function () {
var url = window.location.href;
return this.parseUrl(url);
};
/**
* 校验是否是日期
* @param {[type]} datestr [description]
* @return {Boolean} [description]
*/
var isDate = function (datestr) {
var result = datestr.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
if (result == null) {
return false;
}
var d = new Date(result[1], result[3] - 1, result[4]);
return (d.getFullYear() == result[1] && (d.getMonth() + 1) == result[3] && d.getDate() == result[4]);
};
/**
* 是否为数字
* @param {[type]} e [description]
* @return {Boolean} [description]
*/
var isNumber = function (e) {
var re = /^[0-9]+.?[0-9]*$/;
return re.test(e);
};
/**
* 校验是否为中文
* @param {[type]} str [description]
*/
var isChinese = function (str) {
if (str.length != 0) {
var reg = /^[\u0391-\uFFE5]+$/;
return reg.test(str);
} else {
return false;
}
};
/**
* 判断是否为空
* @param {[type]} [description]
* @return {Boolean} [description]
*/
var isEmpty = function (obj) {
if (typeof obj === "undefined" || obj === null || obj === "") {
return true;
}
return false;
};
var isUndefined = function (obj) {
if (typeof obj === "undefined") {
return true;
}
return false;
};
/**
* 判断是否为字符串
* @param {[type]} source
*/
var isString = function (source) {
return Object.prototype.toString.call(source) === "[object String]";
};
/**
* 判断是否为function
* @param t
* @returns {boolean}
*/
var isFunction = function e(t) {
return "function" == typeof t && "number" != typeof t.nodeType
};
/**
* trim
* @param str
* @returns
*/
var trim = function (str) { //删除左右两端的空格
return str.replace(/(^\s*)|(\s*$)/g, "");
};
var removeStrNull = function (str) {
return str.replace(/\s/g, "");
};
/**
* 是否是固定电话
* @param {[type]} phone [description]
* @return {[type]} [description]
*/
var isTelephone = function (phone) {
var phone_reg = new RegExp(/^([+]{0,1}\d{3,4}|\d{3,4}-)?\d{7,8}$/);
return phone_reg.test(phone);
};
/**
* 校验手机号码
* @param {[type]} mobile [description]
* @return {[type]} [description]
*/
var isMobilephone = function (mobile) {
var mobile_reg = new RegExp(/^0{0,1}1[0-9]{10}$/);
return mobile_reg.test(mobile);
};
/**
* 校验折扣
* @param {[type]} discount [description]
* @return {Boolean} [description]
*/
var isDiscount = function (discount) {
var reg = new RegExp(/^(0([\.]\d{1,2})|1|1.00|1.0)$/);
return reg.test(discount);
};
/**
* 校验电子邮箱
* @param {[type]} email [description]
* @return {[type]} [description]
*/
var isEmail = function (email) {
var email_reg = new RegExp(/^\w+([-+.]\w+)*@\w+([-.]\w+)*.\w+([-.]\w+)*$/);
return email_reg.test(email);
};
/**
* 校验身份证(简单校验)
* @param {[type]} str [description]
* @return {[type]} [description]
*/
var isIDCard = function (str) {
var IDCardReg = new RegExp(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/);
return IDCardReg.test(str)
};
/**
* 改变对象的值,如果未设置,报错
* @param {Object} obj 操作的对象
* @param {String} key 操作的属性
* @param {String} val 改变的值
*/
var xChange = function (obj, key, val) {
if (isUndefined(obj[key])) {
console.error(key + '不存在')
return;
}
obj[key] = val;
};
/**
* 空值安全返回
* @param {any} str
* @param {any} preText
*/
var xrtSafe = function (str, preText) {
if (isEmpty(str)) {
return preText;
}
return str;
};
/**
* 判断是否是数组
* @param {any} arg
*/
var isArray = function (arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
/**
* 多次window.onload事件
* @param {Function} func
*/
var addLoadEvent = function (func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function () {
oldonload();
func();
}
}
};
/**
* class 是否含有的判断
* @param {HTMLBaseElement} obj
* @param {CSS} cls
*/
var hasClass = function (obj, cls) {
return obj.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
};
/**
* class 添加
* @param {*} obj
* @param {*} cls
*/
var addClass = function (obj, cls) {
if (!hasClass(obj, cls)) obj.className += " " + cls;
};
/**
* class 移除
* @param {*} obj
* @param {*} cls
*/
var removeClass = function (obj, cls) {
if (hasClass(obj, cls)) {
var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
obj.className = obj.className.replace(reg, ' ');
}
};
/**
* 目标 class 切换
* @param {*} obj
* @param {*} cls
*/
var toggleClass = function (obj, cls) {
if (hasClass(obj, cls)) {
removeClass(obj, cls);
} else {
addClass(obj, cls);
}
};
/**
* 对象深拷贝,不能拷贝函数对象
* @param {*} obj
*/
var deepCopy = function (obj) {
return JSON.parse(JSON.stringify(obj))
};
/**
* insertBefore的补充
* @param newElement
* @param targetElement
*/
var insertAfters = function (newElement, targetElement) {
var parent = targetElement.parentNode;
if (parent.lastChild === targetElement) {
parent.appendChild(newElement);
} else {
targetElement.appendChild(newElement, targetElement.nextSibling);
}
};
/**
* 解析字符串为dom元素
* @param nodeList
* @returns {NodeListOf<Node & ChildNode>}
*/
var parseDom = function (nodeList) {
var objE = document.createElement("div");
objE.innerHTML = nodeList;
return objE.childNodes;
};
/**
* 除对象空值
* @param obj 初始对象
* @returns {Object} 去空对象
*/
var removeObjEmpty = function (obj) {
for (var item in obj) {
if (isEmpty(obj[item])) {
delete obj[item];
}
}
return obj;
};
var arrHas = function (item, arr) {
for (var i = 0, len = arr.length; i < len; i++) {
if (item === arr[i]) return true;
}
return false;
};
var eb64 = function (str) {
return window.btoa(str)
};
var db64 = function (b64) {
return window.atob(b64)
};
var MODENAME = 'utils';
var MODECONTENT = {
// ============= 判断 ========================
isDate: isDate, // 日期判断
isNumber: isNumber, // 数字判断
isChinese: isChinese, // 中文判断
isEmpty: isEmpty, // 空值判断
isUndefined: isUndefined, // 空值判断
isString: isString, // 字符串判断
isArray: isArray, // 数组判断
isFunction: isFunction, // 数组判断
isTelephone: isTelephone, // 固话判断
isMobilephone: isMobilephone, // 手机号码判断
isDiscount: isDiscount, // 折扣判断
isEmail: isEmail, // 电子邮箱校验
isIDCard: isIDCard, // 身份证简单校验
// ==============================================
// ============== 数据类型转换 ===================
utcToDate: utcToDate, // 时间转化
dateToUtc: dateToUtc, // 时间转化
hourToSs: hourToSs, // 时间转化
getNowMonth: getNowMonth,//获取当前月份日期范围
MillisecondToDate: MillisecondToDate,//时间戳转化为时分秒(例如:1小时30分钟0秒)
toMiner: toMiner,//时分秒转化为毫秒整数(例如:00:30:00)
toHHmmss: toHHmmss,//时间戳转化为时分秒(例如:00:30:00)
ssToHms: ssToHms,//时间戳转化为时分秒(例如:00:30:00)无上限
MillisecondToTime: MillisecondToTime,//毫秒整数转化为时分秒(例如:毫秒数转换为00:30:00)
parseUrl: parseUrl, // 解析url
getLocaMsg: getLocaMsg, // 获取当前地址信息
removeObjEmpty: removeObjEmpty, // 去除对象空值
eb64: BASE_64().base64_encode,
db64: BASE_64().base64_decode,
// db64_utf8: Base64._utf8_decode,
// ==============================================
// ============== 数据信息改变 ===================
trim: trim, // 去空格
removeStrNull: removeStrNull, // 去空格
xChange: xChange, // 对象已有值安全改变
xrtSafe: xrtSafe, // 空值安全返回
deepCopy: deepCopy, // 对象深拷贝,不能拷贝函数对象
arrHas: arrHas,
// ==============================================
// ============= 非数据类型工具封装 ==============
addLoadEvent: addLoadEvent, // window.onload多次
hasClass: hasClass, // 判断是否有class
addClass: addClass, // 添加class
removeClass: removeClass, // 移除class
toggleClass: toggleClass, // 增加或移除class(切换状态)
insertAfters: insertAfters, // 在元素后面插入元素
parseDom: parseDom, // 字符串转dom
// ==============================================
};
exports(MODENAME, MODECONTENT);
});