Skip to content

Commit e363c7a

Browse files
Estelle00PanJiaChen
authored andcommitted
feature[Vuex]: auto import vuex modules(PanJiaChen#1815)
1 parent c923726 commit e363c7a

File tree

5 files changed

+30
-18
lines changed

5 files changed

+30
-18
lines changed

src/lang/index.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,24 @@ const messages = {
2424
...elementEsLocale
2525
}
2626
}
27+
export function getLanguage() {
28+
const chooseLanguage = Cookies.get('language')
29+
if (chooseLanguage) return chooseLanguage
2730

31+
// if has not choose language
32+
const language = (navigator.language || navigator.browserLanguage).toLowerCase()
33+
const locales = Object.keys(messages)
34+
for (const locale of locales) {
35+
if (language.indexOf(locale) > -1) {
36+
return locale
37+
}
38+
}
39+
return 'en'
40+
}
2841
const i18n = new VueI18n({
2942
// set locale
3043
// options: en | zh | es
31-
locale: Cookies.get('language') || 'en',
44+
locale: getLanguage(),
3245
// set locale messages
3346
messages
3447
})

src/store/index.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
import Vue from 'vue'
22
import Vuex from 'vuex'
3-
import app from './modules/app'
4-
import errorLog from './modules/errorLog'
5-
import permission from './modules/permission'
6-
import tagsView from './modules/tagsView'
7-
import settings from './modules/settings'
8-
import user from './modules/user'
93
import getters from './getters'
104

115
Vue.use(Vuex)
126

7+
// https://webpack.js.org/guides/dependency-management/#requirecontext
8+
const modulesFiles = require.context('./modules', false, /\.js$/)
9+
10+
// you do not need `import app from './modules/app'`
11+
// it will auto require all vuex module from modules file
12+
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
13+
// set './app.js' => 'app'
14+
const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
15+
const value = modulesFiles(modulePath)
16+
modules[moduleName] = value.default
17+
return modules
18+
}, {})
19+
1320
const store = new Vuex.Store({
14-
modules: {
15-
app,
16-
errorLog,
17-
permission,
18-
tagsView,
19-
settings,
20-
user
21-
},
21+
modules,
2222
getters
2323
})
2424

src/store/modules/app.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import Cookies from 'js-cookie'
2+
import { getLanguage } from '@/lang/index'
23

34
const state = {
45
sidebar: {
56
opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,
67
withoutAnimation: false
78
},
89
device: 'desktop',
9-
language: Cookies.get('language') || 'en',
10+
language: getLanguage(),
1011
size: Cookies.get('size') || 'medium'
1112
}
1213

src/store/modules/errorLog.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
const state = {
32
logs: []
43
}

src/store/modules/tagsView.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
const state = {
32
visitedViews: [],
43
cachedViews: []

0 commit comments

Comments
 (0)