vue3的elementPlus中使用el-input控制用户输入正确金额,el-input-number遇到的一系列问题

  今天在做项目的时候,本来顺顺利利就能上线,但是突然上面给了个任务,在输入框输入金额时,小数点后面位数超过三位就不能在输入了。当时我天真的以为这很好解决,接下来发生的事情让我措不及防。

  首先,我原先使用的组件是el-input-number,这个确实是一个非常好的组件,但是在某些方面,他却隐含着巨大的隐患。

<el-input-numberv-model="scope.row.UnitPrice":precision="3"placeholder="(单位:元)":step="1":min="0":controls="false"style="width: 100px"/>

 此处,el-input-number,保存三位小数,最小为0,等等都没有问题,非常适合金额的输入。

但是,el-input-number会存在一个致命的问题,尤其是对于金额方面,el-input-number会对输入的值进行四舍五入,也就是如果用户复制了一个数为0.1689到输入框,里面的值就会自动变为0.169,这对于金额方面是影响非常大的,虽然是0.001,但是如果基数很大,10000000*0.001,钱的数额就会发生巨大变化。

紧接着,我去找寻解决这个问题的办法,发现是可以解决的,但是存在一个问题就是:
 

el-input-number的数值是不支持函数动态更改的(但有方法确实是可以改的,但也太过麻烦)

我反复使用函数去改值,发现el-input-number的值就是不变,但是数组的值已经变化了,差点让我原地去世,此时,原本一个很小的需求已经花费了一个小时还没解决,我大汗淋漓。(手动狗头)

最后我选择放弃el-input-number转而使用el-input

<el-inputref="elinput_number"v-model="scope.row.UnitPrice"//此处如果:number,便输入不了0.00等placeholder="(单位:元)"//type="number"//此处若添加,用户依然可以输入e,通过敲击eee打出中文后添加,不建议添加,但是最终的值将不会是数字类型,需要在传值的时候更改style="width: 100px"@input="(currentValue: number)=>changeThree(currentValue,scope.$index)"@blur="blurchange(scope.row.UnitPrice, scope.$index)"@keydown="handleInput"/>

提示:

 v-model="scope.row.UnitPrice"//此处如果后面添加:number,便输入不了0.00等 

 //type="number"//此处若添加,用户依然可以输入e,通过敲击eee打出中文后添加,不建议添加,但是最终的值将不会是数字类型,需要在传值的时候更改

 1.指定type="number"使得不允许输入中英文字符,但是发现可以输入e,+,-,于是使用@keydown,如果不需要小数点,可以在后面添加

const handleInput = (e: any) => {console.log("eeeeeeeeeee", e);let key = e.key;if (key === "e" || key === "E" || key === "+" || key === "-") {e.returnValue = false;return false;}return true;
};

2.对于需要最多三位小数后不能输入

const changeThree = (currentValue: number, index: Number) => {console.log("gaibian", currentValue, index);if (currentValue.toString().split(".")[1]?.length > 3) {// 检查值是否包含四位或更多的小数// 如果是,则移除多余的小数位并设置回输入框useradd[index].UnitPrice = Number(Math.trunc(Number(currentValue) * 1000) / 1000)}
};

 3.为了保险,在失去焦点之后再次使用正则进行校验

const blurchange = (e: any, index: any) => {console.log("e", e, index);const zheng = /^[1-9]\d*.\d+$|^0\.\d+$|^[1-9]\d*$/;if (zheng.test(e)) {console.log("通过");} else {var useradd = user.Material || [];useradd[index].UnitPrice = "";user.setMaterial(useradd);}
};

4.至此,终于解决了,其中可能有更简单的方法,如果大佬有,请评论区批评指正 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/699139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javaScript前端文件一致性校验-md5方法

需求背景&#xff1a;在处理文件上传时使用了第三方平台存储&#xff0c;后端在下载时需要校验与文件与上传时是否一致&#xff0c;已校验文件是否丢失的问题。如我们公司业务场景使用了分段上传&#xff0c;分段上传如果没有校验合并后的文件是否完整&#xff0c;可能会存在部…

Elasticsearch:基于 Langchain 的 Elasticsearch Agent 对文档的搜索

在今天的文章中&#xff0c;我们将重点介绍如何使用 LangChain 提供的基础设施在 Python 中构建 Elasticsearch agent。 该 agent 应允许用户以自然语言询问有关 Elasticsearch 集群中数据的问题。 Elasticsearch 是一个强大的搜索引擎&#xff0c;支持词法和向量搜索。 Elast…

121 Linux C++ 通讯架构实战 nginx源码学习目的,学习源码前期准备

零 nginx 源码学习的目的 把nginx中重要的&#xff0c;有用的&#xff0c;代码提取出来作为我们自己知识库的一部分&#xff0c;以备将来使用 一&#xff0c;nginx 源码在windows 上也可以下载下来。 我们下载下来&#xff0c;注意下载的是nginx 的 linux源码&#xff0c; 只…

项目管理:如何成功完成一个项目

项目管理是一项重要的技能&#xff0c;它可以帮助你成功地完成一个项目。以下是一些关键的步骤&#xff0c;可以帮助你实现这一目标&#xff1a; 1. 明确项目目标&#xff1a;在开始项目之前&#xff0c;你需要明确项目的目标。这将有助于你制定一个明确的计划&#xff0c;并确…

HDFS 之 Topology(Rack) Awareness - 机架感知

1、 简介 机架感知在大型分布式存储系统中非常实用,可以有效保证数据的高可用,同时提升集群稳定性。在HDFS中,也实现了类似Topology Awareness的机制,只不过是采用软件的方式模拟。 2、机架感知存在的意义 分布式存储系统的一个特殊之处在于其通常包含非常多的机器。Clie…

【目标航迹管理(1)】基于d-s证据理论信息融合的多核目标跟踪方法

1 引言&#xff1a;从航机起始方法开始 我们为什么会有这个议题&#xff1f;因为航机起始方法。 处理目标航迹起始的方法主要分为两大类&#xff1a;批处理和序贯。 在杂波密度比较高的环境下&#xff0c;比如有红外卫星或地面雷达监视区域&#xff0c;则选用批处理方法&…

【Spring】SpringBoot 单元测试

目 录 一.什么是单元测试&#xff1f;二.单元测试有哪些好处&#xff1f;三.Spring Boot 单元测试使用单元测试的实现步骤 一.什么是单元测试&#xff1f; 单元测试&#xff08;unit testing&#xff09;&#xff0c;是指对软件中的最小可测试单元进行检查和验证的过程就叫单元…

Java基本面试问题(一)

上篇文章Java面试10个问题的一些标准回答&#xff1a; Java中的基本数据类型有哪些&#xff1f; 标准回答&#xff1a;Java中的基本数据类型包括整型&#xff08;int, long, short, byte&#xff09;、浮点型&#xff08;float, double&#xff09;、字符型&#xff08;char&am…

chat GPT第一讲

计算机的语言奇迹&#xff1a;探秘ChatGPT的智能回答和写作能力 目前我们这个行业&#xff0c;最火的话题无疑是AI人工智能&#xff0c;类似ChatGPT这样的智能Ai,今天剩下的时间不多&#xff0c;每天一个主题&#xff0c;我给大家讲一下计算机回答问题和写作的能力&#xff0c;…

模型量化--int8量化

文章目录 一、什么是模型量化&#xff1f;二、常见的模型量化方法1.权重量化&#xff08;Weight Quantization&#xff09;2.激活量化&#xff08;Activation Quantization&#xff09;3.混合精度量化&#xff08;Mixed Precision Quantization&#xff09;4. 剪枝和量化&#…

Vue监听器(上)之组合式watch

1. 定义监听器 //要监视的属性被改变时触发 watch(要监视的属性, (更改后的心值, 更改前的旧值) > {具体操作}, );//监视对象为getter的时候 //表达式内任意响应式属性被改变时触发 watch(() > return表达式, (表达式的新值, 表达式的旧值) > {具体操作} );//数组中任…

【MySQL】多表操作、事务、索引

MySQL MYSQL 多表设计 一对多插入测试数据外键约束(物理外键)使用逻辑外键 MYSQL 多表设计 一对一表结构 MYSQL 多表设计 多对多 MYSQL 多表设计 一对多 建表语句 员工表 CREATE TABLE tb_emp (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT ID,username VARCHAR(20) N…

图片大了怎么缩小上传?30秒解决图片大小问题

在上传图片到网站、社交媒体、电子邮件或其他在线平台时&#xff0c;压缩图片可以减小文件大小&#xff0c;加快上传速度&#xff0c;并节省带宽和存储空间&#xff0c;许多网站和应用程序都有对上传图片大小的限制&#xff0c;因此利用在线图片压缩工具&#xff08;https://ww…

WordPres Bricks Builder 前台RCE漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

Jetpack Compose 架构层

点击查看&#xff1a;Jetpack Compose 架构层 官网 本页面简要介绍了组成 Jetpack Compose 的架构层&#xff0c;以及这种设计所依据的核心原则。 Jetpack Compose 不是一个单体式项目&#xff1b;它由一些模块构建而成&#xff0c;这些模块组合在一起&#xff0c;构成了一个完…

VSCODE include错误 找不到 stdio.h

解决办法&#xff1a; Ctrl Shift P 打开命令面板&#xff0c; 键入 “Select Intellisense Configuration”&#xff08;下图是因为我在写文章之前已经用过这个命令&#xff0c;所以这个历史记录出现在了第一行&#xff09; 再选择“Use gcc.exe ”&#xff08;后面的Foun…

【OpenAI官方课程】第六课:ChatGPT文本扩展Expending

欢迎来到ChatGPT 开发人员提示工程课程&#xff08;ChatGPT Prompt Engineering for Developers&#xff09;&#xff01;本课程将教您如何通过OpenAI API有效地利用大型语言模型&#xff08;LLM&#xff09;来创建强大的应用程序。 本课程由OpenAI 的Isa Fulford和 DeepLearn…

C语言-数组指针与指针数组

一、简介 对于使用C语言开发的人来说&#xff0c;指针&#xff0c;大家都是非常熟悉的。数组&#xff0c;大家也同样熟悉。但是这两个组合到一起的话&#xff0c;很多人就开始蒙圈了。这篇文章&#xff0c;就详细的介绍一下这两个概念。 指针数组和数组指针&#xff0c;听起来非…

PyTorch概述(二)---MNIST

NIST Special Database3 具体指的是一个更大的特殊数据库3&#xff1b;该数据库的内容为手写数字黑白图片&#xff1b;该数据库由美国人口普查局的雇员手写 NIST Special Database1 特殊数据库1&#xff1b;该数据库的内容为手写数字黑白图片&#xff1b;该数据库的图片由高…

互联网广告投放与IP地理位置定位

随着互联网的发展和普及&#xff0c;互联网广告投放成为各行业推广营销的重要方式之一。而结合IP地理位置定位技术&#xff0c;可以实现精准定向&#xff0c;提高广告投放的效果和精准度。IP数据云将探讨互联网广告投放与IP地理位置定位的关系&#xff0c;分析其优势和应用场景…