index.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <template>
  2. <div class="fdkkcon">
  3. <template v-if="fdkkCurrentVersion == 'v3'">
  4. <iframe allowfullscreen="true" allow="autoplay" :key="currentScene.sceneCode" v-if="!isMobile" id="fdkkifr"
  5. :src="`/spc.html?m=${currentScene.sceneCode}&lang=${lang}`" frameborder="0"></iframe>
  6. <!-- <iframe :key="currentScene.sceneCode" v-if="!isMobile" id="fdkkifr" :src="`https://test.4dkankan.com/spc.html?m=${currentScene.sceneCode}`" -->
  7. <!-- v3场景移动端,用embed.html定制开发 -->
  8. <v3mobile v-else @changeUrl="handleChange" @otherUrl="handleOther" :somedatainfo="somedatainfo"
  9. :key="embeM || currentScene.sceneCode"
  10. :url="otherLink ? otherLink : `/embed.html?from=mingyuan&m=${embeM || currentScene.sceneCode}&lang=${lang}&scene-link=1&rnd=${rnd}`" />
  11. </template>
  12. <!-- :url="otherLink ? otherLink : `https://test.4dkankan.com/embed.html?from=mingyuan&m=${embeM || currentScene.sceneCode}&lang=zh&scene-link=1&rnd=${rnd}`" /> -->
  13. <iframe allowfullscreen="true" allow="autoplay" :key="currentScene.sceneCode" v-else id="fdkkifr"
  14. :src="`${isMobile ? 'smg' : 'spg'}.html?m=${currentScene.sceneCode}&lang=${lang}`"
  15. frameborder="0"></iframe>
  16. <!-- :src="`http://192.168.20.66:8080/${isMobile ? 'smg' : 'spg'}.html?m=${currentScene.sceneCode}`" -->
  17. <!-- <iframe id="fdkkifr" :src="`${isMobile?'smg':'spg'}.html?m=${currentScene.sceneCode}`" frameborder="0"></iframe> -->
  18. </div>
  19. </template>
  20. <script setup>
  21. import { ref, watch, computed, onUnmounted, onMounted, nextTick } from "vue";
  22. import { useStore } from "vuex";
  23. import browser from "@/utils/browser";
  24. import { useMusicPlayer } from '@/utils/sound'
  25. import v3mobile from "./v3fdkkmobile/iframe.vue";
  26. import { getApp } from '@/app'
  27. import config from "@/utils/config";
  28. const musicPlayer = useMusicPlayer()
  29. const store = useStore();
  30. const isMobile = computed(() => browser.isMobile());
  31. const lang = computed(() => config.lang);
  32. const currentScene = computed(() => store.getters["scene/currentScene"]);
  33. const fdkkCurrentVersion = computed(() => store.getters["scene/fdkkCurrentVersion"]);
  34. const somedatainfo = ref({})
  35. const embeM = ref(null)
  36. const otherLink = ref(null)
  37. const rnd = ref(null)
  38. const handleMessage = (res) => {
  39. if (Object.prototype.toString.call(res.data) == '[object Object]') {
  40. if (res.data.source !== 'qjkankan') {
  41. return
  42. }
  43. let { event, params } = res.data
  44. //导览片段
  45. if (event == "toursList") {
  46. store.commit('fdkk/setToursList', params.tours)
  47. }
  48. //是否导览中
  49. if (event == "isPlayTours") {
  50. store.commit('fdkk/setIsPlayTours', params.isPlay)
  51. }
  52. // 是否flying
  53. if (event == "isFlying") {
  54. store.commit('fdkk/setIsFlying', params.isFlying)
  55. }
  56. if (event == "setMode") {
  57. store.commit('fdkk/setMode', params.mode)
  58. }
  59. if (event == "setVR") {
  60. store.commit("functions/setVrStatus", params.status);
  61. }
  62. //场景本身的背景音乐 (同时可判断场景已经加载完成)
  63. if (event == "fdkkBgmLink") {
  64. store.commit('fdkk/setFdkkBGM', params.music)
  65. if (params.music) {
  66. // console.log(useMusicPlayer.player,'useMusicPlayer.player');
  67. if (isMobile.value) {
  68. useMusicPlayer.player.watchPlay()
  69. if (useMusicPlayer.player.isPlay) {
  70. setTimeout(() => {
  71. musicPlayer.play()
  72. }, 50);
  73. }
  74. } else {
  75. useMusicPlayer.player.watchPlay(true)
  76. }
  77. }
  78. //如果无场景音乐,则重置为作品本身音乐
  79. else {
  80. if (store.getters['scene/musicURL']) {
  81. if (isMobile.value) {
  82. useMusicPlayer.player.watchPlay()
  83. if (useMusicPlayer.player.isPlay) {
  84. setTimeout(() => {
  85. musicPlayer.play()
  86. }, 50);
  87. }
  88. } else {
  89. useMusicPlayer.player.watchPlay(true)
  90. }
  91. }
  92. }
  93. // loading完毕
  94. getApp().Scene.emit("ready")
  95. }
  96. if (event == "fdkkMetadata") {
  97. store.commit('fdkk/setMetadata', params.metadata)
  98. }
  99. if (event == "toggleFdkkHotspot") {
  100. if (params.status == 'open') {
  101. store.commit("functions/setShowScenesList", false);
  102. store.commit('fdkk/setShowToursList', false)
  103. }
  104. }
  105. if (event == "toggleBgmStatus") {
  106. if (params.status) {
  107. musicPlayer.resume()
  108. } else {
  109. musicPlayer.pause(true)
  110. }
  111. }
  112. if (event == "autoPlayBgm") {
  113. // useMusicPlayer.player.watchPlay(true)
  114. if (!useMusicPlayer.player.isPlay && !musicPlayer.pauseFromOther) {
  115. musicPlayer.pauseFromOther = true
  116. setTimeout(() => {
  117. musicPlayer.play()
  118. }, 50);
  119. }
  120. }
  121. }
  122. }
  123. onMounted(() => {
  124. nextTick(() => {
  125. window.removeEventListener('message', handleMessage)
  126. window.addEventListener('message', handleMessage)
  127. })
  128. })
  129. onUnmounted(() => {
  130. window.removeEventListener('message', handleMessage)
  131. })
  132. const handleOther = (data) => {
  133. otherLink.value = data;
  134. rnd.value = Math.random();
  135. }
  136. const handleChange = (data) => {
  137. embeM.value = data;
  138. rnd.value = Math.random();
  139. }
  140. </script>
  141. <style lang="scss" scoped>
  142. .fdkkcon {
  143. position: absolute;
  144. width: 100%;
  145. height: 100%;
  146. top: 0;
  147. left: 0;
  148. right: 0;
  149. bottom: 0;
  150. >iframe {
  151. width: 100%;
  152. height: 100%;
  153. }
  154. }
  155. </style>