import Vue from 'vue'
import store from '@/vendors/vuex'

function isObj (object) {
  return (
    object &&
    typeof object === 'object' &&
    Object.prototype.toString.call(object).toLowerCase() === '[object object]'
  )
}


// isEmpty
Vue.prototype.isNull = function (value) {
  if (!value || value === null || value.length === 0) {
    return true
  }
  return false
}

// 是否有权限
Vue.prototype.permissionIf = function (permission) {
  const roles = store.getters.roles
  if (!roles) {
    return false
  }
  return roles.some(role => role.indexOf(permission) === 0)
}

// 导出
Vue.prototype.downloadNormal = function (url, fileName) {
  return new Promise(next => {
    const tag = document.createElement('a')
    tag.href = url
    tag.download = fileName
    document.body.appendChild(tag)
    tag.click()
    document.body.removeChild(tag)
    next(true)
  })
}
//基础数据内容显示中英文
Vue.prototype.showConst = function (constStr) {
  if (this.isNull(constStr)) {
    return '--'
  } else if (constStr.indexOf('#YH#') === -1) {
    return constStr
  }
  let language = store.state.app.language
  return language === 'zh'
    ? constStr.split('#YH#')[0]
    : constStr.split('#YH#')[1]
}

//基础数据下拉框列表显示中英文
Vue.prototype.getConstLanguage = function () {
  let language = store.state.app.language
  return language === 'zh' ? 'constValue' : 'constValueEn'
}
//基础数据下拉框列表显示中英文
Vue.prototype.getParameterLanguage = function () {
  let language = store.state.app.language
  return language === 'zh' ? 'parameterValue' : 'parameterValueEn'
}
//基础数据下拉框列表显示中英文
Vue.prototype.getEnumValue = function () {
  let language = store.state.app.language
  return language === 'zh' ? 'enumValue' : 'enumEnValue'
}
// 全局限制input框输入字符长度
Vue.prototype.set100 = function () {
  return 90
}
// 全局限制input框输入字符长度
Vue.prototype.set50 = function () {
  return 40
}
// 全局限制input框输入字符长度
Vue.prototype.set500 = function () {
  return 450
}
// 清除单个验证
Vue.prototype.resetForm = function (refName, prop) {
  let _field = this.$refs[refName].fields
  _field.map(i => {
    if (i.prop === prop) {
      i.resetField()
      return false
    }
  })
}

// 金额校验
Vue.prototype.numberVerifyFun = function (val) {
  val = val
    .replace(/[^\d.]/g, '') // 非数字、点、干掉
    .replace(/\.{2,}/g, '.') // 连续两个以上点，变成一个点
    .replace('.', '$#$')
    .replace(/\./g, '')
    .replace('$#$', '.') // 以上三步，干了一件事，就是只保留第一处点
    .replace(/^(\d{1,8})[^\\.]*(?!\.)/, '$1') // 输入的是不带小数的整数，则取前8位
    .replace(/^0(?=[^\\.])/, '') // 0XXXX，干掉(非0.XXX)
    .replace(/^(\d{1,8}).*\.(\d\d).*$/, '$1.$2') // 输入的带小数，则整数部分8位，小数2位
    .replace(/^\./g, '') // 开头的点去掉
  return val
}

// 数字校验 可为负数  可0 可0.00
Vue.prototype.numberVerifyCheck = function (value) {
  let val = value
  if (value) {
    val = val
      .replace(/[^\d.]/g, '') // 非数字、点、干掉
      .replace(/\.{2,}/g, '.') // 连续两个以上点，变成一个点
      .replace('.', '$#$')
      .replace(/\./g, '')
      .replace('$#$', '.') // 以上三步，干了一件事，就是只保留第一处点
      .replace(/^(\d{1,8})[^\\.]*(?!\.)/, '$1') // 输入的是不带小数的整数，则取前8位
      .replace(/^0(?=[^\\.])/, '') // 0XXXX，干掉(非0.XXX)
      .replace(/^(\d{1,8}).*\.(\d\d).*$/, '$1.$2') // 输入的带小数，则整数部分8位，小数2位
      .replace(/^\./g, '')
    if (value.substring(0, 1) === '-') {
      val = '-' + val
    }
  }
  return val
}

// 保留4位校验
Vue.prototype.numberVerifyFourFun = function (val) {
  val = val
    .replace(/[^\d.]/g, '')
    .replace(/\.{4,}/g, '.')
    .replace('.', '$#$')
    .replace(/\./g, '')
    .replace('$#$', '.')
    .replace(/^(\d{1,8})[^\\.]*(?!\.)/, '$1')
    .replace(/^0(?=[^\\.])/, '')
    .replace(/^(\d{1,8}).*\.(\d\d\d\d).*$/, '$1.$2')
    .replace(/^\./g, '')
  return val
}
/* 取消共通方法*/
Vue.prototype.compareJson = function (obj1, obj2) {
  if (!isObj(obj1) || !isObj(obj2)) {
    return false
  }
  const str1 = JSON.stringify(obj1)
  const str2 = JSON.stringify(obj2)
  if (str1.length !== str2.length) {
    return false
  }
  return str1 === str2
}

//判断数组是否有重复元素
Vue.prototype.isRepeat = function (arr) {
  /*eslint prefer-const:0*/
  let newArr = []
  for (let i in arr) {
    if (newArr.includes(arr[i])) {
      return true
    }
    newArr.push(arr[i])
  }
  return false
}

//监听localStorage变化
Vue.prototype.resetSetItem = function (key, newVal) {
  // 创建一个StorageEvent事件
  const newStorageEvent = document.createEvent('StorageEvent')
  const storage = {
    setItem: function (k, val) {
      localStorage.setItem(k, val)
      // 初始化创建的事件
      newStorageEvent.initStorageEvent(
        'setItem',
        false,
        false,
        k,
        null,
        val,
        null,
        null
      )
      // 派发对象
      window.dispatchEvent(newStorageEvent)
    }
  }
  return storage.setItem(key, newVal)
}

/*数字索引转成字母索引*/
Vue.prototype.numToColNo = function (number) {
  let stringArray = []
  let numToStringAction = function (number) {
    let num = number - 1
    let a = parseInt(num / 26)
    let b = num % 26
    stringArray.push(String.fromCharCode(64 + parseInt(b + 1)))
    if (a > 0) {
      numToStringAction(a)
    }
  }
  numToStringAction(number)
  return stringArray.reverse().join('')
}
