const api = require('../request/api'); const http = require('../request/http.js'); const storeKeys = require('./storageKeys'); /** * 工具类 */ module.exports = { // 提示 toast(text, time = 1500) { wx.showToast({ title: text, icon: 'none', duration: time }) }, //重置缓存 setStorageSync(key, value) { wx.setStorageSync(key, value) }, //获取缓存 getStorageSync(key) { try { let value = wx.getStorageSync(key) || ""; return value; } catch (e) { return ""; } }, //删除缓存 removeStorageSync(key) { wx.removeStorageSync(key); }, // 防抖 throttle: function (fn, gapTime) { if (gapTime == null || gapTime == undefined) { gapTime = 1000; } let _lastTime = null; return function () { let _nowTime = +new Date() if (_nowTime - _lastTime > gapTime || !_lastTime) { fn.apply(this, arguments); _lastTime = _nowTime; } } }, //scene解码 scene_decode(e) { if (e === undefined) return {}; let scene = decodeURIComponent(e), params = scene.split(','), data = {}; for (let i in params) { let val = params[i].split(':'); val.length > 0 && val[0] && (data[val[0]] = val[1] || null) } return data; }, //格式化日期格式 (用于兼容ios Date对象) format_date(time) { // 将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式 return time.replace(/\-/g, "/"); }, //对象转URL urlEncode(data) { var _result = []; for (var key in data) { var value = data[key]; if (value.constructor == Array) { value.forEach(_value => { _result.push(key + "=" + _value); }); } else { _result.push(key + '=' + value); } } return _result.join('&'); }, //遍历对象 objForEach(obj, callback) { Object.keys(obj).forEach((key) => { callback(obj[key], key); }); }, //是否在数组内 inArray(search, array) { for (var i in array) { if (array[i] == search) { return true; } } return false; }, // canvas,文字,x,y,最大宽,行高,行数,字体样式 canvasWraptitleText(canvas, text, x, y, maxWidth, lineHeight, maxRowNum, font) { if (typeof text != 'string' || typeof x != 'number' || typeof y != 'number') { return; } canvas.font = font; let arrText = text.split(''); let line = ''; let rowNum = 1 for (let n = 0; n < arrText.length; n++) { let testLine = line + arrText[n]; let metrics = canvas.measureText(testLine); let testWidth = metrics.width; if (testWidth > maxWidth && n > 0) { if (rowNum >= maxRowNum) { let arrLine = testLine.split('') arrLine.splice(-2) let newTestLine = arrLine.join("") newTestLine += "..." canvas.fillText(newTestLine, x, y); return } canvas.fillText(line, x, y); line = arrText[n]; y += lineHeight; rowNum += 1 } else { line = testLine; } } canvas.fillText(line, x, y); }, //设定宽 设定高 图片本身宽 图片本身高 getSXYWH(cW, cH, iW, iH) { let width = cW; //设定宽 let height = cH; //设定高 let w = iW; //图片本身宽 let h = iH; //图片本身高 let dw = width / w; //宽比例 let dh = height / h; //高比例 let sX; //裁剪偏移X let sY; //裁剪偏移Y let sW; //裁剪宽 let sH; //裁剪高 // 裁剪图片中间部分 if (w > width && h > height || w < width && h < height) { if (dw > dh) { sX = 0; sY = (h - height / dw) / 2; sW = w sH = height / dw } else { sX = (w - width / dh) / 2; sY = 0; sW = width / dh sH = h } } else { // 拉伸图片 if (w < width) { sX = 0 sY = (h - height / dw) / 2; sW = w sH = height / dw } else { sX = (w - width / dh) / 2; sY = 0; sW = width / dh sH = h } } let returnData = { sX, sY, sW, sH }; return returnData }, //事件防抖 throttle: function(fn, gapTime) { if (gapTime == null || gapTime == undefined) {gapTime = 1000;} let _lastTime = null; return function () { let _nowTime = + new Date() if (_nowTime - _lastTime > gapTime || !_lastTime) { fn.apply(this, arguments); _lastTime = _nowTime; } } }, //禁止金额输入多个小数点 money(param) { let num = param.toString(); //先转换成字符串类型 if (num.indexOf('.') == 0) { //第一位就是 . num = '0' + num } num = num.replace(/[^\d.]/g, ""); //清除“数字”和“.”以外的字符 num = num.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的 num = num.replace(".", "$#$").replace(/\./g, "").replace("$#$", "."); num = num.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'); //只能输入两个小数 if (num.indexOf(".") < 0 && num != "") { num = parseFloat(num); } return num }, //获取当前时间 formatTime(date,type){ const year = date.getFullYear() const month = date.getMonth() + 1 const day = date.getDate() const hour = date.getHours() const minute = date.getMinutes() const second = date.getSeconds() // 1: 2021-10-10 10:10:10 let joinType = "/"; if(type == 1){ joinType = "-" } return [year, month, day].map(this.formatNumber).join(joinType) + ' ' + [hour, minute, second].map(this.formatNumber).join(':') }, // 时间格式化输出 day--天 hours--时 minutes--分 seconds--秒 dateForma(micro_second,type) { let second = Math.floor(micro_second / 1000); let value; switch(type) { case "day": value = Math.floor(second / 3600 / 24); break; case "hours": value = this.formatNumber(Math.floor(second / 3600 % 24)); break; case "minutes": value = this.formatNumber(Math.floor(second / 60 % 60)); break; case "seconds": value = this.formatNumber(Math.floor(second % 60)); break; } return value; }, newDateForma(micro_second,type) { let second = micro_second; let value; switch(type) { case "day": value = Math.floor(second / 3600 / 24); break; case "hours": value = this.formatNumber(Math.floor(second / 3600 % 24)); break; case "minutes": value = this.formatNumber(Math.floor(second / 60 % 60)); break; case "seconds": value = this.formatNumber(Math.floor(second % 60)); break; } return value; }, formatNumber(n){ n = n.toString() return n[1] ? n : '0' + n }, toDecimal2(x) { var f = parseFloat(x); if (isNaN(f)) { return ""; } var f = Math.round(x*100)/100; var s = f.toString(); var rs = s.indexOf('.'); if (rs < 0) { rs = s.length; s += '.'; } while (s.length <= rs + 2) { s += '0'; } return s; } };