vue ElementUi Tree效果 展开、收起、查询

<el-row>
	<el-col :span="14">
		<el-form @submit.native.prevent>
			<el-input size="medium" v-model.trim="aside.search.address" clearable placeholder="请输入设备位置" @keyup.enter.native="asideSearch"></el-input>
		</el-form>
	</el-col>
	<el-col :span="10">
		<el-button type="primary" size="medium" @click="asideSearch" style="margin-left:40px" >查 询</el-button>
	</el-col>
</el-row>
<div class="aside-tree-auto">
	<el-tree
		ref="asideTree"		//锚点
		v-loading="aside.loading"  //动态数据加载效果
		:data="aside.treeData"	 //tree数据
		:props="aside.defaultProps"		//
		:highlight-current="aside.highlight"  //是否高亮当前选中节点,默认值是 false
		@node-click="handleNodeClick"	//点击tree节点  [展开与闭合都触发]
		:default-expand-all="aside.circleOrRemove"   //展开闭合
		:filter-node-method="filtertreeNode"	//模糊查询
		element-loading-background="rgba(255,255,255,1)"	//loading背景颜色
		>
		
		<!--
		备注:    
			@node-click=""  //点击树节点  节点打开闭合都触发
			@node-expand=""  //点击树节点  节点展开时触发  
			所以如果点击树节点后有业务建议上述该方法改为 node-expand  
		-->
		<!--此处代码实现的作用是针对于tree子项显示不同的icon图标,根据其点击每条数据的内部字段是来判断-->
			<span class="custom-tree-node" slot-scope="{node,data}">
		     <span v-if="data.imei" :class="(videoContainer.arrAll.filter(v=>v == data.id)).length>0?'disabledTree':''">
		       <i class="el-icon-s-promotion" style="color:#fc0000;margin-right:5px;font-size:20px"></i>
					 {{data.label}}
		     </span>
				 <span v-else>
					 <i class="el-icon-s-data" style="color:#4683c4;margin-right:5px;font-size:15px"></i>{{ data.label }}
				 </span> 
		  </span>
	</el-tree>
</div>

data(){
	return{
		aside:{
			loading:false,
			highlight:true,
			circleOrRemove:true,
			defaultProps: {
				children: 'children',
				label: 'label'
			},
			search:{
				address:'',
			}
		}
	}
}

//方法:
methods: {
	//tree点击的当前数据
	handleNodeClick(row){
		
	};
	//tree全部展开
	asideCircle(){
		if(_this.aside.circleOrRemove) return
		_this.aside.circleOrRemove = !_this.aside.circleOrRemove;
		_this.expandNodes(_this.$refs.asideTree.store.root)
	},
	
	//tree全部收起
	asideRemove(){
		if(!_this.aside.circleOrRemove) return
		_this.aside.circleOrRemove = !_this.aside.circleOrRemove;
		_this.expandNodes(_this.$refs.asideTree.store.root)
	},
	
	//遍历属性数据,设置每一项的expanded属性,实现展开收起
	expandNodes(node){
		node.expanded = _this.aside.circleOrRemove;
		for(let i = 0; i<node.childNodes.length; i++){
			node.childNodes[i].expanded = _this.aside.circleOrRemove;
			if(node.childNodes[i].childNodes.length > 0){
				_this.expandNodes(node.childNodes[i]);
			}
		}
	},

	//aside 查询
	asideSearch(){
		//如果检索内容为空停止
		if(!_this.aside.search.address) return;
		//去除检索条件中输入的空格
		_this.$refs.asideTree.filter((_this.aside.search.address).replace(/\s+/g,''))
	},
	
	//tree 检索
	filtertreeNode(value,data,node){
		if(!value) return true;
		return _this.findSearKey(node,value);
	},
	
	findSearKey(node,key){
		if (node.label.indexOf(key) !== -1) {
			return true;
		} else {
			if (node.parent.parent == null) {
				return false;
			} else {
				return this.findSearKey(node.parent, key);
			}
		}
	},


}


效果图如下:

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值