首页 > 其他分享 >使用vue2+element-ui+vuex实现后台管理系统的头部背景色动态点击修改

使用vue2+element-ui+vuex实现后台管理系统的头部背景色动态点击修改

时间:2023-05-11 09:44:05浏览次数:41  
标签:headerColor vue2 color element header ui background vuex store

**以下内容仅供自己学习使用

话不多说,直接上代码

1. 首先去vuex里面

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

const store = new Vuex.Store({
  state: {
    headerColor: 'default-header',   //定义一个默认的颜色
  },
  mutations: {
  	//setHeaderColor 方法可以用来修改 headerColor 的值。当调用 setHeaderColor 方法时,
	//它会更新 store 中的 headerColor 值,并且将其保存在浏览器的 localStorage 中,以便在刷新页面后仍然能够使用该值。
    setHeaderColor (state, color) {
      state.headerColor = color
      localStorage.setItem('headerColor', color)

    },
  },
  actions: {
  //调用了 setHeaderColor 方法,并通过 context.commit 方法提交了一个 mutation,从而修改了 headerColor 的值。
    updateHeaderColor (context, color) {
      context.commit('setHeaderColor', color);
    }
  }

});
//使用 subscribe 方法在 store 中添加了一个监听函数。每当 store 中的 mutation 被提交时,
//这个监听函数会自动将 headerColor 的值更新到 localStorage 中。这样做可以确保即使用户刷新页面,头部颜色的设置也不会丢失
store.subscribe((mutation, state) => {
  localStorage.setItem('headerColor', state.headerColor)
})
export default store;

2. 来到颜色点击切换页面,先上效果图,后上代码(建议复制到编辑器当中去看)

效果图
image

<template>
  <div class="color-container">
    <el-card>
      <h3 style="margin-bottom: 20px;">头部样式/<span style="font-size:12px; color:#333;">HeaderColor</span> </h3>
      <el-row :gutter="24">
        <el-col :span="5">
          <div class="grid-content bg-purple">
            <div class="color-block default-color" :class="{ active: headerColor === 'default-header' }" @click="updateHeaderColor('default-header')">
              <span style="color:#fff;padding: 10px;">#409EFF</span>
              <i class="el-icon-check" v-if="headerColor === 'default-header'"></i>
            </div>
          </div>
        </el-col>
        <el-col :span="5">
          <div class="grid-content bg-purple">
            <div class="color-block red-color" :class="{ active: headerColor === 'red-header' }" @click="updateHeaderColor('red-header')">
              <span style="color:#fff;padding: 10px;">#EB507E</span>
              <i class="el-icon-check" v-if="headerColor === 'red-header'"></i>
            </div>
          </div>
        </el-col>
        <el-col :span="5">
          <div class="grid-content bg-purple">
            <div class="color-block green-color" :class="{ active: headerColor === 'green-header' }" @click="updateHeaderColor('green-header')">
              <span style="color:#fff;padding: 10px;">#4BAE4F</span>
              <i class="el-icon-check" v-if="headerColor === 'green-header'"></i>
            </div>
          </div>
        </el-col>
        <el-col :span="5">
          <div class="grid-content bg-purple">
            <div class="color-block orange-color" :class="{ active: headerColor === 'orange-header' }" @click="updateHeaderColor('orange-header')">
              <span style="color:#fff;padding: 10px;">#FF9900</span>
              <i class="el-icon-check" v-if="headerColor === 'orange-header'"></i>
            </div>
          </div>
        </el-col>
        <el-col :span="4">
          <div class="grid-content bg-purple">
            <div class="color-block purple-color" :class="{ active: headerColor === 'purple-header' }" @click="updateHeaderColor('purple-header')">
              <span style="color:#fff;padding: 10px;">#9B5DE5</span>
              <i class="el-icon-check" v-if="headerColor === 'purple-header'"></i>
            </div>
          </div>
        </el-col>
      </el-row>
    </el-card>
  </div>
</template>

<script>
import { mapActions, mapState } from 'vuex'

export default {
  name: 'AdminBeautification',
  computed: {
    ...mapState(['headerColor'])
  },
  methods: {
    ...mapActions(['updateHeaderColor'])
  }
};
</script>

<style lang="scss" scoped>
.default-header {
  background-color: #409eff;
}
.red-header {
  background-color: #eb507e;
}
.green-header {
  background-color: #4bae4f;
}
.orange-header {
  background-color: #f90;
}
.purple-header {
  background-color: #9b5de5;
}
.default-color {
  background-color: #409eff;
}
.red-color {
  background-color: #eb507e;
}
.green-color {
  background-color: #4bae4f;
}
.orange-color {
  background-color: #f90;
}
.purple-color {
  background-color: #9b5de5;
}
.color-block:hover {
  transform: scale(1.1);
  box-shadow: 0 0 12px #aaa;
}
.color-block {
  float: left;

  position: relative;
  width: 200px;
  height: 200px;
  cursor: pointer;
  border: 2px solid #fff;
  overflow: hidden;
  transition: transform 0.3s ease-in-out;

  i {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    color: #fff;
    font-size: 60px;
  }

  &:hover {
    box-shadow: 0 0 6px #fff;
  }
}
.active {
  box-shadow: 0 0 6px #fff;
}
</style>

