// 遍历节点
|
function ergodicNode(nodes) {
|
if (nodes && nodes.length) {
|
nodes.forEach((item) => {
|
item.rename = false;
|
item.children && ergodicNode(item.children);
|
});
|
}
|
}
|
|
/**
|
* 图层树数据
|
*/
|
export default {
|
namespaced: true,
|
state: {
|
// 工程树数据
|
treeData: [],
|
},
|
mutations: {
|
// 定义工程树数据
|
setTreeData(state, data = []) {
|
ergodicNode(data);
|
state.treeData = data;
|
},
|
// 树指定位置增加子节点(必须标识为key)
|
addTreeChildren({ treeData }, { parentNode, pid, item }) {
|
if (!pid) {
|
treeData.push(item)
|
return;
|
}
|
(parentNode || treeData).forEach(ele => {
|
if (ele.id === pid) {
|
if (ele.children) {
|
ele.children.push(item)
|
} else {
|
(parentNode || treeData).push(item)
|
}
|
|
return;
|
} else {
|
if (ele.children) {
|
this.commit('layerTree/addTreeChildren', {
|
parentNode: ele.children,
|
pid,
|
item
|
})
|
}
|
}
|
})
|
},
|
// 勾选节点
|
checkTreeNode({ treeData }, { parentNode, id, checked }) {
|
(parentNode || treeData).forEach(ele => {
|
if (!id || (id && ele.id === id)) {
|
// id不存,勾选所有子节点,id存在,勾选当前节点
|
ele.checked = checked;
|
if (ele.children) {
|
this.commit('layerTree/checkTreeNode', { parentNode: ele.children, checked });
|
} else if (ele._children) {
|
this.commit('layerTree/checkTreeNode', { parentNode: ele._children, checked });
|
}
|
if (id) {
|
return;
|
}
|
} else {
|
// 递归
|
if (ele.children) {
|
this.commit('layerTree/checkTreeNode', {
|
parentNode: ele.children,
|
id,
|
checked
|
})
|
}
|
}
|
})
|
},
|
// 更新节点数据
|
updataTreeNode({ treeData }, { parentNode, id, nodeValue, key, value }) {
|
(parentNode || treeData).forEach(ele => {
|
if (ele.id === id) {
|
if (nodeValue) {
|
for (let _key in nodeValue) {
|
if (nodeValue[_key] === undefined) {
|
delete ele[_key];
|
} else {
|
ele[_key] = nodeValue[_key];
|
}
|
}
|
} else {
|
ele[key] = value;
|
}
|
return;
|
} else {
|
if (ele.children) {
|
this.commit('layerTree/updataTreeNode', {
|
parentNode: ele.children,
|
id,
|
nodeValue,
|
key,
|
value
|
})
|
}
|
}
|
})
|
},
|
// 移除节点
|
removeTreeNode({ treeData }, { id, parentNode }) {
|
(parentNode || treeData).forEach((ele, index) => {
|
if (ele.id === id) {
|
(parentNode || treeData).splice(index, 1)
|
return;
|
} else {
|
if (ele.children) {
|
this.commit('layerTree/removeTreeNode', { id, parentNode: ele.children })
|
}
|
}
|
})
|
}
|
}
|
}
|