// // example
// // 普通input框必输， blur 时触发校验
// [Validator.RequiredBlur()]

// // 普通 select, radio, datepicker 必输, change 时触发校验
// [Validator.RequiredChange()]

// // 固定字符长度校验
// [
//   Validator.RequiredBlur(),
//   Validator.StrLength(4)
// ]

// // 字符长度范围校验
// [
//   Validator.RequiredBlur(),
//   Validator.StrRange(4,8)
// ]

// // 数字位数范围校验
// [
//   Validator.RequiredBlur(),
//   // 整数位不超过 5位，小数位不超过2位
//   Validator.CurrencyRange(5, 2)
// ],

// // 特殊校验
// [
//   Validator.RequiredBlur(),
//   Validator.func(() => {
//     return true
//   })
// ]

export default {
  CurrencyRange (count, precision) {
    let reg = new RegExp(`^[\\d]{1,${count}}[\\.]{0,1}[\\d]{0,${precision}}$`, 'g')
    return {
      message: `数字整数位不得超过${count}位，小数位不得超过${precision}`,
      pattern: reg,
      trigger: 'change'
    }
  },
  RequiredBlur (flag = true) {
    return {
      required: flag,
      message: '该项为必输项',
      trigger: 'blur'
    }
  },
  RequiredChange (flag = true) {
    return {
      required: flag,
      message: '该项为必输项',
      trigger: 'change'
    }
  },
  StrRange (min, max, trigger = 'blur') {
    return {
      min: min,
      max: max,
      message: `字符串长度为${min}-${max}位`,
      trigger: trigger
    }
  },
  StrLength (length, trigger = 'blur') {
    return {
      len: length,
      message: `字符串长度需为${length}`,
      trigger: trigger
    }
  },
  func (judgeFunc, trigger = 'change') {
    return {
      async validator(rule, value, callback) {
        let res = await judgeFunc()
        if (res == true) {
          callback()
        } else {
          callback(new Error(res))
        }
      },
      trigger: trigger
    }
  }
}