index.vue 6.4 KB

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