记录vue2+ant-design-vue框架换肤

最近接手了个项目,要进行一个换肤,用的vue2加ant-design-vue组件,仿网上的进行写了下换肤,自己记录一下。

因为这个项目没有less,我需要下载一下,最开始下载的是版本less,然后运行报错了,就换成了指定版本:

    "less": "^2.7.2",

    "less-loader": "^5.0.0",

此框架要换肤,还要用到它: "antd-theme-generator": "^1.2.11",

然后要在man.js引入下面文件,因为我的项目是按需引入的,而且是一个单独文件,但引入方法一样.

//测试换肤
import "ant-design-vue/dist/antd.less"

引入完成后,还要在config里面进行配置这些东西

module.exports = {
    dev:{
     ...// 项目自定义的api路径  
    },
    //与dev同级别下
    css: {
     loaderOptions: {
      less: {
        // lessOptions: {   //如果less在5以上吧可能要打开此设置
          javascriptEnabled: true,    //主要是他
          //  // modifyVars: {
          //     // 初始化可直接覆盖变量
          //  //        'theme-color': '#1890FF',
          //  //},
          // 兼容 less-loader 3.x
          // math: "always",
        // }  //如果less在5以上吧可能要打开此设置
      }
     }
    },

}

我看网上生效要设置style为true,我在我的 .babelrc 文件里面把下面的style设置为了true,

依据网上的方法(Teln_小凯),然后在src目录下创建一个theme文件夹,然后按照下面展示的内容依次创建。

一:cus-theme.less文件内容如下:


.ant-layout-header {
    background-color: @header-back-color;
    .header-item:hover{
        background-color: @header-item-hover-color;
    }
}
 

二:variables.less内容如下:

//插件默认主题变量+这些变量必须在themejs里面定义好
@primary-color: #1890ff; // 全局主色
//自定义样式
@header-item-hover-color:blue;//头部项浮动颜色
@header-back-color:#1890ff;//头部底色

三:theme.js文件内容如下

const fs = require("fs");
const path = require('path');
 
 
const { generateTheme } = require('antd-theme-generator');
const options = {};
//生成的theme.less文件的位置
const outputFilePath = path.join(__dirname, '../../../static/theme.less');
//自定义样式
const cusCssFilePath = path.join(__dirname, '../cus-theme.less');
 
generateTheme({
  //node_modules中antd的路径
  antDir: path.join(__dirname, '../../../node_modules/ant-design-vue'), 
  //styles对应的目录路径,需要和下面的variables.less在一个文件夹
  stylesDir: path.join(__dirname, '../'), 
  //less变量的入口文件,variables.less里面定义的变量,必须在themeVariables里面定义
  varFile: path.join(__dirname, '../variables.less'), 
  //您要动态更改的变量列表
  themeVariables: ['@primary-color', '@header-item-hover-color', '@header-back-color'], 
  outputFilePath: outputFilePath,
  customColorRegexArray: [/^color\(.*\)$/],
})
  .then(res => {
    console.log('主题成功');
    //自定义样式与ant主题样式合并
    //读取提取过的ant样式
    const themeCss = fs.readFileSync(outputFilePath).toString();
    //读取自定义的CSS
    const cusCss = fs.readFileSync(cusCssFilePath).toString();
    fs.writeFileSync(outputFilePath, themeCss + cusCss);
    //重新覆盖themeCss
    console.log(`主题成功. OutputFile: ${outputFilePath}`)
  })
  .catch(res => {
    console.log('配置主题失败');
  });

然后要在我们的index.html里面进行配置内容

  <body>
    <div id="app"></div>

    <!--主要是下面这些内容-->
    <link rel="stylesheet/less" type="text/css" href="/static/theme.less" />
    <script>
      window.less = {
        async: false,
        env: "production",
      };
      // document.getElementById('app').style.setProperty('--color',             
      // '$store.state.headerColor')
    </script>
    <script type="text/javascript"     
      src="https://cdnjs.cloudflare.com/ajax/libs/less.js/2.7.2/less.min.js"></script>
    <!-- <script type="text/javascript" src="/static/less.min.js"></script> -->


  </body>

此时我要把启动命令换一下,主要是&&前面的命令,后面webpack~那些是项目本身的(根据项目自定义)。

    "dev": "node src/theme/js/theme.js && webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "build": "node src/theme/js/theme.js && node build/build.js"

