vue +elementui 项目登录通过不同账号切换侧边栏菜单的颜色

前景提要:要求不同权限账号登录侧边栏颜色不一样。分为 theme:1代表默认样式,theme:2代表深色主题样式。

1.首先定义一个主题文件 theme.js,定义两个主题样式

javascript 复制代码
// 主要是切换菜单栏和菜单头部主题的设计,整体主题样式切换是否能匹配
export const _Theme = {
  'lightTheme': {
    // 默认主题样式,要和varibles.scss的变量参数属性一样,theme为1
    menuBg: '#ffffff',
    menuText: '#464646',
    subMenuActiveText: '#464646',
    menu: '#F7FCFF'
  },
  'darkTheme': {
    // 深色主题,theme为2
    menuBg: '#2781AB',
    menuText: '#BDCBD9',
    subMenuActiveText: '#ffffff',
    menu: '#106E9A'
  }
}

2.在 App.vue 里获取上边的 js 文件的主题

App.vue :

javascript 复制代码
<template>
  <div id="app">
    <router-view />
  </div>
</template>

<script>
import { _Theme } from './theme.js'
export default {
  name: 'App',
  computed: {
    nowTheme: {
      get() {
        return this.$store.state.user.user.theme
      }
    }
  },
  watch: {
    // 主题切换
    nowTheme() {
      if (this.nowTheme === 2) {
        this.changeStyle(_Theme.darkTheme)
      } else {
        this.changeStyle(_Theme.lightTheme)
      }
    }
  },
  methods: {
  //主要代码
    changeStyle(obj) {
      for (const key in obj) {
        document.getElementsByTagName('body')[0].style.setProperty(`--${key}`, obj[key])
      }
    }
  }

}
</script>
侧边栏文件:index.vue:

```javascript
<template>
    <el-scrollbar wrap-class="scrollbar-wrapper">
      <el-menu
        :default-active="activeMenu"
        :collapse="isCollapse"
        :background-color="variablesa.menuBg"
        :text-color="variablesa.menuText"
        :unique-opened="$store.state.settings.uniqueOpened"
        :active-text-color="variablesa.menuActiveText"
        :collapse-transition="false"
        mode="vertical"
      >
        <sidebar-item
          v-for="route in sidebarRouters"
          :key="route.path"
          :item="route"
          :base-path="route.path"
        />
      </el-menu>
    </el-scrollbar>
</template>

<script>
import SidebarItem from './SidebarItem'
import variables from '@/assets/styles/variables.scss' //主要代码

export default {
  computed: {
    variablesa() {
      return variables
    }
  }
}
</script>

侧边栏样式表:variables.scss:

css 复制代码
// sidebar
$menuText:var(--menuText,#464646);

$menuActiveText:var(--menuActiveText,$--color-theme);
$subMenuActiveText:var(--subMenuActiveText,#464646);

$menuBg:var(--menuBg,#ffffff);//侧边栏菜单主题色

$menuTopBg:transparent;//顶栏菜单主题色
$menuHover:var(--menu,#F7FCFF);
$subMenuBg:var(--menu,#F7FCFF);
$subMenuHover:var(--menu,#F7FCFF);

$sideBarWidth: 260px;
:export {
  menuText: $menuText;
  menuActiveText: $menuActiveText;
  subMenuActiveText: $subMenuActiveText;
  menuBg: $menuBg;
  menuTopBg: $menuTopBg;
  menuHover: $menuHover;
  subMenuBg: $subMenuBg;
  subMenuHover: $subMenuHover;
  sideBarWidth: $sideBarWidth;
}

展示结果:

相关推荐
迅猛龙办公室4 分钟前
python实现简单进度条
java·前端·python
斯内普吖10 分钟前
(开源)宠物饲养系统实战指南 基于 Java + SSM + Vue + MySQL
java·vue.js·mysql·开源·宠物
Rosanci15 分钟前
Codex 下载与本地部署实战:从安装到运行全流程指南
开发语言·前端·算法·chatgpt·codex
zhangzeyuaaa20 分钟前
深入 Ruby:Block、Proc、Lambda 核心区别与最佳实践
开发语言·前端·ruby
liangshanbo12151 小时前
前端高级面试题:WebSocket 双向流式通信怎么设计?
前端·websocket·网络协议
可乐鸡翅yeah_1 小时前
新手梳理:HLS 线上问题,哪些该提给 CDN,哪些该找后端切片服务
开发语言·前端·javascript·vue.js·网络协议·http·m3u8在线
zwd20051 小时前
Manim arrange 和 arrange_in_grid 用法详解:buff、aligned_edge、rows/cols(0.21.0 实测)
前端·python·edge
Q26433650231 小时前
【有源码】基于SpringBoot+Vue的博物馆展览与服务一体化平台-java博物馆数字化展品展示与交互平台设计
java·vue.js·spring boot·spring·毕业设计·javaweb·课程设计
小小龙学IT1 小时前
Go 语言 reflect 反射包深度解析:从 Type/Value 到三大定律与工业实践
前端·golang
小溪学编程1 小时前
C语言篇:枚举类型
java·c语言·前端