route.config.js 2.8 KB

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