refactor: 个人中心页面重构和布局代码优化

This commit is contained in:
Ray.Hao
2026-06-21 14:09:27 +08:00
parent 7ffcf8820e
commit 845d117f08
68 changed files with 4026 additions and 3418 deletions

View File

@@ -11,5 +11,5 @@
@use "./vendors";
// 3. 布局与页面层
@use "./menu";
@use "./layout";
@use "./page";

155
src/styles/layout.scss Normal file
View File

@@ -0,0 +1,155 @@
@use "./variables" as *;
/* stylelint-disable no-descending-specificity */
.layout-root,
.el-menu--popup {
.el-menu-item,
.el-sub-menu__title {
.layout-menu-icon {
display: inline-flex;
flex-shrink: 0;
align-items: center;
justify-content: center;
width: 18px !important;
min-width: 18px !important;
height: 18px !important;
margin-right: 0 !important;
font-size: 18px;
line-height: 18px;
color: currentcolor !important;
}
.layout-menu-icon--element {
background-color: transparent !important;
}
.layout-menu-icon--svg {
color: currentcolor !important;
background-color: currentcolor !important;
}
}
.el-sub-menu.has-active-child > .el-sub-menu__title {
color: var(--el-color-primary) !important;
background-color: var(--el-color-primary-light-9) !important;
.menu-icon {
color: var(--el-color-primary) !important;
}
}
}
.layout-root {
&.layout--mix .layout-sidebar .el-menu {
.el-menu-item:hover,
.el-sub-menu__title:hover {
background-color: var(--el-fill-color-light) !important;
}
}
&.layout--top .layout-header__left .el-menu--horizontal,
&.layout--mix .layout-header__menu .el-menu--horizontal {
display: flex;
flex: 1 1 0% !important;
align-items: center;
width: 100% !important;
min-width: 0 !important;
overflow: hidden;
}
.el-menu--collapse {
width: $sidebar-width-collapsed;
.el-menu-item,
.el-sub-menu > .el-sub-menu__title {
.layout-menu-icon {
width: 18px !important;
min-width: 18px !important;
height: 18px !important;
font-size: 18px !important;
}
> span:not(.layout-menu-icon):not(.el-icon) {
display: inline-block;
visibility: hidden;
width: 0;
height: 0;
overflow: hidden;
}
}
}
&.is-sidebar-collapsed {
.layout-menu-icon {
width: 18px !important;
min-width: 18px !important;
height: 18px !important;
font-size: 18px !important;
}
.submenu-title-noDropdown {
position: relative;
& > span {
display: inline-block;
visibility: hidden;
width: 0;
height: 0;
overflow: hidden;
}
}
.el-sub-menu {
overflow: hidden;
& > .el-sub-menu__title {
.el-sub-menu__icon-arrow {
display: none;
}
}
}
&.layout--left .layout-sidebar .el-menu,
&.layout--top .layout-header .el-menu--horizontal,
&.layout--mix .layout-header .el-menu--horizontal,
&.layout--mix .layout-sidebar .el-menu {
.el-menu-item,
.el-sub-menu__title {
.menu-title,
span:not(.layout-menu-icon):not(.el-icon) {
display: none !important;
}
}
}
}
}
html.dark .layout-root,
html.sidebar-color-blue .layout-root,
html.dark .el-menu--popup,
html.sidebar-color-blue .el-menu--popup {
.el-menu-item:hover,
.el-sub-menu__title:hover {
background-color: var(--menu-hover) !important;
}
.el-sub-menu.has-active-child > .el-sub-menu__title {
color: var(--menu-active-text) !important;
background-color: var(--menu-active-bg) !important;
.menu-icon {
color: var(--menu-active-text) !important;
}
}
}
html.dark .layout-root.layout--mix .layout-sidebar .el-menu,
html.sidebar-color-blue .layout-root.layout--mix .layout-sidebar .el-menu {
.el-menu-item.is-active,
.el-sub-menu.is-active > .el-sub-menu__title,
.el-sub-menu.has-active-child > .el-sub-menu__title {
color: var(--menu-active-text) !important;
background-color: var(--menu-active-bg) !important;
}
}
/* stylelint-enable no-descending-specificity */

