route.config.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. component: component.default || component
  41. };
  42. route[index].children.push(child);
  43. }
  44. return route;
  45. };
  46. let route = registerRoute(navConfig);
  47. const generateMiscRoutes = function(lang) {
  48. let guideRoute = {
  49. path: `/${ lang }/guide`, // 指南
  50. redirect: `/${ lang }/guide/design`,
  51. component: require(`./pages/${ lang }/guide.vue`),
  52. children: [{
  53. path: 'design', // 设计原则
  54. meta: { lang },
  55. component: require(`./pages/${ lang }/design.vue`)
  56. }, {
  57. path: 'nav', // 导航
  58. meta: { lang },
  59. component: require(`./pages/${ lang }/nav.vue`)
  60. }]
  61. };
  62. let resourceRoute = {
  63. path: `/${ lang }/resource`, // 资源
  64. meta: { lang },
  65. component: require(`./pages/${ lang }/resource.vue`)
  66. };
  67. let indexRoute = {
  68. path: `/${ lang }`, // 首页
  69. meta: { lang },
  70. name: 'home',
  71. component: require(`./pages/${ lang }/index.vue`)
  72. };
  73. return [guideRoute, resourceRoute, indexRoute];
  74. };
  75. langs.forEach(lang => {
  76. route = route.concat(generateMiscRoutes(lang.lang));
  77. });
  78. route.push({
  79. path: '/play',
  80. name: 'play',
  81. component: require('./play/index.vue')
  82. });
  83. let userLanguage = localStorage.getItem('ELEMENT_LANGUAGE') || window.navigator.language || 'en-US';
  84. let defaultPath = '/en-US';
  85. if (userLanguage.indexOf('zh-') !== -1) {
  86. defaultPath = '/zh-CN';
  87. }
  88. route = route.concat([{
  89. path: '/',
  90. redirect: defaultPath
  91. }, {
  92. path: '*',
  93. redirect: defaultPath
  94. }]);
  95. export default route;