31 lines
854 B
Vue
31 lines
854 B
Vue
<script setup>
|
|
import VnInput from 'src/components/common/VnInput.vue';
|
|
|
|
defineProps({
|
|
step: { type: Number, default: 0.01 },
|
|
decimalPlaces: { type: Number, default: 2 },
|
|
positive: { type: Boolean, default: true },
|
|
});
|
|
|
|
const model = defineModel({ type: [Number, String] });
|
|
const emit = defineEmits(['blur']);
|
|
</script>
|
|
<template>
|
|
<VnInput
|
|
v-bind="$attrs"
|
|
v-model.number="model"
|
|
type="number"
|
|
:step="step"
|
|
@input="
|
|
(evt) => {
|
|
const val = evt.target.value;
|
|
if (positive && val < 0) return (model = 0);
|
|
const [, decimal] = val.split('.');
|
|
if (val && decimal?.length > decimalPlaces)
|
|
model = parseFloat(val).toFixed(decimalPlaces);
|
|
}
|
|
"
|
|
@blur="emit('blur')"
|
|
/>
|
|
</template>
|