启动项目完成后会发现在static下有个theme.less文件

如果启动报错,可能是less版本不对或者antd-theme-generator版本不对,根据项目版本可以下载对应的指定版本(npm install antd-theme-generator@1.2.11 --save),不要忘了重新npm i 一下。

为了确保在本地能够持久化,我用store和本地存储,

const state = {
    headerColor: localStorage.getItem('headerColor')  ? localStorage.getItem('headerColor') : '#474c5a',
}

mutations:{
    //测试换肤
    setHeaderColor (state, val) {
        state.headerColor = val
        localStorage.setItem('headerColor', val)
    },
},
actions: {
    updateHeaderColor (context, color) {
       context.commit('setHeaderColor', color);
    },
}

 我直接把颜色绑定到了全局上(App.vue)里面(省事)

为了求稳 然后在app.vue里面又做了监听

data(){
      return{
        color1:'#5784BC',
      }
    },
    //测试换肤
    watch:{
      "$store.state.headerColor":{
      handler(val,oldval){
        this.color1=val;
      },
      immediate:true
    },
    },

剩下的就是用颜色选择器了,这个组件我用的版本低 没有颜色选择器 为了方便,我用了elementUi的。

<div>
    <span>主题色选择:</span>
    <el-color-picker
       v-model="color1"
       @change="changeColor"
    ></el-color-picker>
</div>

  data() {
    return {
      color1:"#2F9B78",
    }
  }
//...//
methods:{

   changeColor(color) {
      this.color1 = color;
      this.$store.commit("setHeaderColor", color);
      window.less.modifyVars({
        "primary-color": localStorage.getItem("headerColor")
          ? localStorage.getItem("headerColor")
          : color,
        //或者这样写也行 "primary-color":this.$store.state.headerColor,
        "header-item-hover-color": localStorage.getItem("headerColor")
          ? localStorage.getItem("headerColor")
          : color,
        "header-back-color": localStorage.getItem("headerColor")
          ? localStorage.getItem("headerColor")
          : color,
      });
      this.$message.success("配置成功")
    },

}

此时此刻我发现可以完成换肤了,但这是老项目,本身没有增加这个功能,之前颜色都是写死的,我找到了我项目中的base.css文件(相当于全局文件吧),把一些字体颜色什么换成了var(--color)。

然后我在界面写入颜色的时候用的动态:var(--color),比如 color:var(--color);

看着网上的一些方法进行编写,然后报错了进行依次处理,就这样完成了。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Vue3中使用Ant Design Vue的样式,可以按照以下步骤进行操作: 1. 首先,在你的项目中安装Ant Design Vue组件库。你可以通过npm或者yarn进行安装,具体的安装命令可以在Ant Design Vue的官方文档中找到。 2. 在你的Vue组件中引入Ant Design Vue的样式文件。你可以在组件所在的Vue文件中使用import语句引入Ant Design Vue的样式文件。 例如,在你的Vue文件中添加以下代码: ```javascript <style lang="less" scoped> @import '~ant-design-vue/dist/antd.less'; </style> ``` 这将会导入Ant Design Vue的样式文件,并使它只在当前组件中生效。 3. 接下来,你可以根据需要自定义你的组件样式。你可以在style标签中使用普通的CSS语法来定义和修改组件的样式。 例如,你可以在style标签中添加以下代码来自定义一个按钮组件的样式: ```javascript <style lang="less" scoped> .my-button { border-radius: 10px; } </style> ``` 这将会给按钮组件添加一个圆角为10px的边框样式。 通过以上步骤,你就可以在Vue3中使用Ant Design Vue的样式了。记得按照官方文档中的指引导入需要的组件,并在模板中使用它们。如果你需要更多示例和帮助,可以参考官方文档或者Ant Design Vue的开源项目。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue3+ant design vue+ts实战【ant-design-vue组件库引入】](https://blog.csdn.net/XSL_HR/article/details/127396384)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [vue3+ant-design-vue按需加载组件](https://blog.csdn.net/qq_42263570/article/details/130143934)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vue3+element-plus的后台管理系统模板 和 vue3+ant-design-vue的后台管理系统模板](https://blog.csdn.net/qq_61233877/article/details/131008600)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毅争晨夕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值