function isString(str) { return (typeof str == 'string') && str.constructor == String; } function isArray(obj) { return (typeof obj == 'object') && obj.constructor == Array; } function sub_last(str){ return str.substring(0, str.length - 1) } function trim(str) { return str.replace(/(^s*)|(s*$)/g, "");} function e(e) { var r = ""; for (var t in e) r += (r ? "&" : "") + t + "=" + e[t]; return r; } function utf16to8(str) { var out, i, len, c; out = ""; len = str.length; for (i = 0; i < len; i++) { c = str.charCodeAt(i); if ((c >= 0x0001) && (c <= 0x007F)) { out += str.charAt(i); } else if (c > 0x07FF) { out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F)); out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F)); out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); } else { out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F)); out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); } } return out; } function utf8to16(str) { var out, i, len, c; var char2, char3; out = "";len = str.length; i = 0; while (i < len) { c = str.charCodeAt(i++); switch (c >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: // 0xxxxxxx out += str.charAt(i - 1); break; case 12: case 13: // 110x xxxx 10xx xxxx char2 = str.charCodeAt(i++); out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); break; case 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = str.charCodeAt(i++); char3 = str.charCodeAt(i++); out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)); break; } } return out; } function unserialize_o(ss) { var p = 0, ht = [], hv = 1,r = null; function unser_null() { p++; return null; } function unser_boolean() { p++; var b = (ss.charAt(p++) == '1'); p++; return b; } function unser_integer() { p++; var i = parseInt(ss.substring(p, p = ss.indexOf(';', p))); p++; return i;} function unser_double() { p++;var d = ss.substring(p, p = ss.indexOf(';', p)); switch (d) { case 'INF': d = Number.POSITIVE_INFINITY; break; case '-INF': d = Number.NEGATIVE_INFINITY; break; default: d = parseFloat(d); } p++; return d; } function unser_string() { p++;var l = parseInt(ss.substring(p, p = ss.indexOf(':', p))); p += 2; var s = utf8to16(ss.substring(p, p += l)); p += 2; return s; } function unser_array() { p++; var n = parseInt(ss.substring(p, p = ss.indexOf(':', p))); p += 2; var a = []; ht[hv++] = a; for (var i = 0; i < n; i++) { var k; switch (ss.charAt(p++)) { case 'i': k = unser_integer(); break; case 's': k = unser_string(); break; case 'U': k = unser_unicode_string(); break; default: return false; } a[k] = __unserialize(); } p++; return a; } function unser_object() { p++; var l = parseInt(ss.substring(p, p = ss.indexOf(':', p))); p += 2; var cn = utf8to16(ss.substring(p, p += l)); p += 2; var n = parseInt(ss.substring(p, p = ss.indexOf(':', p))); p += 2; if (eval(['typeof(', cn, ') == "undefined"'].join(''))) { eval(['function ', cn, '(){}'].join('')); } var o = eval(['new ', cn, '()'].join('')); ht[hv++] = o; for (var i = 0; i < n; i++) { var k; switch (ss.charAt(p++)) { case 's': k = unser_string(); break; case 'U': k = unser_unicode_string(); break; default: return false; } if (k.charAt(0) == '\0') { k = k.substring(k.indexOf('\0', 1) + 1, k.length); } o[k] = __unserialize(); } p++; if (typeof (o.__wakeup) == 'function') o.__wakeup(); return o; } function unser_custom_object() { p++; var l = parseInt(ss.substring(p, p = ss.indexOf(':', p))); p += 2; var cn = utf8to16(ss.substring(p, p += l)); p += 2; var n = parseInt(ss.substring(p, p = ss.indexOf(':', p))); p += 2; if (eval(['typeof(', cn, ') == "undefined"'].join(''))) { eval(['function ', cn, '(){}'].join('')); } var o = eval(['new ', cn, '()'].join('')); ht[hv++] = o; if (typeof (o.unserialize) != 'function') p += n; else o.unserialize(ss.substring(p, p += n)); p++; return o; } function unser_unicode_string() { p++; var l = parseInt(ss.substring(p, p = ss.indexOf(':', p))); p += 2; var sb = []; for (i = 0; i < l; i++) { if ((sb[i] = ss.charAt(p++)) == '\\') { sb[i] = String.fromCharCode(parseInt(ss.substring(p, p += 4), 16)); } } p += 2; return sb.join(''); } function unser_ref() { p++; var r = parseInt(ss.substring(p, p = ss.indexOf(';', p))); p++; return ht[r];} function __unserialize() { switch (ss.charAt(p++)) { case 'N': return ht[hv++] = unser_null(); case 'b': return ht[hv++] = unser_boolean(); case 'i': return ht[hv++] = unser_integer(); case 'd': return ht[hv++] = unser_double(); case 's': return ht[hv++] = unser_string(); case 'U': return ht[hv++] = unser_unicode_string(); case 'r': return ht[hv++] = unser_ref(); case 'a': return unser_array(); case 'O': return unser_object(); case 'C': return unser_custom_object(); case 'R': return unser_ref(); default: return false; } } return __unserialize(); } //---数组序列化的反转--- function unserialize(ss) { if (ss=="" || ss==undefined || ss==null) return ''; //ss ='a:2:{i:0;s:60:"/public/upload/comment/8704/2017/10-14/15079840099736199.png";i:1;s:60:"/public/upload/comment/8704/2017/10-14/15079840132718554.jpg";}'; ss=ss.substring(7); var arr = ss.split('i:'), rs=new Array(); for (var i = 0; i < arr.length;i++){ var ind0 = arr[i].indexOf('/public'); var ind1 = arr[i].indexOf('";'); var txt = arr[i].substring(ind0, ind1); rs.push(txt); } return rs; } //-----判断一个对象是不是空对象-------- function isEmptyObject(obj) { for (var key in obj) { return false }; return true }; function gettimestamp(){ var timestamp = Date.parse(new Date()); timestamp = timestamp / 1000; return timestamp; } function measureText(text, fontSize = 10) { text = String(text); var text = text.split(''); var width = 0; text.forEach(function (item) { if (/[a-zA-Z]/.test(item)) { width += 7; } else if (/[0-9]/.test(item)) { width += 5.5; } else if (/\./.test(item)) { width += 2.7; } else if (/-/.test(item)) { width += 3.25; } else if (/[\u4e00-\u9fa5]/.test(item)) { //中文匹配 width += 10; } else if (/\(|\)/.test(item)) { width += 3.73; } else if (/\s/.test(item)) { width += 2.5; } else if (/%/.test(item)) { width += 8; } else { width += 10; } }); return width * fontSize / 10; } //验证手机号 function check_mobile(phoneMobile){ var myreg = /^(((11[0-9]{1})|(12[0-9]{1})|(13[0-9]{1})|(14[0-9]{1})|(15[0-9]{1})|(16[0-9]{1})|(19[0-9]{1})|(18[0-9]{1})|(17[0-9]{1}))+\d{8})$/; var ob={code:1}; if (phoneMobile.length === 0) { ob.title='输入的手机号为空'; ob.code=-1; } else if (phoneMobile.length < 11) { ob.title ='手机号长度有误!'; ob.code = -1; } else if (!myreg.test(phoneMobile)) { ob.title = '手机号格式有误!'; ob.code = -1; } return ob; } //获取随机元素 function get_rand_item(arr){ if(!arr) return null; if(arr.length<=0) return null; if(arr.length==1) return arr[0]; var ind=Math.floor(Math.random()*arr.length); if(ind==arr.length) ind=arr.length-1; return arr[ind]; } function getDistance(lat1, lng1, lat2, lng2){ var radLat1 = lat1*Math.PI / 180.0; var radLat2 = lat2*Math.PI / 180.0; var a = radLat1 - radLat2; var b = lng1*Math.PI / 180.0 - lng2*Math.PI / 180.0; var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2))); s = s *6378.137 ;// EARTH_RADIUS; return s; } //画布画椭圆矩形 function draw_randon_rect(ctx,x,y,r,w,h){ ctx.save(); // 开始绘制 ctx.beginPath(); // 因为边缘描边存在锯齿,最好指定使用 transparent 填充 // 这里是使用 fill 还是 stroke都可以,二选一即可 ctx.setFillStyle('rgb(237,188,150)') // ctx.setStrokeStyle('transparent') // 左上角 ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 1.5) // border-top ctx.moveTo(x + r, y) ctx.lineTo(x + w - r, y) ctx.lineTo(x + w, y + r) // 右上角 ctx.arc(x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2) // border-right ctx.lineTo(x + w, y + h - r) ctx.lineTo(x + w - r, y + h) // 右下角 ctx.arc(x + w - r, y + h - r, r, 0, Math.PI * 0.5) // border-bottom ctx.lineTo(x + r, y + h) ctx.lineTo(x, y + h - r) // 左下角 ctx.arc(x + r, y + h - r, r, Math.PI * 0.5, Math.PI) // border-left ctx.lineTo(x, y + r) ctx.lineTo(x + r, y) // 这里是使用 fill 还是 stroke都可以,二选一即可,但是需要与上面对应 ctx.fill(); } /** * @param {Object} num 数量,最大5 * @param {Object} x 中心坐标 * @param {Object} y y中心坐标 * @param {Object} sp 圆的间隔 * @param {Object} r 圆的半径 */ function get_box_arr(num,x,y,sp,r){ if(num==1) return [{x:x,y:y}]; if(num==2) return [{x:x-sp/2-r,y:y},{x:x+sp/2+r,y:y}]; if(num==3) return [{x:x-sp-2*r,y:y},{x:x,y:y},{x:x+sp+2*r,y:y}]; if(num==4) return [{x:x-sp/2-r-sp-2*r,y:y},{x:x-sp/2-r,y:y},{x:x+sp/2+r,y:y},{x:x+sp/2+r+sp+2*r,y:y}]; if(num==5) return [{x:x-2*sp-4*r,y:y},{x:x-sp-2*r,y:y},{x:x,y:y},{x:x+sp+2*r,y:y},{x:x+2*sp+4*r,y:y}]; } /** * @param {Object} ctx 画图句柄 * @param {Object} x x坐标 * @param {Object} y y坐标 * @param {Object} img 画的图片 * @param {Object} color 边框的颜色 */ function draw_circle(ctx,x,y,r,img,color,unit){ ctx.save(); ctx.beginPath(); //开始绘制 ctx.arc(x,y,r,0,2 * Math.PI); ctx.setLineWidth(4 * unit); ctx.setStrokeStyle('red'); ctx.setFillStyle("white"); ctx.fill(); ctx.clip(); ctx.drawImage(img,x-r,y-r,2*r,2*r); ctx.restore(); } function null_promise(){ var promise=new Promise(function(resolve, reject){ var ob={code:-1,data:null}; resolve(ob); }); return promise; } //---合并数组去掉重复项--- function mergeArray(arr1, arr2){ for (var i = 0 ; i < arr1.length ; i ++ ){ for(var j = 0 ; j < arr2.length ; j ++ ){ if (arr1[i] === arr2[j]){ arr1.splice(i,1); //利用splice函数删除元素,从第i个位置,截取长度为1的元素 } } } //alert(arr1.length) for(var i = 0; i > 2); strin += base64EncodeChars.charAt((c1 & 0x3) << 4); strin += "=="; break; } c2 = str.charCodeAt(i++); if (i == len) { strin += base64EncodeChars.charAt(c1 >> 2); strin += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); strin += base64EncodeChars.charAt((c2 & 0xF) << 2); strin += "="; break; } c3 = str.charCodeAt(i++); strin += base64EncodeChars.charAt(c1 >> 2); strin += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); strin += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)); strin += base64EncodeChars.charAt(c3 & 0x3F) } return strin } function ob_to_parm(ob){ var parm=""; for( var key in ob){ parm+="&"+key+"="+ob[key]; } parm = parm.substr(1); return parm; } function encodeUTF8(s) { var i, r = [], c, x; for (i = 0; i < s.length; i++) if ((c = s.charCodeAt(i)) < 0x80) r.push(c); else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x1F), 0x80 + (c & 0x3F)); else { if ((x = c ^ 0xD800) >> 10 == 0) //对四字节UTF-16转换为Unicode c = (x << 10) + (s.charCodeAt(++i) ^ 0xDC00) + 0x10000, r.push(0xF0 + (c >> 18 & 0x7), 0x80 + (c >> 12 & 0x3F)); else r.push(0xE0 + (c >> 12 & 0xF)); r.push(0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F)); }; return r; }; // 字符串加密成 hex 字符串 function sha1(s) { var data = new Uint8Array(encodeUTF8(s)) var i, j, t; var l = ((data.length + 8) >>> 6 << 4) + 16, s = new Uint8Array(l << 2); s.set(new Uint8Array(data.buffer)), s = new Uint32Array(s.buffer); for (t = new DataView(s.buffer), i = 0; i < l; i++)s[i] = t.getUint32(i << 2); s[data.length >> 2] |= 0x80 << (24 - (data.length & 3) * 8); s[l - 1] = data.length << 3; var w = [], f = [ function () { return m[1] & m[2] | ~m[1] & m[3]; }, function () { return m[1] ^ m[2] ^ m[3]; }, function () { return m[1] & m[2] | m[1] & m[3] | m[2] & m[3]; }, function () { return m[1] ^ m[2] ^ m[3]; } ], rol = function (n, c) { return n << c | n >>> (32 - c); }, k = [1518500249, 1859775393, -1894007588, -899497514], m = [1732584193, -271733879, null, null, -1009589776]; m[2] = ~m[0], m[3] = ~m[1]; for (i = 0; i < s.length; i += 16) { var o = m.slice(0); for (j = 0; j < 80; j++) w[j] = j < 16 ? s[i + j] : rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1), t = rol(m[0], 5) + f[j / 20 | 0]() + m[4] + w[j] + k[j / 20 | 0] | 0, m[1] = rol(m[1], 30), m.pop(), m.unshift(t); for (j = 0; j < 5; j++)m[j] = m[j] + o[j] | 0; }; t = new DataView(new Uint32Array(m).buffer); for (var i = 0; i < 5; i++)m[i] = t.getUint32(i << 2); var hex = Array.prototype.map.call(new Uint8Array(new Uint32Array(m).buffer), function (e) { return (e < 16 ? "0" : "") + e.toString(16); }).join(""); return hex; }; //将JS数组对象按其某个键值重组成Map对象 function convert_arr_key(list,key){ let keyObs = {} list.forEach(item => { keyObs[item[key]] = item }) return keyObs; } module.exports = { formatTime: function(e, r) { var t = e ? new Date(1e3 * e) : new Date(), n = t.getFullYear(), o = t.getMonth() + 1, a = t.getDate(), u = t.getHours(), i = t.getMinutes(), f = t.getSeconds(), s = function(e) { return (e = e.toString())[1] ? e : "0" + e; }; return void 0 !== r && 0 == r ? [ n, o, a ].map(s).join("-") + " " + [ u, i ].map(s).join(":") : [ n, o, a ].map(s).join("-") + " " + [ u, i, f ].map(s).join(":"); }, format: function(e, r) { var t = new Date(); t.setTime(1e3 * e); var n = { "M+": t.getMonth() + 1, "d+": t.getDate(), "h+": t.getHours(), "m+": t.getMinutes(), "s+": t.getSeconds(), "q+": Math.floor((t.getMonth() + 3) / 3), S: t.getMilliseconds() }; void 0 === r && (r = "yyyy-MM-dd hh:mm:ss"), /(y+)/.test(r) && (r = r.replace(RegExp.$1, (t.getFullYear() + "").substr(4 - RegExp.$1.length))); for (var o in n) new RegExp("(" + o + ")").test(r) && (r = r.replace(RegExp.$1, 1 == RegExp.$1.length ? n[o] : ("00" + n[o]).substr(("" + n[o]).length))); return r; }, formar_no_full(e,char){ var t= new Date(1e3 * e); var c="-"; if(char) c=char; return t.getFullYear() +c+(t.getMonth() + 1)+c+t.getDate(); }, json2Form: function(e) { var r = []; for (var t in e) r.push(encodeURIComponent(t) + "=" + encodeURIComponent(e[t])); return r.join("&"); }, randomString: function(e) { e = e || 32; for (var r = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", t = r.length, n = "", o = 0; o < e; o++) n += r.charAt(Math.floor(Math.random() * (t + 1))); return n; }, inArray: function(e, r) { for (var t = 0; t < r.length; t++) if (e == r[t]) return !0; return !1; }, sortSize: function(e, r) { return void 0 === r && (r = 0), r ? e.sort(function(e, r) { return r - e; }) : e.sort(function(e, r) { return e - r; }), e; }, convertRequestArray: function(e, r) { for (var t = {}, n = 0; n < r.length; n++) t[e + "[" + n + "]"] = r[n]; return t; }, remainTime: function(e) { var r = "", t = !1, n = Math.floor(e / 864e5); r = n ? n + "天" : "", t = !!n, e -= 864e5 * n; var o = Math.floor(e / 36e5); r += o ? o + "时" : t ? "0时" : "", t = !!o, e -= 36e5 * o; var a = Math.floor(e / 6e4); r += a ? a + "分" : t ? "0分" : "", e -= 6e4 * a; var u = Math.floor(e / 1e3); return r += u ? u + "秒" : "0秒"; }, transTime: function(e) { var r = { hour: 0, minute: 0, second: 0 }, t = Math.floor(e / 36e5); r.hour = t || "0", e -= 36e5 * t; var n = Math.floor(e / 6e4); r.minute = n || "0", e -= 6e4 * n; var o = Math.floor(e / 1e3); return r.second = o || "0", r; }, Obj2Str: e, JumpTo: function(r, t, n) { var o = e(t); n ? wx.redirectTo({ url: r + o }) : wx.navigateTo({ url: r + o }); }, unserialize: unserialize, unserialize_o: unserialize_o, trim: trim, //去空格 isEmptyObject: isEmptyObject, //判断空对象 gettimestamp: gettimestamp, //获取时间戳 isString: isString, isArray: isArray, sub_last: sub_last,//去掉末尾一个字符 measureText: measureText,//画布需要的函数 check_mobile: check_mobile,//验证手机 get_rand_item:get_rand_item, //随机获取元素 getDistance:getDistance, //获取俩个经纬网度之间的距离 draw_randon_rect:draw_randon_rect ,//画图画圆角矩形 null_promise:null_promise,//返回空的promise get_box_arr:get_box_arr,//返回圆的数组 draw_circle:draw_circle,//绘制圆, mergeArray:mergeArray, //数组合并 isContained:isContained, //是否包含 base64_encode:base64_encode, //64位加密 ob_to_parm:ob_to_parm ,//对象变成参数 sha1:sha1, //sha1进行签名 convert_arr_key:convert_arr_key //将JS数组对象按其某个键值重组成Map对象 };