Arco Design的主题切换

vite@5.4.10
@arco-design/web-vue@2.56.3

打包工具更改变量值

想通过打包工具替换样式变量, 发现按照官网写了都没有生效。(其实是看漏了说明)

// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import config from './config'
const { port } = config
import path from 'path'

// https://vite.dev/config/
export default defineConfig({
  plugins: [vue()],
  server: {
    host: '0.0.0.0',
    port
  },
  css: {
    preprocessorOptions: {
      less: {
        modifyVars: {
          'arcoblue-6': '#ff0000'  // 对应的变量在node_model里,官方有说明
        },
        javascriptEnabled: true,
      }
    }
  },
  resolve: {
    alias: {
      '@src': path.resolve(__dirname, './src')
    }
  }
})

必须先引用样式, 可以在一个less文件里引入官方的less文件(官方-定制主题)有说明

// main.ts
...
import '@arco-design/web-vue/dist/arco.less' // 需要引入才能在打包的时候更改变量
....

使用变量( 变量用于改变原来组件的样式 )

// xxx.vue
<style scoped lang="less">
.abc {
  background: rgb(var(--arcoblue-6))
}
</style>

用颜色选择器更新主题色

<a-tooltip content="更改主题色">
   <a-color-picker v-model="color" size="mini" @change="handlerEditTheme">
     <a-button
       class="nav-btn"
       type="outline"
       shape="circle"
     >
       <template #icon>
         <icon-bulb />
       </template>
     </a-button>
   </a-color-picker>
 </a-tooltip>

我的写在右上角导航条里,所以有别的标签包括,正常只需要一个颜色选择器,看着官网的方法监听change变化,拿到change的颜色值
官方小伙伴给出的方法, 注意这里要安装vueuse hook方法

import { useDebounceFn } from '@vueuse/core';
import { generate, getRgbStr } from '@arco-design/color';
/**
 * 切换主题色
 */
export default function useColorTheme() {
  const createStyleString = (color, dark?: boolean) => {
    const hexList = generate(color, { list: true, dark })
    return hexList
      .map((hex, i) => {
        const rgb = getRgbStr(hex);
        return `--primary-${i + 1}: ${rgb}; --arcoblue-${i + 1}: ${rgb};`
      })
      .join('')
  };
  /**
   * 更新主题色
   * @param color 主题色
   */
  const updateThemeColor = useDebounceFn(color => {
    const style = createStyleString(color)
    const darkStyle = createStyleString(color, true)
    const customStyle = `
      body{${style}}
      body[arco-theme='dark'] {${darkStyle}}
    `
    injectStyle(customStyle)
  }, 10)
  /**
   * 注入样式
   * @param styleText 样式字符串
   */
  const injectStyle = (styleText: string) => {
    const oldStyle = document.getElementById('theme-color')
    if (oldStyle) {
      oldStyle.innerHTML = styleText
    } else {
      const style = document.createElement('style')
      style.id = 'theme-color'
      style.innerHTML = styleText
      document.head.appendChild(style)
    }
  };
  return {
    injectStyle,
    updateThemeColor
  };
}
// xxx.vue
...
// 引入js方法
import updateTheme from '@src/utils/theme.ts'
const { updateThemeColor } = updateTheme()
const color = ref('#165DFF')

// 颜色选择器的监听事件
const handlerEditTheme = () => {
  updateThemeColor(color.value)
}

有更好的方法欢迎留言讨论~
在这里插入图片描述
在这里插入图片描述

