lanxin 1 месяц назад
Родитель
Сommit
29fde8e5d5
39 измененных файлов с 414 добавлено и 16 удалено
  1. BIN
      public/Beizhongshijie/Build/Build.data.unityweb
  2. BIN
      public/Beizhongshijie/Build/Build.framework.js.unityweb
  3. 1 0
      public/Beizhongshijie/Build/Build.loader.js
  4. BIN
      public/Beizhongshijie/Build/Build.wasm.unityweb
  5. 6 0
      public/Beizhongshijie/ServiceWorker.js
  6. 15 0
      public/Beizhongshijie/StreamingAssets/aa/AddressablesLink/link.xml
  7. BIN
      public/Beizhongshijie/StreamingAssets/aa/WebGL/192c0a5f7632ad77b719927c11e58659.bundle
  8. BIN
      public/Beizhongshijie/StreamingAssets/aa/WebGL/1f2b5bf6f34bc143f88c899322c838e2.bundle
  9. BIN
      public/Beizhongshijie/StreamingAssets/aa/WebGL/2351c1de38c92e70c7c8d7d78944c73a.bundle
  10. BIN
      public/Beizhongshijie/StreamingAssets/aa/WebGL/336452718050b1a9080376559981a64d.bundle
  11. BIN
      public/Beizhongshijie/StreamingAssets/aa/WebGL/bceef79b437a04a8aec65529781881b6.bundle
  12. BIN
      public/Beizhongshijie/StreamingAssets/aa/WebGL/d4c3433e8dbcfbf71bc017da6eedcfb7.bundle
  13. 1 0
      public/Beizhongshijie/StreamingAssets/aa/catalog.json
  14. 1 0
      public/Beizhongshijie/StreamingAssets/aa/settings.json
  15. BIN
      public/Beizhongshijie/TemplateData/favicon.ico
  16. BIN
      public/Beizhongshijie/TemplateData/progress-bar-empty-dark.png
  17. BIN
      public/Beizhongshijie/TemplateData/progress-bar-empty-light.png
  18. BIN
      public/Beizhongshijie/TemplateData/progress-bar-full-dark.png
  19. BIN
      public/Beizhongshijie/TemplateData/progress-bar-full-light.png
  20. 50 0
      public/Beizhongshijie/TemplateData/style.css
  21. BIN
      public/Beizhongshijie/TemplateData/webmemd-icon.png
  22. 106 0
      public/Beizhongshijie/index.html
  23. 111 0
      public/Beizhongshijie/main.html
  24. 6 0
      public/Beizhongshijie/unityExport.js
  25. BIN
      public/myData/img/sin_1.png
  26. BIN
      public/myData/img/sin_1_line.png
  27. BIN
      public/myData/img/sin_2.png
  28. BIN
      public/myData/img/sin_2_line.png
  29. BIN
      public/myData/img/sin_3.png
  30. BIN
      public/myData/img/sin_3_line.png
  31. 3 0
      public/myData/myData.js
  32. BIN
      src/assets/img/A6_arrow.png
  33. BIN
      src/assets/img/A6_cardBg.png
  34. BIN
      src/assets/img/A6_pointBg.png
  35. 67 0
      src/pages/A6ybwx/A6_2_zxzgh/index.module.scss
  36. 24 11
      src/pages/A6ybwx/A6_2_zxzgh/index.tsx
  37. 20 3
      src/pages/A6ybwx/index.tsx
  38. 2 2
      src/types/declaration.d.ts
  39. 1 0
      src/types/function.d.ts

BIN
public/Beizhongshijie/Build/Build.data.unityweb


BIN
public/Beizhongshijie/Build/Build.framework.js.unityweb


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
public/Beizhongshijie/Build/Build.loader.js


BIN
public/Beizhongshijie/Build/Build.wasm.unityweb


+ 6 - 0
public/Beizhongshijie/ServiceWorker.js

@@ -0,0 +1,6 @@
+
+self.addEventListener('install', function (e) {
+    console.log('[Service Worker] Install');
+    
+});
+

+ 15 - 0
public/Beizhongshijie/StreamingAssets/aa/AddressablesLink/link.xml

