useCase.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <template>
  2. <section v-if="bizId !== -1" v-loading="loading" class="case-main">
  3. <iframe
  4. id="useCaseIfr"
  5. :class="{ 'full-screen': fullScreen}"
  6. frameborder="0"
  7. scrolling="no"
  8. :src="src"
  9. />
  10. </section>
  11. </template>
  12. <script>
  13. import { mapGetters } from 'vuex'
  14. import { host } from '@/apiConfig/requestIP'
  15. // import addDOMEventListener from 'add-dom-event-listener'
  16. // import { EncryptId, desDecryptId } from '@/utils/crypto-js.js'
  17. import { getUrlSearch, getUrlParamsObj } from '@/utils'
  18. export default {
  19. data() {
  20. return {
  21. ifr: null,
  22. srcHost: '/case/caseList/zhihui/',
  23. loading: true,
  24. path: '/useCase',
  25. eventHandlers: '',
  26. fullScreen: false // 是否全屏
  27. }
  28. },
  29. computed: {
  30. ...mapGetters(['bizId']),
  31. src() {
  32. const { caseRoute, dp } = getUrlParamsObj(['caseRoute', 'dp'])
  33. // const bizId = EncryptId(`${this.bizId}`)
  34. // host = // const
  35. // getEnv() === 'test'
  36. // ? 'http://10.96.83.94:9000/index.html#'
  37. // : getEnv() === 'pre'
  38. // ? 'http://agiletc-pre.intra.xiaojukeji.com/#'
  39. // : 'http://agiletc.intra.xiaojukeji.com/#'
  40. // const src = `${host}${
  41. // this.$route.query.detailCaseUrl
  42. // ? '/case/caseManager/zhihui/'
  43. // : this.srcHost
  44. // }${this.$route.query.detailCaseUrl || encodeURIComponent(bizId)}`
  45. // const src = `http://localhost:7100/#${this.$route.query.detailCaseUrl || this.path}?bizId=${this.bizId}&hiddenNav=true&dp=${dp}&caseRoute=${caseRoute}`
  46. const src = `${host}/usecase/#${this.$route.query.detailCaseUrl || this.path}?bizId=${this.bizId}&hiddenNav=true&dp=${dp}&caseRoute=${caseRoute}`
  47. return src
  48. }
  49. },
  50. watch: {
  51. bizId: {
  52. handler(newV) {
  53. if (newV === -1) return
  54. this.matchObj = { params: { product_id: newV }}
  55. },
  56. immediate: true
  57. }
  58. },
  59. mounted() {
  60. window.addEventListener('message', this.onEventListener, false)
  61. // window.addEventListener(
  62. // 'message',
  63. // e => this.setRouterPath(e),
  64. // false
  65. // )
  66. },
  67. beforeDestroy() {
  68. },
  69. // 销毁监听事件
  70. destroyed() {
  71. window.removeEventListener(
  72. 'message',
  73. this.onEventListener,
  74. false
  75. )
  76. },
  77. methods: {
  78. onEventListener(e) {
  79. const { event, route, data } = e.data
  80. const { href } = window.location
  81. if (event === 'usecase-set') {
  82. const params = getUrlSearch(['caseRoute'], [{ key: 'caseRoute', value: route }])
  83. window.open(`${href.split('?')[0]}?${params}`, '_self')
  84. }
  85. if (event === 'done') {
  86. this.loading = false
  87. }
  88. if (event === 'detialPage') {
  89. const params = getUrlSearch(['dp'], [{ key: 'dp', value: data }])
  90. window.open(`${href.split('?')[0]}?${params}`, '_self')
  91. }
  92. }
  93. }
  94. }
  95. </script>
  96. <style lang='less' scoped>
  97. .case-main {
  98. margin: 10px 0 0 10px;
  99. overflow: none;
  100. }
  101. #useCaseIfr {
  102. width: 100%;
  103. height: calc(100vh - 60px);
  104. }
  105. .full-screen {
  106. position: fixed;
  107. left: 0;
  108. right: 0;
  109. top: 0;
  110. bottom: 0;
  111. z-index: 999;
  112. }
  113. </style>