

Vue3学习(十八) - TreeSelect 树选择 - 久曲健
source link: https://www.cnblogs.com/longronglang/p/18033185
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本以为可以在家学习一天,结果家里来了客人拜年,就没学习上,有点小遗憾吧。
昨天完成从分类管理的前后端代码复制出文档管理的前后端代码,遗留问题是只能选择一级父分类。值得说的是,昨晚的遗留的问题修复了,开心。
点击父文档,弹出警告,从报错来看那意思就是parent应该是一个对象,我却给他一个string字符串。
解决方案:
将parent改造为对象:
node.parent = {'id': node.parent}
使用树形选择组件选择父节点
1、从分类管理的前后端代码复制出文档管理的前后端代码
此处略,参考以前
2、TreeSelect 树选择使用
其实就是将原来一级分类,改为可以多级分类选择,这里我们就用TreeSelect选择来实现,示例代码如下:
<a-tree-select v-model="docs_data" show-search style="width: 100%" :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="请选择父文档" tree-default-expand-all :tree-data="treeSelectData" :fieldNames="{label: 'name', key: 'id', value: 'id'}" > </a-tree-select> const treeSelectData = ref(); treeSelectData.value = [];
3、增加对象拷贝及对应选中状态设置
/** * 将某节点及其子孙节点全部置为disabled */ const setDisable = (treeSelectData: any, id: any) => { // 遍历数组,即遍历某一层节点 for (let i = 0; i < treeSelectData.length; i++) { const node = treeSelectData[i]; node.parent = {'id': node.parent} if (node.id === id) { // 将目标节点设置为disabled node.disabled = true; // 遍历所有子节点,将所有子节点全部都加上disabled const children = node.children; if (Tool.isNotEmpty(children)) { for (let j = 0; j < children.length; j++) { setDisable(children, children[j].id) } } } else { // 如果当前节点不是目标节点,则到其子节点再找找看。 const children = node.children; if (Tool.isNotEmpty(children)) { setDisable(children, id); } } } }; /** * 编辑 */ const edit = (record: any) => { open.value = true; docs_data.value = Tool.copy(record); // 不能选择当前节点及其所有子孙节点,作为父节点,会使树断开 treeSelectData.value = Tool.copy(level1.value); setDisable(treeSelectData.value, record.id); // 为选择树添加一个"无" treeSelectData.value.unshift({id: 0, name: '无'}); }; /** * 新增 */ const add = () => { open.value = true; docs_data.value = {}; treeSelectData.value = Tool.copy(level1.value); // 为选择树添加一个"无" treeSelectData.value.unshift({id: 0, name: '无'}); }; const level1 = ref(); // 一级文档树,children属性就是二级文档 /** * 数据查询 **/ const handleQuery = () => { loading.value = true; // 如果不清空现有数据,则编辑保存重新加载数据后,再点编辑,则列表显示的还是编辑前的数据 docs.value = []; axios.get("/doc/all", {}).then((response) => { loading.value = false; const data = response.data; if (data.success) { docs.value = data.content; level1.value = []; level1.value = Tool.array2Tree(docs.value, 0); } else { message.error(data.message); } }); };
前端部分代码,尤其对象拷贝部分,真的需要一定代码功底,我会继续努力的,相信很快我也能写出这样的代码。
__EOF__
Recommend
-
39
vue-treeselect A multi-select component with nested options support for Vue.js Features Single & multiple select with nested options support Fuzzy matching Async...
-
7
最近在改造原有Bootstrap开发框架,增加一个Vue&Element前端的时候,发现需要处理一个级联更新的过程,就是选择公司,然后更新部门,选择部门,或者人员列表,选择作为主管的一个实现,不同于Bootstrap使用Select2的插件,这里前端是Vue&Element,那么...
-
8
在前篇随笔《使用Vue-TreeSelect组件实现公司-部门-人员级联下拉列表的处理》中介绍了Vue-TreeSelect组件的使用,包括使用v-modal绑定值,normalizer 来映射属性处理,还有一个@input时间处理...
-
3
layui treeSelect.js传递headers 原创 layui引入treeSelect.js很简单,百度一下就知道了,不过需要在请求头headers传递,
-
10
什么是代码覆盖率? 代码覆盖率是对整个测试过程中被执行的代码的衡量,它能测量源代码中的哪些语句在测试中被执行,哪些语句尚未被执行。 为什么要测量代码覆盖率? 众所周知,测试可...
-
6
初始化加载顶层节点,点击各层的>加载该节点的子节点,加载后>标识去除不再重复加载。
-
5
最近一直在做批量测试工具的开发,打包的exe,执行也是一个黑乎乎的dos窗口,真的丑死了,总感觉没个界面,体验不好,所以就想尝试写桌面应用程序。 在技术选型时,Java窗体实现使用JavaFx、Swing,感觉...
-
7
被一个问题卡了近两天,下班后我哭了...... - 久曲健 - 博客园 好像很久没有更文了,感觉有很多想写的,但却又不知道该写些什么了。。。 近阶...
-
12
antd 级联选择器Cascader(或TreeSelect树选择器 )如何仅根据最后一级value回显完整中文路径如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!
-
5
和大家不太一样,我觉得今年的自己更加relax,没有亲戚要走,没有朋友相聚,也没有很好的哥们要去叙旧,更没有无知的相亲,甚至可以这么说没有那些闲得慌的邻居。
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK