chenlei преди 1 година
родител
ревизия
dc29df9ac4
променени са 100 файла, в които са добавени 773 реда и са изтрити 361 реда
  1. BIN
      public/relic-data/big-photo/第107页-482.png
  2. BIN
      public/relic-data/big-photo/第111页-530.png
  3. BIN
      public/relic-data/big-photo/第115页-552.png
  4. BIN
      public/relic-data/big-photo/第115页-553.png
  5. BIN
      public/relic-data/big-photo/第115页-554.png
  6. BIN
      public/relic-data/big-photo/第115页-557.png
  7. BIN
      public/relic-data/big-photo/第116页-559.png
  8. BIN
      public/relic-data/big-photo/第116页-561.png
  9. BIN
      public/relic-data/big-photo/第33页-105.png
  10. BIN
      public/relic-data/big-photo/第36页-114.png
  11. BIN
      public/relic-data/big-photo/第37页-117.png
  12. BIN
      public/relic-data/big-photo/第40页-126.png
  13. BIN
      public/relic-data/big-photo/第42页-138.png
  14. BIN
      public/relic-data/big-photo/第45页-145.png
  15. BIN
      public/relic-data/big-photo/第46页-158.png
  16. BIN
      public/relic-data/big-photo/第48页-169.png
  17. BIN
      public/relic-data/big-photo/第48页-170.png
  18. BIN
      public/relic-data/big-photo/第68页-270.png
  19. BIN
      public/relic-data/big-photo/第69页-272.png
  20. BIN
      public/relic-data/big-photo/第69页-273.png
  21. BIN
      public/relic-data/big-photo/第69页-274.png
  22. BIN
      public/relic-data/big-photo/第69页-275.png
  23. BIN
      public/relic-data/big-photo/第69页-277.png
  24. BIN
      public/relic-data/big-photo/第69页-278.png
  25. BIN
      public/relic-data/big-photo/第69页-280.png
  26. BIN
      public/relic-data/big-photo/第69页-281.png
  27. BIN
      public/relic-data/big-photo/第69页-282.png
  28. BIN
      public/relic-data/big-photo/第70页-289.png
  29. BIN
      public/relic-data/big-photo/第70页-290.png
  30. BIN
      public/relic-data/big-photo/第70页-291.png
  31. BIN
      public/relic-data/big-photo/第70页-292.png
  32. BIN
      public/relic-data/big-photo/第70页-293.png
  33. BIN
      public/relic-data/big-photo/第70页-294.png
  34. BIN
      public/relic-data/big-photo/第70页-295.png
  35. BIN
      public/relic-data/big-photo/第70页-296.png
  36. BIN
      public/relic-data/big-photo/第72页-303.png
  37. BIN
      public/relic-data/big-photo/第72页-304.png
  38. BIN
      public/relic-data/big-photo/第73页-306.png
  39. BIN
      public/relic-data/big-photo/第73页-307.png
  40. BIN
      public/relic-data/big-photo/第73页-308.png
  41. BIN
      public/relic-data/big-photo/第75页-322.png
  42. BIN
      public/relic-data/big-photo/第86页-394.png
  43. BIN
      public/relic-data/big-photo/第94页-438.png
  44. 380 285
      public/relic-data/data.json
  45. BIN
      public/relic-data/small-photo/第107页-482.png
  46. BIN
      public/relic-data/small-photo/第111页-530.png
  47. BIN
      public/relic-data/small-photo/第115页-553.png
  48. BIN
      public/relic-data/small-photo/第116页-559.png
  49. BIN
      public/relic-data/small-photo/第116页-561.png
  50. BIN
      public/relic-data/small-photo/第33页-105.png
  51. BIN
      public/relic-data/small-photo/第36页-114.png
  52. BIN
      public/relic-data/small-photo/第37页-117.png
  53. BIN
      public/relic-data/small-photo/第39页-121.png
  54. BIN
      public/relic-data/small-photo/第40页-124.png
  55. BIN
      public/relic-data/small-photo/第40页-126.png
  56. BIN
      public/relic-data/small-photo/第42页-138.png
  57. BIN
      public/relic-data/small-photo/第45页-145.png
  58. BIN
      public/relic-data/small-photo/第46页-158.png
  59. BIN
      public/relic-data/small-photo/第48页-169.png
  60. BIN
      public/relic-data/small-photo/第48页-170.png
  61. BIN
      public/relic-data/small-photo/第58页-223.png
  62. BIN
      public/relic-data/small-photo/第68页-270.png
  63. BIN
      public/relic-data/small-photo/第69页-272.png
  64. BIN
      public/relic-data/small-photo/第69页-273.png
  65. BIN
      public/relic-data/small-photo/第69页-274.png
  66. BIN
      public/relic-data/small-photo/第69页-281.png
  67. BIN
      public/relic-data/small-photo/第69页-282.png
  68. BIN
      public/relic-data/small-photo/第70页-289.png
  69. BIN
      public/relic-data/small-photo/第70页-290.png
  70. BIN
      public/relic-data/small-photo/第70页-291.png
  71. BIN
      public/relic-data/small-photo/第70页-292.png
  72. BIN
      public/relic-data/small-photo/第70页-293.png
  73. BIN
      public/relic-data/small-photo/第70页-294.png
  74. BIN
      public/relic-data/small-photo/第70页-295.png
  75. BIN
      public/relic-data/small-photo/第70页-296.png
  76. BIN
      public/relic-data/small-photo/第71页-298.png
  77. BIN
      public/relic-data/small-photo/第71页-300.png
  78. BIN
      public/relic-data/small-photo/第72页-303.png
  79. BIN
      public/relic-data/small-photo/第73页-308.png
  80. BIN
      public/relic-data/small-photo/第75页-322.png
  81. BIN
      public/relic-data/small-photo/第86页-394.png
  82. BIN
      public/relic-data/small-photo/第94页-438.png
  83. 58 10
      src/App.vue
  84. BIN
      src/assets/audios/camera-intro-1-2.mp3
  85. BIN
      src/assets/images/hotspot-relic/Group491-min.png
  86. BIN
      src/assets/images/hotspot-relic/Label_wenwu-min.png
  87. BIN
      src/assets/images/hotspot-relic/bg-box1kongbai-min.png
  88. BIN
      src/assets/images/hotspot-relic/bg_baoxiang-min.png
  89. BIN
      src/assets/images/hotspot-relic/box_jicheng-min.png
  90. BIN
      src/assets/images/hotspot-relic/btn-min.png
  91. BIN
      src/assets/images/hotspot-relic/kongbai-min.png
  92. BIN
      src/assets/images/hotspot-relic/poster1-min.png
  93. BIN
      src/assets/images/hotspot-relic/tab_title-min.png
  94. BIN
      src/assets/images/scene-preview-title-1.png
  95. BIN
      src/assets/images/startup-animation.png
  96. 30 30
      src/components/HotspotDialog-1.vue
  97. 292 34
      src/components/MutiRelicHotSpot.vue
  98. 1 1
      src/components/RelicDetailForHotspot.vue
  99. 12 1
      src/store/index.js
  100. 0 0
      src/views/HomeView.vue

