Commit af0ee317 authored by 武广's avatar 武广

fix: 更新子树半选状态

parent d0e15cba
......@@ -8,6 +8,7 @@ const CustomTree = forwardRef(props => {
const [treeData, setTreeData] = useState([]);
const [childrenList, setChildrenList] = useState([]);
// 获取子列表
const getChildrenList = list => {
const arr = [];
const findArr = childrens => {
......@@ -21,6 +22,7 @@ const CustomTree = forwardRef(props => {
findArr(list);
return arr;
};
// 更改属性值
const ChangeVal = (list, key, v, keyName) => {
list.forEach(node => {
if (node.key === key) {
......@@ -59,6 +61,7 @@ const CustomTree = forwardRef(props => {
};
props.value && props.value.length && checkfn(props.value, json);
};
// 格式化数据
const filterData = (arr, parentChecked) => {
const list = [];
arr.forEach(item => {
......@@ -81,6 +84,7 @@ const CustomTree = forwardRef(props => {
return list;
};
// 追加子树
const appendTreeData = (list, key, children) =>
list.map(node => {
if (node.key === key) {
......@@ -98,6 +102,7 @@ const CustomTree = forwardRef(props => {
return node;
});
// 更新子树显示隐藏状态
const updateVisibleChildren = (list, visible) => {
list.forEach(item => {
item.visibleChildren = false;
......@@ -108,6 +113,7 @@ const CustomTree = forwardRef(props => {
});
};
// 更新显示隐藏状态
const updateVisible = (list, ckey, visible, pkey) => {
let key = '';
list.forEach(node => {
......@@ -130,6 +136,7 @@ const CustomTree = forwardRef(props => {
return key;
};
// 改变子树显示隐藏状态事件
const onVisibleChildren = async (ckey, visible, children, parentChecked) => {
let arr = [...treeData];
if (children && !children.length && typeof props.loadData === 'function') {
......@@ -145,9 +152,10 @@ const CustomTree = forwardRef(props => {
setTreeData(arr);
};
// 更改子复选框状态
const updateChildren = (list, isChecked) => {
list.forEach(item => {
item.indeterminate = !isChecked;
item.indeterminate = false;
item.checked = isChecked;
if (item.children && item.children.length) {
item.value = isChecked ? item.children.map(c => c.key) : [];
......@@ -158,12 +166,12 @@ const CustomTree = forwardRef(props => {
});
};
// 更改选中状态
const changeChecked = (list, ckey, isChecked, pkey) => {
let key = '';
list.forEach(node => {
if (node.key === ckey) {
node.checked = isChecked;
// node.indeterminate = !node.checked;
key = pkey;
node.children && node.children.length && updateChildren(node.children, isChecked);
} else if (node.children && node.children.length) {
......@@ -174,17 +182,15 @@ const CustomTree = forwardRef(props => {
node.checked = node.children.every(item => item.checked);
if (node.checked) {
node.value = [];
// updateChildren(node.children, true);
// console.log('node :>> ', ...node.children);
}
}
key = pkey;
}
if (node.checked) {
node.indeterminate = false;
} else if (node.children && node.children.length) {
node.indeterminate = node.children.some(item => item.checked || item.indeterminate);
}
}
if (node.checked) {
node.indeterminate = false;
} else if (node.children && node.children.length) {
node.indeterminate = node.children.some(item => item.checked || item.indeterminate);
}
});
return key;
......@@ -228,6 +234,7 @@ const CustomTree = forwardRef(props => {
return arr;
};
// 切换选中状态事件
const onChange = (ckey, isChecked, level) => {
const datas = [...treeData];
changeChecked(datas, ckey, isChecked);
......@@ -238,6 +245,7 @@ const CustomTree = forwardRef(props => {
props.onChange(values);
};
// 渲染子树
const renderTreeNodes = data =>
data &&
data.map(item => (
......@@ -250,6 +258,7 @@ const CustomTree = forwardRef(props => {
/>
));
// 隐藏所有子树
const handleMouseUp = e => {
const isCur = e.path.some(item => item.id === 'my-custom-tree-box');
if (!isCur) {
......@@ -279,6 +288,7 @@ const CustomTree = forwardRef(props => {
// return json;
// });
// 初始化数初始化
const initTreeValue = (arr = [], values = [], parentChecked, level = 1) =>
arr.forEach(item => {
const valueObj = values.find(val => val.key === item.key) || {};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment