You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
1.6 KiB

/**
* 侧边栏的响应式数据
*/
import Vue from 'vue'
import {bindThis} from "@/util"
import {createGetters, createMutations} from "@/util/observable"
import {getters as appGetters} from "./app"
const state = {
//抽屉模式时的显隐
show: false,
//主题,light 或 dark
theme: 'light',
//手风琴效果
uniqueOpen: true,
//是否折叠
collapse: false,
//折叠时显示上级
showParentOnCollapse: false,
//自动隐藏
autoHide: false,
//汉堡包的位置,aside 或 head
hamburgerPosition: 'aside',
//是否显示搜索框
search: true
}
const store = Vue.observable(state)
export const getters = createGetters(store)
export const mutations = bindThis({
...createMutations(store),
/*移动端或设置了侧边栏自动隐藏时打开关闭抽屉,否则展开折叠*/
open() {
if (appGetters.isMobile || store.autoHide) {
store.show = true
}
else store.collapse = false
},
close() {
if (appGetters.isMobile || store.autoHide) {
store.show = false
}
else store.collapse = true
},
//切换侧边栏的状态
switch(action) {
switch (action) {
case 'open':
return this.open()
case 'close':
return this.close()
default :
let open = true
if (appGetters.isMobile) {
open = !store.show
}
else open = store.collapse
return open ? this.open() : this.close()
}
}
})