BIN
public/relic-data/big-photo/第107页-482.png


BIN
public/relic-data/big-photo/第111页-530.png


BIN
public/relic-data/big-photo/第115页-552.png


BIN
public/relic-data/big-photo/第115页-553.png


BIN
public/relic-data/big-photo/第115页-554.png


BIN
public/relic-data/big-photo/第115页-557.png


BIN
public/relic-data/big-photo/第116页-559.png


BIN
public/relic-data/big-photo/第116页-561.png


BIN
public/relic-data/big-photo/第33页-105.png


BIN
public/relic-data/big-photo/第36页-114.png


BIN
public/relic-data/big-photo/第37页-117.png


BIN
public/relic-data/big-photo/第40页-126.png


BIN
public/relic-data/big-photo/第42页-138.png


BIN
public/relic-data/big-photo/第45页-145.png


BIN
public/relic-data/big-photo/第46页-158.png


BIN
public/relic-data/big-photo/第48页-169.png


BIN
public/relic-data/big-photo/第48页-170.png


BIN
public/relic-data/big-photo/第68页-270.png


BIN
public/relic-data/big-photo/第69页-272.png


BIN
public/relic-data/big-photo/第69页-273.png


BIN
public/relic-data/big-photo/第69页-274.png


BIN
public/relic-data/big-photo/第69页-275.png


BIN
public/relic-data/big-photo/第69页-277.png


BIN
public/relic-data/big-photo/第69页-278.png


