index.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import { createRouter, createWebHashHistory } from 'vue-router'
  2. import LoginView from '@/views/login'
  3. import ViewLayout from '@/view/layout'
  4. import Shop from '@/views/shop'
  5. import Category from '@/views/category'
  6. import Brand from '@/views/brand'
  7. import Scene from '@/views/scene'
  8. import Log from '@/views/log'
  9. import Openvideo from '@/views/openvideo'
  10. import Framework from '@/views/framework'
  11. import User from '@/views/user'
  12. import Hotspot from '@/views/hotspot'
  13. import navs from '@/state/navs'
  14. // import FirmwareView from '@/view/firmware'
  15. const routes = [
  16. {
  17. name: 'login',
  18. path: '/login',
  19. component: LoginView,
  20. meta: { title: '登錄' }
  21. },
  22. {
  23. name: 'viewLayout',
  24. path: '/',
  25. component: ViewLayout,
  26. meta: { title: 'VR看店管理' },
  27. children: [
  28. {
  29. name: 'scene',
  30. path: 'scene',
  31. meta: { title: '場景管理', checkAuth: true },
  32. component: Scene,
  33. },
  34. {
  35. name: 'shop',
  36. path: 'shop',
  37. meta: { title: '店鋪管理', checkAuth: true },
  38. component: Shop,
  39. },
  40. {
  41. name: 'category',
  42. path: 'category',
  43. meta: { title: '店鋪分類', checkAuth: true },
  44. component: Category,
  45. },
  46. {
  47. name: 'brand',
  48. path: 'brand',
  49. meta: { title: '品牌信息', checkAuth: true },
  50. component: Brand,
  51. },
  52. {
  53. name: 'hotspot',
  54. path: 'hotspot',
  55. meta: { title: '热点设置', checkAuth: true },
  56. component: Hotspot,
  57. },
  58. {
  59. name: 'openvideo',
  60. path: 'openvideo',
  61. meta: { title: '開場視頻', checkAuth: true },
  62. component: Openvideo,
  63. },
  64. {
  65. name: 'framework',
  66. path: 'framework',
  67. meta: { title: '組織架構', checkAuth: true },
  68. component: Framework,
  69. },
  70. {
  71. name: 'user',
  72. path: 'user',
  73. meta: { title: '用戶管理', checkAuth: true },
  74. component: User,
  75. },
  76. {
  77. name: 'log',
  78. path: 'log',
  79. meta: { title: '操作日誌', checkAuth: true },
  80. component: Log,
  81. }
  82. ]
  83. }
  84. ]
  85. const router = createRouter({
  86. history: createWebHashHistory(),
  87. routes,
  88. })
  89. const isVisual = (navs, name) =>
  90. {
  91. return navs.some(item =>
  92. item.name === name ||
  93. (item.children && isVisual(item.children, name))
  94. )
  95. }
  96. router.beforeEach(async (to, from, next) => {
  97. console.log(navs,'navs');
  98. if (!to.name || to.name === 'viewLayout') {
  99. router.replace({name: 'scene'})
  100. return;
  101. }
  102. if (to.meta && to.meta.checkAuth) {
  103. console.log(!navs.value);
  104. while(!navs.value || navs.value.length === 0) {
  105. await new Promise(r => setTimeout(r, 100))
  106. }
  107. if (!isVisual(navs.value, to.name)) {
  108. isVisual(navs.value, 'scene') ? router.replace({name: 'scene'}): router.replace({name: 'login'})
  109. return;
  110. }
  111. }
  112. next()
  113. })
  114. export const config = routes
  115. export default router