位置: IT常识 - 正文

使用vue-antd动态切换主题(vue 动态tab)

编辑:rootadmin
这篇文章主要介绍了使用vue-antd动态切换主题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教 目录

推荐整理分享使用vue-antd动态切换主题(vue 动态tab),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:ant design vue 动态菜单,antd-vue-pro,vue中如何实现动态组件,ant design vue 动态菜单,antd vue pro 动态路由,antd vue pro 动态路由,antd vue pro 动态路由,antd vue pro 动态路由,内容如对您有帮助,希望把文章链接给更多的朋友!

vue-antd动态切换主题安装依赖Vue3.0 + Antd,修改antd主题色,配置全局cssvue-antd动态切换主题安装依赖1 webpack-theme-color-replacer: yarn add webpack-theme-color-replacer@1.3.222 less: yarn add less@2.7.23 less-loader: yarn add less-loader@7.0.2

在vue.config.js中加入配置

const createThemeColorReplacerPlugin = require("./plugin.config");const vueConfig = {  css: {    loaderOptions: {      less: {        lessOptions: {          modifyVars: {             //注意:此处不能给默认值,否则会导致主题色动态配置失败            // less vars,customize ant design theme            //'primary-color': '#2f54eb',            //'link-color': '#2f54eb',            //'border-radius-base': '4px'          },          // DO NOT REMOVE THIS LINE          javascriptEnabled: true,        },      },    },  },  configureWebpack: {    plugins: [createThemeColorReplacerPlugin()],  },  assetsDir: "static",};module.exports = vueConfig;

添加主题色更改方法,新建util文件夹创建plugin.config.js

const ThemeColorReplacer = require('webpack-theme-color-replacer')const generate = require('@ant-design/colors/lib/generate').defaultconst getAntdSerials = (color) => {  // 淡化(即less的tint)  const lightens = new Array(9).fill().map((t, i) => {    return ThemeColorReplacer.varyColor.lighten(color, i / 10)  })  const colorPalettes = generate(color)  const rgb = ThemeColorReplacer.varyColor.toNum3(color.replace('#', '')).join(',')  return lightens.concat(colorPalettes).concat(rgb)}const themePluginOption = {  fileName: 'css/theme-colors-[contenthash:8].css',  matchColors: getAntdSerials('#1890ff'), // 主色系列  // 改变样式选择器,解决样式覆盖问题  changeSelector (selector) {    switch (selector) {      case '.ant-calendar-today .ant-calendar-date':        return ':not(.ant-calendar-selected-date):not(.ant-calendar-selected-day)' + selector      case '.ant-btn:focus,.ant-btn:hover':        return '.ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger),.ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger)'      case '.ant-btn.active,.ant-btn:active':        return '.ant-btn.active:not(.ant-btn-primary):not(.ant-btn-danger),.ant-btn:active:not(.ant-btn-primary):not(.ant-btn-danger)'      case '.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon':      case '.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon':        return ':not(.ant-steps-item-process)' + selector      case '.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-item-open,.ant-menu-horizontal>.ant-menu-item-selected,.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-submenu-active,.ant-menu-horizontal>.ant-menu-submenu-open,.ant-menu-horizontal>.ant-menu-submenu-selected,.ant-menu-horizontal>.ant-menu-submenu:hover':      case '.ant-menu-horizontal > .ant-menu-item-active,.ant-menu-horizontal > .ant-menu-item-open,.ant-menu-horizontal > .ant-menu-item-selected,.ant-menu-horizontal > .ant-menu-item:hover,.ant-menu-horizontal > .ant-menu-submenu-active,.ant-menu-horizontal > .ant-menu-submenu-open,.ant-menu-horizontal > .ant-menu-submenu-selected,.ant-menu-horizontal > .ant-menu-submenu:hover':        return '.ant-menu-horizontal > .ant-menu-item-active,.ant-menu-horizontal > .ant-menu-item-open,.ant-menu-horizontal > .ant-menu-item-selected,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item:hover,.ant-menu-horizontal > .ant-menu-submenu-active,.ant-menu-horizontal > .ant-menu-submenu-open,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-selected,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu:hover'      case '.ant-menu-horizontal > .ant-menu-item-selected > a':      case '.ant-menu-horizontal>.ant-menu-item-selected>a':        return '.ant-menu-horizontal:not(ant-menu-light):not(.ant-menu-dark) > .ant-menu-item-selected > a'      case '.ant-menu-horizontal > .ant-menu-item > a:hover':      case '.ant-menu-horizontal>.ant-menu-item>a:hover':        return '.ant-menu-horizontal:not(ant-menu-light):not(.ant-menu-dark) > .ant-menu-item > a:hover'      default :        return selector    }  }}const createThemeColorReplacerPlugin = () => new ThemeColorReplacer(themePluginOption)module.exports = createThemeColorReplacerPlugin

添加util.js文件

import client from "webpack-theme-color-replacer/client";import generate from "@ant-design/colors/lib/generate";function getAntdSerials(color) {  // 淡化(即less的tint)  const lightens = new Array(9).fill().map((t, i) => {    return client.varyColor.lighten(color, i / 10);  });  // colorPalette变换得到颜色值  const colorPalettes = generate(color);  const rgb = client.varyColor.toNum3(color.replace("#", "")).join(",");  return lightens.concat(colorPalettes).concat(rgb);}function changeColor(newColor) {  var options = {    newColors: getAntdSerials(newColor), // new colors array, one-to-one corresponde with `matchColors`    changeUrl(cssUrl) {      return `/${cssUrl}`; // while router is not `hash` mode, it needs absolute path    },  };  return client.changer.changeColor(options, Promise);}export default {  updateTheme(newPrimaryColor) {    const hideMessage = () => console.log("正在切换主题!", 0);    changeColor(newPrimaryColor).finally((t) => {      setTimeout(() => {        hideMessage();      });    });  },};

然后在main.js中引入为Vue原型prototype中的方法

import utils from "./utils"Vue.prototype.$u = utils//注意antd样式的引入必须由css改为less引入- import 'ant-design-vue/dist/antd.css';+ import 'ant-design-vue/dist/antd.less';

然后项目启动起来后调用Vm.$u.updateTheme方法即可动态改变主题色。

注意该方法传值必须传十六进制的颜色,如果传颜色对应的英文字符可能会出错.

使用vue-antd动态切换主题(vue 动态tab)

如果自定义组件或者元素也需要统一管理主题色,则在assets目录新建main.less

@import "~ant-design-vue/dist/antd.less";#home {  color: @primary-color;}

在main.less中引入antd的样式,然后antd的主题色是@primary-color, 直接使用即可

然后在main.js中直接引入main.less

- import 'ant-design-vue/dist/antd.less';+ import "./assets/css/main.less"Vue3.0 + Antd,修改antd主题色,配置全局css

1.在vue.config.js里修改配置

module.exports = {  css: {    loaderOptions: {      less: {        lessOptions: {          modifyVars: {            'primary-color': '#3d62ff',// 修改全局主题色          },          javascriptEnabled: true,        },      },    },    extract: true, // 解决开发模式,打包时未提取CSS的问题  }}

2.把main.ts中的import ‘ant-design-vue/dist/antd.css’;

修改为 import ‘ant-design-vue/dist/antd.less’;

修改css为less的时候,会报错 .bezierEasingMixin()

解决方法是:先卸载less-loader

npm uninstall -D less-loader

再安装less-loader@6.0.0

npm install -D less-loader@6.0.0

然后重新运行项目即可

以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。

本文链接地址:https://www.jiuchutong.com/zhishi/304790.html 转载请保留说明!

上一篇:phpcms上传不了图片怎么办(php实现上传图片功能)

下一篇:一起爬山吗?《隐秘的角落》为什么译成Cat's Cradle?(你要和我一起爬山吗)

  • 该内存不能为read什么意思(该内存不能为read)(拓展内存怎么关)

    该内存不能为read什么意思(该内存不能为read)(拓展内存怎么关)

  • wps文档怎么解除加密(wps文档怎么解除密码2018)

    wps文档怎么解除加密(wps文档怎么解除密码2018)

  • 小米超级省电模式在哪(小米超级省电模式会自动关闭吗)

    小米超级省电模式在哪(小米超级省电模式会自动关闭吗)

  • 微信跑步怎么打开(微信跑步怎么打不开了)

    微信跑步怎么打开(微信跑步怎么打不开了)

  •  淘宝搜索发现怎么删除(淘宝搜索发现和历史搜索)

    淘宝搜索发现怎么删除(淘宝搜索发现和历史搜索)

  • ipad a1599是什么机型(ipad a1599是ipad几)

    ipad a1599是什么机型(ipad a1599是ipad几)

  • 自己家的网络为什么拒绝接入(自己家的网络为什么显示无法加入)

    自己家的网络为什么拒绝接入(自己家的网络为什么显示无法加入)

  • 华为mate30上面显示的hd(华为mate30上面有个圆圈怎么去掉)

    华为mate30上面显示的hd(华为mate30上面有个圆圈怎么去掉)

  • vivo属于哪个公司旗下(vivo属于什么公司)

    vivo属于哪个公司旗下(vivo属于什么公司)

  • 华为mate30是什么屏幕(华为mate30算什么级别的手机)

    华为mate30是什么屏幕(华为mate30算什么级别的手机)

  • 手机qq好友怎么分类(手机qq好友怎么恢复删除掉的好友)

    手机qq好友怎么分类(手机qq好友怎么恢复删除掉的好友)

  • 手机上怎么查驾照分(手机上怎么查驾驶证真假)

    手机上怎么查驾照分(手机上怎么查驾驶证真假)

  • 手机无故震动是为什么(手机无辜震动)

    手机无故震动是为什么(手机无辜震动)

  • 手机数据线一般多长(手机数据线一般是多长)

    手机数据线一般多长(手机数据线一般是多长)

  • 计算机上的off键是什么键(计算机上的off键是开机键吗)

    计算机上的off键是什么键(计算机上的off键是开机键吗)

  • 淘宝联合登录怎么解除(淘宝联合登录怎么关闭)

    淘宝联合登录怎么解除(淘宝联合登录怎么关闭)

  • 拼多多订单如何备注(拼多多订单如何隐藏让自己看不见)

    拼多多订单如何备注(拼多多订单如何隐藏让自己看不见)

  • 怎么当淘宝卖家(怎么当淘宝卖家赚钱)

    怎么当淘宝卖家(怎么当淘宝卖家赚钱)

  • 荣耀系统和华为系统有什么不同(荣耀系统和华为鸿蒙系统有什么不同)

    荣耀系统和华为系统有什么不同(荣耀系统和华为鸿蒙系统有什么不同)

  • 华为p30pro怎么关闭后台运行(华为p30pro怎么关闭步数显示)

    华为p30pro怎么关闭后台运行(华为p30pro怎么关闭步数显示)

  • Windows 10如何调整鼠标指针大小(windows10如何调出虚拟键盘)

    Windows 10如何调整鼠标指针大小(windows10如何调出虚拟键盘)

  • 电脑睡眠唤醒教程(电脑睡眠唤醒教程视频)

    电脑睡眠唤醒教程(电脑睡眠唤醒教程视频)

  • 青龙面板拉库命令大全最新【2022-10-13】(青龙面板拉库命令)

    青龙面板拉库命令大全最新【2022-10-13】(青龙面板拉库命令)

  • 基姆湖上的淑女岛,德国巴伐利亚州 (© Malorny/Getty Images)(慕尼黑基姆湖)

    基姆湖上的淑女岛,德国巴伐利亚州 (© Malorny/Getty Images)(慕尼黑基姆湖)

  • 织梦二次开发调用指定模型自定义字段值的文章列表(织梦二次开发教程)

    织梦二次开发调用指定模型自定义字段值的文章列表(织梦二次开发教程)

  • 公司刚成立没有收入但是有支出怎么记账
  • 中小型企业营业额和从业人数
  • 固定资产投资会计处理
  • 所得税汇算清缴分录怎么做
  • 固定资产计提折旧的原则
  • 房屋评估价格是否含增值税
  • 房租收入应该计入什么会计科目
  • 企业职工福利费标准是什么
  • 挂靠工程的所得税账务处理怎么做?
  • 工资扣款的规定
  • 企业什么税可以退
  • 质保金的税务处理
  • 核定征收的企业需要做账吗
  • 股权转让涉及的印花税
  • 经营活动现金流量净额
  • 金融企业贷款损失准备金
  • 天然气税费
  • 公司备用金可以取多少
  • 租房合同开发票的金额要和合同一致吗
  • 转正工资差额什么意思
  • 计提减值的固定资产处置
  • 申报附加专项扣除
  • 期末留抵税额可以冲减欠税吗
  • 公司收到保险公司赔款
  • 差额承兑汇票办法规定
  • 应付账款周转天数长对企业的影响
  • 其他综合收益的来源
  • 现金流量表的作用和意义
  • 隐藏在草丛里
  • php socket_create
  • php代码报错
  • 增值税发票怎么抵税
  • dl.php怎么打开
  • Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(一)
  • 认识数据库思维导图
  • 帝国cms视频教程
  • php框架是干什么的
  • 帝国cms建站教程
  • mongodb安装教程图解
  • mongodb开启
  • 职工福利费允许扣除比例
  • java怎么用mysql
  • 汇算清缴职工教育经费
  • 残保金操作流程
  • 预收账款年底是不是不能有余额
  • 事业单位研究开设的课题
  • 存根联明细怎么申报
  • 临时账户名称是什么意思
  • 原始凭证分类的依据有什么
  • 个税和社保有什么区别
  • 预付账款属于资产项目吗
  • 主营业务收入是含税还是不含税
  • 企业所得税收入是含税还是不含税
  • 管理费用和财务费用属于什么科目
  • 固定资产是指什么
  • 工业企业外购材料采购成本包括
  • MySQL 5.6 中TIMESTAMP with implicit DEFAULT value is deprecated错误
  • sql差异备份数据库怎么还原
  • Mysql inner join on的用法实例(必看)
  • 微软2016是window多少
  • windows10安装教程u盘安装
  • win7自带播放器怎么打开
  • docker mysql 数据存储容器目录
  • u盘安装启动盘
  • 主板各个系列详解
  • win8系统怎么设置开机启动项
  • linux 使用技巧
  • python2.7安装numpy
  • js中eval函数是干嘛的
  • unix中创建新文件
  • 使用权资产
  • 批处理保存文件
  • python中的__dict__
  • dom方法总结
  • time模块 python
  • 环保税要求标注什么
  • 车船税补办
  • 税务局直属机构
  • 草地耕地占用税征收标准
  • 供给侧改革什么样的劳动力
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设