index.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. import Vue from "vue"
  2. import store from "@/store"
  3. import VueRouter from "vue-router"
  4. import {
  5. query
  6. } from "@/utils/query"
  7. import {
  8. getPvUv
  9. } from "@/api/public.js"
  10. Vue.use(VueRouter)
  11. const routes = [
  12. // {
  13. // path: '/',
  14. // redirect: '/home/overview', // 只有区域,及区域以上用户才能进入总部首页这一套
  15. // },
  16. {
  17. path: "/404",
  18. name: "404页面",
  19. component: () => import("../components/404"),
  20. },
  21. {
  22. path: "/group",
  23. name: "集团首页",
  24. component: () => import("../views/statistics/index"),
  25. },
  26. // home
  27. {
  28. path: "/home",
  29. name: "home",
  30. component: () => import("../views/index"),
  31. redirect: "/home/homepage",
  32. children: [{
  33. path: "homepage",
  34. name: "项目首页",
  35. component: () => import("../views/homepage"),
  36. redirect: "/home/overview",
  37. },
  38. //概览
  39. {
  40. path: "overview",
  41. name: "项目概览",
  42. component: () => import("../views/overview"),
  43. },
  44. // 楼层功能
  45. {
  46. path: "floorFunc",
  47. name: "楼层功能",
  48. component: () => import("../views/floorFunc"),
  49. },
  50. // 设备设施
  51. {
  52. path: "equipment",
  53. name: "设备设施",
  54. component: () => import("../views/equipment"),
  55. },
  56. // 其他功能
  57. {
  58. path: "other",
  59. name: "其他事项",
  60. component: () => import("../views/other"),
  61. },
  62. // 分析
  63. {
  64. path: "analysis",
  65. name: "分享报表",
  66. component: () => import("../views/analysis"),
  67. },
  68. //图例库管理
  69. {
  70. path: "legendLibrary",
  71. name: "图例管理",
  72. component: () => import("../views/legendLibrary"),
  73. },
  74. //图例绘制规则
  75. {
  76. path: "legendRules",
  77. name: "绘制规则",
  78. component: () => import("../views/legendRules"),
  79. },
  80. ],
  81. },
  82. ]
  83. const router = new VueRouter({
  84. mode: "history",
  85. base: process.env.BASE_URL,
  86. routes,
  87. })
  88. const ignore = ["/404"]
  89. router.beforeEach(async (to, from, next) => {
  90. // 如果路径上有plazaId就保存
  91. let plazaId = to.query.plazaId ?to.query.plazaId:''
  92. if (plazaId) {
  93. localStorage.setItem('PLAZAID', plazaId)
  94. store.commit('STOREPLAZAID', plazaId)
  95. }
  96. // 取出刷新时的 ssoToken, 路由拦截时app.vue 生命周期还没有执行,store中还没有数据,
  97. let beforeunload = localStorage.getItem("beforeunload"),
  98. __token = null
  99. beforeunload && (__token = JSON.parse(beforeunload).ssoToken)
  100. if (!ignore.includes(to.path)) {
  101. //都是需要token检验的页面 首先优先获取路由上带的token
  102. let token = null
  103. if (to.query.token) {
  104. store.commit("SETSSOTOKEN", to.query.token) //存vuex
  105. sessionStorage.setItem("SSOTOKEN", to.query.token)
  106. token = to.query.token
  107. } else {
  108. // to.query.token ? to.query.token : store.getters['ssoToken'] ? store.getters['ssoToken'] : __token
  109. if (store.getters["ssoToken"]) {
  110. token = store.getters["ssoToken"]
  111. } else if (sessionStorage.getItem("SSOTOKEN")) {
  112. token = sessionStorage.getItem("SSOTOKEN")
  113. store.commit("SETSSOTOKEN", sessionStorage.getItem("SSOTOKEN")) //存vuex
  114. } else {
  115. redirectGetToken(to,from)
  116. }
  117. }
  118. // 如果有token
  119. if (token) {
  120. // 有token 将数据 isPreview赋给 vuex方便取值
  121. store.commit('SETISPREVIEW', sessionStorage.getItem("SETISPREVIEW"))
  122. // 如果在跳转获取token之前保存了指定的路径,则后去token后需要跳转到相关页面
  123. if (sessionStorage.getItem("TOURL")) {
  124. // 如果去的地址等于缓存的地址
  125. if (sessionStorage.getItem("TOURL") == to.path) {
  126. sessionStorage.setItem("TOURL", '')
  127. if (to.path == "/") {
  128. next("/group")
  129. }
  130. if (to.path == "/group" || to.path == "/home/homepage") {
  131. if (store.state.accessLevel == -1) {
  132. await store.dispatch("getUserInfo", router)
  133. console.log('getUserInfo', 4)
  134. await store.dispatch("getBrand")
  135. // await store.dispatch('getFact')
  136. }
  137. }
  138. await store.dispatch("getFloors")
  139. await store.dispatch("getBrand")
  140. next()
  141. } else {
  142. next(sessionStorage.getItem("TOURL"))
  143. }
  144. } else {
  145. if (to.path == "/") {
  146. next("/group")
  147. }
  148. if (to.path == "/group" || to.path == "/home/homepage") {
  149. if (store.state.accessLevel == -1) {
  150. await store.dispatch("getUserInfo", router)
  151. console.log('getUserInfo', 4)
  152. await store.dispatch("getBrand")
  153. // await store.dispatch('getFact')
  154. }
  155. }
  156. await store.dispatch("getFloors")
  157. await store.dispatch("getBrand")
  158. next()
  159. }
  160. } else {
  161. redirectGetToken(to,from)
  162. }
  163. } else {
  164. next()
  165. return
  166. }
  167. })
  168. // 跳入路由后要对发送pvuv
  169. router.afterEach((to) => {
  170. let postParams = {
  171. type: "router",
  172. target: to.name,
  173. parameter: to.path,
  174. }
  175. const data = {
  176. plazaId: store.getters["plazaId"],
  177. }
  178. getPvUv(data, postParams)
  179. .then((res) => {
  180. console.log("pvuv", res)
  181. })
  182. .catch((res) => {
  183. console.log("error", res)
  184. })
  185. })
  186. function redirectGetToken (to) {
  187. let lastRoute = {
  188. path: to.path,
  189. params: to.params,
  190. query: to.query,
  191. }
  192. store.commit("SETLASTROUTER", lastRoute)
  193. let ssoServer = "http://oauth.wanda-dev.cn"
  194. if (process.env.NODE_ENV == "wanda_build") {
  195. ssoServer = "http://oauth.wanda.cn"
  196. }
  197. let systemcode = "CAD156",
  198. signal = new Date().getTime(),
  199. version = "1.0.0";
  200. // 获取token前需要保存跳转前路径
  201. if (!ignore.includes(to.path)) {
  202. console.log('to.query.isPreview',to.query.isPreview);
  203. console.log('to.query.isPreview',to.query.plazaId)
  204. let previewUrl = to.query.isPreview ? to.query.isPreview : '';
  205. let plazaId = to.query.plazaId ?to.query.plazaId:''
  206. if (previewUrl) {
  207. sessionStorage.setItem("SETISPREVIEW", previewUrl)
  208. store.commit('SETISPREVIEW', previewUrl)
  209. }else{
  210. sessionStorage.setItem("SETISPREVIEW", 'false')
  211. store.commit('SETISPREVIEW', 'false')
  212. }
  213. if (plazaId) {
  214. localStorage.setItem('PLAZAID', plazaId)
  215. store.commit('STOREPLAZAID', plazaId)
  216. }
  217. sessionStorage.setItem("TOURL", to.path)
  218. } else {
  219. // 如果重定向前为404则跳入/
  220. sessionStorage.setItem("TOURL", '/')
  221. }
  222. window.location.href = `${ssoServer}/login?systemcode=${systemcode}&signal=${signal}&version=${version}`
  223. }
  224. export default router