@@ -0,0 +1,15 @@
+<linker>
+  <assembly fullname="Unity.Addressables, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" preserve="all">
+    <type fullname="UnityEngine.AddressableAssets.Addressables" preserve="all" />
+  </assembly>
+  <assembly fullname="Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" preserve="all">
+    <type fullname="UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider" preserve="all" />
+    <type fullname="UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider" preserve="all" />
+    <type fullname="UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider" preserve="all" />
+    <type fullname="UnityEngine.ResourceManagement.ResourceProviders.LegacyResourcesProvider" preserve="all" />
+    <type fullname="UnityEngine.ResourceManagement.ResourceProviders.SceneProvider" preserve="all" />
+  </assembly>
+  <assembly fullname="UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+    <type fullname="UnityEngine.Texture2D" preserve="all" />
+  </assembly>
+</linker>

BIN
public/Beizhongshijie/StreamingAssets/aa/WebGL/192c0a5f7632ad77b719927c11e58659.bundle


BIN
public/Beizhongshijie/StreamingAssets/aa/WebGL/1f2b5bf6f34bc143f88c899322c838e2.bundle


BIN
public/Beizhongshijie/StreamingAssets/aa/WebGL/2351c1de38c92e70c7c8d7d78944c73a.bundle


BIN
public/Beizhongshijie/StreamingAssets/aa/WebGL/336452718050b1a9080376559981a64d.bundle


BIN
public/Beizhongshijie/StreamingAssets/aa/WebGL/bceef79b437a04a8aec65529781881b6.bundle


BIN
public/Beizhongshijie/StreamingAssets/aa/WebGL/d4c3433e8dbcfbf71bc017da6eedcfb7.bundle


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
public/Beizhongshijie/StreamingAssets/aa/catalog.json


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
public/Beizhongshijie/StreamingAssets/aa/settings.json


BIN
public/Beizhongshijie/TemplateData/favicon.ico


BIN
public/Beizhongshijie/TemplateData/progress-bar-empty-dark.png


BIN
public/Beizhongshijie/TemplateData/progress-bar-empty-light.png


BIN
public/Beizhongshijie/TemplateData/progress-bar-full-dark.png


BIN
public/Beizhongshijie/TemplateData/progress-bar-full-light.png


+ 50 - 0
public/Beizhongshijie/TemplateData/style.css

@@ -0,0 +1,50 @@
+html {}
+body { padding: 0; margin: 0 }
+#unity-container { position: fixed; width: 100%; height: 100%; }
+#unity-canvas { width: 100%; height: 100%; background:  url('bg.jpg') no-repeat center; background-size: cover; }
+#unity-loading-bar { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); display: none }
+#unity-progress-bar-empty { margin-left: auto; margin-right: auto; width: 141px; height: 18px; margin-top: 10px; background: url('progress-bar-empty-dark.png') no-repeat center }
+#unity-progress-bar-full { width: 0%; height: 18px; margin-top: 10px; background: url('progress-bar-full-dark.png') no-repeat center }
+#unity-warning { position: absolute; left: 50%; top: 5%; transform: translate(-50%); background: white; padding: 10px; display: none }
+
+@media all and (orientation: landscape) {
+    .landscape {
+        transform: rotate(0deg);
+        width: 100vw;
+        width: 100dvw;
+        height: 100vh;
+        height: 100dvh;
+        top: 0;
+        left: 0;
+    }
+    .portrait {
+        transform: rotate(90deg);
+        transform-origin: left top;
+        width: 100vh;
+        width: 100dvh;
+        height: 100vw;
+        height: 100dvw;
+        left: 100%;
+    }
+}
+
+@media all and (orientation: portrait) {
+    .landscape {
+        transform: rotate(90deg);
+        transform-origin: left top;
+        width: 100vh;
+        width: 100dvh;
+        height: 100vw;
+        height: 100dvw;
+        left: 100%;
+    }
+    .portrait {
+        transform: rotate(0deg);
+        width: 100vw;
+        width: 100dvw;
+        height: 100vh;
+        height: 100dvh;
+        top: 0;
+        left: 0;
+    }
+}

BIN
public/Beizhongshijie/TemplateData/webmemd-icon.png


+ 106 - 0
public/Beizhongshijie/index.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+  <head>
+    <meta charset="utf-8" />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>Chenzhebei-ShanxiMuseum</title>
+    <link rel="shortcut icon" href="TemplateData/favicon.ico" />
+    <link rel="stylesheet" href="TemplateData/style.css" />
+    <script src="./unityExport.js"></script>
+  </head>
+  <body>
+    <div id="unity-container">
+      <canvas id="unity-canvas" width="960" height="600" tabindex="-1"></canvas>
+      <div id="unity-loading-bar">
+        <div id="unity-progress-bar-empty">
+          <div id="unity-progress-bar-full"></div>
+        </div>
+      </div>
+      <div id="unity-warning"></div>
+    </div>
+  </body>
+  <script>
+    var container = document.querySelector('#unity-container')
+    var canvas = document.querySelector('#unity-canvas')
+    var loadingBar = document.querySelector('#unity-loading-bar')
+    var progressBarFull = document.querySelector('#unity-progress-bar-full')
+    var warningBanner = document.querySelector('#unity-warning')
+
+    // Shows a temporary message banner/ribbon for a few seconds, or
+    // a permanent error message on top of the canvas if type=='error'.
+    // If type=='warning', a yellow highlight color is used.
+    // Modify or remove this function to customize the visually presented
+    // way that non-critical warnings and error messages are presented to the
+    // user.
+    function unityShowBanner(msg, type) {
+      function updateBannerVisibility() {
+        warningBanner.style.display = warningBanner.children.length ? 'block' : 'none'
+      }
+      var div = document.createElement('div')
+      div.innerHTML = msg
+      warningBanner.appendChild(div)
+      if (type == 'error') div.style = 'background: red; padding: 10px;'
+      else {
+        if (type == 'warning') div.style = 'background: yellow; padding: 10px;'
+        setTimeout(function () {
+          warningBanner.removeChild(div)
+          updateBannerVisibility()
+        }, 5000)
+      }
+      updateBannerVisibility()
+    }
+
+    var buildUrl = 'Build'
+    var loaderUrl = buildUrl + '/Build.loader.js'
+    var config = {
+      dataUrl: buildUrl + '/Build.data.unityweb',
+      frameworkUrl: buildUrl + '/Build.framework.js.unityweb',
+      codeUrl: buildUrl + '/Build.wasm.unityweb',
+      streamingAssetsUrl: 'StreamingAssets',
+      devicePixelRatio: 2,
+      companyName: 'FDage',
+      productName: 'Chenzhebei-ShanxiMuseum',
+      productVersion: '0.1',
+      showBanner: unityShowBanner
+    }
+
+    // By default Unity keeps WebGL canvas render target size matched with
+    // the DOM size of the canvas element (scaled by window.devicePixelRatio)
+    // Set this to false if you want to decouple this synchronization from
+    // happening inside the engine, and you would instead like to size up
+    // the canvas DOM size and WebGL render target sizes yourself.
+    // config.matchWebGLToCanvasSize = false;
+
+    if (/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)) {
+      // Mobile device style: fill the whole browser client area with the game canvas:
+      var meta = document.createElement('meta')
+      meta.name = 'viewport'
+      meta.content =
+        'width=device-width, height=device-height, initial-scale=1.0, user-scalable=no, shrink-to-fit=yes'
+      document.getElementsByTagName('head')[0].appendChild(meta)
+      document.querySelector('#unity-container').className = 'unity-mobile'
+      canvas.className = 'unity-mobile'
+
+      // To lower canvas resolution on mobile devices to gain some
+      // performance, uncomment the following line:
+      // config.devicePixelRatio = 1;
+    }
+
+    loadingBar.style.display = 'block'
+    var script = document.createElement('script')
+    script.src = loaderUrl
+    script.onload = () => {
+      createUnityInstance(canvas, config, progress => {
+        progressBarFull.style.width = 100 * progress + '%'
+      })
+        .then(unityInstance => {
+          loadingBar.style.display = 'none'
+          window.unityInstance = unityInstance
+        })
+        .catch(message => {
+          alert(message)
+        })
+    }
+    document.body.appendChild(script)
+  </script>
+</html>

+ 111 - 0
public/Beizhongshijie/main.html

