> INITIALIZING_SYSTEM _
root@jules : ~/workspace/logs/layui-tree-bom-zh.md

Layui Tree 魔改:百万级 BOM 树形结构的异步懒加载

> 日期: 4/24/2026 > 目录: /Web开发
#Layui#JavaScript#前端优化

搞过 ERP 或 MES 的都知道,复杂的装备制造 BOM 树往往有十几层,总节点数上百万。如果一次性查出所有数据丢给前端 layui.tree 渲染,浏览器直接崩溃。

解决方案:异步懒加载(Lazy Load)。 原生 Layui Tree 支持点击展开事件,我们可以利用这个机制,动态向后端请求子节点数据。

前端核心代码:

layui.use(['tree'], function(){
  var tree = layui.tree;

  tree.render({
    elem: '#bomTree',
    data: [{ title: '最终产品 A', id: '1', spread: false, children: [] }], 
    click: function(obj){
      var node = obj.data;
      // 如果没有子节点且没有加载过
      if(!node.children || node.children.length === 0){
        // 模拟 Ajax 请求后端
        $.get('/api/BOM/GetChildren?parentId=' + node.id, function(res){
           // 更新数据并重新渲染,或利用 DOM 操作追加
           appendNodeToLayuiTree(node.id, res.data);
        });
      }
    }
  });
});

后端配合:千万不要在 SQL 里写递归查所有!只查 ParentId == 传入参数 的第一层数据返回即可。这种方式加载多庞大的 BOM 都不怕。