自定义树形筛选选择组件

先上效果图

思路:刚开始最上面我用了el-input,选择框里面内容用了el-input+el-tree使用,但后面发现最上面那个可以输入,那岂不是可以不需要下拉就可以使用,岂不是违背了写这个组件的初衷,所以后面改成div自定义框

组件用法:上面框是你点击下面树形后自动填写到上面去,树形上面的筛选数据框是筛选树形数据的

代码可能没考虑那么周全,暂时还没加上校验,加了禁用点击和选择,属性是disabled

前提:请安装element ui组件,不会的参照:安装Element UI

代码结构:

上组件代码:在components创建customSelectTree文件夹下创建index.vue

<template><div class="cTree"><!-- 可点击可下拉选择组件 --><div class="cTree-input"><div style="white-space: nowrap; position: relative"><div class="cTree-input-value">{{ value }}</div><div class="cTree-input-value-icon"><istyle="padding-right: 5px"class="el-icon-circle-close"v-show="value"@click.stop="value = ''"></i><i:style="{ transform: visible ? 'rotate(180deg)' : '' }"class="el-icon-arrow-down"@click.stop="visible = !visible"></i></div></div></div><div class="cTree-box" v-if="visible"><div class="cTree-box-input"><el-input v-model="filterText" placeholder="筛选数据" clearable /></div><div class="cTree-box-content"><el-treeref="tree"node-key="label":highlight-current="true":expand-on-click-node="false":data="treeList":filter-node-method="filterNode":props="defaultProps"@node-click="handleNodeClick"><span class="custom-tree-node" slot-scope="{ node }"><span:style="{ cursor: node.disabled === true ? 'not-allowed' : '' }">{{ node.label }}</span></span></el-tree></div></div></div>
</template>
<script>
export default {name: 'custonTree',props: {// 传入下拉框数据treeList: {type: Array,default: () => [],},defaultProps: {type: Object,default: () => ({children: 'children',label: 'label',disabled: function (data) {if (data.disabled === true) {return true;}},}),},},data() {return {value: '',filterText: '',label: '',visible: false,};},mounted() {let that = this;document.addEventListener('click', (e) => {if (!that.$el.contains(e.target)) this.visible = false;});},watch: {filterText(val) {this.$refs.tree.filter(val);},},methods: {disabled(data) {if (data.disabled === true) {return true;}},filterNode(value, data, node) {if (!value) return true;let _array = [];this.getReturnNode(node, _array, value);let result = false;_array.forEach((item) => {result = result || item;});return result;},getReturnNode(node, _array, value) {console.log('node', node.data);let isPass = node && node.label && node.label.indexOf(value) !== -1;isPass ? _array.push(isPass) : '';if (!isPass && node.children) {this.getReturnNode(node.children, _array, value);}},handleNodeClick(data) {if (data.disabled === true) return;this.value = data.label;// this.$emit(data);},clickTitle() {if (this.visible === true) {this.visible = false;}},},
};
</script>
<style lang="scss" scoped>
.cTree {&-input {display: flex;justify-content: flex-start;align-items: center;box-sizing: border-box;color: #ffffff;font-size: 14px;border-radius: 4px;// cursor: pointer;margin-right: 20px;::v-deep .el-icon-arrow-down,.el-icon-circle-close {color: #c0c4cc;font-size: 18px;cursor: pointer;}&-value {-webkit-appearance: none;background-color: #fff;background-image: none;border-radius: 4px;border: 1px solid #dcdfe6;box-sizing: border-box;color: #606266;display: inline-block;height: 40px;line-height: 40px;outline: 0;padding: 0 15px;transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);width: 250px;&-icon {position: absolute;right: 0;top: 50%;transform: translateY(-50%);padding-right: 10px;}}}&-box {position: absolute;user-select: none;border-radius: 6px;margin-top: 12px;width: 300px;z-index: 99;border: 1px solid #f0f0f0;box-shadow: 5px 5px 5px #efefef;&:after {content: '';position: absolute;margin-top: -11px;top: 0;left: 57%;width: 0;height: 0;border-left: 10px solid transparent;border-right: 10px solid transparent;border-bottom: 10px solid #e8eaec;// margin-left: 120px;// box-shadow: 10px 5px 5px #efefef;}&-input {padding: 2px 6px;}&-content {white-space: nowrap;overflow: hidden;text-overflow: ellipsis;color: #606266;font-size: 14px;line-height: 34px;box-sizing: border-box;cursor: pointer;max-height: 250px;overflow-y: auto;}}
}
::v-deep .el-input__inner {position: relative;
}
</style>

使用:

<template><div id="app"><CustonBtn :treeList="treeList" /></div>
</template><script>
import CustonBtn from '@/components/customSelectTree/index.vue';export default {name: 'App',components: {CustonBtn,},data() {return {treeList: [{label: '一级1',disabled: true,children: [{label: '二级1-1',disabled: true,children: [{label: '三级1-1-1',disabled: false,},],},],},{label: '一级2',disabled: true,children: [{label: '二级2-1',disabled: true,children: [{label: '三级2-1-1',disabled: false,},],},{label: '二级2-2',disabled: true,children: [{label: '三级2-2-1',disabled: false,},],},],},{label: '一级3',disabled: true,children: [{label: '二级3-1',disabled: true,children: [{label: '三级3-1-1',disabled: false,},],},{label: '二级3-2',disabled: true,children: [{label: '三级3-2-1',disabled: false,},],},],},],};},
};
</script><style></style>

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

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

相关文章

CVE-2021-30517:Type confusion bug in LoadSuperIC

前言 这个漏洞是一个比较老的洞&#xff0c;之所以分析这个漏洞&#xff0c;只要是想再学习一下 ICs 相关的知识。并该漏洞的利用是利用与 String/Function 之间的混淆&#xff0c;比较有意思。 环境搭建 sudo apt install python git checkout 7d5e5f6c62c3f38acee12dc4114…

网站如何运用百度文心一言API进行AI内容创作?

网站如何运用百度文心一言API进行AI内容创作&#xff1f; 当我们做好一个网站的时候会因为创作内容而发愁&#xff0c;随着chatgpt的出现&#xff0c;内容创作已经不再是什么困难的事情&#xff0c;但是由于gpt是国外的&#xff0c;在国内使用有诸多不便&#xff0c;因此我们今…

ES9学习 -- 对象的剩余参数与扩展运算符 / 正则扩展 / Promise.finally / 异步迭代

文章目录 1. 对象的剩余参数与扩展运算符1.1 对象的剩余参数1.2 扩展运算符 2. 正则扩展3. Promise.finally4. 异步迭代4.1 同步遍历器的问题4.2 异步遍历器使用 1. 对象的剩余参数与扩展运算符 1.1 对象的剩余参数 let obj { name:"kerwin", age:100, location:&…

Python疑难杂症(16)---Numpy知识集合(四)列出Numpy模块的常用函数,供查询参考。

列出Numpy模块的常用函数&#xff0c;供查询参考。 numpy.array:创建新的NumPy数组 numpy.zeros:创建一个以零填充的数组。 numpy.random:生成随机数组的函数。 numpy.linspace:在指定范围内生成均匀间隔的数字。 numpy.range:用间隔的值创建数组。 numpy.shape:返回一个…

【动态】江西省小型水库安全监测能力提升试点项目通过验收

近日&#xff0c;由北京国信华源科技有限公司和长江勘测规划设计研究有限责任公司联合承建的江西省小型水库安全监测能力提升试点项目圆满通过验收。 在项目业主单位的组织下&#xff0c;省项目部、特邀专家、县水利局二级项目部以及项目设计、监理、承建等单位的代表组成验收工…

质量管理工作中常用的七种方法——SunFMEA软件

质量管理工作中常用的七种方法&#xff0c;它们包括&#xff1a;流程图、检查表、因果图、排列图、直方图、散布图和统计控制图。下面SunFMEA软件将详细介绍这七大工具及其在质量管理中的应用。 一、流程图 流程图是一种用来表示一系列操作或事件的顺序的图形化工具。在质量管理…

SpringBoot(48)-使用 SkyWalking 进行分布式链路追踪

Spring Boot&#xff08;48&#xff09;- 使用 SkyWalking 进行分布式链路追踪 介绍 在分布式系统中&#xff0c;了解各个服务之间的调用关系和性能表现是非常重要的。SkyWalking 是一款开源的分布式系统监控与分析平台&#xff0c;能够帮助我们实现分布式系统的链路追踪、性…

51单片机入门_江协科技_20.1_Proteus串口仿真

1.为了解决51单片机学习过程中在Proteus中的串口仿真的问题&#xff0c;需要在Proteus中建立串口仿真的环境&#xff08;目前Proteus安装在Win7x64虚拟机环境中&#xff1b; 2. 在CSDN中找到VSPD下载地址&#xff0c;在虚拟机中进行VSPD的安装&#xff0c;具体链接地址如下&am…

触想四代ARM架构工业一体机助力手功能康复机器人应用

一、行业发展背景 手功能康复机器人是医疗机器人的一个分支&#xff0c;设计用于帮助肢体障碍患者进行手部运动和力量训练&#xff0c;在医疗健康领域有着巨大的成长空间。 手功能康复机器人融合了传感、控制、计算、AI视觉等智能科技与医学技术&#xff0c;能够帮助患者改善康…

第六期丨酷雷曼无人机技能培训

第6期无人机技能提升培训 盼望着盼望着&#xff0c;第六期无人机技能提升培训会终于如期和大家见面了。 2024年1月1日&#xff0c;国务院、中央军事委员会颁布《无人驾驶航空器飞行管理暂行条例》&#xff0c;对民用无人机飞行活动实施更为严格的规范约束&#xff0c;越来越多…

实时计算平台设计方案:911-基于6U VPX的光纤图像DSP实时计算平台

基于6U VPX的光纤图像DSP实时计算平台 一、系统组成 该平台基于风冷式的 6U 6槽VPX图像处理平台&#xff0c;包括&#xff1a;计算机主板、计算机主板后板、存储板、图像信号处理板、图像信号处理板后板、图像光纤转接板、机箱背板及机箱组成。图1为系统背板结构示意图&…

分布式链路追踪与云原生可观测性

分布式链路追踪系统历史 Dapper, a Large-Scale Distributed Systems Tracing Infrastructure - Google Dapper&#xff0c;大规模分布式系统的跟踪系统大规模分布式系统的跟踪系统&#xff1a;Dapper设计给我们的启示 阿里巴巴鹰眼技术解密 - 周小帆京东云分布式链路追踪在金…