@@ -0,0 +1,111 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Chenzhebei-ShanxiMuseum</title>
+    <link rel="shortcut icon" href="TemplateData/favicon.ico">
+      <style>
+        * {
+          margin: 0;
+          padding: 0;
+          box-sizing: border-box;
+        }
+
+        body {
+          overflow: hidden;
+        }
+
+        .root {
+          position: absolute;
+        }
+
+        iframe {
+          width: 100%;
+          height: 100%;
+        }
+
+        @media all and (orientation: landscape) {
+          .landscape {
+            transform: rotate(0deg);
+            width: 100vw;
+            width: 100dvw;
+            height: 100vh;
+            height: 100dvh;
+            top: 0;
+            left: 0;
+          }
+          .portrait {
+            transform: rotate(90deg);
+            transform-origin: left top;
+            width: 100vh;
+            width: 100dvh;
+            height: 100vw;
+            height: 100dvw;
+            left: 100%;
+          }
+        }
+        
+        @media all and (orientation: portrait) {
+          .landscape {
+            transform: rotate(90deg);
+            transform-origin: left top;
+            width: 100vh;
+            width: 100dvh;
+            height: 100vw;
+            height: 100dvw;
+            left: 100%;
+          }
+          .portrait {
+            transform: rotate(0deg);
+            width: 100vw;
+            width: 100dvw;
+            height: 100vh;
+            height: 100dvh;
+            top: 0;
+            left: 0;
+          }
+        }
+      </style>
+  </head>
+  <body>
+    <div class="root">
+      <iframe
+        id="main"
+        frameborder="0">
+      </iframe>
+    </div>
+  </body>
+  <script>
+    const rootDom = document.querySelector('.root')
+    const iframe = document.querySelector('#main')
+    let isPortrait = false;
+
+    function internal_ChangeViewType(portrait){
+      if(portrait){
+        rootDom.classList.remove('landscape');
+        rootDom.classList.add('portrait');
+      }else{
+        rootDom.classList.add('landscape');
+        rootDom.classList.remove('portrait');
+      }
+    }
+    
+    window.changeViewType = function(landscape){
+      if (isPortrait !== landscape){
+        isPortrait = landscape;
+        internal_ChangeViewType(landscape);
+      }
+    }
+    internal_ChangeViewType(isPortrait);
+    
+    window.onUnityClickBack = function () {
+        if (window.parent && window.parent !== window) {
+            window.parent.onUnityClickBack();
+        }
+    }
+    
+    iframe.src = "./main.html"
+  </script>
+</html>

+ 6 - 0
public/Beizhongshijie/unityExport.js

@@ -0,0 +1,6 @@
+//碑中世界 - 点击主要热点时触发
+window.onClickMainHotspot = function (hotspotName) {
+  if (window.parent && window.parent !== window) {
+    window.parent.onClickMainHotspot(hotspotName)
+  }
+}

BIN
public/myData/img/sin_1.png


BIN
public/myData/img/sin_1_line.png


BIN
public/myData/img/sin_2.png


BIN
public/myData/img/sin_2_line.png


BIN
public/myData/img/sin_3.png


BIN
public/myData/img/sin_3_line.png


+ 3 - 0
public/myData/myData.js

@@ -785,16 +785,19 @@ const myDataTemp = {
         {
           title: '公元420年 炳灵寺169窟',
           src: './myData/img/sin_1.png',
+          srcLine: './myData/img/sin_1_line.png',
           txt: '炳灵寺169窟“建弘元年”的题记,是中国现存最早的有明确纪年的佛教石窟实物。主尊肉髻呈馒头状、着通肩大衣,体态雄健、双臂与身体空间分离,注重表现躯体的结构。'
         },
         {
           title: '北魏 云冈石窟第20窟佛像',
           src: './myData/img/sin_2.png',
+          srcLine: './myData/img/sin_2_line.png',
           txt: '图上标注:主佛:着袒右式僧衣,僧衣厚重,中亚犍陀罗造像风格   旁边:印度秣菟罗造像风格,衣纹贴体'
         },
         {
           title: '北魏 云冈石窟第19窟右壁胁侍菩萨 ',
           src: './myData/img/sin_3.png',
+          srcLine: './myData/img/sin_3_line.png',
           txt: ''
         }
       ]

