tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 12.7 kB
Source Map (JSON)
{"version":3,"file":"stepper.mjs","sources":["../../src/stepper/stepper.tsx"],"sourcesContent":["import { toRefs, computed, defineComponent } from 'vue';\nimport { AddIcon, RemoveIcon } from 'tdesign-icons-vue-next';\nimport config from '../config';\nimport props from './props';\nimport { formatNumber } from '../shared';\nimport { TdStepperProps } from './type';\nimport { useFormDisabled } from '../form/hooks';\nimport useVModel from '../hooks/useVModel';\nimport { usePrefixClass } from '../hooks/useClass';\n\nconst { prefix } = config;\nexport default defineComponent({\n name: `${prefix}-stepper`,\n props,\n setup(props, context) {\n const stepperClass = usePrefixClass('stepper');\n\n const { value, modelValue, min, max, step, integer } = toRefs(props);\n const [stepperValue, setStepperValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n\n const disabled = useFormDisabled();\n const inputStyle = computed(() => (props.inputWidth ? { width: `${props.inputWidth}px` } : ''));\n\n const isDisabled = (type: 'minus' | 'plus') => {\n if (disabled.value) return true;\n if (type === 'minus' && Number(stepperValue.value) <= min.value) {\n return true;\n }\n if (type === 'plus' && Number(stepperValue.value) >= max.value) {\n return true;\n }\n return false;\n };\n\n const getLen = (num: number) => {\n const numStr = num.toString();\n return numStr.indexOf('.') === -1 ? 0 : numStr.split('.')[1].length;\n };\n\n /**\n * 精确加法\n */\n const add = (a: number, b: number) => {\n const maxLen = Math.max(getLen(a), getLen(b));\n const base = 10 ** maxLen;\n return Math.round(a * base + b * base) / base;\n };\n\n const formatValue = (value: number) => {\n return Math.max(Math.min(max.value, value, Number.MAX_SAFE_INTEGER), min.value, Number.MIN_SAFE_INTEGER).toFixed(\n Math.max(getLen(step.value), getLen(value)),\n );\n };\n\n const updateValue = (value: TdStepperProps['value']) => {\n setStepperValue(formatNumber(`${value}`, !integer.value));\n };\n\n const plusValue = () => {\n if (isDisabled('plus')) {\n props.onOverlimit?.('plus');\n return;\n }\n updateValue(formatValue(add(Number(stepperValue.value), step.value)));\n };\n\n const minusValue = () => {\n if (isDisabled('minus')) {\n props.onOverlimit?.('minus');\n return;\n }\n updateValue(formatValue(add(Number(stepperValue.value), -step.value)));\n };\n\n const handleInput = (e: Event) => {\n const value = formatNumber((e.target as HTMLTextAreaElement).value, !integer.value);\n setStepperValue(value);\n };\n\n const handleChange = () => {\n const formattedValue = formatValue(Number(stepperValue.value));\n updateValue(formattedValue);\n };\n\n const handleFocus = () => {\n props.onFocus?.(Number(stepperValue.value));\n };\n\n const handleBlur = () => {\n props.onBlur?.(Number(stepperValue.value));\n };\n\n return () => {\n return (\n <div class={[`${stepperClass.value}`, `${stepperClass.value}--${props.size}`]}>\n <div\n class={[\n `${stepperClass.value}__minus`,\n `${stepperClass.value}__minus--${props.theme}`,\n `${stepperClass.value}__icon--${props.size}`,\n `${\n disabled.value || Number(stepperValue.value) <= props.min\n ? `${stepperClass.value}--${props.theme}-disabled`\n : ''\n }`,\n ]}\n onClick={minusValue}\n >\n <RemoveIcon class={`${stepperClass.value}__minus-icon`} />\n </div>\n <input\n value={stepperValue.value}\n class={[\n `${stepperClass.value}__input`,\n `${stepperClass.value}__input--${props.theme}`,\n `${stepperClass.value}__input--${props.size}`,\n `${disabled.value ? `${stepperClass.value}--${props.theme}-disabled` : ''}`,\n ]}\n type={integer.value ? 'tel' : 'text'}\n inputmode={integer.value ? 'numeric' : 'decimal'}\n style={inputStyle.value}\n disabled={props.disableInput || disabled.value}\n readonly={props.disableInput}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onInput={handleInput}\n onChange={handleChange}\n />\n <div\n class={[\n `${stepperClass.value}__plus`,\n `${stepperClass.value}__plus--${props.theme}`,\n `${stepperClass.value}__icon--${props.size}`,\n `${\n disabled.value || Number(stepperValue.value) >= props.max\n ? `${stepperClass.value}--${props.theme}-disabled`\n : ''\n }`,\n ]}\n onClick={plusValue}\n >\n <AddIcon class={`${stepperClass.value}__plus-icon`} />\n </div>\n </div>\n );\n };\n },\n});\n"],"names":["prefix","config","defineComponent","name","props","setup","context","stepperClass","usePrefixClass","_toRefs","toRefs","value","modelValue","min","max","step","integer","_useVModel","useVModel","defaultValue","onChange","_useVModel2","_slicedToArray","stepperValue","setStepperValue","disabled","useFormDisabled","inputStyle","computed","inputWidth","width","concat","isDisabled","type","Number","getLen","num","numStr","toString","indexOf","split","length","add","a","b","maxLen","Math","base","round","formatValue","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","toFixed","updateValue","formatNumber","plusValue","_props2$onOverlimit","onOverlimit","minusValue","_props2$onOverlimit2","handleInput","e","target","handleChange","formattedValue","handleFocus","_props2$onFocus","onFocus","handleBlur","_props2$onBlur","onBlur","_createVNode","size","theme","RemoveIcon","disableInput","AddIcon"],"mappings":"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"}