2018-07-17 22:49:13 +08:00
|
|
|
import { mapState } from 'vuex'
|
2018-07-16 22:22:55 +08:00
|
|
|
import menuMixin from '../mixin/menu'
|
2019-08-04 15:36:25 +08:00
|
|
|
import { elMenuItem, elSubmenu } from '../libs/util.menu'
|
2018-07-16 22:22:55 +08:00
|
|
|
import BScroll from 'better-scroll'
|
2019-08-04 15:36:25 +08:00
|
|
|
|
2018-07-16 22:22:55 +08:00
|
|
|
export default {
|
2018-07-17 21:54:38 +08:00
|
|
|
name: 'd2-layout-header-aside-menu-side',
|
2018-07-16 22:22:55 +08:00
|
|
|
mixins: [
|
|
|
|
|
menuMixin
|
|
|
|
|
],
|
2019-08-04 15:36:25 +08:00
|
|
|
render (createElement) {
|
|
|
|
|
return createElement('div', { attrs: { class: 'd2-layout-header-aside-menu-side' } }, [
|
|
|
|
|
createElement('el-menu', {
|
|
|
|
|
props: { collapse: this.asideCollapse, uniqueOpened: true, defaultActive: this.active },
|
|
|
|
|
ref: 'menu',
|
|
|
|
|
on: { select: this.handleMenuSelect }
|
|
|
|
|
}, this.aside.map(menu => (menu.children === undefined ? elMenuItem : elSubmenu).call(this, createElement, menu))),
|
|
|
|
|
...this.aside.length === 0 && !this.asideCollapse ? [
|
|
|
|
|
createElement('div', { attrs: { class: 'd2-layout-header-aside-menu-empty', flex: 'dir:top main:center cross:center' } }, [
|
|
|
|
|
createElement('d2-icon', { props: { name: 'inbox' } }),
|
|
|
|
|
createElement('span', {}, this.$t('layout.header-aside.menu-side.empty'))
|
|
|
|
|
])
|
|
|
|
|
] : []
|
|
|
|
|
])
|
2018-07-16 22:22:55 +08:00
|
|
|
},
|
|
|
|
|
data () {
|
|
|
|
|
return {
|
|
|
|
|
active: '',
|
|
|
|
|
asideHeight: 300,
|
|
|
|
|
BS: null
|
|
|
|
|
}
|
|
|
|
|
},
|
2018-07-17 22:49:13 +08:00
|
|
|
computed: {
|
2018-08-08 16:04:10 +08:00
|
|
|
...mapState('d2admin/menu', [
|
|
|
|
|
'aside',
|
|
|
|
|
'asideCollapse'
|
2018-08-08 09:19:11 +08:00
|
|
|
])
|
2018-07-17 22:49:13 +08:00
|
|
|
},
|
2018-07-16 22:22:55 +08:00
|
|
|
watch: {
|
|
|
|
|
// 折叠和展开菜单的时候销毁 better scroll
|
2018-08-08 16:04:10 +08:00
|
|
|
asideCollapse (val) {
|
2018-07-16 22:22:55 +08:00
|
|
|
this.scrollDestroy()
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.scrollInit()
|
|
|
|
|
}, 500)
|
|
|
|
|
},
|
2018-07-17 22:49:13 +08:00
|
|
|
// 监听路由 控制侧边栏激活状态
|
2019-08-11 00:10:59 +08:00
|
|
|
'$route.fullPath': {
|
|
|
|
|
handler (value) {
|
|
|
|
|
this.active = value
|
2018-07-16 22:22:55 +08:00
|
|
|
},
|
|
|
|
|
immediate: true
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
mounted () {
|
|
|
|
|
this.scrollInit()
|
|
|
|
|
},
|
|
|
|
|
beforeDestroy () {
|
|
|
|
|
this.scrollDestroy()
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
scrollInit () {
|
|
|
|
|
this.BS = new BScroll(this.$el, {
|
2019-01-15 20:15:41 +08:00
|
|
|
mouseWheel: true,
|
|
|
|
|
click: true
|
2018-07-24 09:07:02 +08:00
|
|
|
// 如果你愿意可以打开显示滚动条
|
|
|
|
|
// scrollbar: {
|
|
|
|
|
// fade: true,
|
|
|
|
|
// interactive: false
|
|
|
|
|
// }
|
2018-07-16 22:22:55 +08:00
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
scrollDestroy () {
|
2018-08-12 23:27:41 +08:00
|
|
|
// https://github.com/d2-projects/d2-admin/issues/75
|
|
|
|
|
try {
|
2018-07-16 22:22:55 +08:00
|
|
|
this.BS.destroy()
|
2018-08-12 23:27:41 +08:00
|
|
|
} catch (e) {
|
|
|
|
|
delete this.BS
|
|
|
|
|
this.BS = null
|
2018-07-16 22:22:55 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|