input框输入金额显示千分位,通过组件实现

基于element 实现input框输入金额显示千分位

通过el-input组件实现输入金额就能显示千分位,比较方便项目上遇到金额的地方,直接可以全局替换我们的input

html页面代码

mian.js全局引入这个组件,这样方便替换

import GalaxyNumberInput from '@/views/accountYx/components/drop/GalaxyNumberInput'
Vue.component('galaxy-number-input', GalaxyNumberInput)

代码里直接引用

     <el-table-column prop="availableAmount" label="合同可付款金额" min-width="150" align="right" header-align="center">
                    <template slot-scope="scope">
                        <galaxy-number-input style="width:100%;margin:6px 0" :min="0" v-model="scope.row.availableAmount" :precision="2" :controls="false" size="mini" disabled />
                    </template>
                </el-table-column>

input组件代码

<template>
    <el-input 
        class="galaxy-num-input" 
        v-model="displayValue" 
        :size="size"
        :clearable="clearable"
        :disabled="disabled"
        :placeholder="placeholder"
        @change="changeInput"
        @blur="onBlur"
        @focus="focus">
    </el-input>
</template>
<script>
export default {
    props:{
        value:{
            type:[Number,String],
            default:""
        },
        min:{
            type:Number,
            default:-999999999999999
        },

        max:{
            type:Number,
            default:999999999999999
        },
        precision:{
            type:Number,
            default:2
        },
        size:{
            type:String,
            default:"",
        },
        disabled:{
            type:Boolean,
            default:false
        },
        clearable:{
            type:Boolean,
            default:true
        },
        placeholder: {
            type:String,
            default:"",
        }
    },

    data(){
        return {
           displayValue:"", 
        }
    },

    watch:{
        value(){
            this.displayValue = this.format(this.value);
        },

        displayValue(){
            
        }
    },

    mounted(){
        this.displayValue = this.format(this.value);
    },

    methods:{

        format (val) {
            if(this.checkRates(val)){
                return Number(this.th2Num(val)).toFixed(this.precision).replace(/\B(?=(\d{3})+(?!\d))/g,',');
            }else{
                return "";
            }
        },

        checkRates(str){
            if(str===null||str===undefined){
                return false
            }else{
                let numStr = str.toString().trim().replace(/,/g, "",)
                var re = /^([0-9]+\.?[0-9]*|-[0-9]+\.?[0-9]*)$/;
                return re.test(numStr);
            }
        },

        th2Num(str){
            if(str===null||str===undefined||str===""){
                return 0;
            }else{
                return Number(str.toString().trim().replace(/,/g, "",));
            }
        },

        onBlur(){
            this.changeInput(this.displayValue);
        },


        changeInput(val){
            console.log(val,"hhhhhhhhhhhhhhhhh")
            const {min,max} = this.$props;
            let num = Number(val.trim().replace(/,/g, ""));
            if(!this.checkRates(val)){
                this.displayValue = "";
            }else{
                if(num<min){
                    num = min;
                }
                if(num>max){
                    num = max;
                }
            }
            this.displayValue = this.format(num);
            this.$emit("input",Number(num.toFixed(this.precision)));
            this.$emit("change",Number(num.toFixed(this.precision)));
        },

        focus(){
            this.$emit("focus");
        },

    },
}
</script>
<style lang="scss" scoped>
.galaxy-num-input /deep/ .el-input__inner{
        text-align: center !important;
}
</style>
  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值