menu.vue 4.6 KB

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