import request from '@/utils/request' const jnpf = { goBack() { uni.navigateBack() }, /** * 解决两个数相加精度丢失问题 * @param a * @param b * @returns {Number} */ floatAdd(a, b) { var c, d, e; if(undefined==a||null==a||""==a||isNaN(a)){a=0;} if(undefined==b||null==b||""==b||isNaN(b)){b=0;} try { c = a.toString().split(".")[1].length; } catch (f) { c = 0; } try { d = b.toString().split(".")[1].length; } catch (f) { d = 0; } e = Math.pow(10, Math.max(c, d)); return (this.floatMul(a, e) + this.floatMul(b, e)) / e; }, /** * 解决两个数相减精度丢失问题 * @param a * @param b * @returns {Number} */ floatSub(a, b) { var c, d, e; if(undefined==a||null==a||""==a||isNaN(a)){a=0;} if(undefined==b||null==b||""==b||isNaN(b)){b=0;} try { c = a.toString().split(".")[1].length; } catch (f) { c = 0; } try { d = b.toString().split(".")[1].length; } catch (f) { d = 0; } e = Math.pow(10, Math.max(c, d)); return (this.floatMul(a, e) - this.floatMul(b, e)) / e; }, /** * 解决两个数相乘精度丢失问题 * @param a * @param b * @returns {Number} */ floatMul(a, b) { var c = 0, d = a.toString(), e = b.toString(); try { c += d.split(".")[1].length; } catch (f) {} try { c += e.split(".")[1].length; } catch (f) {} return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c); }, /** * 解决两个数相除精度丢失问题 * @param a * @param b * @returns */ floatDiv(a, b) { var c, d, e = 0, f = 0; try { e = a.toString().split(".")[1].length; } catch (g) {} try { f = b.toString().split(".")[1].length; } catch (g) {} return c = Number(a.toString().replace(".", "")), d = Number(b.toString().replace(".", "")), this.floatMul(c / d, Math.pow(10, f - e)); }, handelFormat(format) { let formatObj = { 'yyyy': 'yyyy', 'yyyy-MM': 'yyyy-MM', 'yyyy-MM-dd': 'yyyy-MM-dd', 'yyyy-MM-dd HH:mm': 'yyyy-MM-dd HH:mm', 'yyyy-MM-dd HH:mm:ss': 'yyyy-MM-dd HH:mm:ss', 'HH:mm:ss': 'HH:mm:ss', "HH:mm": "HH:mm", 'YYYY': 'yyyy', 'YYYY-MM': 'yyyy-MM', 'YYYY-MM-DD': 'yyyy-MM-dd', 'YYYY-MM-DD HH:mm': 'yyyy-MM-dd HH:mm', 'YYYY-MM-DD HH:mm:ss': 'yyyy-MM-dd HH:mm:ss', } return formatObj[format] }, treeToArray(treeData, type) { type = type || '' let list = [] const loop = (treeData) => { for (let i = 0; i < treeData.length; i++) { const item = treeData[i] if (!type || item.type === type) list.push(item) if (item.children && Array.isArray(item.children)) { loop(item.children) } } } loop(treeData) return list }, toDate(v, format) { format = format ? format : "yyyy-MM-dd HH:mm" if (!v) return ""; var d = v; if (typeof v === 'string') { if (v.indexOf("/Date(") > -1) d = new Date(parseInt(v.replace("/Date(", "").replace(")/", ""), 10)); else d = new Date(Date.parse(v.replace(/-/g, "/").replace("T", " ").split(".")[0])); } else { d = new Date(v) } var o = { "M+": d.getMonth() + 1, "d+": d.getDate(), "h+": d.getHours(), "H+": d.getHours(), "m+": d.getMinutes(), "s+": d.getSeconds(), "q+": Math.floor((d.getMonth() + 3) / 3), "S": d.getMilliseconds() }; if (/(y+)/.test(format)) { format = format.replace(RegExp.$1, (d.getFullYear() + "").substr(4 - RegExp.$1.length)); } for (var k in o) { if (new RegExp("(" + k + ")").test(format)) { format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]) .length)); } } return format; }, toFileSize(size) { if (size == null || size == "") { return ""; } if (size < 1024.00) return jnpf.toDecimal(size) + " 字节"; else if (size >= 1024.00 && size < 1048576) return jnpf.toDecimal(size / 1024.00) + " KB"; else if (size >= 1048576 && size < 1073741824) return jnpf.toDecimal(size / 1024.00 / 1024.00) + " MB"; else if (size >= 1073741824) return jnpf.toDecimal(size / 1024.00 / 1024.00 / 1024.00) + " GB"; }, toDecimal(num) { if (num == null) { num = "0"; } num = num.toString().replace(/\$|\,/g, ''); if (isNaN(num)) num = "0"; var sign = (num == (num = Math.abs(num))); num = Math.floor(num * 100 + 0.50000000001); var cents = num % 100; num = Math.floor(num / 100).toString(); if (cents < 10) cents = "0" + cents; 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 (((sign) ? '' : '-') + num + '.' + cents); }, getScriptFunc(str) { // #ifndef MP let func = null try { func = eval(str) if (Object.prototype.toString.call(func) !== '[object Function]') return false; return func } catch (error) { console.log(error); return false } // #endif // #ifdef MP return false // #endif }, interfaceDataHandler(data) { if (!data.dataProcessing) return data.data const dataHandler = this.getScriptFunc(data.dataProcessing) if (!dataHandler) return data.data return dataHandler(data.data) }, toDateText(dateTimeStamp) { if (!dateTimeStamp) return '' let result = '' let minute = 1000 * 60; //把分,时,天,周,半个月,一个月用毫秒表示 let hour = minute * 60; let day = hour * 24; let week = day * 7; let halfamonth = day * 15; let month = day * 30; let now = new Date().getTime(); //获取当前时间毫秒 let diffValue = now - dateTimeStamp; //时间差 if (diffValue < 0) return "刚刚" let minC = diffValue / minute; //计算时间差的分,时,天,周,月 let hourC = diffValue / hour; let dayC = diffValue / day; let weekC = diffValue / week; let monthC = diffValue / month; if (monthC >= 1 && monthC <= 3) { result = " " + parseInt(monthC) + "月前" } else if (weekC >= 1 && weekC <= 3) { result = " " + parseInt(weekC) + "周前" } else if (dayC >= 1 && dayC <= 6) { result = " " + parseInt(dayC) + "天前" } else if (hourC >= 1 && hourC <= 23) { result = " " + parseInt(hourC) + "小时前" } else if (minC >= 1 && minC <= 59) { result = " " + parseInt(minC) + "分钟前" } else if (diffValue >= 0 && diffValue <= minute) { result = "刚刚" } else { let datetime = new Date(); datetime.setTime(dateTimeStamp); let Nyear = datetime.getFullYear(); let Nmonth = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1; let Ndate = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate(); let Nhour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours(); let Nminute = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes(); let Nsecond = datetime.getSeconds() < 10 ? "0" + datetime.getSeconds() : datetime.getSeconds(); result = Nyear + "-" + Nmonth + "-" + Ndate } return result; }, //取整 toRound(number) { var bite = 0; if (number < 10) { return 10; } if (number > 10 && number < 50) { return 50; } while (number >= 10) { number /= 10; bite += 1; } return Math.ceil(number) * Math.pow(10, bite); }, //金额大写 getAmountChinese(val) { if (!val && val != 0) return ''; if (val == 0) return '零元整'; const regExp = /[a-zA-Z]/; if (regExp.test(val)) return '数字较大溢出'; let amount = +val; if (isNaN(amount)) return ''; if (amount < 0) amount = Number(amount.toString().split('-')[1]); const NUMBER = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; const N_UNIT1 = ['', '拾', '佰', '仟']; const N_UNIT2 = ['', '万', '亿', '兆']; const D_UNIT = ['角', '分', '厘', '毫']; let [integer, decimal] = amount.toString().split('.'); if (integer && (integer.length > 15 || integer.indexOf('e') > -1)) return '数字较大溢出'; let res = ''; // 整数部分 if (integer) { let zeroCount = 0; for (let i = 0, len = integer.length; i < len; i++) { const num = integer.charAt(i); const pos = len - i - 1; // 排除个位后 所处的索引位置 const q = pos / 4; const m = pos % 4; if (num == '0') { zeroCount++; } else { if (zeroCount > 0 && m != 3) res += NUMBER[0]; zeroCount = 0; res += NUMBER[parseInt(num)] + N_UNIT1[m]; } if (m == 0 && zeroCount < 4) res += N_UNIT2[Math.floor(q)]; } } if (Number(integer) != 0) res += '元'; // 小数部分 if (parseInt(decimal)) { for (let i = 0; i < 4; i++) { const num = decimal.charAt(i); if (parseInt(num)) res += NUMBER[num] + D_UNIT[i]; } } else { res += '整'; } if (val < 0) res = '负数' + res; return res; }, // 转千位分隔 thousandsFormat(num) { if (num == 0) return '0'; if (!num) return ''; const numArr = num.toString().split('.'); numArr[0] = numArr[0].replace(/\B(?=(\d{3})+(?!\d))/g, ','); return numArr.join('.'); }, idGenerator() { let quotient = (new Date() - new Date('2020-08-01')) quotient += Math.ceil(Math.random() * 1000) const chars = '0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz'; const charArr = chars.split("") const radix = chars.length; const res = [] do { let mod = quotient % radix; quotient = (quotient - mod) / radix; res.push(charArr[mod]) } while (quotient); return res.join('') }, onlineUtils: { // 获取用户信息 getUserInfo() { const userInfo = uni.getStorageSync('userInfo') || {}; userInfo.token = uni.getStorageSync('token') || ''; return userInfo; }, // 获取设备信息 getDeviceInfo() { const deviceInfo = { vueVersion: '2', origin: 'app' }; return deviceInfo; }, // 请求 request(url, method, data) { return request({ url: url, method: method || 'GET', data: data || {}, options: { load: false } }) }, // 路由跳转 route(url, type = 'navigateTo') { if (!url) return; uni.$u.route({ url, type }) }, // 消息提示 toast(message, type = 'info', duration = 3000) { uni.$u.toast(message, duration) }, }, } export default jnpf