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

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

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 = ''
	}
}

最近更新

  1. TCP协议是安全的吗?

    2024-01-28 05:58:04       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-28 05:58:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-28 05:58:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-28 05:58:04       20 阅读

热门阅读

  1. Compose | UI组件(五) | Button 按钮组件

    2024-01-28 05:58:04       35 阅读
  2. 73. 矩阵置零

    2024-01-28 05:58:04       35 阅读
  3. 解析dapp:铸造虚拟钱包新概念

    2024-01-28 05:58:04       31 阅读
  4. Spark面试全攻略:深入理解与高效准备指南

    2024-01-28 05:58:04       29 阅读
  5. MySQL设计开发&使用规范

    2024-01-28 05:58:04       33 阅读
  6. MySQL 导入数据

    2024-01-28 05:58:04       32 阅读
  7. MySQL主从同步数据库环境部署

    2024-01-28 05:58:04       25 阅读