forked from a1gard/xshop
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.2 KiB
Vue
45 lines
1.2 KiB
Vue
2 years ago
|
<template>
|
||
|
<input type="text" :class="classes" @keyup="fix" @input="handleInput" :id="id" v-model="content" :name="name" :placeholder="placeholder"/>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
|
||
|
export default {
|
||
|
name: "CurrencyInput",
|
||
|
props:['id','classes','name','value','placeholder'],
|
||
|
data () {
|
||
|
return {
|
||
|
content: this.value
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
handleInput (e) {
|
||
|
this.$emit('input', this.nocomma(this.content));
|
||
|
},
|
||
|
fix:function () {
|
||
|
this.content = this.commafy(this.content);
|
||
|
this.$emit('keyup');
|
||
|
},
|
||
|
nocomma: function (num) {
|
||
|
let a = num.replace(/\,/g, ''); // 1125, but a string, so convert it to number
|
||
|
return a.toString();
|
||
|
},
|
||
|
commafy: function (num) {
|
||
|
num = this.nocomma(num);
|
||
|
var str = num.toString().split('.');
|
||
|
if (str[0].length >= 4) {
|
||
|
str[0] = str[0].replace(/(\d)(?=(\d{3})+$)/g, '$1,');
|
||
|
}
|
||
|
if (str[1] && str[1].length >= 4) {
|
||
|
str[1] = str[1].replace(/(\d{3})/g, '$1,');
|
||
|
}
|
||
|
return str.join('.');
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<style scoped>
|
||
|
|
||
|
</style>
|