From dd9838a16f83957a543b44fec80288eb5c427d71 Mon Sep 17 00:00:00 2001 From: BianLzhaoMin <11485688+bianliangzhaomin123@user.noreply.gitee.com> Date: Tue, 3 Feb 2026 15:09:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BB=E9=A2=98=E8=89=B2=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/styles/index.scss | 1 + src/assets/styles/variables.module.scss | 139 ++++++++-- src/layout/components/AppMain.vue | 24 ++ src/layout/components/Navbar.vue | 334 +++++++++++++++++++++--- src/store/modules/settings.js | 10 +- src/utils/themeTransition.js | 175 +++++++++++++ 6 files changed, 624 insertions(+), 59 deletions(-) create mode 100644 src/utils/themeTransition.js diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss index 87898e6..3027045 100644 --- a/src/assets/styles/index.scss +++ b/src/assets/styles/index.scss @@ -123,6 +123,7 @@ aside { //main-container全局样式 .app-container { padding: 20px; + transition: background-color 0.3s ease; } .components-container { diff --git a/src/assets/styles/variables.module.scss b/src/assets/styles/variables.module.scss index 4579b69..a884595 100644 --- a/src/assets/styles/variables.module.scss +++ b/src/assets/styles/variables.module.scss @@ -89,49 +89,74 @@ $--color-info: #909399; // 暗黑模式变量 html.dark { - /* 默认通用 */ - --el-bg-color: #141414; - --el-bg-color-overlay: #1d1e1f; - --el-text-color-primary: #ffffff; - --el-text-color-regular: #d0d0d0; - --el-border-color: #434343; - --el-border-color-light: #434343; + /* 默认通用 - 优化为更舒适的深色背景 */ + --el-bg-color: #0f1419; + --el-bg-color-overlay: #1a1f24; + --el-text-color-primary: #e4e7ed; + --el-text-color-regular: #b3b9c4; + --el-border-color: #2d3339; + --el-border-color-light: #252a2f; + + /* 主体内容区域背景 */ + --main-bg-color: #0f1419; + --content-bg-color: #151a20; /* 侧边栏 */ - --sidebar-bg: #141414; - --sidebar-text: #ffffff; - --menu-hover: #2d2d2d; + --sidebar-bg: #0f1419; + --sidebar-text: #e4e7ed; + --menu-hover: #1f2529; --menu-active-text: #{$menuActiveText}; /* 顶部导航栏 */ - --navbar-bg: #141414; - --navbar-text: #ffffff; - --navbar-hover: #141414; + --navbar-bg: #0f1419; + --navbar-text: #e4e7ed; + --navbar-hover: #1a1f24; + --navbar-border: #252a2f; /* 标签栏 */ - --tags-bg: #141414; - --tags-item-bg: #1d1e1f; - --tags-item-border: #303030; - --tags-item-text: #d0d0d0; - --tags-item-hover: #2d2d2d; - --tags-close-hover: #64666a; + --tags-bg: #0f1419; + --tags-item-bg: #1a1f24; + --tags-item-border: #252a2f; + --tags-item-text: #b3b9c4; + --tags-item-hover: #1f2529; + --tags-close-hover: #4a5568; /* splitpanes 组件暗黑模式变量 */ - --splitpanes-bg: #141414; - --splitpanes-border: #303030; - --splitpanes-splitter-bg: #1d1e1f; - --splitpanes-splitter-hover-bg: #2d2d2d; + --splitpanes-bg: #0f1419; + --splitpanes-border: #252a2f; + --splitpanes-splitter-bg: #1a1f24; + --splitpanes-splitter-hover-bg: #1f2529; /* blockquote 暗黑模式变量 */ - --blockquote-bg: #1d1e1f; - --blockquote-border: #303030; - --blockquote-text: #d0d0d0; + --blockquote-bg: #1a1f24; + --blockquote-border: #252a2f; + --blockquote-text: #b3b9c4; /* Cron 时间表达式 模式变量 */ - --cron-border: #303030; + --cron-border: #252a2f; /* splitpanes default-theme 暗黑模式变量 */ - --splitpanes-default-bg: #141414; + --splitpanes-default-bg: #0f1419; + + /* 搜索框暗黑模式变量 */ + --search-bg: #1a1f24; + --search-border: #252a2f; + --search-text: #e4e7ed; + --search-placeholder: #6b7280; + --search-hover-bg: #1f2529; + --search-suffix-bg: #252a2f; + + /* 下拉菜单暗黑模式变量 */ + --dropdown-bg: #1a1f24; + --dropdown-border: #252a2f; + --dropdown-item-hover: #1f2529; + --dropdown-divider: #252a2f; + + /* 主体内容区域 */ + --main-bg-color: #0f1419; + --content-bg-color: #151a20; + --card-bg-color: #1a1f24; + --card-border-color: #252a2f; /* 侧边栏菜单覆盖 */ .sidebar-container { @@ -224,5 +249,63 @@ html.dark { background: var(--cron-border); } + /* 主体内容区域样式覆盖 */ + .app-main { + background-color: var(--main-bg-color) !important; + } + + .app-container { + background-color: var(--content-bg-color); + color: var(--el-text-color-primary); + } + + .components-container { + background-color: var(--content-bg-color); + color: var(--el-text-color-primary); + } + + /* 卡片样式夜间模式 */ + .el-card { + background-color: var(--card-bg-color) !important; + border-color: var(--card-border-color) !important; + color: var(--el-text-color-primary) !important; + } + + /* 面包屑导航夜间模式 */ + .el-breadcrumb { + .el-breadcrumb__inner { + color: var(--el-text-color-regular) !important; + + &.is-link { + color: var(--el-text-color-regular) !important; + + &:hover { + color: var(--el-color-primary) !important; + } + } + } + } + + /* 侧边栏菜单项夜间模式优化 */ + .sidebar-container { + .el-menu-item, + .el-sub-menu__title { + &:hover { + background-color: rgba(0, 168, 98, 0.12) !important; + } + } + + .el-menu-item.is-active { + background-color: rgba(0, 168, 98, 0.18) !important; + } + } + + /* 导航栏汉堡菜单夜间模式 */ + .hamburger-container { + &:hover { + background: rgba(255, 255, 255, 0.05) !important; + } + } + } diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue index d6b95c6..e473c8e 100644 --- a/src/layout/components/AppMain.vue +++ b/src/layout/components/AppMain.vue @@ -42,6 +42,8 @@ function addIframe() { width: 100%; position: relative; overflow: hidden; + background-color: var(--main-bg-color, #ffffff); + transition: background-color 0.3s ease; } .fixed-header + .app-main { @@ -81,10 +83,32 @@ function addIframe() { ::-webkit-scrollbar-track { background-color: #f1f1f1; + transition: background-color 0.3s ease; } ::-webkit-scrollbar-thumb { background-color: #c0c0c0; border-radius: 3px; + transition: background-color 0.3s ease; + + &:hover { + background-color: #a0a0a0; + } +} + +// 夜间模式滚动条样式 +html.dark { + ::-webkit-scrollbar-track { + background-color: var(--el-bg-color, #0f1419); + } + + ::-webkit-scrollbar-thumb { + background-color: #4a5568; + border-radius: 3px; + + &:hover { + background-color: #5a6578; + } + } } diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue index 9fb87ef..d45b59a 100644 --- a/src/layout/components/Navbar.vue +++ b/src/layout/components/Navbar.vue @@ -20,7 +20,8 @@ style="width: 130px" placeholder="搜索" class="search-input" - @keydown.ctrl.k="handleSearch" + readonly + @click="handleSearch" > - - - - - - - - - - - - + +
+ + + + +
+
+
+ + + +
+
+ + + +