lanxin пре 2 месеци
родитељ
комит
4264df80c6
50 измењених фајлова са 1789 додато и 34302 уклоњено
  1. 8 3
      hot/babel.config.js
  2. 30 0
      hot/index.html
  3. 0 26499
      hot/package-lock.json
  4. 10 8
      hot/package.json
  5. 0 34
      hot/public/index.html
  6. 0 6
      hot/src/assets/base.css
  7. BIN
      hot/src/assets/images/logo.png
  8. BIN
      hot/src/assets/images/pc/left.png
  9. BIN
      hot/src/assets/images/pc/right.png
  10. BIN
      hot/src/assets/images/textBg.png
  11. 18 17
      hot/src/main.js
  12. 99 102
      hot/src/views/Home.vue
  13. 38 0
      hot/vite.config.js
  14. 0 3
      hot/vue.config.js
  15. 1414 7455
      hot/yarn.lock
  16. 10 7
      scene/public/css/oldVer/main0.css
  17. BIN
      scene/public/images/4dagePoint.png
  18. BIN
      scene/public/images/4dagePoint2.png
  19. BIN
      scene/public/images/Volume btn_off.png
  20. BIN
      scene/public/images/Volume btn_on.png
  21. BIN
      scene/public/images/auto-suspend.png
  22. BIN
      scene/public/images/auto.png
  23. BIN
      scene/public/images/back.png
  24. BIN
      scene/public/images/back2_active.png
  25. BIN
      scene/public/images/close1.png
  26. BIN
      scene/public/images/dollhouse.png
  27. BIN
      scene/public/images/dollhouse_active.png
  28. BIN
      scene/public/images/floor.png
  29. BIN
      scene/public/images/floor_active.png
  30. BIN
      scene/public/images/hotlist.png
  31. BIN
      scene/public/images/hotlist_active.png
  32. BIN
      scene/public/images/inside.png
  33. BIN
      scene/public/images/inside_active.png
  34. BIN
      scene/public/images/pause.png
  35. BIN
      scene/public/images/play.png
  36. 1 1
      scene/public/index.html
  37. 3 1
      scene/public/js/Hot.js
  38. 1 1
      scene/public/js/loadCAD.js
  39. 2 8
      scene/public/showa/js/loadCAD.js
  40. BIN
      scene/src/assets/font/ssgst.TTF
  41. BIN
      scene/src/assets/img/back.png
  42. BIN
      scene/src/assets/img/close.png
  43. BIN
      scene/src/assets/img/hotlist_bg.png
  44. BIN
      scene/src/assets/img/hotlist_bg_M.png
  45. 1 7
      scene/src/assets/styles/base.css
  46. 3 11
      scene/src/pages/A0base/index.tsx
  47. 4 2
      scene/src/pages/A2main/index.module.scss
  48. 10 44
      scene/src/pages/A2main/index.tsx
  49. 114 74
      scene/src/pages/A3hotList/index.module.scss
  50. 23 19
      scene/src/pages/A3hotList/index.tsx

+ 8 - 3
hot/babel.config.js

@@ -1,5 +1,10 @@
 module.exports = {
   presets: [
-    '@vue/cli-plugin-babel/preset'
-  ]
-}
+    [
+      "@babel/preset-env",
+      {
+        targets: "defaults", // 自动适配目标浏览器
+      },
+    ],
+  ],
+};

+ 30 - 0
hot/index.html

@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
+    <title>hotspot</title>
+  </head>
+
+  <body>
+    <noscript>
+      <strong>We're sorry but hotspot doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+    </noscript>
+    <div id="app"></div>
+    <script type="module" src="./src/main.js"></script>
+    <!-- built files will be auto injected -->
+  </body>
+  <script type="text/javascript">
+    document.oncontextmenu = function () {
+      return false;
+    };
+    document.onkeydown = function () {
+      if (window.event && window.event.keyCode === 123) {
+        event.keyCode = 0;
+        event.returnValue = false;
+        return false;
+      }
+    };
+  </script>
+</html>

Разлика између датотеке није приказан због своје велике величине
+ 0 - 26499
hot/package-lock.json


+ 10 - 8
hot/package.json

@@ -3,30 +3,32 @@
   "version": "0.1.0",
   "private": true,
   "scripts": {
-    "serve": "vue-cli-service serve",
-    "build": "vue-cli-service build",
-    "lint": "vue-cli-service lint"
+    "serve": "vite",
+    "build": "vite build",
+    "lint": "eslint . --ext .vue,.js"
   },
   "dependencies": {
     "axios": "^0.20.0",
     "core-js": "^3.6.5",
     "swiper": "^5.4.5",
     "v-viewer": "^1.5.1",
+    "vite-plugin-vue2": "^2.0.3",
     "vue": "^2.6.11",
     "vue-awesome-swiper": "^4.1.1",
     "vue-lazyload": "^1.3.3",
     "vue-router": "^3.2.0"
   },
   "devDependencies": {
-    "@vue/cli-plugin-babel": "~4.5.0",
-    "@vue/cli-plugin-eslint": "~4.5.0",
-    "@vue/cli-plugin-router": "~4.5.0",
-    "@vue/cli-service": "~4.5.0",
+    "@babel/preset-env": "^7.28.3",
+    "@vitejs/plugin-vue2": "2.3.4",
     "babel-eslint": "^10.1.0",
     "eslint": "^6.7.2",
-    "eslint-plugin-vue": "^6.2.2",
+    "eslint-plugin-vue": "^10.5.0",
     "less": "^3.0.4",
     "less-loader": "^5.0.0",
+    "vite": "4.5.0",
+    "vite-plugin-commonjs": "^0.10.4",
+    "vite-plugin-vue2-svg": "0.4.0",
     "vue-template-compiler": "^2.6.11"
   }
 }

