-
Notifications
You must be signed in to change notification settings - Fork 145
/
Copy pathroute.config.js
109 lines (96 loc) · 2.65 KB
/
route.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import navConfig from './nav.config'
import langs from './i18n/route'
const importMap = (lang, name) => () => import(`./pages/${lang}/${name}.vue`)
const importDocs = (lang, path) => () => import(`./docs/${lang}${path}.md`)
const registerRoute = (navConfig) => {
let route = []
Object.keys(navConfig).forEach((lang, index) => {
let navs = navConfig[lang]
route.push({
path: `/${lang}/component`,
redirect: `/${lang}/component/installation`,
component: importMap(lang, 'component'),
children: []
})
navs.forEach(nav => {
if (nav.href) return
if (nav.groups) {
nav.groups.forEach(group => {
group.list.forEach(nav => {
addRoute(nav, lang, index)
})
})
} else if (nav.children) {
nav.children.forEach(nav => {
addRoute(nav, lang, index)
})
} else {
addRoute(nav, lang, index)
}
})
})
function addRoute (page, lang, index) {
const component = importDocs(lang, page.path)
let child = {
path: page.path.slice(1),
meta: {
title: page.title || page.name,
description: page.description,
lang
},
name: 'component-' + lang + (page.title || page.name),
component: component.default || component
}
route[index].children.push(child)
}
return route
}
let route = registerRoute(navConfig)
const generateMiscRoutes = function (lang) {
let guideRoute = {
path: `/${lang}/guide`, // 指南
redirect: `/${lang}/guide/design`,
component: importMap(lang, 'guide'),
children: [{
path: 'design', // 设计原则
name: 'guide-design' + lang,
meta: { lang },
component: importMap(lang, 'design')
}, {
path: 'nav', // 导航
name: 'guide-nav' + lang,
meta: { lang },
component: importMap(lang, 'nav')
}]
}
let resourceRoute = {
path: `/${lang}/resource`, // 资源
meta: { lang },
name: 'resource' + lang,
component: importMap(lang, 'resource')
}
let indexRoute = {
path: `/${lang}`, // 首页
meta: { lang },
name: 'home' + lang,
redirect: `/${lang}/component/changelog`,
component: importMap(lang, 'index')
}
return [guideRoute, resourceRoute, indexRoute]
}
langs.forEach(lang => {
route = route.concat(generateMiscRoutes(lang.lang))
})
let userLanguage = localStorage.getItem('ELEMENT_LANGUAGE') || window.navigator.language || 'en-US'
let defaultPath = '/zh-CN'
if (userLanguage.indexOf('zh-') !== -1) {
defaultPath = '/zh-CN'
}
route = route.concat([{
path: '/',
redirect: defaultPath
}, {
path: '*',
redirect: defaultPath
}])
export default route