mirror of
				https://github.com/pure-admin/vue-pure-admin.git
				synced 2025-11-03 13:44:47 +08:00 
			
		
		
		
	style: adjust the layout
This commit is contained in:
		
							parent
							
								
									8fe2b78c87
								
							
						
					
					
						commit
						14728b3ed6
					
				@ -23,6 +23,24 @@
 | 
			
		||||
        </vxe-radio-group>
 | 
			
		||||
      </li>
 | 
			
		||||
    </ul>
 | 
			
		||||
 | 
			
		||||
    <el-divider>主题风格</el-divider>
 | 
			
		||||
    <ul class="theme-stley">
 | 
			
		||||
      <el-tooltip class="item" effect="dark" content="暗色主题" placement="bottom">
 | 
			
		||||
        <li :class="dataTheme === 'dark' ? 'is-select' : ''" ref="firstTheme" @click="onDark">
 | 
			
		||||
          <div></div>
 | 
			
		||||
          <div></div>
 | 
			
		||||
        </li>
 | 
			
		||||
      </el-tooltip>
 | 
			
		||||
 | 
			
		||||
      <el-tooltip class="item" effect="dark" content="亮色主题" placement="bottom">
 | 
			
		||||
        <li :class="dataTheme === 'light' ? 'is-select' : ''" ref="secondTheme" @click="onLight">
 | 
			
		||||
          <div></div>
 | 
			
		||||
          <div></div>
 | 
			
		||||
        </li>
 | 
			
		||||
      </el-tooltip>
 | 
			
		||||
    </ul>
 | 
			
		||||
 | 
			
		||||
    <el-divider />
 | 
			
		||||
    <vxe-button
 | 
			
		||||
      status="danger"
 | 
			
		||||
@ -41,6 +59,8 @@ import { storageLocal } from "/@/utils/storage";
 | 
			
		||||
import { toggleClass } from "/@/utils/operate";
 | 
			
		||||
import { emitter } from "/@/utils/mitt";
 | 
			
		||||
import { useRouter } from "vue-router";
 | 
			
		||||
import { templateRef } from "@vueuse/core";
 | 
			
		||||
let isSelect = "is-select";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "setting",
 | 
			
		||||
