石广澎
2025-11-17 8771da2ccf6f7c3fd2a8c89a1a0e230c6386db7f
common/util.js
@@ -1,86 +1,683 @@
import {
   log
} from 'mathjs';
import JSEncrypt from './jsencrypt';
import {
   ACCESSTOKEN,
   config
} from '@/common/config.js'
let publicKey =
   'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTREknOkrusbeH7kBe3mSw4AwVT438IWmX/jKmcvYxaAWRrBJiMl7gk37L78HBG/ZstLLcdKBYYdj/5cvVWDQfv+uxbv/piZhOmQej98jWIXEA8aFEk724nFRJ7nfcEhHSWfzbTfgZw0KDO1mWdjWHnHIx/MtD0HIFFIyzg3aO7wIDAQAB';
//校验银行卡号
export function verifyBankCard(str) {
   //银行卡号长度在16到19之间
   if (str.length < 16 || str.length > 19) {
      return false;
   }
   var num = /^\d*$/;
   if (!num.exec(str)) {
      //银行卡号必须全为数字;
      return false;
   }
   //开头6位
   var strBin =
      "10,18,30,35,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,58,60,62,65,68,69,84,87,88,94,95,98,99";
   if (strBin.indexOf(str.substring(0, 2)) == -1) { //银行卡号开头6位不符合规范
      return false;
   }
   var lastNum = str.substr(str.length - 1, 1); //取出最后一位(与luhm进行比较)
   var first15Num = str.substr(0, str.length - 1); //前15或18位
   var newArr = new Array();
   for (var i = first15Num.length - 1; i > -1; i--) { //前15或18位倒序存进数组
      newArr.push(first15Num.substr(i, 1));
   }
   var arrJiShu = new Array(); //奇数位*2的积 <9
   var arrJiShu2 = new Array(); //奇数位*2的积 >9
   var arrOuShu = new Array(); //偶数位数组
   for (var j = 0; j < newArr.length; j++) {
      if ((j + 1) % 2 == 1) { //奇数位
         if (parseInt(newArr[j]) * 2 < 9)
            arrJiShu.push(parseInt(newArr[j]) * 2);
         else
            arrJiShu2.push(parseInt(newArr[j]) * 2);
      } else //偶数位
         arrOuShu.push(newArr[j]);
   }
   var jishu_child1 = new Array(); //奇数位*2 >9 的分割之后的数组个位数
   var jishu_child2 = new Array(); //奇数位*2 >9 的分割之后的数组十位数
   for (var h = 0; h < arrJiShu2.length; h++) {
      jishu_child1.push(parseInt(arrJiShu2[h]) % 10);
      jishu_child2.push(parseInt(arrJiShu2[h]) / 10);
   }
   var sumJiShu = 0; //奇数位*2 < 9 的数组之和
   var sumOuShu = 0; //偶数位数组之和
   var sumJiShuChild1 = 0; //奇数位*2 >9 的分割之后的数组个位数之和
   var sumJiShuChild2 = 0; //奇数位*2 >9 的分割之后的数组十位数之和
   var sumTotal = 0;
   for (var m = 0; m < arrJiShu.length; m++) {
      sumJiShu = sumJiShu + parseInt(arrJiShu[m]);
   }
   for (var n = 0; n < arrOuShu.length; n++) {
      sumOuShu = sumOuShu + parseInt(arrOuShu[n]);
   }
   for (var p = 0; p < jishu_child1.length; p++) {
      sumJiShuChild1 = sumJiShuChild1 + parseInt(jishu_child1[p]);
      sumJiShuChild2 = sumJiShuChild2 + parseInt(jishu_child2[p]);
   }
   //计算总和
   sumTotal = parseInt(sumJiShu) + parseInt(sumOuShu) + parseInt(sumJiShuChild1) + parseInt(sumJiShuChild2);
   //计算Luhm值
   var k = parseInt(sumTotal) % 10 == 0 ? 10 : parseInt(sumTotal) % 10;
   var luhm = 10 - k;
   if (lastNum == luhm) {
      return true;
   } else {
      return false;
   }
}
/**
 * 加密
 * @param {Object} pas
 */
