Skip to content

Commit 9b72466

Browse files
committed
udpate adjust is mobile
1 parent d0add41 commit 9b72466

File tree

6 files changed

+97
-19
lines changed

6 files changed

+97
-19
lines changed

src/App.vue

+2-14
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,12 @@
11
<template>
22
<div id="app">
3-
<img src="./assets/logo.png">
4-
<span @click="changeLanguage">
5-
<svg-icon icon-class="language"/>
6-
</span>
7-
<router-view/>
3+
<router-view />
84
</div>
95
</template>
106

117
<script>
128
export default {
13-
name: 'App',
14-
methods: {
15-
changeLanguage () {
16-
const language = this.$store.getters.language
17-
const temp = language === 'zh' ? 'en' : 'zh'
18-
this.$i18n.locale = temp
19-
this.$store.dispatch('app/setLanguage', temp)
20-
}
21-
}
9+
name: 'App'
2210
}
2311
</script>
2412

src/layout/index.vue

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<template>
2+
<div class="app-wrapper">
3+
<img src="@/assets/logo.png">
4+
<span @click="changeLanguage">
5+
<svg-icon icon-class="language"/>
6+
</span>
7+
<router-view/>
8+
</div>
9+
</template>
10+
11+
<script>
12+
import ResizeMixin from './mixin/ResizeHandler'
13+
import { mapState } from 'vuex'
14+
export default {
15+
name: 'Layout',
16+
data () {
17+
return {
18+
msg: 'hi app'
19+
}
20+
},
21+
mixins: [ResizeMixin],
22+
computed: {
23+
...mapState({
24+
device: state => state.app.device
25+
})
26+
},
27+
methods: {
28+
changeLanguage () {
29+
const language = this.$store.getters.language
30+
const temp = language === 'zh' ? 'en' : 'zh'
31+
this.$i18n.locale = temp
32+
this.$store.dispatch('app/setLanguage', temp)
33+
}
34+
}
35+
}
36+
</script>

src/layout/mixin/ResizeHandler.js

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import store from '@/store'
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+
}
25+
},
26+
methods: {
27+
// use $_ for mixins properties
28+
// https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
29+
$_isMobile() {
30+
const rect = body.getBoundingClientRect()
31+
return rect.width - 1 < WIDTH
32+
},
33+
$_resizeHandler() {
34+
if (!document.hidden) {
35+
const isMobile = this.$_isMobile()
36+
store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop')
37+
}
38+
}
39+
}
40+
}

src/router/index.js

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
import Vue from 'vue'
22
import Router from 'vue-router'
3-
import HelloWorld from '@/views/index'
3+
// import HelloWorld from '@/views/index'
4+
import Layout from '@/layout/index'
45

56
Vue.use(Router)
67

78
export default new Router({
89
routes: [
910
{
1011
path: '/',
11-
name: 'HelloWorld',
12-
component: HelloWorld
12+
component: Layout,
13+
redirect: '/index',
14+
children: [{
15+
path: 'index',
16+
name: 'Home',
17+
component: () => import('@/views/index')
18+
}]
1319
}
1420
]
1521
})

src/store/getters.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const getters = {
2-
language: state => state.app.language
2+
language: state => state.app.language,
3+
device: state => state.app.device
34
}
45
export default getters

src/store/modules/app.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,26 @@ import Cookies from 'js-cookie'
22
import {getLanguage} from '../../lang'
33

44
const state = {
5-
language: getLanguage()
5+
language: getLanguage(),
6+
device: 'desktop'
67
}
78

89
const mutations = {
910
SET_LANGUAGE: (state, language) => {
1011
state.language = language
1112
Cookies.set('language', language)
13+
},
14+
TOGGLE_DEVICE: (state, device) => {
15+
state.device = device
1216
}
1317
}
1418

1519
const actions = {
1620
setLanguage ({ commit }, language) {
1721
commit('SET_LANGUAGE', language)
22+
},
23+
toggleDevice ({commit}, device) {
24+
commit('TOGGLE_DEVICE', device)
1825
}
1926
}
2027

0 commit comments

Comments
 (0)