@ -120,6 +140,31 @@ export default {
 | 
			
		||||
      emitter.emit("tagViewsShowModel", label);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const firstTheme = templateRef<HTMLElement | null>("firstTheme", null);
 | 
			
		||||
    const secondTheme = templateRef<HTMLElement | null>("secondTheme", null);
 | 
			
		||||
 | 
			
		||||
    const dataTheme = ref(storageLocal.getItem("data-theme") || "dark");
 | 
			
		||||
    if (dataTheme) {
 | 
			
		||||
      storageLocal.setItem("data-theme", unref(dataTheme));
 | 
			
		||||
      window.document.body.setAttribute("data-theme", unref(dataTheme));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // dark主题
 | 
			
		||||
    function onDark() {
 | 
			
		||||
      storageLocal.setItem("data-theme", "dark");
 | 
			
		||||
      window.document.body.setAttribute("data-theme", "dark");
 | 
			
		||||
      toggleClass(true, isSelect, unref(firstTheme));
 | 
			
		||||
      toggleClass(false, isSelect, unref(secondTheme));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // light主题
 | 
			
		||||
    function onLight() {
 | 
			
		||||
      storageLocal.setItem("data-theme", "light");
 | 
			
		||||
      window.document.body.setAttribute("data-theme", "light");
 | 
			
		||||
      toggleClass(false, isSelect, unref(firstTheme));
 | 
			
		||||
      toggleClass(true, isSelect, unref(secondTheme));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
      ...toRefs(settings),
 | 
			
		||||
      localOperate,
 | 
			
		||||
@ -128,7 +173,10 @@ export default {
 | 
			
		||||
      tagsChange,
 | 
			
		||||
      onReset,
 | 
			
		||||
      markValue,
 | 
			
		||||
      onChange
 | 
			
		||||
      onChange,
 | 
			
		||||
      onDark,
 | 
			
		||||
      onLight,
 | 
			
		||||
      dataTheme
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
@ -141,11 +189,71 @@ export default {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    margin: 16px;
 | 
			
		||||
    margin: 25px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
:deep(.el-divider__text) {
 | 
			
		||||
  font-size: 16px;
 | 
			
		||||
  font-weight: 700;
 | 
			
		||||
}
 | 
			
		||||
.theme-stley {
 | 
			
		||||
  margin-top: 25px;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 60px;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  justify-content: space-around;
 | 
			
		||||
  li {
 | 
			
		||||
    width: 30%;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    background: #f0f2f5;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
    background-color: #f0f2f5;
 | 
			
		||||
    border-radius: 4px;
 | 
			
		||||
    box-shadow: 0 1px 2.5px 0 rgb(0 0 0 / 18%);
 | 
			
		||||
    &:nth-child(1) {
 | 
			
		||||
      div {
 | 
			
		||||
        &:nth-child(1) {
 | 
			
		||||
          width: 30%;
 | 
			
		||||
          height: 100%;
 | 
			
		||||
          background: #1b2a47;
 | 
			
		||||
        }
 | 
			
		||||
        &:nth-child(2) {
 | 
			
		||||
          width: 70%;
 | 
			
		||||
          height: 30%;
 | 
			
		||||
          top: 0;
 | 
			
		||||
          right: 0;
 | 
			
		||||
          background-color: #fff;
 | 
			
		||||
          box-shadow: 0 0 1px #888888;
 | 
			
		||||
          position: absolute;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &:nth-child(2) {
 | 
			
		||||
      div {
 | 
			
		||||
        &:nth-child(1) {
 | 
			
		||||
          width: 30%;
 | 
			
		||||
          height: 100%;
 | 
			
		||||
          box-shadow: 0 0 1px #888888;
 | 
			
		||||
          background-color: #fff;
 | 
			
		||||
          border-radius: 4px 0 0 4px;
 | 
			
		||||
        }
 | 
			
		||||
        &:nth-child(2) {
 | 
			
		||||
          width: 70%;
 | 
			
		||||
          height: 30%;
 | 
			
		||||
          top: 0;
 | 
			
		||||
          right: 0;
 | 
			
		||||
          background-color: #fff;
 | 
			
		||||
          box-shadow: 0 0 1px #888888;
 | 
			
		||||
          position: absolute;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.is-select {
 | 
			
		||||
  border: 2px solid #0960bd;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
@ -3,10 +3,7 @@
 | 
			
		||||
    <el-menu
 | 
			
		||||
      :default-active="activeMenu"
 | 
			
		||||
      :collapse="isCollapse"
 | 
			
		||||
      background-color="#fff"
 | 
			
		||||
      unique-opened
 | 
			
		||||
      text-color="#000"
 | 
			
		||||
      active-text-color="#409eff"
 | 
			
		||||
      :collapse-transition="false"
 | 
			
		||||
      mode="vertical"
 | 
			
		||||
      @select="menuSelect"
 | 
			
		||||
 | 
			
		||||
@ -164,7 +164,7 @@ export default {
 | 
			
		||||
    // 初始化页面刷新保证当前路由tabview存在
 | 
			
		||||
    let stop = watchEffect(() => {
 | 
			
		||||
      let parentPath = route.path.slice(0, route.path.lastIndexOf("/"));
 | 
			
		||||
      dynamicRouteTags(route.path, parentPath);
 | 
			
		||||
      dynamicRouteTags(route.path, parentPath, route);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    setTimeout(() => {
 | 
			
		||||
 | 
			
		||||
@ -90,7 +90,7 @@ export function useDynamicRoutesHook() {
 | 
			
		||||
   * @param value any 当前删除tag路由
 | 
			
		||||
   * @param current objct 当前激活路由对象
 | 
			
		||||
   */
 | 
			
		||||
  const deleteDynamicTag = async (obj: any, current: object): Promise<any> => {
 | 
			
		||||
  const deleteDynamicTag = async (obj: any, current: any): Promise<any> => {
 | 
			
		||||
    let valueIndex: number = dynamic.dRoutes.findIndex((item: any) => {
 | 
			
		||||
      return item.path === obj.path;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@ -48,6 +48,7 @@ import { toggleClass, removeClass } from "/@/utils/operate";
 | 
			
		||||
let hiddenMainContainer = "hidden-main-container";
 | 
			
		||||
import options from "/@/settings";
 | 
			
		||||
import { useRouter, useRoute } from "vue-router";
 | 
			
		||||
import { storageLocal } from "/@/utils/storage";
 | 
			
		||||
 | 
			
		||||
interface setInter {
 | 
			
		||||
  sidebar: any;
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,9 @@ import {
 | 
			
		||||
  ElForm,
 | 
			
		||||
  ElFormItem,
 | 
			
		||||
  ElLoading,
 | 
			
		||||
  ElPopover,
 | 
			
		||||
  ElPopper,
 | 
			
		||||
  ElTooltip,
 | 
			
		||||
} from "element-plus";
 | 
			
		||||
 | 
			
		||||
const components = [
 | 
			
		||||
@ -48,6 +51,9 @@ const components = [
 | 
			
		||||
  ElInput,
 | 
			
		||||
  ElForm,
 | 
			
		||||
  ElFormItem,
 | 
			
		||||
  ElPopover,
 | 
			
		||||
  ElPopper,
 | 
			
		||||
  ElTooltip,
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
const plugins = [ElLoading];
 | 
			
		||||
 | 
			
		||||
@ -15,7 +15,6 @@
 | 
			
		||||
  display: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.el-dialog {
 | 
			
		||||
  transform: none;
 | 
			
		||||
  left: 0;
 | 
			
		||||
@ -38,7 +37,7 @@
 | 
			
		||||
// dropdown
 | 
			
		||||
.el-dropdown-menu {
 | 
			
		||||
  a {
 | 
			
		||||
    display: block
 | 
			
		||||
    display: block;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -46,3 +45,12 @@
 | 
			
		||||
.el-range-separator {
 | 
			
		||||
  box-sizing: content-box;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.el-loading-mask {
 | 
			
		||||
  z-index: -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// el-tooltip,的权重
 | 
			
		||||
.is-dark {
 | 
			
		||||
  z-index: 99999 !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,3 @@
 | 
			
		||||
@import "./variables.scss";
 | 
			
		||||
@import "./mixin.scss";
 | 
			
		||||
@import "./transition.scss";
 | 
			
		||||
@import "./element-ui.scss";
 | 
			
		||||
@ -123,10 +122,6 @@ ul {
 | 
			
		||||
  -o-filter: invert(80%);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.el-loading-mask {
 | 
			
		||||
  z-index: -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.pc-spacing {
 | 
			
		||||
  margin: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,19 @@
 | 
			
		||||
#app {
 | 
			
		||||
// 暗色主题
 | 
			
		||||
body[data-theme="dark"] {
 | 
			
		||||
  $menuText: #7a80b4;
 | 
			
		||||
  $menuActiveText: #7a80b4;
 | 
			
		||||
  $subMenuActiveText: #f4f4f5;
 | 
			
		||||
  $sideBarWidth: 210px;
 | 
			
		||||
 | 
			
		||||
  //菜单背景
 | 
			
		||||
  $menuBg: #1b2a47;
 | 
			
		||||
  // 鼠标覆盖菜单时的背景
 | 
			
		||||
  $menuHover: #2a395b;
 | 
			
		||||
  // 子菜单背景
 | 
			
		||||
  $subMenuBg: #1f2d3d;
 | 
			
		||||
  // 鼠标覆盖子菜单时的背景
 | 
			
		||||
  $subMenuHover: #001528;
 | 
			
		||||
 | 
			
		||||
  .main-container {
 | 
			
		||||
    min-height: 100%;
 | 
			
		||||
    transition: margin-left 0.28s;
 | 
			
		||||
@ -61,16 +76,33 @@
 | 
			
		||||
      // width: 100% !important;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .el-menu-item,
 | 
			
		||||
    .el-submenu__title {
 | 
			
		||||
      color: $menuText;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .el-menu {
 | 
			
		||||
      background-color: transparent;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // menu hover
 | 
			
		||||
    .submenu-title-noDropdown,
 | 
			
		||||
    .el-submenu__title {
 | 
			
		||||
      &:hover {
 | 
			
		||||
        background-color: $menuHover !important;
 | 
			
		||||
      }
 | 
			
		||||
      background: $menuBg;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .is-active > .el-submenu__title,
 | 
			
		||||
    .is-active > .el-submenu__title i {
 | 
			
		||||
    .is-active.submenu-title-noDropdown {
 | 
			
		||||
      color: $subMenuActiveText !important;
 | 
			
		||||
      i {
 | 
			
		||||
        color: $subMenuActiveText !important;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .is-active {
 | 
			
		||||
      transition: color 0.3s;
 | 
			
		||||
      color: $subMenuActiveText !important;
 | 
			
		||||
    }
 | 
			
		||||
@ -130,6 +162,51 @@
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // 菜单折叠
 | 
			
		||||
  .el-menu--vertical {
 | 
			
		||||
    .el-menu--popup {
 | 
			
		||||
      background-color: $subMenuBg !important;
 | 
			
		||||
      .el-menu-item {
 | 
			
		||||
        color: $menuText;
 | 
			
		||||
        background-color: $subMenuBg;
 | 
			
		||||
        &:hover {
 | 
			
		||||
          background-color: $subMenuHover;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    & > .el-menu {
 | 
			
		||||
      i {
 | 
			
		||||
        margin-right: 16px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .is-active > .el-submenu__title,
 | 
			
		||||
    .is-active.submenu-title-noDropdown {
 | 
			
		||||
      color: $subMenuActiveText !important;
 | 
			
		||||
      i {
 | 
			
		||||
        color: $subMenuActiveText !important;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .is-active {
 | 
			
		||||
      transition: color 0.3s;
 | 
			
		||||
      color: $subMenuActiveText !important;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .nest-menu .el-submenu > .el-submenu__title,
 | 
			
		||||
    .el-menu-item {
 | 
			
		||||
      &:hover {
 | 
			
		||||
        // you can use $subMenuHover
 | 
			
		||||
        background-color: $menuHover !important;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .el-scrollbar__wrap {
 | 
			
		||||
    overflow: auto;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .el-menu--collapse .el-menu .el-submenu {
 | 
			
		||||
    min-width: $sideBarWidth !important;
 | 
			
		||||
  }
 | 
			
		||||
@ -162,43 +239,243 @@
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// when menu collapsed
 | 
			
		||||
.el-menu--vertical {
 | 
			
		||||
  & > .el-menu {
 | 
			
		||||
    i {
 | 
			
		||||
      margin-right: 16px;
 | 
			
		||||
// 亮色主题
 | 
			
		||||
body[data-theme="light"] {
 | 
			
		||||
  $menuText: #7a80b4;
 | 
			
		||||
  $menuActiveText: #7a80b4;
 | 
			
		||||
  $subMenuActiveText: #409eff;
 | 
			
		||||
  $sideBarWidth: 210px;
 | 
			
		||||
 | 
			
		||||
  //菜单背景
 | 
			
		||||
  $menuBg: #fff;
 | 
			
		||||
  // 鼠标覆盖菜单时的背景
 | 
			
		||||
  $menuHover: #e0ebf6;
 | 
			
		||||
  // 子菜单背景
 | 
			
		||||
  $subMenuBg: #fff;
 | 
			
		||||
  // 鼠标覆盖子菜单时的背景
 | 
			
		||||
  $subMenuHover: #e0ebf6;
 | 
			
		||||
 | 
			
		||||
  .main-container {
 | 
			
		||||
    min-height: 100%;
 | 
			
		||||
    transition: margin-left 0.28s;
 | 
			
		||||
    margin-left: $sideBarWidth;
 | 
			
		||||
    position: relative;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .sidebar-container {
 | 
			
		||||
    transition: width 0.28s;
 | 
			
		||||
    width: $sideBarWidth !important;
 | 
			
		||||
    background-color: $menuBg;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    font-size: 0px;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    z-index: 1001;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
    box-shadow: 0 0 1px #888888;
 | 
			
		||||
 | 
			
		||||
    // reset element-plus css
 | 
			
		||||
    .horizontal-collapse-transition {
 | 
			
		||||
      transition: 0s width ease-in-out, 0s padding-left ease-in-out,
 | 
			
		||||
        0s padding-right ease-in-out;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .scrollbar-wrapper {
 | 
			
		||||
      overflow-x: hidden !important;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .el-scrollbar__bar.is-vertical {
 | 
			
		||||
      right: 0px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .el-scrollbar {
 | 
			
		||||
      height: 100%;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &.has-logo {
 | 
			
		||||
      .el-scrollbar {
 | 
			
		||||
        height: calc(100% - 50px);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .is-horizontal {
 | 
			
		||||
      display: none;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    a {
 | 
			
		||||
      display: inline-block;
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      overflow: hidden;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .el-menu {
 | 
			
		||||
      border: none;
 | 
			
		||||
      height: 100%;
 | 
			
		||||
      // background-color: $menuBg !important;
 | 
			
		||||
      // width: 100% !important;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .el-menu-item,
 | 
			
		||||
    .el-submenu__title {
 | 
			
		||||
      color: $menuText;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .el-menu {
 | 
			
		||||
      background-color: transparent;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // menu hover
 | 
			
		||||
    .submenu-title-noDropdown,
 | 
			
		||||
    .el-submenu__title {
 | 
			
		||||
      &:hover {
 | 
			
		||||
        background-color: $menuHover !important;
 | 
			
		||||
      }
 | 
			
		||||
      background: $menuBg;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .is-active > .el-submenu__title,
 | 
			
		||||
    .is-active.submenu-title-noDropdown {
 | 
			
		||||
      color: $subMenuActiveText !important;
 | 
			
		||||
      i {
 | 
			
		||||
        color: $subMenuActiveText !important;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .is-active {
 | 
			
		||||
      transition: color 0.3s;
 | 
			
		||||
      color: $subMenuActiveText !important;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    & .nest-menu .el-submenu > .el-submenu__title,
 | 
			
		||||
    & .el-submenu .el-menu-item {
 | 
			
		||||
      font-size: 12px;
 | 
			
		||||
      min-width: $sideBarWidth !important;
 | 
			
		||||
      background-color: $subMenuBg !important;
 | 
			
		||||
 | 
			
		||||
      &:hover {
 | 
			
		||||
        background-color: $subMenuHover !important;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .nest-menu .el-submenu > .el-submenu__title,
 | 
			
		||||
  .el-menu-item {
 | 
			
		||||
    &:hover {
 | 
			
		||||
      // you can use $subMenuHover
 | 
			
		||||
      background-color: $menuHover !important;
 | 
			
		||||
  .hideSidebar {
 | 
			
		||||
    .sidebar-container {
 | 
			
		||||
      width: 54px !important;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .main-container {
 | 
			
		||||
      margin-left: 54px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .submenu-title-noDropdown {
 | 
			
		||||
      padding: 0 !important;
 | 
			
		||||
      position: relative;
 | 
			
		||||
 | 
			
		||||
      .el-tooltip {
 | 
			
		||||
        padding: 0 !important;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .el-submenu {
 | 
			
		||||
      overflow: hidden;
 | 
			
		||||
      & > .el-submenu__title {
 | 
			
		||||
        .el-submenu__icon-arrow {
 | 
			
		||||
          display: none;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .el-menu--collapse {
 | 
			
		||||
      margin-left: -5px; //需优化的地方
 | 
			
		||||
      .el-submenu {
 | 
			
		||||
        & > .el-submenu__title {
 | 
			
		||||
          & > span {
 | 
			
		||||
            height: 0;
 | 
			
		||||
            width: 0;
 | 
			
		||||
            overflow: hidden;
 | 
			
		||||
            visibility: hidden;
 | 
			
		||||
            display: inline-block;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // the scroll bar appears when the subMenu is too long
 | 
			
		||||
  > .el-menu--popup {
 | 
			
		||||
    max-height: 100vh;
 | 
			
		||||
    overflow-y: auto;
 | 
			
		||||
 | 
			
		||||
    &::-webkit-scrollbar-track-piece {
 | 
			
		||||
      background: #d3dce6;
 | 
			
		||||
  // 菜单折叠
 | 
			
		||||
  .el-menu--vertical {
 | 
			
		||||
    .el-menu--popup {
 | 
			
		||||
      background-color: $subMenuBg !important;
 | 
			
		||||
      .el-menu-item {
 | 
			
		||||
        color: $menuText;
 | 
			
		||||
        background-color: $subMenuBg;
 | 
			
		||||
        &:hover {
 | 
			
		||||
          background-color: $subMenuHover;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    & > .el-menu {
 | 
			
		||||
      i {
 | 
			
		||||
        margin-right: 16px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &::-webkit-scrollbar {
 | 
			
		||||
      width: 6px;
 | 
			
		||||
    .is-active > .el-submenu__title,
 | 
			
		||||
    .is-active.submenu-title-noDropdown {
 | 
			
		||||
      color: $subMenuActiveText !important;
 | 
			
		||||
      i {
 | 
			
		||||
        color: $subMenuActiveText !important;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &::-webkit-scrollbar-thumb {
 | 
			
		||||
      background: #99a9bf;
 | 
			
		||||
      border-radius: 20px;
 | 
			
		||||
    .is-active {
 | 
			
		||||
      transition: color 0.3s;
 | 
			
		||||
      color: $subMenuActiveText !important;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .nest-menu .el-submenu > .el-submenu__title,
 | 
			
		||||
    .el-menu-item {
 | 
			
		||||
      &:hover {
 | 
			
		||||
        // you can use $subMenuHover
 | 
			
		||||
        background-color: $menuHover !important;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .el-scrollbar__wrap {
 | 
			
		||||
    overflow: auto;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .el-menu--collapse .el-menu .el-submenu {
 | 
			
		||||
    min-width: $sideBarWidth !important;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // mobile responsive
 | 
			
		||||
  .mobile {
 | 
			
		||||
    .main-container {
 | 
			
		||||
      margin-left: 0px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .sidebar-container {
 | 
			
		||||
      transition: transform 0.28s;
 | 
			
		||||
      width: $sideBarWidth !important;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &.hideSidebar {
 | 
			
		||||
      .sidebar-container {
 | 
			
		||||
        pointer-events: none;
 | 
			
		||||
        transition-duration: 0.3s;
 | 
			
		||||
        transform: translate3d(-$sideBarWidth, 0, 0);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .withoutAnimation {
 | 
			
		||||
    .main-container,
 | 
			
		||||
    .sidebar-container {
 | 
			
		||||
      transition: none;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.el-scrollbar__wrap {
 | 
			
		||||
  overflow: auto;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,39 +0,0 @@
 | 
			
		||||
// sidebar
 | 
			
		||||
$menuText: #7a80b4;
 | 
			
		||||
$menuActiveText: #7a80b4;
 | 
			
		||||
$subMenuActiveText: #409eff;
 | 
			
		||||
 | 
			
		||||
// dark样式
 | 
			
		||||
//菜单背景
 | 
			
		||||
// $menuBg: #1b2a47;
 | 
			
		||||
// // 鼠标覆盖菜单时的背景
 | 
			
		||||
// $menuHover: #2a395b;
 | 
			
		||||
 | 
			
		||||
// 子菜单背景
 | 
			
		||||
// $subMenuBg: #1f2d3d;
 | 
			
		||||
// // 鼠标覆盖子菜单时的背景
 | 
			
		||||
// $subMenuHover: #001528;
 | 
			
		||||
 | 
			
		||||
// night样式
 | 
			
		||||
//菜单背景
 | 
			
		||||
$menuBg: #fff;
 | 
			
		||||
// 鼠标覆盖菜单时的背景
 | 
			
		||||
$menuHover: #e0ebf6;
 | 
			
		||||
 | 
			
		||||
// 子菜单背景
 | 
			
		||||
$subMenuBg: #fff;
 | 
			
		||||
// 鼠标覆盖子菜单时的背景
 | 
			
		||||
$subMenuHover: #e0ebf6;
 | 
			
		||||
 | 
			
		||||
$sideBarWidth: 210px;
 | 
			
		||||
 | 
			
		||||
:export {
 | 
			
		||||
  menuText: $menuText;
 | 
			
		||||
  menuActiveText: $menuActiveText;
 | 
			
		||||
  subMenuActiveText: $subMenuActiveText;
 | 
			
		||||
  menuBg: $menuBg;
 | 
			
		||||
  menuHover: $menuHover;
 | 
			
		||||
  subMenuBg: $subMenuBg;
 | 
			
		||||
  subMenuHover: $subMenuHover;
 | 
			
		||||
  sideBarWidth: $sideBarWidth;
 | 
			
		||||
}
 | 
			
		||||
@ -1,30 +1,38 @@
 | 
			
		||||
export const hasClass = (ele: Element, cls: string): any => {
 | 
			
		||||
  return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'))
 | 
			
		||||
}
 | 
			
		||||
  return !!ele.className.match(new RegExp("(\\s|^)" + cls + "(\\s|$)"));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const addClass = (ele: Element, cls: string, extracls?: string): any => {
 | 
			
		||||
  if (!hasClass(ele, cls)) ele.className += (' ' + cls)
 | 
			
		||||
  if (!hasClass(ele, cls)) ele.className += " " + cls;
 | 
			
		||||
  if (extracls) {
 | 
			
		||||
    if (!hasClass(ele, extracls)) ele.className += ' ' + extracls
 | 
			
		||||
    if (!hasClass(ele, extracls)) ele.className += " " + extracls;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const removeClass = (ele: Element, cls: string, extracls?: string): any => {
 | 
			
		||||
export const removeClass = (
 | 
			
		||||
  ele: Element,
 | 
			
		||||
  cls: string,
 | 
			
		||||
  extracls?: string
 | 
			
		||||
): any => {
 | 
			
		||||
  if (hasClass(ele, cls)) {
 | 
			
		||||
    const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)')
 | 
			
		||||
    ele.className = ele.className.replace(reg, ' ').trim()
 | 
			
		||||
    const reg = new RegExp("(\\s|^)" + cls + "(\\s|$)");
 | 
			
		||||
    ele.className = ele.className.replace(reg, " ").trim();
 | 
			
		||||
  }
 | 
			
		||||
  if (extracls) {
 | 
			
		||||
    if (hasClass(ele, extracls)) {
 | 
			
		||||
      const regs = new RegExp('(\\s|^)' + extracls + '(\\s|$)')
 | 
			
		||||
      ele.className = ele.className.replace(regs, ' ').trim()
 | 
			
		||||
      const regs = new RegExp("(\\s|^)" + extracls + "(\\s|$)");
 | 
			
		||||
      ele.className = ele.className.replace(regs, " ").trim();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const toggleClass = (flag: boolean, clsName: string, target?: HTMLElement): any => {
 | 
			
		||||
  const targetEl = target || document.body
 | 
			
		||||
  let { className } = targetEl
 | 
			
		||||
  className = className.replace(clsName, "")
 | 
			
		||||
  targetEl.className = flag ? `${className} ${clsName} ` : className
 | 
			
		||||
}
 | 
			
		||||
export const toggleClass = (
 | 
			
		||||
  flag: boolean,
 | 
			
		||||
  clsName: string,
 | 
			
		||||
  target?: HTMLElement
 | 
			
		||||
): any => {
 | 
			
		||||
  const targetEl = target || document.body;
 | 
			
		||||
  let { className } = targetEl;
 | 
			
		||||
  className = className.replace(clsName, "");
 | 
			
		||||
  targetEl.className = flag ? `${className} ${clsName} ` : className;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user