{"version":3,"file":"my-input-number.vue2.mjs","sources":["../../../../../../src/components/my/input/my-input-number.vue"],"sourcesContent":["<template>\n    <my-input :model-value=\"innerValue\"\n              @keydown.up.prevent=\"onUp\"\n              @keydown.down.prevent=\"onDown\"\n              :disabled=\"disabled\"\n              @input=\"onInput\"\n              @change=\"onChange\"\n              autocomplete=\"off\" />\n</template>\n\n<script setup lang=\"ts\">\n\nimport MyInput from '@myprint/design/components/my/input/my-input.vue';\nimport { computed, ref, watch } from 'vue-demi';\nimport numberUtil from '@myprint/design/utils/numberUtil';\nimport { isEmpty } from 'lodash';\n\nconst emit = defineEmits(['update:modelValue', 'change']);\n\nconst props = withDefaults(defineProps<{\n    modelValue?: number | null | undefined,\n    min?: number // 最小值\n    max?: number,\n    step?: number, // 每次改变步数，可以为小数\n    formatter?: Function // 指定展示值的格式\n    precision?: number // 数值精度\n    disabled?: boolean // 是否禁用\n}>(), {\n    modelValue: undefined,\n    min: -Infinity,\n    max: Infinity,\n    formatter: (value: string) => value,\n    step: 1,\n    precision: 0,\n    disabled: false // 是否禁用\n});\n\nconst innerValue = ref(props.modelValue);\nwatch(() => props.modelValue, (_newVal, _oldVal) => {\n    innerValue.value = props.modelValue;\n});\n\n\nconst precision = computed(() => {\n    // 数值精度取步长和精度中较大者\n    const stepPrecision = String(props.step).split('.')[1]?.length || 0;\n    return Math.max(props.precision, stepPrecision);\n});\n\nfunction emitValue(value: number | null) {\n    if (value == props.modelValue) {\n        return;\n    }\n    emit('update:modelValue', value);\n    emit('change', value);\n}\n\n// const numValue = ref(props.formatter(props.modelValue?.toFixed(precision.value)));\n\n// watch(\n//     () => props.modelValue,\n//     (to) => {\n//         numValue.value = to === null ? null : props.formatter(Number(to).toFixed(precision.value));\n//     }\n// );\n//\n// watch(numValue, (to) => {\n//     if (!to) {\n//         emitValue(null);\n//     }\n// });\n\nfunction onInput(value: any) {\n    \n    if (isEmpty(value)) {\n        emitValue(value);\n        return;\n    }\n    \n    value = value.replace(/,/g, '');\n    // console.log('onInput', value, parseFloat(value));\n    if (!Number.isNaN(parseFloat(value))) {\n        // emitValue(value);\n        innerValue.value = value;\n    }\n}\n\nfunction onChange(value: any) {\n    value = value.replace(/,/g, '');\n    if (!Number.isNaN(parseFloat(value))) {\n        // Number.isNaN() 判断传递的值是否为NaN，并检测器类型是否为 Number\n        if (parseFloat(value) > props.max) {\n            emitValue(props.max);\n            return;\n        }\n        if (parseFloat(value) < props.min) {\n            emitValue(props.min);\n            return;\n        }\n        if (parseFloat(value) !== props.modelValue) {\n            emitValue(parseFloat(value));\n        } else {\n            // value = props.modelValue?.toFixed(precision.value);\n            emitValue(parseFloat(value));\n        }\n    } else {\n        // numValue.value = props.modelValue?.toFixed(precision.value);\n        emitValue(parseFloat(value));\n    }\n    \n}\n\nfunction onUp() {\n    const res = parseFloat(Math.min(props.max, numberUtil.sum(props.modelValue || 0, +props.step)).toFixed(precision.value));\n    emitValue(res);\n}\n\nfunction onDown() {\n    const res = parseFloat(Math.max(props.min, numberUtil.sum(props.modelValue || 0, -props.step)).toFixed(precision.value));\n    emitValue(res);\n}\n</script>\n"],"names":["numberUtil"],"mappings":"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"}