3. 最后来到home组件调用

使用
image

切记不用再在data里面定义headerColor,不然会报错的!

  created () {
    // 刷新页面保存当前的颜色
    const headerColor = localStorage.getItem('headerColor')
    if (headerColor) {
      this.$store.commit('setHeaderColor', headerColor)
    }
  },
  computed: {
    // 通过计算属性调用
    ...mapState(['headerColor'])
  },
//样式
<style lang="scss" scoped>
.default-header {
  background-color: #409eff;
}
.red-header {
  background-color: #eb507e;
}
.green-header {
  background-color: #4bae4f;
}
.orange-header {
  background-color: #f90;
}
.purple-header {
  background-color: #9b5de5;
}
</style>

如果你想实现el-main主体部分的样式,那么用上面同样的方法,在vuex,美化页面,home组件相继加上body的代码,修改相对应的逻辑就可以使用了~

4. 效果图

image

标签:headerColor,vue2,color,element,header,ui,background,vuex,store
From: https://www.cnblogs.com/Amyel/p/17286594.html

相关文章

  • vue2 对vxe-table组件二次封装并全局引入
    要求新组件的写法要和旧组件保持一致,那么保留原本的插槽,属性,方法写法如下,以vxe-table为例组件封装<template><vxe-gridref="vxeGrid"v-bind="$attrs"v-on="$listeners"@filter-change="filterChange"><templatev-for="slotinslots......
  • ios 的UI设计
    颜色https://codershigh.github.io/guidelines/ios/human-interface-guidelines/visual-design/color/index.htmldark模式适配https://www.kodeco.com/10718147-supporting-dark-mode-adapting-your-app-to-support-dark-mode#toc-anchor-009......
  • Layui 2.8.0 正式发布,官网全新文档站朴实归来
    前言两年前Layui官网宣布了下线声明,说实话当时内心确实感慨万千毕竟这个免费为我们后端程序员提供的一个前端快熟开发框架的官网就这样下线了确实十分的惋惜,但是庆幸的是官网的下线,只是单纯一个网站自身生命周期的结束,它并不意味着Layui这样一个开源项目的停更,Layui仍然......
  • shrio QuickStart
    Shrio三大对象:   springboot整合shrio登录拦截认证创建项目时勾选web,导入依赖:<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.5.3</version></dependency>自定义一个登录页面......
  • 开源单用户客服系统源码-上传附件功能-elementui 异步上传文件【唯一客服开发商】
    之前开源的单用户客服系统,上传附件成功后,还不能展示出文件形式,今天把上传展示出文件形式给开发完善一下。我想要实现的效果是,展示出文件的名称和大小信息后端返回一个带有文件信息的json结果,前端把该信息组织一下并解析成可以展示的样子后端golang部分代码funcUploadFile(c......
  • Vue2没有`public`文件夹,该怎么建资源文件,编译后不被压缩
    在Vue2项目中,如果没有`public`文件夹,可以在项目根目录下创建一个`static`文件夹来存放静态资源文件,如JS、CSS、图片等。 如果你想在打包后不压缩JS文件,并且这个JS文件是在HTML中通过`script`标签引用的,可以按照以下步骤进行操作: 1.在`static`文件夹下创建一个`js`文件夹,并......
  • Vue2项目中,在编译打包后通过读取配置文件,任意修改接口地址
    可以按照以下步骤进行操作: 1.在项目根目录下创建一个名为`config`的文件夹,并在该文件夹下创建一个名为`index.js`的文件,用来存放配置文件,如: ```javascriptmodule.exports={  apiRoot:'http://api.example.com'}``` 这里定义了一个`apiRoot`属性,用来存放接口地......
  • 用chatgpt ui 实现 对于时间段集合中的每个时间段,检查它是否与要检查的时间段重叠或者
    以下是一个C#实现,用于确定一个时间段是否与另一个时间段集合重叠或交叉,如果有重叠或交叉则返回false。算法:传递要检查的时间段和时间段集合作为参数。对于时间段集合中的每个时间段,检查它是否与要检查的时间段重叠或者有交叉。如果有重叠或交叉,则返回false表示它们不应该......
  • 【备忘】go build 使用代理解决部分模块或依赖无法下载的问题
    1、查看go版本goversion2、如果版本为1.13及以上goenv-wGO111MODULE=ongoenv-wGOPROXY=https://goproxy.io,direct低于1.13版本$env:GO111MODULE="on"$env:GOPROXY="https://goproxy.io"......
  • BurpSuit配置浏览器代理 chrome
    1、BurpSuit配置默认代理 2、添加谷歌插件switchyomega,修改服务器和端口 打开代理,选择刚才添加的代理 3、访问http://burp/,获取证书 4、将证书添加到Chrome浏览器 5、访问任意网址,发现可以抓到包包啦~ ......