BIN
public/relic-data/big-photo/第69页-280.png


BIN
public/relic-data/big-photo/第69页-281.png


BIN
public/relic-data/big-photo/第69页-282.png


BIN
public/relic-data/big-photo/第70页-289.png


BIN
public/relic-data/big-photo/第70页-290.png


BIN
public/relic-data/big-photo/第70页-291.png


BIN
public/relic-data/big-photo/第70页-292.png


BIN
public/relic-data/big-photo/第70页-293.png


BIN
public/relic-data/big-photo/第70页-294.png


BIN
public/relic-data/big-photo/第70页-295.png


BIN
public/relic-data/big-photo/第70页-296.png


BIN
public/relic-data/big-photo/第72页-303.png


BIN
public/relic-data/big-photo/第72页-304.png


BIN
public/relic-data/big-photo/第73页-306.png


BIN
public/relic-data/big-photo/第73页-307.png


BIN
public/relic-data/big-photo/第73页-308.png


BIN
public/relic-data/big-photo/第75页-322.png


BIN
public/relic-data/big-photo/第86页-394.png


BIN
public/relic-data/big-photo/第94页-438.png


Файловите разлики са ограничени, защото са твърде много
+ 380 - 285
public/relic-data/data.json


BIN
public/relic-data/small-photo/第107页-482.png


BIN
public/relic-data/small-photo/第111页-530.png


BIN
public/relic-data/small-photo/第115页-553.png


BIN
public/relic-data/small-photo/第116页-559.png


BIN
public/relic-data/small-photo/第116页-561.png


BIN
public/relic-data/small-photo/第33页-105.png


BIN
public/relic-data/small-photo/第36页-114.png


BIN
public/relic-data/small-photo/第37页-117.png


BIN
public/relic-data/small-photo/第39页-121.png


BIN
public/relic-data/small-photo/第40页-124.png


BIN
public/relic-data/small-photo/第40页-126.png


BIN
public/relic-data/small-photo/第42页-138.png


BIN
public/relic-data/small-photo/第45页-145.png


BIN
public/relic-data/small-photo/第46页-158.png


BIN
public/relic-data/small-photo/第48页-169.png


BIN
public/relic-data/small-photo/第48页-170.png


BIN
public/relic-data/small-photo/第58页-223.png


BIN
public/relic-data/small-photo/第68页-270.png


BIN
public/relic-data/small-photo/第69页-272.png


BIN
public/relic-data/small-photo/第69页-273.png


BIN
public/relic-data/small-photo/第69页-274.png


BIN
public/relic-data/small-photo/第69页-281.png


BIN
public/relic-data/small-photo/第69页-282.png


BIN
public/relic-data/small-photo/第70页-289.png


BIN
public/relic-data/small-photo/第70页-290.png


BIN
public/relic-data/small-photo/第70页-291.png


BIN
public/relic-data/small-photo/第70页-292.png


BIN
public/relic-data/small-photo/第70页-293.png


BIN
public/relic-data/small-photo/第70页-294.png


BIN
public/relic-data/small-photo/第70页-295.png


BIN
public/relic-data/small-photo/第70页-296.png


BIN
public/relic-data/small-photo/第71页-298.png


BIN
public/relic-data/small-photo/第71页-300.png


BIN
public/relic-data/small-photo/第72页-303.png


BIN
public/relic-data/small-photo/第73页-308.png


BIN
public/relic-data/small-photo/第75页-322.png


BIN
public/relic-data/small-photo/第86页-394.png


BIN
public/relic-data/small-photo/第94页-438.png


+ 58 - 10
src/App.vue

@@ -15,10 +15,29 @@
       </div>
     </Teleport>
   </div>
+
+  <div
+    v-if="store.state.iframeAttrs"
+    class="iframe-page"
+  >
+    <img
+      class="iframe-page__close"
+      draggable="false"
+      src="@/assets/images/ship-game/icon_cancel-min.png"
+      @click="store.dispatch('closeIframePage')"
+    >
+    <iframe
+      :src="store.state.iframeAttrs.url"
+      :style="store.state.iframeAttrs.style"
+    />
+  </div>
 </template>
 
 <script setup>
 import { provide } from 'vue'
