Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
center-book
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
center-book
Commits
d32120dc
提交
d32120dc
authored
8月 12, 2026
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 优化侧边栏布局,添加侧边栏状态存储和悬停效果
上级
1710568d
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
61 行增加
和
36 行删除
+61
-36
index.jsx
apps/admin/src/components/layout/index.jsx
+46
-36
index.less
apps/admin/src/components/layout/index.less
+15
-0
没有找到文件。
apps/admin/src/components/layout/index.jsx
浏览文件 @
d32120dc
...
...
@@ -53,6 +53,7 @@ import logo from '@/assets/images/logo.png'
import
{
getMenuList
,
checkSSOLogin
}
from
'@/api/base'
const
{
Header
,
Content
,
Sider
}
=
Layout
const
SIDER_COLLAPSED_STORAGE_KEY
=
'kiwi.admin.sider.collapsed'
function
getMenuIcon
(
item
,
hasChildren
)
{
const
name
=
item
.
name
||
''
...
...
@@ -173,7 +174,11 @@ export default function AppLayout() {
const
{
pathname
}
=
useLocation
()
const
navigate
=
useNavigate
()
const
[
menuList
,
setMenuList
]
=
useState
([])
const
[
collapsed
,
setCollapsed
]
=
useState
(
false
)
const
[
collapsed
,
setCollapsed
]
=
useState
(
()
=>
localStorage
.
getItem
(
SIDER_COLLAPSED_STORAGE_KEY
)
!==
'false'
,
)
const
[
siderHovered
,
setSiderHovered
]
=
useState
(
false
)
const
siderCollapsed
=
collapsed
&&
!
siderHovered
const
headerOverride
=
pageHeaderOverrides
[
pathname
]
const
pageTitle
=
headerOverride
?.
title
||
getCurrentMenuTitle
(
menuList
,
pathname
)
...
...
@@ -208,10 +213,6 @@ export default function AppLayout() {
})()
},
[])
useEffect
(()
=>
{
if
(
menuList
.
length
)
setCollapsed
(
menuList
.
length
<
3
)
},
[
menuList
.
length
])
useEffect
(()
=>
{
if
(
pathname
!==
'/books/management'
||
!
menuList
.
length
||
hasMenuPath
(
menuList
,
pathname
))
{
return
...
...
@@ -226,37 +227,46 @@ export default function AppLayout() {
return
(
<
Layout
className=
'layout-container'
>
<
EditorIconSprite
/>
<
Sider
className=
'layout-sider'
width=
{
240
}
collapsedWidth=
{
64
}
collapsed=
{
collapsed
}
theme=
'light'
trigger=
{
null
}
>
<
div
className=
'layout-brand'
>
<
Link
className=
'layout-brand__logo'
to=
'/'
aria
-
label=
'返回工作台首页'
>
<
img
src=
{
logo
}
alt=
'清控紫荆数智学堂'
/>
</
Link
>
</
div
>
<
div
className=
'layout-sider__body'
>
<
Menu
menuList=
{
menuList
}
collapsed=
{
collapsed
}
></
Menu
>
</
div
>
<
Tooltip
title=
{
collapsed
?
'展开侧边菜单'
:
'收起侧边菜单'
}
placement=
'right'
>
<
Button
className=
'layout-sider-toggle'
type=
'text'
onClick=
{
()
=>
setCollapsed
((
value
)
=>
!
value
)
}
aria
-
label=
{
collapsed
?
'展开侧边菜单'
:
'收起侧边菜单'
}
>
{
collapsed
?
(
<
RiMenuUnfoldLine
aria
-
hidden=
'true'
/>
)
:
(
<
RiMenuFoldLine
aria
-
hidden=
'true'
/>
)
}
</
Button
>
</
Tooltip
>
</
Sider
>
<
div
className=
{
`layout-sider-slot${collapsed ? ' layout-sider-slot--collapsed' : ''}`
}
>
<
Sider
className=
'layout-sider'
width=
{
240
}
collapsedWidth=
{
64
}
collapsed=
{
siderCollapsed
}
theme=
'light'
trigger=
{
null
}
onMouseEnter=
{
()
=>
setSiderHovered
(
true
)
}
onMouseLeave=
{
()
=>
setSiderHovered
(
false
)
}
>
<
div
className=
'layout-brand'
>
<
Link
className=
'layout-brand__logo'
to=
'/'
aria
-
label=
'返回工作台首页'
>
<
img
src=
{
logo
}
alt=
'清控紫荆数智学堂'
/>
</
Link
>
</
div
>
<
div
className=
'layout-sider__body'
>
<
Menu
menuList=
{
menuList
}
collapsed=
{
siderCollapsed
}
></
Menu
>
</
div
>
<
Tooltip
title=
{
collapsed
?
'固定展开侧边菜单'
:
'收起侧边菜单'
}
placement=
'right'
>
<
Button
className=
'layout-sider-toggle'
type=
'text'
onClick=
{
()
=>
setCollapsed
((
value
)
=>
{
localStorage
.
setItem
(
SIDER_COLLAPSED_STORAGE_KEY
,
String
(
!
value
))
return
!
value
})
}
aria
-
label=
{
collapsed
?
'固定展开侧边菜单'
:
'收起侧边菜单'
}
>
{
collapsed
?
(
<
RiMenuUnfoldLine
aria
-
hidden=
'true'
/>
)
:
(
<
RiMenuFoldLine
aria
-
hidden=
'true'
/>
)
}
</
Button
>
</
Tooltip
>
</
Sider
>
</
div
>
<
Layout
className=
'layout-main'
>
<
Header
className=
'layout-header'
>
<
div
className=
'layout-page-header'
>
...
...
apps/admin/src/components/layout/index.less
浏览文件 @
d32120dc
...
...
@@ -5,6 +5,21 @@
background: #fff;
}
.layout-sider-slot {
flex: 0 0 240px;
width: 240px;
height: 100vh;
}
.layout-sider-slot--collapsed {
flex-basis: 64px;
width: 64px;
.layout-sider:not(.ant-layout-sider-collapsed) {
z-index: 102;
}
}
.layout-sider {
position: sticky !important;
top: 0;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论