menu.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <template>
  2. <ul class="menu">
  3. <li @click="onIsShowList"
  4. v-tooltip="'场景导览'"
  5. v-if="!((metadata.catalogRoot && metadata.catalogRoot.length == 1) && scenes.length == 1 && secondaryList.length == 1)">
  6. <img :src="require(`@/assets/images/icon/${isShowScenesList ? 'function_off@2x.png' : 'function_on@2x.png'}`)"
  7. alt="" />
  8. </li>
  9. <div class="v-link"
  10. v-if="
  11. (!((metadata.catalogRoot && metadata.catalogRoot.length == 1) && scenes.length == 1 && secondaryList.length == 1)) &&
  12. currentScene.type == '4dkk' && fdkkmetadata && (fdkkmetadata.controls.showPanorama || fdkkmetadata.controls.showFloorplan || fdkkmetadata.controls.showDollhouse)">
  13. </div>
  14. <template v-if="currentScene.type == '4dkk'">
  15. <li
  16. v-tooltip="'漫游'"
  17. v-if="fdkkmetadata && fdkkmetadata.controls.showPanorama" :class="{ disabled: isPlayTours || flying }"
  18. @click="onModeChange('panorama')">
  19. <img :src="require(`@/assets/images/icon/${mode == 'panorama' ? 'roaming_selected' : 'roaming_normal'}@2x.png`)"
  20. alt="" />
  21. </li>
  22. <li
  23. v-tooltip="'平面'"
  24. v-if="fdkkmetadata && fdkkmetadata.controls.showFloorplan" :class="{ disabled: isPlayTours || flying }"
  25. @click="onModeChange('floorplan')">
  26. <img :src="require(`@/assets/images/icon/${mode == 'floorplan' ? 'plane_selected' : 'plane_normal'}@2x.png`)"
  27. alt="" />
  28. </li>
  29. <li
  30. v-tooltip="'三维'"
  31. v-if="fdkkmetadata && fdkkmetadata.controls.showDollhouse" :class="{ disabled: isPlayTours || flying }"
  32. @click="onModeChange('dollhouse')">
  33. <img :src="require(`@/assets/images/icon/${mode == 'dollhouse' ? '3d_selected' : '3d_normal'}@2x.png`)"
  34. alt="" />
  35. </li>
  36. <div class="v-link"
  37. v-if="toursList.length > 0 && fdkkmetadata && (fdkkmetadata.controls.showPanorama || fdkkmetadata.controls.showFloorplan || fdkkmetadata.controls.showDollhouse)">
  38. </div>
  39. <li
  40. v-tooltip="'导览'"
  41. class="daolan" @click.stop="playTour" v-if="toursList.length > 0">
  42. <img :src="require(`@/assets/images/icon/${isPlayTours ? 'pause01' : 'playing01'}@2x.png`)" alt="" />
  43. <span>导览</span>
  44. <img @click.stop="openTours" :class="{ active: showTours }" class="jiantou"
  45. :src="require(`@/assets/images/icon/expand_arrows@2x.png`)" alt="" />
  46. </li>
  47. </template>
  48. </ul>
  49. </template>
  50. <script setup>
  51. import { ref, watch, computed, onMounted, nextTick } from "vue";
  52. import { useStore } from "vuex";
  53. const store = useStore();
  54. const toursList = computed(() => store.getters["fdkk/toursList"]);
  55. const isShowScenesList = computed(() => store.getters["functions/isShowScenesList"]);
  56. const toursStatus = computed(() => store.getters["fdkk/toursStatus"]);
  57. const isPlayTours = computed(() => store.getters["fdkk/isPlayTours"]);
  58. const flying = computed(() => store.getters["fdkk/isFlying"]);
  59. const mode = computed(() => store.getters["fdkk/mode"]);
  60. const showTours = computed(() => store.getters["fdkk/isShowToursList"]);
  61. const currentScene = computed(() => store.getters["scene/currentScene"]);
  62. const metadata = computed(() => store.getters["scene/metadata"]);
  63. const scenes = computed(() => store.getters["scene/list"]);
  64. const secondaryList = computed(() => store.getters["scene/secondaryList"]);
  65. const fdkkmetadata = computed(() => store.getters["fdkk/metadata"]);
  66. const openTours = () => {
  67. if (isShowScenesList.value) {
  68. store.commit("functions/setShowScenesList", false);
  69. }
  70. store.commit('fdkk/setShowToursList', !showTours.value)
  71. }
  72. const playTour = () => {
  73. store.commit('fdkk/setToursStatus', !toursStatus.value)
  74. }
  75. const onIsShowList = (data) => {
  76. if (showTours.value) {
  77. store.commit('fdkk/setShowToursList', false)
  78. }
  79. store.commit("functions/setShowScenesList", !isShowScenesList.value);
  80. };
  81. const onModeChange = name => {
  82. document.querySelector('#fdkkifr') && document.querySelector('#fdkkifr').contentWindow.postMessage(
  83. {
  84. source: "qjkankan",
  85. event: "setMode",
  86. params: {
  87. name: name
  88. }
  89. },
  90. "*"
  91. );
  92. }
  93. onMounted(() => {
  94. })
  95. </script>
  96. <style lang="scss" scoped>
  97. .menu {
  98. position: absolute;
  99. left: 20px;
  100. bottom: 8px;
  101. display: flex;
  102. z-index: 9;
  103. >li {
  104. margin: 0 10px;
  105. cursor: pointer;
  106. display: flex;
  107. justify-content: center;
  108. align-items: center;
  109. >img {
  110. width: 26px;
  111. height: 26px;
  112. }
  113. }
  114. .v-link {
  115. width: 1px;
  116. height: 26px;
  117. background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #FFFFFF 49%, rgba(255, 255, 255, 0) 100%);
  118. }
  119. .daolan {
  120. display: flex;
  121. width: auto;
  122. align-items: center;
  123. >img {
  124. width: 26px;
  125. height: 26px;
  126. }
  127. .jiantou {
  128. margin-left: -4px;
  129. transform: rotate(180deg);
  130. transition: .3s ease transform;
  131. &.active {
  132. transform: none;
  133. }
  134. }
  135. >span {}
  136. }
  137. }
  138. </style>