index.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  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. let previewUrl = to.query.isPreview ? to.query.isPreview : '';
  97. if (previewUrl) {
  98. sessionStorage.setItem("SETISPREVIEW", previewUrl)
  99. store.commit('SETISPREVIEW', previewUrl)
  100. }
  101. // 取出刷新时的 ssoToken, 路由拦截时app.vue 生命周期还没有执行,store中还没有数据,
  102. let beforeunload = localStorage.getItem("beforeunload"),
  103. __token = null
  104. beforeunload && (__token = JSON.parse(beforeunload).ssoToken)
  105. if (!ignore.includes(to.path)) {
  106. //都是需要token检验的页面 首先优先获取路由上带的token
  107. let token = null
  108. if (to.query.token) {
  109. store.commit("SETSSOTOKEN", to.query.token) //存vuex
  110. sessionStorage.setItem("SSOTOKEN", to.query.token)
  111. token = to.query.token
  112. } else {
  113. if (store.getters["ssoToken"]) {
  114. token = store.getters["ssoToken"]
  115. } else if (sessionStorage.getItem("SSOTOKEN")) {
  116. token = sessionStorage.getItem("SSOTOKEN")
  117. store.commit("SETSSOTOKEN", sessionStorage.getItem("SSOTOKEN")) //存vuex
  118. } else {
  119. redirectGetToken(to,from)
  120. }
  121. }
  122. // 如果有token
  123. if (token) {
  124. // 有token 将数据 isPreview赋给 vuex方便取值
  125. store.commit('SETISPREVIEW', sessionStorage.getItem("SETISPREVIEW"))
  126. // 如果在跳转获取token之前保存了指定的路径,则后去token后需要跳转到相关页面
  127. console.log(to.path)
  128. if(to.path !='/group' && to.path !='/home/homepage' && to.path !='/' ){
  129. if(!store.state.permissions || store.state.permissions.length ==0){
  130. // 如果没有请求permissions则请求getUserInfo
  131. await store.dispatch("getUserInfoNoPath", router)
  132. }
  133. }
  134. if (sessionStorage.getItem("TOURL")) {
  135. // 如果去的地址等于缓存的地址
  136. if (sessionStorage.getItem("TOURL") == to.path) {
  137. sessionStorage.setItem("TOURL", '')
  138. if (to.path == "/") {
  139. next("/group")
  140. }
  141. if (to.path == "/group" || to.path == "/home/homepage") {
  142. if (store.state.accessLevel == -1) {
  143. await store.dispatch("getUserInfo", router)
  144. await store.dispatch("getBrand")
  145. // await store.dispatch('getFact')
  146. }
  147. }
  148. await store.dispatch("getFloors")
  149. await store.dispatch("getBrand")
  150. next()
  151. } else {
  152. next(sessionStorage.getItem("TOURL"))
  153. }
  154. } else {
  155. if (to.path == "/") {
  156. next("/group")
  157. }
  158. if (to.path == "/group" || to.path == "/home/homepage") {
  159. if (store.state.accessLevel == -1) {
  160. await store.dispatch("getUserInfo", router)
  161. console.log('getUserInfo', 4)
  162. await store.dispatch("getBrand")
  163. // await store.dispatch('getFact')
  164. }
  165. }
  166. await store.dispatch("getFloors")
  167. await store.dispatch("getBrand")
  168. next()
  169. }
  170. } else {
  171. redirectGetToken(to,from)
  172. }
  173. } else {
  174. next()
  175. return
  176. }
  177. })
  178. // 跳入路由后要对发送pvuv
  179. router.afterEach((to) => {
  180. let postParams = {
  181. type: "router",
  182. target: to.name,
  183. parameter: to.path,
  184. }
  185. const data = {
  186. plazaId: store.getters["plazaId"],
  187. }
  188. getPvUv(data, postParams)
  189. .then((res) => {
  190. console.log("pvuv", res)
  191. })
  192. .catch((res) => {
  193. console.log("error", res)
  194. })
  195. })
  196. // 重定向获取token
  197. function redirectGetToken (to) {
  198. let lastRoute = {
  199. path: to.path,
  200. params: to.params,
  201. query: to.query,
  202. }
  203. store.commit("SETLASTROUTER", lastRoute)
  204. let ssoServer = "http://oauth.wanda-dev.cn"
  205. if (process.env.NODE_ENV == "wanda_build") {
  206. ssoServer = "http://oauth.wanda.cn"
  207. }
  208. let systemcode = "CAD156",
  209. signal = new Date().getTime(),
  210. version = "1.0.0";
  211. // 获取token前需要保存跳转前路径
  212. if (!ignore.includes(to.path)) {
  213. let previewUrl = to.query.isPreview ? to.query.isPreview : '';
  214. let plazaId = to.query.plazaId ?to.query.plazaId:''
  215. if (previewUrl) {
  216. sessionStorage.setItem("SETISPREVIEW", previewUrl)
  217. store.commit('SETISPREVIEW', previewUrl)
  218. }
  219. // else{
  220. // sessionStorage.setItem("SETISPREVIEW", 'false')
  221. // store.commit('SETISPREVIEW', 'false')
  222. // }
  223. if (plazaId) {
  224. localStorage.setItem('PLAZAID', plazaId)
  225. store.commit('STOREPLAZAID', plazaId)
  226. }
  227. sessionStorage.setItem("TOURL", to.path)
  228. } else {
  229. // 如果重定向前为404则跳入/
  230. sessionStorage.setItem("TOURL", '/')
  231. }
  232. window.location.href = `${ssoServer}/login?systemcode=${systemcode}&signal=${signal}&version=${version}`
  233. }
  234. export default router