export function RSAencrypt(pas) {
   //实例化jsEncrypt对象
   let jse = new JSEncrypt();
   //设置公钥
   jse.setPublicKey(publicKey);
   return jse.encrypt(pas);
}
/**
 * 拼接ftp图片路径
 * @param {Object} item
 * @param {Object} src
 */
export function getImgPath(item, src) {
   if (isBlank(item)) {
      return src
   }
   var ftp = config.sftpURL
   if (typeof item === 'string') {
      const arr = JSON.parse(item)
      return ftp + arr[0].path
   } else if (typeof item === 'object') {
      return ftp + item.path
   } else {
      return ftp + item
   }
}
/**
 * 判断字符串空
 * @param {Object} str
 */
export function isBlank(str) {
    if (str === undefined || str === null || str === '' || str === 'null' || str.length == 0) {
        return true
    } else {
        return false
    }
}
/**
 * 两数相乘 arg1 * arg2
 * @Date 2020/5/9 13:19
 **/
export function accMul(arg1, arg2) {
    let t = 0
    arg1 = arg1 ? arg1.toString() : '0'
    arg2 = arg2 ? arg2.toString() : '0'
    if (arg1.includes('.')) {
        t += arg1.split('.')[1].length
    }
    if (arg2.includes('.')) {
        t += arg2.split('.')[1].length
    }
    const r1 = Number(arg1.replace('.', ''))
    const r2 = Number(arg2.replace('.', ''))
    return (r1 * r2) / Math.pow(10, t)
   if (str === undefined || str === null || str === '' || str === 'null' || str.length == 0) {
      return true
   } else {
      return false
   }
}
/**
 * 两数相除 arg1 / arg2
 * @Date 2020/5/9 13:18
 **/
export function accDiv(arg1, arg2) {
    let t = 0
    arg1 = arg1 ? arg1.toString() : '0'
    arg2 = arg2 ? arg2.toString() : '0'
    if (arg2.includes('.')) {
        t = arg2.split('.')[1].length
    }
    if (arg1.includes('.')) {
        t -= arg1.split('.')[1].length
    }
    const r1 = Number(arg1.replace('.', ''))
    const r2 = Number(arg2.replace('.', ''))
    return accMul((r1 / r2), Math.pow(10, t))
}
/**
 * 判断非空
 * @param {Object} str
 */
export function isNotBlank(str) {
    return !isBlank(str)
   return !isBlank(str)
}
/**
 * 判断token是否存在
 */
export function getToken() {
   return uni.getStorageSync(ACCESSTOKEN);
}
/**
 * 判断token是否存在
 */
export function hasToken() {
   return !isBlank(getToken());
}
/**
 * 获取用户信息
 */
export function getUserInfo() {
   return JSON.parse(uni.getStorageSync('userInfo'))
}
/**
 * 判断两个数组的内容是否相同
 */
export function arrEquals(arr1, arr2) {
   // if the other arr2 is a falsy value, return
   if (!arr2)
      return false;
   // compare lengths - can save a lot of time
   if (arr1.length != arr2.length)
      return false;
   for (var i = 0, l = arr1.length; i < l; i++) {
      // Check if we have nested arr2s
      if (arr1[i] instanceof Array && arr2[i] instanceof Array) {
         // recurse into the nested arr2s
         if (!arr1[i].equals(arr2[i]))
            return false;
      } else if (arr1[i] != arr2[i]) {
         // Warning - two different object instances will never be equal: {x:20} != {x:20}
         return false;
      }
   }
   return true;
}
/**
 * 获取当前时间
 */
export function getDate(type) {
   const date = new Date();
   let year = date.getFullYear();
   let month = date.getMonth() + 1;
   let day = date.getDate();
   if (type === 'start') {
      year = year - 60;
   } else if (type === 'end') {
      year = year + 2;
   }
   month = month > 9 ? month : '0' + month;;
   day = day > 9 ? day : '0' + day;
   return `${year}-${month}-${day}`;
}
/**
 * 判断是否为整数,为整数则拼接'.0'
 */
