<template>
<el-input
v-model="input"
:maxlength="maxlength"
:placeholder="placeholder"
@blur="moneyRender()"
@focus="moneyInput"
></el-input>
</template>
<script>
export default {
props: {
value: String | Number,
maxlength: { type: String, default: '10' },
placeholder: { type: Number, default: 0 },
},
data() {
return {
input: '',
};
},
mounted() {
this.moneyRender(this.value);
},
methods: {
moneyRender(val) {
const value = val || this.input;
const reg1 = /0*([1-9]\d*|0.\d+)/;
const reg2 = /(?:.0*|(.\d+?)0+)$/;
let result = String(value).replace(reg1, '$1').replace(reg2, '$1');
this.input = this.trimNumber(result).replace(reg2, '$1');
this.$emit('input', this.input.replaceAll(',', ''));
},
trimNumber(val) {
const value = val || this.input;
let pre = String(value);
let after = '';
if (pre.indexOf('.') > -1) {
after = `.${pre.split('.')[1].replaceAll(/\D/g, '')}`;
pre = pre.split('.')[0];
}
pre = pre.replaceAll(/\D/g, '');
if (/^0+$/.test(pre)) {
return '0';
}
const reg = /(\d)(?=(?:\d{3})+$)/g;
pre = pre.replace(reg, '$1,');
if (after !== '') {
after = Number(`0${after}`).toFixed(2).slice(1);
}
return pre + after;
},
moneyInput() {
this.input = String(this.input).replaceAll(',', '');
},
},
};
</script>
```
```