Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-bi
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-bi
Commits
1dd30bce
提交
1dd30bce
authored
3月 12, 2025
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: update
上级
3cd06846
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
32 行增加
和
3 行删除
+32
-3
DataLayout.tsx
src/components/layout/DataLayout.tsx
+32
-3
没有找到文件。
src/components/layout/DataLayout.tsx
浏览文件 @
1dd30bce
import
{
useState
}
from
'react'
import
{
useState
,
useEffect
,
useMemo
}
from
'react'
import
{
Outlet
,
NavLink
,
useLocation
}
from
'react-router'
import
{
CircleArrowRight
,
...
...
@@ -26,6 +26,7 @@ type MenuItem = Required<MenuProps>['items'][number]
export
default
function
DataLayout
()
{
const
[
collapsed
,
setCollapsed
]
=
useState
(
false
)
const
[
openKeys
,
setOpenKeys
]
=
useState
<
string
[]
>
([])
const
toggleCollapsed
=
()
=>
{
setCollapsed
(
!
collapsed
)
...
...
@@ -34,7 +35,8 @@ export default function DataLayout() {
const
location
=
useLocation
()
const
selectedKeys
=
[
location
.
pathname
]
const
menus
:
MyMenuItem
[]
=
[
const
menus
:
MyMenuItem
[]
=
useMemo
(()
=>
{
return
[
{
icon
:
<
Database
/>,
name
:
'数据采集'
,
...
...
@@ -136,6 +138,26 @@ export default function DataLayout() {
path
:
'/data/screen'
,
},
]
},
[])
useEffect
(()
=>
{
// 根据当前路径计算需要展开的菜单项
const
calculateOpenKeys
=
(
menus
:
MyMenuItem
[]):
string
[]
=>
{
for
(
const
menu
of
menus
)
{
if
(
menu
.
children
)
{
if
(
menu
.
children
.
some
((
child
)
=>
child
.
path
===
location
.
pathname
))
{
return
[
menu
.
path
]
}
const
result
=
calculateOpenKeys
(
menu
.
children
)
if
(
result
.
length
>
0
)
{
return
[
menu
.
path
,
...
result
]
}
}
}
return
[]
}
setOpenKeys
(
calculateOpenKeys
(
menus
))
},
[
location
.
pathname
,
menus
])
const
menusToMenuItems
=
(
menus
:
MyMenuItem
[]):
MenuItem
[]
=>
{
return
menus
.
map
((
item
)
=>
{
...
...
@@ -165,7 +187,14 @@ export default function DataLayout() {
<
span
onClick=
{
toggleCollapsed
}
>
{
collapsed
?
<
CircleArrowRight
/>
:
<
CircleArrowLeft
/>
}
</
span
>
</
div
>
<
div
className=
"data-layout-sidebar-nav"
>
<
Menu
items=
{
items
}
mode=
"inline"
inlineCollapsed=
{
collapsed
}
selectedKeys=
{
selectedKeys
}
/>
<
Menu
items=
{
items
}
mode=
"inline"
inlineCollapsed=
{
collapsed
}
selectedKeys=
{
selectedKeys
}
openKeys=
{
openKeys
}
onOpenChange=
{
setOpenKeys
}
/>
</
div
>
</
div
>
<
div
className=
"data-layout-container"
>
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论