update README.md
This commit is contained in:
@@ -28,7 +28,7 @@ RuoYi-Vue 前端项目的三个主要演进版本,方便你直观对比其技
|
|||||||
| **状态管理** | Vuex | Pinia | Pinia |
|
| **状态管理** | Vuex | Pinia | Pinia |
|
||||||
| **路由管理** | Vue Router 3 | Vue Router 4 | Vue Router 4 |
|
| **路由管理** | Vue Router 3 | Vue Router 4 | Vue Router 4 |
|
||||||
| **核心特点** | 1. 技术栈经典稳定<br>2. 社区资料丰富<br>3. 当前维护重心已转移 | 1. 现代前端技术栈<br>2. 开发体验与性能更优<br>3. 官方主推的活跃版本 | 1. 类型加持,减少沟通成本<br>2. 开发时有提示,效率更高<br>3. 多人协作企业级开发项目 |
|
| **核心特点** | 1. 技术栈经典稳定<br>2. 社区资料丰富<br>3. 当前维护重心已转移 | 1. 现代前端技术栈<br>2. 开发体验与性能更优<br>3. 官方主推的活跃版本 | 1. 类型加持,减少沟通成本<br>2. 开发时有提示,效率更高<br>3. 多人协作企业级开发项目 |
|
||||||
| **仓库地址** | [RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue) | [RuoYi-Vue3](https://gitcode.com/yangzongzhuan/RuoYi-Vue3) | [RuoYi-Vue3-TypeScript](https://gitcode.com/yangzongzhuan/RuoYi-Vue3/tree/typescript) |
|
| **仓库地址** | [RuoYi-Vue2](https://gitcode.com/yangzongzhuan/RuoYi-Vue2) | [RuoYi-Vue3](https://gitcode.com/yangzongzhuan/RuoYi-Vue3) | [RuoYi-Vue3-TypeScript](https://gitcode.com/yangzongzhuan/RuoYi-Vue3/tree/typescript) |
|
||||||
|
|
||||||
## 前端运行
|
## 前端运行
|
||||||
|
|
||||||
|
|||||||
@@ -1,448 +1,448 @@
|
|||||||
// base color
|
// base color
|
||||||
$blue: #324157;
|
$blue: #324157;
|
||||||
$light-blue: #333c46;
|
$light-blue: #333c46;
|
||||||
$red: #C03639;
|
$red: #C03639;
|
||||||
$pink: #E65D6E;
|
$pink: #E65D6E;
|
||||||
$green: #30B08F;
|
$green: #30B08F;
|
||||||
$tiffany: #4AB7BD;
|
$tiffany: #4AB7BD;
|
||||||
$yellow: #FEC171;
|
$yellow: #FEC171;
|
||||||
$panGreen: #30B08F;
|
$panGreen: #30B08F;
|
||||||
|
|
||||||
// 默认主题变量
|
// 默认主题变量
|
||||||
$menuText: #bfcbd9;
|
$menuText: #bfcbd9;
|
||||||
$menuActiveText: #409eff;
|
$menuActiveText: #409eff;
|
||||||
$menuBg: #1a1f2e;
|
$menuBg: #1a1f2e;
|
||||||
$menuHover: #263445;
|
$menuHover: #263445;
|
||||||
|
|
||||||
// 浅色主题theme-light
|
// 浅色主题theme-light
|
||||||
$menuLightBg: #ffffff;
|
$menuLightBg: #ffffff;
|
||||||
$menuLightHover: #f0f1f5;
|
$menuLightHover: #f0f1f5;
|
||||||
$menuLightText: #303133;
|
$menuLightText: #303133;
|
||||||
$menuLightActiveText: #409EFF;
|
$menuLightActiveText: #409EFF;
|
||||||
|
|
||||||
// 基础变量
|
// 基础变量
|
||||||
$base-sidebar-width: 200px;
|
$base-sidebar-width: 200px;
|
||||||
$sideBarWidth: 200px;
|
$sideBarWidth: 200px;
|
||||||
|
|
||||||
// 菜单暗色变量
|
// 菜单暗色变量
|
||||||
$base-menu-color: rgba(255,255,255,.65);
|
$base-menu-color: rgba(255,255,255,.65);
|
||||||
$base-menu-color-active: #ffffff;
|
$base-menu-color-active: #ffffff;
|
||||||
$base-menu-background: #1a1f2e;
|
$base-menu-background: #1a1f2e;
|
||||||
$base-sub-menu-background: #141824;
|
$base-sub-menu-background: #141824;
|
||||||
$base-sub-menu-hover: rgba(255,255,255,.06);
|
$base-sub-menu-hover: rgba(255,255,255,.06);
|
||||||
|
|
||||||
// 组件变量
|
// 组件变量
|
||||||
$--color-primary: #409EFF;
|
$--color-primary: #409EFF;
|
||||||
$--color-success: #67C23A;
|
$--color-success: #67C23A;
|
||||||
$--color-warning: #E6A23C;
|
$--color-warning: #E6A23C;
|
||||||
$--color-danger: #F56C6C;
|
$--color-danger: #F56C6C;
|
||||||
$--color-info: #909399;
|
$--color-info: #909399;
|
||||||
|
|
||||||
:export {
|
:export {
|
||||||
menuText: $menuText;
|
menuText: $menuText;
|
||||||
menuActiveText: $menuActiveText;
|
menuActiveText: $menuActiveText;
|
||||||
menuBg: $menuBg;
|
menuBg: $menuBg;
|
||||||
menuHover: $menuHover;
|
menuHover: $menuHover;
|
||||||
menuLightBg: $menuLightBg;
|
menuLightBg: $menuLightBg;
|
||||||
menuLightHover: $menuLightHover;
|
menuLightHover: $menuLightHover;
|
||||||
menuLightText: $menuLightText;
|
menuLightText: $menuLightText;
|
||||||
menuLightActiveText: $menuLightActiveText;
|
menuLightActiveText: $menuLightActiveText;
|
||||||
sideBarWidth: $sideBarWidth;
|
sideBarWidth: $sideBarWidth;
|
||||||
// 导出基础颜色
|
// 导出基础颜色
|
||||||
blue: $blue;
|
blue: $blue;
|
||||||
lightBlue: $light-blue;
|
lightBlue: $light-blue;
|
||||||
red: $red;
|
red: $red;
|
||||||
pink: $pink;
|
pink: $pink;
|
||||||
green: $green;
|
green: $green;
|
||||||
tiffany: $tiffany;
|
tiffany: $tiffany;
|
||||||
yellow: $yellow;
|
yellow: $yellow;
|
||||||
panGreen: $panGreen;
|
panGreen: $panGreen;
|
||||||
// 导出组件颜色
|
// 导出组件颜色
|
||||||
colorPrimary: $--color-primary;
|
colorPrimary: $--color-primary;
|
||||||
colorSuccess: $--color-success;
|
colorSuccess: $--color-success;
|
||||||
colorWarning: $--color-warning;
|
colorWarning: $--color-warning;
|
||||||
colorDanger: $--color-danger;
|
colorDanger: $--color-danger;
|
||||||
colorInfo: $--color-info;
|
colorInfo: $--color-info;
|
||||||
}
|
}
|
||||||
|
|
||||||
// CSS变量定义
|
// CSS变量定义
|
||||||
:root {
|
:root {
|
||||||
/* 亮色模式变量 */
|
/* 亮色模式变量 */
|
||||||
--sidebar-bg: #{$menuBg};
|
--sidebar-bg: #{$menuBg};
|
||||||
--sidebar-text: #{$menuText};
|
--sidebar-text: #{$menuText};
|
||||||
--menu-hover: #{$menuHover};
|
--menu-hover: #{$menuHover};
|
||||||
|
|
||||||
--navbar-bg: #ffffff;
|
--navbar-bg: #ffffff;
|
||||||
--navbar-text: #303133;
|
--navbar-text: #303133;
|
||||||
|
|
||||||
/* splitpanes default-theme 变量 */
|
/* splitpanes default-theme 变量 */
|
||||||
--splitpanes-default-bg: #ffffff;
|
--splitpanes-default-bg: #ffffff;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 暗黑模式变量
|
// 暗黑模式变量
|
||||||
html.dark {
|
html.dark {
|
||||||
/* 默认通用 */
|
/* 默认通用 */
|
||||||
--el-bg-color: #141414;
|
--el-bg-color: #141414;
|
||||||
--el-bg-color-overlay: #1d1e1f;
|
--el-bg-color-overlay: #1d1e1f;
|
||||||
--el-text-color-primary: #ffffff;
|
--el-text-color-primary: #ffffff;
|
||||||
--el-text-color-regular: #d0d0d0;
|
--el-text-color-regular: #d0d0d0;
|
||||||
--el-border-color: #434343;
|
--el-border-color: #434343;
|
||||||
--el-border-color-light: #434343;
|
--el-border-color-light: #434343;
|
||||||
--el-menu-text-color: #d0d0d0;
|
--el-menu-text-color: #d0d0d0;
|
||||||
--sidebar-logo-text: #d0d0d0;
|
--sidebar-logo-text: #d0d0d0;
|
||||||
|
|
||||||
/* primary */
|
/* primary */
|
||||||
--primary-bg: #18212b;
|
--primary-bg: #18212b;
|
||||||
|
|
||||||
/* 侧边栏 */
|
/* 侧边栏 */
|
||||||
--sidebar-bg: #141414;
|
--sidebar-bg: #141414;
|
||||||
--sidebar-text: #ffffff;
|
--sidebar-text: #ffffff;
|
||||||
--menu-hover: #2d2d2d;
|
--menu-hover: #2d2d2d;
|
||||||
--menu-active-text: #{$menuActiveText};
|
--menu-active-text: #{$menuActiveText};
|
||||||
|
|
||||||
/* 顶部导航栏 */
|
/* 顶部导航栏 */
|
||||||
--navbar-bg: #141414;
|
--navbar-bg: #141414;
|
||||||
--navbar-text: #ffffff;
|
--navbar-text: #ffffff;
|
||||||
--navbar-hover: #141414;
|
--navbar-hover: #141414;
|
||||||
|
|
||||||
/* 标签栏 */
|
/* 标签栏 */
|
||||||
--tags-bg: #141414;
|
--tags-bg: #141414;
|
||||||
--tags-item-bg: #1d1e1f;
|
--tags-item-bg: #1d1e1f;
|
||||||
--tags-item-border: #303030;
|
--tags-item-border: #303030;
|
||||||
--tags-item-text: #d0d0d0;
|
--tags-item-text: #d0d0d0;
|
||||||
--tags-item-hover: #2d2d2d;
|
--tags-item-hover: #2d2d2d;
|
||||||
--tags-close-hover: #64666a;
|
--tags-close-hover: #64666a;
|
||||||
/* 卡片模式激活页签 */
|
/* 卡片模式激活页签 */
|
||||||
--tags-card-active-bg: var(--el-bg-color-overlay);
|
--tags-card-active-bg: var(--el-bg-color-overlay);
|
||||||
--tags-card-active-bg: color-mix(in srgb, var(--el-color-primary) 22%, var(--el-bg-color-overlay) 78%);
|
--tags-card-active-bg: color-mix(in srgb, var(--el-color-primary) 22%, var(--el-bg-color-overlay) 78%);
|
||||||
--tags-card-active-border: var(--tags-card-active-bg);
|
--tags-card-active-border: var(--tags-card-active-bg);
|
||||||
|
|
||||||
/* splitpanes 组件暗黑模式变量 */
|
/* splitpanes 组件暗黑模式变量 */
|
||||||
--splitpanes-bg: #141414;
|
--splitpanes-bg: #141414;
|
||||||
--splitpanes-border: #303030;
|
--splitpanes-border: #303030;
|
||||||
--splitpanes-splitter-bg: #1d1e1f;
|
--splitpanes-splitter-bg: #1d1e1f;
|
||||||
--splitpanes-splitter-hover-bg: #2d2d2d;
|
--splitpanes-splitter-hover-bg: #2d2d2d;
|
||||||
|
|
||||||
/* blockquote 暗黑模式变量 */
|
/* blockquote 暗黑模式变量 */
|
||||||
--blockquote-bg: #1d1e1f;
|
--blockquote-bg: #1d1e1f;
|
||||||
--blockquote-border: #303030;
|
--blockquote-border: #303030;
|
||||||
--blockquote-text: #d0d0d0;
|
--blockquote-text: #d0d0d0;
|
||||||
|
|
||||||
/* Cron 时间表达式 模式变量 */
|
/* Cron 时间表达式 模式变量 */
|
||||||
--cron-border: #303030;
|
--cron-border: #303030;
|
||||||
|
|
||||||
/* splitpanes default-theme 暗黑模式变量 */
|
/* splitpanes default-theme 暗黑模式变量 */
|
||||||
--splitpanes-default-bg: #141414;
|
--splitpanes-default-bg: #141414;
|
||||||
|
|
||||||
/* 侧边栏菜单覆盖 */
|
/* 侧边栏菜单覆盖 */
|
||||||
.sidebar-container {
|
.sidebar-container {
|
||||||
.el-menu-item:not(.is-active), .menu-title {
|
.el-menu-item:not(.is-active), .menu-title {
|
||||||
color: var(--el-text-color-regular);
|
color: var(--el-text-color-regular);
|
||||||
}
|
}
|
||||||
& .el-menu .theme-dark .nest-menu .el-sub-menu > .el-sub-menu__title,
|
& .el-menu .theme-dark .nest-menu .el-sub-menu > .el-sub-menu__title,
|
||||||
& .el-menu .theme-dark .el-sub-menu .el-menu-item,
|
& .el-menu .theme-dark .el-sub-menu .el-menu-item,
|
||||||
& .theme-dark .nest-menu .el-sub-menu > .el-sub-menu__title,
|
& .theme-dark .nest-menu .el-sub-menu > .el-sub-menu__title,
|
||||||
& .theme-dark .el-sub-menu .el-menu-item {
|
& .theme-dark .el-sub-menu .el-menu-item {
|
||||||
background-color: var(--el-bg-color) !important;
|
background-color: var(--el-bg-color) !important;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: var(--menu-hover) !important;
|
background-color: var(--menu-hover) !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&.theme-light {
|
&.theme-light {
|
||||||
border-right: none !important;
|
border-right: none !important;
|
||||||
.el-menu-item,
|
.el-menu-item,
|
||||||
.el-sub-menu__title {
|
.el-sub-menu__title {
|
||||||
color: var(--sidebar-text) !important;
|
color: var(--sidebar-text) !important;
|
||||||
}
|
}
|
||||||
.el-menu-item:not(.is-active):hover,
|
.el-menu-item:not(.is-active):hover,
|
||||||
.submenu-title-noDropdown:hover,
|
.submenu-title-noDropdown:hover,
|
||||||
.el-sub-menu__title:hover {
|
.el-sub-menu__title:hover {
|
||||||
background-color: var(--menu-hover) !important;
|
background-color: var(--menu-hover) !important;
|
||||||
}
|
}
|
||||||
.el-menu .nest-menu .el-sub-menu>.el-sub-menu__title,
|
.el-menu .nest-menu .el-sub-menu>.el-sub-menu__title,
|
||||||
.el-menu .el-sub-menu .el-menu-item,
|
.el-menu .el-sub-menu .el-menu-item,
|
||||||
.nest-menu .el-sub-menu>.el-sub-menu__title,
|
.nest-menu .el-sub-menu>.el-sub-menu__title,
|
||||||
.el-sub-menu .el-menu-item {
|
.el-sub-menu .el-menu-item {
|
||||||
background-color: var(--el-bg-color) !important;
|
background-color: var(--el-bg-color) !important;
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: var(--menu-hover) !important;
|
background-color: var(--menu-hover) !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.topmenu-container {
|
.topmenu-container {
|
||||||
.el-menu-item,
|
.el-menu-item,
|
||||||
.el-sub-menu .el-sub-menu__title {
|
.el-sub-menu .el-sub-menu__title {
|
||||||
color: var(--el-text-color-regular) !important;
|
color: var(--el-text-color-regular) !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.topbar-menu.el-menu--horizontal > .el-sub-menu .el-sub-menu__title{
|
.topbar-menu.el-menu--horizontal > .el-sub-menu .el-sub-menu__title{
|
||||||
color: var(--el-text-color-regular) !important;
|
color: var(--el-text-color-regular) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 顶部栏栏菜单覆盖 */
|
/* 顶部栏栏菜单覆盖 */
|
||||||
.el-menu--horizontal {
|
.el-menu--horizontal {
|
||||||
.el-menu-item, .el-sub-menu {
|
.el-menu-item, .el-sub-menu {
|
||||||
&:not(.is-disabled) {
|
&:not(.is-disabled) {
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus {
|
&:focus {
|
||||||
background-color: var(--navbar-hover) !important;
|
background-color: var(--navbar-hover) !important;
|
||||||
.el-sub-menu__title {
|
.el-sub-menu__title {
|
||||||
background-color: var(--navbar-hover) !important;
|
background-color: var(--navbar-hover) !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 页签样式覆盖 */
|
/* 页签样式覆盖 */
|
||||||
.navbar {
|
.navbar {
|
||||||
box-shadow: 0 1px 4px rgba(255, 255, 255, 0.08);
|
box-shadow: 0 1px 4px rgba(255, 255, 255, 0.08);
|
||||||
}
|
}
|
||||||
.tags-view-container {
|
.tags-view-container {
|
||||||
&.tags-view-container--chrome {
|
&.tags-view-container--chrome {
|
||||||
--chrome-strip-bg: var(--el-bg-color);
|
--chrome-strip-bg: var(--el-bg-color);
|
||||||
--chrome-strip-border: var(--el-border-color);
|
--chrome-strip-border: var(--el-border-color);
|
||||||
--chrome-tab-active-bg: var(--el-bg-color-overlay);
|
--chrome-tab-active-bg: var(--el-bg-color-overlay);
|
||||||
--chrome-tab-active-bg: color-mix(in srgb, var(--el-color-primary) 22%, var(--el-bg-color-overlay) 78%);
|
--chrome-tab-active-bg: color-mix(in srgb, var(--el-color-primary) 22%, var(--el-bg-color-overlay) 78%);
|
||||||
--chrome-tab-text: var(--el-text-color-secondary);
|
--chrome-tab-text: var(--el-text-color-secondary);
|
||||||
--chrome-tab-text-active: var(--el-color-primary);
|
--chrome-tab-text-active: var(--el-color-primary);
|
||||||
.tags-view-wrapper .tags-view-item:not(.active) + .tags-view-item:not(.active) {
|
.tags-view-wrapper .tags-view-item:not(.active) + .tags-view-item:not(.active) {
|
||||||
border-left-color: var(--el-border-color);
|
border-left-color: var(--el-border-color);
|
||||||
}
|
}
|
||||||
.tags-view-wrapper .tags-view-item {
|
.tags-view-wrapper .tags-view-item {
|
||||||
&:hover:not(.active) {
|
&:hover:not(.active) {
|
||||||
background: var(--el-fill-color, #303030) !important;
|
background: var(--el-fill-color, #303030) !important;
|
||||||
color: var(--el-text-color-primary);
|
color: var(--el-text-color-primary);
|
||||||
}
|
}
|
||||||
&.active {
|
&.active {
|
||||||
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.45);
|
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.45);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&:not(.tags-view-container--chrome) .tags-view-wrapper .tags-view-item.active {
|
&:not(.tags-view-container--chrome) .tags-view-wrapper .tags-view-item.active {
|
||||||
background-color: var(--tags-card-active-bg) !important;
|
background-color: var(--tags-card-active-bg) !important;
|
||||||
border-color: var(--tags-card-active-border) !important;
|
border-color: var(--tags-card-active-border) !important;
|
||||||
color: var(--current-color, #409eff) !important;
|
color: var(--current-color, #409eff) !important;
|
||||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);
|
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);
|
||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
background: var(--current-color, #409eff) !important;
|
background: var(--current-color, #409eff) !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 分割窗格覆盖 */
|
/* 分割窗格覆盖 */
|
||||||
.tree-sidebar-manage-wrap {
|
.tree-sidebar-manage-wrap {
|
||||||
.tree-sidebar-content {
|
.tree-sidebar-content {
|
||||||
background: var(--splitpanes-bg);
|
background: var(--splitpanes-bg);
|
||||||
}
|
}
|
||||||
.tree-sidebar {
|
.tree-sidebar {
|
||||||
border-right: 1px solid var(--splitpanes-splitter-bg);
|
border-right: 1px solid var(--splitpanes-splitter-bg);
|
||||||
background: var(--splitpanes-bg);
|
background: var(--splitpanes-bg);
|
||||||
.tree-header {
|
.tree-header {
|
||||||
background: var(--splitpanes-bg);
|
background: var(--splitpanes-bg);
|
||||||
border-color: var(--splitpanes-border);
|
border-color: var(--splitpanes-border);
|
||||||
}
|
}
|
||||||
.tree-title {
|
.tree-title {
|
||||||
color: var(--el-color-primary-light-2);
|
color: var(--el-color-primary-light-2);
|
||||||
}
|
}
|
||||||
.collapse-button-container {
|
.collapse-button-container {
|
||||||
background: var(--splitpanes-bg) !important;
|
background: var(--splitpanes-bg) !important;
|
||||||
}
|
}
|
||||||
.collapse-button {
|
.collapse-button {
|
||||||
&:hover {
|
&:hover {
|
||||||
color: var(--el-color-primary-light-2);
|
color: var(--el-color-primary-light-2);
|
||||||
background: var(--splitpanes-bg);
|
background: var(--splitpanes-bg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.resize-handle {
|
.resize-handle {
|
||||||
&:hover {
|
&:hover {
|
||||||
background: var(--splitpanes-splitter-hover-bg);
|
background: var(--splitpanes-splitter-hover-bg);
|
||||||
}
|
}
|
||||||
&.active {
|
&.active {
|
||||||
background: var(--splitpanes-splitter-hover-bg);
|
background: var(--splitpanes-splitter-hover-bg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 按钮样式覆盖 */
|
/* 按钮样式覆盖 */
|
||||||
.el-button--primary.is-plain {
|
.el-button--primary.is-plain {
|
||||||
background-color: var(--primary-bg);
|
background-color: var(--primary-bg);
|
||||||
border: 1px solid var(--el-color-primary-light-2);
|
border: 1px solid var(--el-color-primary-light-2);
|
||||||
color: var(--el-color-primary-light-2);
|
color: var(--el-color-primary-light-2);
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: var(--el-button-hover-bg-color);
|
background-color: var(--el-button-hover-bg-color);
|
||||||
border-color: var(--el-button-hover-border-color);
|
border-color: var(--el-button-hover-border-color);
|
||||||
color: var(--el-button-hover-text-color);
|
color: var(--el-button-hover-text-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.is-disabled {
|
&.is-disabled {
|
||||||
background-color: var(--link-active-bg-color);
|
background-color: var(--link-active-bg-color);
|
||||||
border-color: var(--el-color-primary-light-3);
|
border-color: var(--el-color-primary-light-3);
|
||||||
color: var(--el-color-primary-light-3);
|
color: var(--el-color-primary-light-3);
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* primary tag 样式覆盖 */
|
/* primary tag 样式覆盖 */
|
||||||
.el-tag--primary {
|
.el-tag--primary {
|
||||||
background-color: var(--primary-bg);
|
background-color: var(--primary-bg);
|
||||||
border: 1px solid var(--el-border-color-light);
|
border: 1px solid var(--el-border-color-light);
|
||||||
color: var(--el-color-primary);
|
color: var(--el-color-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 表格样式覆盖 */
|
/* 表格样式覆盖 */
|
||||||
.el-table {
|
.el-table {
|
||||||
--el-table-header-bg-color: var(--el-bg-color-overlay) !important;
|
--el-table-header-bg-color: var(--el-bg-color-overlay) !important;
|
||||||
--el-table-header-text-color: var(--el-text-color-regular) !important;
|
--el-table-header-text-color: var(--el-text-color-regular) !important;
|
||||||
--el-table-border-color: var(--el-border-color-light) !important;
|
--el-table-border-color: var(--el-border-color-light) !important;
|
||||||
--el-table-row-hover-bg-color: var(--el-bg-color-overlay) !important;
|
--el-table-row-hover-bg-color: var(--el-bg-color-overlay) !important;
|
||||||
|
|
||||||
.el-table__header-wrapper, .el-table__fixed-header-wrapper {
|
.el-table__header-wrapper, .el-table__fixed-header-wrapper {
|
||||||
th {
|
th {
|
||||||
background-color: var(--el-bg-color-overlay, #f8f8f9) !important;
|
background-color: var(--el-bg-color-overlay, #f8f8f9) !important;
|
||||||
color: var(--el-text-color-regular, #515a6e);
|
color: var(--el-text-color-regular, #515a6e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 树组件高亮样式覆盖 */
|
/* 树组件高亮样式覆盖 */
|
||||||
.el-tree {
|
.el-tree {
|
||||||
.el-tree-node.is-current > .el-tree-node__content {
|
.el-tree-node.is-current > .el-tree-node__content {
|
||||||
background-color: var(--el-bg-color-overlay) !important;
|
background-color: var(--el-bg-color-overlay) !important;
|
||||||
color: var(--el-color-primary);
|
color: var(--el-color-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-tree-node__content:hover {
|
.el-tree-node__content:hover {
|
||||||
background-color: var(--el-bg-color-overlay);
|
background-color: var(--el-bg-color-overlay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 下拉菜单样式覆盖 */
|
/* 下拉菜单样式覆盖 */
|
||||||
.el-dropdown-menu__item:not(.is-disabled):focus, .el-dropdown-menu__item:not(.is-disabled):hover{
|
.el-dropdown-menu__item:not(.is-disabled):focus, .el-dropdown-menu__item:not(.is-disabled):hover{
|
||||||
background-color: var(--navbar-hover) !important;
|
background-color: var(--navbar-hover) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* blockquote样式覆盖 */
|
/* blockquote样式覆盖 */
|
||||||
blockquote {
|
blockquote {
|
||||||
background-color: var(--blockquote-bg) !important;
|
background-color: var(--blockquote-bg) !important;
|
||||||
border-left-color: var(--blockquote-border) !important;
|
border-left-color: var(--blockquote-border) !important;
|
||||||
color: var(--blockquote-text) !important;
|
color: var(--blockquote-text) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 时间表达式标题样式覆盖 */
|
/* 时间表达式标题样式覆盖 */
|
||||||
.popup-result .title {
|
.popup-result .title {
|
||||||
background: var(--cron-border);
|
background: var(--cron-border);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 底部版权样式覆盖 */
|
/* 底部版权样式覆盖 */
|
||||||
.copyright {
|
.copyright {
|
||||||
background-color: var(--el-bg-color) !important;
|
background-color: var(--el-bg-color) !important;
|
||||||
color: var(--el-text-color-regular) !important;
|
color: var(--el-text-color-regular) !important;
|
||||||
border-top: 1px solid var(--el-bg-color) !important;
|
border-top: 1px solid var(--el-bg-color) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 详情抽屉暗黑模式覆盖 */
|
/* 详情抽屉暗黑模式覆盖 */
|
||||||
.detail-drawer {
|
.detail-drawer {
|
||||||
.el-drawer__header {
|
.el-drawer__header {
|
||||||
color: var(--el-text-color-primary);
|
color: var(--el-text-color-primary);
|
||||||
background: var(--el-bg-color-overlay);
|
background: var(--el-bg-color-overlay);
|
||||||
border-bottom: 1px solid var(--el-border-color);
|
border-bottom: 1px solid var(--el-border-color);
|
||||||
}
|
}
|
||||||
.section-header {
|
.section-header {
|
||||||
color: var(--el-color-primary-light-3);
|
color: var(--el-color-primary-light-3);
|
||||||
border-bottom-color: var(--el-border-color);
|
border-bottom-color: var(--el-border-color);
|
||||||
}
|
}
|
||||||
.drawer-content {
|
.drawer-content {
|
||||||
.info-label {
|
.info-label {
|
||||||
color: var(--el-text-color-secondary);
|
color: var(--el-text-color-secondary);
|
||||||
}
|
}
|
||||||
.info-value {
|
.info-value {
|
||||||
color: var(--el-text-color-primary);
|
color: var(--el-text-color-primary);
|
||||||
&.plaintext {
|
&.plaintext {
|
||||||
border-bottom-color: var(--el-border-color);
|
border-bottom-color: var(--el-border-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 详情卡片暗黑模式覆盖 */
|
/* 详情卡片暗黑模式覆盖 */
|
||||||
.detail-card {
|
.detail-card {
|
||||||
border-color: var(--el-border-color);
|
border-color: var(--el-border-color);
|
||||||
}
|
}
|
||||||
.detail-card-title {
|
.detail-card-title {
|
||||||
background: var(--el-bg-color-overlay);
|
background: var(--el-bg-color-overlay);
|
||||||
color: var(--el-text-color-primary);
|
color: var(--el-text-color-primary);
|
||||||
border-bottom-color: var(--el-border-color);
|
border-bottom-color: var(--el-border-color);
|
||||||
}
|
}
|
||||||
.detail-item {
|
.detail-item {
|
||||||
border-bottom-color: var(--el-border-color-lighter, #2a2a2a);
|
border-bottom-color: var(--el-border-color-lighter, #2a2a2a);
|
||||||
}
|
}
|
||||||
.detail-label {
|
.detail-label {
|
||||||
color: var(--el-text-color-secondary);
|
color: var(--el-text-color-secondary);
|
||||||
}
|
}
|
||||||
.detail-value {
|
.detail-value {
|
||||||
color: var(--el-text-color-primary);
|
color: var(--el-text-color-primary);
|
||||||
}
|
}
|
||||||
.code-wrap {
|
.code-wrap {
|
||||||
background: var(--el-bg-color-overlay);
|
background: var(--el-bg-color-overlay);
|
||||||
border-color: var(--el-border-color);
|
border-color: var(--el-border-color);
|
||||||
}
|
}
|
||||||
.code-pre {
|
.code-pre {
|
||||||
color: var(--el-text-color-regular);
|
color: var(--el-text-color-regular);
|
||||||
}
|
}
|
||||||
.code-action .el-button {
|
.code-action .el-button {
|
||||||
background: rgba(30, 30, 30, 0.9);
|
background: rgba(30, 30, 30, 0.9);
|
||||||
border-color: var(--el-border-color);
|
border-color: var(--el-border-color);
|
||||||
color: var(--el-text-color-regular);
|
color: var(--el-text-color-regular);
|
||||||
&:hover {
|
&:hover {
|
||||||
background: var(--el-bg-color-overlay);
|
background: var(--el-bg-color-overlay);
|
||||||
border-color: var(--el-color-primary);
|
border-color: var(--el-color-primary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 字典详情抽屉暗黑模式变量 */
|
/* 字典详情抽屉暗黑模式变量 */
|
||||||
--dict-drawer-title-color: var(--el-text-color-primary);
|
--dict-drawer-title-color: var(--el-text-color-primary);
|
||||||
--dict-drawer-subtext-color: var(--el-text-color-secondary);
|
--dict-drawer-subtext-color: var(--el-text-color-secondary);
|
||||||
--dict-drawer-card-bg: var(--el-bg-color-overlay);
|
--dict-drawer-card-bg: var(--el-bg-color-overlay);
|
||||||
--dict-drawer-border-color: var(--el-border-color);
|
--dict-drawer-border-color: var(--el-border-color);
|
||||||
--dict-drawer-cell-divider: var(--el-border-color-lighter, #2a2a2a);
|
--dict-drawer-cell-divider: var(--el-border-color-lighter, #2a2a2a);
|
||||||
|
|
||||||
/* 通知公告详情抽屉暗黑模式变量 */
|
/* 通知公告详情抽屉暗黑模式变量 */
|
||||||
--notice-title-color: var(--el-text-color-primary);
|
--notice-title-color: var(--el-text-color-primary);
|
||||||
--notice-meta-color: var(--el-text-color-secondary);
|
--notice-meta-color: var(--el-text-color-secondary);
|
||||||
--notice-meta-icon-color: var(--el-text-color-placeholder, #606266);
|
--notice-meta-icon-color: var(--el-text-color-placeholder, #606266);
|
||||||
--notice-border-color: var(--el-border-color);
|
--notice-border-color: var(--el-border-color);
|
||||||
--notice-body-bg: var(--el-bg-color-overlay);
|
--notice-body-bg: var(--el-bg-color-overlay);
|
||||||
--notice-body-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(255, 255, 255, 0.04);
|
--notice-body-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(255, 255, 255, 0.04);
|
||||||
--notice-content-color: var(--el-text-color-regular);
|
--notice-content-color: var(--el-text-color-regular);
|
||||||
--notice-drawer-body-bg: var(--el-bg-color);
|
--notice-drawer-body-bg: var(--el-bg-color);
|
||||||
--notice-divider-gradient: linear-gradient(to right, transparent, var(--el-border-color), transparent);
|
--notice-divider-gradient: linear-gradient(to right, transparent, var(--el-border-color), transparent);
|
||||||
--notice-divider-dot-color: var(--el-border-color-light, #434343);
|
--notice-divider-dot-color: var(--el-border-color-light, #434343);
|
||||||
--notice-blockquote-bg: var(--el-bg-color);
|
--notice-blockquote-bg: var(--el-bg-color);
|
||||||
--notice-blockquote-border: var(--el-border-color);
|
--notice-blockquote-border: var(--el-border-color);
|
||||||
--notice-table-border: var(--el-border-color);
|
--notice-table-border: var(--el-border-color);
|
||||||
--notice-table-header-bg: var(--el-bg-color);
|
--notice-table-header-bg: var(--el-bg-color);
|
||||||
--notice-tag-notify-bg: rgba(217, 119, 6, 0.15);
|
--notice-tag-notify-bg: rgba(217, 119, 6, 0.15);
|
||||||
--notice-tag-notify-color: #f6ad55;
|
--notice-tag-notify-color: #f6ad55;
|
||||||
--notice-tag-announce-bg: rgba(56, 161, 105, 0.15);
|
--notice-tag-announce-bg: rgba(56, 161, 105, 0.15);
|
||||||
--notice-tag-announce-color: #68d391;
|
--notice-tag-announce-color: #68d391;
|
||||||
}
|
}
|
||||||
|
|
||||||
.notice-detail-drawer {
|
.notice-detail-drawer {
|
||||||
.notice-content {
|
.notice-content {
|
||||||
color: var(--el-text-color-regular) !important;
|
color: var(--el-text-color-regular) !important;
|
||||||
* { color: var(--el-text-color-regular) !important; }
|
* { color: var(--el-text-color-regular) !important; }
|
||||||
h1~h6, strong, b { color: var(--el-text-color-primary) !important; }
|
h1~h6, strong, b { color: var(--el-text-color-primary) !important; }
|
||||||
a, a * { color: #5ba7f5 !important; }
|
a, a * { color: #5ba7f5 !important; }
|
||||||
blockquote, blockquote * { color: var(--el-text-color-secondary) !important; }
|
blockquote, blockquote * { color: var(--el-text-color-secondary) !important; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,344 +1,344 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-drawer v-model="showSettings" :withHeader="false" :lock-scroll="false" direction="rtl" size="300px">
|
<el-drawer v-model="showSettings" :withHeader="false" :lock-scroll="false" direction="rtl" size="300px">
|
||||||
<div class="setting-drawer-title">
|
<div class="setting-drawer-title">
|
||||||
<h3 class="drawer-title">菜单导航设置</h3>
|
<h3 class="drawer-title">菜单导航设置</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-wrap">
|
<div class="nav-wrap">
|
||||||
<el-tooltip content="左侧菜单" placement="bottom">
|
<el-tooltip content="左侧菜单" placement="bottom">
|
||||||
<div class="item left" @click="handleNavType(1)" :class="{ activeItem: navType == 1 }">
|
<div class="item left" @click="handleNavType(1)" :class="{ activeItem: navType == 1 }">
|
||||||
<b></b><b></b>
|
<b></b><b></b>
|
||||||
</div>
|
</div>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
|
|
||||||
<el-tooltip content="混合菜单" placement="bottom">
|
<el-tooltip content="混合菜单" placement="bottom">
|
||||||
<div class="item mix" @click="handleNavType(2)" :class="{ activeItem: navType == 2 }">
|
<div class="item mix" @click="handleNavType(2)" :class="{ activeItem: navType == 2 }">
|
||||||
<b></b><b></b>
|
<b></b><b></b>
|
||||||
</div>
|
</div>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<el-tooltip content="顶部菜单" placement="bottom">
|
<el-tooltip content="顶部菜单" placement="bottom">
|
||||||
<div class="item top" @click="handleNavType(3)" :class="{ activeItem: navType == 3 }">
|
<div class="item top" @click="handleNavType(3)" :class="{ activeItem: navType == 3 }">
|
||||||
<b></b><b></b>
|
<b></b><b></b>
|
||||||
</div>
|
</div>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
</div>
|
</div>
|
||||||
<div class="setting-drawer-title">
|
<div class="setting-drawer-title">
|
||||||
<h3 class="drawer-title">主题风格设置</h3>
|
<h3 class="drawer-title">主题风格设置</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="setting-drawer-block-checbox">
|
<div class="setting-drawer-block-checbox">
|
||||||
<div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-dark')">
|
<div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-dark')">
|
||||||
<img src="@/assets/images/dark.svg" alt="dark" />
|
<img src="@/assets/images/dark.svg" alt="dark" />
|
||||||
<div v-if="sideTheme === 'theme-dark'" class="setting-drawer-block-checbox-selectIcon" style="display: block;">
|
<div v-if="sideTheme === 'theme-dark'" class="setting-drawer-block-checbox-selectIcon" style="display: block;">
|
||||||
<i aria-label="图标: check" class="anticon anticon-check">
|
<i aria-label="图标: check" class="anticon anticon-check">
|
||||||
<svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class>
|
<svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class>
|
||||||
<path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" />
|
<path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" />
|
||||||
</svg>
|
</svg>
|
||||||
</i>
|
</i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-light')">
|
<div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-light')">
|
||||||
<img src="@/assets/images/light.svg" alt="light" />
|
<img src="@/assets/images/light.svg" alt="light" />
|
||||||
<div v-if="sideTheme === 'theme-light'" class="setting-drawer-block-checbox-selectIcon" style="display: block;">
|
<div v-if="sideTheme === 'theme-light'" class="setting-drawer-block-checbox-selectIcon" style="display: block;">
|
||||||
<i aria-label="图标: check" class="anticon anticon-check">
|
<i aria-label="图标: check" class="anticon anticon-check">
|
||||||
<svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class>
|
<svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class>
|
||||||
<path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" />
|
<path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" />
|
||||||
</svg>
|
</svg>
|
||||||
</i>
|
</i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="drawer-item">
|
<div class="drawer-item">
|
||||||
<span>主题颜色</span>
|
<span>主题颜色</span>
|
||||||
<span class="comp-style">
|
<span class="comp-style">
|
||||||
<el-color-picker v-model="theme" :predefine="predefineColors" @change="themeChange"/>
|
<el-color-picker v-model="theme" :predefine="predefineColors" @change="themeChange"/>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<el-divider />
|
<el-divider />
|
||||||
|
|
||||||
<h3 class="drawer-title">系统布局配置</h3>
|
<h3 class="drawer-title">系统布局配置</h3>
|
||||||
|
|
||||||
<div class="drawer-item">
|
<div class="drawer-item">
|
||||||
<span>开启页签</span>
|
<span>开启页签</span>
|
||||||
<span class="comp-style">
|
<span class="comp-style">
|
||||||
<el-switch v-model="settingsStore.tagsView" class="drawer-switch" />
|
<el-switch v-model="settingsStore.tagsView" class="drawer-switch" />
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="drawer-item">
|
<div class="drawer-item">
|
||||||
<span>持久化标签页</span>
|
<span>持久化标签页</span>
|
||||||
<span class="comp-style">
|
<span class="comp-style">
|
||||||
<el-switch v-model="settingsStore.tagsViewPersist" :disabled="!settingsStore.tagsView" @change="tagsViewPersistChange" class="drawer-switch" />
|
<el-switch v-model="settingsStore.tagsViewPersist" :disabled="!settingsStore.tagsView" @change="tagsViewPersistChange" class="drawer-switch" />
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="drawer-item">
|
<div class="drawer-item">
|
||||||
<span>显示页签图标</span>
|
<span>显示页签图标</span>
|
||||||
<span class="comp-style">
|
<span class="comp-style">
|
||||||
<el-switch v-model="settingsStore.tagsIcon" :disabled="!settingsStore.tagsView" class="drawer-switch" />
|
<el-switch v-model="settingsStore.tagsIcon" :disabled="!settingsStore.tagsView" class="drawer-switch" />
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="drawer-item">
|
<div class="drawer-item">
|
||||||
<span>标签页样式</span>
|
<span>标签页样式</span>
|
||||||
<span class="comp-style">
|
<span class="comp-style">
|
||||||
<el-radio-group v-model="settingsStore.tagsViewStyle" :disabled="!settingsStore.tagsView" size="small">
|
<el-radio-group v-model="settingsStore.tagsViewStyle" :disabled="!settingsStore.tagsView" size="small">
|
||||||
<el-radio-button label="card">卡片</el-radio-button>
|
<el-radio-button label="card">卡片</el-radio-button>
|
||||||
<el-radio-button label="chrome">谷歌</el-radio-button>
|
<el-radio-button label="chrome">谷歌</el-radio-button>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="drawer-item">
|
<div class="drawer-item">
|
||||||
<span>固定 Header</span>
|
<span>固定 Header</span>
|
||||||
<span class="comp-style">
|
<span class="comp-style">
|
||||||
<el-switch v-model="settingsStore.fixedHeader" class="drawer-switch" />
|
<el-switch v-model="settingsStore.fixedHeader" class="drawer-switch" />
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="drawer-item">
|
<div class="drawer-item">
|
||||||
<span>显示 Logo</span>
|
<span>显示 Logo</span>
|
||||||
<span class="comp-style">
|
<span class="comp-style">
|
||||||
<el-switch v-model="settingsStore.sidebarLogo" class="drawer-switch" />
|
<el-switch v-model="settingsStore.sidebarLogo" class="drawer-switch" />
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="drawer-item">
|
<div class="drawer-item">
|
||||||
<span>动态标题</span>
|
<span>动态标题</span>
|
||||||
<span class="comp-style">
|
<span class="comp-style">
|
||||||
<el-switch v-model="settingsStore.dynamicTitle" @change="dynamicTitleChange" class="drawer-switch" />
|
<el-switch v-model="settingsStore.dynamicTitle" @change="dynamicTitleChange" class="drawer-switch" />
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="drawer-item">
|
<div class="drawer-item">
|
||||||
<span>底部版权</span>
|
<span>底部版权</span>
|
||||||
<span class="comp-style">
|
<span class="comp-style">
|
||||||
<el-switch v-model="settingsStore.footerVisible" class="drawer-switch" />
|
<el-switch v-model="settingsStore.footerVisible" class="drawer-switch" />
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-divider />
|
<el-divider />
|
||||||
|
|
||||||
<el-button type="primary" plain icon="DocumentAdd" @click="saveSetting">保存配置</el-button>
|
<el-button type="primary" plain icon="DocumentAdd" @click="saveSetting">保存配置</el-button>
|
||||||
<el-button plain icon="Refresh" @click="resetSetting">重置配置</el-button>
|
<el-button plain icon="Refresh" @click="resetSetting">重置配置</el-button>
|
||||||
</el-drawer>
|
</el-drawer>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import useAppStore from '@/store/modules/app'
|
import useAppStore from '@/store/modules/app'
|
||||||
import useSettingsStore from '@/store/modules/settings'
|
import useSettingsStore from '@/store/modules/settings'
|
||||||
import usePermissionStore from '@/store/modules/permission'
|
import usePermissionStore from '@/store/modules/permission'
|
||||||
import { handleThemeStyle } from '@/utils/theme'
|
import { handleThemeStyle } from '@/utils/theme'
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance()
|
const { proxy } = getCurrentInstance()
|
||||||
const appStore = useAppStore()
|
const appStore = useAppStore()
|
||||||
const settingsStore = useSettingsStore()
|
const settingsStore = useSettingsStore()
|
||||||
const permissionStore = usePermissionStore()
|
const permissionStore = usePermissionStore()
|
||||||
const showSettings = ref(false)
|
const showSettings = ref(false)
|
||||||
const navType = ref(settingsStore.navType)
|
const navType = ref(settingsStore.navType)
|
||||||
const theme = ref(settingsStore.theme)
|
const theme = ref(settingsStore.theme)
|
||||||
const sideTheme = ref(settingsStore.sideTheme)
|
const sideTheme = ref(settingsStore.sideTheme)
|
||||||
const tagsViewPersist = ref(settingsStore.tagsViewPersist)
|
const tagsViewPersist = ref(settingsStore.tagsViewPersist)
|
||||||
const storeSettings = computed(() => settingsStore)
|
const storeSettings = computed(() => settingsStore)
|
||||||
const predefineColors = ref(["#409EFF", "#ff4500", "#ff8c00", "#ffd700", "#90ee90", "#00ced1", "#1e90ff", "#c71585"])
|
const predefineColors = ref(["#409EFF", "#ff4500", "#ff8c00", "#ffd700", "#90ee90", "#00ced1", "#1e90ff", "#c71585"])
|
||||||
|
|
||||||
/** 是否需要dynamicTitle */
|
/** 是否需要dynamicTitle */
|
||||||
function dynamicTitleChange() {
|
function dynamicTitleChange() {
|
||||||
useSettingsStore().setTitle(useSettingsStore().title)
|
useSettingsStore().setTitle(useSettingsStore().title)
|
||||||
}
|
}
|
||||||
|
|
||||||
function tagsViewPersistChange(val) {
|
function tagsViewPersistChange(val) {
|
||||||
settingsStore.tagsViewPersist = val
|
settingsStore.tagsViewPersist = val
|
||||||
tagsViewPersist.value = val
|
tagsViewPersist.value = val
|
||||||
}
|
}
|
||||||
|
|
||||||
function themeChange(val) {
|
function themeChange(val) {
|
||||||
settingsStore.theme = val
|
settingsStore.theme = val
|
||||||
handleThemeStyle(val)
|
handleThemeStyle(val)
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleTheme(val) {
|
function handleTheme(val) {
|
||||||
settingsStore.sideTheme = val
|
settingsStore.sideTheme = val
|
||||||
sideTheme.value = val
|
sideTheme.value = val
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleNavType(val) {
|
function handleNavType(val) {
|
||||||
settingsStore.navType = val
|
settingsStore.navType = val
|
||||||
navType.value = val
|
navType.value = val
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 菜单导航设置 */
|
/** 菜单导航设置 */
|
||||||
watch(() => navType, val => {
|
watch(() => navType, val => {
|
||||||
if (val.value == 1) {
|
if (val.value == 1) {
|
||||||
appStore.sidebar.opened = true
|
appStore.sidebar.opened = true
|
||||||
appStore.toggleSideBarHide(false)
|
appStore.toggleSideBarHide(false)
|
||||||
}
|
}
|
||||||
if (val.value == 2) {
|
if (val.value == 2) {
|
||||||
appStore.sidebar.opened = true
|
appStore.sidebar.opened = true
|
||||||
}
|
}
|
||||||
if (val.value == 3) {
|
if (val.value == 3) {
|
||||||
appStore.sidebar.opened = false
|
appStore.sidebar.opened = false
|
||||||
appStore.toggleSideBarHide(true)
|
appStore.toggleSideBarHide(true)
|
||||||
}
|
}
|
||||||
if ([1, 3].includes(val.value)) {
|
if ([1, 3].includes(val.value)) {
|
||||||
permissionStore.setSidebarRouters(permissionStore.defaultRoutes)
|
permissionStore.setSidebarRouters(permissionStore.defaultRoutes)
|
||||||
}
|
}
|
||||||
}, { immediate: true, deep: true }
|
}, { immediate: true, deep: true }
|
||||||
)
|
)
|
||||||
|
|
||||||
function saveSetting() {
|
function saveSetting() {
|
||||||
proxy.$modal.loading("正在保存到本地,请稍候...")
|
proxy.$modal.loading("正在保存到本地,请稍候...")
|
||||||
if (!tagsViewPersist.value) {
|
if (!tagsViewPersist.value) {
|
||||||
proxy.$cache.local.remove('tags-view-visited')
|
proxy.$cache.local.remove('tags-view-visited')
|
||||||
}
|
}
|
||||||
let layoutSetting = {
|
let layoutSetting = {
|
||||||
"navType": storeSettings.value.navType,
|
"navType": storeSettings.value.navType,
|
||||||
"tagsView": storeSettings.value.tagsView,
|
"tagsView": storeSettings.value.tagsView,
|
||||||
"tagsIcon": storeSettings.value.tagsIcon,
|
"tagsIcon": storeSettings.value.tagsIcon,
|
||||||
"tagsViewStyle": storeSettings.value.tagsViewStyle,
|
"tagsViewStyle": storeSettings.value.tagsViewStyle,
|
||||||
"tagsViewPersist": storeSettings.value.tagsViewPersist,
|
"tagsViewPersist": storeSettings.value.tagsViewPersist,
|
||||||
"fixedHeader": storeSettings.value.fixedHeader,
|
"fixedHeader": storeSettings.value.fixedHeader,
|
||||||
"sidebarLogo": storeSettings.value.sidebarLogo,
|
"sidebarLogo": storeSettings.value.sidebarLogo,
|
||||||
"dynamicTitle": storeSettings.value.dynamicTitle,
|
"dynamicTitle": storeSettings.value.dynamicTitle,
|
||||||
"footerVisible": storeSettings.value.footerVisible,
|
"footerVisible": storeSettings.value.footerVisible,
|
||||||
"sideTheme": storeSettings.value.sideTheme,
|
"sideTheme": storeSettings.value.sideTheme,
|
||||||
"theme": storeSettings.value.theme
|
"theme": storeSettings.value.theme
|
||||||
}
|
}
|
||||||
localStorage.setItem("layout-setting", JSON.stringify(layoutSetting))
|
localStorage.setItem("layout-setting", JSON.stringify(layoutSetting))
|
||||||
setTimeout(proxy.$modal.closeLoading(), 1000)
|
setTimeout(proxy.$modal.closeLoading(), 1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetSetting() {
|
function resetSetting() {
|
||||||
proxy.$cache.local.remove('tags-view-visited')
|
proxy.$cache.local.remove('tags-view-visited')
|
||||||
proxy.$modal.loading("正在清除设置缓存并刷新,请稍候...")
|
proxy.$modal.loading("正在清除设置缓存并刷新,请稍候...")
|
||||||
localStorage.removeItem("layout-setting")
|
localStorage.removeItem("layout-setting")
|
||||||
setTimeout("window.location.reload()", 1000)
|
setTimeout("window.location.reload()", 1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
function openSetting() {
|
function openSetting() {
|
||||||
showSettings.value = true
|
showSettings.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
openSetting
|
openSetting
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang='scss' scoped>
|
<style lang='scss' scoped>
|
||||||
.setting-drawer-title {
|
.setting-drawer-title {
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
color: var(--el-text-color-primary, rgba(0, 0, 0, 0.85));
|
color: var(--el-text-color-primary, rgba(0, 0, 0, 0.85));
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
||||||
.drawer-title {
|
.drawer-title {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.setting-drawer-block-checbox {
|
.setting-drawer-block-checbox {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
|
|
||||||
.setting-drawer-block-checbox-item {
|
.setting-drawer-block-checbox-item {
|
||||||
position: relative;
|
position: relative;
|
||||||
margin-right: 16px;
|
margin-right: 16px;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
img {
|
img {
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 48px;
|
height: 48px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.setting-drawer-block-checbox-selectIcon {
|
.setting-drawer-block-checbox-selectIcon {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
padding-top: 15px;
|
padding-top: 15px;
|
||||||
padding-left: 24px;
|
padding-left: 24px;
|
||||||
color: #1890ff;
|
color: #1890ff;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.drawer-item {
|
.drawer-item {
|
||||||
color: var(--el-text-color-regular, rgba(0, 0, 0, 0.65));
|
color: var(--el-text-color-regular, rgba(0, 0, 0, 0.65));
|
||||||
padding: 12px 0;
|
padding: 12px 0;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
|
||||||
.comp-style {
|
.comp-style {
|
||||||
float: right;
|
float: right;
|
||||||
margin: -3px 8px 0px 0px;
|
margin: -3px 8px 0px 0px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 导航模式
|
// 导航模式
|
||||||
.nav-wrap {
|
.nav-wrap {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
|
|
||||||
.activeItem {
|
.activeItem {
|
||||||
border: 2px solid var(--el-color-primary) !important;
|
border: 2px solid var(--el-color-primary) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.item {
|
.item {
|
||||||
position: relative;
|
position: relative;
|
||||||
margin-right: 16px;
|
margin-right: 16px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
width: 56px;
|
width: 56px;
|
||||||
height: 48px;
|
height: 48px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
background: #f0f2f5;
|
background: #f0f2f5;
|
||||||
border: 2px solid transparent;
|
border: 2px solid transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.left {
|
.left {
|
||||||
b:first-child {
|
b:first-child {
|
||||||
display: block;
|
display: block;
|
||||||
height: 30%;
|
height: 30%;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
}
|
}
|
||||||
b:last-child {
|
b:last-child {
|
||||||
width: 30%;
|
width: 30%;
|
||||||
background: #1b2a47;
|
background: #1b2a47;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
top: 0;
|
top: 0;
|
||||||
border-radius: 4px 0 0 4px;
|
border-radius: 4px 0 0 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.mix {
|
.mix {
|
||||||
b:first-child {
|
b:first-child {
|
||||||
border-radius: 4px 4px 0 0;
|
border-radius: 4px 4px 0 0;
|
||||||
display: block;
|
display: block;
|
||||||
height: 30%;
|
height: 30%;
|
||||||
background: #1b2a47;
|
background: #1b2a47;
|
||||||
}
|
}
|
||||||
b:last-child {
|
b:last-child {
|
||||||
width: 30%;
|
width: 30%;
|
||||||
background: #1b2a47;
|
background: #1b2a47;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
height: 70%;
|
height: 70%;
|
||||||
border-radius: 0 0 0 4px;
|
border-radius: 0 0 0 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.top {
|
.top {
|
||||||
b:first-child {
|
b:first-child {
|
||||||
display: block;
|
display: block;
|
||||||
height: 30%;
|
height: 30%;
|
||||||
background: #1b2a47;
|
background: #1b2a47;
|
||||||
border-radius: 4px 4px 0 0;
|
border-radius: 4px 4px 0 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
File diff suppressed because it is too large
Load Diff
+67
-67
@@ -1,67 +1,67 @@
|
|||||||
export default {
|
export default {
|
||||||
/**
|
/**
|
||||||
* 网页标题
|
* 网页标题
|
||||||
*/
|
*/
|
||||||
title: import.meta.env.VITE_APP_TITLE,
|
title: import.meta.env.VITE_APP_TITLE,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 侧边栏主题 深色主题theme-dark,浅色主题theme-light
|
* 侧边栏主题 深色主题theme-dark,浅色主题theme-light
|
||||||
*/
|
*/
|
||||||
sideTheme: 'theme-dark',
|
sideTheme: 'theme-dark',
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否系统布局配置
|
* 是否系统布局配置
|
||||||
*/
|
*/
|
||||||
showSettings: true,
|
showSettings: true,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 菜单导航模式 1、纯左侧 2、混合(左侧+顶部) 3、纯顶部
|
* 菜单导航模式 1、纯左侧 2、混合(左侧+顶部) 3、纯顶部
|
||||||
*/
|
*/
|
||||||
navType: 1,
|
navType: 1,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否显示 tagsView
|
* 是否显示 tagsView
|
||||||
*/
|
*/
|
||||||
tagsView: true,
|
tagsView: true,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 持久化标签页
|
* 持久化标签页
|
||||||
*/
|
*/
|
||||||
tagsViewPersist: false,
|
tagsViewPersist: false,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 显示页签图标
|
* 显示页签图标
|
||||||
*/
|
*/
|
||||||
tagsIcon: false,
|
tagsIcon: false,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 标签页样式:card 卡片(默认)、chrome 谷歌浏览器风格
|
* 标签页样式:card 卡片(默认)、chrome 谷歌浏览器风格
|
||||||
*/
|
*/
|
||||||
tagsViewStyle: 'card',
|
tagsViewStyle: 'card',
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否固定头部
|
* 是否固定头部
|
||||||
*/
|
*/
|
||||||
fixedHeader: true,
|
fixedHeader: true,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否显示logo
|
* 是否显示logo
|
||||||
*/
|
*/
|
||||||
sidebarLogo: true,
|
sidebarLogo: true,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否显示动态标题
|
* 是否显示动态标题
|
||||||
*/
|
*/
|
||||||
dynamicTitle: false,
|
dynamicTitle: false,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否显示底部版权
|
* 是否显示底部版权
|
||||||
*/
|
*/
|
||||||
footerVisible: false,
|
footerVisible: false,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 底部版权文本内容
|
* 底部版权文本内容
|
||||||
*/
|
*/
|
||||||
footerContent: 'Copyright © 2018-2026 RuoYi. All Rights Reserved.'
|
footerContent: 'Copyright © 2018-2026 RuoYi. All Rights Reserved.'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user