/** * 通用工具类 */ (function() { /** * 地址栏获取参数 * @param name 参数名称 * @return {*} */ function getparameter(name) { try { var reg = new regexp("(^|&)" + name + "=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if (r != null) { return decodeuri(r[2]); } return null; } catch (e) { log(e.message); } } /** * 列表数据转化为树形结构的列表 * @param source 数据源list * @param id 编号 * @param parentid 父级编号 * @param children 树形子集变量 * @returns {*} * 支持父级编号为 0或null * 原始数据[{id:1,titile:"标题",pid:0},{id:2,titile:"标题",pid:1}] * 转化树形数据:[{id:1,titile:"标题",pid:0,children:[{id:2,titile:"标题",pid:1}]}] */ function treedata(source, id, parentid, children) { var clonedata = json.parse(json.stringify(source)); return clonedata.filter(function (father) { var brancharr = clonedata.filter(function (child) { return father[id] == child[parentid]; }); brancharr.length > 0 ? father[children] = brancharr : ''; return !father[parentid] || father[parentid] == '0' || father[parentid] == null ; }); } //验证是否为子集 function childvalidate(sourcelist, id, parentid, key, parentkey) { var data = sourcelist.find(function (x) { return x[key] == parentid; }); if (data && data[parentkey] != '0' && data[parentkey]) { if (id == data[parentkey]) { return false; } return childvalidate(sourcelist, id, data[parentkey], key, parentkey); } return true; } //日期处理 var date = { //格式化时间 fmt: function(de, fmt) { var date = new date(typeof de == "string"?de.replace(/-/g, "/"):de); if (!fmt) { fmt = "yyyy-mm-dd"; } var o = { "m+": date.getmonth() + 1, //月份 "d+": date.getdate(), //日 "h+": date.gethours(), //小时 "m+": date.getminutes(), //分 "s+": date.getseconds(), //秒 "q+": math.floor((date.getmonth() + 3) / 3), //季度 "s": date.getmilliseconds() //毫秒 }; if (/(y+)/.test(fmt)) fmt = fmt.replace(regexp.$1, (date.getfullyear() + "").substr(4 - regexp.$1.length)); for (var k in o) if (new regexp("(" + k + ")").test(fmt)) fmt = fmt.replace(regexp.$1, (regexp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt; }, diyfmt: function (time) { //如果传进来的是字符串,转成时间 if(object.prototype.tostring.call(new date()) != object.prototype.tostring.call(time) ){ time = new date(time); } var nowdate = new date().gettime(); var dif = (nowdate - time)/1000; //时间字符串 var timestr =""; if(dif<60){ timestr = "刚刚"; }else if(dif<3600){ timestr = moment(time).format('a') + moment(time).format('h:mm'); }else if(dif<86400){ timestr = "昨天"; }else if(dif<172800){ timestr = moment(time).format("dddd"); }else if(dif<31536000){ timestr = moment(time).format("mmm do").replace(" ",""); }else{ timestr = moment(time).subtract(10, 'days').calendar(); } return timestr; } } var array = { //根据key清理arr里面重复的值 unique: function(arr, key) { if (arr.length == 0) { return; } var result = [arr[0]]; for (var i = 1; i < arr.length; i++) { var item = arr[i]; var repeat = false; var repeat = false; for (var j = 0; j < result.length; j++) { if (item[key] == result[j][key]) { if (item['write'] && result[j]['write'] == false) { break; } repeat = true; break; } } if (!repeat) { result.push(item); } } return result; }, //根据pro属性与value移除arr对应的值 remove: function(arr, attr, value) { for (var j = 0; j < arr.length; j++) { if (arr[j][attr] == value) { arr.splice(j, 1); break; } } } } var convert = { byte: function(bytes) { if (isnan(bytes)) { return ''; } var symbols = ['bytes', 'kb', 'mb', 'gb', 'tb', 'pb', 'eb', 'zb', 'yb']; var exp = math.floor(math.log(bytes) / math.log(2)); if (exp < 1) { exp = 0; } var i = math.floor(exp / 10); bytes = bytes / math.pow(2, 10 * i); if (bytes.tostring().length > bytes.tofixed(2).tostring().length) { bytes = bytes.tofixed(2); } return bytes + ' ' + symbols[i]; }, //根据经纬度计算记录 distance: function(lon1, lat1, lon2, lat2) { var def_pi = 3.14159265359; // pi var def_2pi = 6.28318530712; // 2*pi var def_pi180 = 0.01745329252; // pi/180.0 var def_r = 6370693.5; // radius of earth var ew1, ns1, ew2, ns2; var dx, dy, dew; var distance; // 角度转换为弧度 ew1 = lon1 * def_pi180; ns1 = lat1 * def_pi180; ew2 = lon2 * def_pi180; ns2 = lat2 * def_pi180; // 经度差 dew = ew1 - ew2; // 若跨东经和西经180 度,进行调整 if (dew > def_pi) dew = def_2pi - dew; else if (dew < -def_pi) dew = def_2pi + dew; dx = def_r * math.cos(ns1) * dew; // 东西方向长度(在纬度圈上的投影长度) dy = def_r * (ns1 - ns2); // 南北方向长度(在经度圈上的投影长度) // 勾股定理求斜边长 distance = math.sqrt(dx * dx + dy * dy).tofixed(0); return distance; } } var log = function(msg) { if (ms.debug) { console.log(msg); } } var store = { set: function(key, value) { window.sessionstorage.setitem(key, value); }, get: function(key) { return window.sessionstorage.getitem(key); }, remove: function(key) { window.sessionstorage.removeitem(key); } } var cookie = { } var util = { getparameter: getparameter, treedata:treedata, childvalidate:childvalidate, date: date, array: array, log: log, convert: convert, store: store, } if (typeof ms != "object") { window.ms = {}; } window.ms.util = util; window.ms.debug = false }());