diff --git a/pages/demo/form/input.uvue b/pages/demo/form/input.uvue
index a82b279..ac2bb79 100644
--- a/pages/demo/form/input.uvue
+++ b/pages/demo/form/input.uvue
@@ -59,6 +59,16 @@
+
+ 当 type 为 number 时,可设置 precision 属性来保留精度
+
+
+
+
+
+
+
+
(2);
+
function toAlert() {
ui.showToast({
message: "Hello"
diff --git a/uni_modules/cool-ui/components/cl-input/cl-input.uvue b/uni_modules/cool-ui/components/cl-input/cl-input.uvue
index 5f0037b..04fd0eb 100644
--- a/uni_modules/cool-ui/components/cl-input/cl-input.uvue
+++ b/uni_modules/cool-ui/components/cl-input/cl-input.uvue
@@ -8,7 +8,7 @@
'cl-input--border': border,
'cl-input--focus': isFocus,
'cl-input--disabled': isDisabled,
- 'cl-input--error': isError
+ 'cl-input--error': isError,
}
]"
@tap="onTap"
@@ -28,7 +28,8 @@
:class="[
{
'is-disabled': isDisabled,
- 'is-dark': isDark
+ 'is-dark': isDark,
+ 'is-exceed': isExceed
},
ptClassName
]"
@@ -189,6 +190,11 @@ const props = defineProps({
holdKeyboard: {
type: Boolean,
default: false
+ },
+ // 保留精度
+ precision: {
+ type: Number,
+ default: 0
}
});
@@ -256,6 +262,17 @@ const showClear = computed(() => {
// 是否显示密码
const isPassword = ref(props.password);
+// 是否超出限制
+const isExceed = computed(() => {
+ // 检查数字精度是否超出限制
+ if (props.type == "number" && props.precision >= 0 && value.value != "") {
+ const parts = value.value.split(".");
+ return parts.length > 1 && parts[1].length > props.precision;
+ } else {
+ return false;
+ }
+});
+
// 切换密码显示状态
function showPassword() {
isPassword.value = !isPassword.value;
@@ -271,6 +288,17 @@ function onFocus(e: UniInputFocusEvent) {
function onBlur(e: UniInputBlurEvent) {
emit("blur", e);
+ // 处理数字精度
+ if (props.type == "number" && props.precision > 0 && value.value != "") {
+ const numValue = parseFloat(value.value);
+ if (!isNaN(numValue)) {
+ const formattedValue = numValue.toFixed(props.precision);
+ value.value = formattedValue;
+ emit("update:modelValue", formattedValue);
+ emit("change", formattedValue);
+ }
+ }
+
setTimeout(() => {
isFocus.value = false;
}, 0);
@@ -367,6 +395,14 @@ defineExpose({
&.is-dark {
@apply text-white;
}
+
+ &.is-exceed {
+ @apply text-red-500;
+ }
+
+ &.is-exceed.is-dark {
+ @apply text-red-400;
+ }
}
&__icon {
diff --git a/uni_modules/cool-ui/components/cl-input/props.ts b/uni_modules/cool-ui/components/cl-input/props.ts
index a75909b..f5e5909 100644
--- a/uni_modules/cool-ui/components/cl-input/props.ts
+++ b/uni_modules/cool-ui/components/cl-input/props.ts
@@ -29,4 +29,5 @@ export type ClInputProps = {
adjustPosition?: boolean;
maxlength?: number;
holdKeyboard?: boolean;
+ precision?: number;
};