long
2021-09-07 69fce8a713cdb01f30281a69ad20875a44bee300
提交 | 用户 | age
2a61f6 1 import store from '@/store'
L 2
3 const { body } = document
4 const WIDTH = 992 // refer to Bootstrap's responsive design
5
6 export default {
7   watch: {
8     $route(route) {
9       if (this.device === 'mobile' && this.sidebar.opened) {
10         store.dispatch('app/closeSideBar', { withoutAnimation: false })
11       }
12     }
13   },
14   beforeMount() {
15     window.addEventListener('resize', this.$_resizeHandler)
16   },
17   beforeDestroy() {
18     window.removeEventListener('resize', this.$_resizeHandler)
19   },
20   mounted() {
21     const isMobile = this.$_isMobile()
22     if (isMobile) {
23       store.dispatch('app/toggleDevice', 'mobile')
24       store.dispatch('app/closeSideBar', { withoutAnimation: true })
25     }
26   },
27   methods: {
28     // use $_ for mixins properties
29     // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
30     $_isMobile() {
31       const rect = body.getBoundingClientRect()
32       return rect.width - 1 < WIDTH
33     },
34     $_resizeHandler() {
35       if (!document.hidden) {
36         const isMobile = this.$_isMobile()
37         store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop')
38
39         if (isMobile) {
40           store.dispatch('app/closeSideBar', { withoutAnimation: true })
41         }
42       }
43     }
44   }
45 }