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

elementui中el-select和el-tree实现下拉树形多选功能

实现效果如下:
在这里插入图片描述
代码如下:
html中

   <el-col :lg="12"><el-form-item label="可用单位" prop="useOrgListTemp"><div class="departAll"><el-selectref="selectTree"v-model="valueName":value="valueMultiple"multipleclearable@remove-tag="changeValue"@clear="clearHandle"placeholder="请选择可用单位"><divstyle="padding-left: 22px; margin-bottom: 6px;margin-top:2px"><el-checkbox @change="myDepartChage" v-model="mychecked">我所在的部门:</el-checkbox><span style="margin-left:6px">{{myDepart.name}}</span></div><div style="padding-left: 22px"><el-checkbox @change="myAllChage" v-model="allchecked">全选</el-checkbox></div><el-option:value="valueName"style="height: auto; background: #fff"><el-tree:data="data"show-checkboxref="tree"node-key="id"id="tree-option"default-expand-all:props="defaultProps"@check-change="handleNodeClick"><spanclass="custom-tree-node"slot-scope="{ data }"><span>{{ data.name }}</span></span></el-tree></el-option></el-select></div></el-form-item></el-col>

data中

   valueName: [],valueMultiple: [],choosedValue: [],mychecked: true,allchecked: false,myDepart: {id: 9,name: "三级 1-1-1",},data: [{id: 1,name: "一级 1",children: [{id: 4,name: "二级 1-1",children: [{id: 9,name: "三级 1-1-1",},{id: 10,name: "三级 1-1-2",},],},],},{id: 2,name: "一级 2",children: [{id: 5,name: "二级 2-1",},{id: 6,name: "二级 2-2",},],},{id: 3,name: "一级 3",children: [{id: 7,name: "二级 3-1",},{id: 8,name: "二级 3-2",},],},],defaultProps: {value: "id",children: "children",label: "name",},

mounted中

this.choosedValue=[]this.choosedValue.push(this.myDepart.id)this.$refs.tree.setCheckedKeys(this.choosedValue);

methods中

  // 选择所属部门myDepartChage(val){if(val==true){if(this.choosedValue.indexOf(this.myDepart.id)==-1){this.choosedValue.push(this.myDepart.id)}this.choosedValue=[...new Set(this.choosedValue)]this.$refs.tree.setCheckedKeys(this.choosedValue);}else{this.choosedValue=[...new Set(this.choosedValue)]if(this.choosedValue.indexOf(this.myDepart.id)!=-1){this.choosedValue.forEach((item,index)=>{if(item==this.myDepart.id){this.choosedValue.splice(index,1)}})}this.$refs.tree.setCheckedKeys(this.choosedValue);}},// 全选myAllChage(val){if(val==true){this.mychecked=truethis.data.forEach((item, index) => {this.choosedValue.push(item.id)});this.choosedValue=[...new Set(this.choosedValue)]this.$refs.tree.setCheckedKeys(this.choosedValue);}else{this.mychecked=falsethis.choosedValue=[]this.$refs.tree.setCheckedKeys(this.choosedValue);}},// 点击树形选择节点handleNodeClick(node, checked) {if (checked) {if (node.children == null || node.children == undefined) {if(node.id==this.myDepart.id){this.mychecked=true}let num = 0;this.valueName.forEach((item) => {item == node[this.defaultProps.label] ? num++ : num;});if (num == 0) {this.valueName.push(node[this.defaultProps.label]);this.choosedValue.push(node["id"]);}}} else {if (node.children == null || node.children == undefined) {this.valueName.map((item, index) => {if(node.id==this.myDepart.id){this.mychecked=false}if (node.name == item) {this.valueName.splice(index, 1);}});}}},// 删除单个标签changeValue(val) {const a = this.findItemByName(this.data, val);if(a.id==this.myDepart.id){this.mychecked=falsethis.choosedValue.forEach((item, index) => {if (item == this.myDepart.id) {this.choosedValue.splice(index, 1);}});}this.choosedValue.forEach((item, index) => {if (item == a.id) {this.choosedValue.splice(index, 1);}});this.$refs.tree.setCheckedKeys(this.choosedValue);},// 递归找到符合的元素findItemByName(items, targetName) {for (let i = 0; i < items.length; i++) {const currentItem = items[i];if (currentItem.name === targetName) {return currentItem;}if (currentItem.children) {const foundItem = this.findItemByName(currentItem.children,targetName);if (foundItem) {return foundItem;}}}},// 清空所有标签clearHandle() {this.valueName = [];this.mychecked=falsethis.allchecked=false;this.choosedValue=[]this.clearSelected();},clearSelected() {this.$refs.tree.setCheckedKeys([]);},

css中 多选框元素太多的话 设置最大高度 超出最大高度后 上下滚动

.departAll{::v-deep .el-select__tags{max-height:90px;overflow-y: auto;}
}
http://www.lryc.cn/news/198063.html

相关文章:

  • 手机怎么监控电脑?
  • 职场题:有一件特别紧急的事,群众要办理,且联系不上领导,你怎么办?(2)
  • 《深入理解java虚拟机 第三版》学习笔记一
  • webGL编程指南 第三章 旋转三角形
  • 网络安全是什么?一文认识网络安全
  • LeetCode 2897. 对数组执行操作使平方和最大【贪心,位运算,哈希表】2301
  • linux加密安全和时间同步
  • 在Go中处理异常
  • rust 全局变量
  • 使用Python的qrcode库生成二维码
  • MSQL系列(四) Mysql实战-索引分析Explain命令详解
  • FPGA软件【紫光】
  • 饲料化肥经营商城小程序的作用是什么
  • AI系统ChatGPT源码+详细搭建部署教程+支持GPT4.0+支持ai绘画(Midjourney)/支持OpenAI GPT全模型+国内AI全模型
  • vue项目优雅降级,es6降为es5,适应低版本浏览器渲染
  • 运放供电设计
  • vue2-org-tree 树型结构的使用
  • 【计算机网络】(面试问题)路由器与交换机的比较
  • 基于下垂控制的孤岛双机并联逆变器环流抑制模型(Simulink仿真实现)
  • 第十九章 文件操作
  • 防火墙管理工具增强网络防火墙防御
  • 34 机器学习(二):数据准备|knn
  • 企业工厂车间台式电脑经常有静电导致开不开机,如何彻底解决?
  • 【数之道 05】走进神经网络模型、机器学习的世界
  • C现代方法(第7章)笔记——基本类型
  • ON DUPLICATE KEY UPDATE 导致自增ID跳跃式增长
  • python学习笔记5-堆
  • 【微服务 SpringCloud】实用篇 · Eureka注册中心
  • WebSocket学习笔记
  • centos 内核对应列表 内核升级 linux