const app = getApp(); const tools = { timer:'', // 埋点倒计时 daoTime(){ let daoTime = uni.getStorageSync('daoTime') if(daoTime==''){//初次判断倒计时是否为空 uni.setStorageSync('daoTime',60)//设置倒计时 daoTime = uni.getStorageSync('daoTime') this.timer = setInterval(()=>{ uni.setStorageSync('daoTime',daoTime--)//设置倒计时 if(uni.getStorageSync('daoTime')<=0 || uni.getStorageSync('maiList').length==5){ uni.removeStorageSync('daoTime')//清空倒计时 clearInterval(this.timer)//关闭倒计时 // console.log('上/报,埋点'); uni.removeStorageSync('maiList')//清空上报参数 this.daoTime()//重新倒计时 } },1000) } else {//继续当前倒计时倒计 this.timer = setInterval(()=>{ uni.setStorageSync('daoTime',daoTime--)//设置倒计时 if(uni.getStorageSync('daoTime')<=0 || uni.getStorageSync('maiList').length==5){ uni.removeStorageSync('daoTime')//清空倒计时 clearInterval(this.timer)//关闭倒计时 // console.log('上报,埋点'); uni.removeStorageSync('maiList')//清空上报参数 this.daoTime()//重新倒计时 } },1000) } }, closeTimer(){ clearInterval(this.timer)//关闭倒计时 console.log('倒计时清空了'); }, weekDate(){//获取未来七天星期几,几号 let date = new Date() let year = date.getFullYear() let month = date.getMonth()+1 let day = date.getDate() let nth = date.getDay()//星期几 // console.log(year,month,day); let xingq = ['周一','周二','周三','周四','周五','周六','周日'] }, // 手机号验证 isPhone:function(phone){ // 手机号正则表达式 let reg_tel = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/; return !reg_tel.test(phone); }, // 电子邮箱验证 isEmail(email){ let reg_email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; return !reg_email.test(email); }, // 身份证验证 isIdentity(identity) { let reg_identity = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; return !reg_identity.test(identity); }, // 手机号中间四位用"****"带替 hideMPhone(phone){ return `${phone.substr(0, 3)}****${phone.substr(7)}` }, // 手机号中间加字符 phoneAddChat(phone,startNum=3,endNum=7,character=' '){ let phoneStr = phone; phoneStr = phoneStr.replace(/\s*/g, ""); var phoneArr = []; for(var i = 0; i < phoneStr.length; i++){ if (i==startNum||i==endNum){ phoneArr.push(`${character}` + phoneStr.charAt(i)); } else { phoneArr.push(phoneStr.charAt(i)); } } phone = phoneArr.join(""); return phone; }, // 昵称从第一个字开始,后面的都用"*"代替 hideName(name,num){ return `${name.substr(0, 1)}****${name.substr(name.length-1)}` }, // 金额转换各三位数使用英文","隔开 changeNum(num){ if (num) { // 针对整数部分进行格式化处理,这是此方法的核心,也是稍难理解的一个地方,逆向的来思考或者采用简单的事例来实现就容易多了 /* 也可以这样想象,现在有一串数字字符串在你面前,如果让你给他家千分位的逗号的话,你是怎么来思考和操作的? 字符串长度为0/1/2/3时都不用添加 字符串长度大于3的时候,从右往左数,有三位字符就加一个逗号,然后继续往前数,直到不到往前数少于三位字符为止 */ num = num+''; // 数字转换为字符串,数字是没有.length属性的 for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) { num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3)) } // 将数据(符号、整数部分、小数部分)整体组合返回 return num; } }, // 整数添加.00,小数就不添加 addXiaoShu(num){ console.log(num,120); let str = num.toString(); if(str.length > 9){ str = str*1; str = str.toFixed(2); str = str+''; } return str.includes('.') ? str : str = num + '.00'; }, // type:+加、-减、*乘、/除 // len:小数后保留几位 operationEv(num1,num2,type,len=0){ // 将数字转化成字符串 num1 = num1.toString(); num2 = num2.toString(); // 获取小数点的位置 var index1 = num1.indexOf("."); var index2 = num2.indexOf("."); // 如果小数点存在,那么就再获取各自的小数位数 var ws1 = 0; var ws2 = 0; if(index1 != -1){ ws1 = num1.split(".")[1].length; } if(index2 != -1){ ws2 = num2.split(".")[1].length; } // 看谁的小数位数大,谁的小数位数小 var bigger = (ws1 > ws2) ? ws1 : ws2; var smaller = (ws1 < ws2) ? ws1 : ws2; // 计算得到需要补齐的0的个数 var zerosCount = bigger - smaller; // 好了,现在不管三七二十,全部去除小数点 num1 = num1.replace(".",""); num2 = num2.replace(".",""); // 比较num1和num2谁大,比较方法就是看谁是smaller,是smaller的一方就补0 if(ws1 == smaller){ for (var i = 0; i < zerosCount; i++) { num1 += "0"; } } else { for (var i = 0; i < zerosCount; i++) { num2 += "0"; } } // 开始计算 var sum = ""; if(type=="+"){ // 加 sum = parseInt(num1) + parseInt(num2); } if(type=="-"){ // 减 sum = parseInt(num1) - parseInt(num2); } if(type=="*"){ // 乘 sum = parseInt(num1) * parseInt(num2); } if(type=="/"){ // 除 sum = parseInt(num1) / parseInt(num2); } // 根据较大的小数位数计算倍数 var beishu = 1; for (var i = 0; i < bigger; i++) { beishu = beishu*10; } sum = sum/beishu; if(type=="*"){ switch (bigger){ case 1: sum = sum / 10; break; case 2: sum = sum / 100; break; case 3: sum = sum / 1000; break; } } if(type=="/"){ switch (bigger){ case 1: sum = sum * 10; break; case 2: sum = sum * 100; break; case 3: sum = sum * 1000; break; } } len!=0 ? sum = sum.toFixed(len) : ''; return sum; }, // 时间戳===>日期 timestampToTime(timestamp) { var date = timestamp.toString().length==13 ? new Date(timestamp*1) : new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000 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(); return Y + '-' + M + '-' + D + ' ' + h + ':' + m + ':' +s; }, // 日期===>时间戳 timeToTimestamp(time){ var date = new Date(time); var timestamp = date.getTime();//精确到毫秒 return timestamp // var date = new Date('2014-04-23 18:55:49:123'); // 有三种方式获取 // var time1 = date.getTime();//精确到毫秒 // var time2 = date.valueOf();//精确到毫秒 // var time3 = Date.parse(date);//只能精确到秒,毫秒用000替代 // console.log(time1);//1398250549123 // console.log(time2);//1398250549123 // console.log(time3);//1398250549000 }, // 返回当前时间 returnCurrentTime(format,type) { let date = new Date(); let year = date.getFullYear(); // 年 let month = date.getMonth() + 1; // 月 let day = date.getDate(); // 日 let time = date.getHours(); // 时 let minu = date.getSeconds(); // 分 let second = date.getMinutes(); // 秒 let newTime = ''; switch (type){ case 0: newTime = `${year}${format}${month < 10? '0' + month : month}${format}${day < 10 ? '0' + day : day} ${time < 10 ? '0' + time : time}:${minu < 10 ? '0' + minu : minu}`; // 2022-03-31 16:05 break; case 1: newTime = `${year}${format}${month < 10? '0' + month : month}${format}${day < 10 ? '0' + day : day} ${time < 10 ? '0' + time : time}:${minu < 10 ? '0' + minu : minu}:${second < 10 ? '0' + second : second}`; // 2022-03-31 16:10:07 break; } return newTime; }, // 返回时间xx天xx小时xx分钟 returnTimeFormat(startTime,endTime){ console.log(startTime,endTime); let newTimeFormat = ''; let currentTimestamp = this.timeToTimestamp(endTime) - this.timeToTimestamp(startTime); return this.returnTimestampToTime(currentTimestamp); }, // 返回时间戳转时、分对象 returnTimestampToTime(timestamp){ let timeStr = ''; var day = parseInt((timestamp % (1000 * 60 * 60 * 24 * 12)) / (1000 * 60 * 60 * 24)); var hours = parseInt((timestamp % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); var seconds = parseInt((timestamp % (1000 * 60 * 60)) / (1000 * 60)); day = day < 10 ? ('0' + day) : day; hours = hours < 10 ? ('0' + hours) : hours; seconds = seconds < 10 ? ('0' + seconds) : seconds; if(day*1==0) { if(hours*1==0) { seconds*1==0 ? timeStr = 0 : timeStr = `${seconds}分钟`; } else { timeStr = `${hours}小时${seconds}分钟`; } } else { timeStr = `${day}天${hours}小时${seconds}分钟`; } return timeStr; }, // 时间戳转时分秒 00 : 00 : 00 formatDuring: function(mss) { // let dangTime = Math.round(new Date()/1000)//获取当前时间戳 var hours = parseInt((mss % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); var seconds = parseInt((mss % (1000 * 60 * 60)) / (1000 * 60)); var minutes = (mss % (1000 * 60)) / 1000; hours = hours < 10 ? ('0' + hours) : hours; seconds = seconds < 10 ? ('0' + seconds) : seconds; minutes = minutes < 10 ? ('0' + minutes) : minutes; return hours + ' : ' + seconds + ' : ' + minutes; }, // 随机数生成 randomStr(){ var strData = ""; //如果觉得12个数太少也可以多放点,将i<4修改即可 for(var i=0;i<4;i++){ var num = random(0,9); //数字 var upper = String.fromCharCode(random(65,90)); //大写字母 var lower = String.fromCharCode(random(97,122)); //小写字母 strData = strData+num+upper+lower; //将所有结果放进strData中 } var str = ""; for (var i = 0; i < 4; i++) { str += strData[random(0,strData.length-1)]; //在strData里面随机抽取四个数 } return str; }, // 金额输入框验证 checkPrice(number,zong){ let reg = /^[0-9]*$/;//数字正则表达式 let newObj = {} zong = parseInt(zong).toString()//取小数点左边的整数 if(!reg.test(number)){//不是数字时 newObj = { len:zong.length,//动态设置长度 val:zong//动态设置值正整数的总金额 } } else {//是数字时 newObj = { len:zong.length, val:number//动态设置当前输入的值 } if(number*1 > zong*1){//输入的金额大于总金额 newObj.val = zong//赋值总金额 } } return newObj }, // 提示方法 showToast: function(msg, icon='none',time) { // 弹框显示时间:默认2秒 var newTime = 2000 if (time) {newTime = time;} return uni.showToast({ title: msg, icon: icon, duration:newTime }) }, // 富文本 escape2Html(str) { var arrEntities = { 'lt': '<', 'gt': '>', 'nbsp': ' ', 'amp': '&', 'quot': '"' }; return str.replace(/&(lt|gt|nbsp|amp|quot|src);/ig, function (all, t) { return arrEntities[t]; }) .replace(' { console.log('当前网络状态:',res.networkType);//none:当前无网络连接 if(res.networkType=='none'){ uni.setStorageSync('isNet',false) } else { uni.setStorageSync('isNet',true); // 微信小程序原生API性能优化 // #ifdef MP-WEIXIN // 连网下,检测小程序是否有更新 this.checkUpdate(); // #endif } } }); }, // app、小程序的检测版本并更新 checkUpdate(){ // 检测app // #ifdef APP-PLUS // #endif //检测小程序 // #ifdef MP-WEIXIN var self = this; // 获取小程序更新机制兼容 if (wx.canIUse('getUpdateManager')) { const updateManager = wx.getUpdateManager();//1. 检查小程序是否有新版本发布 updateManager.onCheckForUpdate(function(res) {// 请求完新版本信息的回调 if (res.hasUpdate) { //检测到新版本,需要更新,给出提示 wx.showModal({ title: '更新提示', content: '检测到新版本,是否下载新版本并重启小程序?', success: function(res) { if (res.confirm) { //2. 用户确定下载更新小程序,小程序下载及更新静默进行 self.downLoadAndUpdate(updateManager) // 清除所有缓存 uni.clearStorage(); uni.clearStorageSync(); } else if (res.cancel) { //用户点击取消按钮的处理,如果需要强制更新,则给出二次弹窗,如果不需要,则这里的代码都可以删掉了 wx.showModal({ title: '温馨提示~', content: '本次版本更新涉及到新的功能添加,旧版本无法正常访问的哦~', showCancel:false,//隐藏取消按钮 confirmText:"确定更新",//只保留确定更新按钮 success: function(res) { if (res.confirm) { //下载新版本,并重新应用 self.downLoadAndUpdate(updateManager) } } }) } } }) } }) } else { // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示 wx.showModal({ title: '提示', content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。' }) } // #endif }, /** * 下载小程序新版本并重启应用 * */ downLoadAndUpdate(updateManager){ var self = this; wx.showLoading(); //静默下载更新小程序新版本 updateManager.onUpdateReady(function () { wx.hideLoading(); //新的版本已经下载好,调用 applyUpdate 应用新版本并重启 updateManager.applyUpdate(); // 清除缓存 uni.clearStorageSync(); uni.clearStorage(); }) updateManager.onUpdateFailed(function () { // 新的版本下载失败 wx.showModal({ title: '已经有新版本了哟~', content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~', }) }) }, // 文本复制 clickCopy(data){ uni.setClipboardData({ data: data, success: ()=> { uni.showToast({title: '复制成功',duration: 2000,icon: 'none'}); } }); }, dayTime(endTime,startTime=''){//开启倒计时 let totalSecond = ''; // 本地倒计时 // if(startTime=='') totalSecond = Math.floor((new Date(endTime).getTime() - new Date().getTime())/1000); // 解决苹果手机问题 let date = endTime; date = endTime.replace(/-/g,'/') // 服务器倒计时 if(startTime!='') totalSecond = Math.floor((new Date(date).getTime() - startTime)/1000); // 总秒数 let second = totalSecond; // 天数 let day = Math.floor(second / 3600 / 24); let dayStr = day.toString(); if(dayStr.length == 1) dayStr = '0' + dayStr; // 小时 let hr = Math.floor((second - day * 3600 * 24) / 3600); let hrStr = hr.toString(); if(hrStr.length == 1) hrStr = '0' + hrStr; // 分钟 let min = Math.floor((second - day * 3600 * 24 - hr * 3600) / 60); let minStr = min.toString(); if(minStr.length == 1) minStr = '0' + minStr; // 秒 let sec = second - day * 3600 * 24 - hr * 3600 - min * 60; let secStr = sec.toString(); if(secStr.length == 1) secStr = '0' + secStr; let newTime = ''; if(dayStr==0) { newTime = hrStr +'时'+ minStr +'分'+ secStr +'秒'; } else { newTime = dayStr +'天'+ hrStr +'时'+ minStr +'分'+ secStr +'秒'; } return newTime; }, // 刷新token refreshToken(){ console.log('进入检测token是否过期'); var date = new Date(); var timestamp = date.getTime();//精确到毫秒 // 如果过期时间 减 10分钟 小于当前时间,刷新token if((uni.getStorageSync('expire')*1000 - 600000) < timestamp) { uni.login({ provider: 'weixin', success: (res)=> { if (res.code) { var params = {code:res.code} uni.request({ url: `${app.globalData.hostapi}/api/user/login`, method: 'post', data: params, header: { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer '+uni.getStorageSync('token') || '' }, success: res => { if(res.data.data.token!=''){ uni.setStorageSync('token',res.data.data.token)//缓存token uni.setStorageSync('openid',res.data.data.openid)//缓存Openid uni.setStorageSync('expire',res.data.data.expire)//缓存失效时间(时间戳格式) uni.setStorageSync('is_active',res.data.data.is_active)//是否第一次授权 uni.setStorageSync('phone_active',res.data.data.phone_active)//是否绑定手机号 uni.setStorageSync('userId',res.data.data.account_id)//用户id uni.setStorageSync('invite_code',res.data.data.invite_code)//邀请码 } } }) } }, }); } }, // 判断是否授权,没授权,前往登录页面授权 authTimer:null, judgeAuth(){ let auth = false; clearTimeout(this.authTimer); if(!uni.getStorageSync('token')) { this.showToast('请登录'); this.authTimer = setTimeout(()=>{ uni.navigateTo({url:'/pages/login/login'}); },2000) } else { auth = true; } return auth; }, // 判断当前环境、清空日志、设置全局域名 currentContext(){ // #ifdef APP-PLUS if(uni.getSystemInfoSync().platform != "devtools"){//devtools:开发版 值域为:ios、android、mac(3.1.10+)、windows(3.1.10+)、linux(3.1.10+) // console.log = () =>{} } // #endif // 微信小程序原生API性能优化 // #ifdef MP-WEIXIN let hInfo = wx.getAccountInfoSync(); // console.log(hInfo.envVersion);//develop:开发版 trial:体验版 release:正式版 // if(hInfo.miniProgram.envVersion == "develop"){ if(hInfo.miniProgram.envVersion == "develop" || hInfo.miniProgram.envVersion == "trial"){ } else { // 清除所有输出日志 console.log = () =>{}; // 开启埋点倒计时 this.daoTime();//开启埋点倒计时 } // #endif }, // 禁止小程序使用分享 disableShareEv(){ // #ifdef MP-WEIXIN wx.hideShareMenu({ menus: ['shareAppMessage', 'shareTimeline'] }) // #endif }, // 获取当前页面url,不带参数 obtainPagePath(){ let pages = getCurrentPages(); // 获取纯页面路径 let route = pages[pages.length - 1].route; uni.setStorageSync('url',route); // 获取当前页面url,带参数 let routeParam = pages[pages.length - 1].$page.fullPath; console.log(routeParam.options,'获取当前url参数'); uni.setStorageSync('page-path-options',routeParam); console.log(uni.getStorageSync('page-path-options'),'当前页面完整路径'); }, // 去这里 goFlag:true, goThere(){ if(this.flag){ this.flag = false; // #ifdef MP-WEIXIN wx.getLocation({//获取当前经纬度 type: 'wgs84', //返回可以用于wx.openLocation的经纬度,官方提示bug: iOS 6.3.30 type 参数不生效,只会返回 wgs84 类型的坐标信息 success: (res)=> { wx.openLocation({//​使用微信内置地图查看位置。 latitude: 30.656693,//要去的纬度-地址 longitude: 104.136425,//要去的经度-地址 name: '大向天诚有限责任公司', address: '四川省成都市成华区双店路B口', fail:err=>{ this.showToast('地址信息错误'); } }) } }) // #endif setTimeout(()=>{ this.flag = true; },2000) } else { this.showToast('请勿多次点击'); } }, // 拨打电话 countCustomer(phone){ const res = uni.getSystemInfoSync(); if(res.platform=='ios'){ uni.makePhoneCall({ phoneNumber:phone*1, success: () => {}, fail: () => {} }) } else { uni.showActionSheet({ itemList:[phone,'立即呼叫'], itemColor:'#3875F6', success: (res) => { if(res.tapIndex==1){ uni.makePhoneCall({ phoneNumber:phone }) } } }) } }, // 图片上传 uploadImg(count) { let imgArr = []; uni.chooseImage({ count:count, sizeType:['compressed'], sourceType:['album','camera'], success: (res) => { let files = res.tempFilePaths console.log(files); files.forEach(item=>{ imgArr.push(item); }) } }) return imgArr; } } export default { tools }