index.vue 4.8 KB

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