el-tree全选父结点、半选当前结点获取

el-tree全选父结点、半选当前结点获取

需求:全选时,只取父节点Id,半选时,只取当前选中节点id
思路:获取到当前所有选中节点的node,然后按照父级Id整合数据,过滤掉半选结点的node

// 根据parentNodeId,将相同父级id的数据放到一起
function listToTree(data:any) {
	let arr = JSON.parse(JSON.stringify(data))
	const listChildren = (obj:any, filter:any) => {
		[arr, obj.children] = arr.reduce((res:any, val:any) => {
				if (filter(val)) res[1].push(val)
				else res[0].push(val)
				return res
		}, [
			[],
			[]
		])
		obj.children.forEach((val:any )=> {
			if (arr.length) listChildren(val, (obj:any) => obj.parentNodeId === val.templateId)
		})
	}
	const tree = {} as any;
	listChildren(tree, (val:any) => arr.findIndex((i:any) => i.templateId === val.parentNodeId) === -1)
	return tree.children;
  }

function checkChangeFun() {
	state.checkedArr = [];
	state.a1Arr = [];
	// 获取所有选中的节点
	let getCheckedNodesArr = (reportTreeRef as any).value.getCheckedNodes(false,true);
	// 获取半选节点数据
	let getHalfCheckedNodesArr= (reportTreeRef as any).value.getHalfCheckedNodes();
	getCheckedNodesArr.forEach((item:any)=>{
	// 取出需要数据
		state.checkedArr.push({
			parentNodeId:item.parentNodeId,
			templateId:item.templateId,
			titleName:item.titleName || item.templateTitle
		})
	})
	getHalfCheckedNodesArr.forEach((item2:any)=>{
	// 取出需要数据
		state.a1Arr.push({
			parentNodeId:item2.parentNodeId,
			templateId:item2.templateId,
			titleName:item2.titleName || item2.templateTitle
		})
	})
	if(state.a1Arr.length != 0) {
		state.a1Arr.forEach((item3:any)=>{
		// 过滤掉半选结点数据
			state.checkedArr=state.checkedArr.filter((item4:any)=>{
				return item4.templateId != item3.templateId
			})
		})
	}
	// 根据parentNodeId整合数据
	state.moveIdArr = listToTree(state.checkedArr);
}

以上是目前水平能够想到的方法了,希望有大佬指点一二

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值