/* 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() } } }
原文:https://www.cnblogs.com/dhsz/p/11674317.html