vue 换肤
/* 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 换肤的更多相关文章
- vue+ element 动态换肤
转至 https://www.cnblogs.com/dengqichang/p/10364455.html 一.搭建好项目的环境. 二.根据ElementUI官网的自定义主题(http://elem ...
- vue 中使用sass实现主体换肤
有如下代码要实现换肤功能 <template> <div class="app-root" :class="themeClass"> & ...
- vue中利用scss实现整体换肤和字体大小设置
一.前言 利用Sass预处理实现换肤和字体大小调整. 思路及达到的效果:字体大小的适配使用window.devicePixelRatio的值和需要调整的差量进行控制.页面初始化是的字体适配可以根据de ...
- vue+less换肤,主题切换方案
新的项目对于客户自定义要求很高,然后换肤是其中一个很小的模块,经过了一段时间的摸索,看了许多文章,找到了几种方案. https://www.cnblogs.com/leiting/p/11203383 ...
- vue自定义switch开关,使用less支持换肤
实际项目用到了,记录一下,也方便以后使用,这样也可以避免为了使用一个switch,引入整个外部web框架: 也可以方便更好的理解是和使用less. 基础代码使用的是网上的,然后自己添加了less换肤, ...
- vue2.0-基于elementui换肤[自定义主题]
0. 直接上 预览链接 vue2.0-基于elementui换肤[自定义主题] 1. 项目增加主题组件 在项目的src/components下添加skin文件夹 skin文件获取地址 2. 项目增加自 ...
- element-ui 动态换肤
1.在安装好 element-ui@2.x 以后,首先安装sass-loader npm i sass-loader node-sass -D 2.安装 element-theme npm i ele ...
- vue-基于elementui换肤
思路: 生成不同的css颜色文件,每个文件内部命名前加上.custom-颜色值做命名空间. 然后app.vue里引入全部的颜色文件. 用户点击某颜色,就在body加上class:custom-00a5 ...
- 基于webpack4+vue-cli3项目的换肤功能
起因 最近因公司需求,需要实现主题换肤功能,不仅仅是颜色的更改,还需要包括图片,字体等文件等更换,因此在百度里各种实现方案后,决定根据scss+style-loader/useable做换肤. 项目开 ...
随机推荐
- iOS (APP)进程间8中常用通信方式总结
1 URL Scheme 2 Keychain 3 UIPasteboard 4 UIDocumentInteractionController 5 local socket 6 AirDrop 7 ...
- vue-判断设备是手机端还是pc端
经常在项目中会有支持 pc 与手机端需求.并且pc与手机端是两个不一样的页面.这时就要求判断设置,根据不同的设置跳转不同的路由. [代码演示] 在 router/index.js 中有两个页面. ex ...
- chrome新版本flash无法在http网站上运行的解决办法
最近遇到一个问题,就是用chrome浏览器打开网站后台以后,使用flash插件上传文件失败,提示flash初始化失败,于是打开chrome的内容设置,准备启用flash功能,打开浏览器,在地址栏中输入 ...
- springmvc快速入门(注解版本)
1)springmvc快速入门(传统版) 步一:创建springmvc-day02这么一个web应用 步二:导入springioc,springweb和springmvc相关的jar包 ------- ...
- LeetCode 1154. 一年中的第几天
给你一个按 YYYY-MM-DD 格式表示日期的字符串 date,请你计算并返回该日期是当年的第几天. 通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类 ...
- Springboot将mybatis替换为mybatis-plus
知识点: 1.Mybatis-plus相比mybatis,功能更加强大,简而言之,不需要我们去写mapper.xml配置,但是对于特殊需求的sql语句,还是需要写mapper.xml文件中的sql语句 ...
- ssm整合的springmvc.xml的配置
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- vue中自定义指令的使用
原文地址 vue中除了内置的指令(v-show,v-model)还允许我们自定义指令 想要创建自定义指令,就要注册指令(以输入框获取焦点为例) 一.注册全局指令: // 注册一个全局自定义指令 `v- ...
- 【CodeForces - 682C】Alyona and the Tree(dfs)
Alyona and the Tree Descriptions 小灵决定节食,于是去森林里摘了些苹果.在那里,她意外地发现了一棵神奇的有根树,它的根在节点 1 上,每个节点和每条边上都有一个数字. ...
- D3学习之坐标系绘制
坐标轴的绘制我们需要搞清楚以下三个要点: 1).axis函数 2)..call()函数用于组合 3).坐标轴的平移旋转 关于第三点其实就是"transform","tra ...