• [vue3] Tree/TreeSelect树形控件使用


     ✨✨个人主页:沫洺的主页

    📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 

                               📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专栏

                               📖Docker专栏📖Reids专栏📖MQ专栏📖SpringCloud专栏     

    💖💖如果文章对你有所帮助请留下三连✨✨

    🍨效果图

    🍹核心代码实现

    Element Plus: Tree Tree 树形控件

    Element Plus: TreeSelect TreeSelect 树形选择

    含有下拉菜单的树形选择器,结合了 el-tree 和 el-selectt 两个组件的功能。

    1. "formData.parentId" :check-strictly="true" :data="categoryTreeData"
    2. :render-after-expand="false" :default-expand-all="true" />
    • data 展示数据
    • render-after-expand 属性是默认开启的,所选择的标签名可能不会及时更新显示,您可以把该属性设置为 false 来显示正确的名称
    • 当属性 check-strictly=true 时,任何节点都可以被选择,否则只有子节点可被选择
    • default-expand-all 是否默认展开所有节点

    data的数据结构

    1. const data = [
    2. {
    3. value: '1',
    4. label: 'Level one 1',
    5. children: [
    6. {
    7. value: '1-1',
    8. label: 'Level two 1-1',
    9. children: [
    10. {
    11. value: '1-1-1',
    12. label: 'Level three 1-1-1',
    13. },
    14. ],
    15. },
    16. ],
    17. },
    18. {
    19. value: '2',
    20. label: 'Level one 2',
    21. children: [
    22. {
    23. value: '2-1',
    24. label: 'Level two 2-1',
    25. children: [
    26. {
    27. value: '2-1-1',
    28. label: 'Level three 2-1-1',
    29. },
    30. ],
    31. },
    32. {
    33. value: '2-2',
    34. label: 'Level two 2-2',
    35. children: [
    36. {
    37. value: '2-2-1',
    38. label: 'Level three 2-2-1',
    39. },
    40. ],
    41. },
    42. ],
    43. },
    44. ]

    这是一种父子关系的数据结构,所以在创建数据库时需要对应的关系结构如下

    上面的value映射id,label映射name,children代表子类

    后端接口

    1. <dependency>
    2. <groupId>cn.hutoolgroupId>
    3. <artifactId>hutool-allartifactId>
    4. <version>5.8.5version>
    5. dependency>

    hutool工具: 树结构工具 中有个自定义字段名的方法

    使用如下

    1. @GetMapping("/tree")
    2. public List> select(){
    3. //这里用的MyBatis Plus
    4. List dtos = categoryService.select(new CategoryQueryDto());
    5. //配置
    6. TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
    7. // 自定义属性名 都要默认值的
    8. treeNodeConfig.setWeightKey("seq");
    9. treeNodeConfig.setIdKey("id");
    10. // 最大递归深度
    11. treeNodeConfig.setDeep(2);
    12. //转换器
    13. List> treeNodes = TreeUtil.build(dtos, 0, treeNodeConfig,
    14. (treeNode, tree) -> {
    15. tree.setId(treeNode.getId());
    16. tree.setParentId(treeNode.getParentId());
    17. tree.setWeight(treeNode.getSeq());
    18. tree.setName(treeNode.getName());
    19. // 扩展属性 ...
    20. tree.putExtra("value", treeNode.getId());
    21. tree.putExtra("label", treeNode.getName());
    22. });
    23. return treeNodes;
    24. }

    返回treeNodes格式如下

    上面的id,seq,parentId,name,这些数据根据需求去考虑是否获取

    关键的是扩展属性value,label这两必须要有,目的是与前端树data结构中的value,label照应

    1. // 扩展属性 ...
    2. tree.putExtra("value", treeNode.getId());
    3. tree.putExtra("label", treeNode.getName());

    前端调用接口给:data="categoryTreeData"赋值

    1. const categoryTreeData = ref([{ value: 0, label: "全部一级类目" }])
    2. const callCategoryTreeApi = () => {
    3. categoryApi.tree.call().then((res:any) => {
    4. // concat 合并数组
    5. categoryTreeData.value = categoryTreeData.value.concat(res)
    6. })
    7. }

    补充: v-model="formData.parentId"双向绑定父类ID(parentId),主要作用就是赋值和获取值

  • 相关阅读:
    开源大数据OLAP引擎最佳实践
    spring boot 整合 swagger自动生成接口文档,搬砖都快乐了~
    Mybatisplus 常用注解
    vue之使用箭头函数导致表格无法刷新数据
    伦敦金今日走势怎么做?
    深度优先搜索(java)
    SwiftUI 导航教程之如何实现没有 Navigation View的 SwiftUI 导航功能
    C语言扫雷游戏完整实现(上)
    跳槽字节跳动社招Java面试分享
    【烹饪】清炒菠菜的学习笔记
  • 原文地址:https://blog.csdn.net/HeyVIrBbox/article/details/127609601