当前位置: 首页> 健康> 母婴 > ruoyi-nodejs返回树状结构

ruoyi-nodejs返回树状结构

时间:2025/9/7 21:31:04来源:https://blog.csdn.net/yan1915766026/article/details/141804873 浏览次数:0次

背景说明

我们用nodejs重构若依的后台服务,发现有些数据需要返回树状结构,比如:

  • 用户列表左侧的部门树
  • 新增角色的菜单树等
    在这里插入图片描述
    在这里插入图片描述
    那么,能否抽离出公共方法呢

封装函数

封装的好处:返回的id和label,支持传入不同的字段名

使用方法
部门树

deptTreeList 就是包含id、label、parentId的树状结构,但是这里多了一个parentId字段,为了美观大家可以自己去除

 // 从部门表取关键数据
const rows = await this.deptEntity.find({select: ['deptId', 'parentId', 'deptName'],
});
// 构造树状结构
const deptTreeList = listToTree(rows, (m) => m.deptId, (m) => m.deptName);
菜单树

menuTreeList 菜单树

const rows = await this.menuEntity.find({select: ['menuId', 'menuName', 'parentId'],order: {orderNum: 'ASC',createTime: 'DESC'}
})
const menuTreeList = listToTree(rows, (m) => m.menuId, (m) => m.menuName)
源码
interface treeNode {id: number;label: string;parentId: number
}/*** 数组转树结构,返回以下树状结构*/
export function listToTree(arr: any[], getId: any, getLabel: any): treeNode[] {const kData = {}; // 以id做key的对象 暂时储存数据const lData = []; // 最终的数据 arrarr.forEach((m) => {m = {id: getId(m),label: getLabel(m),parentId: +m.parentId,};kData[m.id] = {id: m.id,label: m.label,parentId: m.parentId,};if (m.parentId === 0) {lData.push(kData[m.id]);} else {kData[m.parentId] = kData[m.parentId] || {};kData[m.parentId].children = kData[m.parentId].children || [];kData[m.parentId].children.push(kData[m.id]);}});return lData;
}
关键字:ruoyi-nodejs返回树状结构

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: