element导航菜单el-menu添加搜索功能

element导航菜单-侧栏,自带的功能没有搜索或者模糊查询。

找了找资料

找到一个比较可行的,记录一下:

//index.vue的代码
<div style="overflow:auto">
          <el-menu :default-active="$route.path"
                   :default-openeds="openeds"
                   :unique-opened="true"
                   active-text-color="rgb(185, 143, 37)"
                   text-color="#ADE0F6"
                   class="el-menu-vertical-demo"
                   background-color="#042939"
                   style="border:0;">
            <MenuTree :menuList="newMenuList"></MenuTree>
          </el-menu>
</div>

//newMenuList组件的代码
  <div class="menuTree">
    <template v-for="(item,index) in menuList">
      <el-submenu :index="item.id +''"
                  :key="index+''"
                  v-if="item.children && item.children.length>0">
        <template slot="title">
          <span @click.stop="routerClick(item)">{{item.label}}</span>
        </template>
        <MenuTree :menuList="item.children"></MenuTree>
      </el-submenu>
      <el-menu-item v-else
                    :index="item.id+''"
                    :key="index+''">
        <span @click="routerClick(item)">{{item.label}}</span>
      </el-menu-item>
    </template>
  </div>
<script>
import MenuTree from "./menuTree";
export default {
  name: 'leftAside',
  components: { MenuTree },
  props: ['transactionList'],
  data () {
    return {
      openeds: ["1", "2", "3", "4"],
      pathNumber: "",
      activeName: "first",
      filterText: "",
      menuList: [
        {
          id: 1,
          label: '主控',
          children: [
            {
              id: 2,
              label: '场地管理',
              children: [
                {
                  id: 3,
                  label: '数据中心',
                  children: [
                    {
                      id: 4,
                      label: '机房1',
                      children: [
                        {
                          id: 5,
                          label: '3D机房',
                          value: "jifang"
                        },
                        {
                          id: 6,
                          label: '2D机房',
                          value: "jifang"
                        },
                      ]
                    }
                  ]
                },
                {
                  id: 7,
                  label: '配电室',
                  children: [
                    {
                      id: 8,
                      label: '配电间1',
                    },
                    {
                      id: 9,
                      label: '配电间2',
                    },
                    {
                      id: 10,
                      label: '配电间3',
                    },
                  ]
                },
                {
                  id: 11,
                  label: '网络间',
                  children: [
                    {
                      id: 12,
                      label: '交换机1',
                      value: "jiaohuanji"
                    },
                    {
                      id: 13,
                      label: '交换机2',
                      value: "jiaohuanji"
                    },
                  ]
                }
              ]
            },
            {
              id: 15,
              label: '监测系统',
              children: [
                {
                  id: 16,
                  label: '变压器监测',
                  children: [
                    {
                      id: 17,
                      label: '变压器组1',
                    },
                    {
                      id: 18,
                      label: '变压器组2',
                    },
                    {
                      id: 19,
                      label: '变压器组3',
                    },
                  ]
                },
                {
                  id: 20,
                  label: '高压柜监测',
                  children: [
                    {
                      id: 21,
                      label: '高压柜组1',
                    },
                    {
                      id: 22,
                      label: '高压柜组2',
                    },
                    {
                      id: 23,
                      label: '高压柜组3',
                    },
                  ]
                },
                {
                  id: 24,
                  label: '母排监测',
                  children: [
                    {
                      id: 25,
                      label: '母排柜1',
                      value: "mupai"
                    },
                    {
                      id: 26,
                      label: '母排柜2',
                      children: [
                        {
                          id: 27,
                          label: 'M-2-01',
                          value: "mupai"
                        },
                        {
                          id: 28,
                          label: 'M-2-02',
                          value: "mupai"
                        }
                      ]
                    },
                    {
                      id: 29,
                      label: '母排柜3',
                      children: [
                        {
                          id: 30,
                          label: 'M-3-01',
                          value: "mupai"
                        }, {
                          id: 31,
                          label: 'M-3-02',
                          value: "mupai"
                        },
                      ]
                    },
                    {
                      id: 32,
                      label: '母排柜4',
                      children: [
                        {
                          id: 33,
                          label: 'M-4-01',
                          value: "mupai"
                        }, {
                          id: 34,
                          label: 'M-4-02',
                          value: "mupai"
                        },
                      ]
                    },
                    {
                      id: 35,
                      label: '母排柜5',
                      children: [
                        {
                          id: 36,
                          label: 'M-5-01',
                          value: "mupai"
                        }, {
                          id: 37,
                          label: 'M-5-02',
                          value: "mupai"
                        },
                      ]
                    },
                  ]
                },
                {
                  id: 38,
                  label: '空调监测',
                  children: [
                    {
                      id: 39,
                      label: '精密空调',
                      children: [
                        {
                          id: 40,
                          label: 'KT-W-05EVC',
                          value: "kongtiaoEVC"
                        },
                        {
                          id: 41,
                          label: 'KT-E-01EVC',
                          value: "kongtiaoEVC"
                        },
                        {
                          id: 42,
                          label: 'KT-E-03EVC',
                          value: "kongtiaoEVC"
                        },
                        {
                          id: 43,
                          label: 'KT-E-04EVC',
                          value: "kongtiaoEVC"
                        },
                        {
                          id: 44,
                          label: 'KT-E-05EVC',
                          value: "kongtiaoEVC"
                        },
                        {
                          id: 45,
                          label: 'KT-E-02EMS',
                          value: "kongtiaoEMS"
                        },
                        {
                          id: 46,
                          label: 'KT-E-06EMS',
                          value: "kongtiaoEMS"
                        },
                        {
                          id: 47,
                          label: 'KT-W-02EMS',
                          value: "kongtiaoEMS"
                        },
                        {
                          id: 48,
                          label: 'KT-W-04EMS',
                          value: "kongtiaoEMS"
                        },
                        {
                          id: 49,
                          label: 'KT-W-06EMS',
                          value: "kongtiaoEMS"
                        },
                      ]
                    },
                    {
                      id: 50,
                      label: '列间空调',
                      children: [
                        {
                          id: 51,
                          label: '英维克',
                          children: [
                            { id: 52, label: "LJKT-L2-02-EV", value: "kongtiaoEV" },
                            { id: 53, label: "LJKT-L2-04-EV", value: "kongtiaoEV" },
                            { id: 54, label: "LJKT-L2-06-EV", value: "kongtiaoEV" }
                          ]
                        },
                        {
                          id: 55,
                          label: '海信',
                          children: [
                            { id: 56, label: "LJKT-L4-01-HX", value: "kongtiaoHX" },
                            { id: 57, label: "LJKT-L4-02-HX", value: "kongtiaoHX" },
                            { id: 58, label: "LJKT-L4-03-HX", value: "kongtiaoHX" },
                            { id: 59, label: "LJKT-L4-04-HX", value: "kongtiaoHX" },
                            { id: 60, label: "LJKT-L4-05-HX", value: "kongtiaoHX" },
                            { id: 61, label: "LJKT-L4-06-HX", value: "kongtiaoHX" },
                          ]
                        },
                        {
                          id: 62,
                          label: '维谛',
                          children: [
                            { id: 63, label: "WD-A25-1", value: "kongtiaoWD" },
                            { id: 64, label: "WD-A25-2", value: "kongtiaoWD" },
                            { id: 65, label: "WD-A25-3", value: "kongtiaoWD" },
                            { id: 66, label: "WD-A25-4", value: "kongtiaoWD" },
                            { id: 67, label: "WD-A25-5", value: "kongtiaoWD" },
                            { id: 68, label: "WD-A25-6", value: "kongtiaoWD" },
                          ]
                        },
                      ]
                    },
                  ]
                },
                {
                  id: 69,
                  label: 'UPS监测',
                  children: [
                    {
                      id: 70,
                      label: 'UPS-400KVA-1',
                      value: "UPS"
                    },
                    {
                      id: 71,
                      label: 'UPS-400KVA-2',
                      value: "UPS"
                    },
                    {
                      id: 72,
                      label: 'UPS-400KVA-3',
                      value: "UPS"
                    },
                    {
                      id: 73,
                      label: 'UPS-400KVA-4',
                      value: "UPS",
                      children: [
                        { id: 74, label: '电池组-1', value: "dianchi" },
                        { id: 75, label: '电池组-2', value: "dianchi" },
                        { id: 76, label: '电池组-3', value: "dianchi" },
                        { id: 77, label: '电池组-4', value: "dianchi" },

                      ]
                    },
                    {
                      id: 78,
                      label: 'UPS-200KVA-1',
                      value: "UPS",
                      children: [
                        { id: 79, label: '电池组-1', value: "dianchi" },
                        { id: 80, label: '电池组-2', value: "dianchi" },
                        { id: 81, label: '电池组-3', value: "dianchi" },
                        { id: 82, label: '电池组-4', value: "dianchi" },
                      ]
                    },
                    {
                      id: 83,
                      label: 'UPS-200KVA-2',
                      value: "UPS",
                      children: [
                        { id: 84, label: '电池组-1', value: "dianchi" },
                        { id: 85, label: '电池组-2', value: "dianchi" },
                        { id: 86, label: '电池组-3', value: "dianchi" },
                        { id: 87, label: '电池组-4', value: "dianchi" },
                      ]
                    },
                    {
                      id: 88,
                      label: 'UPS-200KVA-3',
                      value: "UPS",
                      children: [
                        { id: 89, label: '电池组-1', value: "dianchi" },
                        { id: 90, label: '电池组-2', value: "dianchi" },
                        { id: 91, label: '电池组-3', value: "dianchi" },
                        { id: 92, label: '电池组-4', value: "dianchi" },
                      ]
                    },
                    {
                      id: 93,
                      label: 'UPS-200KVA-4',
                      value: "UPS",
                      children: [
                        { id: 94, label: '电池组-1', value: "dianchi" },
                        { id: 95, label: '电池组-2', value: "dianchi" },
                        { id: 96, label: '电池组-3', value: "dianchi" },
                        { id: 97, label: '电池组-4', value: "dianchi" },
                      ]
                    },
                    {
                      id: 98,
                      label: '智能电表ET903',
                      children: [
                        { id: 99, label: '200UPS输入柜', value: "dianbiao" },
                        { id: 100, label: '200UPS输出柜', value: "dianbiao" },
                        { id: 101, label: '400UPS输入', value: "dianbiao" },
                        { id: 102, label: '400UPS输入旁路', value: "dianbiao" },
                        { id: 103, label: '400UPS输出', value: "dianbiao" },
                        { id: 104, label: '空调柜', value: "dianbiao" },
                      ]
                    },
                  ]
                },
                {
                  id: 105,
                  label: '漏水监测',
                  children: [
                    { id: 106, label: '机房漏水传感器', value: "jinglou" },
                    { id: 107, label: 'UPS漏水传感器', value: "UPSlou" },
                  ]
                },
                {
                  id: 108,
                  label: '市电监测',
                  children: [
                    { id: 109, label: '市电监控1', },
                    { id: 110, label: '市电监控2', },
                  ]
                },
              ]
            }]
        }
      ],
      newMenuList: [],
      // 当前筛选名称
      nameUser: '',
      // 当前筛选id
      nameId: [],
      // nameId: '',
      // 接受条件结果数组
      arr: [],
      // 接受条件结果对象
      obj: {},
      // 接受条件结果children
      children: [],
      // 模糊查询数组
      fuzzyArr: [],
      fuzzyChildrenArr: [],
      fuzzyChildrenArr1: [],
      fuzzyChildrenArr2: [],
      fuzzyChildrenArr3: [],
      fuzzyFlag: true,
      // 字节点
      newNodeId: []
    }
  },

  mounted () {
    console.log(this.menuList);
    if (this.transactionList) {
      this.newMenuList = this.transactionList
    } else {
      this.newMenuList = this.menuList
    }
  },

  methods: {
    // 差一个模糊查询
    search (val) {
      // 初始化
      this.arr = []
      this.nameId = []
      this.obj = {}
      this.children = []
      this.fuzzyArr = []
      this.fuzzyChildrenArr = []
      this.fuzzyChildrenArr1 = []
      this.fuzzyChildrenArr2 = []
      this.fuzzyChildrenArr3 = []
      // 正布
      if (val) {
        this.nameUser = val
        // 获取id
        this.searchDg(this.menuList)
        // 遍历id查值
        if (this.nameId.length > 1) {
          for (var j = 0; j < this.nameId.length; j++) {
            this.arr.push(this.findPathByLeafId(this.nameId[j], this.menuList))
          }
          for (var q = 0; q < this.arr.length - 1; q++) {
            if (this.arr[q][this.arr[q].length - 2].id != this.arr[q + 1][this.arr[q + 1].length - 2].id) {
              this.fuzzyFlag = false
            } else {
              continue
            }
          }
          // 数组 arr 
          // 最里层的children
          for (var i = 0; i < this.arr.length - 1; i++) {
            if (this.arr[i][this.arr[i].length - 2].id == this.arr[i + 1][this.arr[i + 1].length - 2].id) {
              this.fuzzyChildrenArr1.push(this.arr[i][this.arr[i].length - 1])
            } else {
              this.fuzzyChildrenArr1.push(this.arr[i][this.arr[i].length - 1])
              this.fuzzyChildrenArr2.push(this.fuzzyChildrenArr1)
              this.fuzzyChildrenArr3.push(this.arr[i][this.arr[i].length - 2])
              this.fuzzyChildrenArr1 = []
            }
          }
          if (!this.fuzzyFlag) {
            if (i == this.arr.length - 1) {
              // 子
              this.fuzzyChildrenArr1.push(this.arr[i][this.arr[i].length - 1])
              this.fuzzyChildrenArr2.push(this.fuzzyChildrenArr1)
              // 父
              this.fuzzyChildrenArr3.push(this.arr[i][this.arr[i].length - 2])
              this.fuzzyChildrenArr1 = []
              // 重新赋值
              this.fuzzyChildrenArr = this.fuzzyChildrenArr2
            }
          } else {
            this.fuzzyChildrenArr = this.fuzzyChildrenArr1
          }
          // 判断是多组还是单组
          if (this.fuzzyFlag) {
            for (var i = this.arr[0].length - 2; i >= 0; i--) {
              this.obj = this.arr[0][i]
              if (i == this.arr[0].length - 2) {
                this.obj.children = this.fuzzyChildrenArr
              }
              else if (i !== this.arr[0].length - 1) {
                this.obj.children = [this.arr[0][i + 1]]
              }
            }
          } else {
            for (var w = 0; w < this.fuzzyChildrenArr3.length; w++) {
              this.fuzzyChildrenArr3[w].children = this.fuzzyChildrenArr[w]
            }

            for (var i = this.arr[0].length - 2; i >= 0; i--) {
              this.obj = this.arr[0][i]
              if (i == this.arr[0].length - 3) {
                this.obj.children = this.fuzzyChildrenArr3
              }
              else if (i !== this.arr[0].length - 1) {
                this.obj.children = [this.arr[0][i + 1]]
              }
            }
          }
          this.newMenuList = [this.obj]
        } else {
          this.arr = this.findPathByLeafId(this.nameId, this.menuList)
          // 单条
          for (var i = this.arr.length - 1; i >= 0; i--) {
            this.obj = this.arr[i]
            if (i !== this.arr.length - 1) {
              this.obj.children = [this.arr[i + 1]]
            }
          }
          this.newMenuList = [this.obj]
        }
      } else {
        this.newMenuList = this.menuList
      }
    },
    searchDg (data) {
      data.forEach(item => {
        if (item.label.includes(this.nameUser)) {
          this.nameId.push(item.id)
        } else {
          if (item.children) {
            this.searchDg(item.children)
          }
        }
      })
    },
    // 找出自己所在的位置的id和label  层级
    findPathByLeafId (leafId, nodes, path) {
      if (path === undefined) {
        path = [];
      }
      for (var i = 0; i < nodes.length; i++) {
        var tmpPath = path.concat();
        tmpPath.push({ id: nodes[i].id, label: nodes[i].label });
        if (leafId == nodes[i].id) {
          return tmpPath;
        }
        if (nodes[i].children) {
          var findResult = this.findPathByLeafId(leafId, nodes[i].children, tmpPath);
          if (findResult) {
            return findResult;
          }
        }
      }
    },
    // 查询子节点
  }
}
</script>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IP 协议

