index.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  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 } 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 currentPlaying = computed(() => store.getters["functions/currentPlaying"]);
  25. const hadGetInfo = ref(false)
  26. const loadScene = async (currentScene) => {
  27. let app = await getApp();
  28. if (app.krpanoDom) {
  29. let { sceneCode, initVisual, someData } = currentScene;
  30. app.krpanoDom.call(`skin_loadscene('scene_${sceneCode}',${initVisual ? initVisual.vlookat : '0'},${initVisual ? initVisual.hlookat : '0'})`);
  31. console.log(sceneCode, someData);
  32. if (someData && someData.hotspots && someData.hotspots.length > 0) {
  33. app.Tags.initHotspot(someData.hotspots, false);
  34. }
  35. }
  36. };
  37. watch(currentScene, (newVal, oldVal) => {
  38. console.log(lang.value);
  39. history.replaceState(null, null, "".concat(window.location.pathname, "?").concat(`id=${metadata.value.id}&vr=${newVal.sceneCode}&lang=${lang.value}`));
  40. //默认版本是v4
  41. store.commit("scene/setFdkkCurrentVersion", 'v4');
  42. hadGetInfo.value = false
  43. //恢复默认状态
  44. store.commit("fdkk/setV3FdkkBGM", '');
  45. store.commit("fdkk/setV3BGMStatus", '');
  46. if (newVal.type == 'pano') {
  47. //如果当前背景音乐是v4则重置
  48. console.log(store.getters['fdkk/fdkkBGM'])
  49. if (store.getters['fdkk/fdkkBGM']) {
  50. store.commit('fdkk/setFdkkBGM', '')
  51. useMusicPlayer.player.watchPlay(true)
  52. if (isMobile.value) {
  53. console.log(useMusicPlayer.player.isPlay,'useMusicPlayer.player.isPlay');
  54. if (useMusicPlayer.player.isPlay) {
  55. setTimeout(() => {
  56. musicPlayer.play()
  57. }, 50);
  58. }
  59. }
  60. }
  61. nextTick(() => {
  62. loadScene(newVal);
  63. console.log(newVal,'newVal');
  64. });
  65. } else {
  66. getFdkkInfo({ num: newVal.sceneCode }).then((data) => {
  67. hadGetInfo.value = true
  68. if (data.data.isUpgrade != void 0) {
  69. store.commit("scene/setFdkkCurrentVersion", data.data.isUpgrade !== 0 ? 'v4' : 'v3');
  70. // v3
  71. if (data.data.isUpgrade === 0) {
  72. musicPlayer.pauseFromOther = true
  73. if (!browser.isMobile()) {
  74. musicPlayer.pause()
  75. } else {
  76. let flag = data.data.bgMusic && data.data.bgMusic != '0' && data.data.bgMusic != 'noMusic'
  77. store.commit("fdkk/setV3FdkkBGM", flag);
  78. // 该v3场景有背景音乐
  79. if (flag) {
  80. musicPlayer.pause()
  81. }
  82. // console.log(data.data.bgMusic && data.data.bgMusic != '0' && data.data.bgMusic != 'noMusic','==========');
  83. }
  84. }
  85. }
  86. // else{
  87. // useMusicPlayer.player.watchPlay(true)
  88. // }
  89. //上一个场景如果是四维看看场景且当前场景是v4
  90. // if (oldVal.type == '4dkk' && data.data.isUpgrade !== 0) {
  91. // store.commit('fdkk/setFdkkBGM', '')
  92. // musicPlayer.pause()
  93. // useMusicPlayer.player.watchPlay(true)
  94. // }
  95. })
  96. }
  97. }, {
  98. deep: true
  99. });
  100. const updateListPosi = () => {
  101. let catalog = metadata.value.catalogs.find((item) => item.id == currentScene.value.category);
  102. // 查询初始场景的所在1级分组
  103. metadata.value.catalogRoot.forEach((item) => {
  104. let temp = item.children && item.children.find((sub) => sub == catalog.id);
  105. if (temp) {
  106. store.commit("scene/setCurrentCatalogRoot", item);
  107. return;
  108. }
  109. });
  110. // 查询初始场景的所在2级分组
  111. store.commit("scene/setCurrentSecondary", catalog);
  112. }
  113. useApp().then((app) => {
  114. app.Tags.on("clickHotspot", (data) => {
  115. let { id } = data;
  116. let tt = currentScene.value.someData.hotspots.find((item) => item.name == id);
  117. store.commit("functions/setPauseFrom", '');
  118. if (tt.hotspotType == 'scene') {
  119. store.commit("scene/setCurrentScene", scenesList.value.find(item=>item.id==tt.secne.id));
  120. updateListPosi()
  121. } else if(tt.hotspotType == 'link'){
  122. if (tt.linkOpenType=='newTab') {
  123. window.open(tt.hyperlink, "_blank");
  124. }else{
  125. store.commit("tags/setCurrentTag", tt);
  126. }
  127. } else {
  128. store.commit("tags/setCurrentTag", tt);
  129. if (tt.hotspotType == 'audio' || tt.hotspotType == 'video') {
  130. store.commit("functions/setPauseFrom", currentPlaying.value);
  131. musicPlayer.pause()
  132. soundPlayer.pause()
  133. }
  134. }
  135. });
  136. });
  137. </script>
  138. <style lang="scss" scoped>
  139. #pano {
  140. width: 100%;
  141. height: 100%;
  142. }
  143. .novisible {
  144. opacity: 0;
  145. visibility: hidden;
  146. }
  147. </style>