export function rateMark(num) {
   if (Number.isInteger(num)) {
      return num + '.0'
   } else {
      return num
   }
}
/**
 * 秒转分钟
 * @param {Object} value
 */
export function formatSeconds(value) {
   var secondTime = parseInt(value); // 秒
   var minuteTime = 0; // 分
   var hourTime = 0; // 小时
   if (secondTime > 60) { //如果秒数大于60,将秒数转换成整数
      //获取分钟,除以60取整数,得到整数分钟
      minuteTime = parseInt(secondTime / 60);
      //获取秒数,秒数取佘,得到整数秒数
      secondTime = parseInt(secondTime % 60);
      //如果分钟大于60,将分钟转换成小时
      if (minuteTime > 60) {
         //获取小时,获取分钟除以60,得到整数小时
         hourTime = parseInt(minuteTime / 60);
         //获取小时后取佘的分,获取分钟除以60取佘的分
         minuteTime = parseInt(minuteTime % 60);
      }
   }
   var result = "" + parseInt(secondTime) + "秒";
   if (minuteTime > 0) {
      result = "" + parseInt(minuteTime) + "分" + result;
   }
   if (hourTime > 0) {
      result = "" + parseInt(hourTime) + "小时" + result;
   }
   return result;
}
/**
 * 日期格式化
 * @param {Object} date
 * @param {Object} fmt
 */
export function dateFormat(date, fmt) {
   if (!date) {
      return
   }
   if (!fmt) {
      fmt = 'yyyy-MM-dd hh:mm'
   }
   if (!(date instanceof Date)) {
      date = new Date(date.replace(/-/g, '/'))
   }
   if (/(y+)/.test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
   }
   let o = {
      'M+': date.getMonth() + 1,
      'd+': date.getDate(),
      'h+': date.getHours(),
      'm+': date.getMinutes(),
      's+': date.getSeconds()
   };
   for (let k in o) {
      if (new RegExp(`(${k})`).test(fmt)) {
         let str = o[k] + '';
         fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : ('00' + str).substr(str.length));
      }
   }
   return fmt;
}
/**
 * 传入时间格式的时间,以当前时间为标准,返回距离当前时间之前
 */
export function timeago(date) { //dateTimeStamp是一个时间毫秒,注意时间戳是秒的形式,在这个毫秒的基础上除以1000,就是十位数的时间戳。13位数的都是时间毫秒。
   if (!date) {
      return
   }
   if (!(date instanceof Date)) {
      date = new Date(date.replace(/-/g, '/'))
   }
   var dateTimeStamp = date.getTime()
   var minute = 1000 * 60; //把分,时,天,周,半个月,一个月用毫秒表示
   var hour = minute * 60;
   var day = hour * 24;
   var week = day * 7;
   var halfamonth = day * 15;
   var month = day * 30;
   var now = new Date().getTime(); //获取当前时间毫秒
   var diffValue = now - dateTimeStamp; //时间差
   if (diffValue < 0) {
      return;
   }
   var minC = diffValue / minute; //计算时间差的分,时,天,周,月
   var hourC = diffValue / hour;
   var dayC = diffValue / day;
   var weekC = diffValue / week;
   var monthC = diffValue / month;
   var result = '';
   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 {
      var datetime = new Date();
      datetime.setTime(dateTimeStamp);
      var Nyear = datetime.getFullYear();
      var Nmonth = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;
      var Ndate = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
      var Nhour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours();
      var Nminute = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes();
      var Nsecond = datetime.getSeconds() < 10 ? "0" + datetime.getSeconds() : datetime.getSeconds();
      result = Nyear + "-" + Nmonth + "-" + Ndate
   }
   return result;
}
/**
 * 数组截取
 * @param {Object} data
 * @param {Object} index
 * @param {Object} num
 */
