vue 渲染数组,拖拽排序,渲染同一个数组拖拽排序不影响其他选中行状态

当我们能够设置单行状态改变的时候,那么肯定可以拿到选中的当前行的id或者下标index。
只要设定一个初始化值在拖拽开始的时候重新赋值,然后再处理选中状态的时候进行判断即可。
前期写的时候没有注意到这个问题,可以看这个文章。

在复测的时候发现了,当我改变任意一个排序的时候会影响到其他的状态。虽然其他行的顺序没有变化,但是设定的颜色却渲染了。
解决 ,在data 中初始设定一个新的变量 承接 选中的行的父元素下标 startIndex: ‘’, 在开始拖拽的时候获取并重新赋值, this.startIndex = i,在 isSelected 处理改变颜色的时候判断即可。
在这里插入图片描述

以前的问题

在这里插入图片描述
解决后不在影响
在这里插入图片描述
主要的代码也就在这里,天机了传值和接收赋值处理

isSelected(i, j) {
console.log(this.startIndex, ‘///this.startIndex’, i);
if(this.startIndex === i){
return j === this.selectedIndex; // 判断该图标是否被选中
}
},
dragStart (i, j, item2) {
console.log(i, j, item2, ‘----------------’);
this.startIndex = i // 开始选中的行下标。
this.dragStartIndex = j
this.dragStartData = item2
this.selectedIndex = j; // 更新选中的索引值
},
在这里插入图片描述

<template><div class="atomizing-wrap"><div class="liquid-wrap"><div class="conduit1"><!-- <img src="../../../assets/images/emulsification/liquidtank/conduit1.png" alt=""><div class="lititle-wrap"><lititle title="井下原水"/></div> --></div><div class="liquid-box"><liquid :dataInfo="dataInfos.emulsionSite" @liquidClik="liquidClik()"/></div></div><div class="supercharge-box"><supercharge :dataInfo="dataInfos.superchargeSite" :typeInfo="dataInfos.emulsionSite"/></div><div class="pump-box"><pump :dataInfo="dataInfos" @pumpClik="pumpClik()"/></div><zmjdialog ref="zmjdialog" top="10vh" width="900px" @confirm="confirm" @cancel="cancel" ><el-form ref="ruleForm" :model="formData" label-width="150px"><div class="df"><!-- :rules="[{ required: true, message: '请输入测点', trigger: ['blur', 'change'] }]" --><el-form-itemprop="emulsionSite.site"label="清水箱测点"><el-input v-model="formData.emulsionSite.site" placeholder="请输入清水箱测点"></el-input></el-form-item><el-form-itemlabel-width="80px"prop="emulsionSite.unit"label="单位"><el-input v-model="formData.emulsionSite.unit" :style="{width: '100px'}" placeholder="请输入单位"></el-input></el-form-item><el-form-itemlabel-width="80px"prop="emulsionSite.maxValue"label="满量程"><el-input v-model="formData.emulsionSite.maxValue" type="number" :style="{width: '100px'}" placeholder="满量程"></el-input></el-form-item></div><div class="df"><el-form-itemprop="systemSite.site"label="喷雾泵系统压力测点"><el-input v-model="formData.systemSite.site" placeholder="请输入喷雾泵系统压力"></el-input></el-form-item><el-form-itemlabel-width="80px"prop="systemSite.unit"label="单位"><el-input v-model="formData.systemSite.unit" :style="{width: '100px'}" placeholder="请输入单位"></el-input></el-form-item></div><div class="pressurize"><div class="addpressurize" @click="addpressurize">添加喷雾增压</div><el-form-itemv-for="(item, i) in formData.superchargeSite":key="i":label="`${i+1}#喷雾增压`"><el-input v-model="item.site" placeholder="请输入喷雾增压测点"></el-input><div v-if="i !== 0" class="el-icon-remove" @click="deletepressurize(i)"></div></el-form-item><!-- <el-form-itemlabel-width="80px"prop="superchargeSite.number"label="数量":rules="[{ required: true, message: '请输入数量', trigger: ['blur', 'change'] },{ validator: validatenum, trigger: 'blur'}]"><el-input v-model="formData.superchargeSite.number" type="number" :style="{width: '100px'}" placeholder="请输入数量"></el-input></el-form-item> --></div><div class="pump-list"><div class="title"><span>喷雾泵</span><ul><!-- <li @click="pumpcancel">取消</li> --><li @click="addpump">添加</li></ul></div><div class="ulmine"><el-collapse v-model="activeNames" @change="handleChange"><el-collapse-item v-for="(item, i) in formData.pumplist" :key="i" :name="i"><template slot="title">{{ i+1 }}#{{ item.title }}<div class="pumpdelete" @click.stop="pumpdelete(i)">删除</div></template><div class="ulmine-div"><div class="addpumpsite" @click="addpumpsite(i)">添加测点</div><div class="df"><el-form-itemlabel-width="100px"label="喷雾泵测点"><el-input v-model="item.site" placeholder="请输入测点"></el-input></el-form-item><el-form-itemlabel-width="80px"label="分站远控"><el-switchv-model="item.control"></el-switch></el-form-item><el-form-itemlabel-width="80px"label="解锁"><el-switchv-model="item.unlock"></el-switch></el-form-item></div><div v-for="(item2, j) in item.list":key="j"class="df"draggable="true"@dragstart="dragStart(i, j, item2)"@dragover.prevent="dragOver(j)"@dragend="dragEnd(i)"><i class="el-icon-s-fold" :class="{'selected': isSelected(i, j)}"></i><el-form-itemlabel-width="100px"label="测点名称"><el-input v-model="item2.label" placeholder="请输入测点名称"></el-input></el-form-item><el-form-itemlabel-width="50px"label="测点"><el-input v-model="item2.site" :style="{width: '100px'}" placeholder="请输入测点"></el-input></el-form-item><el-form-itemlabel-width="50px"label="单位"><el-input v-model="item2.unit" :style="{width: '100px'}" placeholder="请输入单位"></el-input></el-form-item><el-form-itemlabel-width="60px"label="最大值"><el-input v-model="item2.maxValue" type="number" :style="{width: '100px'}" placeholder="最大值"></el-input></el-form-item><div class="el-icon-remove" @click="deletepumpsite(i,j)"></div></div></div></el-collapse-item></el-collapse></div></div></el-form></zmjdialog><zmjdialog ref="childInfoDialog" width="850px" top="30vh"  :title="`${label}历史数据`" @confirm="childInfoDialog"><zmj-echarts :ref="`historicalLineEcharts${EchartsId}`" :echarts-id="`historicalLineEcharts${EchartsId}`" :height="'200px'"></zmj-echarts></zmjdialog></div>
</template><script>
import ZmjEcharts from '@/components/zmjEcharts.vue'
import { shearerOptions } from '../../components/echarts/Historicalline.js'export default {name: 'atomizing',components: {ZmjEcharts,liquid: () => import('./liquid.vue'),// lititle: () => import('./li-title.vue'),supercharge: () => import('./supercharge.vue'),pump: () => import('./pump.vue')},props: {dataInfo: {type: Object,default (){return {}}},dataTypeList: {type: Array,default (){return []}}},data () {return {activeNames: [0],formData: {},dataInfos: {},groupName: '', // 测点大类dataName: '', // 测名称deviceIdList: 1, // 设备号label: null,EchartsId: null,selectedIndex: -1,dragStartIndex: '',dragStartData: '',startIndex: ''}},watch: {dataInfo: {immediate: true,deep: true,handler (val) {this.formData = JSON.parse(JSON.stringify(val))this.dataInfos = JSON.parse(JSON.stringify(val))}}},computed: {},created () {},mounted () {this.bus.$on("waterCustomEvent", (v) => {this.dbChange(v, 'pumplistClikqs')});window.$eventBus.$on('wsMessage', message => {let dataType =  message.dataTypemessage.data.forEach(val => {for(let i in this.dataInfos){if(Array.isArray(this.dataInfos[i])){this.dataInfos[i].forEach(v => {if(this.sifn(v.site) === dataType && this.sifn(v.site, 2) === val.deviceId){v.value = val.value}v.list && v.list.forEach(v2 => {if(this.sifn(v2.site) === dataType && this.sifn(v2.site, 2) === val.deviceId){v2.value = val.value}})})}else if(this.sifn(this.dataInfos[i].site)  === dataType && this.sifn(this.dataInfos[i].site, 2) ===val.deviceId){this.dataInfos[i].value = val.value}}})})},beforeDestroy () {window.$eventBus.$off('wsMessage')},methods: {isSelected(i, j) {console.log(this.startIndex, '///this.startIndex', i);if(this.startIndex === i){return j === this.selectedIndex; // 判断该图标是否被选中}},dragStart (i, j, item2) {console.log(i, j, item2, '----------------');this.startIndex = i // 开始选中的行下标。this.dragStartIndex = jthis.dragStartData = item2this.selectedIndex = j; // 更新选中的索引值},// 只要拖拽元素进入到放置区域就触发,这里实际是鼠标指针进入放置区域才触发dragOver (j) {this.dragOverIndex = j},dragEnd (i) {const copyTodolist = [...this.formData.pumplist[i].list]// 删除老的节点copyTodolist.splice(this.dragStartIndex, 1)// 在列表中目标位置增加新的节点copyTodolist.splice(this.dragOverIndex, 0, this.dragStartData)this.selectedIndex = this.dragOverIndex; // 更新选中的索引值this.formData.pumplist[i].list = [...copyTodolist]this.dragOverIndex = ''},pumpClik () {this.dbChange(this.dataInfos.systemSite, 'pumpClikqs')},liquidClik () {this.dbChange(this.dataInfos.emulsionSite, 'liquidClikqs')},dbChange(item, EchartsId) {this.EchartsId = EchartsIdthis.$refs.childInfoDialog.open()let newArr = item?.site?.split('/') || [];if(newArr.length === 3){this.groupName = `${newArr[0]}` // 测点大类this.deviceIdList =  `${newArr[1]}`*1 // 设备号this.dataName = `${newArr[2]}` // 测名称}this.label = item.label || item.title + (item.text ? item.text : '' )let params = {workFaceCode: window.$getStorage('workFaceInfo').workFaceCode,startTime: window.$dayjs().format('YYYY-MM-DD 00:00:00'),endTime: window.$dayjs().add(1, 'day').format('YYYY-MM-DD 00:00:00'),aggregateType : 'none', // 聚合类型 传none获取原始历史值groupName: this.groupName, // 测点大类dataName:  this.dataName, // 测名称deviceIdList: this.deviceIdList // 设备号}let thisDataList = nullwindow.$axiosGet('deviceHistory', params).then((res) => {if(!res.length){this.$refs[`historicalLineEcharts${this.EchartsId}`] && this.$refs[`historicalLineEcharts${this.EchartsId}`].upDataEcharts(shearerOptions(res || [], params, this.dataInfos))return}thisDataList = res.map(item => {return item.data})this.$nextTick(() => {this.$refs[`historicalLineEcharts${this.EchartsId}`] && this.$refs[`historicalLineEcharts${this.EchartsId}`].getEchartsLiving();this.$refs[`historicalLineEcharts${this.EchartsId}`] && this.$refs[`historicalLineEcharts${this.EchartsId}`].upDataEcharts(shearerOptions(thisDataList || [], params, this.dataInfos))})}).catch(() => {this.$refs[`historicalLineEcharts${this.EchartsId}`] && this.$refs[`historicalLineEcharts${this.EchartsId}`].upDataEcharts(shearerOptions(thisDataList || [], params, this.dataInfos))})},childInfoDialog () {this.$refs.childInfoDialog.close()},sifn (v, i = 1) {if(v){let arr = v.split('/')if(arr.length === 3){if(i === 1){return `${arr[0]}_${arr[2]}`}else if(i === 2) {return Number(arr[1])}}else{return v}}else{return v}},handleChange (val) {console.log(val)},validatenum (rule, value, callback) {if (value === ''||value === null) {callback(new Error('数量不能为空'))} else if (Number(value) < 1 || Number(value) > 4) {callback(new Error('数量必须大于0且小于等于4'))} else {callback()}},// 乳化增压addpressurize () {if(this.formData.superchargeSite.length >= 4){this.$message.warning('喷雾增压最多添加4个')return}this.formData.superchargeSite.push({site: null,value: null})},// 乳化增压删除deletepressurize (i) {this.formData.superchargeSite.splice(i, 1)},addpump () {if(this.formData.pumplist.length >= 4){this.$message.warning('喷雾泵最多添加4个')return}this.formData.pumplist.push({title: '喷雾泵',label: '喷雾泵测点',site: null,control: true,unlock: true,list: []})},// 乳化泵取消修改pumpcancel () {},// 乳化泵删除pumpdelete (i) {if(this.formData.pumplist.length <= 1){this.$message.warning('喷雾泵最少有1个')return}this.formData.pumplist.splice(i, 1)},// 乳化泵测点添加addpumpsite (i) {this.formData.pumplist[i].list.push({label: null,site: null,unit: null,maxValue: null,value: null})},// 乳化泵测点删除deletepumpsite (i, j) {this.formData.pumplist[i].list.splice(j, 1)},edit () {this.formData = JSON.parse(JSON.stringify(this.dataInfo))this.$refs.zmjdialog.open()},confirm (){this.selectedIndex = -1;this.dragStartIndex = '';this.$refs.ruleForm.validate((valid) => {if (valid) {this.$refs.zmjdialog.close()let arr = []for(let i in this.formData){if(Array.isArray(this.formData[i])){this.formData[i].forEach(v => {arr.push(v.site)v.list && v.list.forEach(v2 => {arr.push(v2.site)})})}else{arr.push(this.formData[i].site)}}this.$emit('update:dataTypeList', arr)this.$emit('update:dataInfo', this.formData)this.$message.success('保存成功')} else {return false}})},cancel () {this.selectedIndex = -1;this.dragStartIndex = '';console.log('取消')}}
}
</script><style lang="scss" scoped>.atomizing-wrap{position: relative;text-align: left;}.liquid-wrap{width:260px;margin-left: 20px;position: relative;}.conduit1{position: absolute;top: 20px;.lititle-wrap{position: absolute;top: 0;left: 20px;}}.liquid-box{position: absolute;left: 50px;top: 90px;}.supercharge-box{position: absolute;left: 246px;top: 45px;}.pump-box{position: absolute;left: 483px;top: 45px;}.pump-list{color: #fff;border:1px solid #999;border-radius: 5px;.title{display: flex;justify-content: space-between;align-items: center;padding: 0 16px;width: 100%;height: 36px;background: rgba(238, 238, 238, 0.08);border-bottom: 1px solid #314150;box-sizing: border-box;ul{display: flex;li{margin-left: 8px;width: 64px;line-height: 24px;font-size: 14px;text-align: center;border-radius: 3px;user-select: none;cursor: pointer;}// >li:nth-child(1){//   border: 1px solid rgba(255, 255, 255, 0.24);// }>li:nth-child(1){border: 1px solid #0088FF;}}}.ulmine{padding: 10px 20px;height: 400px;overflow: hidden;overflow-y: scroll;.ulmine-div{position: relative;padding: 15px 0;}.el-icon-remove{cursor: pointer;height: 36px;line-height: 36px;font-size: 20px;padding-left: 15px;color: #999;}.pumpdelete{width: 64px;line-height: 24px;font-size: 14px;text-align: center;border-radius: 3px;cursor: pointer;border: 1px solid #B23B3B;margin-left: 620px;}.addpumpsite{position: absolute;line-height: 24px;font-size: 14px;text-align: center;border-radius: 3px;cursor: pointer;//right: 10px;top: 20px;width: 84px;right: 30px;border: 1px solid #0088FF;}.el-icon-s-fold{margin-top: 12px;color: #fff;}.selected {color: red; /* 设置选中时的颜色 */}::v-deep{.el-collapse{border: none;}.el-collapse-item__header{padding-left: 20px;//background: transparent;color: #fff;border-bottom:none;background: rgba(238, 238, 238, 0.08);}.el-collapse-item__wrap{background: transparent;border-bottom: 1px dashed #7a7d80;}.el-collapse-item__content{color: #fff;padding-bottom: 0;}}}.ulmine::-webkit-scrollbar {display: none;}
}
.pressurize{position: relative;flex-wrap:wrap;.addpressurize{color: #fff;position: absolute;line-height: 24px;font-size: 14px;text-align: center;border-radius: 3px;cursor: pointer;left: 412px;top: 5px;width: 104px;border: 1px solid #0088FF;z-index: 99;}.el-icon-remove{cursor: pointer;height: 36px;line-height: 36px;font-size: 20px;padding-left: 10px;color: #999;}
}</style>

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

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

相关文章

【CSCV】划分数据集

参考论文IEEE Xplore Full-Text PDF: 划分数据集时多了一个development set&#xff0c;如下图 先占个坑&#xff0c;看完论文再来填坑

吉祥物如何解锁虚拟主持人身份,赋能品牌营销?

在互联网突破时空的整体语境下&#xff0c;一个吉祥物可以解锁虚拟主持人身份&#xff0c;结合动作捕捉技术&#xff0c;活跃于品牌线上线下营销活动场景&#xff0c;让吉祥物虚拟主持人凭借其“萌”、的特征&#xff0c;带给用户亲近感&#xff0c;快速拉近品牌与用户的距离&a…

CRM管理系统选择技巧-六大步骤助您选择好用的客户管理系统

毫无疑问&#xff0c;一个好的CRM管理系统是任何成长型企业的必备条件。然而&#xff0c;为您的企业选择合适的CRM系统并不容易。打开搜索引擎&#xff0c;有非常多的结果&#xff0c;怎样在数十万个搜索结果中选择适合您的CRM系统&#xff1f;CRM选型要按照明确自身需求、决定…

CentOS stream 9最小化安装说明

Server with GUI&#xff1a;An integrated , easy-to-manage server with a graphical interface. 带有图形用户界面的服务器&#xff1a;集成、易于管理的服务器&#xff0c;带有图形界面。Server&#xff1a;An integrated , easy-to-manage server. 服务器&#xff1a;集成…

计算机毕业设计-----SSH在线电影售票选座版网站平台系统

项目介绍 本项目为前后台项目&#xff0c;首先分为管理员和普通用户&#xff0c;游客。 游客可以进入首页&#xff0c;必须注册成为普通用户才能进行影片的购买。管理员和普通用户进行分权限登录&#xff0c;登录后进入不同页面。 普通用户登录后进入首页&#xff0c;首页有影…

大数据Doris(五十五):SQL函数之日期函数(三)

文章目录 SQL函数之日期函数(三) 一、SECOND(DATETIME date)

项目乱、管控难?低代码CRM+助力广告行业数字化运营

广告行业涉及的是多环节、多角色、把控难的复杂项目&#xff0c;传统的广告行业普遍存在客户资源分散、项目协同难、账目不清晰、数据信息滞后等问题。 基于广告行业场景痛点&#xff0c;道一云结合七巧低代码开发平台&#xff0c;打造了广告行业CRM解决方案&#xff0c;围绕销…

K8S--service

一、简介 Service 是将集群中的 一个或一组 Pod应用程序公开为网络服务的方法。我们都知道pod是不稳定的,有可能时时刻刻都在创建和销毁,这一时刻运行的 Pod 集合可能不同于下一刻运行该应用的 Pod 集合,并且新创建的pod的ip地址会改变,所以我们不应该寄期望于pod的稳定性…

直观智慧:数据可视化如何成为我们日常决策的得力助手

数据可视化&#xff0c;作为信息时代的一项强大技术&#xff0c;不仅改变了我们对数据的理解方式&#xff0c;更在日常生活中悄然发挥着深远的作用。下面我就以可视化从业者的角度来简单说说这个话题。 在这个信息爆炸的时代&#xff0c;我们每天都面对着大量的数据。传统的数据…

苹果Safari怎么清理缓存?很简单,学会这两招够了!

Safari是一款由苹果公司开发的多功能浏览器&#xff0c;以其快速、稳定和安全而受到用户的青睐。在我们使用Safari时&#xff0c;它会产生大量的缓存文件。 这些缓存文件会占用存储空间&#xff0c;影响设备的运行速度。那么&#xff0c;safari怎么清理缓存呢&#xff1f;本文…

【数据结构 】哈夫曼编译码器

数据结构-----哈夫曼编译码器 题目题目描述基本要求算法分析 代码实现初始化编码解码打印代码打印哈夫曼树 总结 题目 题目描述 利用哈夫曼编码进行信息通信可大大提高信道利用率&#xff0c;缩短信息传输时间&#xff0c;降低传输成本。 要求&#xff1a;在发送端通过一个编…

CRM的销售管道是什么?有哪些应用价值?

常常阅读CRM管理系统相关内容的朋友会发觉&#xff0c;这些文章中总会提及一个词——【销售管道】。销售管道是一种重要的销售工具&#xff0c;是营销过程的可视化表达。销售管道清晰地叙述了业务状态&#xff0c;例如商机处在哪个阶段/哪些是更高效的销售活动。销售管道为企业…

操作系统(复习提纲)

现在距离操作系统考试还剩三天&#xff0c;我今天刚刚整理好这份提纲&#xff0c;里面还附加了一些可能考的计算题的讲解视频&#xff0c;都是B站上一些优秀的UP主录制的&#xff0c;我觉得讲的还挺好的&#xff0c;对于应付考试&#xff0c;以不挂科为宗旨应该可以哈哈哈。 1…

爬虫案例—抓取豆瓣电影的电影名称、评分、简介、评价人数

爬虫案例—抓取豆瓣电影的电影名称、评分、简介、评价人数 豆瓣电影网址&#xff1a;https://movie.douban.com/top250 主页截图和要抓取的内容如下图&#xff1a; 分析&#xff1a; 第一页的网址&#xff1a;https://movie.douban.com/top250?start0&filter 第二页的…

五、程序流程结构(2)循环结构——while语句

作用&#xff1a; 满足循环条件&#xff0c;执行循环语句 语法&#xff1a; while(循环条件){循环语句}; 解释&#xff1a;只要循环条件的结果为真&#xff0c;就执行循环语句 1、循环打印0-9 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<strin…

Cypress安装与使用教程(4)—— 软测大玩家

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

Java实现农村物流配送系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理&#xff1a;2.2.2 位置信息管理&#xff1a;2.2.3 配送人员分配&#xff1a;2.2.4 路线规划&#xff1a;2.2.5 个人中心&#xff1a;2.2.6 退换快递处理&#xff1a;…

Java调用openai微调Fine-tuning实战示例

注: 建议先看微调文档, 遵从官网给出的规则。例如: jsonl训练文件至少有10个例子, 否则报错 官网微调文档https://platform.openai.com/docs/guides/fine-tuning官网微调APIhttps://platform.openai.com/docs/api-reference/fine-tuning 1. 实现步骤 1. 准备好jsonl数据集2…

当前vscode环境下 多进程多线程运行情况探究

我的代码 其中在“打开图片时”、“进入子进程之前”、“子进程join前”、“进入子进程区域后”&#xff0c;“子进程join后”、“进入子线程区域后”分别打印了进程线程的编号和数量。 # -*- coding: utf-8 -*-# Form implementation generated from reading ui file test2.…

好书推荐丨AI时代Python量化交易实战:ChatGPT让量化交易插上翅膀(北大社)

文章目录 写在前面关键点内容简介作者简介推荐理由粉丝福利写在后面 写在前面 本期博主给大家推荐一本Python量化交易实战类书籍&#xff1a; ChatGPT让量化交易师率飞起来&#xff01; 金融量化交易新模式一本专注于帮助交易师在AI时代实现晋级、提高效率的图书书中介绍了如…