index.vue 5.4 KB

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