IP 协议 .IP协议格式四位版本号四位首部长度8位服务类型16位总长度16位标识符,3位标志位,13位片偏移8位生存时间TTL8位协议16位首部校验和32位源地址 32位目的地址IP地址的组成特殊的IP地址 . IP协议格式 四位版本号 用来表示IP协议的版本,现有的IP协议只有两个版本,IPv4,IPv6…

Java面试题之分布式/微服务篇

经济依旧不景气啊&#xff0c;如此大环境下Java还是这么卷&#xff0c;又是一年一次的金三银四。 兄弟们&#xff0c;你准备好了吗&#xff1f;冲冲冲&#xff01;欧里给&#xff01; 分布式/微服务相关面试题解 题一&#xff1a;CAP理论&#xff0c;BASE理论题二&#xff1a;…

pclpy 可视化点云(多窗口可视化、单窗口多点云可视化)

pclpy 可视化点云&#xff08;多窗口可视化、单窗口多点云可视化&#xff09; 一、算法原理二、代码三、结果1.多窗口可视化结果2.单窗口多点云可视化 四、相关数据五、问题与解决方案1.问题2.解决 一、算法原理 原理看一下代码写的很仔细的。。目前在同一个窗口最多建立2个窗…

江科大stm32学习笔记——【3-2】GPIO输出:LED闪烁LED流水灯蜂鸣器

&#xff08;一&#xff09; 硬件连接 1.LED闪烁 LED灯正极连接面包板电源正极&#xff0c;LED负极连接单片机A0口 (也可以LED负极连面包板负极&#xff0c;LED正极连接单片机A0口) 跳线连接单片机3.3和面包板正极&#xff0c;连接单片机GND和面包板负极 2.LED流水灯 3.蜂鸣…

2个wordpress优化SEO主题模板

SEO优化wordpress主题 简洁的SEO优化wordpress主题&#xff0c;效果好不好&#xff0c;结果会告诉你&#xff0c;适合SEO公司使用的主题。 https://www.jianzhanpress.com/?p2804 SEO优化海外WordPress主题 简洁的SEO优化海外服务商WordPress主题&#xff0c;为中国制造202…

GaussDB SQL调优:建立合适的索引

背景 GaussDB是华为公司倾力打造的自研企业级分布式关系型数据库&#xff0c;该产品具备企业级复杂事务混合负载能力&#xff0c;同时支持优异的分布式事务&#xff0c;同城跨AZ部署&#xff0c;数据0丢失&#xff0c;支持1000扩展能力&#xff0c;PB级海量存储等企业级数据库…

微服务篇之分布式系统理论

一、CAP定理 1.什么是CAP 1998年&#xff0c;加州大学的计算机科学家 Eric Brewer 提出&#xff0c;分布式系统有三个指标&#xff1a; 1. Consistency&#xff08;一致性&#xff09;。 2. Availability&#xff08;可用性&#xff09;。 3. Partition tolerance &#xff0…

