vue中封装自动计算比例滑块

 

 

 此插件为另一位漂亮的前端同事小姐姐封装,觉得非常好用于是决定记载下来,便于复用

如图需要动态传入需要分配权重的数组,平均分配可以自动将100%平均分给数组中的值

 如果手动拖拽,则会自动计算可拖动最大区域,便于最终总权重必定为100%

<el-alert class="merge-alert" type="warning" :closable="false"><div slot="title" class="display-flex"><div style="height:28px;line-height:28px">所选的参与评分类型权重加起来应等于100%,已配置 <span style="font-weighScore:600">{{ totalWeight || 0 }}</span> %。</div><el-button @click="setAllExpWeight" size="mini" type="text">平均分配</el-button></div></el-alert><el-divider></el-divider><div class="course-exp-weighScore-list"><div v-for="item in form.courseObjectiveWeightList" :key="item.id"><div style="padding:10px;"><el-row type="flex" justify="space-between"><el-col :span="24"><p>{{item.name}} </p></el-col></el-row><el-row type="flex" justify="space-between" :gutter="13"><el-col :span="16" style="padding-left: 15px;"><ultralabx-slider v-model="item.weight" :max="referenceWeight[item.id]"></ultralabx-slider></el-col><el-col class="text-right" :span="8"><el-input-number v-model="item.weight" size="mini" :min="0" :max="referenceWeight[item.id]" :precision="0"></el-input-number>%</el-col></el-row></div><div class="dashed"></div></div></div>components: {ultralabxSlider,},computed: {totalWeight() {let total = 0;this.form.courseObjectiveWeightList.forEach((item) => {total += item.weight;});return total;},referenceWeight() {let obj = {};this.form.courseObjectiveWeightList.forEach((item) => {let { id } = item;obj[id] = 100;this.form.courseObjectiveWeightList.filter((item) => item.id !== id).forEach((item) => {obj[id] -= item.weight || 0;});if (obj[id] < 0) {obj[id] = 0;}});return obj;},},methods:{setAllExpWeight() {//平均分配let weightArr = this.disNumber(100,this.form.courseObjectiveWeightList.length);this.form.courseObjectiveWeightList.map((item, index) => {item.weight = weightArr[index];});},disNumber(num, len) {let average = Math.floor(num / len)let remainder = num % lenlet arr = new Array(len).fill(average)if (remainder > 0) {for (let i = 0; i < remainder; i++) {arr[i]++}}return arr}}// 模拟数据 ,需要自行替换
form.courseObjectiveWeightList = [ { "id": "1689911475658219522", "name": "好好生活啊", "weight": 0 }, { "id": "1689910525744832514", "name": "好日子", "weight": 0 }, { "id": "1689156584639741954", "name": "实验知识1", "weight": 0 } ]

 下面是封装ultralabx-slider组件需要联动使用

<template><div class="ultralabx-slider-box"><el-slider class="down-slider" v-model="maxNumber" :marks="{[maxNumber]: `${maxNumber}%`}" disabled></el-slider><el-slider class="up-slider" v-model="curNumber" :max="maxNumber" :disabled="disabled" :style="`width: ${maxNumber}%`"></el-slider></div>
</template><script>
export default {name: "ultralabxSlider",props: {value: {type: Number,default: 0,},max: {type: Number,default: 100,},disabled: {type: Boolean,default: false,},},watch: {value: {immediate: true,handler(val) {if (val === this.curNumber) {return;}this.curNumber = val;},},max: {immediate: true,handler(val) {this.maxNumber = val;},},curNumber: {immediate: true,handler(val) {if (val === this.value) {return;}this.$emit("input", val);},},},data() {return {curNumber: 0,maxNumber: 100,};},
};
</script><style lang="scss">
.ultralabx-slider-box {.el-slider__button {width: 10px;height: 10px;border-width: 4px;}.el-slider__bar,.el-slider__runway {height: 4px;border: 1px solid transparent;top: -1px;}.el-slider__button-wrapper {top: -16px;}.up-slider {.el-slider__runway {background-color: transparent;}.el-slider__bar {border: 1px solid #409eff;}}.down-slider {.el-slider__runway {border-color: #e4e7ed;&.disabled .el-slider__button {border: 1px dashed #ff8e1f;}}.el-slider__bar {border-color: #ff8e1f;border-style: dashed;background-color: #ffffff;}.el-slider__marks-text {color: #ff8e1f;font-size: 12px;line-height: 2.3;white-space: nowrap;bottom: 0.333333em;margin-top: 0;}}
}
</style><style lang="scss" scoped>
.ultralabx-slider-box {position: relative;.up-slider {position: absolute;left: 0;top: 0;z-index: 1001;}.down-slider {}
}
</style>

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

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

相关文章

2023国赛数学建模D题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

Spring Boot + Vue3前后端分离实战wiki知识库系统十二--用户管理单点登录开发一...

目标&#xff1a; 在上一次https://www.cnblogs.com/webor2006/p/17533745.html我们已经完成了文档管理的功能模块开发&#xff0c;接下来则开启新模块的学习---用户登录&#xff0c;这块还是有不少知识点值得学习的&#xff0c;先来看一下整体的效果&#xff0c;关于效果官网有…

BUUCTF 还原大师 1

题目描述&#xff1a; 我们得到了一串神秘字符串&#xff1a;TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母&#xff0c;为了确定这个神秘字符串&#xff0c;我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全&#xff0c;E903???4D…

【elementUi】绘制自定义表格、绘制曲线表格

要求绘制下图系列表格&#xff1a; 实现步骤: 1.绘制树&#xff0c;实现树勾选字段—>表格绘制字段 逻辑&#xff1a; 树&#xff1a;check-change“treeChart.handleCheckChange” 绑定点击选择事件&#xff0c;改变data.column3数据项&#xff1b;表格:columns"data…

1. 基于UDP的TFTP文件传输上传下载完整版本

1&#xff09;tftp协议概述 简单文件传输协议&#xff0c;适用于在网络上进行文件传输的一套标准协议&#xff0c;使用UDP传输 特点&#xff1a; 是应用层协议 基于UDP协议实现 数据传输模式 octet&#xff1a;二进制模式&#xff08;常用&#xff09; mail&#xff1a;…

Install And Understand APISIX(Master the knowledge of APISIX)

Master the knowledge of APISIX Install And Understand APISIX 环境准备 接口服务&#xff1a;gpt 接口服务&#xff08;使用 spring boot 编写的 Chat GPT 接口服务&#xff09; 调用接口示例&#xff1a; 虚拟机软件&#xff1a;VMware Workstation Pro 17 Linux 镜像&…

大数据Flink(六十三):SqlClient工具的使用

文章目录 SqlClient工具的使用 一、​​​​​​​入门

(二分查找) 11. 旋转数组的最小数字 ——【Leetcode每日一题】

❓剑指 Offer 11. 旋转数组的最小数字 难度&#xff1a;简单 把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;我们称之为数组的旋转。 给你一个可能存在 重复 元素值的数组 numbers &#xff0c;它原来是一个升序排列的数组&#xff0c;并按上述情形进行了一次旋转…

分布式唯一ID实战

目录 一、UUID二、数据库方式1、数据库生成之简单方式2、数据库生成 - 多台机器和设置步长&#xff0c;解决性能问题3、Leaf-segment 方案实现4、双 buffer 优化5、Leaf高可用容灾 三、基于Redis实现分布式ID四、雪花算法 一、UUID UUID的标准形式包含32个16进制数字&#xff…

UE5 实现残影效果

文章目录 前言实现效果示例1示例2示例3示例4实现扩展前言 本文采用虚幻5.2.1版本,对角色生成残影效果进行讲解,以一种简单的、通俗易懂的、高性能的方式来实现此效果。此效果可以在角色使用某一技能时触发,比如使用攻击招式、闪现等等。 实现效果 示例1 在昏暗的环境示例…

用 oneAPI 实现 AI 欺诈检测:一款智能图像识别工具

简介 虚假图像和视频日益成为社交媒体、新闻报道以及在线内容中的一大隐患。在这个信息爆炸的时代&#xff0c;如何准确地识别和应对这些虚假内容已经成为一个迫切的问题。为了帮助用户更好地辨别虚假内容&#xff0c;我开发了一款基于 oneAPI、TensorFlow 和 Neural Compress…

百日筑基篇——python爬虫学习(一)

百日筑基篇——python爬虫学习&#xff08;一&#xff09; 文章目录 前言一、python爬虫介绍二、URL管理器三、所需基础模块的介绍1. requests2. BeautifulSoup1. HTML介绍2. 网页解析器 四、实操1. 代码展示2. 代码解释1. 将大文件划分为小的文件&#xff08;根据AA的ID数量划…

【无监督】2、MAE | 自监督模型提取的图像特征也很能打!(CVPR2022 Oral)

文章目录 一、背景二、方法三、效果 论文&#xff1a;Masked Autoencoders Are Scalable Vision Learners 代码&#xff1a;https://github.com/facebookresearch/mae 出处&#xff1a;CVPR2022 Oral | 何凯明 | FAIR 一、背景 本文的标题突出了两个词&#xff1a; masked…

【佳佳怪文献分享】安全人机交互的学习责任分配与自动驾驶应用

标题&#xff1a;Learning Responsibility Allocations for Safe Human-Robot Interaction with Applications to Autonomous Driving 作者&#xff1a;Ryan K. Cosner, Yuxiao Chen, Karen Leung, and Marco Pavone 来源&#xff1a;2023 IEEE International Conference on …

设备管理系统能起到什么作用?

在现代工业运营中&#xff0c;设备的高效管理和维护对于保障生产稳定运行和提升企业竞争力至关重要。而设备管理系统作为一种关键工具&#xff0c;能够极大地提高企业的生产效率和设备维护的准确性。本文将深入探讨设备管理系统的作用&#xff0c;以PreMaint设备数字化平台为例…

sealos安装k8s

一、前言 1、我前面文章有写过使用 kubeadm 安装的方式&#xff0c;大家可以去参考 &#xff08;二&#xff09;k8s集群安装&#xff0c;有一系列的k8s文章说明 2、安装k8s的方式有很多 kubeadmsealoskubespray等等 3、关于sealos来安装 k8s &#xff0c;也是非常建议大家去…

基于自适应曲线阈值和非局部稀疏正则化的压缩感知图像复原研究【自适应曲线阈值去除加性稳态白/有色高斯噪声】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

P450进阶款无人机室内定位功能研测

在以往的Prometheus 450&#xff08;P450&#xff09;无人机上&#xff0c;我们搭载的是Intel Realsense T265定位模块&#xff0c;使用USB连接方式挂载到机载计算机allspark上&#xff0c;通过机载上SDK驱动T265运行并输出SLAM信息&#xff0c;以此来实现室内定位功能。 为进…