Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
merchant-manage-ui
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ui
merchant-manage-ui
Commits
af0ee317
Commit
af0ee317
authored
Nov 07, 2022
by
武广
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 更新子树半选状态
parent
d0e15cba
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
19 additions
and
9 deletions
+19
-9
index.jsx
src/components/CustomTree/index.jsx
+19
-9
No files found.
src/components/CustomTree/index.jsx
View file @
af0ee317
...
...
@@ -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
)
||
{};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment