elment-ui的折叠tree表单实现纯前端搜索,展开收起功能

好久没更新博客了~
记录一下本次做的一个很扯的需求
在这里插入图片描述
纯前端去实现这个查询的功能,后台返回的是个数组对象,前端要给他包装成树结构先展示
之后参考代码路径src\views\goods\category\index.vue
需求描述:
搜索输入任何一个关键字,都会展开他的父级,两个栏目都包含了,那么两个父级都展开
先模拟数据,上代码:

categoryList=[{categoryName:'测试1',children:[{categoryName:'haha1',children:[]},]},{categoryName:'测试2',children:[{categoryName:'haha2',children:[]},]},{categoryName:'钦佩',children:[{categoryName:'haha2',children:[]},]}
]
<el-tablev-loading="loading":data="categoryList"row-key="categoryId"stripe:tree-props="{ children: 'children', hasChildren: 'hasChildren' }":expand-row-keys="expandedCategoryIds"><el-table-column label="分类名称" prop="categoryName" /><el-table-column label="分类等级" prop="level" /><el-table-column label="状态" prop="status" :formatter="statusFormat" /><el-table-column label="关键字" prop="keywords" /><el-table-column label="排序" prop="sortNum" /><el-table-column label="创建时间" prop="createTime" width="180" /><el-table-column label="操作" min-width="120"></el-table-column></el-table>

根据categoryName进行前端模糊搜索,会递归categoryList 里面所有的值,包括children,children的不固定多少级,
比如我所有一个haha,不管是哪一级,都会把,包含这个haha的都展开,别的项目也不会隐藏

<el-input
v-model=“searchText”
placeholder=“请输入搜索关键词”
class=“inpClass”
clearable
@keydown.enter.native=“onSearchChange”

  data() {return {searchText: "",}}
    // 处理搜索onSearchChange() {const expandIds = new Set();// 递归搜索函数const searchInCategory = (categories, parentIds = []) => {if (!categories) return false;let hasMatch = false;for (const category of categories) {const currentIds = [...parentIds, category.categoryId];// 检查当前项是否匹配const isMatch = category.categoryName.toLowerCase().includes(this.searchText.toLowerCase());// 递归检查子项const hasChildMatch = searchInCategory(category.children, currentIds);// 如果当前项或子项匹配,添加所有父级ID到展开集合if (isMatch || hasChildMatch) {currentIds.forEach((id) => expandIds.add(id));hasMatch = true;}}return hasMatch;};if (this.searchText) {searchInCategory(this.categoryList);this.expandedCategoryIds = Array.from(expandIds).map(String);} else {// 确保设置一个新的空数组this.expandedCategoryIds = [];// 2. 确保在DOM更新后执行收起操作this.$nextTick(() => {// 3. 遍历所有数据强制收起const closeRows = (data) => {data.forEach((row) => {if (this.$refs.tableRef) {this.$refs.tableRef.toggleRowExpansion(row, false);}if (row.children && row.children.length) {closeRows(row.children);}});};closeRows(this.categoryList);});}},

在获取列表数据的时候也进行初始化数据

    /** 查询商品分类列表 */getList() {this.loading = true;listCategory(this.queryParams).then((response) => {if (response.data) {this.categoryList = this.handleTree(response.data, "categoryId");this.expandedCategoryIds = [];// 2. 确保在DOM更新后执行收起操作this.$nextTick(() => {// 3. 遍历所有数据强制收起const closeRows = (data) => {data.forEach((row) => {if (this.$refs.tableRef) {this.$refs.tableRef.toggleRowExpansion(row, false);}if (row.children && row.children.length) {closeRows(row.children);}});};closeRows(this.categoryList);});}this.loading = false;});},

这样就实现纯前端去模拟搜索的效果

注意,后来又遇到一个问题:

<el-tablev-loading="loading":data="categoryList"row-key="categoryId"stripe:tree-props="{ children: 'children', hasChildren: 'hasChildren' }":expand-row-keys="expandedCategoryIds">categoryList 的树形结构里面有categoryId,我直接设置下面这个,也不会展开expandedCategoryIds: [758, 753, 748]

因为element-ui会把那个数值自动转换为String一直匹配不上…,后来转值了解决

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

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

相关文章

Redis面试篇笔记(持续更新)

一、redis主从集群 单节点redis的并发能力是由上限的&#xff0c;要进一步提高redis的并发能力可以搭建主从集群&#xff0c;实现读写分离&#xff0c;一主多从&#xff0c;主节点写数据&#xff0c;从节点读数据 部署redis主从节点的docker-compose文件命令解析 version: &q…

HTML5拖拽API学习 托拽排序和可托拽课程表

文章目录 前言拖拽API核心概念拖拽式使用流程例子注意事项综合例子&#x1f330; 可拖拽课程表拖拽排序 前言 前端拖拽功能让网页元素可以通过鼠标或触摸操作移动。HTML5 提供了标准的拖拽API&#xff0c;简化了拖放操作的实现。以下是拖拽API的基本使用指南&#xff1a; 拖拽…

06 —— Webpack优化—压缩过程

css代码提取后想要压缩 —— 使用css-minimizer-webpack-plugin插件 下载 css-minimizer-webpack-plugin 本地软件包 npm install css-minimizer-webpack-plugin --save-dev 配置 webpack.config.js 让webpack拥有该功能 const CssMinimizerPlugin require(css-minimizer-…

小熊派Nano接入华为云

一、华为云IoTDA创建产品 创建如下服务&#xff0c;并添加对应的属性和命令。 二、小熊派接入 根据小熊派官方示例代码D6完成了小熊派接入华为云并实现属性上传命令下发。源码&#xff1a;小熊派开源社区/BearPi-HM_Nano 1. MQTT连接代码分析 这部分代码在oc_mqtt.c和oc_mq…

形态学图像处理(Morphological Image Processing)

形态学图像处理(Morphological Image Processing) 前言 ‍ 本博客为个人总结数字图像处理一课所写&#xff0c;并给出适当的扩展和相应的demo。 写博客跟做 checkpoint​ 很像&#xff0c;毕竟个人还不能达到那种信手拈来的境界&#xff0c;忘了就是从零开始训练&#xff0…

[webgis 0基础到找工作]------JavaScript--DOM事件进阶 day10

1.事件流 事件流是对事件执行过程的描述&#xff0c;了解事件的执行过程有助于加深对事件的理解&#xff0c;提升开发实践中对事件运用的灵活度。 简言之&#xff0c;捕获阶段是【从父到子】的传导过程&#xff0c;冒泡阶段是【从子向父】的传导过程。 1.1捕获和冒泡 如果事件…

MATLAB图注意力网络GAT多标签图分类预测可视化

全文链接&#xff1a;https://tecdat.cn/?p38321 本示例展示了如何使用图注意力网络&#xff08;GATs&#xff09;对具有多个独立标签的图进行分类。当数据中的观测值具有带有多个独立标签的图结构时&#xff0c;可以使用GAT来预测未知标签观测值的标签&#xff08;点击文末“…

CSS优化file控件样式

<div class"file-box"><input type"button" class"btn" value"选择文件" /><inputtype"file"class"file"id"upimg"change"previewFiles"multiple/></div><!-- Vu…

CTF--php伪协议结合Base64绕过

Base64绕过 在ctf中&#xff0c;base64是比较常见的编码方式&#xff0c;在做题的时候发现自己对于base64的编码和解码规则不是很了解&#xff0c;并且恰好碰到了类似的题目&#xff0c;在翻阅了大佬的文章后记录一下&#xff0c;对于base64编码的学习和一个工具 base64编码是…

虚拟网卡驱动和DM9000C移植

网卡驱动程序框架 网卡驱动程序“收发功能”&#xff1a; 只要把上层的数据发给网卡&#xff0c;从网卡来的数据构造成包给上层即可。网卡只需要 “socket”编程&#xff0c;不需要打开某设备。 驱动程序都是以面向对象的思想写的&#xff0c;都有相关的结构体。 编程步骤 …

image compare pyqt 实现

默认显示image1, 鼠标滑动滚动条切换图片显示 可视化效果: image_compare.py import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QSlider, QVBoxLayout, QHBoxLayout from PyQt5.QtCore import Qt, QSize from PyQt5.QtGui import QPixmap, QPainte…

在自动驾驶进行大数据量因果推理实验时,如何减少无用功,提高实验效率?

在对实验结果做反事实推理时&#xff0c;通常需要对数据进行多次循环&#xff0c;然后对多次循环的结果进行处理&#xff0c;如果只在最后结果结束时&#xff0c;再进行处理&#xff0c;可能会由于反事实过程中某个参数设置错误&#xff0c;导致整个反事实实验出现错误&#xf…

浅谈软件开发中的yield关键字:从餐厅服务理解异步编程之美

在现代软件开发中&#xff0c;处理大量数据流时经常会遇到性能和内存消耗的问题。传统的编程方式往往是一次性获取所有数据&#xff0c;这就像餐厅厨师要把所有菜品做完才上菜一样&#xff0c;既不高效也不够灵活。而yield关键字的出现&#xff0c;为我们提供了一种优雅的解决方…

绕过CDN寻找真实IP

在新型涉网案件中&#xff0c;我们在搜集到目标主站之后常常需要获取对方网站的真实IP去进一步的信息搜集&#xff0c;但是现在网站大多都部署了CDN&#xff0c;将资源部署分发到边缘服务器&#xff0c;实现均衡负载&#xff0c;降低网络堵塞&#xff0c;让用户能够更快地访问自…

前后端请求响应

引入 在之前的例子中&#xff0c;我们编写了一个简单的web类&#xff0c;我们运行启动类&#xff0c;启动内嵌的tomcat后就可以在浏览器通过特定的路径访问tomcat中的应用程序。 但之前编写的程序仅仅是个简单的java类&#xff0c;其并未实现某个接口或继承某个类&…

ThreeJS入门(142):THREE.WebGLRenderTarget 知识详解,示例代码

作者&#xff1a; 还是大剑师兰特 &#xff0c;曾为美国某知名大学计算机专业研究生&#xff0c;现为国内GIS领域高级前端工程师&#xff0c;CSDN知名博主&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;webgl&#xff0c;ThreeJS&#xff0c;canvas&#xf…

Streamlit + AI大模型API实现视频字幕提取

简介 在本文中&#xff0c;我将带你探讨如何使用Streamlit和AI大模型API来实现视频字幕提取的技术。Streamlit是一个开源的Python库&#xff0c;用于快速构建数据应用的Web界面&#xff0c;而AI大模型API&#xff0c;如OpenAI&#xff0c;提供了强大的语言处理能力&#xff0c…

SpringBoot - spring.profiles.active最佳实践

文章目录 Pre概述为什么需要多环境配置多环境配置实现步骤1. 配置文件准备2. 激活特定环境方法1&#xff1a;命令行参数方法2&#xff1a;环境变量方法3&#xff1a;IDE 配置方法4&#xff1a;全局配置文件默认设置 3. 配置文件加载顺序配置生效的原理 4. 常见问题多个配置文件…

网安瞭望台第2期:零日漏洞密集爆发、2024年常见网络安全漏洞类型及分析

国内外要闻 Ubuntu 服务器 Needrestart 软件包惊现严重安全漏洞 近日&#xff0c;Ubuntu 服务器&#xff08;自 21.04 版本起默认安装&#xff09;的 Needrestart 软件包被曝存在多个可追溯至数十年前的安全漏洞。这些漏洞允许本地攻击者在无需用户交互的情况下获取根…

Java前端基础——CSS

一、CSS介绍 1.1 什么是CSS CSS(Cascading Style Sheet)&#xff0c;层叠样式表,用于控制页面的样式. CSS 能够对网页中元素位置的排版进行像素级精确控制, 实现美化页面的效果. 能够做到页面的样式和结构分离. 1.2 基本语法规范 选择器 {⼀条/N条声明} • 选择器决定针…