/* eslint-disable */
// 设置文件
import setting from "@/setting.js"; const themeList = setting.theme.list; export default {
namespaced: true,
state: {
// 主题
list: themeList,
// 现在激活的主题 这应该是一个名字 不是对象
activeNumber: 0,
activeName: setting.theme.list[0].name
},
actions: {
/**
* @description 激活一个主题
* @param {Object} state vuex state
* @param {String} themeValue 需要激活的主题名称
*/
set({ state, commit, dispatch }, activeNumber) {
return new Promise(async resolve => {
// 检查这个主题在主题列表里是否存在
if (activeNumber < state.list.length) {
state.activeNumber = activeNumber;
state.activeName = state.list[activeNumber].name;
}
// 将 vuex 中的主题应用到 dom
commit("dom");
// 持久化
await dispatch(
"cptwebsite/db/set",
{
path: "theme.activeName",
value: state.activeName,
user: false
},
{ root: true }
);
// end
resolve();
});
},
/**
* @description 从持久化数据加载主题设置
* @param {Object} state vuex state
*/
load({ state, commit, dispatch }) {
return new Promise(async resolve => {
// store 赋值
let activeName = await dispatch(
"cptwebsite/db/get",
{
path: "theme.activeName",
defaultValue: state.activeName,
user: false
},
{ root: true }
); // 检查这个主题在主题列表里是否存在
const _index = state.list.findIndex(e => e.name === activeName);
if (_index > -1) {
state.activeNumber = _index;
state.activeName = activeName;
} else {
// 持久化
await dispatch(
"cptwebsite/db/set",
{
path: "theme.activeName",
value: state.activeName,
user: false
},
{ root: true }
);
}
// 将 vuex 中的主题应用到 dom
commit("dom");
// end
resolve();
});
}
},
mutations: {
/**
* @description 将 vuex 中的主题应用到 dom
* @param {Object} state vuex state
*/
dom(state) {
document.body.className = `theme-${state.activeName}`;
}
}
};

  

import { mapState } from 'vuex'
export default {
computed: {
...mapState('cptwebsite/theme', ['activeName'])
},
created () {
this._getLess()
},
methods: {
_getLess () {
return require(`@/assets/styles/theme/${this.activeName}/index.less`)
},
_getImage (filepath, filename) {
return require(`@/assets/templates/${this.activeName}/images/${filepath}/${filename}`)
},
_getPublicImage (filepath, filename) {
return require(`@/assets/images/${filepath}/${filename}`)
}
},
watch: {
activeName () {
this._getLess()
}
}
}

  

vue 换肤的更多相关文章

  1. vue+ element 动态换肤

    转至 https://www.cnblogs.com/dengqichang/p/10364455.html 一.搭建好项目的环境. 二.根据ElementUI官网的自定义主题(http://elem ...

  2. vue 中使用sass实现主体换肤

    有如下代码要实现换肤功能 <template> <div class="app-root" :class="themeClass"> & ...

  3. vue中利用scss实现整体换肤和字体大小设置

    一.前言 利用Sass预处理实现换肤和字体大小调整. 思路及达到的效果:字体大小的适配使用window.devicePixelRatio的值和需要调整的差量进行控制.页面初始化是的字体适配可以根据de ...

  4. vue+less换肤,主题切换方案

    新的项目对于客户自定义要求很高,然后换肤是其中一个很小的模块,经过了一段时间的摸索,看了许多文章,找到了几种方案. https://www.cnblogs.com/leiting/p/11203383 ...

  5. vue自定义switch开关,使用less支持换肤

    实际项目用到了,记录一下,也方便以后使用,这样也可以避免为了使用一个switch,引入整个外部web框架: 也可以方便更好的理解是和使用less. 基础代码使用的是网上的,然后自己添加了less换肤, ...

  6. vue2.0-基于elementui换肤[自定义主题]

    0. 直接上 预览链接 vue2.0-基于elementui换肤[自定义主题] 1. 项目增加主题组件 在项目的src/components下添加skin文件夹 skin文件获取地址 2. 项目增加自 ...

  7. element-ui 动态换肤

    1.在安装好 element-ui@2.x 以后,首先安装sass-loader npm i sass-loader node-sass -D 2.安装 element-theme npm i ele ...

  8. vue-基于elementui换肤

    思路: 生成不同的css颜色文件,每个文件内部命名前加上.custom-颜色值做命名空间. 然后app.vue里引入全部的颜色文件. 用户点击某颜色,就在body加上class:custom-00a5 ...

  9. 基于webpack4+vue-cli3项目的换肤功能

    起因 最近因公司需求,需要实现主题换肤功能,不仅仅是颜色的更改,还需要包括图片,字体等文件等更换,因此在百度里各种实现方案后,决定根据scss+style-loader/useable做换肤. 项目开 ...

随机推荐

  1. BigDecimal常用的加减乘除算法、比较大小、不展示多余的零、保存两位小数点

    项目中涉及到了BigDecimal的加.减.乘.比较大小.精确度的问题.所以在此总结一下,方便以后复习. //加法 BigDecimal coins = new BigDecimal("0& ...

  2. Hbuilder用自有证书打包 ios App上架AppStore流程

    最近在用Hbuilder做跨平台开发,经过一番研究终于在苹果商店上架成功了一款产品!这款产品就很简单,直接用hbuilder打包好,然后上传到商店即可.这里参照ios app提交应用商店 这篇文章结合 ...

  3. Linux环境下warning: no newline at end of file

    今天在Windows下VS2012写了一个程序, 然后放在Linux系统下进行编译.Linux下使用的编译器是CC,结果,一编译出现了很多诸如下面的警告信息,似乎每一个.cpp和.h文件都有. Ite ...

  4. linux系统中的一些典型问题汇总

    一.文件系统破坏导致系统无法启动:Checking root filesystem/dev/sda6 contains a file system with errors,check forcedAn ...

  5. 分布式存储ceph--添加/删除osd(5)

    一.添加osd: 当前ceph集群中有如下osd,现在准备新添加osd:

  6. Hadoop基础之初识大数据与Hadoop

    前言 从今天起,我将一步一步的分享大数据相关的知识,其实很多程序员感觉大数据很难学,其实并不是你想象的这样,只要自己想学,还有什么难得呢? 学习Hadoop有一个8020原则,80%都是在不断的配置配 ...

  7. Dozer映射

    1.为什么要映射 一个映射的框架在一个分层的体系架构中非常有用,特别是你在创建一个抽象的分层去包装一些特殊数据的变化 vs 这些数据传输到其它层(外部服务的数据对象.领域的数据对象.数据传输对象.内部 ...

  8. RocketMQ之十:RocketMQ消息接收源码

    1. 简介 1.1.接收消息 RebalanceService:均衡消息队列服务,负责通过MQClientInstance分配当前 Consumer 可消费的消息队列( MessageQueue ). ...

  9. python之pip使用技巧

    pip 镜像临时使用:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider永久:直接在user目录中创建一个pip目录:C: ...

  10. Spring IoC的形象化理解

    1.IoC(控制反转) 首先想说说IoC(Inversion of Control,控制反转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象 ...