element-plus的el-tree的双向绑定

ops/2024/12/12 23:24:03/

el-tree改造了下
可选可取消 有默认值 不包含父级id(也可打开注释 包含父级id) 默认展开 点击节点也可触发选择 节点内容自定义
在这里插入图片描述

javascript"><template><div class="absolute"><el-scrollbar class="pall"><div class="ball mb radius overflow"><div class="bb" style="background: rgba(124, 162, 121, 0.1); padding: 4px 16px;"><el-checkbox @change="selectCheckBox($event,1)">拓扑图树结构</el-checkbox></div><!--default-checked-keys:默认展开值(正常来说需要包含父级id的 但是我们后端不要后端id )show-checkbox:多选框node-key:每个树节点用来作为唯一标识的属性,整棵树应该是唯一的default-expand-all:是否默认展开所有节点expand-on-click-node:是否在点击节点的时候展开或者收缩节点, 默认值为 true,如果为 false,则只有点箭头图标的时候才会展开或者收缩节点default-checked-keys:默认勾选的节点的 key 的数组check-on-click-node:是否在点击节点的时候选中节点,默认值为 false,即只有在点击复选框时才会选中节点props:配置选项,具体看下表-->{{ childKeys }}<div style="padding: 4px 20px"><el-tree :key="keyIndex" ref="treeRef" class="tree_ref" style="max-width: 600px" :data="data" show-checkboxnode-key="id" :default-expand-all="true" :expand-on-click-node='false' :default-checked-keys="childKeys":check-on-click-node="true" :props="defaultProps" @check-change="checkChange"><template #default="{ node, data }"><span class="custom-tree-node"><span>{{ node.label }}</span><span style="color:red;margin-left: 10px">id:{{data.id }}</span></span></template></el-tree></div></div></el-scrollbar></div></template><script setup>
import { ref } from 'vue';let treeRef = ref(null);
let childKeys = ref([5, 10]); // 初始化选中子节点的 ID
const defaultProps = {children: 'children',label: 'label',
};
let keyIndex = ref(1) // 注意该key在需要全id和只需要子集id的时候用法不同
const data = [{id: 1,label: 'Level one 1',children: [{id: 4,label: 'Level two 1-1',children: [{id: 9,label: 'Level three 1-1-1',},{id: 10,label: 'Level three 1-1-2',},],},],},{id: 2,label: 'Level one 2',children: [{id: 5,label: 'Level two 2-1',},{id: 6,label: 'Level two 2-2',},],},{id: 3,label: 'Level one 3',children: [{id: 7,label: 'Level two 3-1',},{id: 8,label: 'Level two 3-2',},],},
];const checkChange = () => {// 获取所有选中的节点对象const checkedNodes = treeRef.value.getCheckedNodes();// // 结果1:获取包含父节点的id// childKeys.value = treeRef.value.getCheckedKeys()// 结果2:提取子节点的 ID,不包括父节点childKeys.value = checkedNodes.filter(node => !node.children) // 只保留没有子节点的节点.map(node => node.id); // 提取 IDconsole.log('默认值', childKeys.value, checkedNodes); // 只包含子节点的 IDkeyIndex.value++
}// 手动全选
const selectCheckBox = (value, num) => {// console.log(value, num);// // 结果1:获取包含父节点的id// if (value) {//   childKeys.value = getAllNodeIds(data)//   console.log('所有层级id', getAllNodeIds(data));// } else {//   // 取消勾选所有节点//   childKeys.value = []//   treeRef.value.setCheckedKeys([]);// }// keyIndex.value++// 结果2:提取子节点的 ID,不包括父节点if (value) {// 勾选所有节点const allKeys = data.flatMap(node => getAllNodeKeys(node));treeRef.value.setCheckedKeys(allKeys);} else {childKeys.value = []// 取消勾选所有节点treeRef.value.setCheckedKeys([]);}
};
const getAllNodeKeys = (node) => {let keys = [node.id];if (node.children) {node.children.forEach(child => {keys = keys.concat(getAllNodeKeys(child));});}console.log(keys);return keys;
}// 递归函数获取所有节点的 ID
const getAllNodeIds = (nodes) => {let ids = [];nodes.forEach(node => {ids.push(node.id); // 添加当前节点的 IDif (node.children) {ids = ids.concat(getAllNodeIds(node.children)); // 递归调用以获取子节点的 ID}});return ids;
};
</script>
<style lang="scss" scoped>
:deep(.tree_ref) {margin-left: 12px;.el-tree-node__expand-icon {display: none;}
}
</style>

http://www.ppmy.cn/ops/141102.html

相关文章

支持图像和视频理解多模态开源大模型:CogVLM2 CogVLM2-Video

CogVLM2和CogVLM2-Video是新一代的开源模型&#xff0c;支持图像和视频理解&#xff0c;具有显著的性能提升。最近发布的更新包括CogVLM2论文的发表、在线演示和对视频理解的支持&#xff0c;能够处理最多1分钟的视频。新模型支持中英文&#xff0c;文本长度可达8K&#xff0c;…

深度学习:MindSpore自动并行

随着模型规模的逐渐增大&#xff0c;需要的算力逐渐增强&#xff0c;但是算力需求增长速度远高于芯片算力增长速度。现在唯一的解决方案只有通过超大规模集群训练大模型。 大集群训练大模型的挑战 内存墙 200B参数量的模型&#xff0c;参数内存占用745GB内存&#xff0c;训练…

目前Java后端就业前景到底怎么样?

很多人都说今年对于IT行业根本没有所谓的“金三银四”“金九银十”。在各大招聘网站或者软件上不管是大厂还是中小公司大多都是挂个招聘需求&#xff0c;实际并不招人&#xff1b;在行业内的程序员基本都已经感受到了任老前段时间口中所谓的“寒气”。 虽然事实确实是如此&…

HarmonyOS-高级(一)

文章目录 一次开发、多端部署自由流转 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;HarmonyOS专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月09日12点19分 一次开发、多端部署 布局能力 自适应布局 拉伸能力均分能力占比能力缩放…

数据结构 (30)计算式查找法——哈希法

前言 数据结构中的计算式查找法&#xff0c;特别是哈希法&#xff08;又称散列法、杂凑法、关键字地址计算法&#xff09;&#xff0c;是一种高效的查找技术。 一、哈希法的基本概念 哈希法是通过一个哈希函数将关键字映射到哈希表中的某个位置&#xff0c;从而实现快速查找的技…

【代码随想录|贪心算法05】

56.合并区间 题目链接56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 这道题思路跟前两道也很像&#xff0c;就是更新把相同的区间合并而已。 class Solution { public: static bool cmp(const vector<int>& a,const vector<int>& b){return a[0…

Linux 切换用户的两种方法

sudo -su user1 与 su - user1 都可以让当前用户切换到 user1 的身份执行命令或进入该用户的交互式 Shell。但它们在权限认证方式、环境变量继承和 Shell 初始化过程等方面存在一些差异。 权限认证方式 su - user1 su 是 “switch user” 的缩写&#xff0c;默认情况下需要你输…

计算机病毒的特效及种类【知识点+逐字稿+答辩题】----高中信息技术教资面试

【涉及的知识点】 1.计算机病毒的五个特征&#xff1a; 寄生性&#xff1b;不是单独一个程序出现在计算机系统中&#xff0c;必须依附在计算机的操作系统、可执行的文件甚至数据文件 传染性&#xff1b;有很强的再生功能&#xff0c;具有传染性。这也是判断一个计算机程序是…