From 0caa17d4f0616edffd4c90780dd1d667a7306114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=90=91=E5=A4=9C?= Date: Wed, 29 May 2024 06:56:53 -0400 Subject: [PATCH] feat(button): add `decimalLimit` prop for `InputNumber` component --- .../input-number/src/input-number-types.ts | 4 +++ .../input-number/src/use-input-number.ts | 18 +++++++++++++ .../docs/components/input-number/index.md | 26 +++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/packages/devui-vue/devui/input-number/src/input-number-types.ts b/packages/devui-vue/devui/input-number/src/input-number-types.ts index d0e52a4566..c5ea9c9bc1 100644 --- a/packages/devui-vue/devui/input-number/src/input-number-types.ts +++ b/packages/devui-vue/devui/input-number/src/input-number-types.ts @@ -39,6 +39,10 @@ export const inputNumberProps = { type: Boolean, default: true, }, + decimalLimit: { + type: Number || null, + default: 2, + }, } as const; export type InputNumberProps = ExtractPropTypes; diff --git a/packages/devui-vue/devui/input-number/src/use-input-number.ts b/packages/devui-vue/devui/input-number/src/use-input-number.ts index 31c1244071..9a9da70604 100644 --- a/packages/devui-vue/devui/input-number/src/use-input-number.ts +++ b/packages/devui-vue/devui/input-number/src/use-input-number.ts @@ -84,6 +84,13 @@ export function useEvent(props: InputNumberProps, ctx: SetupContext, inputRef: R } }); + const decimalLimit = computed(() => { + if (isUndefined(props.decimalLimit)) { + return null; + } + return props.decimalLimit; + }); + const inputVal = computed(() => { if (!isUndefined(state.userInputValue)) { return state.userInputValue; @@ -132,6 +139,17 @@ export function useEvent(props: InputNumberProps, ctx: SetupContext, inputRef: R if (newVal > max.value || newVal < min.value) { newVal = newVal > max.value ? max.value : min.value; } + + // 精度限制存在才做限制 + if (decimalLimit.value) { + const splitVal = newVal.toString().split('.'); + if (splitVal.length > 1) { + const decimalVal = splitVal[1]; + if (decimalVal.length > decimalLimit.value) { + newVal = Number.parseFloat(newVal.toFixed(decimalLimit.value)); + } + } + } return newVal; }; diff --git a/packages/devui-vue/docs/components/input-number/index.md b/packages/devui-vue/docs/components/input-number/index.md index d6c6c29fd6..5fea3b2579 100644 --- a/packages/devui-vue/docs/components/input-number/index.md +++ b/packages/devui-vue/docs/components/input-number/index.md @@ -223,6 +223,32 @@ export default defineComponent({ ::: +### 限制小数 + +:::demo 设置 `decimalLimit` 属性可以限制小数位数。设置此参数后会将所有小数点后面的数字截断,而不是四舍五入。 + +```vue + + +``` + +::: + ### InputNumber 参数 | 参数名 | 类型 | 默认值 | 说明 | 跳转 Demo |