Vue ElementUI 树表格
树表格做懒加载-点击小箭头走接口
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 树表格的更多相关文章
- vue+element-ui实现表格checkbox单选
公司平台利用vue+elementui搭建前端页面,因为本人第一次使用vue也遇到了不少坑,因为我要实现的效果如下图所示 实现这种单选框,只能选择一个,但element-ui展示的是多选框,check ...
- vue+element-ui实现表格编辑(增加或删除行,删除单行或删除多行)
<template> <div class="app-container"> <div class="filter-container&qu ...
- vue+elementUI 在表格中动态增加与删除行
1.定义一个数组,存放表格数据(注:表格要给定一个高度,添加数据超过这个高度会自动出现滚动条) ttable:[], 2.把数组中表格的每一行定义成一个对象,添加到数组中 newconditions: ...
- vue+element-ui实现无限级动态菜单树
使用vue+element-ui实现无限级动态菜单 该案例实现主要使用递归的思想,递归对新人来容易迷惑的是自己调用自己,直到满足条件为止,接下来我们就一步一步实现一个动态多级菜单vue组件 搭建项目并 ...
- Vue + Element-ui实现后台管理系统(5)---封装一个Form表单组件和Table表格组件
封装一个Form表单组件和Table组件 有关后台管理系统之前写过四遍博客,看这篇之前最好先看下这四篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-syste ...
- vue+elementUI实现 分页表格的单选或者多选、及禁止部分选择
一.vue+elementUI实现 分页表格前的多选 多选效果图: 代码如下: <el-table ref="multipleTable" :data="listD ...
- vue+elementUI表格实现自定义右键菜单
组件代码: <template> <div id="contextmenu" class="contextmenu open"> < ...
- vue+element-ui+slot-scope或原生实现可编辑表格(日历)
你们公司的产品是不是还在做一个可编辑表格功能? 1.前言 咱开发拿到需求大多数是去网上找成型的组件,找不到再看原生的方法能否实现,大牛除外哈,大牛一般喜欢封装组件框架. 2.思路 可编辑表格在后台管理 ...
- vue+element-ui之tree树形控件有关子节点和父节点之间的各种选中关系详解
做后端管理系统,永远是最蛋疼.最复杂也最欠揍的事情,也永远是前端开发人员最苦逼.最无奈也最尿性的时刻.蛋疼的是需求变幻无穷,如同二师兄的三十六般变化:复杂的是开发难度寸步难行,如同蜀道难,难于上青天: ...
- Java快速开发平台强大的代码生成器,JEECG 3.7.5 VUE+ElementUI SPA单页面应用版本发布
JEECG 3.7.5 VUE+ElementUI SPA单页面应用版本发布 此版本为Vue+ElementUI SPA单页面应用版本,提供新一代风格代码生成器模板,采用Vue技术,提供两套精美模板E ...
随机推荐
- not in 和 not exists 比较和用法
尽量不要使用not in(它会调用子查询),而尽量使用not exists(它会调用关联子查询).查询语句使用了not in,那么对内外表都进行全表扫描,没有用到索引:而not exists的子查询依 ...
- 打造有效安全闭环,天翼云MDR来了!
随着网络攻-防对抗形势愈演愈烈,传统的安全防护模式已难以应对频率暴增.昼夜不停的网络安全攻-击,提升组织安全防护能力势在必行.事实上,一些单位在网络安全建设工作中经验不足,在安全组件/设备采购方面大量 ...
- 降阶公式/ARC173F
ARC173F 题意 给定 \(n,A,B\),初始有一个集合 \(S=\{1,2,\dots,A,A +1,A+2,\dots,A+B\}\).进行如下操作 \(n-1\) 次使得剩下 \(n\) ...
- linux mint安装触控板手势fusuma
安装必要的包,终端输入: sudo apt-get install libinput-tools sudo apt-get install xdotool sudo gem install fusum ...
- Luogu P5005 中国象棋 - 摆上马 / Luogu P8756 国际象棋 题解 [ 蓝 ] [ 状压 dp ] [ 位运算 ]
国际象棋:模板棋盘状压. 摆上马:需要点思维的棋盘状压,相比上一道题加了"蹩马脚"的设定. Easy_version :国际象棋 概述一下此类棋盘问题的思路: 用二进制数表示出棋盘 ...
- Thymeleaf判断集合是否为空
Thymeleaf判断集合是否为空最近项目使用的是thymeleaf.项目架构是Springboot+Thymeleaf. 在判断集合是否为空的时候踩了坑与大家分享. 以下代码是判断集合是否为空的,m ...
- macbookpro m3本地部署DeepSeek模型
macbookpro m3有着十分强大的性能.在deepseek如火如荼的当下,可以尝试在本地部署并使用.还可以将自己的文档作为语料喂给deepseek,使其能成为自己专属的AI助手. 本文介绍使用o ...
- Ansible 数百台批量操作前期准备工作
Ansible 数百台批量操作前期准备工作 背景: 当前有100台服务器在同一个内网,需要统一部署业务程序并且对主机修改主机名,只提供了一个文档host_user.txt,内容 " IP 用 ...
- C# WebClient调用WebService
WebClient调用WebService (文末下载完整代码) 先上代码: object[] inObjects = new[] { "14630, 14631" }; Http ...
- ocr识别过程中报错 tesseract is not installed
这个问题无论在初始编译时或者在后来坏境变更调试时都会遇到的问题. 解决:问题原因是源码中的默认路径位置与文件位置不同,需要更改一下