突破企业发展瓶颈:解决人、机、物数据关联难题

在当今竞争激烈的商业环境中&#xff0c;企业面临着诸多挑战&#xff0c;而这些痛点正逐渐成为企业发展的绊脚石。人、机、物数据采集复杂&#xff0c;关联困难&#xff0c;导致全方位产能协同难以实现&#xff1b;产品多样性使得精准管控变得愈发困难。同时&#xff0c;库存积…

干货 | 如何通过 Navicat Monitor 3 创建自定义指标

Navicat Monitor 3 是一款安全、简单且无需代理的远程服务器监控工具&#xff0c;包含许多强大的功能&#xff0c;尽可能使你的监控工作更加有效。你可以通过 Web 浏览器从任何地方访问 Navicat Monitor&#xff0c;获取关于服务器负载和性能的统计数据&#xff0c;包括可用性、…

开源图表库Echarts 简介与基本使用

ECharts 是一个使用 JavaScript 实现的开源可视化图表库&#xff0c;由百度团队开发。它提供了丰富的图表类型&#xff0c;如折线图、柱状图、饼图、地图、雷达图等&#xff0c;并且可以轻松地与其他前端框架和库集成。ECharts 的设计目的是为了满足复杂数据的可视化需求&#…

ES6内置对象 - Set

Set&#xff08;es6提供的一种数据结构&#xff0c;类似数组&#xff0c;是一个集合&#xff0c;可以存储任何类型的元素且唯一、不重复&#xff0c;so,多用于元素去重&#xff09; 如上图&#xff0c;Set数据结构自带一些方法 1.Set对象创建 let a new Set([1,2,3,3,1,2,4,…

C++力扣题目 739--每日温度 496--下一个更大元素I 503--下一个更大元素II

739. 每日温度 力扣题目链接(opens new window) 请根据每日 气温 列表&#xff0c;重新生成一个列表。对应位置的输出为&#xff1a;要想观测到更高的气温&#xff0c;至少需要等待的天数。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 例如&#xff0c;…

【Unity】【VR开发】Unity云同步功能使用心得

【背景】 有时出差,旅行等等也带着电脑,晚上想要继续编辑项目,就需要用到云同步功能。目前实践下来,发现有些内容可以同步,有些内容则是不可以同步的,总结如下。 【如何云同步一个本地项目】 UnityHub的项目面板中有两个选项卡:项目和云端项目。 鼠标挪动到想要云同步…

web基础及http协议 (二)----------Apache相关配置与优化

一、httpd 安装组成 http 服务基于 C/S 结构 1 .常见http 服务器程序 httpd apache&#xff0c;存在C10K&#xff08;10K connections&#xff09;问题 nginx 解决C10K问题lighttpd IIS .asp 应用程序服务器 tomcat .jsp 应用程序服务器 jetty 开源的servlet容器&#xf…