View File

@@ -1,62 +0,0 @@
/**
* 菜单交互样式
*/
// 混合布局左侧菜单 hover
.layout-mix .layout__sidebar--left .el-menu {
.el-menu-item:hover,
.el-sub-menu__title:hover {
background-color: var(--el-fill-color-light) !important;
}
}
// 深色或深蓝侧边栏的 hover
html.dark .layout-mix .layout__sidebar--left .el-menu,
html.sidebar-color-blue .layout-mix .layout__sidebar--left .el-menu {
.el-menu-item:hover,
.el-sub-menu__title:hover {
background-color: var(--menu-hover) !important;
}
.el-menu-item.is-active,
.el-sub-menu.is-active > .el-sub-menu__title,
.el-sub-menu.has-active-child > .el-sub-menu__title {
color: var(--menu-active-text) !important;
background-color: var(--menu-active-bg) !important;
}
}
// 顶部布局菜单填充空间
.layout-top .layout__header-left .el-menu--horizontal,
.layout-mix .layout__header-menu .el-menu--horizontal {
display: flex;
flex: 1 1 0% !important;
align-items: center;
width: 100% !important;
min-width: 0 !important;
overflow: hidden;
}
// 窄屏隐藏菜单文字,仅保留图标
.hideSidebar {
&.layout-top .layout__header .el-menu--horizontal,
&.layout-mix .layout__header .el-menu--horizontal {
.el-menu-item,
.el-sub-menu__title {
.menu-title,
span:not([class*="i-svg"]):not(.el-icon) {
display: none !important;
}
}
}
&.layout-mix .layout__sidebar--left .el-menu {
.el-menu-item,
.el-sub-menu__title {
.menu-title,
span:not([class*="i-svg"]):not(.el-icon) {
display: none !important;
}
}
}
}

View File

@@ -12,6 +12,97 @@
background: var(--page-bg);
}
.page-container--split {
flex-direction: row;
overflow: hidden;
--page-aside-width: 224px;
}
.page-aside {
position: relative;
display: flex;
flex: 0 0 var(--page-aside-width);
flex-direction: column;
width: var(--page-aside-width);
min-width: 0;
min-height: 0;
overflow: visible;
background: var(--content-bg);
border: 1px solid var(--card-border);
border-radius: var(--card-radius);
box-shadow: var(--card-shadow);
transition:
flex-basis 0.2s,
width 0.2s,
margin-right 0.2s,
border-color 0.2s;
&.is-collapsed {
flex-basis: 0;
width: 0;
margin-right: calc(var(--page-gap) * -1);
border-color: transparent;
box-shadow: none;
.page-aside__inner {
pointer-events: none;
opacity: 0;
}
.page-aside__toggle {
right: -18px;
border-left: 0;
border-radius: 0 6px 6px 0;
}
}
}
.page-aside__inner {
height: 100%;
min-height: 0;
overflow: hidden;
transition: opacity 0.15s;
}
.page-aside__toggle {
position: absolute;
top: 50%;
right: -10px;
z-index: 2;
display: flex;
align-items: center;
justify-content: center;
width: 18px;
height: 48px;
padding: 0;
margin: 0;
font: inherit;
color: var(--el-text-color-secondary);
cursor: pointer;
background: var(--content-bg);
border: 1px solid var(--card-border);
border-radius: 10px;
box-shadow: 0 4px 12px rgb(15 23 42 / 8%);
transform: translateY(-50%);
transition:
color 0.15s,
right 0.2s;
&:hover {
color: var(--el-color-primary);
}
}
.page-main {
display: flex;
flex: 1 1 0;
flex-direction: column;
gap: var(--page-gap);
min-width: 0;
min-height: 0;
overflow: hidden;
}
.page-search {
flex-shrink: 0;