Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dlink
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
zhaowei
dlink
Commits
5aba905d
Commit
5aba905d
authored
May 30, 2021
by
wenmo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
树
parent
981881fc
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
149 additions
and
43 deletions
+149
-43
Function.ts
dlink-web/src/components/Studio/StudioTree/Function.ts
+3
-1
index.less
dlink-web/src/components/Studio/StudioTree/index.less
+15
-0
index.tsx
dlink-web/src/components/Studio/StudioTree/index.tsx
+131
-42
No files found.
dlink-web/src/components/Studio/StudioTree/Function.ts
View file @
5aba905d
...
@@ -9,6 +9,7 @@ export type DataType = {
...
@@ -9,6 +9,7 @@ export type DataType = {
};
};
export
interface
TreeDataNode
extends
DataNode
{
export
interface
TreeDataNode
extends
DataNode
{
name
:
String
;
name
:
String
;
id
:
number
;
parentId
:
number
;
parentId
:
number
;
isDir
:
boolean
;
isDir
:
boolean
;
}
}
...
@@ -23,8 +24,9 @@ export function convertToTreeData(data:TreeDataNode[], pid:number) {
...
@@ -23,8 +24,9 @@ export function convertToTreeData(data:TreeDataNode[], pid:number) {
if
(
temp
.
length
>
0
)
{
if
(
temp
.
length
>
0
)
{
obj
.
children
=
temp
obj
.
children
=
temp
}
}
obj
.
isLeaf
=
obj
.
isDir
;
obj
.
isLeaf
=
!
obj
.
isDir
;
obj
.
title
=
obj
.
name
;
obj
.
title
=
obj
.
name
;
obj
.
key
=
obj
.
id
;
result
.
push
(
obj
)
result
.
push
(
obj
)
}
}
}
}
...
...
dlink-web/src/components/Studio/StudioTree/index.less
View file @
5aba905d
@import '~antd/es/style/themes/default.less';
@import '~antd/es/style/themes/default.less';
.right_click_menu li{
margin:0!important;
}
.right_click_menu{
border: 1px solid #d2d2d2;
box-shadow: 1px 1px 4px rgb(0 0 0 / 8%);
background-color: #fff;
color: #666;
z-index: 9999;
}
.tree_div{
padding-right: 20px;
}
dlink-web/src/components/Studio/StudioTree/index.tsx
View file @
5aba905d
import
React
,
{
useEffect
,
useState
}
from
"react"
;
import
React
,
{
useEffect
,
useState
}
from
"react"
;
import
{
connect
}
from
"umi"
;
import
{
connect
}
from
"umi"
;
import
{
StateType
}
from
"@/pages/Demo/FormStepForm/model"
;
import
{
StateType
}
from
"@/pages/Demo/FormStepForm/model"
;
import
{
DownOutlined
,
FrownFilled
,
FrownOutlined
,
MehOutlined
,
SmileOutlined
}
from
"@ant-design/icons"
;
import
{
DownOutlined
,
FrownFilled
,
FrownOutlined
,
MehOutlined
,
SmileOutlined
}
from
"@ant-design/icons"
;
import
{
Tree
,
Input
,
Dropdown
,
Menu
}
from
'antd'
;
import
{
Tree
,
Input
,
Menu
}
from
'antd'
;
import
{
getCatalogueTreeData
}
from
"@/pages/FlinkSqlStudio/service"
;
import
{
getCatalogueTreeData
}
from
"@/pages/FlinkSqlStudio/service"
;
import
{
convertToTreeData
,
DataType
,
TreeDataNode
}
from
"@/components/Studio/StudioTree/Function"
;
import
{
convertToTreeData
,
DataType
,
TreeDataNode
}
from
"@/components/Studio/StudioTree/Function"
;
import
style
from
"./index.less"
;
const
{
DirectoryTree
}
=
Tree
;
const
{
Search
}
=
Input
;
const
{
Search
}
=
Input
;
type
StudioTreeProps
=
{};
type
StudioTreeProps
=
{};
/*const treeData = [
type
RightClickMenu
=
{
{
pageX
:
number
,
title: 'parent 1',
pageY
:
number
,
key: '0-0',
id
:
number
,
icon: <SmileOutlined />,
categoryName
:
string
children: [
};
{
title: 'leaf',
const
getParentKey
=
(
key
,
tree
)
=>
{
key: '0-0-0',
let
parentKey
;
icon: <MehOutlined />,
for
(
let
i
=
0
;
i
<
tree
.
length
;
i
++
)
{
},
const
node
=
tree
[
i
];
{
if
(
node
.
children
)
{
title: 'leaf',
if
(
node
.
children
.
some
(
item
=>
item
.
key
===
key
))
{
key: '0-0-1',
parentKey
=
node
.
key
;
icon: ({ selected }) => (selected ? <FrownFilled /> : <FrownOutlined />),
}
else
if
(
getParentKey
(
key
,
node
.
children
))
{
},
parentKey
=
getParentKey
(
key
,
node
.
children
);
],
}
},
}
];*/
}
return
parentKey
;
};
const
StudioTree
:
React
.
FC
<
StudioTreeProps
>
=
(
props
)
=>
{
const
StudioTree
:
React
.
FC
<
StudioTreeProps
>
=
(
props
)
=>
{
// state = {
// expandedKeys: [],
// searchValue: '',
// autoExpandParent: true,
// };
const
[
treeData
,
setTreeData
]
=
useState
<
TreeDataNode
[]
>
();
const
[
treeData
,
setTreeData
]
=
useState
<
TreeDataNode
[]
>
();
const
[
dataList
,
setDataList
]
=
useState
<
[]
>
();
const
[
rightClickNodeTreeItem
,
setRightClickNodeTreeItem
]
=
useState
<
RightClickMenu
>
();
// const [searchValue,setSearchValue] = useState<string>();
// const [expandedKeys,setExpandedKeys] = useState<any>();
// const [autoExpandParent,setAutoExpandParent] = useState<boolean>(true);
/*const loop = data =>
data.map(item => {
const index = item.title.indexOf(searchValue);
const beforeStr = item.title.substr(0, index);
const afterStr = item.title.substr(index + searchValue.length);
const title =
index > -1 ? (
<span>
{beforeStr}
<span className="site-tree-search-value">{searchValue}</span>
{afterStr}
</span>
) : (
<span>{item.title}</span>
);
if (item.children) {
return { title, key: item.key, children: loop(item.children) };
}
return {
title,
key: item.key,
};
});*/
const
getTreeData
=
async
()
=>
{
const
getTreeData
=
async
()
=>
{
const
result
=
await
getCatalogueTreeData
();
const
result
=
await
getCatalogueTreeData
();
let
data
=
result
.
datas
;
let
data
=
result
.
datas
;
let
list
=
data
;
for
(
let
i
=
0
;
i
<
list
.
length
;
i
++
){
list
[
i
].
title
=
list
[
i
].
name
;
list
[
i
].
key
=
list
[
i
].
id
;
list
[
i
].
isLeaf
=!
list
[
i
].
isDir
;
}
setDataList
(
list
);
data
=
convertToTreeData
(
data
,
0
);
data
=
convertToTreeData
(
data
,
0
);
setTreeData
(
data
);
setTreeData
(
data
);
};
};
...
@@ -49,33 +87,84 @@ const StudioTree: React.FC<StudioTreeProps> = (props) => {
...
@@ -49,33 +87,84 @@ const StudioTree: React.FC<StudioTreeProps> = (props) => {
getTreeData
();
getTreeData
();
},
[]);
},
[]);
const
onExpand
=
()
=>
{
/*const onExpand = () => {
// setState({
setExpandedKeys(expandedKeys);
// expandedKeys,
console.log(autoExpandParent);
// autoExpandParent: false,
setAutoExpandParent(!autoExpandParent);
// })
};*/
const
onChange
=
(
e
:
any
)
=>
{
/*const { value } = e.target;
const expandedKeys = dataList
.map(item => {
if (item.title.indexOf(value) > -1) {
return getParentKey(item.key, treeData);
}
return null;
})
.filter((item, i, self) => item && self.indexOf(item) === i);
setSearchValue(value);
setExpandedKeys(expandedKeys);
setAutoExpandParent(true);*/
};
const
handleMenuClick
=
()
=>
{
setRightClickNodeTreeItem
(
null
);
};
};
const
onChange
=
()
=>
{
const
getNodeTreeRightClickMenu
=
()
=>
{
const
{
pageX
,
pageY
}
=
{...
rightClickNodeTreeItem
};
const
tmpStyle
=
{
position
:
'absolute'
,
left
:
`
${
pageX
-
50
}
px`
,
top
:
`
${
pageY
-
202
}
px`
};
const
menu
=
(
<
Menu
onClick=
{
handleMenuClick
}
style=
{
tmpStyle
}
className=
{
style
.
right_click_menu
}
>
<
Menu
.
Item
key=
'1'
>
{
'创建目录'
}
</
Menu
.
Item
>
<
Menu
.
Item
key=
'2'
>
{
'创建作业'
}
</
Menu
.
Item
>
<
Menu
.
Item
key=
'4'
>
{
'修改'
}
</
Menu
.
Item
>
<
Menu
.
Item
key=
'3'
>
{
'删除'
}
</
Menu
.
Item
>
</
Menu
>
);
return
(
rightClickNodeTreeItem
==
null
)
?
''
:
menu
;
};
const
onRightClick
=
(
e
:
any
)
=>
{
setRightClickNodeTreeItem
({
pageX
:
e
.
event
.
pageX
,
pageY
:
e
.
event
.
pageY
,
id
:
e
.
node
.
id
,
categoryName
:
e
.
node
.
name
});
};
};
const
onSelect
=
(
e
:
any
)
=>
{
setRightClickNodeTreeItem
(
null
);
// setAutoExpandParent(!autoExpandParent);
};
return
(
return
(
<
div
>
<
div
className=
{
style
.
tree_div
}
>
<
Search
style=
{
{
marginBottom
:
8
}
}
placeholder=
"Search"
onChange=
{
onChange
}
/>
<
Search
style=
{
{
marginBottom
:
8
}
}
placeholder=
"Search"
onChange=
{
onChange
}
/>
<
Tree
<
DirectoryTree
onExpand=
{
onExpand
}
/*onExpand={onExpand}
// expandedKeys={expandedKeys}
expandedKeys={expandedKeys}
// autoExpandParent={autoExpandParent}
autoExpandParent={autoExpandParent}*/
showIcon
// showIcon
showLine
// showLine
//defaultExpandAll
multiple
onRightClick=
{
onRightClick
}
onSelect=
{
onSelect
}
// defaultExpandAll
switcherIcon=
{
<
DownOutlined
/>
}
switcherIcon=
{
<
DownOutlined
/>
}
treeData=
{
treeData
}
treeData=
{
treeData
}
// treeData={treeData()}
/>
/>
{
getNodeTreeRightClickMenu
()
}
</
div
>
</
div
>
);
);
};
};
...
...
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