当前位置: 首页 > news >正文

基于el-input的数字范围输入框

数字范围组件

在这里插入图片描述

在做筛选时可能会出现数字范围的筛选,例如:价格、面积,但是elementUI本身没有自带的数字范围组件,于是进行了简单的封装,不足可自行进行优化

满足功能:

  1. 最小值与最大值的相关约束,当最大值存在,最小值大于最大值且失焦,自动将最小值赋值为最大值,反之亦然。
  2. 拥有el-input组件本身的属性绑定以及方法
  3. 可设置精度,默认精度为0
  4. 可使用el-input插槽,但需要加前缀start-end-进行区分
<numberRange :startValue.sync="startValue" :endValue.sync="endValue" />

相关代码:

<template><div class="input-number-range" :class="{ 'is-disabled': disabled }"><div class="flex"><el-inputref="inputFromRef"clearablev-model="startValue":disabled="disabled":placeholder="startPlaceholder"@blur="handleBlurFrom"@focus="handleFocusFrom"@input="handleInputFrom"@change="handleInputChangeFrom"v-bind="$attrs"v-on="$listeners"><template v-for="(value, name) in startSlots" #[name]="slotData"><slot :name="name" v-bind="slotData || {}"></slot></template></el-input><div class="center"><span></span></div><el-inputref="inputToRef"clearablev-model="endValue":disabled="disabled":placeholder="endPlaceholder"@blur="handleBlurTo"@focus="handleFocusTo"@input="handleInputTo"@change="handleInputChangeTo"v-bind="$attrs"v-on="$listeners"><template v-for="(value, name) in endSlots" #[name]="slotData"><slot :name="name" v-bind="slotData || {}"></slot></template></el-input></div></div>
</template><script>
export default {name: "InputNumberRange",props: {// inputs: {//   type: Array,//   required: true,//   default: () => [null, null],// },startValue: {type: Number || String,default: null,},endValue: {typeof: Number || String,default: null,},// 是否禁用disabled: {type: Boolean,default: false,},startPlaceholder: {type: String,default: "最小值",},endPlaceholder: {type: String,default: "最大值",},// 精度参数precision: {type: Number,default: 0,validator(val) {return val >= 0 && val === parseInt(val, 10);},},},data() {return {};},computed: {startSlots() {const slots = {};Object.keys(this.$slots).forEach((name) => {if (name.startsWith("start-")) {const newKey = name.replace(/^start-/, "");slots[newKey] = this.$slots[name];}});return slots;},endSlots() {const slots = {};Object.keys(this.$slots).forEach((name) => {if (name.startsWith("end-")) {const newKey = name.replace(/^end-/, "");slots[newKey] = this.$slots[name];}});return slots;},},watch: {},methods: {handleInputFrom(value) {this.$emit("update:startValue", value);},handleInputTo(value) {this.$emit("update:endValue", value);},// from输入框change事件handleInputChangeFrom(value) {// 如果是非数字空返回nullif (value == "" || isNaN(value)) {this.$emit("update:startValue", null);return;}// 初始化数字精度const newStartValue = this.setPrecisionValue(value);// 如果from > to 将from值替换成toif (typeof newStartValue === "number" &&parseFloat(newStartValue) > parseFloat(this.endValue)) {this.startValue = this.endValue;} else {this.startValue = newStartValue;}if (this.startValue !== value) {this.$emit("update:startValue", this.startValue);}},// to输入框change事件handleInputChangeTo(value) {// 如果是非数字空返回nullif (value == "" || isNaN(value)) {this.$emit("update:endValue", null);return;}// 初始化数字精度const newEndValue = this.setPrecisionValue(value);// 如果from > to 将from值替换成toif (typeof newEndValue === "number" &&parseFloat(newEndValue) < parseFloat(this.startValue)) {this.endValue = this.startValue;} else {this.endValue = newEndValue;}if (this.endValue !== value) {this.$emit("update:endValue", this.endValue);}},handleBlurFrom(event) {this.$emit("blur-from", event);},handleFocusFrom(event) {this.$emit("focus-from", event);},handleBlurTo(event) {this.$emit("blur-to", event);},handleFocusTo(event) {this.$emit("focus-to", event);},// 根据精度保留数字toPrecision(num, precision) {if (precision === undefined) precision = 0;return parseFloat(Math.round(num * Math.pow(10, precision)) / Math.pow(10, precision));},// 设置精度setPrecisionValue(value) {if (this.precision === undefined) return value;return this.toPrecision(parseFloat(value), this.precision);},},
};
</script><style lang="scss" scoped>
// 取消element原有的input框样式
::v-deep .el-input__inner {border: 0px;margin: 0;padding: 0 15px;background-color: transparent;
}
.input-number-range {background-color: #fff;border: 1px solid #dcdfe6;border-radius: 4px;
}
.flex {display: flex;flex-direction: row;width: 100%;height: auto;justify-content: center;align-items: center;.center {margin-top: 1px;}
}
.is-disabled {background-color: #f5f7fa;border-color: #e4e7ed;color: #c0c4cc;cursor: not-allowed;
}
</style>

相关文章:

基于el-input的数字范围输入框

数字范围组件 在做筛选时可能会出现数字范围的筛选&#xff0c;例如&#xff1a;价格、面积&#xff0c;但是elementUI本身没有自带的数字范围组件&#xff0c;于是进行了简单的封装&#xff0c;不足可自行进行优化 满足功能&#xff1a; 最小值与最大值的相关约束&#xff0…...

车联网OTA安全实践

摘要&#xff1a; 近年来&#xff0c;智能汽车已成为全球汽车产业发展的战略方向&#xff0c;汽车技术与工程核心逐渐从传统硬件层面转移到软件层面&#xff0c;汽车行业已经踏上了软件定义汽车&#xff08;SDV&#xff09;的变革之路。 在SDV的大趋势下&#xff0c;汽车零部件…...

智融合·共未来丨智合同携手百融云创打造合同智能化应用服务平台

人工智能技术是当今社会的热议话题之一。近年来&#xff0c;众多企业在人工智能领域持续布局&#xff0c;相关技术已在社会生产各环节极大地提高了生产效率。如果把过去信息技术产业的发展比喻为“手工时代”&#xff0c;那么人工智能技术的出现则将把信息技术产业推向“自动化…...

iOS ARC

iOS ARC是自动引用计数的缩写&#xff0c;是一种内存管理技术。它是由苹果公司在iOS 5中引入的&#xff0c;用于自动管理对象的内存生命周期。在ARC中&#xff0c;开发者不再需要手动管理对象的内存&#xff0c;这大大简化了开发过程&#xff0c;同时也减少了内存泄漏的风险。 …...

【代码随想录】刷题Day13

1.deque使用 239. 滑动窗口最大值 deque的介绍在C语法&#xff08;12&#xff09;---- 模拟实现queue和stack_哈里沃克的博客-CSDN博客 其实deque就是一个两头都能进出数据的数据结构&#xff0c;我们之所以使用它就是因为他的结构特点就是两边出&#xff0c;这样我们既可以判…...

playwright连接已有浏览器操作

文章目录 playwright连接已有浏览器操作前置准备打开本地已有缓存的Chrome&#xff08;理解&#xff09;指定端口打开浏览器连接指定端口已启动浏览器&#xff08;推荐&#xff09; playwright连接已有浏览器操作 前置准备 pip install playwright # 安装playwright的python…...

深度学习模型评估简单介绍

文章目录 深度学习模型评估介绍训练集、验证集和测试集应用场景准确率和误差率精确率和召回率F1 分数ROC 曲线和 AUC总结 深度学习模型评估介绍 本教程将介绍深度学习模型的基本评估方法及它们的应用场景。我们主要关注监督学习模型。 训练集、验证集和测试集 在深度学习中&…...

PyTorch——利用Accelerate轻松控制多个CPU/GPU/TPU加速计算

PyTorch——利用Accelerate轻松控制多个CPU/GPU/TPU加速计算 前言官方示例单个程序内控制多个CPU/GPU/TPU简单说一下设备环境导包加载数据 FashionMNIST创建一个简单的CNN模型训练函数-只包含训练训练函数-包含训练和验证训练 多个服务器、多个程序间控制多个CPU/GPU/TPU参考链…...

4个很多人都不知道的现代JavaScript技巧

JavaScript在不断的进化和升级&#xff0c;越来越多的新特性让我们的代码变得更加简洁。因此&#xff0c;今天这篇文章&#xff0c;我将跟大家分享 4 个不常用的 JavaScript 运算符。让我们一起研究它们。 1.可选的链接运算符 这个功能非常好用&#xff0c;它可以防止我的代码…...

【Java笔试强训 19】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;汽水瓶 …...

JPA整合达梦数据库

陈老老老板&#x1f9b8; &#x1f468;‍&#x1f4bb;本文专栏&#xff1a;国产数据库-达梦数据库&#xff08;主要讲一些达梦数据库相关的内容&#xff09; &#x1f468;‍&#x1f4bb;本文简述&#xff1a;本文讲一下SpringBoot整合JPA与达梦数据库&#xff0c;就是简单&…...

制药专业转行软件测试,带我的师傅在这干了两年半,最终还是跑路了......

故事的开始 最近这几天有点忧伤&#xff0c;因为带我的师傅要跑路了&#xff0c;嗯&#xff0c;应该说已经跑路了&#xff0c;他是制药专业的&#xff0c;已经在这个公司干了两年半了。其实今年3月份的时候他就跟我说他要跑路了&#xff0c;然后我说&#xff0c;要不你先把五一…...

「SQL面试题库」 No_53 项目员工II

&#x1f345; 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起&#xff0c;全员免费参与的SQL学习活动。我每天发布1道SQL面试真题&#xff0c;从简单到困难&#xff0c;涵盖所有SQL知识点&#xff0c;我敢保证只要做完这100道题&#xff0c;不仅能轻松搞定面试&#xff0…...

Ruby适用于什么类型的开发

Ruby是一种开源的、解释型的、面向对象的编程语言&#xff0c;由松本行弘&#xff08;Yukihiro Matsumoto&#xff09;于1993年首次发布。Ruby语言的设计理念是追求简洁优美&#xff0c;使编程更加人性化&#xff0c;其语法简单、易读、易写&#xff0c;被誉为“程序员的最佳朋…...

Mysql数据库的备份恢复

最近正在做一个异地数据的定期同步汇总工作&#xff0c;涉及到的数据库主要是Mysql数据库&#xff0c;用于存储现场的一些IOT采集的实时数据&#xff0c;所以做了以下备份恢复测试&#xff0c;现场和总部网络可定期联通&#xff0c;但速度有限&#xff0c;因此计划采用备份恢复…...

C++ 使用动态内存创建一个类

使用动态内存的一个常见原因是允许多个对象共享相同的状态。 例如&#xff0c;假定我们希望定义一个名为Blob 的类&#xff0c;保存一组元素。与容器不同&#xff0c;我们希望Blob对象的不同拷贝之间共享相同的元素。即&#xff0c;当我们拷贝一个Blob时&#xff0c;原Blob对象…...

2023年华中杯选题人数公布

2023年华中杯选题人数公布 经过一晚上代码的编写&#xff0c;论文的写作&#xff0c;C题完整版论文已经发布&#xff0c; 注&#xff1a;蓝色字体为说明备注解释字体&#xff0c;不能出现在大家的论文里。黑色字体为论文部分&#xff0c;大家可以根据红色字体的注记进行摘抄。…...

【黑马旅游案例记录(结合ES)】

黑马旅游案例记录 11.9.黑马旅游案例11.9.1.酒店搜索和分页11.9.1.1.需求分析11.9.1.2.定义实体类11.9.1.3.定义controller11.9.1.4.实现搜索业务 11.9.2.酒店结果过滤11.9.2.1.需求分析11.9.2.2.修改实体类11.9.2.3.修改搜索业务 11.9.3.我周边的酒店11.9.3.1.需求分析11.9.3.…...

基于 A* 搜索算法来优化无线传感器节点网络的平均电池寿命(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 A*&#xff08;念做&#xff1a;A Star&#xff09;算法是一种很常用的路径查找和图形遍历算法。它有较好的性能和准确度。本文…...

三款自研AI应用引领未来,重塑行业新风尚

在这个科技日新月异的时代&#xff0c;AI技术已经渗透到我们生活的方方面面。今天&#xff0c;我们将向您推荐三款领域独具特色的AI应用&#xff0c;它们分别是AI律师、AI小红书文案提示词、以及AI Midjourney提示词。这些应用都具有独特的内涵&#xff0c;让我们一起走进这些智…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...