element checkbox选框和文字分开点击---更改一列checkbox的顺序(进阶版)

选框和文字分开点击,找了很多,没有我想要的效果,但也借鉴了一下,实现了,记录一下

样式看起来倒是没多大区别,需求:

  • 勾选了选框才可以点击文字 ,一次只能点击一条数据,点击文字,此条数据可以向上或向下移动,且此条数据的背景需高亮,就像这样:

  • 排序只在勾选的数据中有效,取消勾选,背景取消高亮

 

解决点击文字,不影响选中状态:

我在网上搜到的是首先要写一个span标签将数据包裹起来,添加点击事件,一定要加上 .prevent.stop

<el-checkbox-group v-model="selectedItems"><div v-for="(item, index) in vmList" :key="item.name" class="checkbox-item":class="{ 'highlight': isHighlighted(item)}"><el-checkbox :label="item.name" @change="handleCheckboxClick"><span @click.prevent.stop="isSelected(item) ? handleNameClick(item) : null" :class="{ 'disabled': isSelected(item) }" class="custom-span">{{item.name }}</span></el-checkbox></div>
</el-checkbox-group><div class="arrow-column"><el-button type="primary" icon="el-icon-arrow-up" @click="moveUp" :disabled="isMoveUpDisabled"></el-button><el-button type="primary" icon="el-icon-arrow-down" @click="moveDown" :disabled="isMoveDownDisabled"></el-button>
</div>

这样才可以实现点击文字不影响选中状态。就可以实现点击文字切换背景了,但其实我要的是点击背景,也可以选择整条数据并且背景高亮。

el-checkbox内部原本就有一个span标签,类名为  .el-checkbox__label,这个标签包裹在我加的span标签外面,不管怎么调整,文字周围都有一圈背景被点击后还是会改变选中状态。

后面我给.el-checkbox__label设置了一下,让文字大小和行高一致,再设置padding为0,这样点击文字及其背景就不会影响选中状态了。但是每条数据之间没有间距,看起来很拥挤,就像这样:

所以只能在我自己写的span标签想办法了,这样设置了一下 ,就正常了:

.custom-span {display: block;min-height: 16px;min-width: 160px;padding: 10px 0 10px 10px;
}

以下是全部代码:

computed计算向上或向下按钮是否可用:

computed: {// 根据选中的项计算向上移动按钮是否可用isMoveUpDisabled() {const firstSelectedItemIndex = this.vmList.findIndex( item => {if(this.highlightedItem && this.highlightedItem.name==item.name){return item}})// 如果没有选中项或选中项在第一项则禁用return firstSelectedItemIndex === -1 || firstSelectedItemIndex === 0; },// 根据选中的项计算向下移动按钮是否可用isMoveDownDisabled() {const lastHighlightedIndex = this.vmList.findIndex( item => {  if(this.highlightedItem & this.highlightedItem.name==item.name){return item}}, this.vmList.length - 1);// 如果没有高亮项或高亮项在最后一项则禁用return lastHighlightedIndex === -1 || lastHighlightedIndex === this.vmList.length - 1; }
},

向上向下移动并给勾选后的数据,添加order