+import { useStore } from "vuex"
+
+const store = useStore()
 
 /**
  * 背景音乐
@@ -27,8 +46,7 @@ let bgAudio = null
 let curBgAudio = ''
 
 const handleBgAudio = ({ sceneIdx, cameraIdx, canPlay }) => {
-  console.log(sceneIdx, cameraIdx)
-  if (`${sceneIdx}-${cameraIdx}` === curBgAudio) return
+  if (`${sceneIdx}-${cameraIdx}` === curBgAudio || `${sceneIdx}` === curBgAudio) return
 
   bgAudio?.pause()
 
@@ -84,15 +102,29 @@ provide('startBgAudio', startBgAudio)
 </script>
 
 <style lang="less">
-// html, body {
-//   overscroll-behavior: none;
-//   overflow: hidden;
-// }
+.iframe-page {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  background: rgba(0,0,0,.8);
+  z-index: 9999;
 
-// * {
-//   user-select: none;
-//   -webkit-touch-callout: none;
-// }
+  iframe {
+    border: 0;
+  }
+  &__close {
+    position: absolute;
+    top: 52px;
+    right: 58px;
+    cursor: pointer;
+    z-index: 8;
+  }
+}
 
 #app {
   height: 100%;
@@ -238,6 +270,22 @@ provide('startBgAudio', startBgAudio)
 //   background-color: rgba(0, 0, 0, 90%) !important;
 // }
 
+button.logo{
+  position: absolute;
+  left: 50px;
+  top: 30px;
+  width: 252px;
+  height: 55px;
+  z-index: 9;
+  >img{
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+  }
+}
+
 .screen-rotate-tip {
   position: fixed;
   left: 0;

BIN
src/assets/audios/camera-intro-1-2.mp3


BIN
src/assets/images/hotspot-relic/Group491-min.png


BIN
src/assets/images/hotspot-relic/Label_wenwu-min.png


BIN
src/assets/images/hotspot-relic/bg-box1kongbai-min.png


BIN
src/assets/images/hotspot-relic/bg_baoxiang-min.png


BIN
src/assets/images/hotspot-relic/box_jicheng-min.png


BIN
src/assets/images/hotspot-relic/btn-min.png


BIN
src/assets/images/hotspot-relic/kongbai-min.png


BIN
src/assets/images/hotspot-relic/poster1-min.png


BIN
src/assets/images/hotspot-relic/tab_title-min.png


BIN
src/assets/images/scene-preview-title-1.png


BIN
src/assets/images/startup-animation.png


+ 30 - 30
src/components/HotspotDialog-1.vue

@@ -546,8 +546,10 @@
 <script setup>
 import { ref, computed, reactive, inject } from "vue"
 import MsgContent from "./MsgContent.vue"
+import { useStore } from "vuex"
 import { useRoute, useRouter } from "vue-router"
 
+const store = useStore()
 const startBgAudio = inject("startBgAudio")
 const stopBgAudio = inject("stopBgAudio")
 const route = useRoute()
@@ -602,37 +604,35 @@ const isDDLS = computed(() =>
 )
 
 const openNewWindow = () => {
-  const width = 375
-  const height = 812
-  const left = (window.screenX || window.screenLeft || 0) + (screen.width - width) / 2
-  const top = (window.innerHeight - height) / 2
-
-  window.open('https://houseoss.4dkankan.com/project/yzdyh-dadu/game/index.html', '_blank', `width=${width},height=${height},top=${top},left=${left},toolbar=no,menubar=no,location=no,status=no`)
+  store.dispatch('openIframePage', {
+    url: 'https://houseoss.4dkankan.com/project/yzdyh-dadu/game/index.html',
+    style: 'width: 375px; height: 812px'
+  })
 }
 
-const goRelicDetail = (idx) => {
-  emits("openRelicDetail", idx)
-  if (!openedBoxList.includes(idx)) {
-    openedBoxList.push(idx)
-  }
-  // router.replace({
-  //   name: 'PanoView',
-  //   query: {
-  //     ...route.query,
-  //     hotspot: props.relicInfo.name
-  //   }
-  // }).then(() => {
-  //   router.push({
-  //     name: 'RelicDetail',
-  //     query: {
-  //       sceneIdx: route.query.sceneIdx,
-  //       cameraIdx: route.query.cameraIdx,
-  //       relicIdx: idx,
-  //       hot: 1
-  //     }
-  //   })
-  // })
-}
+// const goRelicDetail = (idx) => {
+//   emits("openRelicDetail", idx)
+//   if (!openedBoxList.includes(idx)) {
+//     openedBoxList.push(idx)
+//   }
+//   // router.replace({
+//   //   name: 'PanoView',
+//   //   query: {
+//   //     ...route.query,
+//   //     hotspot: props.relicInfo.name
+//   //   }
+//   // }).then(() => {
+//   //   router.push({
+//   //     name: 'RelicDetail',
+//   //     query: {
+//   //       sceneIdx: route.query.sceneIdx,
+//   //       cameraIdx: route.query.cameraIdx,
+//   //       relicIdx: idx,
+//   //       hot: 1
+//   //     }
+//   //   })
+//   // })
+// }
 
 const curMsgIndex = 0
 const currentMsg = computed(() => {
@@ -769,7 +769,7 @@ const close = () => {
   left: 0;
   right: 0;
   bottom: 0;
-  z-index: 4;
+  z-index: 10;
 
   .zmf-back {
     position: absolute;

+ 292 - 34
src/components/MutiRelicHotSpot.vue

@@ -1,32 +1,117 @@
 <template>
   <div class="muti-relic">
-    <div class="muti-relic-container">
+    <template v-if="!showMyBox">
+      <div class="muti-relic-container">
+        <div
+          v-for="(item, idx) in relicInfo"
+          :key="idx"
+          class="muti-relic__item"
+          @click="handleClick(item['序号'] - 1, idx)"
+        >
+          <div class="muti-relic__item__title">
+            <p>{{ item['名称'] }}</p>
+          </div>
+          <div
+            class="img"
+            :style="{
+              backgroundImage: `url(${getImgUrl(item)})`
+            }"
+          />
+          <p class="description">
+            {{ item['文物简介'] }}
+          </p>
+        </div>
+      </div>
+
       <div
-        v-for="(item, idx) in relicInfo"
-        :key="idx"
-        class="muti-relic__item"
-        @click="handleClick(idx)"
+        class="muti-relic__btn"
+        @click="handleShowBox"
       >
-        <p>{{ item['名称'] }}</p>
-        <div
-          class="img"
-          :style="{
-            backgroundImage: `url(${getImgUrl(item)})`
-          }"
-        />
+        <span>我的宝盒</span>
       </div>
-    </div>
+    </template>
+
+    <template v-else>
+      <div class="my-box">
+        <div class="my-box-list">
+          <div
+            v-for="(item, idx) in store.getters.hotRelicData"
+            :key="idx"
+            class="my-box-list__item"
+          >
+            <div
+              class="img"
+            >
+              <img
+                v-if="relicClicked.includes(idx)"
+                :src="getImgUrl(item)"
+              >
+              <div
+                class="img__bg"
+                :style="{
+                  backgroundImage: `url(${relicClicked.includes(idx) ? require('@/assets/images/hotspot-relic/bg-box1kongbai-min.png') : require('@/assets/images/hotspot-relic/kongbai-min.png')})`
+                }"
+              />
+            </div>
+            <p class="label">
+              {{ relicClicked.includes(idx) ? item['名称'] : `宝箱${idx + 1}` }}
+            </p>
+          </div>
+        </div>
+      </div>
+
+      <img
+        v-if="showCompose"
+        class="muti-relic__compose"
+        src="@/assets/images/hotspot-relic/box_jicheng-min.png"
+        @click="handlePoster"
+      >
+      <img
+        v-if="showPoster"
+        class="muti-relic__poster"
+        :src="POSTER_LIST[posterIndex]"
+      >
+
+      <div
+        class="muti-relic__btn"
+        :style="{
+          zIndex: hideBox ? 2 : 1
+        }"
+        @click="handleBack"
+      >
+        <span>返回</span>
+      </div>
+    </template>
 
     <div
       class="mask"
-      @click="emits('close')"
+      :style="{
+        zIndex: hideBox ? 1 : -1
+      }"
     />
+
+    <img
+      class="muti-relic__close"
+      draggable="false"
+      src="@/assets/images/btn-close.png"
+      :style="{
+        zIndex: hideBox ? 2 : 1
+      }"
+      @click="emits('close')"
+    >
   </div>
 </template>
 
 <script setup>
-import { computed } from 'vue'
+import { computed, ref } from 'vue'
 import { useStore } from "vuex"
+import Poster1Img from '@/assets/images/hotspot-relic/poster1-min.png'
+
+const RELIC_KEY = 'ydd-relic-clicked'
+const COMPOSE_KEY = 'ydd-relic-compose'
+const POSTER_LIST = [
+  Poster1Img
+]
 
 const store = useStore()
 const props = defineProps({
@@ -35,6 +120,12 @@ const props = defineProps({
     default: () => ({})
   }
 })
+const showMyBox = ref(false)
+const showCompose = ref(false)
+const showPoster = ref(false)
+const posterIndex = ref(0)
+const hideBox = computed(() => showCompose.value || showPoster.value)
+const relicClicked = ref([])
 
 const emits = defineEmits(['close', 'openRelicDetail'])
 
@@ -47,12 +138,49 @@ const relicInfo = computed(() => {
 })
 
 const getImgUrl = (item) => {
-  return `${process.env.BASE_URL}relic-data/big-photo/${item['图片名'][0]}`
+  return `${process.env.BASE_URL}relic-data/small-photo/${item['图片名'][0]}`
 }
 
-const handleClick = (idx) => {
+const handleClick = (relicIndex, idx) => {
   const stack = props.relicInfo.hotspotTitle.split(',')
   emits('openRelicDetail', Number(stack[idx]))
+  const cache = localStorage.getItem(RELIC_KEY) ? JSON.parse(localStorage.getItem(RELIC_KEY)) : []
+  if (!cache.includes(relicIndex)) {
+    cache.push(relicIndex)
+    localStorage.setItem(RELIC_KEY, JSON.stringify(cache))
+  }
+}
+
+const handleShowBox = () => {
+  relicClicked.value = localStorage.getItem(RELIC_KEY) ? JSON.parse(localStorage.getItem(RELIC_KEY)) : []
+  showMyBox.value = true
+
+  if (relicClicked.value.length === store.getters.hotRelicData.length) {
+    // 宝盒已全部打开
+    if (!localStorage.getItem(COMPOSE_KEY)) {
+      showCompose.value = true
+    } else {
+      // 已合成海报
+      showRandomPoster()
+    }
+  }
+}
+
+const handleBack = () => {
+  showCompose.value = false
+  showPoster.value = false
+  showMyBox.value = false
+}
+
+const handlePoster = () => {
+  showCompose.value = false
+  showRandomPoster()
+  localStorage.setItem(COMPOSE_KEY, 1)
+}
+
+const showRandomPoster = () => {
+  posterIndex.value = Math.floor(Math.random() * POSTER_LIST.length)
+  showPoster.value = true
 }
 </script>
 
@@ -77,45 +205,175 @@ const handleClick = (idx) => {
     background: rgba(0,0,0,0.85);
     z-index: -1;
   }
+  &__btn {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    position: absolute;
+    left: 50%;
+    bottom: 60px;
+    width: 259px;
+    height: 67px;
+    cursor: pointer;
+    font-size: 28px;
+    font-family: "Source Han Serif CN Heavy";
+    transform: translateX(-50%);
+    background: url('@/assets/images/hotspot-relic/btn-min.png') no-repeat center / contain;
+
+    span {
+      background: linear-gradient(180deg, #FFFBC4 0%, #E5C05B 100%);
+      -webkit-background-clip: text;
+      -webkit-text-fill-color: transparent;
+    }
+  }
+  &__close {
+    position: absolute;
+    top: 95px;
+    right: 88px;
+    cursor: pointer;
+  }
+  .my-box {
+    position: relative;
+    top: -20px;
+    width: 1538px;
+    height: 759px;
+    background: url('@/assets/images/hotspot-relic/bg_baoxiang-min.png') no-repeat center / contain;
+
+    &-list {
+      position: absolute;
+      top: 120px;
+      left: 395px;
+      display: grid;
+      grid-template-columns: repeat(6, 1fr);
+      gap: 35px;
+
+      &__item {
+        display: flex;
+        flex-direction: column;
+        width: 103px;
+
+        .img {
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          position: relative;
+          width: 103px;
+          height: 103px;
+
+          img {
+            position: relative;
+            width: 70px;
+            height: 70px;
+            object-position: center;
+            object-fit: contain;
+            z-index: 1;
+          }
+          &__bg {
+            position: absolute;
+            top: 0;
+            left: 0;
+            right: 0;
+            bottom: 0;
+            background-position: center;
+            background-size: contain;
+          }
+        }
+        .label {
+          width: 103px;
+          overflow: hidden;
+          white-space: nowrap;
+          text-overflow: ellipsis;
+          color: #B9A67C;
+          font-size: 16px;
+          text-align: center;
+          letter-spacing: 0 !important;
+        }
+      }
+    }
+  }
+  &__compose,
+  &__poster {
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    animation: bounceIn linear .2s;
+    transform: translate(-50%, -50%);
+    cursor: pointer;
+    z-index: 2;
+  }
   &-container {
     display: flex;
+    gap: 50px;
   }
   &__item {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
     position: relative;
-    width: 427px;
-    height: 491px;
-    background: url('@/assets/images/hotspot-relic/Group491-min.png') no-repeat center / cover;
+    padding: 110px 90px 150px;
+    width: 442px;
+    height: 565px;
+    background: url('@/assets/images/hotspot-relic/Label_wenwu-min.png') no-repeat center / cover;
     cursor: pointer;
     transition: transform linear .2s;
+    box-sizing: border-box;
 
     &:hover {
       transform: scale(1.05);
     }
-    p {
-      position: absolute;
-      top: 52px;
-      left: 110px;
-      right: 110px;
-      font-size: 20px;
-      font-family: "Source Han Serif CN-Bold";
-      color: #724B26;
-      line-height: 23px;
-      letter-spacing: 2px;
+    &__title {
+      flex-shrink: 0;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      padding: 0 50px;
+      width: 269px;
+      height: 57px;
       text-align: center;
       overflow: hidden;
       white-space: nowrap;
       text-overflow: ellipsis;
+      box-sizing: border-box;
+      background: url('@/assets/images/hotspot-relic/tab_title-min.png') no-repeat center / contain;
+
+      p {
+        flex: 1;
+        width: 0;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        font-size: 17px;
+        letter-spacing: 1px !important;
+        font-family: "Source Han Serif CN Heavy" !important;
+        color: #724B26;
+      }
     }
     .img {
-      position: absolute;
-      top: 131px;
-      left: 102px;
+      flex-shrink: 0;
       width: 222px;
-      height: 207px;
+      height: 230px;
       background-repeat: no-repeat;
       background-position: center;
       background-size: contain;
     }
+
+    .description {
+      font-size: 18px;
+      letter-spacing: 0 !important;
+      font-family: "Source Han Sans SC light" !important;
+    }
+  }
+}
+
+@keyframes bounceIn {
+  0% {
+    transform: translate(-50%, -50%) scale(0.2);
+  }
+  80% {
+    transform: translate(-50%, -50%) scale(1.2);
+  }
+  100% {
+    transform: translate(-50%, -50%) scale(1);
   }
 }
 </style>

+ 1 - 1
src/components/RelicDetailForHotspot.vue

@@ -47,7 +47,7 @@
         v-html="relicInfo['年份']"
       />
       <div
-        class="detail"
+        class="detail text-indent"
         v-html="relicInfo['详细描述']"
       />
       <button

+ 12 - 1
src/store/index.js

@@ -13,9 +13,11 @@ export default createStore({
     canStart: false,
     haveShownSceneEffect: [false, false, false],
     relicDataRaw: projectData['长轴展示文物清单'],
-    hotRelicDataRaw: projectData['场景中宝盒']
+    hotRelicDataRaw: projectData['宝盒文物清单'],
+    iframeAttrs: null
   },
   getters: {
+    iframeAttrs: (state) => state.iframeAttrs,
     catalogTopology: (state) => {
       if (!state.panoData || !state.panoData.catalogRoot || !state.panoData.catalogs) {
         return
@@ -73,6 +75,9 @@ export default createStore({
     }
   },
   mutations: {
+    setIframeAttrs(state, value) {
+      state.iframeAttrs = value
+    },
     setPanoData(state, value) {
       state.panoData = value
     },
@@ -90,6 +95,12 @@ export default createStore({
     }
   },
   actions: {
+    openIframePage({ commit }, attrs) {
+      commit('setIframeAttrs', attrs)
+    },
+    closeIframePage({ commit }) {
+      commit('setIframeAttrs', null)
+    },
   },
   modules: {
   }

+ 0 - 0
src/views/HomeView.vue


Някои файлове не бяха показани, защото твърде много файлове са промени