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()
相关推荐
benbenAItalk3 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
2601_962885723 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
西瓜太郎12344 小时前
Claude Code、Codex CLI、Gemini CLI 能否共用一枚 Key?先看协议选择矩阵
前端·api 网关·claude code·gemini cli·codex cli
陈随易6 小时前
在Finch用了62亿词元,我认为这是新一代Agent工具之神
前端·人工智能·后端
水域安全老周6 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
计算机魔术师7 小时前
Anthropic CEO突然喊踩刹车,OpenAI罕见力挺:AI这辆车不能只踩油门了
前端
wing987 小时前
从codex转战workbuddy使用一周的感受
前端·人工智能·后端
EatFan7 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app
梦想平凡8 小时前
百游棋牌源代码开发搭建教程(五):房间创建、座位分配与请求幂等实现
前端·javascript·数据库·源代码管理
IT_陈寒8 小时前
Redis的Set操作居然能把我的服务整挂了?
前端·人工智能·后端