export function subArray(data, index, num) {
   return data.slice(index * num, (index * num) + num)
}
// 根据索引替换字符串中的元素,常用语字符串加密
export function stringReplace(content, start, num, str) {
   var content = content.split("");
   content.splice(start, num, str)
   return content.join("");
}
export function getByteLength(str) {
   //先把中文替换成两个字节的英文,在计算长度
   var aa = str.replace(/[\u0391-\uFFE5]/g, "@@")
   return aa.length;
}
export function getDiffDay(date_1, date_2) {
   // 计算两个日期之间的差值
   let totalDays, diffDate
   let myDate_1 = new Date(date_1.replace(/-/g, '/'))
   let myDate_2 = new Date(date_2.replace(/-/g, '/'))
   // 将两个日期都转换为毫秒格式,然后做差
   diffDate = Math.abs(myDate_1 - myDate_2) // 取相差毫秒数的绝对值
   totalDays = Math.floor(diffDate / (1000 * 3600 * 24)) // 向下取整
   // console.log(totalDays)
   return totalDays // 相差的天数
}
/**
 * 获取两个日期相差的月日时分
 * @param {Object} start
 * @param {Object} end
 * @param {Object} cha
 * @param {Object} flag
 */
export function timeFn(start, end, cha, flag) {
   if (!!!cha) {
      cha = 0
   }
   if (!(start instanceof Date)) {
      start = new Date(start.replace(/-/g, '/'))
   }
   start.setSeconds(start.getSeconds() - 1)
   if (!(end instanceof Date)) {
      end = new Date(end.replace(/-/g, '/'))
   }
   var dateDiff = end.getTime() - start + cha; //时间差的毫秒数
   if (dateDiff == 0) {
      return null
   }
   var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000)); //计算出相差天数
   var leave1 = dateDiff % (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)
   var leave4 = leave3 % (60 * 1000) //计算分钟数后剩余的毫秒数
   var minseconds = Math.round(leave4 / 1000)
   if (seconds * 1 < 10) {
      seconds = '0' + seconds
   }
   if (minutes * 1 < 10) {
      minutes = '0' + minutes
   }
   if (hours * 1 < 10) {
      hours = '0' + hours
   }
   if (flag) {
      var timeFn = (dayDiff ? dayDiff + "天" : '') + hours + "时" + minutes + "分" + seconds + "秒";
      return timeFn;
   }
   var timeFn = (dayDiff ? dayDiff + "天" : '') + hours + ":" + minutes + ":" + seconds;
   return timeFn;
}
/**
 * 简单的uuid
 */
export function guid() {
   return 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
      var r = Math.random() * 16 | 0,
         v = c == 'x' ? r : (r & 0x3 | 0x8);
      return v.toString(16);
   });
}
/**
 * 获取long型数据
 */
export function glong() {
   return 'xxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
      var r = Math.floor((Math.random() * 10)) | 0,
         v = c == 'x' ? r : (r & 0x3);
      return v.toString();
   });
}
/**
 * 页面跳转
 * @param {Object} url
 * @param {Object} param
 */
export function go(url, param) {
   var pm = '';
   if (param != undefined) {
      if (typeof param === 'string') {
         param = JSON.parse(param)
      }
      for (var p in param) {
         //遍历json对象的每个key/value对,p为key
         pm += '&' + p + '=' + param[p];
      }
   }
   pm = pm.substr(1);
   uni.navigateTo({
      url: url + '?' + pm
   });
}
/**
 * 页面跳转
 * @param {Object} url
 * @param {Object} param
 */
export function redirect(url, param) {
   var pm = '';
   if (param != undefined) {
      if (typeof param === 'string') {
         param = JSON.parse(param)
      }
      for (var p in param) {
         //遍历json对象的每个key/value对,p为key
         pm += '&' + p + '=' + param[p];
      }
   }
   pm = pm.substr(1);
   uni.redirectTo({
      url: url + '?' + pm
   });
}
/**
 * 跳转首页
 */
export function goIndex() {
   uni.reLaunch({
      url: '/pages/index/index'
   });
}
/**
 * 跳转登录页
 */
export function goLogin(callbackUrl) {
   if (callbackUrl) {
      uni.redirectTo({
         url: `/pages/user/login/index?callbackUrl=/${callbackUrl}`
      });
   } else {
      uni.redirectTo({
         url: `/pages/user/login/index`
      });
   }
}
/**
 * 返回
 */
