第一步:组件导入
复制admin项目中的文件
@/components/RightPanel
@/components/ThemePicker
@/layout/components/Settings
@/layout/styles/element-variables.scss
到template对应的目录下
第二步:添加类容
在@/layout/components/index.js中添加
export { default as Settings } from './Settings'
再到@/layout/index.vue中添加
<template>
<div :class="classObj" class="app-wrapper">
<div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside" />
<sidebar class="sidebar-container" />
<div :class="{hasTagsView:showSetting}" class="main-container">
<div :class="{'fixed-header':fixedHeader}">
<navbar />
<tags-view v-if="showTagsView" />
</div>
<app-main />
<right-panel v-if="showSetting">
<settings />
</right-panel>
</div>
</div>
</template>
import RightPanel from '@/components/RightPanel'
import { Navbar, Sidebar, AppMain, TagsView, Settings } from './components'
import ResizeMixin from './mixin/ResizeHandler'
export default {
name: 'Layout',
components: {
Navbar,
Sidebar,
AppMain,
TagsView,
RightPanel,
Settings
},
mixins: [ResizeMixin],
computed: {
sidebar() {
return this.$store.state.app.sidebar
},
device() {
return this.$store.state.app.device
},
fixedHeader() {
return this.$store.state.settings.fixedHeader
},
showSetting() {
return this.$store.state.settings.showSettings
},
showTagsView() {
return this.$store.state.settings.tagsView
},
classObj() {
return {
hideSidebar: !this.sidebar.opened,
openSidebar: this.sidebar.opened,
withoutAnimation: this.sidebar.withoutAnimation,
mobile: this.device === 'mobile'
}
}
}
然后在@/store/modules/settings.js添加
import defaultSettings from '@/settings'
import variables from '@/styles/element-variables.scss'
const { showSettings, fixedHeader, sidebarLogo, tagsView } = defaultSettings
const state = {
theme: variables.theme,
showSettings: showSettings,
fixedHeader: fixedHeader,
sidebarLogo: sidebarLogo,
tagsView: tagsView
}
const mutations = {
CHANGE_SETTING: (state, { key, value }) => {
// eslint-disable-next-line no-prototype-builtins
if (state.hasOwnProperty(key)) {
state[key] = value
}
}
}
const actions = {
changeSetting({ commit }, data) {
commit('CHANGE_SETTING', data)
}
}
export default {
namespaced: true,
state,
mutations,
actions
}
@/store/getters.js
const getters = {
sidebar: state => state.app.sidebar,
device: state => state.app.device,
token: state => state.user.token,
avatar: state => state.user.avatar,
name: state => state.user.name,
cachedViews: state => state.tagsView.cachedViews,
visitedViews: state => state.tagsView.visitedViews
}
export default getters
@/store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'
import app from './modules/app'
import settings from './modules/settings'
import user from './modules/user'
import tagsView from './modules/tagsView'
Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
app,
settings,
user,
tagsView
},
getters
})
export default store
最后在全局setting添加
showSettings: true
评论区