- layui有一个eletree的组件
- 这个组件有个bug,就是你剪贴节点的时候,如果粘贴完,之前的父节点没有子节点的话,可能会导致其他父节点的消失(注意是其他父节点,不是被自己操作的父节点)
- 解决方法
- 自己写函数,在剪贴函数里面把当前tree的全部数据拿到,单独记录下当前的父节点及子节点。然后在粘贴函数里面,自己操作数据,剪贴的父节点删除那个子节点,被粘贴的父节点加入这个子节点,然后load整个tree
ele.on("cut_paste", function(data) {
let tmp = data
data = data.data
tmp.load()
if(data.isGroup){
layer.msg("统计组不可剪切", {icon: 2, time: 2000})
temp.load()
return false;
}
//子节点
tmpData = data
//找到这个节点的父节点
var alldata = ele.getAllNodeData()
for(var i=0;i<alldata.length;i++){
if(alldata[i].children){
for(var j=0;j<alldata[i].children.length;j++){
if(alldata[i].children[j].id === data.id){
tmpGroup = alldata[i]
break
}
}
}
}
console.log(tmpGroup)
})
ele.on("edit",function(data){
data.load()
req(ele.getAllNodeData(),function () {
ele.reload()
});
})
ele.on("paste", function(data) {
var tmpAll = ele.getAllNodeData()
data.load()
if(tmpGroup){
//在tmpAll里面找到data
const foundItem = tmpAll.find(item => item.id === data.data.id);
if (foundItem) {
if (foundItem.children) {
foundItem.children.push(tmpData);
} else {
foundItem.children = [tmpData];
}
}
// 在tmpAll里面找到tmpGroup
const tmpAllIndex = tmpAll.findIndex(item => item.id === tmpGroup.id);
if (tmpAllIndex !== -1) {
// 说明原来在tmpAll[tmpAllIndex]的children里面,现在要把它删除
const tmpChildIndex = tmpAll[tmpAllIndex].children.findIndex(item => item.id === tmpData.id);
if (tmpChildIndex !== -1) {
tmpAll[tmpAllIndex].children.splice(tmpChildIndex, 1);
}
}
tmpGroup = null
tmpData = null
}
req(tmpAll,function () {
//刷新网页,不是ele
ele.reload()
});
})