Springboot+Vue为技术栈的低代码平台“JNPF”

目录 1.什么是JNPF 2.设计原理 3.自动化解决方案 4.平台亮点展示 5.总结 如果你有软件开发的需求&#xff0c;推荐你使用以Vue为技术栈的低代码JNPF。 这款低代码和市面上的其他低代码区别很大的&#xff0c;相较于轻流、简道云、轻宜搭、微搭、帆软、活字格等等&#xff…

Spring 类型转换、数值绑定与验证(二)—PropertyEditor与Conversion

Spring 中&#xff0c;属性类型转换是在将数值绑定到目标对象时完成的。例如在创建ApplicationContext 容器时&#xff0c;将XML配置的bean 转换成Java类型对象&#xff0c;主要是借助了PropertyEditor类&#xff0c;而在Spring MVC 的Controller的请求参数转化为特定类型时&am…

[力扣 Hot100]Day33 排序链表

题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 出处 思路 归并排序即可。 代码 class Solution { public:ListNode* merge(ListNode *h1,ListNode *h2) {ListNode *head nullptr;if(h1->val<h2->val){head h1;h1h1-…

Python代码实现2024年刘谦春晚魔术

import randomdef main():# 扑克牌随机抽取4张牌playingCards [A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K]cardTackA []for i in range(4):k random.choice(playingCards)cardTackA.append(k)# 将抽取的4张牌随机打乱cnt 0while cnt < 100:random.shuffle(cardTackA)cnt …

中国AIGC技术与应用,发展峰会来啦!

随着技术的快速发展&#xff0c;AIGC正高歌猛进&#xff0c;已经成为推动创新、重塑行业边界的关键力量。AIGC技术利用人工智能算法&#xff0c;如自然语言处理&#xff08;NLP&#xff09;和深度学习模型&#xff0c;自动化地生成文字、图片、视频和音频等内容&#xff0c;这些…

Java对象内存图和垃圾回收

多个对象的内存图 两个变量指向同一个对象内存图 垃圾回收 ⚫ 注意&#xff1a;当堆内存中的 类对象 或 数组对象 &#xff0c;没有被任何变量引用&#xff08;指向&#xff09;时&#xff0c;就会被判定为内存中的 “垃圾”。 ⚫ Java存在自动垃圾回收器&#xff0c;会定…