/* eslint-disable */ //常用方法集合 export default { countDownClock (time) { let times = Math.floor(time / 1000); let secondNum = times % 60; let minuteNum = Math.floor((times / 60) % 60); let hourNum = Math.floor((times / (60 * 60)) % 24); let dayNum = Math.floor(times / (60 * 60 * 24)); let str; if (dayNum > 0) { str = dayNum + '天 ' + (hourNum > 9 ? hourNum : '0' + hourNum) + ':' + (minuteNum > 9 ? minuteNum : '0' + minuteNum) + ':' + (secondNum > 9 ? secondNum : '0' + secondNum); // console.log(str,1) return str } else if (hourNum > 0) { str = (hourNum > 9 ? hourNum : '0' + hourNum) + ':' + (minuteNum > 9 ? minuteNum : '0' + minuteNum) + ':' + (secondNum > 9 ? secondNum : '0' + secondNum) // console.log(str,2) return str; } else if (minuteNum > 0) { str = '00:' + (minuteNum > 9 ? minuteNum : '0' + minuteNum) + ':' + (secondNum > 9 ? secondNum : '0' + secondNum); // console.log(minuteNum,str,3) return str } else if (secondNum > 0) { str = '00:00:' + (secondNum > 9 ? secondNum : '0' + secondNum); // console.log(secondNum,4) return str } else { return '00:00:00' } }, formatRichText (html) { //控制小程序中图片大小 if (!html) { return ""; } let newContent = html.replace(/]*>/gi, function (match, capture) { match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, ''); match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, ''); match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, ''); return match; }); newContent = newContent.replace(/style="[^"]+"/gi, function (match, capture) { match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi, 'max-width:100%;'); return match; }); // newContent = newContent.replace(/]*\/>/gi, ''); newContent = newContent.replace(/\ 0) { return days + '天' + hours + ':' + minutes + ':' + seconds } else { if (hours > 0) { return hours + ':' + minutes + ':' + seconds } else { if (minutes > 0) { return minutes + ':' + seconds } else { if (seconds > 0) { return seconds + '秒' } else { return '00:00' } } } } }, /** * 金额保留两位小数点后,大小 */ priceBigSmall (value = 0, boolean = true) { // let val = (Math.floor((value || 0) * 100) / 100).toFixed(2); let val = this.precisionTrue(value, 2) let splitPrice = val.split("."); let price = `${splitPrice[0]}.${splitPrice[1]}`; // 若boolean 为 false,则不带单位 ¥ if (boolean == false) { price = price.replace(/¥/g, '') } return price }, priceBigSmallTwo (value = 0) { // let val = (Math.floor((value || 0) * 100) / 100).toFixed(2); let val = this.precisionTrue(value, 2) let splitPrice = val.split("."); let price = `${splitPrice[0]}.${splitPrice[1]}`; return price }, // 进度正确 precisionTrue (num, n) { if (n != undefined && (isNaN(n) || Number(n) > 17 || Number(n) < 0)) { throw new Error("输入正确的精度范围"); } // 拆分小数点整数和小数 // var num = this; var f = ''; num = Number(num) if (Number(num) < 0) { num = -Number(num); f = '-'; } var numList = num.toString().split("."); // 整数 var iN = numList[0]; // 小数 var dN = numList[1]; n = parseInt(n); if (isNaN(n) || Number(n) === 0) { // 0或者不填的时候,按0来处理 if (dN === undefined) { return num + ''; } var idN = Number(dN.toString().substr(0, 1)); if (idN >= 5) { if (Number(iN) < 0) { iN = Number(iN) - 1 } else { iN = Number(iN) + 1 } } return iN + ''; } else { var dNL = dN === undefined ? 0 : dN.length; if (dNL < n) { // 如果小数位不够的话,那就补全 var oldN = num.toString().indexOf('.') > -1 ? num : num + '.'; var a = Number(n) - dNL; while (a > 0) { oldN += '0'; a--; } return oldN; } // 正常 var olddN = dN.toString().substring(0, n); var dN1 = Number(dN.toString().substring(0, n)); var dN2 = Number(dN.toString().substring(n, n + 1)); if (dN2 >= 5) { dN1 += 1; if (olddN.length - dN1.toString().length > 0) { var olddNL = olddN.length - dN1.toString().length while (olddNL > 0) { dN1 = '0' + dN1 olddNL--; } } if (dN1.toString().length > n) { if (Number(iN) < 0) { iN = Number(iN) - 1 } else { iN = Number(iN) + 1 } dN1 = '0'; while (n > 1) { dN1 += '0' n--; } } } else { dN1 = olddN } return f + iN + '.' + dN1; } }, priceBigSmallTherr (value) { let val = (Math.floor((value || 0) * 100) / 100).toFixed(2); let splitPrice = val.split("."); let price = `${splitPrice[0]}.${splitPrice[1]}`; return price }, /** * 金额保留两位小数点 */ priceDecimals (value) { let val = (Math.floor((value || 0) * 100) / 100).toFixed(2); return val }, /** * toast提示 */ toast (title, duration = 3000, mask = false, icon = 'none') { if (Boolean(title) === false) { return; } uni.showToast({ title, duration, mask, icon }); }, getPrevPage () { var pages = getCurrentPages(); // 获取页面栈 var prevPage = pages[pages.length - 2]; // 上一个页面 return prevPage; }, // 获取当前页面栈 getCurrentPageFun (url) { let currentPage = getCurrentPages() uni.setStorageSync('toUrl', currentPage[currentPage.length - 1].route) uni.navigateTo({ url: url }) }, // 清除当前页面栈路由缓存 removeCurrenPage () { let currentPage = getCurrentPages() let toUrl = uni.getStorageSync('toUrl') let backNum = 0 currentPage.map((item, index) => { if (item.route == toUrl) { backNum = index } }) uni.navigateBack({ delta: currentPage.length - backNum - 1 }) uni.removeStorageSync('toUrl') }, /** * 开发环境全局打印日志 * @param {Object} title */ log (title) { if (process.env.NODE_ENV === 'development' && Boolean(title) === true) { console.log(JSON.stringify(title)); } }, /** * 异步获取设备信息 */ getInfoAsync () { return new Promise((resolve, reject) => { plus.device.getInfo({ success (e) { resolve(e); }, fail (e) { reject(e.message); } }); }); }, /** * 安卓10不支持IMEI,则获取OAID */ getOaidAsync () { return new Promise((resolve, reject) => { plus.device.getOAID({ success (e) { resolve(e); }, fail (e) { reject(e.message); } }); }); }, /** * 获取一个随机数 * @param {Object} min * @param {Object} max */ random (min, max) { switch (arguments.length) { case 1: return parseInt(Math.random() * min + 1, 10); break; case 2: return parseInt(Math.random() * (max - min + 1) + min, 10); break; default: return 0; break; } }, /** * 获取ios的IDFA */ getIdfa () { let idfa = ''; try { if ('iOS' == plus.os.name) { let manager = plus.ios.invoke('ASIdentifierManager', 'sharedManager'); if (plus.ios.invoke(manager, 'isAdvertisingTrackingEnabled')) { let identifier = plus.ios.invoke(manager, 'advertisingIdentifier'); idfa = plus.ios.invoke(identifier, 'UUIDString'); plus.ios.deleteObject(identifier); } plus.ios.deleteObject(manager); } } catch (e) { console.error('获取idfa失败'); } return idfa; }, /* * obj 转 params字符串参数 * 例子:{a:1,b:2} => a=1&b=2 */ objParseParam (obj) { let paramsStr = ''; if (obj instanceof Array) return paramsStr; if (!(obj instanceof Object)) return paramsStr; for (let key in obj) { paramsStr += `${key}=${obj[key]}&`; } return paramsStr.substring(0, paramsStr.length - 1); }, /* * obj 转 路由地址带参数 * 例子:{a:1,b:2} => /pages/research/homepage/index?a=1&b=2 */ objParseUrlAndParam (path, obj) { let url = path || '/'; let paramsStr = ''; if (obj instanceof Array) return url; if (!(obj instanceof Object)) return url; paramsStr = this.objParseParam(obj); paramsStr && (url += '?'); url += paramsStr; return url; }, /* * 获取url字符串参数 */ getRequestParameters (locationhref) { let href = locationhref || ''; let theRequest = new Object(); let str = href.split('?')[1]; if (str != undefined) { let strs = str.split('&'); for (let i = 0; i < strs.length; i++) { theRequest[strs[i].split('=')[0]] = strs[i].split('=')[1]; } } return theRequest; }, /** * 加密字符串 */ strEncode (str) { const key = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; let l = key.length; let a = key.split(''); let s = '', b, b1, b2, b3; for (let i = 0; i < str.length; i++) { b = str.charCodeAt(i); b1 = b % l; b = (b - b1) / l; b2 = b % l; b = (b - b2) / l; b3 = b % l; s += a[b3] + a[b2] + a[b1]; } return s; }, /** * 解密字符串 */ strDecode (str) { const key = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; let l = key.length; let b, b1, b2, b3, d = 0, s; s = new Array(Math.floor(str.length / 3)); b = s.length; for (let i = 0; i < b; i++) { b1 = key.indexOf(str.charAt(d)); d++; b2 = key.indexOf(str.charAt(d)); d++; b3 = key.indexOf(str.charAt(d)); d++; s[i] = b1 * l * l + b2 * l + b3; } b = eval('String.fromCharCode(' + s.join(',') + ')'); return b; }, /** * 比较版本号 */ compareVersion (reqV, curV) { if (curV && reqV) { let arr1 = curV.split('.'), arr2 = reqV.split('.'); let minLength = Math.min(arr1.length, arr2.length), position = 0, diff = 0; while ( position < minLength && (diff = parseInt(arr1[position]) - parseInt(arr2[position])) == 0 ) { position++; } diff = diff != 0 ? diff : arr1.length - arr2.length; if (diff > 0) { if (position == minLength - 1) { return 1; } else { return 2; } } else { return 0; } } else { return 0; } }, /** * H5复制 */ h5Copy (content) { let textarea = document.createElement('textarea'); textarea.value = content; textarea.readOnly = 'readOnly'; document.body.appendChild(textarea); textarea.select(); // 选择对象 textarea.setSelectionRange(0, content.length); //核心 let result = document.execCommand('Copy'); // 执行浏览器复制命令 textarea.remove(); const msg = result ? '复制成功' : '复制失败'; this.toast(msg); }, /** * app分享 */ handleAppShare (shareUrl, shareTitle, shareContent, shareImg) { let shareData = { shareUrl, shareTitle, shareContent, shareImg }; appShare(shareData, res => { }); }, async handleWxH5Share (title, desc, link, imgUrl) { // #ifdef H5 if ($mPayment.isWechat()) { if (uni.getSystemInfoSync().platform === 'android') { await $mPayment.wxConfigH5(link); } jweixin.ready(function () { // eslint-disable-next-line jweixin.updateAppMessageShareData({ title, // 分享标题 desc, // 分享描述 link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl, // 分享图标 success: function () { // 用户确认分享后执行的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 } }); // eslint-disable-next-line jweixin.updateTimelineShareData({ title, // 分享标题 desc, // 分享描述 link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl, // 分享图标 success: function () { // 用户确认分享后执行的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 } }); }); } // #endif }, //截取后四位数 cutOut (value) { if (!value) { return ''; } return value.substring(value.length - 4) }, // 去掉字符串中的空格 trim (str) { if (!str) { return ''; } return str.replace(/\s*/g, ''); }, // 判断两个对象是否相同 isObjectValueEqual (x, y) { // 指向同一内存时 if (x === y) { return true; } else if ( typeof x == 'object' && x != null && typeof y == 'object' && y != null ) { if (Object.keys(x).length != Object.keys(y).length) return false; for (var prop in x) { if (y.hasOwnProperty(prop)) { if (!this.isObjectValueEqual(x[prop], y[prop])) return false; } else return false; } return true; } else return false; }, platformGroupFilter () { let platformGroup = 'tinyShop'; // #ifdef H5 if ($mPayment.isWechat()) { platformGroup = 'tinyShopWechat'; } else { platformGroup = 'tinyShopH5'; } // #endif // #ifdef MP-QQ platformGroup = 'tinyShopQqMp'; // #endif // #ifdef MP-WEIXIN platformGroup = 'tinyShopWechatMp'; // #endif // #ifdef MP-ALIPAY platformGroup = 'tinyShopAliMp'; // #endif // #ifdef MP-QQ platformGroup = 'tinyShopQqMp'; // #endif // #ifdef MP-BAIDU platformGroup = 'tinyShopBaiduMp'; // #endif // #ifdef APP-PLUS switch (uni.getSystemInfoSync().platform) { case 'android': platformGroup = 'tinyShopAndroid'; break; case 'ios': platformGroup = 'tinyShopIos'; break; } // #endif return platformGroup; }, countDown (ft, ct) { var ctime = ct || Math.floor(new Date().getTime()) var time = ft * 1000 - ctime var days = Math.floor(time / (24 * 3600 * 1000)) var leave1 = time % (24 * 3600 * 1000) //计算天数后剩余的毫秒数 var hours = Math.floor(leave1 / (3600 * 1000)) //计算相差分钟数 var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数 var minutes = Math.floor(leave2 / (60 * 1000)) //计算相差秒数 var leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数 var seconds = Math.round(leave3 / 1000) console.log(days + ':' + hours + ':' + minutes + ':' + seconds) return days + ':' + hours + ':' + minutes + ':' + seconds // if(days >0){ // return days+'天'+hours+':'+minutes+':'+seconds // }else{ // if(hours >0){ // return hours+':'+minutes+':'+seconds // }else{ // if(minutes >0){ // return minutes+':'+seconds // }else{ // if(seconds>0){ // return seconds+'秒' // }else{ // return '00:00' // } // } // } // } }, // 保留8位小数 isToFixed (value, num) { if (value) { let val = this.precisionTrue(value, num) let splitPrice = val.split("."); let price = `${splitPrice[0]}.${splitPrice[1]} 贡献值`; return price } else { return `0.00 贡献值`; } }, isToFixedNum (value, num) { if (value) { let val = this.precisionTrue(value, num) return val } else { return 0 } }, // 电话隐私保护 phoneChange (tel) { if (tel) { let result = tel.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2"); return result } else { return tel } }, // 打电话 callup (mobile) { uni.makePhoneCall({ phoneNumber: mobile //仅为示例 }); }, // 导航 jumpLocation (latitude, longitude) { uni.getLocation({ type: 'gcj02', //返回可以用于uni.openLocation的经纬度 success: function (res) { uni.openLocation({ latitude: Number(latitude), longitude: Number(longitude), success: function () { console.log('success'); } }); } }); }, // banner跳转 imgLink (item) { let type = item.model_type let id = item.model_id let url = item.url let shopid = item.shop_id if (type == "goods") { uni.navigateTo({ url: "/pages/shop/goodsDetails?id=" + id + "&shopid=" + shopid, }); } else if (type == "service") { uni.navigateTo({ url: "/pages/product/goods/serviceGood?id=" + id }); } else if (type == "point_goods") { // uni.navigateTo({ // url: "/pages/product/goods/IntegralGood?id=" + id // }); } else if (type == "shop") { uni.navigateTo({ url: `/pages/shop/index?businessId=${id}` }) } else if (type == "goods_polymerize") { // 商品聚合页 } else if (type == "turntable") { uni.navigateTo({ url: `/pages/game/Lottery?activityId=${id}` }) } else if (type == "url") { if (/^http/.test(url)) { uni.navigateTo({ url: "/pages/index/webView?linkUrl=" + url, }); } else { uni.navigateTo({ url }); } } else if (type == 'inner_url') { if (item.inner_code == 0) { uni.switchTab({ url: `/pages/index/lidaPage` }) } else if (item.inner_code == 1) { uni.navigateTo({ url: `/pages/research/nearby/timeLimit` }) } else if (item.inner_code == 2) { uni.navigateTo({ url: `/pages/research/homepage/groupList` }) } else if (item.inner_code == 3) { uni.navigateTo({ url: `/pages/pointsMall/index` }) } else { uni.navigateTo({ url }); } } }, // 一行卡号脱敏 bankAccount (value) { if (value) { let reg = /^(.{4})(?:\d+)(.{4})$/ let str = value.replace(reg, "$1 **** **** $2") return str } else { return value } }, // 列表分页 pagination (total, currentPageNum, currentPageSize) { let totalPage = 0 if (total / currentPageSize > parseInt(total / currentPageSize)) { totalPage = parseInt(total / currentPageSize) + 1 } else { totalPage = parseInt(total / currentPageSize); } if (currentPageNum < totalPage) { return 'more' } return 'noMore' }, // 处理 微信小程序 图片 视频 表格自适应 // 处理后的内容(优化图片显示) processedContent (value) { if (!value) return ''; // 处理富文本内容,优化图片自适应 let content = value; // 为图片添加样式,确保自适应 content = content.replace( /]*)>/gi, function (match, attrs) { // 移除原有的 width 和 height 属性 attrs = attrs.replace(/\s*(width|height)\s*=\s*["'][^"']*["']/gi, ''); // 添加自适应样式 return ``; } ); // 为视频添加自适应样式 content = content.replace( /]*)>/gi, function (match, attrs) { attrs = attrs.replace(/\s*(width|height)\s*=\s*["'][^"']*["']/gi, ''); return ``; } ); // 处理表格自适应 content = content.replace( /]*)>/gi, '' ); return content; }, /** * 判断是否登录 * @param {boolean} isTo 是否跳转登录页面 */ isLoginTo (isTo = false) { let token = uni.getStorageSync('apiToken'); if (token) { return false; } else { if (isTo) { // #ifdef MP-WEIXIN console.log('微信小程序特有逻辑'); uni.navigateTo({ url: "/pages/login/wxLogin", }); // #endif // #ifndef MP-WEIXIN console.log('当前非小程序'); // 在此处编写仅在 App 端执行的代码 uni.navigateTo({ url: "/pages/login/otherLogin", }); // #endif } return true; } }, // list 转为 tree buildTree (list, idKey = 'id', parentIdKey = 'parentId', childrenKey = 'children') { const map = {}; const roots = []; // 第一步:将所有节点放入 map,初始化 children for (const node of list) { map[node[idKey]] = { ...node, [childrenKey]: [] }; } // 第二步:遍历节点,挂载到父节点的 children 中;若无父节点,则为根节点 for (const node of list) { const nodeId = node[idKey]; const parentId = node[parentIdKey]; if (parentId === null || parentId === undefined || !(parentId in map)) { // 根节点:parentId 为 null/undefined 或父节点不存在 roots.push(map[nodeId]); } else { // 挂到父节点下 map[parentId][childrenKey].push(map[nodeId]); } } return roots; } }; import $config from '@/config/global.config.js'; /*** * 图片地址处理 * @param {string} url 图片地址 * * */ export const handleImageUrl = (url) => { // console.log("$config.staticUrl=>>", $config.staticUrl) if (!url) return; return $config.staticUrl + url; }