+ 0 - 34
hot/public/index.html

@@ -1,34 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-  <meta charset="utf-8">
-  <meta http-equiv="X-UA-Compatible" content="IE=edge">
-  <meta name="viewport" content="width=device-width,initial-scale=1.0">
-  <title>
-    <%= htmlWebpackPlugin.options.title %>
-  </title>
-</head>
-
-<body>
-  <noscript>
-    <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
-        Please enable it to continue.</strong>
-  </noscript>
-  <div id="app"></div>
-  <!-- built files will be auto injected -->
-</body>
-<script type="text/javascript">
-  document.oncontextmenu = function () {
-    return false
-  }
-  document.onkeydown = function () {
-    if (window.event && window.event.keyCode === 123) {
-      event.keyCode = 0
-      event.returnValue = false
-      return false
-    }
-  }
-</script>
-
-</html>

+ 0 - 6
hot/src/assets/base.css

@@ -31,10 +31,4 @@ body {
     bottom: auto;
     top: 10px;
   }
-}
-
-@font-face {
-  font-family: 'fzFont';
-  /* 自定义字体名称 */
-  src: url('./font/fzFont.TTF') format('truetype');
 }

BIN
hot/src/assets/images/logo.png


BIN
hot/src/assets/images/pc/left.png


BIN
hot/src/assets/images/pc/right.png


BIN
hot/src/assets/images/textBg.png


+ 18 - 17
hot/src/main.js

@@ -1,23 +1,24 @@
-import Vue from 'vue'
-import App from './App.vue'
-import router from './router'
-import axios from 'axios'
-import 'viewerjs/dist/viewer.css'
-import Viewer from 'v-viewer'
+import Vue from "vue";
+import App from "./App.vue"; // 根组件
+import router from "./router"; // 路由(若使用 Vue Router)
+import axios from "axios";
+import "viewerjs/dist/viewer.css";
+import Viewer from "v-viewer";
 // 图片懒加载
-import VueLazyLoad from 'vue-lazyload'
+import VueLazyLoad from "vue-lazyload";
 Vue.use(VueLazyLoad, {
-  error: require('@/assets/images/IMGerror.png'),
-  loading: require('@/assets/images/loading.gif')
-})
+  error: require("@/assets/images/IMGerror.png"),
+  loading: require("@/assets/images/loading.gif"),
+});
 
-Vue.config.productionTip = false
-Vue.prototype.$http = axios
+Vue.config.productionTip = false;
+Vue.prototype.$http = axios;
 
-Vue.use(Viewer)
+Vue.use(Viewer);
 
-import './assets/base.css'
+import "./assets/base.css";
+// 初始化 Vue 实例
 new Vue({
-  router,
-  render: h => h(App)
-}).$mount('#app')
+  router, // 注入路由(如有)
+  render: (h) => h(App), // 渲染根组件
+}).$mount("#app"); // 挂载到 index.html 中的 #app 元素

+ 99 - 102
hot/src/views/Home.vue

@@ -1,7 +1,9 @@
 <template>
   <div class="home">
     <div class="main">
-      <div class="myTitle">{{ myTitle }}</div>
+      <div class="logo"><img :src="require('@/assets/images/logo.png')" alt="" draggable="false" /></div>
+
+      <!-- <div class="myTitle">{{ myTitle }}</div> -->
       <div class="mainCon" v-show="!oneTxt">
         <audio id="myAudio" v-if="audio" v-show="isOneAduio" :src="urlToFitFu(audio)" controls></audio>
         <!-- 如果只有一个模块 -->
@@ -18,8 +20,7 @@
 
         <div class="contenBoxMain swiper-container">
           <div class="swiper-wrapper">
-            <div class="contenBox swiper-slide" v-for="(item, index) in data[myType]"
-              :key="myType === 'video' ? item.url : item">
+            <div class="contenBox swiper-slide" v-for="(item, index) in data[myType]" :key="myType === 'video' ? item.url : item">
               <!-- 模型页面 -->
               <div class="modelBox" v-if="myType === 'model'">
                 <iframe :src="urlToFitFu(item)" frameborder="0" v-if="index === myInd"></iframe>
@@ -38,11 +39,8 @@
           </div>
           <!-- 左右箭头 -->
           <template v-if="!isMobile">
-            <div @click="cutMyInd(-1, myInd === 0)" class="leftJJ awccJJ" :class="{ noClick: myInd === 0 }"
-              v-if="data[myType] && data[myType].length > 1"></div>
-            <div @click="cutMyInd(1, myInd === data[myType].length - 1)" class="rightJJ awccJJ"
-              :class="{ noClick: myInd === data[myType].length - 1 }" v-if="data[myType] && data[myType].length > 1">
-            </div>
+            <div @click="cutMyInd(-1, myInd === 0)" class="leftJJ awccJJ" :class="{ noClick: myInd === 0 }" v-if="data[myType] && data[myType].length > 1"></div>
+            <div @click="cutMyInd(1, myInd === data[myType].length - 1)" class="rightJJ awccJJ" :class="{ noClick: myInd === data[myType].length - 1 }" v-if="data[myType] && data[myType].length > 1"></div>
           </template>
         </div>
       </div>
