位置: 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?(你要和我一起爬山吗)

  • 计提坏账为什么是递延所得税资产
  • 个体工商户可以开发票吗
  • 电子税务局附加税带不出来
  • 国家税务总局操作指引
  • 一般纳税人销售二手车
  • 跨月冲红的发票怎么做会计分录
  • 视同内销补税的财务处理
  • 母公司为子公司担保需要股东会决议吗
  • 索赔费用项目
  • 研发支出的材料费
  • 长期投资包括哪些会计科目
  • 进项抵欠税相关政策
  • 将产品转为本企业使用
  • 支付单位结算卡年费计入什么科目
  • 对公网银支付方式可以选哪些
  • 企业无法收回的账款
  • 建筑工程的适用范围
  • 旧房转让土地增值税计算
  • 试运营和正式运营间隔
  • 服务型企业管理体系
  • 个人独资企业股权能出让吗
  • 母公司从子公司借款有何风险
  • 购金蝶软件记什么科目
  • 承兑汇票属于现金支付吗
  • 1697511073
  • 银行定期存款转存
  • 股息红利纳税义务发生地
  • 如何清理插件残留
  • 计算机网络默认网关什么意思
  • deepin 20 wifi
  • 支付宝花呗服务升级有什么用
  • 主营业务收入发票
  • macos big sur卡在
  • 苹果官网
  • 期初留存收益是什么科目
  • 年终结算增值税怎么算
  • wgcore.dll是什么文件夹
  • php面向对象面试题
  • source map
  • 销售费用可以开专票吗
  • chattr i
  • 公司购买家电开什么发票
  • 预收款预缴增值税如何核算的
  • python动态数据类型
  • python并发和并行
  • mac os x10.9.5
  • 织梦模板官网
  • 农民专业合作组织法律制度的类型包括哪些?
  • 应税货物及劳务 增加
  • 通讯补贴计入个税吗
  • 税务处理决定书和处罚决定书
  • 小微企业季度收入
  • 一般纳税人认定标准2023年
  • 计提的管理费用要结转吗
  • 营改增后土地出让增值税
  • 企业发行债券的优点有哪些
  • 股份支付应如何进行账务处理?
  • 公司对公账户没钱了辞退员工
  • 固定资产 金额
  • 企业防止股权收益的措施
  • 企业所有者权益在数量上等于
  • 子公司利润母公司还有其他方式吗
  • 加油费不征税发票可以报销吗
  • 普通发票如何抵扣税
  • 销项负数发票怎么冲减成本
  • 利润表的编制方法和步骤实操
  • mac输入特殊字符
  • scardsvr32.exe - scardsvr32是什么进程 有什么用
  • npscheck.exe - npscheck是什么进程 有什么用
  • Win10 Mobile/PC/HoloLens一周年更新14389曝光
  • cocos2dx4.0教程
  • win10自带终端
  • Python HTTP客户端自定义Cookie实现实例
  • jquery自定义的方法有哪些
  • nodejs创建项目
  • android获取设备输出声音
  • 电子税务局可以开纸质发票吗
  • 银行缴纳印花税存在问题和建议
  • 一般纳税人开具的增值税普通发票和专用发票的区别
  • 养猪场环保税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设