route.config.js 2.7 KB

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