index.vue 4.5 KB

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