// components/milliliter-input/milliliter-input.js

/** 附带输入框的数字拨盘自定义组件，封装了milliliter自定义组件
 *  在引用页面使用 this.selectComponent() 获取组件对象，调用 number 可获取组件值
 *  careate by DH.tab
 *  2021/07/14
 */
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    /** 最大值 */
    max: { type: Number, value: 120 },
    /** 最小值 */
    min: { type: Number, value: 0 },
    /** 值 */
    value: { type: Number, value: 0 },
    /** 单位名称 */
    unitName: { type: String },
    /** 单位值 */
    unitVal: { type: String, value: '厘米' },
    /** 是否精确到3位小数 */
    float: { type: Boolean, value: false },
    /** 是否不可为空 */
    noEmpty: { type: Boolean, value: false },
  },

  /**
   * 组件的初始数据
   */
  data: {
    number: 0,
    isblur: true,
    first: true
  },

  attached() {
      if(this.data.unitName == '身高') {
        this.setData({ number: 160 })
      } else {
        this.setData({ number: 65 })
      }
  },

  /**
   * 组件的方法列表
   */
  methods: {
    /** 数字拨盘值改变事件 */
    changeNumber(e) {
      if (this.data.first)
        this.setData({ first: false })
      else
        this.setData({ number: e.detail })
    },

    // 文本框获得焦点
    onNumberFocus(e) {
      this.setData({ isblur: false })
    },

    // 文本框输入事件
    onNumberInput(e) {
      let val = e.detail.value

      // 检查是否出现多个小数点
      let a = val.toString().indexOf('.'),
        b = val.toString().lastIndexOf('.'),
        res = '';

      if (a != b) {
        let t = val.toString().split('')
        t.splice(t.lastIndexOf('.'), 1)
        res = t.join('')
        this.setData({ number: res })
      }
    },

    // 文本框失去焦点
    onNumberBlur(e) {
      let val = e.detail.value

      // 检查输入值是否溢出上限或下限
      if (parseInt(val) > this.data.max)
        val = this.data.max
      if (parseInt(val) < this.data.min)
        val = this.data.min

      // 检查是否需要保留2位小数
      if (this.data.float) {
        let t = val.toString().split('.')
        if (t.length > 1 && t[1].length > 3)
          val = `${t[0]}.${t[1].substr(0, 3)}`
        this.setData({
          value: parseFloat(val),
          number: parseFloat(val)
        })
      } else {
        let tmp = val.toString().split('.')
        if (tmp.length > 1)
          this.setData({
            value: parseFloat(tmp[0] + '.' + tmp[1].substr(0, 1)),
            number: parseFloat(tmp[0] + '.' + tmp[1].substr(0, 1))
          })
        else
          this.setData({
            value: parseFloat(val),
            number: parseFloat(val)
          })
      }
      this.setData({ isblur: true })
    },
  }
})
