element el-table树形表格结构,勾选联动 父级勾选,子级全部选中,勾选子级,父级显示勾选状态

需求实现如下

在这里插入图片描述

在这里插入图片描述

重点使用到 @select 以及 @select-all 两个方法

在这里插入图片描述

返回数据格式

在这里插入图片描述

代码实现

 <el-table ref="tableRef" :cell-style="{ color: '#FFF', background: '#333' }":header-cell-style="{ color: '#FFF', background: '#333' }" row-key="id" :data="tableData" style="width: 100%":default-sort="{ prop: 'barcode.putInDate', order: 'descending' }"@select="select" @select-all="selectAll"@sort-change="sortChange" :tree-props="{children: 'children',hasChildren: 'hasChildren',}"><template slot="empty"><span style="color: #969799">{{ $t("NeoLight.empty") }}</span></template><el-table-column type="selection" width="50" /><el-table-column prop="barcode" :sortable="true" :label="$t('NeoLight.barcodeNo')" width="180" /><el-table-column prop="partNumber" :sortable="true" :label="$t('NeoLight.stockNo')" width="150" /><el-table-column prop="produceDate" :sortable="true" :label="$t('NeoLight.produceDate')" /><el-table-column prop="expireDate" :sortable="true" :label="$t('NeoLight.expireDate')" /><el-table-column prop="batch" :sortable="true" :label="$t('barcode.batch')" /><!-- 供应商 --><el-table-column prop="provider" :sortable="true" :label="$t('storagePos.providerNumber')" /><el-table-column prop="posName" :sortable="true" :label="$t('NeoLight.storageNo')" />
</el-table>

js方法

 methods: {//从查询接口中获取到表格数据并组装数据getList() {getStoFind(this.crud.query).then((res) => {if (res.totalElements) {this.tableData = [];this.ids = []this.totalPageNum = res.totalElementsres.content.forEach((item) => {if (item.barcode && item.barcode.children && item.barcode.children.length > 0) {item.barcode.children.map(ch => {ch.posId = item.idch.parentId = item.barcode.id})}item.barcode.posId = item.id;this.tableData.push(item.barcode);});}})},select(selection, row) {let vm = this// 操作行 row 在 已选范围 selection 内,认为是选中,否则是取消选中 if (selection.some((el) => row.id=== el.id)) {// 设置当前行选中状态row.isChecked = true// 记录选中id this.addId(row)// 若存在子级,自己全选if (row.children) {row.children.map(c => {this.$refs.tableRef.toggleRowSelection(c, true)c.isChecked = truethis.addId(c)})}// 若存在父级,设置父级选中if (row.parentId) {let pNode = vm.tableData.find(x => x.id === row.parentId)this.$refs.tableRef.toggleRowSelection(pNode, true)pNode.isChecked = truethis.addId(pNode)}} else {row.isChecked = falsethis.deleteId(row)// 若存在子级,子级全部取消选中if (row.children) {row.children.map((i) => {this.$refs.tableRef.toggleRowSelection(i, false)i.isChecked = falsethis.deleteId(i)})}// 若存在父级,判断父级的子级(当前行的兄弟) ,若全部未选中,取消父级选中if (row.parentId) {let pNode = vm.tableData.find(x => x.id === row.parentId)if (!pNode.children.some(el => el.isChecked == true)) {this.$refs.tableRef.toggleRowSelection(pNode, false)pNode.isChecked = falsethis.deleteId(pNode)}}}},selectAll(selection) {// 判断当前是否有已选中的let rA = this.tableData.some(el => {let r = falseif (el.children) {r = el.children.some(e => e.isChecked)}if (r) return rreturn el.isChecked})// 若有选中则全部取消,否则全部选中if (rA) {this.tableData.forEach(el => {el.isChecked = falsethis.$refs.tableRef.toggleRowSelection(el, false)this.deleteId(el)if (el.children) {el.children.forEach(e => {e.isChecked = falsethis.$refs.tableRef.toggleRowSelection(e, false)this.deleteId(e)})}})} else {this.tableData.forEach(el => {el.isChecked = truethis.$refs.tableRef.toggleRowSelection(el, true)this.addId(el)if (el.children) {el.children.forEach(e => {e.isChecked = truethis.$refs.tableRef.toggleRowSelection(e, true)this.addId(e)})}})}},// 增加选中addId(o) {let id = o.posIdif (this.ids.indexOf(id) < 0) {this.ids.push(id)}},// 删除选中deleteId(o) {let id = o.posIdthis.ids = this.ids.filter(item => item !== id);},
}    

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

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

相关文章

httprunnet自动化测试实战