@@ -52,12 +50,10 @@
       <!-- 下面的文字介绍 -->
       <div class="flooTxt" :class="{ flooTxtOne: oneTxt }">
         <div class="flooTxtBox">
-          <!-- <div class="myTitle">{{ myTitle }}</div> -->
+          <div class="myTitle">{{ myTitle }}</div>
           <!-- 视频的介绍 -->
-          <div class="myTxt" v-if="myType === 'video' && videoTxt[myInd]" v-html="videoTxt[myInd]">
-          </div>
-          <div class="myTxt" v-if="myType === 'img' && imgTxt[myInd]" v-html="imgTxt[myInd]">
-          </div>
+          <div class="myTxt" v-if="myType === 'video' && videoTxt[myInd]" v-html="videoTxt[myInd]"></div>
+          <div class="myTxt" v-if="myType === 'img' && imgTxt[myInd]" v-html="imgTxt[myInd]"></div>
           <div class="myTxt" v-html="myTxt"></div>
         </div>
       </div>
@@ -69,19 +65,11 @@
 
     <!-- 底部的tab -->
     <div class="flooTabBox" v-if="flooTab.length > 1">
-      <div @click="myType = item.type" class="tabRow" :class="{ tabRowAc: myType === item.type }"
-        v-for="item in flooTab" :key="item.id">
-        <img :src="require(`@/assets/images/pc/icon${item.id}${myType === item.type ? 'Ac' : ''
-          }.png`)
-          " alt="" />
+      <div @click="myType = item.type" class="tabRow" :class="{ tabRowAc: myType === item.type }" v-for="item in flooTab" :key="item.id">
+        <img :src="require(`@/assets/images/pc/icon${item.id}${myType === item.type ? 'Ac' : ''}.png`)" alt="" />
         <div>
           {{ item.name }}
-          <span v-if="
-            data[item.type] &&
-            data[item.type].length &&
-            data[item.type].length > 1
-          ">{{ item.type === myType ? myInd + 1 + "/" : null
-          }}{{ data[item.type].length }}</span>
+          <span v-if="data[item.type] && data[item.type].length && data[item.type].length > 1">{{ item.type === myType ? myInd + 1 + "/" : null }}{{ data[item.type].length }}</span>
         </div>
       </div>
       <!-- 音频图标 -->
@@ -94,13 +82,12 @@
 </template>
 
 <script>
-import Swiper from "swiper"
-import "swiper/css/swiper.min.css"
+import Swiper from "swiper";
+import "swiper/css/swiper.min.css";
 
 export default {
   name: "Home",
-  components: {
-  },
+  components: {},
   data() {
     return {
       isMobile: /iPhone|iPad|iPod|Android/i.test(navigator.userAgent),
@@ -143,29 +130,29 @@ export default {
 
       // 只有标题和文字(没有视频,没有模型,没有图片)
       oneTxt: false,
-    }
+    };
   },
   watch: {
     myType() {
-      this.myInd = 0
+      this.myInd = 0;
     },
     // 音频的开启和关闭
     audioSta(val) {
-      const dom = document.querySelector("#myAudio")
+      const dom = document.querySelector("#myAudio");
       if (val) {
-        dom.play()
+        dom.play();
         dom.onended = () => {
           // console.log("----音频播放完毕");
-          this.audioSta = false
-        }
-      } else dom.pause()
+          this.audioSta = false;
+        };
+      } else dom.pause();
     },
   },
   computed: {},
   methods: {
     // 本地化 url 适配
     urlToFitFu(url) {
-      return url
+      return url;
       // const resUrl = url;
       // if (url.includes("https://super.4dage.com")) {
       //   return url.replace("https://super.4dage.com", "");
@@ -176,22 +163,22 @@ export default {
 
     // 点击左右箭头
     cutMyInd(num) {
-      console.log(num, this.swiper)
-      if (!this.swiper) return
+      console.log(num, this.swiper);
+      if (!this.swiper) return;
       if (num > 0) {
-        this.swiper.slideNext()
+        this.swiper.slideNext();
       } else {
-        this.swiper.slidePrev()
+        this.swiper.slidePrev();
       }
     },
     // 点击查看大图
     lookImg(url) {
       // console.log(url)
-      let dom = this.$refs.viewer.$viewer
-      this.lookPics = [url]
+      let dom = this.$refs.viewer.$viewer;
+      this.lookPics = [url];
       // console.log(Object.keys(dom))
-      dom.options.toolbar = false
-      dom.show()
+      dom.options.toolbar = false;
+      dom.show();
     },
     async getData() {
       // https://www.4dmodel.com/
@@ -202,83 +189,76 @@ export default {
         // let url = `/data/${
         //本地化部署
         this.id
-        }/hot/js/data.js?time=${Math.random()}`
-      let result = (await this.$http.get(url)).data
-      const resData = result[this.m]
+      }/hot/js/data.js?time=${Math.random()}`;
+      let result = (await this.$http.get(url)).data;
+      const resData = result[this.m];
       // console.log("----", resData);
       if (resData) {
-        this.audio = resData.backgroundMusic
+        this.audio = resData.backgroundMusic;
         // 只有单独的音频上传
-        if (
-          resData.backgroundMusic &&
-          !resData.model &&
-          !resData.video &&
-          !resData.images
-        ) {
-          this.isOneAduio = true
+        if (resData.backgroundMusic && !resData.model && !resData.video && !resData.images) {
+          this.isOneAduio = true;
         }
         // 底部的tab
-        const arr = []
-        const obj = {}
+        const arr = [];
+        const obj = {};
         if (resData.model) {
-          obj.model = resData.model
-          arr.push({ id: 1, type: "model", name: "模型" })
+          obj.model = resData.model;
+          arr.push({ id: 1, type: "model", name: "模型" });
         }
         if (resData.video) {
-          obj.video = resData.video
-          arr.push({ id: 2, type: "video", name: "视频" })
+          obj.video = resData.video;
+          arr.push({ id: 2, type: "video", name: "视频" });
         }
         if (resData.images) {
-          obj.img = resData.images
-          arr.push({ id: 3, type: "img", name: "图片" })
+          obj.img = resData.images;
+          arr.push({ id: 3, type: "img", name: "图片" });
         }
-        this.flooTab = arr
-        this.data = obj
+        this.flooTab = arr;
+        this.data = obj;
 
         // 当前type的值 应该为
-        if (resData.model) this.myType = "model"
-        else if (resData.video) this.myType = "video"
-        else if (resData.images) this.myType = "img"
+        if (resData.model) this.myType = "model";
+        else if (resData.video) this.myType = "video";
+        else if (resData.images) this.myType = "img";
 
-        this.myTitle = resData.title || ""
-        this.myTxt = resData.content || ""
-        this.videoTxt = resData.videosDesc || []
-        this.imgTxt = resData.imagesDesc || []
+        this.myTitle = resData.title || "";
+        this.myTxt = resData.content || "";
+        this.videoTxt = resData.videosDesc || [];
+        this.imgTxt = resData.imagesDesc || [];
 
         // 只有 标题和 文字介绍(没有视频,没有模型,没有图片)
         if (!obj.model && !obj.video && !obj.img && !resData.backgroundMusic) {
-          this.oneTxt = true
+          this.oneTxt = true;
         }
 
         this.$nextTick(() => {
-          const _this = this
-          this.swiper = new Swiper('.contenBoxMain', {
+          const _this = this;
+          this.swiper = new Swiper(".contenBoxMain", {
             on: {
               slideChange() {
-                _this.myInd = this.activeIndex
-              }
+                _this.myInd = this.activeIndex;
+              },
             },
             pagination: {
-              el: '.swiper-pagination',
-            }
-          })
-        })
+              el: ".swiper-pagination",
+            },
+          });
+        });
       }
     },
   },
   mounted() {
-    this.getData()
+    this.getData();
   },
