价格输入框,带分隔符

2019-10-16  本文已影响0人  _旁观者_
组件
<template>
    <div class="inputPrice">
        <input :style="{ width: width + 'px' }" :class="['inputStyle', sizeCss]" ref="input" size="small" v-model="money" placeholder="" @keyup="validateStr" />
    </div>
</template>

<script>
export default {
  props: {
    defaultValue: String, // 默认值
    width: String, // 宽度
    precision: Number, // 限制小数点后几位
    sizeCss: String // 尺寸
  },
  data () {
    return {
      money: ''
    }
  },
  created () {
    this.money = this.defaultValue
    this.validateStr()
  },
  methods: {
    validateStr () {
      let num = this.money.replace(/\s/g, '').replace(/[^\d.]/g, '')
      this.money = (num.toString().indexOf('.') !== -1)
        ? num.split('.')[0].toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') + '.' + num.split('.')[1].slice(0, this.precision)
        : num.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,')

      let value = ''
      this.money.lastIndexOf('.') === this.money.length - 1
        ? value = this.money.slice(0, this.money.length - 1).replace(/,/g, '')
        : value = this.money.replace(/,/g, '')
      this.$emit('changeValue', value)
    }
  }
}
</script>

<style scoped>
    .inputPrice {
        display: inline-block;
        /* margin: 20px; */
    }
    .inputStyle {
        border: 1px solid #dcdfe6;
        border-radius: 3px;
        color: #606266;
        padding: 0 10px;
        box-sizing: border-box;
    }
    .samll {
        height: 32px;
        line-height: 32px;
        font-size: 14px;
    }
    .mini {
        height: 28px;
        line-height: 28px;
        font-size: 13px;
    }
    .inputStyle:focus {
        border-color: rgba(102,175,233,.6);
        outline: 0;
        -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 1px rgba(102,175,233,.6);
        box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 1px rgba(102,175,233,.6);
        -webkit-user-select:auto;
        -moz-user-select:auto;
        user-select:auto;
    }
</style>

引用
<template>
    <div class="">
        <inputPrice :defaultValue="value" :width="'100'" :sizeCss="'mini'" :precision="2" @changeValue="value = $event"></inputPrice>
    </div>
</template>

<script>
import inputPrice from '@/components/inputPrice.vue'
export default {
  data () {
    return {
      value: '2000'
    }
  },
  components: {
    inputPrice
  },
}
</script>
上一篇下一篇

猜你喜欢

热点阅读