router-interceptors.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. import router from '@/router/router'
  2. import store from '@/store/'
  3. import { powerCheck } from '@/utils/bigmember/'
  4. import { getEntNicheAuth } from '@/api/modules'
  5. // 权限控制白名单-路由path
  6. const powerCheckPathWhiteRegList = [
  7. /free_*/,
  8. /\/big\/page\/index/,
  9. /medical/,
  10. /set-/,
  11. new RegExp('(^/dw)|(^/qy)'), // seo画像路由
  12. /filepack/,
  13. /order/
  14. ]
  15. // 权限控制白名单-路由名
  16. const powerCheckWhiteList = [
  17. '404',
  18. 'ent_search',
  19. 'ent_ser_portrait',
  20. 'ent_portrait',
  21. 'ent_portrait_transfer',
  22. 'unit_portrayal', // 采购单位画像页面
  23. 'unit_portrayal_transfer',
  24. 'ent_follow',
  25. 'big_subscribe',
  26. 'workspace_dashboard',
  27. 'report_analysis',
  28. 'pro_follow_detail', // 项目详情
  29. 'my_client', // 业主监控
  30. 'config',
  31. 'coupon',
  32. 'datapack_buy',
  33. 'buy-data-export', // 使用路由别名时候的兼容处理
  34. 'buy-big-member',
  35. 'buy-data-pack',
  36. 'push_setting',
  37. 'attend_bidding',
  38. 'bid-board',
  39. 'unit_portrayal_id',
  40. 'set-password',
  41. 'portrayal_loading',
  42. <<<<<<< HEAD
  43. 'recommen-list'
  44. =======
  45. 'business_detail'
  46. >>>>>>> main
  47. ]
  48. const regListCheck = function (regList, path) {
  49. if (!Array.isArray(regList)) return false
  50. return regList.some((reg) => {
  51. return reg.test(path)
  52. })
  53. }
  54. router.beforeEach(async (to, from, next) => {
  55. let { power, info } = store.state.user
  56. if (!Object.keys(info).length) {
  57. info = await store.dispatch('user/getUserPower')
  58. power = info.power ? info.power : []
  59. }
  60. if (to.name?.indexOf('unit_portrayal') < 0) {
  61. // 进入不是采购单位画像,调用有登录拦截的接口检查是否登录
  62. store.dispatch('user/getNewEnt')
  63. }
  64. // 判断是否进入画像分析系统页面
  65. if (to.name?.indexOf('custom_') > -1) {
  66. const entNiche = await getEntNicheAuth()
  67. // 调用商机管理权限接口 查用户有无画像分析系统权限 有则执行下一步 无则返回首页
  68. if (entNiche.privatedata) {
  69. next()
  70. } else {
  71. location.href = location.origin
  72. }
  73. return
  74. }
  75. if (
  76. powerCheckWhiteList.includes(to.name) ||
  77. regListCheck(powerCheckPathWhiteRegList, to.path)
  78. ) {
  79. // 权限列表:https://app-jytest.jydev.jianyu360.com/jyapp/big-member/js/main_root_data.js
  80. // 4.企业全景分析
  81. // 13.企业中标动态
  82. const hasEntPortPower =
  83. info.memberStatus > 0 && (power.includes(4) || power.includes(13))
  84. if (hasEntPortPower) {
  85. // 大会员有画像权限用户,访问超级订阅画像,则重定向到大会员画像
  86. if (to.name === 'ent_ser_portrait') {
  87. next({
  88. path: `/ent_portrait/${encodeURIComponent(to.params.eId)}`,
  89. replace: true,
  90. query: {
  91. // ?ismedical=1
  92. ismedical: to.query.ismedical,
  93. resource: to.query.resource
  94. }
  95. })
  96. } else {
  97. next()
  98. }
  99. } else {
  100. if (to.name === 'ent_portrait') {
  101. // 其他无画像权限用户,访问大会员画像,则重定向到超级订阅画像
  102. next({
  103. path: `/svip/ent_ser_portrait/${encodeURIComponent(to.params.eId)}`,
  104. replace: true,
  105. query: {
  106. ...to.query
  107. }
  108. })
  109. } else {
  110. next()
  111. }
  112. }
  113. } else {
  114. let href = '/big/page/index'
  115. const { pass, anchor } = powerCheck(info, power, to, from)
  116. if (pass) {
  117. next()
  118. } else {
  119. // TODO 可优化 临时判断是否旧项目大会员支付路由,skip
  120. if (to.fullPath.startsWith('/front/member/memberDetail')) {
  121. // skip
  122. } else {
  123. if (anchor) {
  124. href = `${href}#${anchor}`
  125. }
  126. location.href = href
  127. }
  128. }
  129. }
  130. })
  131. /**
  132. * 非工作桌面环境下,修改页面 title
  133. */
  134. router.beforeEach((to, from, next) => {
  135. if (location.href.indexOf('page_workDesktop') === -1) {
  136. // 标题设置
  137. if (to?.meta?.title) {
  138. document.title = to.meta.title
  139. } else {
  140. document.title = '剑鱼标讯'
  141. }
  142. }
  143. next()
  144. })