<think>嗯,用户之前问了关于Avue的内容,现在又问View Design,我需要先确认View Design是什么。我记得View Design是一个基于Vue的UI组件库,可能和iView有关系。之前的回答结构是分核心定位、功能、技术栈、对比、安装、适用场景等,这次也应该保持类似的结构,确保一致性。 首先,用户可能是在比较不同的Vue UI框架,比如Avue和View Design,或者想了解更多的项。需要明确View Design的定位,它和Element UI、Ant Design的区别在哪里。要检查技术栈,比如是否支持Vue 2或3,依赖的库有哪些。 然后,要注意用户可能关心的点:组件丰富性、主题定制、文档是否完善,是否有企业级应用的支持。可能还需要对比其他类似库,比如Element UI和Ant Design Vue,突出View Design的特点,比如设计语言、国际化支持等。 另外,用户可能对如何开始使用感兴趣,所以需要提供安装命令和基本示例。还要注意版本问题,比如Vue 2和Vue 3的不同安装方式,避免混淆。需要确认官方文档链接是否正确,避免给出过时的信息。 可能用户是中后台系统的开发者,寻找合适的UI框架,所以适用场景部分要强调企业级应用、管理后台等。注意事项部分需要提到设计风格是否符合项目需求,以及按需加载的方法,减少包体积。 最后,确保回答结构清晰,分点说明,使用表格对比,代码示例正确,符合之前的格式要求。检查是否有遗漏的重要信息,比如是否开源、社区活跃度等,但如果没有明确资料,可能不需要涉及。保持语言简洁,技术点准确。</think>以下是关于 **View Design** 的详细介绍: --- ### 一、核心定位 $$ \text{View Design = Vue + 企业级设计语言 + 高定制性} $$ View Design 是一套基于 **Vue.js** 的企业级 UI 组件库,注重设计规范与开发体验,适用于中后台管理系统和复杂业务场景。 --- ### 二、技术背景 - **前身关系**:由知名 Vue 组件库 **iView** 升级而来(现 iView 4.x 版本更名为 View Design) - **设计语言**:遵循 [Arco Design](https://arco.design/) 风格(字节跳动团队设计体系),强调清晰、现代、实用 - **兼容性**:支持 **Vue 2.6+** 和 **Vue 3.x**(需择对应版本) --- ### 三、核心功能 1. **丰富组件** - 基础组件:`Button`, `Table`, `Form`, `Modal` 等 - 高级组件:`Upload`(支持分片上传)、`Tree`(动态加载节点)、`Split`(面板分割)、`ColorPicker` - 数据可视化:集成 `Chart` 图表组件(基于 G2Plot) 2. **设计系统集成** - 提供全局主题配置工具(通过 CSS 变量动态修改主题色、间距等) - 内置暗黑模式一键切换 - 示例代码: ```vue <ConfigProvider :theme="darkTheme"> <Button type="primary">暗黑模式按钮</Button> </ConfigProvider> ``` 3. **企业级特性** - 国际化:支持中英文切换 - 无障碍(A11Y):符合 WCAG 2.0 标准 - TypeScript 类型支持 --- ### 四、技术栈与生态 | 依赖/工具 | 说明 | |--------------------|-------------------------------------| | Vue 2.x / 3.x | 需根据项目版本择对应 View Design 版本 | | Less / Sass | 默认使用 Less 预处理样式 | | Vue Router / Pinia | 无缝兼容主流路由和状态管理库 | | Vite / Webpack | 支持现代构建工具 | --- ### 五、与同类库对比 | 特性 | View Design | Element Plus | Ant Design Vue | |--------------------|---------------------|--------------------|--------------------| | **设计风格** | 现代简约 | 中性扁平 | 蚂蚁金服企业风 | | **Vue 3 支持** | ✅ | ✅ | ✅ | | **主题定制** | CSS 变量 + 工具生成 | SCSS 变量覆盖 | CSS 变量 | | **图表集成** | 内置 G2Plot | 需单独引入 ECharts | 需单独引入 AntV | --- ### 六、安装与使用 1. **安装命令** ```bash # Vue 2 项目 npm install view-design --save # Vue 3 项目 npm install view-ui-plus --save ``` 2. **基础示例** ```vue <template> <Table :columns="columns" :data="data"></Table> </template> <script> import { Table } from 'view-design'; // Vue 2 // import { Table } from 'view-ui-plus'; // Vue 3 export default { components: { Table }, data() { return { columns: [{ title: 'Name', key: 'name' }], data: [{ name: 'John' }] }; } }; </script> ``` 3. **文档资源** - 官方文档:[https://view-design.iviewui.com](https://view-design.iviewui.com) - GitHub:[https://github.com/view-design/ViewDesign](https://github.com/view-design/ViewDesign) --- ### 七、适用场景 - **企业级管理系统**:如 CRM、ERP 等复杂交互场景 - **数据可视化平台**:内置图表与表格联动能力 - **统一设计规范项目**:需严格遵循设计体系的团队 --- ### 八、注意事项 1. **设计适配**:若项目已有 UI 规范,需评估与 View Design 风格的兼容性 2. **按需加载**:推荐使用 `babel-plugin-import` 优化打包体积 3. **版本区分**:Vue 2 使用 `view-design`,Vue 3 使用 `view-ui-plus`,两者 API 略有差异 如果需要兼顾设计规范统一与开发灵活性,View Design 是一个值得尝试的择!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值