微搭低代码树形组件使用介绍

文摘   2024-08-11 11:06   内蒙古  

在软件开发中,树形结构是比较常见的,我们在微搭中如何体现树形结构呢?

1 创建数据源

我们可以通过数据源来存储树形结构的数据

在设计树形结构的数据源中,我们设计了一个父部门ID的字段,这个字段用来存储父部门的数据标识

2 准备数据

数据源搭建好了之后,我们需要准备数据,这里我们准备了四条数据

需要注意的是根节点的数据我们是不填写父部门ID的

3 创建API

为了获取树形结构的数据,我们需要创建API来完成数据的获取工作。

这里我们使用了自定义代码来完成数据的获取,在编辑器里输入如下的代码

module.exports = async function (params, context) {  const departments = await context.callModel({    name: 'department_ywrtj83',    methodName: 'wedaGetRecordsV2',    params: {      filter: {        where: {          $and: [{}]        },      },      orderBy: [        { level: "asc" },        { order: "asc" }      ],      select: { $master: true },      getCount: true,      pageSize: 200,      pageNumber: 1    },  });

// 构建一个映射来存储所有部门 const deptMap = {}; departments.records.forEach(dept => { deptMap[dept._id] = { label: dept.name, value: dept._id, children: [], disabled: dept.disabled || false }; });

// 构建树形结构 const tree = []; departments.records.forEach(dept => { const node = deptMap[dept._id]; if (dept.parentid && dept.parentid !== "" && deptMap[dept.parentid]) { deptMap[dept.parentid].children.push(node); } else { tree.push(node); } });

// 清理空的 children 数组 const cleanTree = (node) => { if (node.children.length === 0) { delete node.children; } else { node.children.forEach(cleanTree); } return node; };

const finalTree = tree.map(cleanTree); return { tree: finalTree };};

代码分为几个步骤:

第一步是通过分页方法获取我们的数据

const departments = await context.callModel({    name: 'department_ywrtj83',    methodName: 'wedaGetRecordsV2',    params: {      filter: {        where: {          $and: [{}]        },      },      orderBy: [        { level: "asc" },        { order: "asc" }      ],      select: { $master: true },      getCount: true,      pageSize: 200,      pageNumber: 1    },  });

改版之后,获取数据的时候尽量使用数据模型的V2方法,比较灵活

第二步是自定义一个Map的数据,数据的结构是将数据标识作为键,按照组件要求的返回值构造值

const deptMap = {};  departments.records.forEach(dept => {    deptMap[dept._id] = {      label: dept.name,      value: dept._id,      children: [],      disabled: dept.disabled || false    };  });

第三歩是构造树形结构,这里的逻辑是去看当前节点是否是根节点,如果是就放入数组中,如果不是就将节点放到对应节点的父节点的children数组中

const tree = [];  departments.records.forEach(dept => {    const node = deptMap[dept._id];    if (dept.parentid && dept.parentid !== "" && deptMap[dept.parentid]) {      deptMap[dept.parentid].children.push(node);    } else {      tree.push(node);    }  });

最后一步是清理叶子节点,因为我们叶子节点就是最底了,将chilren属性删除

const cleanTree = (node) => {    if (node.children.length === 0) {      delete node.children;    } else {      node.children.forEach(cleanTree);    }    return node;  };

const finalTree = tree.map(cleanTree);

数据处理完毕我们返回我们的结果,使用了return语句

4 应用中调用API

在应用中,我们通过外部API来调用我们刚刚创建好的

有了数据之后,将数据绑定到树形组件就完成了整体功能的开发

最终的效果

打开应用,可以看到数据以一棵树的形式进行了展示,有不同的层级,可以展开和关闭

总结

我们本篇讲解了一下树形组件的具体用法,涉及到建立数据源,开发API,在应用中调用API以及数据绑定的相关知识。树形组件用处还是挺多的,比如我们的权限系统中的部门管理,再比如我们在小程序中的多级分类展示,都会用到这块的知识点,熟练掌握每一个知识点,串起来就形成了我们具体的应用。



低代码布道师
分享微搭低代码使用教程,提问交流+知识星球50556232
 最新文章