当前位置: 首页 > web >正文

el-select 结合 el-tree:树形下拉数据

一、单选

<template><div class="selectTree-wapper"><el-selectv-model="selectValue"placeholder="请选择"popper-class="custom-el-select-class"ref="selectRef"clearable@clear="clearHandle"><el-option :label="selectlabel" :value="selectValue"><el-tree:data="treeData":props="defaultProps"node-key="id"highlight-current:check-strictly="true":expand-on-click-node="true"ref="treeRef"@node-click="handleNodeClick"><template #default="{ node, data }"><span :class="{ 'special-node': data.id === selectValue }">{{ node.label }}</span></template></el-tree></el-option></el-select></div>
</template><script>
export default {name: "selectTree",components: {},props: {},data() {return {selectlabel: "", // 选项labelselectValue: "", // 选项valuetreeData: [{id: "1",name: "一级 1",children: [{id: "2",name: "二级 1-1",children: [{id: "3",name: "三级 1-1-1",},],},],},{id: "4",name: "一级 2",children: [{id: "5",name: "二级 2-1",children: [{id: "6",name: "三级 2-1-1",},],},{id: "7",name: "二级 2-2",children: [{id: "8",name: "三级 2-2-1",},],},],},],defaultProps: {children: "children",label: "name",},};},mounted() {},methods: {/*** 点击节点*/handleNodeClick(data) {// 这里的赋值判断逻辑自定义if (data.children && data.children.length) {return false;}// 赋值this.selectValue = data.id;this.selectlabel = data.name;// 收起下拉框;this.$refs.selectRef.blur();// 收起treeif (this.$refs.treeRef) {const nodes = this.$refs.treeRef.store._getAllNodes();nodes.forEach((node) => {node.expanded = false;});}},/*** 清除*/clearHandle() {this.selectValue = "";this.selectlabel = "";},},watch: {},
};
</script><style lang='scss'>
.custom-el-select-class {.el-select-dropdown__list {height: fit-content;max-height: 274px;.el-select-dropdown__item {height: auto;overflow: visible;padding: 0px 10px;}}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover {background-color: #ffffff;}.special-node {color: red;}
}
</style>

在这里插入图片描述

二、多选

<template><div class="selectTree-wapper"><el-selectv-model="selectlabel"placeholder="请选择"popper-class="custom-el-select-class"ref="selectRef"multiplecollapse-tagsclearable@clear="clearHanlde"@remove-tag="removeTag"style="width: 300px"><el-option :value="selectValue"><el-tree:data="treeData":props="defaultProps"node-key="id"show-checkbox:check-strictly="false":expand-on-click-node="true"ref="treeRef"@check-change="handleCheckChange"><template #default="{ node, data }"><span :class="{ 'special-node': data.id === selectValue }">{{ node.label }}</span></template></el-tree></el-option></el-select></div>
</template><script>
export default {name: "selectTree",components: {},props: {},data() {return {selectlabel: [], // 选项labelselectValue: [], // 选项valuetreeData: [{id: "1",name: "一级 1",children: [{id: "2",name: "二级 1-1",children: [{id: "3",name: "三级 1-1-1",},],},],},{id: "4",name: "一级 2",children: [{id: "5",name: "二级 2-1",children: [{id: "6",name: "三级 2-1-1",},],},{id: "7",name: "二级 2-2",children: [{id: "8",name: "三级 2-2-1",},],},],},],defaultProps: {children: "children",label: "name",},};},mounted() {},methods: {/*** 选择改变*/handleCheckChange() {// 获取所有选中的节点const selectNodes = this.$refs.treeRef.getCheckedNodes();// 只要叶子节点数据const nodes = selectNodes.filter((node) => !(node.children && node.children.length));this.selectValue = nodes.map((node) => node.id);this.selectlabel = nodes.map((node) => node.name);},/*** 清除*/clearHanlde() {this.selectlabel = [];this.selectValue = [];},/*** 移除*/removeTag(tag) {console.log("tag", tag);// 使用 collapse-tags 后,移除的是第一个this.selectValue.shift();this.$nextTick(() => {this.$refs.treeRef.setCheckedKeys(this.selectValue);});},},watch: {},
};
</script><style lang='scss'>
.custom-el-select-class {.el-select-dropdown__list {height: fit-content;max-height: 274px;.el-select-dropdown__item {height: auto;overflow: visible;padding: 0px 10px;}}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover {background-color: #ffffff;}.special-node {color: red;}
}
</style>

在这里插入图片描述

三、单选+懒加载

<template><div class="selectTree-wapper"><el-selectv-model="selectValue"placeholder="请选择"popper-class="custom-el-select-class"><el-option :label="selectlabel" :value="selectValue"><el-tree:props="props":load="loadNode"lazynode-key="id":check-strictly="true":expand-on-click-node="false"@node-click="handleNodeClick"></el-tree></el-option></el-select></div>
</template><script>
export default {name: "selectTree",components: {},props: {},data() {return {selectlabel: "", // 选项labelselectValue: "", // 选项valueprops: {label: "name",children: "children",},};},mounted() {},methods: {/*** 加载节点*/loadNode(node, resolve) {// 第一次请求,默认id为0let id = node.data?.id ? node.data.id : 0;const data = this.getLazyList(id);resolve(data || []);},/*** 请求数据,这里模拟接口返回假数据*/getLazyList(id) {let data = [];if (id !== "3") {data = [{id: "1",name: "节点a",},{id: "2",name: "节点b",},{id: "3",name: "节点c",},];}return data;},/*** 点击节点*/handleNodeClick(data) {this.selectValue = data.id;this.selectlabel = data.name;},},watch: {},
};
</script><style lang='scss'>
.custom-el-select-class {.el-select-dropdown__list {height: fit-content;max-height: 274px;.el-select-dropdown__item {height: auto;overflow: visible;padding: 0px 10px;}}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover {background-color: #ffffff;}
}
</style>
http://www.xdnf.cn/news/5891.html

相关文章:

  • 为什么 import _ “github.com/go-sql-driver/mysql“ 要导入但不使用?_ 是什么意思?
  • SLAM论文——简析Cartographer
  • flinksql实践(从kafka读数据)
  • 在Linux系统中开放指定端口访问(允许远程访问数据库)
  • 电脑关机再开机会换IP吗?深入解析分配机制
  • PHP-FPM 调优配置建议
  • linux入门学习(介绍、常用命令、vim、shell)
  • .Net HttpClient 处理错误与异常
  • 机器学习 --- 数据集
  • 【Java】网络编程(Socket)
  • set(CMAKE_C_FLAGS “${CMAKE_C_FLAGS} -ansi -pedantic -Wall“)
  • JVM——方法内联之去虚化
  • 【go】binary包,大小端理解,read,write使用,自实现TCP封包拆包案例
  • Go构建高并发权重抽奖系统:从设计到优化全流程指南
  • Python 基础语法与数据类型(八) - 函数参数:位置参数、关键字参数、默认参数、可变参数 (*args, **kwargs)
  • 【PyTorch】深度学习实践——第二章:线性模型
  • 【数据结构】——栈和队列OJ
  • python酒店健身俱乐部管理系统
  • iPaaS 集成平台如何解决供应链响应速度问题?
  • Spring AI 开发本地deepseek对话快速上手笔记
  • 07_Java中的锁
  • 系统平衡与企业挑战
  • Tomcat与纯 Java Socket 实现远程通信的区别
  • 中国人工智能智能体研究报告
  • Linux的文件查找与压缩
  • 关于cleanRL Q-learning
  • Java集合框架详解与使用场景示例
  • MySQL 5.7在CentOS 7.9系统下的安装(下)——给MySQL设置密码
  • Android NDK 高版本交叉编译:为何无需配置 FLAGS 和 INCLUDES
  • org.slf4j.MDC介绍-笔记