// 向上移动选中的项
moveUp() {this.deviceList = []const selectedIndices = this.vmList.findIndex(vm => vm.name == this.selectedVms.name)if (selectedIndices > 0) {const vmToMove = this.vmList[selectedIndices]this.vmList.splice(selectedIndices, 1)this.vmList.splice(selectedIndices - 1, 0, vmToMove)}this.handleOrder()
},// 向下移动选中的项
moveDown() {this.deviceList = []const selectedIndices = this.vmList.findIndex(vm => vm.name == this.selectedVms.name)if (selectedIndices < this.vmList.length - 1) {const vmToMove = this.vmList[selectedIndices]this.vmList.splice(selectedIndices, 1)this.vmList.splice(selectedIndices + 1, 0, vmToMove)}this.handleOrder()
},// 添加order
handleOrder(){const deviceListCopy = JSON.parse(JSON.stringify(this.vmList));this.deviceList=[...deviceListCopy]let orderCount = 1;for(let i=0;i<this.deviceList.length;i++){const item = this.deviceList[i];// 检查当前项是否在 selectedItems 中if (this.selectedItems.includes(item.name)){// 如果存在,则添加 order 属性item.order = String(orderCount);orderCount++;}else{delete item.order;}}
}

点击勾选和文字

handleCheckboxClick(item) {// 取消勾选if (!item) {// 取消高亮this.highlightedItem = null}this.handleOrder()
},highlightItem(item) {// 点击整个项时,只改变背景颜色this.highlightedItem = (this.highlightedItem === item) ? null : item;
}, isHighlighted(item) {return this.highlightedItem === item;
}, //判断是否勾选,也就是文字是否可以点击
isSelected(item) {return this.selectedItems.includes(item.name);
}, // 点击文字
handleNameClick(item){this.selectedVms = itemthis.highlightItem(item); // 触发高亮效果
}

样式如下: 

.vm-container {float: left;border: 2px solid #dcdfe6;min-width: 200px;max-width: 300px;min-height: 250px;max-height: 300px;overflow-x: auto;overflow-y: auto;
}.el-checkbox-group{align-items: left;.el-checkbox{margin-right: 0px;}
}line-height: 0px;.vm-container:after {content: "";display: table;clear: both;
}::v-deep .el-checkbox .el-checkbox__inner{width: 15px;height: 15px;
}.vm-container::v-deep .el-checkbox {color: #9c9ea0;
}::v-deep .el-checkbox .el-checkbox__input.is-checked .el-checkbox__inner::after {top: 2px;left: 5px;
}.arrow-column {margin-left: 10px;float: left;display: flex;flex-direction: column;align-items: left;justify-content: center;
}.el-button+.el-button {margin-left: 0px;margin-top: 5px;
}.vm-container::v-deep .el-checkbox__label {font-size: 16px;line-height: 16px;padding-left: 0px;
}.vm-container::v-deep .el-checkbox__input.is-checked+.el-checkbox__label {color: #333333;
}.transfer-footer {margin-left: 20px;padding: 6px 5px;
}.vm-container::v-deep .checkbox-item {display: flex;align-items: center;cursor: pointer;padding: 0 0 0 10px;position: relative;
}.vm-container::v-deep .checkbox-item.highlight {background-color: #a9d9e9 !important; /* 改变背景色 */
}.vm-container::v-deep .checkbox-item.highlight span {color: white !important; /* 确保文本颜色为白色 */
}.custom-span {display: block;min-height: 16px;min-width: 160px;padding: 10px 0 10px 10px;
}

🆗🦌

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

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

相关文章

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey阅读笔记

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey 综述阅读笔记 仅记录个人比较感兴趣的部分 基本知识 PEFT的三种分类&#xff1a;additive, selective, reparameterized, and hybrid fine-tuning selective fine-tuning 不需要任何额外的参数&am…

Axure横向菜单高级交互

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;横向菜单高级交互 主要内容&#xff1a;横向菜单左右拖动、选中效果 应用场景&#xff1a;app横向菜单、pc后台动态区域 案例展示&#xff1a; 演…

SpringBoot技术的车辆管理流程自动化

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

uniapp-实现天地图以及行政区划图层覆盖

前言&#xff1a; 在uniapp中&#xff0c;难免会遇到使用地图展示的功能&#xff0c;但是百度谷歌这些收费的显然对于大部分开源节流的开发者是不愿意接受的&#xff0c;所以天地图则是最佳选择。 此篇文章&#xff0c;详细的实现地图展示功能&#xff0c;并且可以自定义容器宽…

探索 Jupyter 笔记本转换的无限可能:nbconvert 库的神秘面纱

文章目录 探索 Jupyter 笔记本转换的无限可能&#xff1a;nbconvert 库的神秘面纱背景&#xff1a;为何选择 nbconvert&#xff1f;库简介&#xff1a;nbconvert 是什么&#xff1f;安装指南&#xff1a;如何安装 nbconvert&#xff1f;函数用法&#xff1a;简单函数示例应用场…

安装vue发生异常:npm ERR! the command again as root/Administrator.

一、异常 npm ERR! The operation was rejected by your operating system. npm ERR! Its possible that the file was already in use (by a text editor or antivirus), npm ERR! or that you lack permissions to access it. npm ERR! npm ERR! If you believe this might b…

安卓开发中轮播图和其指示器的设置

在安卓开发中&#xff0c;轮播图&#xff08;Carousel&#xff09;是一种常见的UI组件&#xff0c;用于展示一系列图片或内容&#xff0c;用户可以左右滑动来切换不同的视图。轮播图通常用于展示广告、新闻、产品图片等。 轮播图的指示器&#xff08;Indicator&#xff09;则是…

大模型生图安全疫苗注入赛题解析(DataWhale组队学习)

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月实践赛的大模型生图安全疫苗注入赛道&#xff1b;本文主要整理本次赛事的基本流程和优化方法。&#x1f495;&#x1f495;&#x1f60a; 一…

IEC104规约的秘密之九----链路层和应用层

104规约从TCP往上&#xff0c;分成链路层和应用层。 如图&#xff0c;APCI就是链路层&#xff0c;ASDU的就是应用层 我们看到报文都是68打头的&#xff0c;因为应用层报文也要交给链路层发送&#xff0c;链路层增加了开头的6个字节再进行发送。 完全用于链路层的报文每帧都只有…

好用,易用,高效,稳定 基于opencv 的 图像模板匹配 - python 实现

在定位、搜索固定界面图块时&#xff0c;经常用到模板匹配&#xff0c;opencv自带的图像模板匹配好用&#xff0c;易用&#xff0c;高效&#xff0c;稳定&#xff0c;且有多种匹配计算方式。 具体示例如下&#xff1a; 模板图&#xff1a; 待搜索图&#xff1a; 具体实现代码…

FreeRTOS - 任务管理

在学习FreeRTOS过程中&#xff0c;结合韦东山-FreeRTOS手册和视频、野火-FreeRTOS内核实现与应用开发、及网上查找的其他资源&#xff0c;整理了该篇文章。如有内容理解不正确之处&#xff0c;欢迎大家指出&#xff0c;共同进步。 参考&#xff1a;https://rtos.100ask.net/zh/…

SpringColoud GateWay 核心组件

优质博文&#xff1a;IT-BLOG-CN 【1】Route路由&#xff1a; Gateway的基本构建模块&#xff0c;它由ID、目标URL、断言集合和过滤器集合组成。如果聚合断言结果为真&#xff0c;则匹配到该路由。 Route路由-动态路由实现原理&#xff1a; 配置变化Apollo 服务地址实例变化…

H3C设备连接方式

Console线本地连接 协议Serial&#xff0c;接口com口&#xff0c;波特率9600&#xff08;设备管理器中查看com口&#xff09; 适用于设备初次调试 使用Telnet远程访问 适用于设备上架配置好后的维护管理 使用SSH远程访问 数据传输过程加密&#xff0c;安全的远程访问

洞察数字化营销的本质

数字化营销&#xff0c;即借助互联网、移动互联网、社交媒体等数字技术与渠道实现营销目标。涵盖市场调研、品牌推广、产品销售到客户服务全过程。 其特点显著。精准定位是一大优势&#xff0c;利用大数据分析和人工智能&#xff0c;深入了解客户需求、兴趣和行为&#xff0c;精…

AdmX_new

0x00前言 因为环境问题&#xff0c;此次靶场都放在vm上。都为NAT模式。 靶机地址: https://download.vulnhub.com/admx/AdmX_new.7z 需要找到两个flag文件。 0x01信息搜集 搜集IP 确认目标IP为172.16.8.131&#xff0c;进一步信息搜集 获取端口开放情况&#xff0c;版本信…

多模态大语言模型(MLLM)-Blip3/xGen-MM

论文链接&#xff1a;https://www.arxiv.org/abs/2408.08872 代码链接&#xff1a;https://github.com/salesforce/LAVIS/tree/xgen-mm 本次解读xGen-MM (BLIP-3): A Family of Open Large Multimodal Models 可以看作是 [1] Blip: Bootstrapping language-image pre-training…

stm32 bootloader写法

bootloader写法&#xff1a; 假设app的起始地址&#xff1a;0x08020000&#xff0c;则bootloader的范围是0x0800,0000~0x0801,FFFF。 #define APP_ADDR 0x08020000 // 应用程序首地址定义 typedef void (*APP_FUNC)(void); // 函数指针类型定义 /*main函数中调用rum_app&#x…

【从零开始的LeetCode-算法】504. 七进制数

给定一个整数 num&#xff0c;将其转化为 7 进制&#xff0c;并以字符串形式输出。 示例 1: 输入: num 100 输出: "202"示例 2: 输入: num -7 输出: "-10"提示&#xff1a; -107 < num < 107 我的解答 class Solution {public String convertT…

大数据存储计算平台EasyMR:大数据集群动态扩缩容,快速提升集群服务能力

在当今的数据驱动时代&#xff0c;组织面临着数据量的爆炸性增长。为了有效管理和存储这些数据&#xff0c;许多组织依赖于 Hadoop 这样的分布式存储系统。Hadoop 集群通过在多个节点上存储数据的冗余副本&#xff0c;提供了高可靠性和可扩展性。然而&#xff0c;随着数据量的不…

ChatGPT国内中文版镜像网站整理合集(2024/10/06)

一、GPT中文镜像站 ① yixiaai.com 支持GPT4、4o以及o1&#xff0c;支持MJ绘画 ② chat.lify.vip 支持通用全模型&#xff0c;支持文件读取、插件、绘画、AIPPT ③ AI Chat 支持GPT3.5/4&#xff0c;4o以及MJ绘画 1. 什么是镜像站 镜像站&#xff08;Mirror Site&#xff…