-}
+};
 </script>
 
 <style lang="less" scoped>
 .home {
-  background: url("../assets/images/pc/hot_bg.png") no-repeat center center;
-  background-color: rgba(transparent, 0.8);
+  background-color: rgba(rgba(248, 242, 232, 0.8));
   background-size: 100% 100%;
-  border-radius: 10px;
-  color: rgba(80, 61, 42, 0.9);
+  color: #9d0800;
   .swiper-pagination {
     margin: 10px 0 0;
     position: relative;
@@ -288,7 +268,7 @@ export default {
     gap: 6px;
     width: 100%;
 
-    :deep(.swiper-pagination-bullet) {
+    ::v-deep .swiper-pagination-bullet {
       width: 24px;
       height: 4px;
       border-radius: 2px;
@@ -296,7 +276,7 @@ export default {
       opacity: 1;
 
       &.swiper-pagination-bullet-active {
-        background: #603C23;
+        background: #603c23;
       }
     }
   }
@@ -327,14 +307,18 @@ export default {
       font-size: 22px;
       font-weight: 700;
       margin-bottom: 20px;
-      text-align: center;
+    }
+    .logo {
+      position: fixed;
+      top: 30px;
+      left: 30px;
     }
     .mainCon {
       position: relative;
       border-radius: 6px;
       overflow: hidden;
       width: 100%;
-      height: calc(100% - 200px);
+      height: calc(100% - 320px);
       .oneTabNum {
         z-index: 10;
         position: absolute;
@@ -363,14 +347,14 @@ export default {
           }
         }
         .videoBox {
-          padding: 0px 50px;
+          padding: 0px 350px;
           video {
             width: 100%;
             height: 100%;
           }
         }
         .imgBox {
-          padding: 0px 50px;
+          padding: 0px 350px;
           .smImgBox {
             width: 100%;
             height: 100%;
@@ -388,9 +372,9 @@ export default {
         position: absolute;
         top: 50%;
         transform: translateY(-50%);
-        left: 30px;
-        width: 16px;
-        height: 30px;
+        left: 16%;
+        width: 40px;
+        height: 40px;
         background-image: url("../assets/images/pc/left.png");
         background-size: 100% 100%;
         z-index: 1;
@@ -400,7 +384,7 @@ export default {
       }
       .rightJJ {
         left: auto;
-        right: 30px;
+        right: 16%;
         background-image: url("../assets/images/pc/right.png");
       }
       .noClick {
@@ -486,13 +470,12 @@ export default {
 // 移动端
 @media screen and (max-width: 1000px) {
   .home {
-    background: url("../assets/images/pc/hot_bg_M.png") no-repeat center center;
-    background-size: cover !important;
+    background-color: rgba(rgba(248, 242, 232, 0.9));
     .swiper-pagination {
       margin: 10px 0 0;
       gap: 4px;
 
-      :deep(.swiper-pagination-bullet) {
+      ::v-deep .swiper-pagination-bullet {
         width: 15px;
         height: 3px;
       }
@@ -506,12 +489,17 @@ export default {
       height: 100%;
       padding: 0;
       position: absolute;
+      justify-content: end;
       .myTitle {
         font-size: 16px;
       }
+      .logo {
+        display: none;
+      }
       .mainCon {
         border-radius: 0;
         height: calc(100% - 195px);
+        margin: 92px 0 20px;
         .contenBox {
           .videoBox {
             padding: 0 30px;
@@ -551,11 +539,20 @@ export default {
         margin-top: -5px;
         width: 100%;
         padding: 10px 15px 0px 15px;
-        max-height: 98px;
-
+        max-height: 200px;
+        padding-bottom: 20px;
+        background: url("../assets/images/textBg.png") no-repeat;
+        background-size: 100% 100%;
+        border-radius: 30px 30px 0 0;
         .flooTxtBox {
           padding: 0;
+          height: 92%;
+          margin-top: 20px;
+          .myTitle {
+            color: #e1bd83;
+          }
           .myTxt {
+            color: #fff;
             font-size: 14px;
             line-height: 22px;
           }

+ 38 - 0
hot/vite.config.js

@@ -0,0 +1,38 @@
+import { defineConfig } from "vite";
+import { createVuePlugin } from "vite-plugin-vue2";
+import svgLoader from "vite-plugin-vue2-svg";
+// 1. 导入 CommonJS 转换插件
+import commonjs from "vite-plugin-commonjs";
+import path from "path";
+
+export default defineConfig({
+  base: "./",
+  plugins: [
+    createVuePlugin(),
+    svgLoader,
+    // 2. 添加插件,转换 CommonJS 语法
+    commonjs({
+      // 配置需要转换的文件范围
+      include: [/src\/assets\/images\//, /node_modules/],
+    }),
+  ],
+  resolve: {
+    alias: {
+      "@": path.resolve(__dirname, "./src"),
+    },
+    extensions: [".vue", ".js", ".json", ".less"],
+  },
+  server: {
+    port: 8080, // 保持与 Vue CLI 相同的端口
+    open: true, // 启动时自动打开浏览器
+    cors: true,
+  },
+  css: {
+    preprocessorOptions: {
+      less: {
+        // 配置 Less 全局变量等
+        javascriptEnabled: true,
+      },
+    },
+  },
+});

+ 0 - 3
hot/vue.config.js

@@ -1,3 +0,0 @@
-module.exports = {
-  publicPath: "./"
-};

Разлика између датотеке није приказан због своје велике величине
+ 1414 - 7455
hot/yarn.lock


+ 10 - 7
scene/public/css/oldVer/main0.css

@@ -78,8 +78,8 @@ iframe {
 }
 .popup-content {
   position: relative;
-  width: 60%;
-  height: 65%;
+  width: 100%;
+  height: 100%;
   overflow: hidden;
 }
 #id1 {
@@ -90,9 +90,12 @@ iframe {
   opacity: 0.1;
 }
 #closepop {
+  position: fixed;
+  top: 40px;
+  right: 30px;
   background: url(../../images/close1.png) no-repeat;
-  width: 60px;
-  height: 60px;
+  width: 40px;
+  height: 40px;
   cursor: pointer;
   text-indent: -999em;
   background-size: 100% 100%;
@@ -203,8 +206,8 @@ a {
 }
 @media screen and (max-width: 1000px) {
   .popup-content {
-    width: 90%;
-    height: 80%;
+    width: 100%;
+    height: 100%;
   }
 }
 @media screen and (max-width: 768px) {
@@ -289,4 +292,4 @@ a {
   .pinTop {
     top: 0px;
   }
-}
+}

BIN
scene/public/images/4dagePoint.png


BIN
scene/public/images/4dagePoint2.png


BIN
scene/public/images/Volume btn_off.png


BIN
scene/public/images/Volume btn_on.png


BIN
scene/public/images/auto-suspend.png


BIN
scene/public/images/auto.png


BIN
scene/public/images/back.png


BIN
scene/public/images/back2_active.png


BIN
scene/public/images/close1.png


BIN
scene/public/images/dollhouse.png


BIN
scene/public/images/dollhouse_active.png


BIN
scene/public/images/floor.png


BIN
scene/public/images/floor_active.png


BIN
scene/public/images/hotlist.png


BIN
scene/public/images/hotlist_active.png


BIN
scene/public/images/inside.png


BIN
scene/public/images/inside_active.png


BIN
scene/public/images/pause.png


BIN
scene/public/images/play.png


+ 1 - 1
scene/public/index.html

@@ -8,7 +8,7 @@
     <meta name="description" content="Web site created using create-react-app" />
     <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
 
-    <title>安徽美术馆-兹山无尽</title>
+    <title>科学家精神教育基地大场景</title>
 
     <!-- 大场景相关 -->
     <link rel="stylesheet" href="./css/oldVer/main0.css" />

+ 3 - 1
scene/public/js/Hot.js

@@ -55,7 +55,7 @@ window.initHot = function (model) {
       o = 'en' == manage.number('lang') ? '&lang=' + manage.number('lang') : ''
     ;-1 == r.indexOf('?') ? (src = link + '?time=' + randomTime().getTime() + '&id=' + window.number + o) : (src = link + '&time=' + randomTime().getTime() + '&id=' + window.number + o)
 
-    return src.replace('https://www.4dmodel.com/SuperTwo/hot_online1', 'https://houseoss.4dkankan.com/project/AnhuiArtMuseum/hot')
+    return src.replace('https://www.4dmodel.com/SuperTwo/hot_online1', 'https://houseoss.4dkankan.com/project/ScientistEducationBase/hot')
     // return src.replace('https://www.4dmodel.com/SuperTwo/hot_online1', 'http://localhost:8080')
     // return src
   }
@@ -1604,6 +1604,8 @@ window.initHot = function (model) {
       cad.style.visibility = cad.style.visibility === 'hidden' ? 'visible' : 'hidden'
     }
 
+    window.parent.postMessage({ type: 'SHOW_BACK_BUTTON' }, 'https://houseoss.4dkankan.com')
+
     return false
   }
 

+ 1 - 1
scene/public/js/loadCAD.js

@@ -53,7 +53,7 @@ window.grendCAD = (function grendCAD() {
       @media only screen and (max-width: 1000px) {
         .cad {
             position: absolute;
-            left: 16px;
+            right: 16px;
             top: 65px;
             width: 100px;
             height: 100px;

+ 2 - 8
scene/public/showa/js/loadCAD.js

@@ -53,7 +53,7 @@ window.grendCAD = (function grendCAD() {
       @media only screen and (max-width: 600px) {
         .cad {
             position: absolute;
-            left: 16px;
+            right: 16px; 
             top: 65px;
             width: 100px;
             height: 100px;
@@ -137,13 +137,7 @@ $.ajax({
       url: '//super.4dage.com/data/' + window.number + '/floor.json',
       method: 'GET',
       success(res) {
-        grendCAD(
-          res,
-          document.documentElement,
-          data.cadSignColor,
-          data.cadBorderColor,
-          data.cadBorderWidth
-        )
+        grendCAD(res, document.documentElement, data.cadSignColor, data.cadBorderColor, data.cadBorderWidth)
       }
     })
   }

BIN
scene/src/assets/font/ssgst.TTF


BIN
scene/src/assets/img/back.png


BIN
scene/src/assets/img/close.png


BIN
scene/src/assets/img/hotlist_bg.png


BIN
scene/src/assets/img/hotlist_bg_M.png


+ 1 - 7
scene/src/assets/styles/base.css

@@ -12,11 +12,6 @@ body {
   font: 1em/1.4 'Microsoft Yahei', 'PingFang SC', 'Avenir', 'Segoe UI', 'Hiragino Sans GB', 'STHeiti', 'Microsoft Sans Serif', 'WenQuanYi Micro Hei', sans-serif;
   height: 100%;
 }
-@font-face {
-  font-family: 'ssgstFont';
-  /* 自定义字体名称 */
-  src: url('../font/ssgst.TTF') format('truetype');
-}
 a {
   text-decoration: none;
   outline: none;
@@ -35,7 +30,6 @@ ul {
 body {
   overflow: auto;
   overflow-y: overlay;
-  font-family: 'ssgstFont' !important;
 }
 /* 文本域取消下拉 */
 textarea {
@@ -169,4 +163,4 @@ body,
   html .cad {
     top: 20px;
   }
-}
+}

+ 3 - 11
scene/src/pages/A0base/index.tsx

@@ -1,19 +1,11 @@
 import React, { useState } from 'react'
 import isMobile from '../../utils/isMobile'
-import A5Mobile from '../A5Mobile'
-import A4base from '../A4base'
+import A2main from '../A2main'
 import styles from './index.module.scss'
 function A0base() {
-  const [show, setShow] = useState(true)
   return (
-    <>
-      {/* 初始封面 */}
-      {isMobile() ? (
-        <A5Mobile show={show} setShow={setShow} />
-      ) : (
-        <A4base show={show} setShow={setShow} />
-      )}
-    </>
+    <A2main />
+
   )
 }
 

+ 4 - 2
scene/src/pages/A2main/index.module.scss

@@ -62,6 +62,7 @@
       gap: 38px;
       .likeBox,
       #volume,
+      #back,
       #gui-fullscreen,
       #gui-fullscreen-exit,
       .A2_share_box,
@@ -145,7 +146,7 @@
       display: flex;
       justify-content: flex-start;
       align-items: center;
-      gap: 10px;
+
       .thumbImg {
         width: 140px;
         height: 130px;
@@ -244,6 +245,7 @@
         margin-bottom: -30px;
         .likeBox,
         #volume,
+        #back,
         #gui-fullscreen,
         #gui-fullscreen-exit,
         .A2_share_box,
@@ -279,7 +281,7 @@
         display: flex;
         justify-content: flex-start;
         align-items: center;
-        gap: 10px;
+
         .thumbImg {
           width: 100px;
           height: 80px;

+ 10 - 44
scene/src/pages/A2main/index.tsx

@@ -18,32 +18,6 @@ function A2main() {
   // 漫游的状态
   const { state3d } = useSelector((state: RootState) => state.three)
 
-  // 点赞
-  const [like, setLike] = useState(false)
-  const [likeNum, setLikeNum] = useState(1)
-  const [viewNum, setViewNum] = useState(1)
-
-  useEffect(() => {
-    http.get(`https://count.4dage.com/api/count/detail/${SCENE_CODE}`).then(res => {
-      setLikeNum(res.data.starSum!)
-    })
-    http.get(`https://count.4dage.com/api/count/saveVisit/${SCENE_CODE}`).then(res => {
-      setViewNum(res.data.visitSum!)
-    })
-  }, [])
-
-  // 点击点赞
-  const likeFu = useCallback(() => {
-    if (like) return
-    setLike(true)
-    setTimeout(() => {
-      http.get(`https://count.4dage.com/api/count/saveStar/${SCENE_CODE}`).then(res => {
-        setLikeNum(likeNum + 1)
-        setLike(false)
-      })
-    }, 2000)
-  }, [like, likeNum])
-
   // 点击热点列表
   const [hotListShow, setHotListShow] = useState(false)
 
@@ -146,7 +120,7 @@ function A2main() {
                   hiddenMap(true)
                 }}
               >
-                <img src='images/hotlist.png' alt='' />
+                <img src={`images/hotlist${hotListShow ? '_active' : ''}.png`} alt='' />
                 {/* 鼠标移入 */}
                 <div className='hoveImg'>热点列表</div>
               </div>
@@ -205,22 +179,14 @@ function A2main() {
               <div className='hoveImg'>音乐开关</div>
             </div>
 
-            {/* 点赞 */}
-            <div className='likeBox' onClick={likeFu}>
-              <img src={like ? imgArr[1] : imgArr[0]} alt='' />
-              {/* 鼠标移入 */}
-              <div className='hoveImg'>点赞{likeNum}</div>
-              <div className={classNames('likeMove', like ? 'likeMoveAc' : '')}>+1</div>
-            </div>
-
-            <div className='A2_share_box' onClick={handleShareClick}>
-              <img src={require('@/assets/img/share.png')} alt='' />
-              <div className='hoveImg'>分享</div>
-            </div>
-
-            <div className='A2_view_box'>
-              <img src={require('@/assets/img/view.png')} alt='' />
-              <div className='hoveImg'>浏览量{viewNum}</div>
+            <div id='back' onClick={() => {
+              window.parent.postMessage({ type: 'GO_BACK' }, 'https://houseoss.4dkankan.com')
+            }} className='ui-icon wide'>
+              {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
+              <a>
+                <img src='images/back.png' alt='' />
+              </a>
+              <div className='hoveImg'>返回</div>
             </div>
 
             <div id='vr' className='ui-icon wide hidden' style={{ display: 'none' }}>
@@ -235,7 +201,7 @@ function A2main() {
                 <i rel='tooltip' title='{[{ SOCIAL_SHARING }]}' className='icon icon-share'></i>
               </a>
             </div>
-            <div id='gui-fullscreen' className='ui-icon wide' data-placement='top' rel='tooltip'>
+            <div id='gui-fullscreen' className='ui-icon wide' data-placement='top' rel='tooltip' style={{ display: 'none' }}>
               {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
               <a>
                 <img src='images/full.png' alt='' />

+ 114 - 74
scene/src/pages/A3hotList/index.module.scss

@@ -1,72 +1,79 @@
 .A3hotList {
   position: absolute;
   top: 50%;
-  right: 0;
-  transform: translate(0, -50%);
-  width: 250px;
-  height: 100%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+  width: 880px;
+  height: 590px;
   z-index: 30001;
   display: flex;
   align-items: center;
-  justify-content: flex-end;
-
+  background: url('../../assets/img/hotlist_bg.png') center center;
+  background-size: cover;
   :global {
+    .close {
+      position: fixed;
+      top: 60px;
+      right: 66px;
+      width: 30px;
+      height: 30px;
+      cursor: pointer;
+      & > img {
+        width: 100%;
+        height: 100%;
+        object-fit: cover;
+      }
+    }
+    .back {
+      display: none;
+    }
     .A3main {
       display: flex;
       flex-direction: column;
-      align-items: center;
       justify-content: flex-start;
-      gap: 10px;
-      width: 250px;
-      height: 100%;
-      background: url('../../assets/img/hotlist_bg.png') center center;
-      background-size: cover;
-      color: #9b4f2d;
-      font-size: 17px;
+      width: 100%;
+      height: 80%;
+      color: #e1bd83;
+      font-size: 16px;
       font-weight: 500;
       overflow: auto;
-      padding-bottom: 40px;
-      border: 2px solid #9b4f2d;
+      margin: 40px 80px;
       // 隐藏滚动条
       &::-webkit-scrollbar {
-        display: none;
+        width: 20px;
+        color: white;
       }
       .A3title {
-        padding: 40px 0 10px 0;
+        margin: 0 10px;
+        padding-bottom: 40px;
         font-size: 24px;
-        font-weight: 500;
+        font-weight: bold;
       }
-      .A3item {
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        width: 100%;
-        height: fit-content;
-        padding: 16px 3px;
-        color: rgba(155, 79, 45, 0.8);
-        cursor: pointer;
-        &:hover {
-          background-color: rgba(255, 255, 255, 0.1);
+      .scrollContainner {
+        height: 100%;
+        overflow: auto;
+        padding: 0 10px;
+        &::-webkit-scrollbar {
+          width: 6px;
         }
-      }
-      .A3close {
-        position: fixed;
-        bottom: 0;
-        width: 250px;
-        height: 80px;
-        border-top: 1px solid rgba(43, 31, 23, 0.1);
-        cursor: pointer;
-        &:hover {
-          opacity: 1;
+        &::-webkit-scrollbar-thumb {
+          background-color: #e1bd83; // 滑块颜色
         }
-        img {
-          position: absolute;
-          top: 50%;
-          left: 50%;
-          transform: translate(-50%, -50%);
-          width: 24px;
-          height: 24px;
-          opacity: 0.6;
+
+        .A3item {
+          display: flex;
+          width: 100%;
+          height: fit-content;
+          padding: 16px 3px;
+          color: #dccdbb;
+          cursor: pointer;
+          border-bottom: 1px solid #ffffff;
+          &:hover {
+            color: #c19a63;
+          }
+          &:first-child {
+            border-top: 1px solid #ffffff;
+          }
         }
       }
     }
@@ -77,42 +84,75 @@
   .A3hotList {
     width: 100%;
     height: 100%;
-    top: 0;
-    right: 0;
-    transform: translate(0, 0);
-    align-items: start;
+    background: url('../../assets/img/hotlist_bg_M.png') center center;
+    background-size: cover;
     :global {
       html .cad {
         z-index: -1;
       }
+      .close {
+        display: none;
+      }
+      .back {
+        display: block;
+        position: fixed;
+        top: 30px;
+        right: 10px;
+        width: 40px;
+        height: 40px;
+        cursor: pointer;
+        & > img {
+          width: 100%;
+          height: 100%;
+          object-fit: cover;
+        }
+      }
       .A3main {
+        display: flex;
+        flex-direction: column;
+        justify-content: flex-start;
         width: 100%;
-        height: 60%;
-        background: url('../../assets/img/hotlist_bg.png') no-repeat center center;
-        background-size: cover;
-        padding-bottom: 20px;
+        height: 90%;
+        color: #e1bd83;
+        font-size: 16px;
+        font-weight: 500;
+        overflow: auto;
+        margin: 0 12px;
+        // 隐藏滚动条
+        &::-webkit-scrollbar {
+          width: 5px;
+        }
         .A3title {
-          padding: 20px 0 10px 0;
-          font-size: 16px;
+          margin: 0 10px;
+          padding-bottom: 25px;
+          font-size: 24px;
+          font-weight: bold;
         }
-        .A3item {
-          font-size: 14px;
-          padding: 10px 3px;
-          &:touch {
-            background-color: rgba(163, 143, 116, 1);
+        .scrollContainner {
+          height: 100%;
+          overflow: auto;
+          padding: 0 10px;
+          &::-webkit-scrollbar {
+            width: 6px;
+          }
+          &::-webkit-scrollbar-thumb {
+            background-color: #e1bd83; // 滑块颜色
           }
-        }
-        .A3close {
-          display: none;
-          width: 100%;
-          height: 40px;
-          background-color: rgba(208, 191, 165, 1);
-          border: 4px solid #9b4f2d;
-          border-top: 1px solid rgba(43, 31, 23, 0.1);
 
-          img {
-            width: 16px;
-            height: 16px;
+          .A3item {
+            display: flex;
+            width: 100%;
+            height: fit-content;
+            padding: 16px 3px;
+            color: #dccdbb;
+            cursor: pointer;
+            border-bottom: none;
+            &:hover {
+              color: #c19a63;
+            }
+            &:first-child {
+              border-top: none;
+            }
           }
         }
       }

+ 23 - 19
scene/src/pages/A3hotList/index.tsx

@@ -2,7 +2,7 @@ import React, { useCallback, useEffect, useState } from 'react'
 import styles from './index.module.scss'
 import { A3listType } from './type'
 
-const imgArrTemp = ['close.png']
+const imgArrTemp = ['close.png', 'back.png']
 const imgArr = imgArrTemp.map(item => require(`@/assets/img/${item}`))
 
 type Props = {
@@ -20,7 +20,13 @@ function A3hotList({ show, setShow, closeFu }: Props) {
 
   const openHot = useCallback((item: A3listType) => {
     setTimeout(() => {
-      item && item.examine(window.player, true)
+      if (item) {
+        item.examine(window.player, true)
+        window.parent.postMessage(
+          { type: 'HIDE_BACK_BUTTON' },
+          'https://houseoss.4dkankan.com'
+        );
+      }
     }, 200)
   }, [])
 
@@ -28,26 +34,24 @@ function A3hotList({ show, setShow, closeFu }: Props) {
     <div
       className={styles.A3hotList}
       style={{ opacity: show ? '1' : '0', pointerEvents: show ? 'auto' : 'none' }}
-      onClick={() => {
-        setShow(false)
-      }}
     >
+      <div className="close" onClick={closeFu}><img src={imgArr[0]} alt="" /></div>
+      <div className="back" onClick={closeFu}><img src={imgArr[1]} alt="" /></div>
       <div className='A3main'>
         <div className='A3title'>热点列表</div>
-        {list.map((item, index) => (
-          <div
-            className='A3item'
-            onClick={() => {
-              openHot(item)
-              setShow(false)
-            }}
-            key={index}
-          >
-            {item.info.title || '热点'}
-          </div>
-        ))}
-        <div className='A3close' onClick={closeFu}>
-          <img className='A3close' src={imgArr[0]} alt='' />
+        <div className="scrollContainner">
+          {list.map((item, index) => (
+            <div
+              className='A3item'
+              onClick={() => {
+                openHot(item)
+                setShow(false)
+              }}
+              key={index}
+            >
+              {item.info.title || '热点'}
+            </div>
+          ))}
         </div>
       </div>
     </div>