webpack-theme-color-replacer+elementui自定义配置主题色

webpack-theme-color-replacer原理是通过获取到配置数组里的颜色值,在触发换色方法时,elementui使用的颜色值存在与配置表中颜色一致的颜色,则改颜色会被替换成新的颜色值。

若是自定义的css文件,需要配置css文件路径

若是需要修改除主题色外的颜色,则配置颜色数组需传入对应的默认色,在触发修改颜色方法前,通过将主题色的十六进制转为RGBA,然后通过规律加减颜色通道生成其它色,位置需要一一对应

一、安装webpack-theme-color-replacer

复制代码
npm install ---save webpack-theme-color-replacer

二、在vue.config.js配置

javascript 复制代码
const ThemeColorReplacer = require("webpack-theme-color-replacer");
const forElementUI = require("webpack-theme-color-replacer/forElementUI");
const { defineConfig } = require("@vue/cli-service");
module.exports = defineConfig({
  transpileDependencies: true,
  chainWebpack: config => {
    // 自定义换肤
    config
      .plugin("webpack-theme-color-replacer")
      .use(ThemeColorReplacer)
      .tap(options => {
        const matchColors = []
        const data = ['#409eff']//这里可传入多个颜色,后续匹配到的会同步修改
        data.forEach(item => {
          matchColors.push(...forElementUI.getElementUISeries(item))
        })
        options[0] = {
          fileName: "css/theme-colors-[contenthash:8].css",
          matchColors,
          changeSelector: forElementUI.changeSelector,
          //项目其它css文件,存在与主题色一样的颜色也会更改,否则不会改变
          externalCssFiles: ["./src/assets/css/index.css"],
          isJsUgly: process.env.NODE_ENV !== "development"
        };
        return options;
      });
  }
});

三、创建utils/thems.js

javascript 复制代码
import client from "webpack-theme-color-replacer/client";
import forElementUI from "webpack-theme-color-replacer/forElementUI";

export let curColor = "#409eff";

// 动态切换主题色
export function changeThemeColor(newColor) {
  const options = {
    newColors: [...forElementUI.getElementUISeries(newColor)]
  };
  return client.changer.changeColor(options, Promise).then(t => {
    curColor = newColor;
    localStorage.setItem("theme_color", curColor);
  });
}

export function initThemeColor() {
  const savedColor = localStorage.getItem("theme_color");
  if (savedColor) {
    curColor = savedColor;
    changeThemeColor(savedColor);
  }
}

四、组件中使用

javascript 复制代码
 <el-color-picker v-model="mainColor" size="small" @change="changeColor"></el-color-picker>


<script>
import Vue from "vue";
import { ColorPicker } from "element-ui";
import { changeThemeColor, curColor } from "./utils/thems.js";
Vue.use(ColorPicker);
export default {
  name: "App",
  data() {
    return {
      mainColor: curColor
    };
  },
  methods: {
    changeColor(newColor) {
      changeThemeColor(newColor).then(t => {
        console.log("t: ", t);
      });
    }
  }
};
</script>

五、项目加载时,使用上次修改后的主题色

javascript 复制代码
//main.js
import { initThemeColor } from './utils/theme.js'
initThemeColor()
相关推荐
其美杰布-富贵-李4 分钟前
03 ref、reactive 与 computed 响应式数据
前端·javascript·vue.js
OpenTiny社区6 分钟前
GenUI SDK v1.3.0 发布|多框架兼容,一键换物料,渲染器 & 演练场全面增强!
前端·ai编程
用户938515635078 分钟前
useRef + Web Worker 实战:React 如何优雅地拥抱多线程
前端·javascript·react.js
他们叫我秃子30 分钟前
前端开发转 Go 全栈(五):终于遇到熟人了,Go 的闭包和高阶函数原来这么像 JavaScript
前端·后端·go
用户615958680002233 分钟前
从 0 写一个迷你 wujie:用原生 Web API 实现微前端
前端
妙码生花33 分钟前
从 PHP 到 AI + Golang,程序员自救转型手记(五十七):AI时代对组件封装的新理解、agInput 统一入口,动态表单预备
前端·后端·go
fairyly34 分钟前
接手新项目不用硬啃源码,我的 TRAE Work 快速上手实战工作流
前端·ai编程·trae
搬砖记录员35 分钟前
用 PyAutoGUI 手搓录屏"老板键":从原理到四套可跑源码,附工程化落地思考
前端
windliang35 分钟前
Claude Code 源码分析(七):Skill 如何进入 Agent
前端·人工智能·面试
栀鸢ouo36 分钟前
《Vue 3 实现多主题切换和自定义主题》
前端