BIN
src/assets/img/A6_arrow.png


BIN
src/assets/img/A6_cardBg.png


BIN
src/assets/img/A6_pointBg.png


+ 67 - 0
src/pages/A6ybwx/A6_2_zxzgh/index.module.scss

@@ -309,6 +309,28 @@
                   height: 100%;
                   object-fit: contain;
                 }
+                .point {
+                  position: absolute;
+                  top: 50%;
+                  left: 50%;
+                  transform: translate(-50%, -50%);
+                  width: 160px;
+                  height: 40px;
+                  background: url('../../../assets/img/A6_pointBg.png') no-repeat center center;
+                  background-size: 100% 100%;
+                  display: flex;
+                  align-items: center;
+                  justify-content: center;
+                  .pointText {
+                    padding-left: 10px;
+                    width: 70%;
+                    height: 100%;
+                    font-size: 13px;
+                    font-weight: 500;
+                    color: rgba(124, 75, 54, 1);
+                    text-align: center;
+                  }
+                }
               }
               .lInfo {
                 padding-right: 20px;
@@ -409,6 +431,51 @@
   }
 }
 
+.InfoCard {
+  position: absolute;
+  z-index: 2;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+  width: 350px;
+  height: 250px;
+  display: flex;
+  align-items: center;
+  :global {
+    .dotLeft {
+      width: 150px;
+      height: 20px;
+      & > img {
+        width: 100%;
+        height: 100%;
+        object-fit: contain;
+      }
+    }
+    .main {
+      padding: 10px;
+      width: 230px;
+      height: 100%;
+      border-radius: 10px;
+      background-color: rgba(255, 255, 255, 0.6);
+      backdrop-filter: blur(5px);
+      box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.5);
+      font-size: 13px;
+      .time {
+        color: rgba(124, 75, 54, 1);
+      }
+      .location {
+        color: rgba(175, 135, 100, 1);
+      }
+      .text {
+        color: rgba(93, 96, 96, 1);
+      }
+      .from {
+        color: rgba(151, 151, 151, 1);
+      }
+    }
+  }
+}
+
 .tip {
   width: 100%;
   height: 100%;

+ 24 - 11
src/pages/A6ybwx/A6_2_zxzgh/index.tsx

@@ -2,12 +2,14 @@ import React, { useState, useRef } from 'react'
 import styles from './index.module.scss'
 import { useSelector } from 'react-redux'
 import { RootState } from '@/store'
+import { Toast } from 'antd-mobile'
 
 type InfoCardProps = {
   time: string
   location: string
   text?: string
   from: string
+  inset?: string
 }
 function Sinicize() {
 
@@ -17,6 +19,7 @@ function Sinicize() {
   const [selectedTime, setSelectedTime] = useState(0)
   const [isShowTip, setIsShowTip] = useState(false)
   const [currentImgIndex, setCurrentImgIndex] = useState(0)
+  const [isShowLine, setIsShowLine] = useState(true)
 
   const originRef = useRef<HTMLDivElement>(null)
   const sinicize1Ref = useRef<HTMLDivElement>(null)
@@ -44,6 +47,14 @@ function Sinicize() {
   }
 
   const handleYearItemClick = (index: number) => {
+    if (index !== 0) {
+      console.log('1111111111111')
+      Toast.show({
+        icon: 'fail',
+        content: '暂未开放'
+      })
+      return
+    }
     setCurrentImgIndex(0)
     if (selectedTime === index) {
       setSelectedTime(-1)
@@ -83,17 +94,16 @@ function Sinicize() {
   //   ori_touchStartX.current = e.touches[0].clientY
   // }
 
-  const InfoCard = ({ time, location, text, from }: InfoCardProps) => {
+  const InfoCard = ({ time, location, text, from, inset }: InfoCardProps) => {
     return (
-      <div className={styles.InfoCard}>
-        <div className="dotLeft"></div>
+      <div className={styles.InfoCard} style={{ inset: inset }}>
+        <div className="dotLeft"><img src={require('@/assets/img/A6_arrow.png')} alt="" /></div>
         <div className="main">
-          <div className="time"></div>
-          <div className="location"></div>
-          <div className="text"></div>
-          <div className="from"></div>
+          <div className="time">{time}</div>
+          <div className="location">{location}</div>
+          <div className="text">{text}</div>
+          <div className="from">{from}</div>
         </div>
-        <div className="dotRight"></div>
       </div>
     )
   }
@@ -196,13 +206,16 @@ function Sinicize() {
                       <div className="lTop">{sItem.desc}</div>
                       <div className="lContent">
                         <div className="lImgBox">
-                          <InfoCard
+                          <img src={isShowLine ? sItem.imgItems[0].srcLine : sItem.imgItems[0].src} alt="" />
+                          {!isShowLine && <InfoCard
                             time={sItem.imgItems[0].title}
                             location={sItem.imgItems[0].title}
                             text={sItem.imgItems[0].txt}
                             from={sItem.imgItems[0].title}
-                          />
-                          <img src={sItem.imgItems[0].src} alt="" />
+                          />}
+                          <div className="point">
+                            <div className="pointText">123</div>
+                          </div>
                         </div>
                         <div className="lInfo">
                           {sItem.items.map((i, index) => (

+ 20 - 3
src/pages/A6ybwx/index.tsx

@@ -11,6 +11,18 @@ function A6ybwx() {
   const [videoOk, setVideoOk] = useState(false)
   const [gotoTab, setGotoTab] = useState(0)
 
+  window.onClickMainHotspot = (hotspotName: string) => {
+    if (hotspotName === '梵风汉韵') {
+      window.location.href = '../index.html#/ybwx?tab=1'
+    }
+    if (hotspotName === '世系铭远') {
+      window.location.href = '../index.html#/ybwx?tab=2'
+    }
+    if (hotspotName === '丧葬因素') {
+      window.location.href = '../index.html#/ybwx?tab=1'
+    }
+  }
+
   useEffect(() => {
     const search = new URLSearchParams(window.location.hash.split('?')[1] || '')
     console.log(search.get('tab'), '===================================')
@@ -27,8 +39,8 @@ function A6ybwx() {
       objectFit: 'cover', // 视频的object-fit样式, 默认 cover
       loop: false, // 是否循环, 默认false
       autoplay: false, // 自动播放, 默认false
-      onPlay: () => {}, // 触发播放事件
-      onPause: () => {}, // 触发暂停事件
+      onPlay: () => { }, // 触发播放事件
+      onPause: () => { }, // 触发暂停事件
       onEnded: () => {
         setIsEnter(true)
         playerRef.current.destroy()
@@ -55,6 +67,11 @@ function A6ybwx() {
     }
   }, [isEnter, videoOk])
 
+  useEffect(() => {
+    const A6ybwxIframe = document.getElementById('A6ybwxIframe') as HTMLIFrameElement
+    A6ybwxIframe.src = 'Beizhongshijie/index.html'
+  }, [])
+
   return (
     <div className={classNames(styles.A6ybwx, isPc ? '' : styles.A6ybwxMo)}>
       <div className='videoBox'>
@@ -77,9 +94,9 @@ function A6ybwx() {
           </div>
         </div>
         <iframe
+          id='A6ybwxIframe'
           style={{ zIndex: isEnter ? 2 : -1 }}
           title='A6ybwx'
-          src='https://app.4dage.com/projects/Chenzhebei-ShanxiMuseum/RoomScene/index.html'
         />
 
         <div className='BtnTabBar' style={{ display: isEnter ? 'flex' : 'none' }}>

+ 2 - 2
src/types/declaration.d.ts

@@ -57,8 +57,8 @@ declare const F_Video: any
     time: string
     bgPath: string
     desc: string
-    items: { title: string; txt: string }[]
-    imgItems: { title: string; src: string; txt: string }[]
+    items: { title: string; txt: string; inset: string }[]
+    imgItems: { title: string; src: string; srcLine: string; txt: string }[]
   }[]
   zaoxiangDataDetail: {
     type: string

+ 1 - 0
src/types/function.d.ts

@@ -4,6 +4,7 @@ declare global {
     // 记录changePannel的index
     currentChangePanelIndex: number
     WjwjScene: boolean
+    onClickMainHotspot: (hotspotName: string) => void
     onModelControlled: () => void
     openPoem: () => void
     backToyblm: () => void