引言 自动化测试是指使用软件工具、脚本或编程来执行测试任务&#xff0c;以代替人工执行测试用例的过程。它使用自动化工具和技术来模拟用户操作&#xff0c;验证和评估软件应用程序的功能、性能和稳定性。 自动化测试的主要目的是提高测试效率和质量&#xff0c;它具有以下几…

视频转二维码简单技巧,适用多种视频格式

现在很多商品介绍多是以视频的方式来展现&#xff0c;那么为了方便用户能够同时快速获取视频内容&#xff0c;所以很多的商家现在会将视频生成二维码放到宣传单、展板、海报等宣传内容上&#xff0c;让他人通过扫码获取信息。那么视频二维码生成器的使用方法有哪几个步骤呢&…

矩阵剪辑系统源码----pc/手机端双开发

剪辑系统&#xff0c;剪辑矩阵系统&#xff0c;剪辑矩阵系统主要是针对抖音、快手、bili平台的一个工具&#xff0c;今天就来给大家交流一下这 个产品的主要功能以及构成。剪辑矩阵系统&#xff0c;矩阵剪辑系统源码-这产品主要功能就是一个视频剪辑功能&#xff0c;这个视频剪…

asp.net饭店订餐管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机设计定制

一、源码特点 asp.net 饭店订餐管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 asp.net饭店订餐系统 二、功能介…

【设计模式】使用建造者模式组装对象并加入自定义校验

文章目录 1.前言1.1.创建对象时的痛点 2.建造者模式2.1 被建造类准备2.2.建造者类实现2.3.构建对象测试2.4.使用lombok简化建造者2.5.lombok简化建造者的缺陷 3.总结 1.前言 在我刚入行不久的时候就听说过建造者模式这种设计模式&#xff0c;当时只知道是用来组装对象&#xf…

如何在 Spring Boot 中进行数据备份

在Spring Boot中进行数据备份 数据备份是确保数据安全性和可恢复性的关键任务之一。Spring Boot提供了多种方法来执行数据备份&#xff0c;无论是定期备份数据库&#xff0c;还是将数据导出到外部存储。本文将介绍在Spring Boot应用程序中进行数据备份的不同方法。 方法1: 使用…

K8S:HPA pod水平自动伸缩

文章目录 一.HPA概念1.什么是HPA2.HPA原理 二.部署 metrics-server1.node节点上传镜像包2.master节点安装metrics-server 三.部署 HPA1.所有节点安装镜像2.master创建测试的 Pod 资源3.创建 HPA 控制器4.创建测试客户端容器5.弹性缩容 四.扩展1.资源限制 - Pod①资源限制的原理…

干货|小白也能自制电子相册赶紧码住~

你是否想拥有一个独一无二的电子相册&#xff0c;却又苦于不知道如何下手&#xff1f;今天教你一个简单的方法&#xff0c;即使你是小白&#xff0c;也能轻松自制电子相册&#xff01; 一、选择合适的工具 首先&#xff0c;你需要选择一个合适的工具来制作电子相册。有很多工具…

ubuntu20.04 nerf Instant-ngp

Instant-ngp linux ubuntu 20.04 GPU RTX3050Ti Instant-ngp官方文档地址 https://github.com/NVlabs/instant-ngp 参考链接Instant-ngp linux部署及使用 - 简书 Ubuntu20.04复现instant-ngp&#xff0c;自建数据集&#xff0c;导出mesh_XINYU W的博客-CSDN博客 步骤 安装基…

数据库基础(一)

数据库面试基础 注&#xff0c;本文章内容主要来自于JAVAGUIDE&#xff0c;只是结合网上资料和自己的知识缺陷进行一点补充&#xff0c;需要准备面试的请访问官方网址。 一、范式 参考链接 函数依赖&#xff1a;一张表中&#xff0c;确定X则必定能确定Y&#xff0c;则X->…

[GXYCTF2019]Ping Ping Ping - RCE(空格、关键字绕过[3种方式])

[GXYCTF2019]Ping Ping Ping 1 解题流程1.1 小试牛刀1.2 三种解法1.2.1 解法一:变量定义拼接绕过1.2.2 解法二:base64编码绕过1.2.3 解法三:内联执行绕过2 思考总结1 解题流程 1.1 小试牛刀 1、提示?ip,结合题目名称,我们直接输入?ip=127.0.0.1 PING 127.0.0.1 (127.…

【Spring AOP】统一用户登录校验

统一用户登录校验 一. 使用拦截器实现统一用户登录校验1. 自定义拦截器2. 将拦截器加入到系统配置 二. 拦截器实现原理三. 扩展&#xff1a;统一访问前缀添加 一. 使用拦截器实现统一用户登录校验 Spring 中提供了具体的实现拦截器&#xff1a;HandlerInterceptor&#xff0c;…