vue纯前端过滤嵌套数据,通过关键字搜索过滤嵌套数据

news2024/11/15 6:00:56

1.过滤效果:

2. cardList 数据源:

[
    {
        "id": 4,
        "createTime": "2024-03-28 02:47:18",
        "updateTime": "2024-03-28 02:47:18",
        "uniqueId": "test",
        "name": "测试",
        "sort": 1,
        "deletable": true,
        "enable": true,
        "modelList": [
            {
                "uniqueId": "test",
                "name": "应",
                "icon": "el-icon-question",
                "sort": 1,
                "enable": true,
                "size": 0,
                "groupId": 4,
                "createTime": "2024-03-28 02:47:37",
                "updateTime": "2024-03-28 02:47:37"
            }
        ]
    },
    {
        "id": 2,
        "createTime": "2024-03-21 00:45:43",
        "updateTime": "2024-03-21 00:45:43",
        "uniqueId": "sh_app",
        "name": "应用管理",
        "sort": 1,
        "deletable": true,
        "enable": true,
        "modelList": [
            {
                "uniqueId": "server",
                "name": "服务器",
                "icon": "el-icon-s-management",
                "sort": 1,
                "enable": true,
                "size": 3,
                "groupId": 2,
                "createTime": "2024-03-21 07:51:01",
                "updateTime": "2024-03-27 07:48:48"
            },
            {
                "uniqueId": "app",
                "name": "应用",
                "icon": "el-icon-s-promotion",
                "sort": 1,
                "enable": true,
                "size": 1,
                "groupId": 2,
                "createTime": "2024-03-21 00:46:01",
                "updateTime": "2024-03-27 07:48:58"
            }
        ]
    },
    {
        "id": 1,
        "createTime": "2024-03-20 08:10:34",
        "updateTime": "2024-03-20 08:10:34",
        "uniqueId": "default",
        "name": "未分类",
        "sort": 0,
        "deletable": false,
        "enable": true,
        "modelList": [
            {
                "uniqueId": "sdf",
                "name": "应测试",
                "icon": "el-icon-s-help",
                "sort": 1,
                "enable": true,
                "size": 0,
                "groupId": 1,
                "createTime": "2024-03-28 02:40:20",
                "updateTime": "2024-03-28 02:40:20"
            }
        ]
    }
]

3.vue组件源代码:

<template>

  <div class="content">

    <div class="subTitle">资源目录</div>

    <div class="container">

      <el-input

        style="margin-left: 10px"

        placeholder="请输入关键字"

        v-model="searchValue"

        class="input-with-select"

      >

        <el-button

          slot="append"

          icon="el-icon-search"

          @click="filterData"

        ></el-button>

      </el-input>

      <div class="cardStyle">

        <el-card class="box-card" v-for="(v, i) in cardList" :key="i">

          <div slot="header" class="clearfix">

            <span class="subName">{{ v.name }}</span>

          </div>

          <ul>

            <li

              v-for="(o, e) in v.modelList"

              :key="e"

              class="text item"

              :class="{

                active: showIndex == e && currentUniqueId == o.uniqueId,

              }"

              @click="goToPage(o)"

              @mouseenter="

                showIndex = e;

                currentUniqueId = o.uniqueId;

              "

              @mouseleave="showIndex = -1"

            >

              <span

                ><i style="color: #409eff" :class="o.icon"></i

                ><span style="margin-left: 10px">{{ o.name }}</span></span

              >

              <span class="num">{{ o.size }}</span>

            </li>

          </ul>

        </el-card>

      </div>

    </div>

  </div>

</template>

<script>

import { mapActions, mapMutations } from "vuex";

import { findAll } from "@/api/cmdb/model";

export default {

  data() {

    return {

      value: "",

      searchValue: "",

      options: [],

      cardList: [],

      showIndex: -1,

      currentUniqueId: null,

    };

  },

  watch: {},

  mounted() {

    this.getList();

  },

  methods: {

    ...mapMutations(["setMutCurrentPageTitle", "setActiveModel"]),

    goToPage(value) {

      this.$router.push({ path: "/resource/template" });

      this.setActiveModel(value);

      this.setMutCurrentPageTitle(value.name);

    },

    async getList() {

      await findAll({})

        .then((res) => {

          if (res.code == 0) {

            this.cardList = res.data;

          } else {

            res.desc && this.$message.error(res.desc);

          }

        })

        .catch((err) => {

          err.desc && this.$message.error(err.desc);

        });

    },

    // 通过关键字查询过滤嵌套数据

    async filterData() {

      // 过滤之前先请求拿到最新的嵌套数据 cardList

      await this.getList();

      const search = this.searchValue.toLowerCase().trim();

      if (!search) return this.cardList;

      let filterList = this.cardList.map((item) => {

        return {

          ...item,

          modelList: item.modelList.filter((o) => {

            return o.name.toLowerCase().includes(search);

          }),

        };

      });

      // 如果子节点数组没有就删除掉,不展示

      filterList.map((v, i) => {

        if (v.modelList.length == 0) {

          filterList.splice(i, 1);

        }

      });

      // 过滤筛选后赋值,这里会影响原数据cardList,所以过滤之前先请求,拿到最新的cardList

      this.cardList = filterList;

    },

  },

};

</script>

<style scoped lang="scss">

.content {

  .contentTop {

    margin-bottom: 20px;

    span {

      display: inline-block;

      margin-right: 20px;

    }

  }

  .subTitle {

    font-size: 18px;

    margin-left: 10px;

  }

  .container {

    padding: 30px 0;

    width: 100%;

    height: 100%;

    // background-color: #f9f9f9;

    ::v-deep .el-input-group {

      line-height: normal;

      display: inline-table;

      width: 20%;

      border-collapse: separate;

      border-spacing: 0;

    }

    .cardStyle {

      margin-top: 30px;

      display: flex;

      flex-direction: row;

      justify-content: flex-start;

      align-items: flex-start;

      flex-wrap: wrap;

      .box-card {

        width: 23%;

        margin: 10px;

        .subName {

          font-size: 16px;

          font-weight: 700;

        }

        li {

          width: 100%;

          height: 40px;

          margin: 5px 0;

          padding: 0 10px;

          display: flex;

          align-items: center;

          justify-content: space-between;

          cursor: pointer;

          .num {

            color: #ccc;

          }

          &.active {

            background: #ecf3ff;

          }

        }

      }

    }

  }

}

</style>


 

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

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

相关文章

前端学习-CSS基础-Day3

一、CSS三大特性 1.1层叠性 相同选择器给设置相同的样式&#xff0c;此时一个样式就会覆盖&#xff08;层叠&#xff09;另一个冲突的样式。层叠性主要解决样式冲突的问题 层叠性原则&#xff1a; 1.样式冲突&#xff0c;遵循的原则是就近原则&#xff0c;哪个样式离结构近&a…

React系列之合成事件与事件处理机制

文章目录 React事件处理机制原生事件的事件机制事件代理&#xff08;事件委托&#xff09; 合成事件使用合成事件目的合成事件原生事件区别事件池 原生事件和React事件的执行顺序e.stopPropagation() React17事件机制的修改 React事件处理机制 react 事件机制基本理解&#xf…

Maven配置国内镜像-阿里云仓库镜像

使用自己安装maven环境时&#xff1a; 打开解压目录下conf/settings.xml文件 使用Idea自带的Maven时&#xff1a; 打开Idea安装路径\plugins\maven\lib\maven3\conf\settings.xml文件 在mirrors节点中加入如下配置&#xff1a; <!-- 加入如下mirror节点 使用国内阿里云仓…

fastadmin学习05-开启debug以及配置

FastAdmin 框架提供了对 .env 环境变量配置的支持&#xff0c;并附带一个默认示例文件 .env.sample。在安装后&#xff0c;框架并不会自动启用 env 环境变量&#xff0c;需要手动将 .env.sample 复制为 .env 并进行配置。 如果不开启.env会读取database.php中的配置 下面测试…

鸿蒙OS开发实例:【页面传值跳转】

介绍 本篇主要介绍如何在HarmonyOS中&#xff0c;在页面跳转之间如何传值 HarmonyOS 的页面指的是带有Entry装饰器的文件&#xff0c;其不能独自存在&#xff0c;必须依赖UIAbility这样的组件容器 如下是官方关于State模型开发模式下的应用包结构示意图&#xff0c;Page就是…

基于单片机智能温控风扇调速系统设计

**单片机设计介绍&#xff0c;基于单片机智能温控风扇调速系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机智能温控风扇调速系统设计概要主要涉及到硬件设计、温度检测、风扇控制以及可能的拓展功能等方面。以…

Machine Learning机器学习之贝叶斯网络(BayesianNetwork)

目录 前言 算法提出背景&#xff1a; 贝叶斯算法特点&#xff1a; 一、贝叶斯定理 二、朴素贝叶斯分类模型 1、朴素贝叶斯分类模型&#xff08;Naive Bayes Classifier&#xff09; 2、原理 2.1 朴素贝叶斯假设 2.2条件独立性假设 2.3后验概率计算 2.4类别预测 2.5小结 3、建模…

Postman测试含有变量的接口的方法

1.在路径中用/&#xff1a;设置变量名 2.设置token验证 3.填写参数

Vue 04 Vue 中的 Ajax、slot 插槽

Vue学习 Vue 0401 Vue中的Ajax服务器准备axios使用跨域问题解决Vue-CLI 配置代理1Vue-CLI 配置代理2案例: 用户搜索vue-resource 02 slot插槽默认插槽具名插槽作用域插槽slot总结 Vue 04 B站 Vue全家桶&#xff08;BV1Zy4y1K7SH&#xff09; 学习笔记 Vue 中的 ajax 01 Vue中的…

Unity 学习日记 12.小球撞击冰块游戏

目录 1.准备场景 2.让小球动起来 3.用鼠标把小球甩出去 4.加入鼠标点击小球的判断 5.小球与冰块的碰撞测试 6.撞击后销毁冰块 ​编辑 7.显示游戏计时 8.显示扔球次数 9.显示剩余冰块个数 10.游戏结束 11.完整代码 下载源码 UnityPackage 最终效果&#xff1a; 1.准…

Idea2023.3.6版本无法启动设置界面-settings界面打不开无反应---IntelliJ Idea工作笔记013

先说一下网上有,把某个文件删除的 有说是因为汉化问题的 可以看到,其实都不是,这样弄就好了,很简单 Please report thisjava.lang.ClassCastException: class [Lcom.intellij.execution.filters.CompositeInputFilter$InputFilterWrapper; cannot be cast to class java.uti…

关于使用vscode搭建c/c++编程环境

目录 关于使用vscode搭建c/c编程环境一、前言二、安装 IDE 二、安装TDM-GCC安装三、安装C/C环境四、编写代码并进行编译 关于使用vscode搭建c/c编程环境 一、前言 一直觉得vscode是生产强有力的生产工具&#xff0c;基于此&#xff0c;做一篇学习笔记进行记录。 二、安装 ID…

洛谷 P1379 八数码难题

代码如下&#xff1a; #include<bits/stdc.h> using namespace std; struct node{string s;int pos; }star,en; map<string,int>mp[2]; queue<node>q[2]; int main(){cin>>star.s;en.s"123804765";for(int i0;i<9;i){if(star.s[i]0) sta…

服务器停止解析域名,但仍然可以访问到

1.centos7 如何刷新dns缓存 在CentOS 7上&#xff0c;DNS缓存由nscd&#xff08;Name Service Cache Daemon&#xff09;管理&#xff0c;如果系统上安装了nscd&#xff0c;可以通过清除nscd缓存来刷新DNS缓存。 要刷新DNS缓存&#xff0c;请执行以下命令&#xff1a; sudo …

【XXL-JOB】执行器架构设计和源码解析

简介 XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 XXL-JOB分为B/S架构&#xff0c;调用中心是XXL-JOB服务端&#xff0c;执行器是客户端。 调度中心核…

入门指南|营销中人工智能生成内容的主要类型 [新数据、示例和技巧]

由于人工智能技术的进步&#xff0c;内容生成不再是一项令人头疼的任务。随着人工智能越来越多地接管手动内容制作任务&#xff0c;营销人员明智的做法是了解现有的不同类型的人工智能生成内容&#xff0c;以及哪些内容从中受益最多。这些工具可以帮助我们制作对您的受众和品牌…

3.28C++

复数类的实现&#xff0c;写出三种构造函数&#xff0c;算术运算符、关系运算符、逻辑运算符重载尝试实现自增、自减运算符的重载 #include <iostream> using namespace std; class Num {int rel; //实部int vir; //虚部 public:Num():rel(2),vir(1){}Num(int rel,…

若依 3.8.7版本springboot前后端分离 整合mabatis plus

1.去掉mybatis 这一步我没有操作&#xff0c;看别人的博客有说不去掉可能冲突&#xff0c;也可能不冲突&#xff0c;我试下来就没去掉如需要去除&#xff0c;到总的pom.xml中properties标签下的<mybatis-spring-boot.version>x.x.x</mybatis-spring-boot.version>…

如何在极狐GitLab 自定义 Pages 域名、SSL/TLS 证书

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了在极狐GitLab 用户…

深圳区块链交易所app系统开发,撮合交易系统开发

随着区块链技术的迅速发展和数字资产市场的蓬勃发展&#xff0c;区块链交易所成为了数字资产交易的核心场所之一。在这个快速发展的领域中&#xff0c;区块链交易所App系统的开发和撮合交易系统的建设至关重要。本文将探讨区块链交易所App系统开发及撮合交易系统的重要性&#…