在vue中实现树形结构的表格,以及对数据结构的处理

需求:有一些告警数据,如果他们的计划编码相同则实现折叠效果,单击某行数据可以进行关闭,状态发生改变,关闭以后按钮禁用

实现效果:目前所有告警消息都被关闭,如果未被关闭则可以进行关闭

实现代码:

<!--物料管理 -->
<template><div class="app-container"><el-tablev-loading="loading":data="tableList"row-key="alarmId":tree-props="{ children: 'children', hasChildren: 'hasChildren' }"><el-table-column label="计划编码" prop="planCode" /><el-table-column label="产品编码" prop="itemCode" /><el-table-column label="产品名称" prop="itemName" /><el-table-column label="缺少重量" prop="diffValue" /><el-table-column label="关闭时间" prop="shutTime" /><el-table-column fixed="right" label="操作" width="200"><template slot-scope="scope"><el-buttontype="text"size="small"@click="close(scope.row)"v-if="scope.row.dealStatus == 0">关闭</el-button><el-buttontype="text"size="small"v-show="scope.row.dealStatus == 1"disabled>已关闭</el-button></template></el-table-column></el-table><paginationv-show="total > 0":total="total":page.sync="queryParams.pageNum":limit.sync="queryParams.pageSize"@pagination="getList"/></div>
</template><script>
import { alarmList, closeAlarm } from "../../../api/alarm/index";
export default {data() {return {queryParams: {pageNum: 1,pageSize: 10,},total: 0,loading: false,tableList: [],};},created() {this.getList();},methods: {async close(row) {console.log("参数", row);const obj = { alarmId: row.alarmId, dealStatus: 1 };const res = await closeAlarm(obj);if (res) {this.$notify({title: "成功",message: "该物料告警已被关闭",type: "success",});console.log("关闭成功", res);this.getList();}},async getList() {const res = await alarmList(this.queryParams);if (res) {console.log("告警记录", res);const newTableList = [];res.rows.forEach((item) => {const existingItem = newTableList.find((newItem) => newItem.planCode === item.planCode);if (existingItem) {// 如果已存在相同 planCode 的项,将当前项添加到其 children 数组中existingItem.children.push({alarmId: item.alarmId,planId: item.planId,planCode: item.planCode,itemId: item.itemId,itemCode: item.itemCode,itemName: item.itemName,diffValue: item.diffValue,dealStatus: item.dealStatus,createTime: item.createTime,shutTime: item.shutTime,clientIp: item.clientIp,});} else {// 如果不存在相同 planCode 的项,直接添加当前项newTableList.push({alarmId: item.alarmId,planId: item.planId,planCode: item.planCode,itemId: item.itemId,itemCode: item.itemCode,itemName: item.itemName,diffValue: item.diffValue,dealStatus: item.dealStatus,createTime: item.createTime,shutTime: item.shutTime,clientIp: item.clientIp,children: [],});}});// console.log("告警记录数据结构", newTableList);this.tableList = newTableList;}},},
};
</script><style lang="scss" scoped>
.callback-btn {font-size: 16px;font-weight: bold;margin-top: 16px;color: red;
}
</style>

需要处理的就是表格数据结构,如果后端没有对数据结构进行处理,那我们就要自己处理了

假设这是后端返回的数据结构:

[{"alarmId": 1,"planId": 2,"planCode": "DDDDDD1","itemId": 100,"itemCode": "CP.021.22.01","itemName": "Sovbond TBBS-80GE(水粉色)","diffValue": 3,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107"},{"alarmId": 2,"planId": 2,"planCode": "DDDDDD1","itemId": 100,"itemCode": "CP.021.22.01","itemName": "Sovbond TBBS-80GE(水粉色)","diffValue": 2,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107"},{"alarmId": 3,"planId": 17,"planCode": "生产计划2","itemId": 108,"itemCode": "CP.040.21.01","itemName": "Sovbond TMTM-80GE","diffValue": 5,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107"},{"alarmId": 4,"planId": 17,"planCode": "生产计划2","itemId": 108,"itemCode": "CP.040.21.01","itemName": "Sovbond TMTM-80GE","diffValue": 4,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107"},{"alarmId": 5,"planId": 17,"planCode": "生产计划2","itemId": 108,"itemCode": "CP.040.21.01","itemName": "Sovbond TMTM-80GE","diffValue": 5,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107"},{"alarmId": 6,"planId": 2,"planCode": "DDDDDD1","itemId": 101,"itemCode": "CP.021.24.01","itemName": "Sovbond TBBS-80GS","diffValue": 2,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107"},{"alarmId": 7,"planId": 2,"planCode": "DDDDDD1","itemId": 103,"itemCode": "CP.023.21.01","itemName": "Sovbond OTOS-80GE","diffValue": 6,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107"},{"alarmId": 8,"planId": 15,"planCode": "生产计划1","itemId": 732,"itemCode": "CP.02","itemName": "美年达","diffValue": 7,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107"}
]

而我们需要得到的数据结构是这样的,将planId相同的做成折叠效果,实现方式在上述代码中getList方法中就已经实现了。

[{"alarmId": 1,"planId": 2,"planCode": "DDDDDD1","itemId": 100,"itemCode": "CP.021.22.01","itemName": "Sovbond TBBS-80GE(水粉色)","diffValue": 3,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107","children": [{"alarmId": 2,"planId": 2,"planCode": "DDDDDD1","itemId": 100,"itemCode": "CP.021.22.01","itemName": "Sovbond TBBS-80GE(水粉色)","diffValue": 2,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107"},{"alarmId": 6,"planId": 2,"planCode": "DDDDDD1","itemId": 101,"itemCode": "CP.021.24.01","itemName": "Sovbond TBBS-80GS","diffValue": 2,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107"},{"alarmId": 7,"planId": 2,"planCode": "DDDDDD1","itemId": 103,"itemCode": "CP.023.21.01","itemName": "Sovbond OTOS-80GE","diffValue": 6,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107"}]},{"alarmId": 3,"planId": 17,"planCode": "生产计划2","itemId": 108,"itemCode": "CP.040.21.01","itemName": "Sovbond TMTM-80GE","diffValue": 5,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107","children": [{"alarmId": 4,"planId": 17,"planCode": "生产计划2","itemId": 108,"itemCode": "CP.040.21.01","itemName": "Sovbond TMTM-80GE","diffValue": 4,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107"},{"alarmId": 5,"planId": 17,"planCode": "生产计划2","itemId": 108,"itemCode": "CP.040.21.01","itemName": "Sovbond TMTM-80GE","diffValue": 5,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107"}]},{"alarmId": 8,"planId": 15,"planCode": "生产计划1","itemId": 732,"itemCode": "CP.02","itemName": "美年达","diffValue": 7,"dealStatus": 1,"createTime": "2024-01-11","shutTime": "2024-01-12","clientIp": "192.168.90.107","children": []}
]

需要值得注意的时候,你已关闭按钮在被关闭时需要使用v-show而不是v-if

因为:

已关闭按钮的 disabled 属性是通过 v-if 条件来控制的。这样的实现方式可能会导致 Vue 在渲染时忽略 disabled 属性,因为在 v-if 的条件下,即使按钮处于已关闭状态,它仍然存在于 DOM 中,只是在用户界面上被隐藏了。

解决这个问题的一种方式是使用 v-show 指令而不是 v-if 来控制按钮的显示与隐藏。v-show 不会在元素隐藏时将其从 DOM 中移除,而是使用 CSS 样式来控制显示和隐藏,这样在已关闭状态下,按钮依然存在于 DOM 中,但用户无法与其交互。

或者将关闭按钮写成这样:

<el-buttontype="text"size="small":disabled="scope.row.dealStatus === 1"
>已关闭</el-button>

所以v-showv-if有时候达到的效果可能一样,但也不能乱使用,更何况有时候产生的效果是完全不一样的。

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

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

相关文章

【Python】编程练习的解密与实战(四)

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《Python | 编程解码》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 &#x1fa90;1. 初识Python &a…

集简云动作管理平台上线:创建强大且可分享的AI助手(GPTs)

OpenAI的GPT Store于昨天上线&#xff0c;用户可以找到好用的GPTs&#xff0c;也可以将自己的GPTs分享到GPT Store中。未来&#xff08;预计今年1季度&#xff09;甚至可以从GPTs Store中获取利润分成。 要创建强大的GPTs离不开调用外部的软件工具&#xff0c;比如查询CRM/ERP软…

Stable Diffusion初体验

体验了下 Stable Diffusion 2.0 的图片生成&#xff0c;效果还是挺惊艳的&#xff0c;没有细调prompt输入&#xff0c;直接输入了下面的内容&#xff1a; generate a Elimination Game image of burnning tree, Cyberpunk style 然后点击生成&#xff0c;经过了10多秒的等待就输…

TensorRT模型优化模型部署(七)--Quantization量化(PTQ and QAT)(二)

系列文章目录 第一章 TensorRT优化部署&#xff08;一&#xff09;–TensorRT和ONNX基础 第二章 TensorRT优化部署&#xff08;二&#xff09;–剖析ONNX架构 第三章 TensorRT优化部署&#xff08;三&#xff09;–ONNX注册算子 第四章 TensorRT模型优化部署&#xff08;四&am…

国产麒麟系统开机没有网络需要点一下这个设置

问题描述&#xff1a; 一台国产电脑网线连接正常&#xff0c;打开网页后显示无法访问&#xff0c;那么是什么原因无法上网呢&#xff1f;下面就告诉你一个小方法去解决一下这个问题&#xff1b; 检查故障&#xff1a; 检测交换机、网线、水晶头全都正常&#xff0c;同房间摆放的…

Hive基础知识(十):Hive导入数据的五种方式

1. 向表中装载数据&#xff08;Load&#xff09; 1&#xff09;语法 hive> load data [local] inpath 数据的 path[overwrite] into table student [partition (partcol1val1,…)]; &#xff08;1&#xff09;load data:表示加载数据 &#xff08;2&#xff09;local:表示…

【从0上手cornerstone3D】如何渲染一个基础的Dicom文件(含演示)

一、Cornerstone3D 是什么&#xff1f; Cornerstone3D官网&#xff1a;https://www.cornerstonejs.org/ 在线查看显示效果&#xff08;加载需时间&#xff0c;可先点击运行&#xff09;&#xff0c;欢迎fork 二、代码示例 了解了Cornerstone是什么&#xff0c;有什么作用后&…

竞赛保研 基于深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的视频多目标跟踪实现 …

2024年湖北职称评审对论文的要求

1.期刊发表版面的时间节点2024年12月及之前 2.期刊是正规的期刊&#xff0c;有国内刊号 3.期刊能在国家出版社总署检索到 4.文章内容查重符合知网查重标准 5.论文方向和申报专业方向一致 6.必须要是第一作者或者独著 7.评正高的人才们要准备中文核心论文两篇或出版专业学术论著…

UE5 简易MC教程学习心得

https://www.bilibili.com/video/BV12G411J7hV?p13&spm_id_frompageDriver&vd_sourceab35b4ab4f3968642ce6c3f773f85138 ———— 目录 0.摧毁逻辑学习 1.发光材质灯方块 2.封装。想让子类 不更改父类的变量。 3.材质命名习惯。 0.摧毁逻辑学习 达到摧毁的条件…

用模方软件进行模型的透明贴图,为什么翻出来透明部分是黑的?

答&#xff1a;透贴需要用PNG格式。 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.1新增自动单体化建模功能&#xff0c;支持一键自动提取房屋结构&#xff0c;平均1栋复杂建筑物只需3…

JAVA毕业设计121—基于Java+Springboot的房屋租赁管理系统(源代码+数据库+9000字文档)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringboot的房屋租赁管理系统(源代码数据库9000字文档)121 一、系统介绍 本项目还有ssm版本&#xff0c;分为用户、房东、管理员三种角色 1、用户&#xff1a; 注册、登…

【机器学习300问】5、什么是强化学习?

我将从三个方面为大家简明阐述什么是强化学习&#xff0c;首先从强化学习的定义大家的了解强化学习的特点&#xff0c;其次学习强化学习里特殊的术语加深对强化学习的理解&#xff0c;最后通过和监督学习与无监督学习的比较&#xff0c;通过对比学习来了解强化学习。 一、强化…

thinkphp6报错Driver [Think] not supported.

thinkphp6报错Driver [Think] not supported. 问题解决方法测试 问题 直接使用 View::fetch();渲染模板报错 解决方法 这个报错是由于有安装视图驱动造成的 运行如下命令安装即可 composer require topthink/think-view官方文档中是这么写的 视图功能由\think\View类配合视…

JavaScript基础03

1 - 循环 1.1 for循环 语法结构 for(初始化变量; 条件表达式; 操作表达式 ){//循环体 } 名称作用初始化变量通常被用于初始化一个计数器&#xff0c;该表达式可以使用 var 关键字声明新的变量&#xff0c;这个变量帮我们来记录次数。条件表达式用于确定每一次循环是否能被执行…

Python元组(tuple)

目录 元组元组的创建和删除访问元组元素修改元组元组方法 元组 元组是有序且不可更改的集合。在 Python 中&#xff0c;元组是用圆括号编写的。 元组的创建和删除 实例 创建元组&#xff1a; thistuple ("a", "b", "c") print(thistuple)删除…

redis夯实之路-哨兵(Sentinel)机制详解

Sentinel&#xff08;哨兵&#xff09;保证了redis的高可用性&#xff0c;一个Sentinel或多个Sentinel组成的系统监视多个主从服务器&#xff0c;当主服务器下线时&#xff0c;自动将一个从服务器升级为主服务器。 sentinel的主要功能 集群监控&#xff1a;负责监控redis mas…

Nightingale 夜莺监控系统 - 监控篇(2)

Author&#xff1a;rab 官方文档&#xff1a;https://flashcat.cloud/docs/content/flashcat-monitor/categraf/3-configuration/ 目录 前言一、Categraf 配置文件二、Input 插件配置文件2.1 插件说明2.2 通用配置2.2.1 配置采集频率 interval2.2.2 配置采集实例 instances2.2…

word写标书的疑难杂症总结

最近在解决方案工作&#xff0c;与office工具经常打交道&#xff0c;各种问题&#xff0c;在此最下记录&#xff1a; 1.word中文档距离文档顶端有距离调整不了 1.疑难杂症问题1&#xff0c;多个空格都是不能解决 #解决办法&#xff1a;word中--布局-下拉框---“版式”--“垂直…

css3基础语法与盒模型

css3基础语法与盒模型 前言CSS3基础入门css3的书写位置内嵌式外链式导入式&#xff08;工作中几乎不用&#xff09;行内式 css3基本语法css3选择器标签选择器id选择器class类名原子类复合选择器伪类元素关系选择器序号选择器属性选择器css3新增伪类![在这里插入图片描述](https…