export function goBack() {
   uni.navigateBack()
}
/**
 * 颜色16进制转RGB方法
 * @param {Object} c
 */
export function colorRgb(c) {
   var sColor = c.toLowerCase();
   //十六进制颜色值的正则表达式
   var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
   // 如果是16进制颜色
   if (sColor && reg.test(sColor)) {
      if (sColor.length === 4) {
         var sColorNew = "#";
         for (var i = 1; i < 4; i += 1) {
            sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
         }
         sColor = sColorNew;
      }
      //处理六位的颜色值
      var sColorChange = [];
      for (var i = 1; i < 7; i += 2) {
         sColorChange.push(parseInt("0x" + sColor.slice(i, i + 2)));
      }
      return "(" + sColorChange.join(",") + ",.08)";
   }
   return sColor;
};
/**
 * 验证手机号
 * @param {Object} mobile
 */
export function checkMobile(mobile) {
   return /^1[3456789]\d{9}$/.test(mobile);
}
/**
 * 验证身份证号
 * @param {Object} cardNo
 */
export function checkCardNo(cardNo) {
   return /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/
      .test(cardNo);
}
/**
 * 验证邮箱
 * @param {Object} email
 */
export function checkEmail(email) {
   return /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(email);
}
/**
 * 阿拉伯数字转中文数字
 * @param {Object} num
 */
export function NoToChinese(num) {
   var AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九");
   var BB = new Array("", "十", "百", "千", "万", "亿", "点", "");
   var a = ("" + num).replace(/(^0*)/g, "").split("."),
      k = 0,
      re = "";
   for (var i = a[0].length - 1; i >= 0; i--) {
      switch (k) {
         case 0:
            re = BB[7] + re;
            break;
         case 4:
            if (!new RegExp("0{4}\\d{" + (a[0].length - i - 1) + "}$").test(a[0]))
               re = BB[4] + re;
            break;
         case 8:
            re = BB[5] + re;
            BB[7] = BB[5];
            k = 0;
            break;
      }
      if (k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0) re = AA[0] + re;
      if (a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k % 4] + re;
      k++;
   }
   if (a.length > 1) //加上小数部分(如果有小数部分)
   {
      re += BB[6];
      for (var i = 0; i < a[1].length; i++) re += AA[a[1].charAt(i)];
   }
   return re;
};
/**
 * 合并对象相同属性
 * chenlong
 * @param obj1 目标对象
 * @param obj2 源对象
 */
export function mergeObj(obj1, obj2) {
   const res = {}
   Object.keys(obj2).map(key => {
      if (key in obj1) {
         res[key] = obj2[key]
      }
   })
   return res
}
/**
 * 获取返回值
 * @param {Object} res
 * @param {Object} fun
 */
export function getContent(res, fun) {
   if (res.code === 10000) {
      fun(res.data)
   } else {
      uni.showToast({
         title: res.msg,
         duration: 1500,
         icon: 'none'
      });
   }
}
/* 正整数 */
export function isInteger(number) {
    const reg = /^[1-9]\d*$/
    if (reg.test(number)) {
        return true
    } else {
        return false
    }
   const reg = /^[1-9]\d*$/
   if (reg.test(number)) {
      return true
   } else {
      return false
   }
}
/* 判断是否为空 */
export function isEmpty(item) {
    if (item === undefined || item === null || item === '') {
        return true
    }
    return false
   if (item === undefined || item === null || item === '') {
      return true
   }
   return false
}
/* 校验价格,最多两位小数点 */
export function isPrice(price) {
    const reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
    if (reg.test(price)) {
        return true
    } else {
        return false
    }
   const reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
   if (reg.test(price)) {
      return true
   } else {
      return false
   }
}
/**
@@ -89,10 +686,10 @@
 * @returns {number|*}
 */
export function formatYuanToFen(val) {
    if (isEmpty(val) || !isPrice(val)) {
        return val
    }
    return parseFloat(val) * 100
   if (isEmpty(val) || !isPrice(val)) {
      return val
   }
   return parseFloat(val) * 100
}
/**
@@ -101,57 +698,244 @@
 * @returns {number|*}
 */
export function formatFenToYuan(val) {
    if (isEmpty(val) || !isInteger(val)) {
        return val
    }
    return parseFloat(val) / 100
   if (isEmpty(val) || !isInteger(val)) {
      return val
   }
   return parseFloat(val) / 100
}
/* 元转分 */
export function yuanToFen(amount) {
    let fen = 0
    if (!amount) {
        return fen;
    }
    fen = accMul(amount,100)
    console.log(amount,fen);
    return fen
/**
 * 提示错误信息
 */
export function showErrorMsg(msg) {
   uni.showToast({
      title: msg,
      icon: 'none'
   });
   return false;
}
/* 分转元 */
export function fenToYuan(amount) {
    if (!amount) {
        return "0";
    }
    amount = amount.toString();
    if (amount.length == 1) {
        return parseFloat("0.0" + amount);
    } else if (amount.length == 2) {
        return parseFloat("0." + amount);
    } else {
        return parseFloat(amount.substring(0, amount.length - 2) + "." + amount.substring(amount.length - 2));
    }
/**
 * 提示成功信息
 */
export function showSuccessMsg(msg) {
   uni.showToast({
      title: msg,
      icon: 'none'
   });
}
// 判断微信、支付宝  2微信 5支付宝 3其他
/**
 * 计算时间差
 */
export function timeDiff(startTime, endTime) {
   // 计算相差的时间
   const timeDiff = endTime.getTime() - startTime.getTime();
   if (timeDiff <= 0) return false;
   const totalSeconds = Math.floor(timeDiff / 1000);
   const hours = Math.floor(totalSeconds / 60 / 60);
   const minutes = Math.floor((totalSeconds - hours * 60 * 60) / 60);
   const seconds = Math.floor(totalSeconds - hours * 60 * 60 - minutes * 60);
   const timeDiffArray = [hours, minutes, seconds].map(e => {
      return e < 10 ? '0' + e : e;
   });
   return timeDiffArray;
}
/**
 * 两数相加 arg1 + arg2
 * @param arg1
 * @param arg2
 * @returns {number}
 */
export function add(arg1, arg2) {
   var t = 0
   arg1 = arg1 ? arg1.toString() : '0'
   arg2 = arg2 ? arg2.toString() : '0'
   if (arg1.includes('.')) {
      t = arg1.split('.')[1].length
   }
   if (arg2.includes('.')) {
      t = Math.max(arg2.split('.')[1].length, t)
   }
   var m = Math.pow(10, t)
   return Number(((this.mul(arg1, m) + this.mul(arg2, m)) / m))
}
/**
 * 两数相减 arg1 - arg2
 * @param arg1
 * @param arg2
 * @returns {number}
 */
export function sub(arg1, arg2) {
   var t = 0
   arg1 = arg1 ? arg1.toString() : '0'
   arg2 = arg2 ? arg2.toString() : '0'
   if (arg1.includes('.')) {
      t = arg1.split('.')[1].length
   }
   if (arg2.includes('.')) {
      t = Math.max(arg2.split('.')[1].length, t)
   }
   var m = Math.pow(10, t)
   return Number(((this.mul(arg1, m) - this.mul(arg2, m)) / m))
}
/**
 * 两数相乘 arg1 * arg2
 * @param arg1
 * @param arg2
 * @returns {number}
 */
export function mul(arg1, arg2) {
   var t = 0
   arg1 = arg1 ? arg1.toString() : '0'
   arg2 = arg2 ? arg2.toString() : '0'
   if (arg1.includes('.')) {
      t += arg1.split('.')[1].length
   }
   if (arg2.includes('.')) {
      t += arg2.split('.')[1].length
   }
   var r1 = Number(arg1.replace('.', ''))
   var r2 = Number(arg2.replace('.', ''))
   return (r1 * r2) / Math.pow(10, t)
}
/**
 * 两数相除 arg1 / arg2
 * @param arg1
 * @param arg2
 * @returns {number}
 */
export function abs(arg1, arg2) {
   var t = 0
   arg1 = arg1 ? arg1.toString() : '0'
   arg2 = arg2 ? arg2.toString() : '0'
   if (arg2.includes('.')) {
      t = arg2.split('.')[1].length
   }
   if (arg1.includes('.')) {
      t -= arg1.split('.')[1].length
   }
   var r1 = Number(arg1.replace('.', ''))
   var r2 = Number(arg2.replace('.', ''))
   return this.mul((r1 / r2), Math.pow(10, t))
}
/**
 * arg1*100/(arg1+arg2)
 * @param {Object} arg2
 * @param {Object} arg1
 */
export function percentage(arg1, arg2) {
   var add = this.add(arg1, arg2)
   return this.mul(this.abs(arg1, add), 100)
}
/**
 * 查看网络状态
 * false 没有网络  true 有网络
 */
export function getNetworkStatus() {
   var result = ''
   uni.getNetworkType({
      success: (res) => {
         if (res.networkType == 'none') {
            // this.$u.toast("没有网络");
            result = false
         } else {
            // this.$u.toast("有网络");
            result = true
         }
      }
   })
   return result
}
/**
 * @param {Object} key 缓存的key
 * @param {Object} param 要缓存的对象
 * 将param push到缓存数组中
 */
export function setArrayStorageSync(key, param) {
   const data = uni.getStorageSync(key) || []
   data.push(param)
   uni.setStorageSync(key, data)
}
// 获取轮播图列表
export function getBannerImg(val, state) {
   let list = []
   if (!isBlank(val) && state === '2') {
      let arr = JSON.parse(val)
      arr.map(x => {
         list.push(config.sftpURL + x.path)
      })
   } else {
      list = [config.imgUrl + 'no-book.png']
   }
   return list
}
// 商品图片路径
export function getGoodsImg(val, state) {
   let headImg = ""
   if (!isBlank(val) && state === '2') {
      headImg = config.sftpURL + JSON.parse(val)[0].path
   } else {
      headImg = config.imgUrl + 'no-book.png'
   }
   return headImg
}
// 图片路径
export function GoodsImg(val) {
   let headImg = ""
   if (!isBlank(val)) {
      headImg = config.sftpURL + val
   } else {
      headImg = config.imgUrl + 'no-book.png'
   }
   return headImg
}
// 保留三位小数 末尾超过向上进1
export function getDiscountPrice(price, discount) {
   let newPrice = ""
   let a = Number(price) * Number(discount) / 100
   let b = a.toFixed(4)
   let c = b[b.length - 1]
   newPrice = c != 0 ? Number(b) + 0.01 : b.slice(0, -1)
   return newPrice
}
// 判断微信、支付宝  2微信 5支付宝 15云闪付 3其他
export function getPlat() {
    // #ifdef H5
    var ua = window.navigator.userAgent.toLowerCase();
    //判断是不是微信
    if (ua.match(/MicroMessenger/i) == 'micromessenger') {
        return 2;
    }
    //判断是不是支付宝
    if (ua.match(/AlipayClient/i) == 'alipayclient') {
        return 5;
    }
    //判断是不是云闪付
    if (ua.indexOf('unionpay/1.0') !== -1) {
        return 15;
    }
    // #endif
    // #ifdef MP-WEIXIN
    return 2;
    // #endif
    // #ifdef MP-ALIPAY
    return 5;
    // #endif
    return 3;
}
   // #ifdef H5
   var ua = window.navigator.userAgent.toLowerCase();
   //判断是不是微信
   if (ua.match(/MicroMessenger/i) == 'micromessenger') {
      return 2;
   }
   //判断是不是支付宝
   if (ua.match(/AlipayClient/i) == 'alipayclient') {
      return 5;
   }
   //判断是不是云闪付
   if (ua.indexOf('unionpay/1.0') !== -1) {
      return 15;
   }
   // #endif
   // #ifdef MP-WEIXIN
   return 2;
   // #endif
   // #ifdef MP-ALIPAY
   return 5;
   // #endif
   return 3;
}