el-tree实现多选、反选、指定选择

本文介绍了如何在项目中结合ElementPlus的el-tree和el-checkbox组件实现设备多选功能,特别关注了当后端返回的数据为字符串形式时的数据处理和树形联动逻辑。作者详细展示了如何处理全选、单选以及数据去重的过程。
摘要由CSDN通过智能技术生成

最近项目中遇到实现设备多选的需求,虽然这个需求很常见,但功能需求的不同,实现过程也大相径庭,我们的需求时只提供子级选择,父级不做选择,只提供层级显示;

el-tree是elementPlus的组件,熟悉的都知道这个UI库,对如传入的数据格式也是固定,对与本次需求,后端返回的数据需求做指定:

const defaultProps = {
	children: 'data',
	label: 'name',
}

el-checkbox结合el-tree实现多选功能,具体代码实现如下:

<el-checkbox v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
<el-tree class="tree" :data="deviceLevel" :props="defaultProps" show-checkbox node-key="ids" :default-expand-all="true" check-strictly :default-checked-keys="[5, 6]" @check-change="testCheckChange" ref="testingTree" />

我们后端接收到的数据传入字符串形式,所以在选择中直接处理了;用的正则的原因是去掉出现零是我情况;

// 实现树形选择联动功能
function testCheckChange(data, checked, node) {
	queryParams.DeviceidArr = useUnique(queryParams.DeviceidArr)
	if (checked) {
		queryParams.DeviceidArr = queryParams.DeviceidArr.concat(",", data.id).replace(/,0,/g, ',').replace(/,0/g, ',').replace(/0,/g, ',')
		let arr = queryParams.DeviceidArr.split(",").map(item => Number(item)).filter(item => item !== 0);
		// 使用Set对象去重  
		let uniqueArr = [...new Set(arr)];
		if (uniqueArr.length == nodeId.value.length) {
			// 取消全选状态显示
			checkAll.value = true
		}
	} else {
		// 防止在字符串和数组之间转换出现零的情况
		let arr = queryParams.DeviceidArr.split(",").map(item => Number(item)).filter(item => item !== 0);
		let indexToRemove = arr.indexOf(data.id);

		if (indexToRemove !== -1) {
			arr.splice(indexToRemove, 1);
		}
		if (arr.length !== nodeId.value.length) {
			// 取消全选状态显示
			checkAll.value = false
		}
		queryParams.DeviceidArr = arr.join(",")
	}
}
//全选按钮勾上的方法事件
function handleCheckAllChange(params) {
	if (params) {
		allNode.value = []
		nodeId.value = []
		hierarchicalIteration(deviceLevel.value)
		testingTree.value?.setCheckedKeys(allNode.value);
		let uniqueArr = [...new Set(nodeId.value)];
		queryParams.DeviceidArr = uniqueArr.join(",")
	}
	else {
		//取消全选时置空
		testingTree.value.setCheckedKeys([])
		queryParams.DeviceidArr = ''
	}
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渔舟唱晚@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值