<template>
<el-input
:value="value"
:placeholder="placeholder"
:style="styles"
@input="handleInput"
@blur="handleBlur"
>
<template slot="prepend">
<slot name="prepend" />
</template>
<template slot="append">
<slot name="append" />
</template>
<template slot="prefix">
<slot name="prefix" />
</template>
<template slot="suffix">
<slot name="suffix" />
</template>
</el-input>
</template>
<script>
export default {
name: "NumberFormatInput",
components: {},
props: {
placeholder: {
type: String,
default: "请输入"
},
value: {
type: [Number, String],
default: null
},
styles: {
type: String,
default: ""
}
},
emits: ["on-change"],
data() {
return {
input: ""
};
},
computed: {},
watch: {},
created() {},
beforeMount() {},
mounted() {},
methods: {
handleInput(value) {
value = value.replace(/[^\d.]/g, "");
value = value.replace(/^\./g, "");
value = value.replace(/\.{2,}/g, ".");
value = value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
this.$emit("input", value);
},
handleBlur(e) {
if (!e.target.value) return;
let value = e.target.value;
value = value > 100 ? 100 : value < 0 ? 0 : value;
value = parseInt(value, 10);
this.$emit("input", value);
this.$emit("on-change");
}
}
};
</script>
<style lang="scss" scoped></style>