树表格做懒加载-点击小箭头走接口

children为[]则使用hasChildren的true/false来判断是否有子节点,另,如果要做点击小箭头走接口必须加lazy及load
<el-table
v-if="refreshTable"
v-loading="loading"
:data="deptList"
lazy
:load="load"
row-key="deptId"
:default-expand-all="isExpandAll"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
>
load(tree, treeNode, resolve) {
this.queryParams.deptId = tree.deptId;
this.loading = true;
// 假设你有一个 API 方法来获取子节点数据
queryDeptByParentId(this.queryParams) // 这里的 deptId 是当前节点的标识符
.then((response) => {
resolve(response.data);
this.loading = false;
})
.catch((error) => {
console.error("加载子节点失败:", error);
this.loading = false;
resolve([]); // 如果加载失败,返回空数组
});
},
/** 查询部门列表 */
getList() {
this.loading = true;
this.queryParams.deptId = null;
this.deptList = null;
listDept(this.queryParams).then((response) => {
this.deptList = this.handleTree(response.data, "deptId");
this.deptList.forEach((item) => {
this.initializeChildren(item);
});
this.loading = false;
});
},
// 递归函数,用来确保每个节点的 children 字段是一个数组
initializeChildren(item) {
// 如果有子节点但没有 children 字段,则初始化为一个空数组
if (item.hasChildren && !Array.isArray(item.children)) {
item.children = [];
}
// 如果当前节点有 children,并且 children 是数组,则递归处理每个子节点
if (Array.isArray(item.children)) {
item.children.forEach((child) => {
this.initializeChildren(child); // 递归处理子节点
});
}
}, /**
* 构造树型结构数据
* @param {*} data 数据源
* @param {*} id id字段 默认 'id'
* @param {*} parentId 父节点字段 默认 'parentId'
* @param {*} children 孩子节点字段 默认 'children'
*/
export function handleTree(data, id, parentId, children) {
let config = {
id: id || 'id',
parentId: parentId || 'parentId',
childrenList: children || 'children'
}; var childrenListMap = {};
var nodeIds = {};
var tree = []; for (let d of data) {
let parentId = d[config.parentId];
if (childrenListMap[parentId] == null) {
childrenListMap[parentId] = [];
}
nodeIds[d[config.id]] = d;
childrenListMap[parentId].push(d);
} for (let d of data) {
let parentId = d[config.parentId];
if (nodeIds[parentId] == null) {
tree.push(d);
}
} for (let t of tree) {
adaptToChildrenList(t);
} function adaptToChildrenList(o) {
if (childrenListMap[o[config.id]] !== null) {
o[config.childrenList] = childrenListMap[o[config.id]];
}
if (o[config.childrenList]) {
for (let c of o[config.childrenList]) {
adaptToChildrenList(c);
}
}
}
return tree;
}

Vue ElementUI 树表格的更多相关文章

  1. vue+element-ui实现表格checkbox单选

    公司平台利用vue+elementui搭建前端页面,因为本人第一次使用vue也遇到了不少坑,因为我要实现的效果如下图所示 实现这种单选框,只能选择一个,但element-ui展示的是多选框,check ...

  2. vue+element-ui实现表格编辑(增加或删除行,删除单行或删除多行)

    <template> <div class="app-container"> <div class="filter-container&qu ...

  3. vue+elementUI 在表格中动态增加与删除行

    1.定义一个数组,存放表格数据(注:表格要给定一个高度,添加数据超过这个高度会自动出现滚动条) ttable:[], 2.把数组中表格的每一行定义成一个对象,添加到数组中 newconditions: ...

  4. vue+element-ui实现无限级动态菜单树

    使用vue+element-ui实现无限级动态菜单 该案例实现主要使用递归的思想,递归对新人来容易迷惑的是自己调用自己,直到满足条件为止,接下来我们就一步一步实现一个动态多级菜单vue组件 搭建项目并 ...

  5. Vue + Element-ui实现后台管理系统(5)---封装一个Form表单组件和Table表格组件

    封装一个Form表单组件和Table组件 有关后台管理系统之前写过四遍博客,看这篇之前最好先看下这四篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-syste ...

  6. vue+elementUI实现 分页表格的单选或者多选、及禁止部分选择

    一.vue+elementUI实现 分页表格前的多选 多选效果图: 代码如下: <el-table ref="multipleTable" :data="listD ...

  7. vue+elementUI表格实现自定义右键菜单

    组件代码: <template> <div id="contextmenu" class="contextmenu open"> < ...

  8. vue+element-ui+slot-scope或原生实现可编辑表格(日历)

    你们公司的产品是不是还在做一个可编辑表格功能? 1.前言 咱开发拿到需求大多数是去网上找成型的组件,找不到再看原生的方法能否实现,大牛除外哈,大牛一般喜欢封装组件框架. 2.思路 可编辑表格在后台管理 ...

  9. vue+element-ui之tree树形控件有关子节点和父节点之间的各种选中关系详解

    做后端管理系统,永远是最蛋疼.最复杂也最欠揍的事情,也永远是前端开发人员最苦逼.最无奈也最尿性的时刻.蛋疼的是需求变幻无穷,如同二师兄的三十六般变化:复杂的是开发难度寸步难行,如同蜀道难,难于上青天: ...

  10. Java快速开发平台强大的代码生成器,JEECG 3.7.5 VUE+ElementUI SPA单页面应用版本发布

    JEECG 3.7.5 VUE+ElementUI SPA单页面应用版本发布 此版本为Vue+ElementUI SPA单页面应用版本,提供新一代风格代码生成器模板,采用Vue技术,提供两套精美模板E ...

随机推荐

  1. 一种面向混合云平台基于LSTM预测模型的资源池配额方法。

    本文分享自天翼云开发者社区<一种面向混合云平台基于LSTM预测模型的资源池配额方法.>,作者:l****n 基于用户的历史配额申请情况和实际资源使用情况组成数据集搭建LSTM时序预测模型. ...

  2. 华盛顿大学-分布式系统课设-lab0

    前言 无意间发现一个华盛顿大学分布式系统的课程实验,感觉课程组设计得非常用心.不同于一般实验仅仅给出若干测试样例并判断程序的输出是否正确,实验中的验证环节通过DFS搜索来遍历分布式系统可能的状态,以此 ...

  3. Java方法、方法的重载、命令行传递参数、可变参数和递归

    Java的方法 是解决一类问题的步骤的有序集合 包含于类或对象中 在程序中被创建,在其他地方被引用 一般只完成一个功能,利于后期扩展! 语法  修饰符 返回值类型 方法名(参数类型 参数名){    ...

  4. 在使用HOperatorSet.Draw忘记点击右键结束方法无法关闭窗体问题如何规避

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/17270056.html 可以在离开窗体或者关闭窗体事件中调用HOperatorSet.HIOC ...

  5. 特征转换之python代码

    一.连续型变量1.1 连续变量无量纲化(1)无量纲化: 使不同规格尺度的数据转化统一规格尺度(将数据单位统一)(2)无量纲化方法:标准化, 区间所方法 标准化: 将连续性变量转变为 均值0 标准差1 ...

  6. 设计原则&模式:单例模式(创建型)

    定义:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式. 五种实现方式: 饿汉式 懒汉式 双重校验 静态内部类 枚举类 饿汉式 特点:线程安全,调用效率高,但是不 ...

  7. Flink学习(六) 常用DataStreaming API

    曾经提到过,Flink 很重要的一个特点是"流批一体",然而事实上 Flink 并没有完全做到所谓的"流批一体",即编写一套代码,可以同时支持流式计算场景和批量 ...

  8. 分享4款.NET开源、免费、实用的商城系统

    前言 今天大姚给大家分享4款.NET开源.免费.实用的商城系统,希望可以帮助到有商城系统开发需求的同学. nopCommerce nopCommerce是一个.NET开源功能丰富.免费.灵活且可定制的 ...

  9. kubeadm安装kubernetes

    kubeadm安装kubernetes kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具. 这个工具能通过两条指令完成一个 kubernetes 集群的部署: $ k ...

  10. iframe高度自适应 完美解决

    前言 一直被iframe的高度自适应的问题困扰着,今天终于找到完美解决方案,加上以下css即可. css iframe { display: block; border: none; height: ...