
// 防止页面后退
export function noBack() {
  history.pushState(null, null, document.URL)
  window.addEventListener('popstate', function() {
    history.pushState(null, null, document.URL)
  })
}
// px to rem 比例计算
export function px_to_rem_scale(device) {
  if (device !== 'app') return
  const baseSize = 32
  const docEl = window.document.documentElement
  const width = docEl.getBoundingClientRect().width

  // 当前页面宽度相对于 750 宽的缩放比例，可根据自己需要修改。
  if (width > 750) { // 最大宽度
    document.documentElement.style.fontSize = '14px'
    return
  }
  const scale = document.documentElement.clientWidth / 750
  // 设置页面根节点字体大小
  document.documentElement.style.fontSize = (baseSize * Math.min(scale, 2)) + 'px'

  // 改变窗口大小时重新设置 rem
  const onresizeFn = window.onresize
  window.onresize = function() {
    onresizeFn()
    px_to_rem_scale(device)
  }
  window.onresize()
}

/* eslint-disable */
// 重写 Number.prototype.toFixed 去掉四舍五入
export function rewriteToFixed() {
  Number.prototype.toFixed = function(num) {
    let a = this
    var a_type = typeof (a)
    if (a_type == 'number') {
      var aStr = a.toString()
      var aArr = aStr.split('.')
    } else if (a_type == 'string') {
      var aArr = a.split('.')
    }

    if (aArr.length > 1) {
      if(num===0){
        a = aArr[0]
      }else{
        a = aArr[0] + '.' + aArr[1].substr(0, num)
      }
    }
    return String(a)
  }
}

// 自定义加法函数/乘法函数，解决商品金额不准确的问题
export function customFunction() {
  /**
  ** 加法函数，用来得到精确的加法结果
  ** 说明：javascript的加法结果会有误差，在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
  ** 调用：accAdd(arg1,arg2)
  ** 返回值：arg1加上arg2的精确结果
  **/
  function accAdd(arg1, arg2) {
    var r1, r2, m, c
    try {
      r1 = arg1.toString().split('.')[1].length
    } catch (e) {
      r1 = 0
    }
    try {
      r2 = arg2.toString().split('.')[1].length
    } catch (e) {
      r2 = 0
    }
    c = Math.abs(r1 - r2)
    m = Math.pow(10, Math.max(r1, r2))
    if (c > 0) {
      var cm = Math.pow(10, c)
      if (r1 > r2) {
        arg1 = Number(arg1.toString().replace('.', ''))
        arg2 = Number(arg2.toString().replace('.', '')) * cm
      } else {
        arg1 = Number(arg1.toString().replace('.', '')) * cm
        arg2 = Number(arg2.toString().replace('.', ''))
      }
    } else {
      arg1 = Number(arg1.toString().replace('.', ''))
      arg2 = Number(arg2.toString().replace('.', ''))
    }
    return (arg1 + arg2) / m
  }

  // 加法
  Number.prototype.add = function (arg) {
    return accAdd(arg, this)
  }

  /**
  ** 乘法函数，用来得到精确的乘法结果
  ** 说明：javascript的乘法结果会有误差，在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
  ** 调用：accMul(arg1,arg2)
  ** 返回值：arg1乘以 arg2的精确结果
  **/
  function accMul(arg1, arg2) {
    var m = 0
    const s1 = arg1.toString()
    const 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)
    )
  }

  // 乘法
  Number.prototype.mul = function (arg) {
    return accMul(arg, this)
  }
}