index.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <template>
  2. <div id="pano" v-show="currentScene.type != '4dkk'"></div>
  3. <Fdkk v-if="currentScene.type == '4dkk' && hadGetInfo" />
  4. </template>
  5. <script setup>
  6. import { ref, onMounted, computed, watch, nextTick, unref } from "vue";
  7. import { useStore } from "vuex";
  8. import { useApp, getApp } from "@/app";
  9. import Fdkk from "../Fdkk";
  10. import { getFdkkInfo } from "@/apis";
  11. // import { useMusicPlayer, useSoundPlayer } from "@/utils/sound";
  12. import browser from "@/utils/browser";
  13. import config from "@/utils/config";
  14. const store = useStore();
  15. const isMobile = computed(() => browser.isMobile());
  16. const lang = computed(() => config.lang);
  17. const currentScene = computed(() => store.getters["scene/currentScene"]);
  18. const isHasNormalBGM = computed(() => store.getters["audio/isHasNormalBGM"]);
  19. const scenesList = computed(() => store.getters["scene/list"]);
  20. const metadata = computed(() => store.getters["scene/metadata"]);
  21. const currentPlaying = computed(
  22. () => store.getters["functions/currentPlaying"]
  23. );
  24. const hadGetInfo = ref(false);
  25. const loadScene = async (currentScene) => {
  26. let app = await getApp();
  27. // await new Promise((r) => setTimeout(r, 10000));
  28. console.error("loadScene", unref(currentScene));
  29. if (app.krpanoDom) {
  30. let { sceneCode, initVisual, someData } = currentScene;
  31. app.krpanoDom.call(
  32. `skin_loadscene('scene_${sceneCode}',${
  33. initVisual ? initVisual.vlookat : "0"
  34. },${initVisual ? initVisual.hlookat : "0"})`
  35. );
  36. console.log(sceneCode, someData);
  37. if (someData && someData.hotspots && someData.hotspots.length > 0) {
  38. app.Tags.initHotspot(someData.hotspots, false);
  39. }
  40. }
  41. };
  42. watch(
  43. currentScene,
  44. (newVal, oldVal) => {
  45. console.log(lang.value);
  46. history.replaceState(
  47. null,
  48. null,
  49. ""
  50. .concat(window.location.pathname, "?")
  51. .concat(
  52. `id=${metadata.value.id}&vr=${newVal.sceneCode}&lang=${lang.value}`
  53. )
  54. );
  55. //默认版本是v4
  56. store.commit("scene/setFdkkCurrentVersion", "v4");
  57. hadGetInfo.value = false;
  58. //恢复默认状态
  59. store.commit("fdkk/setV3FdkkBGM", "");
  60. store.commit("fdkk/setV3BGMStatus", "");
  61. if (newVal.type == "pano") {
  62. //如果当前背景音乐是v4则重置
  63. console.log(store.getters["fdkk/fdkkBGM"]);
  64. if (store.getters["fdkk/fdkkBGM"]) {
  65. store.commit("fdkk/setFdkkBGM", "");
  66. }
  67. nextTick(() => {
  68. loadScene(newVal);
  69. console.log(newVal, "newVal");
  70. });
  71. } else {
  72. getFdkkInfo({ num: newVal.sceneCode }).then((data) => {
  73. hadGetInfo.value = true;
  74. if (data.data.isUpgrade != void 0) {
  75. store.commit(
  76. "scene/setFdkkCurrentVersion",
  77. data.data.isUpgrade !== 0 ? "v4" : "v3"
  78. );
  79. // v3
  80. if (data.data.isUpgrade === 0) {
  81. store.dispatch("audio/pauseBGM");
  82. // if (!browser.isMobile()) {
  83. // // musicPlayer.pause();
  84. // } else {
  85. let flag =
  86. data.data.bgMusic &&
  87. data.data.bgMusic != "0" &&
  88. data.data.bgMusic != "noMusic";
  89. store.commit("fdkk/setV3FdkkBGM", flag);
  90. if (unref(isHasNormalBGM) && !flag) {
  91. store.dispatch("audio/pauseBGM");
  92. }
  93. // store.dispatch("audio/setV3BGM", flag);
  94. // 该v3场景有背景音乐
  95. // if (flag) {
  96. // musicPlayer.pause();
  97. // }
  98. // console.log(data.data.bgMusic && data.data.bgMusic != '0' && data.data.bgMusic != 'noMusic','==========');
  99. // }
  100. }
  101. }
  102. // else{
  103. // useMusicPlayer.player.watchPlay(true)
  104. // }
  105. //上一个场景如果是四维看看场景且当前场景是v4
  106. // if (oldVal.type == '4dkk' && data.data.isUpgrade !== 0) {
  107. // store.commit('fdkk/setFdkkBGM', '')
  108. // musicPlayer.pause()
  109. // useMusicPlayer.player.watchPlay(true)
  110. // }
  111. });
  112. }
  113. },
  114. {
  115. deep: true,
  116. }
  117. );
  118. const updateListPosi = () => {
  119. let catalog = metadata.value.catalogs.find(
  120. (item) => item.id == currentScene.value.category
  121. );
  122. // 查询初始场景的所在1级分组
  123. metadata.value.catalogRoot.forEach((item) => {
  124. let temp = item.children && item.children.find((sub) => sub == catalog.id);
  125. if (temp) {
  126. store.commit("scene/setCurrentCatalogRoot", item);
  127. return;
  128. }
  129. });
  130. // 查询初始场景的所在2级分组
  131. store.commit("scene/setCurrentSecondary", catalog);
  132. };
  133. useApp().then((app) => {
  134. app.Tags.on("clickHotspot", (data) => {
  135. let { id } = data;
  136. let hotspot = unref(currentScene).someData.hotspots.find(
  137. (item) => item.name.toLowerCase() === id.toLowerCase()
  138. );
  139. if (hotspot) {
  140. const isNotclickType = ["tag"];
  141. if (!isNotclickType.includes(hotspot.hotspotType)) {
  142. console.log("click", hotspot);
  143. store.commit("functions/setPauseFrom", "");
  144. if (hotspot.hotspotType == "phone" && unref(isMobile)) {
  145. window.open(`tel:${hotspot.phoneInfo.phone}`, "_self");
  146. return;
  147. }
  148. if (hotspot.hotspotType == "scene") {
  149. store.commit(
  150. "scene/setCurrentScene",
  151. scenesList.value.find((item) => item.id == hotspot.secne.id)
  152. );
  153. updateListPosi();
  154. } else if (hotspot.hotspotType == "link") {
  155. if (hotspot.linkOpenType == "newTab") {
  156. window.open(hotspot.hyperlink, "_blank");
  157. } else {
  158. store.commit("tags/setCurrentTag", hotspot);
  159. }
  160. } else {
  161. store.commit("tags/setCurrentTag", hotspot);
  162. if (
  163. hotspot.hotspotType == "audio" ||
  164. hotspot.hotspotType == "video"
  165. ) {
  166. store.commit("functions/setPauseFrom", currentPlaying.value);
  167. // musicPlayer.pause();
  168. // soundPlayer.pause();
  169. }
  170. }
  171. }
  172. }
  173. });
  174. });
  175. </script>
  176. <style lang="scss" scoped>
  177. #pano {
  178. width: 100%;
  179. height: 100%;
  180. }
  181. .novisible {
  182. opacity: 0;
  183. visibility: hidden;
  184. }
  185. </style>