From 71ac33be7006aa51683a03f0e6efec4534315cc4 Mon Sep 17 00:00:00 2001 From: qinzhenpen Date: Wed, 14 Oct 2026 16:35:27 +0800 Subject: [PATCH] style: synchronize sidebar toggle behavior and improve menu visibility - Updated sidebar styles to ensure the collapse toggle remains visible across all student and teacher roles, removing conditional rendering. - Enhanced specificity of styles to synchronize the toggle arrow and menu visibility with the sidebar's expanded/collapsed state. - Added logic to force the menu to display correctly when the sidebar is expanded, addressing previous inconsistencies. --- src/assets/styles/sidebar.scss | 41 +++++++++++++++++++++++++ src/layout/components/Sidebar/index.vue | 13 ++++---- src/views/student/index.vue | 7 +++++ tests/teacher-sidebar-collapse.test.mjs | 40 +++++++++++++++++++++--- 4 files changed, 89 insertions(+), 12 deletions(-) diff --git a/src/assets/styles/sidebar.scss b/src/assets/styles/sidebar.scss index c4bc00d..b293d44 100644 --- a/src/assets/styles/sidebar.scss +++ b/src/assets/styles/sidebar.scss @@ -1006,6 +1006,47 @@ } } +/* + * 折叠把手的箭头再挂一条 .hideSidebar 链 + * + * 侧栏宽度由 .app-wrapper 上的 .hideSidebar 控制,而箭头此前只由 + * .sidebar-container 上的 .is-collapse 控制 —— 两者本该同源,却走了 + * 两条独立的 class 链。一旦失步就会出现「宽度已切、箭头不动」的现象。 + * 这里把箭头也绑到控制宽度的同一个 class 上,二者再也无法不同步。 + * 特异性 (1,4,0) 与基础隐藏规则相同,靠书写顺序在后面取胜。 + */ +#app .hideSidebar .sidebar-container .course-sidebar-toggle { + .toggle-arrow--left { + display: none; + } + .toggle-arrow--right { + display: inline-flex; + } +} + +/* + * 兜底:展开态下不允许 el-menu 停留在折叠外观 + * + * 菜单文字的显隐由 Element Plus 内部的 .el-menu--collapse 决定,它只跟随 + * 这个 prop。若该 prop 与外层状态不同步(失步的根因), + * 就会出现「侧栏已展开,菜单却仍是 64px 图标轨道、文字不显示」。 + * 这里以控制宽度的 .hideSidebar 为准做强制纠正:只要侧栏处于展开态, + * 即便 el-menu 仍带着 .el-menu--collapse,也要撑满并恢复文字。 + * 特异性 (1,5,0)+ ,足以压过 Element Plus 自身的隐藏规则。 + */ +#app .app-wrapper:not(.hideSidebar) .sidebar-container .student-course-menu.el-menu--collapse { + width: 100% !important; + + > .el-menu-item > span, + > .el-sub-menu > .el-sub-menu__title > span { + height: auto; + width: auto; + overflow: visible; + visibility: visible; + display: inline-block; + } +} + /* * 教师端 sidebar 宽度单独缩减 50%(304 → 152px) * 教师端使用 el-menu 直显式布局,无需学生端的内嵌卡片空间,原 304px 造成大量空白 diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue index 45e4ea5..cbb635a 100644 --- a/src/layout/components/Sidebar/index.vue +++ b/src/layout/components/Sidebar/index.vue @@ -10,14 +10,16 @@