export default { //身份证验证 isCardNo(card) { // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X var reg = /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/; if (reg.test(card) === false) { console.log(card); return false; } return true }, // 金额显示变化 getMoneyStyle(value = 0) { if (typeof value == 'string') { value = (+value).toFixed(2) } if (typeof value == 'number') { value = value.toFixed(2) } // 将字符串转为数组 let n = value.split(""); // 反转数组并复制循环处理 let arr = n.reverse().map(function(e, ind, ar) { // 判断当前下标是否为3的整数倍数且不为最后一个下标 if (ind % 3 == 0 && ind / 3 > 1 && ind != ar.length) { return e + ',' } else { return e } }) // 反转数组回复原来排序并合并回字符串 arr = arr.reverse().join('') return arr; }, // 计算倒计时时间 timeComputed(time) { // 获取当前时间 const actTime = (new Date()).getTime(); // 获取到期时间 let stopTime = time - actTime; // 判断是否小于0 if (stopTime < 0) { stopTime = stopTime * -1 } let day = Math.floor(stopTime / 1000 / 60 / 60 / 24) //获取剩余天数 let hours = Math.floor((stopTime / 1000 / 60 / 60) % 24); //获取剩余小时数 let minutes = Math.floor((stopTime / 1000 / 60) % 60); //获取分钟 let seconds = Math.floor((stopTime / 1000) % 60); //获取秒数 return { hours, //倒计时小时数 minutes, //倒计时分钟数 seconds, //倒计时秒数 day //倒计时天数 } }, // 调用打开地图方法 openMap(e) { const that = this return new Promise((resolve, reject) => { wx.getSetting({ success(res) { //这里判断是否有地位权限 if (!res.authSetting['scope.userLocation']) { wx.showModal({ title: '提示', content: '请求获取位置权限', success: function(res) { if (res.confirm == false) { // 授权失败 reject() return false; } wx.openSetting({ success(res) { //如果再次拒绝则返回页面并提示 if (!res.authSetting[ 'scope.userLocation']) { wx.showToast({ title: '此功能需获取位置信息,请重新设置', duration: 3000, icon: 'none' }) } else { //允许授权,调用地图 resolve() } } }) } }) } else { //如果有定位权限,调用地图 resolve() } } }) }) }, //时间戳转换成时间 getTime(time, type) { const num = 13 - (time + '').length; let l = 1; //倍数 for (let i = 0; i < num; i++) { l += '0'; } // 重新解析为数字 l = parseInt(l) const date = new Date(parseInt(time) * l); const year = date.getFullYear(); const mon = date.getMonth() + 1; const day = date.getDate(); const hours = date.getHours(); const minu = date.getMinutes(); const sec = date.getSeconds(); return year + '-' + mon + '-' + day + ' ' + (hours < 10 ? `0${hours}` : hours) + ':' + (minu < 10 ? `0${minu}` : minu) + ':' + (sec < 10 ? `0${sec}` : sec); }, //除法函数,用来得到精确的除法结果 //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。 //调用:$h.Div(arg1,arg2) //返回值:arg1除以arg2的精确结果 Div: function(arg1, arg2) { arg1 = parseFloat(arg1); arg2 = parseFloat(arg2); var t1 = 0, t2 = 0, r1, r2; try { t1 = arg1.toString().split(".")[1].length; } catch (e) {} try { t2 = arg2.toString().split(".")[1].length; } catch (e) {} r1 = Number(arg1.toString().replace(".", "")); r2 = Number(arg2.toString().replace(".", "")); return this.Mul(r1 / r2, Math.pow(10, t2 - t1)); }, //加法函数,用来得到精确的加法结果 //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 //调用:$h.Add(arg1,arg2) //返回值:arg1加上arg2的精确结果 Add: function(arg1, arg2) { arg2 = parseFloat(arg2); var r1, r2, m; try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 } try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 } m = Math.pow(100, Math.max(r1, r2)); return (this.Mul(arg1, m) + this.Mul(arg2, m)) / m; }, //减法函数,用来得到精确的减法结果 //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的减法结果。 //调用:$h.Sub(arg1,arg2) //返回值:arg1减去arg2的精确结果 Sub: function(arg1, arg2) { arg1 = parseFloat(arg1); arg2 = parseFloat(arg2); var r1, r2, m, n; try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 } try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 } m = Math.pow(10, Math.max(r1, r2)); //动态控制精度长度 n = (r1 >= r2) ? r1 : r2; return ((this.Mul(arg1, m) - this.Mul(arg2, m)) / m).toFixed(n); }, //乘法函数,用来得到精确的乘法结果 //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。 //调用:$h.Mul(arg1,arg2) //返回值:arg1乘以arg2的精确结果 Mul: function(arg1, arg2) { arg1 = parseFloat(arg1); arg2 = parseFloat(arg2); var m = 0, s1 = arg1.toString(), s2 = arg2.toString(); try { m += s1.split(".")[1].length } catch (e) {} try { m += s2.split(".")[1].length } catch (e) {} return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m); }, /** * opt object | string * to_url object | string * 例: * this.Tips('/pages/test/test'); 跳转不提示 * this.Tips({title:'提示'},'/pages/test/test'); 提示并跳转 * this.Tips({title:'提示'},{tab:1,url:'/pages/index/index'}); 提示并跳转值table上 * tab=1 一定时间后跳转至 table上 * tab=2 一定时间后跳转至非 table上 * tab=3 一定时间后返回上页面 * tab=4 关闭所有页面跳转至非table上 * tab=5 关闭当前页面跳转至table上 */ Tips(opt, to_url) { if (typeof opt == 'string') { to_url = opt; opt = {}; } let title = opt.title || '', icon = opt.icon || 'none', endtime = opt.endtime || 2000, success = opt.success; if (title) uni.showToast({ title: title, icon: icon, duration: endtime, success }) if (to_url != undefined) { if (typeof to_url == 'object') { let tab = to_url.tab || 1, url = to_url.url || ''; switch (tab) { case 1: //一定时间后跳转至 table setTimeout(function() { uni.switchTab({ url: url }) }, endtime); break; case 2: //跳转至非table页面 setTimeout(function() { uni.navigateTo({ url: url, }) }, endtime); break; case 3: //返回上页面 setTimeout(function() { // #ifndef H5 uni.navigateBack({ delta: parseInt(url), }) // #endif // #ifdef H5 history.back(); // #endif }, endtime); break; case 4: //关闭当前所有页面跳转至非table页面 setTimeout(function() { uni.reLaunch({ url: url, }) }, endtime); break; case 5: //关闭当前页面跳转至非table页面 setTimeout(function() { uni.redirectTo({ url: url, }) }, endtime); break; } } else if (typeof to_url == 'function') { setTimeout(function() { to_url && to_url(); }, endtime); } else { //没有提示时跳转不延迟 setTimeout(function() { uni.navigateTo({ url: to_url, }) }, title ? endtime : 0); } } } }