let decimalPoint = 2 
 | 
let patternStr = '' 
 | 
patternStr = /^(\-)*(\d+)\.(\d\d).*$/ 
 | 
export default { 
 | 
  // 价格 正负数 
 | 
  inserted: function (el, binding, vnode) { 
 | 
    let input = vnode.elm.children[0] 
 | 
    input.addEventListener('compositionstart', () => { 
 | 
      vnode.inputLocking = true 
 | 
    }) 
 | 
    input.addEventListener('compositionend', () => { 
 | 
      vnode.inputLocking = false 
 | 
      input.dispatchEvent(new Event('input')) 
 | 
    }) 
 | 
    input.addEventListener('input', () => { 
 | 
      if (vnode.inputLocking) { 
 | 
        return 
 | 
      } 
 | 
      let oldValue = input.value 
 | 
      let newValue = input.value 
 | 
      let obj = input 
 | 
      let t = obj.value.charAt(0) 
 | 
      obj.value = obj.value 
 | 
        .replace('.', '$#$') //把第一个字符'.'替换成'$#$' 
 | 
        .replace(/\./g, '') //把其余的字符'.'替换为空 
 | 
        .replace('$#$', '.') //把字符'$#$'替换回原来的'.' 
 | 
        .replace(/[^\d.]/g, '') //只能输入数字和'.' 
 | 
        .replace(/^\./g, '') //不能以'.'开头 
 | 
      // .replace(/([0-9]+\.[0-9]{2})[0-9]*/, '$1') //只保留2位小数 
 | 
      obj.value = obj.value.replace(new RegExp(patternStr, 'g'), '$1$2.$3') //只保留2位小数 
 | 
      if (t == '-') { 
 | 
        obj.value = '-' + obj.value 
 | 
      } 
 | 
      // 判断是否需要更新,避免进⼊死循环 
 | 
      if (newValue !== oldValue) { 
 | 
        input.value = newValue 
 | 
        input.dispatchEvent(new Event('input')) // 通知v-model更新 
 | 
      } 
 | 
    }) 
 | 
    // input 事件⽆法处理⼩数点后⾯全是零的情况因为⽆法确定⽤户输⼊的0是否真的应该清除,如3.02。放在blur中去处理 
 | 
    input.addEventListener('blur', () => { 
 | 
      let oldValue = input.value 
 | 
      let newValue = input.value 
 | 
      if (newValue) { 
 | 
        newValue = Number(newValue).toString() 
 | 
      } 
 | 
      // 判断是否需要更新,避免进⼊死循环 
 | 
      if (newValue !== oldValue) { 
 | 
        input.value = newValue 
 | 
        input.dispatchEvent(new Event('input')) // 通知v-model更新 
 | 
      } 
 | 
    }) 
 | 
  } 
 | 
} 
 |