1
0
tangning 10 місяців тому
батько
коміт
113a2e57af

+ 1 - 0
hot/package.json

@@ -14,6 +14,7 @@
     "v-viewer": "^1.5.1",
     "vue": "^2.6.11",
     "vue-awesome-swiper": "^4.1.1",
+    "vue-i18n": "^10.0.4",
     "vue-lazyload": "^1.3.3",
     "vue-router": "^3.2.0"
   },

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


hot/src/assets/images/pc/yuyingActive.png → hot/src/assets/images/pc/audioAc.png


+ 134 - 25
hot/src/views/Home.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="home">
     <div class="main">
-      <div class="mainCon" v-show="!oneTxt">
+      <div class="mainCon">
         <audio
           id="myAudio"
           v-if="audio"
@@ -18,22 +18,26 @@
           >
             <img
               :src="
-                require(`@/assets/images/pc/audio${audioSta ? 'Ac' : ''}.png`)
+                require(`@/assets/images/pc/audio${!audioSta ? 'Ac' : ''}.png`)
               "
               alt=""
             />
           </div>
           <div
             class="audioIcon"
-            @click="audioSta = !audioSta"
             :title="audioSta ? '关闭音频' : '打开音频'"
           >
-            <img
-              :src="
-                require(`@/assets/images/pc/yuyan.png`)
-              "
-              alt=""
-            />
+            <div class="ppList">
+              <div
+                v-for="item in languageList"
+                :key="item"
+                @click="hanleType(item)"
+                :style="{ color: item.key == language ? '#0F7562' : '#00221C' }"
+              >
+                {{ item.name }}
+              </div>
+            </div>
+            <img :src="require(`@/assets/images/pc/yuyan.png`)" alt="" />
           </div>
         </div>
 
@@ -130,7 +134,16 @@
       </div>
       <div class="changeList">
         <div class="list">
-          <div class="item" @click="activeObj = element;myInd = 0" v-for="element in list" :key="element.title" :class="{active: element.id == activeObj.id}">
+          <div
+            class="item"
+            @click="
+              activeObj = element;
+              myInd = 0;
+            "
+            v-for="element in list"
+            :key="element.title"
+            :class="{ active: element.id == activeObj.id }"
+          >
             {{ element.title }}
           </div>
         </div>
@@ -162,6 +175,20 @@ export default {
     return {
       m: this.$route.query.m,
       id: this.$route.query.id,
+      languageList: [{
+        name: '简体中文',
+        key: 'zh-cn',
+      },{
+        name: '繁体中文',
+        key: 'zh-hk',
+      },{
+        name: 'English',
+        key: 'en',
+      },{
+        name: 'Português',
+        key: 'pe',
+      }],
+      language: "zh-cn",
       // 音频地址
       audio: "",
       // 如果只有单独的音频
@@ -183,9 +210,25 @@ export default {
     myType() {
       this.myInd = 0;
     },
+    myInd() {
+      let item = this.activeObj.images[this.myInd];
+      console.log("----item", item);
+      let obj = {
+        "zh-cn": item.mp3_zh,
+        "zh-hk": item.mp3_zhhk,
+        en: item.mp3_en,
+        pe: item.mp3_en,
+      };
+      this.audio = item.mp3_zh || item.mp3_zhhk || item.mp3_en || item.mp3_en;
+      let audioDom = obj[this.language];
+      if (audioDom) {
+        this.audio = audioDom;
+      }
+    },
     // 音频的开启和关闭
     audioSta(val) {
       const dom = document.querySelector("#myAudio");
+      console.log("----val", this.audio, val, dom);
       if (val) {
         dom.play();
         dom.onended = () => {
@@ -198,6 +241,10 @@ export default {
   computed: {},
   components: {},
   methods: {
+    hanleType(item){
+      this.language = item.key
+      this.$i18n.locale = 'fr';
+    },
     // 本地化 url 适配
     urlToFitFu(url) {
       return url.url || url;
@@ -213,7 +260,7 @@ export default {
     cutMyInd(num, flag) {
       if (flag) return;
       this.myInd += num;
-      this.activeObj = this.data[this.myType][this.myInd];
+      // this.activeObj = this.activeObj.images[this.myInd];
       console.log("----num", this.activeObj, "flag", flag, this.myInd);
     },
     // 点击查看大图
@@ -237,6 +284,8 @@ export default {
       const resData = myData;
       this.list = resData;
       let showData = resData && resData[0];
+      let item = showData.images[this.myInd];
+      this.audio = item.mp3_zh || item.mp3_zhhk || item.mp3_en || item.mp3_pe;
       this.activeObj = {
         ...showData,
       };
@@ -283,9 +332,9 @@ export default {
       .list {
         display: flex;
         align-items: center;
-        .active{
+        .active {
           opacity: 1;
-          color: #02362C;
+          color: #02362c;
         }
         div {
           height: 100%;
@@ -312,13 +361,13 @@ export default {
       overflow: hidden;
       width: 100%;
       height: 100%;
-      
-      .iconList{
+
+      .iconList {
         position: absolute;
         bottom: 182px;
         right: 237px;
         display: flex;
-        }
+      }
       .audioIcon {
         z-index: 10;
         cursor: pointer;
@@ -326,9 +375,39 @@ export default {
         // right: 20px;
         // bottom: 278px;
         width: 62px;
+        &:hover {
+          .ppList {
+            display: block;
+          }
+        }
         img {
           width: 100%;
         }
+        .ppList {
+          padding: 8px 10px;
+          width: 99px;
+          position: absolute;
+          top: -40px;
+          left: 50px;
+          background: #fff;
+          opacity: 0.85;
+          border-radius: 8px;
+          display: none;
+          div {
+            height: 30px;
+            line-height: 30px;
+            font-family: Source Han Serif CN;
+            font-weight: 600;
+            font-size: 14px;
+            color: #00221c;
+            opacity: 0.85;
+            text-align: center;
+            border-bottom: 1px solid #d2c9c1;
+            &:last-child {
+              border: none;
+            }
+          }
+        }
       }
       .oneTabNum {
         z-index: 10;
@@ -462,7 +541,7 @@ export default {
         height: 100%;
         overflow-y: auto;
         .myTitle {
-          color: #DDE5E2;
+          color: #dde5e2;
           font-size: 22px;
           font-weight: 700;
           margin-bottom: 10px;
@@ -471,7 +550,7 @@ export default {
           font-family: Adobe Heiti Std;
           font-weight: normal;
           font-size: 19px;
-          color: #DDE5E2;
+          color: #dde5e2;
           line-height: 31px;
         }
         &::-webkit-scrollbar {
@@ -483,7 +562,7 @@ export default {
           /*滚动条里面小方块*/
           border-radius: 10px;
           -webkit-box-shadow: inset 0 0 5px transparent;
-          background: #b90c0c;
+          background: #2F714A;
         }
         &::-webkit-scrollbar-track {
           /*滚动条里面轨道*/
@@ -501,26 +580,47 @@ export default {
 // 移动端
 @media screen and (max-width: 1000px) {
   .home {
+    .logo{
+      display: none;
+    }
     #myAudio {
       width: 90vw;
       max-width: 500px;
     }
     .main {
       width: 90%;
-      height: 94%;
+      height: 85%;
       padding: 0;
       position: absolute;
       top: 50%;
       left: 50%;
       transform: translate(-50%, -50%);
+      .iconList{
+        bottom: 430px !important;
+        right: 30px !important;
+      }
+      .changeList{
+        width: 100%;
+        left: 42px;
+        bottom: 458px;
+        div{
+          font-size: 8px !important;
+          .item{
+            padding: 5px 4px !important;
+            min-width: 52px;
+          }
+        }
+      }
       .mainCon {
         border-radius: 8px 8px 0 0;
+        background-image: url("../assets/images/mobileBg.png");
         .audioIcon {
           cursor: default;
           right: auto;
           bottom: auto;
           top: 6px;
           left: 6px;
+          width: 40px;
           & > img {
             width: 30px;
           }
@@ -541,6 +641,9 @@ export default {
         }
 
         .contenBox {
+          width: calc(100% - 84px);
+          height: 130px;
+          left: 42px;
           .videoBox {
             padding: 0px 0;
             position: relative;
@@ -555,7 +658,7 @@ export default {
             }
           }
           .imgBox {
-            padding: 60px 50px 80px;
+            // padding: 60px 50px 80px;
             .smImgBox {
               cursor: default;
             }
@@ -564,22 +667,28 @@ export default {
         .awccJJ {
           left: 0;
           width: 28px;
+          top: 190px;
           height: 57px;
           cursor: default;
-          background-image: url("../assets/images/pc/icon-left.png");
+          background-image: url("../assets/images/icon/left.png");
         }
         .rightJJ {
           left: auto;
           right: 0;
-          background-image: url("../assets/images/pc/icon-right.png");
+          background-image: url("../assets/images/icon/right.png");
         }
       }
+      .ppList{
+        top: 35px !important;
+        left: -75px ! important;
+      }
       .flooTxt {
         margin-top: 0;
         padding: 20px 15px 15px;
-        height: 200px;
-        background-color: #fff;
+        height: 300px;
+        // background-color: #fff;
         border-radius: 0 0 8px 8px;
+        top: -383px;
         .flooTxtBox {
           .myTitle {
             font-size: 18px;

Різницю між файлами не показано, бо вона завелика
+ 60 - 60
hot/src/views/data.json


+ 1 - 1
hot/vue.config.js

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

+ 36 - 1
hot/yarn.lock

@@ -902,6 +902,27 @@
     cssnano-preset-default "^4.0.0"
     postcss "^7.0.0"
 
+"@intlify/core-base@10.0.4":
+  version "10.0.4"
+  resolved "https://mirrors.cloud.tencent.com/npm/@intlify/core-base/-/core-base-10.0.4.tgz#d67356f9a12f605a3de4cd523af9210b4934252a"
+  integrity sha512-GG428DkrrWCMhxRMRQZjuS7zmSUzarYcaHJqG9VB8dXAxw4iQDoKVQ7ChJRB6ZtsCsX3Jse1PEUlHrJiyQrOTg==
+  dependencies:
+    "@intlify/message-compiler" "10.0.4"
+    "@intlify/shared" "10.0.4"
+
+"@intlify/message-compiler@10.0.4":
+  version "10.0.4"
+  resolved "https://mirrors.cloud.tencent.com/npm/@intlify/message-compiler/-/message-compiler-10.0.4.tgz#82471b9ba3e3371aa74eee12baf0555490d581d3"
+  integrity sha512-AFbhEo10DP095/45EauinQJ5hJ3rJUmuuqltGguvc3WsvezZN+g8qNHLGWKu60FHQVizMrQY7VJ+zVlBXlQQkQ==
+  dependencies:
+    "@intlify/shared" "10.0.4"
+    source-map-js "^1.0.2"
+
+"@intlify/shared@10.0.4":
+  version "10.0.4"
+  resolved "https://mirrors.cloud.tencent.com/npm/@intlify/shared/-/shared-10.0.4.tgz#3acc71e162ffd77a7de9f486e082cc135ec4cdef"
+  integrity sha512-ukFn0I01HsSgr3VYhYcvkTCLS7rGa0gw4A4AMpcy/A9xx/zRJy7PS2BElMXLwUazVFMAr5zuiTk3MQeoeGXaJg==
+
 "@jridgewell/gen-mapping@^0.3.5":
   version "0.3.5"
   resolved "https://mirrors.cloud.tencent.com/npm/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
@@ -1471,6 +1492,11 @@
   optionalDependencies:
     prettier "^1.18.2 || ^2.0.0"
 
+"@vue/devtools-api@^6.5.0":
+  version "6.6.4"
+  resolved "https://mirrors.cloud.tencent.com/npm/@vue/devtools-api/-/devtools-api-6.6.4.tgz#cbe97fe0162b365edc1dba80e173f90492535343"
+  integrity sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==
+
 "@vue/preload-webpack-plugin@^1.1.0":
   version "1.1.2"
   resolved "https://mirrors.cloud.tencent.com/npm/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz#ceb924b4ecb3b9c43871c7a429a02f8423e621ab"
@@ -7718,7 +7744,7 @@ source-list-map@^2.0.0:
   resolved "https://mirrors.cloud.tencent.com/npm/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
   integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
 
-source-map-js@^1.2.0, source-map-js@^1.2.1:
+source-map-js@^1.0.2, source-map-js@^1.2.0, source-map-js@^1.2.1:
   version "1.2.1"
   resolved "https://mirrors.cloud.tencent.com/npm/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
   integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
@@ -8658,6 +8684,15 @@ vue-hot-reload-api@^2.3.0:
   resolved "https://mirrors.cloud.tencent.com/npm/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
   integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
 
+vue-i18n@^10.0.4:
+  version "10.0.4"
+  resolved "https://mirrors.cloud.tencent.com/npm/vue-i18n/-/vue-i18n-10.0.4.tgz#289dd2284292125fd9cec87f0df5148214ffb2f5"
+  integrity sha512-1xkzVxqBLk2ZFOmeI+B5r1J7aD/WtNJ4j9k2mcFcQo5BnOmHBmD7z4/oZohh96AAaRZ4Q7mNQvxc9h+aT+Md3w==
+  dependencies:
+    "@intlify/core-base" "10.0.4"
+    "@intlify/shared" "10.0.4"
+    "@vue/devtools-api" "^6.5.0"
+
 vue-lazyload@^1.3.3:
   version "1.3.5"
   resolved "https://mirrors.cloud.tencent.com/npm/vue-lazyload/-/vue-lazyload-1.3.5.tgz#eb36d299a519167d987fdf0ebfdc9c6dd1bf1ef0"

+ 3 - 2
scene/package.json

@@ -11,15 +11,16 @@
   },
   "dependencies": {
     "axios": "^0.27.2",
-    "html2canvas": "^1.4.1",
     "core-js": "^3.6.5",
     "element-ui": "^2.15.6",
+    "html2canvas": "^1.4.1",
     "install": "^0.13.0",
     "npm": "^8.10.0",
     "swiper": "^5.3.8",
     "v-viewer": "^1.6.4",
     "vue": "^2.6.11",
     "vue-awesome-swiper": "^4.1.1",
+    "vue-i18n": "8.0.0",
     "vue-router": "^3.2.0"
   },
   "devDependencies": {
@@ -34,4 +35,4 @@
     "less-loader": "^5.0.0",
     "vue-template-compiler": "^2.6.11"
   }
-}
+}

BIN
scene/public/favicon.ico


+ 1 - 1
scene/public/index.html

@@ -6,7 +6,7 @@
     <meta name="viewport"
         content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, minimal-ui">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <title>湖南雷锋纪念馆</title>
+    <title>澳门基本法纪念馆</title>
     <meta name="description" content="四维时代">
     <meta property="og:title" content="四维时代">
     <meta property="og:description" content="四维时代">

+ 2 - 0
scene/public/static/css/main.css

@@ -7011,6 +7011,8 @@ a.hasHover.tag-link:hover {
     .viewContainer, #gui-modes-map {
         display: flex;
         flex-direction: column;
+        position: relative;
+        left: 87px;
     }
     #play, #pause {
         width: 50px;

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

@@ -61,7 +61,7 @@ window.initHot = function(model){
         var r = link.substring(link.indexOf("html") + 4),
             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', ' http://localhost:8082')
+        return src.replace('https://www.4dmodel.com/SuperTwo/hot_online1', ' https://houseoss.4dkankan.com/project/aoMenScene/hot')
         // return src //打包   
        
     }

+ 2 - 2
scene/public/static/js/loadCAD.js

@@ -42,7 +42,7 @@ window.grendCAD = (function grendCAD() {
         top: 20px;
         width: 180px;
         height: 180px;
-        background: rgba(81, 32, 32, 0.4);
+        background: rgba(39, 96, 63, .8);
         border-radius: 5px;
         border: 2px solid #D6B970;
         pointer-events: none;
@@ -62,7 +62,7 @@ window.grendCAD = (function grendCAD() {
           top: 10px;
           width: 120px;
           height: 120px;
-          background: rgba(81, 32, 32, 0.4);
+          background: rgba(39, 96, 63, .8);
           border-radius: 5px;
           border: 2px solid #D6B970;
           }

BIN
scene/src/assets/images/icon/10.18高清设计图纸.zip


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


+ 2 - 2
scene/src/assets/style/myBase.less

@@ -58,14 +58,14 @@
 
 #cad path {
   stroke-width: 0.5;
-  fill: rgba(185, 12, 12, 0.80);
+  fill: rgba(39, 96, 63, .8);
   // 改变地图线的颜色
   stroke: #d1b198
 }
 
 #ele1 {
   circle {
-    fill: rgba(185, 12, 12, 0.80);
+    fill: rgba(39, 96, 63, .8);
     r: 1;
   }
 }

+ 3 - 2
scene/src/components/welcome/index.vue

@@ -74,14 +74,15 @@ export default {
   .mobileBg {
     width: 100%;
     height: 100%;
-    background-image: url('../../assets/img/mobileBg.jpg');
+    background-image: url('../../assets/img/mobileBg.png');
     background-size: 100% 100%;
   }
 
   // 移动端
   @media screen and (max-width: 1000px) {
     .btn {
-      bottom: 6%;
+      bottom: 26%;
+      opacity: 0;
       & > img {
         width: 140px;
       }

+ 128 - 0
scene/src/il8n.js

@@ -0,0 +1,128 @@
+// i18n.js
+import Vue from 'vue';
+import VueI18n from 'vue-i18n';
+ 
+Vue.use(VueI18n);
+ 
+const messages = {
+  'zh-cn': {
+    operation: {
+      dkyy: '打开音乐',
+      gbyy: '关闭音乐',
+      cjdl: '场景导览',
+      bf: '播放',
+      dl: '导览',
+      dllist: '导览列表',
+      zddl: '自动导览',
+      qjmy: '全景漫游',
+      mnmy: '迷你漫游',
+      mnmx: '迷你模型',
+      swsj: '三维视觉',
+      fst: '俯视图',
+      pmt: '平面视觉',
+      rdlist: '热点列表',
+      zwrd: '暂无热点',
+      xcwk: '消除外壳',
+      zt: '暂停',
+      xyg: '下一个',
+      ydl: '阅读量',
+      qp: '全屏',
+      yy: '语言',
+      readList0: '全部',
+      readList1: '本年',
+      readList2: '本月',
+      readList3: '本日',
+    },
+  },
+  'zh-hk': {
+    operation: {
+      dkyy: '打開音樂',
+      gbyy: '關閉音樂',
+      bf: '播放',
+      dl: '導覽',
+      dllist: '導覽清單',
+      zddl: '自動導覽',
+      qjmy: '全景漫遊',
+      mnmy: '迷你漫遊',
+      mnmx: '迷你模型',
+      swsj: '三維視覺',
+      fst: '俯視圖',
+      pmt: '平面視覺',
+      rdlist: '熱點清單',
+      zwrd: '暫無熱點',
+      xcwk: '消除外殼',
+      zt: '暫停',
+      xyg: '下一個',
+      ydl: '閱讀量',
+      qp: '全屏',
+      yy: '語言',
+      readList0: '全部',
+      readList1: '本年',
+      readList2: '本月',
+      readList3: '本日',
+    }
+  },
+  'en': {
+    operation: {
+      dkyy: 'Open music',
+      gbyy: 'Turn off music',
+      bf: 'Play',
+      dl: 'Guide',
+      dllist: 'Guide List',
+      zddl: 'Automatic Navigation',
+      qjmy: 'Panoramic Roaming',
+      mnmy: 'Mini Roaming',
+      mnmx: 'Mini Model',
+      swsj: '3D Vision',
+      fst: 'Top view',
+      pmt: 'Flat Vision',
+      rdlist: 'Hotspot List',
+      zwrd: 'No data',
+      xcwk: 'Eliminating the shell',
+      zt: 'Pause',
+      xyg: 'Next',
+      ydl: 'Reading volume',
+      qp: 'Full Screen',
+      yy: 'Language',
+      readList0: 'All',
+      readList1: 'This year',
+      readList2: 'This month',
+      readList3: 'Today',
+    }
+  },
+  'pe': {
+    operation: {
+      dkyy: "Música aberta",
+      gbyy: "Desligue a música",
+      bf: "Play",
+      dl: "Guia",
+      dllist: "Lista de guias",
+      zddl: "Navegação automática",
+      qjmy: "Roaming panorâmico",
+      mnmy: "Mini Roaming",
+      mnmx: "Mini modelo",
+      swsj: "3D Vision",
+      fst: "Vista superior",
+      pmt: "Flat Vision",
+      rdlist: "Hotspot List",
+      zwrd: 'Vazio',
+      xcwk: "Eliminando a concha",
+      zt: "Pausa",
+      xyg: "Próximo",
+      ydl: "Volume de leitura",
+      qp: "Ecrã Completo",
+      yy: "Língua",
+      readList0: "All",
+      readList1: "Este ano",
+      readList2: "Este mês",
+      readList3: "Hoje",
+    }
+  }
+};
+ 
+const i18n = new VueI18n({
+  locale: localStorage.getItem("locale") || "zh-cn", // set default locale
+  messages, // set locale messages
+});
+ 
+export default i18n;

+ 4 - 1
scene/src/main.js

@@ -2,11 +2,12 @@ import Vue from 'vue'
 import ElementUI from 'element-ui';
 import 'element-ui/lib/theme-chalk/index.css';
 import App from './App.vue'
+import axios from 'axios'
 import '@/mixins'
 import router from './router'
 import 'viewerjs/dist/viewer.css'
 import Viewer from 'v-viewer'
-
+import i18n from './il8n';
 // 重置场景样式
 import './assets/style/myBase.css'
 
@@ -19,6 +20,7 @@ Vue.use(Viewer,{
     title: false
   }
 })
+Vue.prototype.$http = axios
 
 
 Vue.config.productionTip = false
@@ -26,5 +28,6 @@ Vue.use(ElementUI);
 
 new Vue({
   router,
+  i18n,
   render: h => h(App)
 }).$mount('#app')

+ 1 - 1
scene/src/pages/Home.vue

@@ -32,7 +32,7 @@
         <v-title />
 
         <!-- 底部菜单 -->
-        <v-menu :hideTools="hideTools" @toHome="showWelcome = true" />
+        <v-menu :loadingstate="loading" :hideTools="hideTools" @toHome="showWelcome = true" />
 
         <!-- 导览 -->
         <v-guide />

+ 2 - 2
scene/src/views/gui/components/hotList.vue

@@ -1,13 +1,13 @@
 <template>
   <div class="hotList">
     <div class="title">
-      <div class="titleLL">热点列表</div>
+      <div class="titleLL">{{ $t("operation.rdlist") }}</div>
       <div class="titleRR" @click="$emit('close')">
         <img src="../../../assets/img/close.png" alt="" />
       </div>
     </div>
     <div class="main">
-      <div class="txtNone" v-if="data.length === 0">暂无热点</div>
+      <div class="txtNone" v-if="data.length === 0">{{ $t("operation.zwrd") }}</div>
       <div class="txt" v-else>
         <span
           :class="{ active: hotInd === index }"

+ 224 - 56
scene/src/views/gui/menu.vue

@@ -4,10 +4,10 @@
       <div id="view-controllers"></div>
     </div>
     <div class="pinBottom left">
-      <div v-if="isMobile" id="myClickBox" style="">
+      <!-- <div v-if="isMobile" id="myClickBox" style="">
         <div id="go" />
         <div id="back" />
-      </div>
+      </div> -->
 
       <div>
         <div class="viewContainer">
@@ -23,7 +23,7 @@
                 :src="require('@/assets/images/play.png')"
                 width="24"
                 height="24"
-                data-original-title="播放"
+            :data-original-title="$t('operation.bf')"
               />
             </a>
           </div>
@@ -31,10 +31,10 @@
             id="play"
             class="ui-icon"
             rel="tooltip"
-            data-original-title="播放"
+            :data-original-title="$t('operation.bf')"
           >
             <!-- 鼠标移入的显示 -->
-            <div class="hoverTit">自动导览</div>
+            <div class="hoverTit">{{$t('operation.zddl')}}</div>
             <a>
               <img
                 :src="require('@/assets/images/icon/play.png')"
@@ -45,7 +45,7 @@
           </div>
           <div id="pause" class="ui-icon" style="display: none">
             <!-- 鼠标移入的显示 -->
-            <div class="hoverTit">自动导览</div>
+            <div class="hoverTit">{{$t('operation.zddl')}}</div>
 
             <a>
               <img
@@ -54,7 +54,7 @@
                 :src="require('@/assets/images/icon/pause.png')"
                 width="24"
                 height="24"
-                data-original-title="暂停"
+              :data-original-title="$t('operation.zt')"
               />
             </a>
           </div>
@@ -68,20 +68,20 @@
                 rel="tooltip"
                 title=""
                 class="icon icon-dpad-right"
-                data-original-title="下一个"
+              :data-original-title="$t('operation.xyg')"
               ></i>
             </a>
           </div>
           <div id="gui-modes-map" class="ui-icon double active">
             <div
-              data-original-title="导览"
+              :data-original-title="$t('operation.dl')"
               @click="isGuide = !isGuide"
               id="pullTab"
               rel="tooltip"
-              title="场景导览"
+              :title="$t('operation.cjdl')"
             >
               <!-- 鼠标移入的显示 -->
-              <div class="hoverTit">导览列表</div>
+              <div class="hoverTit">{{$t('operation.dllist')}}</div>
 
               <img
                 title=""
@@ -95,12 +95,12 @@
             </div>
 
             <div
-              data-original-title="全景漫游"
+              :data-original-title="$t('operation.mnmx')"
               id="gui-modes-inside"
               rel="tooltip"
             >
               <!-- 鼠标移入的显示 -->
-              <div class="hoverTit">全景漫游</div>
+              <div class="hoverTit">{{$t('operation.qjmy')}}</div>
 
               <img
                 class="icon icon-inside"
@@ -112,13 +112,13 @@
               />
             </div>
             <div
-              title="迷你漫游"
-              data-original-title="迷你模型"
+              :title="$t('operation.mnmy')"
+              :data-original-title="$t('operation.mnmx')"
               id="gui-modes-dollhouse"
               rel="tooltip"
             >
               <!-- 鼠标移入的显示 -->
-              <div class="hoverTit">三维视觉</div>
+              <div class="hoverTit">{{$t('operation.swsj')}}</div>
               <img
                 class="icon icon-inside"
                 :src="require('@/assets/images/icon/dollhouse.png')"
@@ -129,13 +129,13 @@
               />
             </div>
             <div
-              data-original-title="俯视图"
+              :data-original-title="$t('operation.fst')"
               id="gui-modes-floorplan"
               rel="tooltip"
-              title="顶部俯视"
+              :title="$t('operation.fst')"
             >
               <!-- 鼠标移入的显示 -->
-              <div class="hoverTit">平面视觉</div>
+              <div class="hoverTit">{{$t('operation.pmt')}}</div>
               <img
                 class="icon icon-inside"
                 :src="require('@/assets/images/icon/floor.png')"
@@ -149,7 +149,7 @@
             <!-- 热点列表 -->
             <div v-show="!hideTools" id="myHotList" @click="openInd = 1">
               <!-- 鼠标移入的显示 -->
-              <div class="hoverTit">热点列表</div>
+              <div class="hoverTit">{{$t('operation.rdlist')}}</div>
               <img src="../../assets/images/icon/hot.png" alt="" />
             </div>
 
@@ -166,10 +166,10 @@
               />
             </div>
             <div
-              data-original-title="消除外壳"
+              :data-original-title="$t('operation.xcwk')"
               id="gui-remove-face"
               rel="tooltip"
-              title=""
+              :title="$t('operation.xcwk')"
               style="display: none; float: left"
             >
               <img
@@ -184,13 +184,13 @@
 
     <div v-show="!hideTools" class="pinBottom right hideTarget">
       <div class="rightViewContainer clearfix">
-        <div class="gui-floor">
+        <!-- <div class="gui-floor">
           <div class="gui-floor-title"></div>
           <div class="gui-floor-icon">
             <span class="gui-floor-number"></span>
           </div>
           <div class="container"></div>
-        </div>
+        </div> -->
 
         <div id="vr" class="ui-icon wide hidden" style="display: none">
           <a>
@@ -244,7 +244,7 @@
         <!-- 音乐 -->
         <div id="volume" class="ui-icon bgandshare wide">
           <!-- 鼠标移入的显示 -->
-          <div class="hoverTit">{{ musicState ? "关闭" : "打开" }}音乐</div>
+          <div class="hoverTit">{{ musicState?$t("operation.gbyy"):$t("operation.dkyy") }}</div>
           <div>
             <img
               id="openMusic"
@@ -268,28 +268,40 @@
           <div class="hoverTit">分享</div>
           <img src="../../assets/img/share.png" alt="" />
         </div> -->
-        <div class="toHomeBox" @click="read = true">
-          <div class="yueduliang" v-if="read">
-            <div v-for="item in readList" :key="item" :class="{active: item==activeRead}" @click="readClick(item)">{{ item }}</div>
-            <div class="read">{{ readVlaue }}</div>
-            <img @click.stop="read = false" src="../../assets/images/icon/close.png" alt="">
-            <span class="triangle-down"></span>
+        <div class="toHomeBox" :class="{toHomeBoxMc: isMyMobile}" @click="read = true; languageShow = false">
+          <div v-if="!isMyMobile">
+            <div class="yueduliang" v-show="read">
+              <div v-for="item in readList" :key="item" :class="{active: item==activeRead}" @click="readClick(item)">{{ item }}</div>
+              <div class="read">{{ readVlaue }}</div>
+              <img @click.stop="read = false" src="../../assets/images/icon/close.png" alt="">
+              <span class="triangle-down"></span>
+            </div>
+          </div>
+          <div v-else>
+            <div class="yueduliangMC" v-show="read">
+              <div class="typelist">
+                  <div v-for="item in readList" :key="item" :class="{active: item==activeRead}" @click="readClick(item)">{{ item }}</div>
+              </div>
+              <div class="read">{{ readVlaue }}</div>
+              <img @click.stop="read = false" src="../../assets/images/icon/close.png" alt="">
+              <span class="triangle-down"></span>
+            </div>
           </div>
-          <div class="hoverTit">阅读量</div>
+          <div class="hoverTit">{{ $t("operation.ydl") }}</div>
           <img src="../../assets/images/icon/red.png" alt="" />
         </div>
 
-        <div class="toHomeBox">
-          <div class="hoverTit">全屏</div>
+        <div class="toHomeBox" @click="handleFullscreen">
+          <div class="hoverTit">{{ $t("operation.qp") }}</div>
           <img src="../../assets/images/icon/quanping.png" alt="" />
         </div>
 
         <div class="toHomeBox">
-          <div class="ppList">
-            <div v-for="item in languageList" :key="item" :style="{color: item==language?'#0F7562':'#00221C'}">{{item}}</div>
+          <div class="ppList" v-show="languageShow">
+            <div v-for="item in languageList" :key="item.key" @click="hanldlanguage(item)" :style="{color: item.key==language?'#0F7562':'#00221C'}">{{item.name}}</div>
           </div>
-          <div class="hoverTit">语言</div>
-          <img src="../../assets/images/icon/yuyan.png" alt="" />
+          <div class="hoverTit">{{ $t("operation.yy") }}</div>
+          <img @click="languageShow = !languageShow; read = false" src="../../assets/images/icon/yuyan.png" alt="" />
         </div>
       </div>
     </div>
@@ -310,25 +322,99 @@ export default {
   components: { HotList, Share },
   props: {
     hideTools: Boolean,
+    loadingstate: Boolean,
   },
   data() {
     return {
+      m: this.$route.query.m,
+      id: this.$route.query.id,
       isGuide: true,
+      fullscreen: false,
       musicState: false,
+      isMyMobile: false,
+      loading: true,
+
       // vr---热点列表---分享
       openInd: 0,
       read: false,
+      languageShow: false,
       readVlaue: 19990,
       activeRead: '全部',
-      language: '简体中文',
-      languageList: ['简体中文', '繁体中文', 'English', 'Português'],
-      readList: ['全部', '本年', '本月', '本日'],
+      language: localStorage.getItem("locale") || 'zh-cn',
+      languageList: [{
+        name: '简体中文',
+        key: 'zh-cn',
+      },{
+        name: '繁体中文',
+        key: 'zh-hk',
+      },{
+        name: 'English',
+        key: 'en',
+      },{
+        name: 'Português',
+        key: 'pe',
+      }],
+      readList: [this.$t("operation.readList0"), this.$t("operation.readList1"), this.$t("operation.readList2"), this.$t("operation.readList3")],
     };
   },
   watch: {},
-  computed: {},
-  mounted() {},
+  computed: {
+  },
+  mounted() {
+    window.addEventListener('resize', this.checkIfMobile);
+    this.$nextTick(() => {
+      window.addEventListener("loadfinish", () => {
+        this.loading = false;
+        // document.title = "珠海高新区中共党史学习教育园地线上展厅";
+      });
+    });
+    console.log('$route.query',this.$route.query);
+    this.$http({
+        method: "post",
+        data: {
+          "num": this.m,
+          "type": "visit"
+        },
+        url: `https://sit-visitcommon.4dage.com/api/visit/trend/saveType`
+      }).then(res => {
+        this.getReadData();
+      });
+  },
   methods: {
+    handleFullscreen() {
+      if (!this.fullscreen) {
+        this.fullscreenFn()
+      }else{
+        this.exitFullscreen();
+      }
+    },
+    fullscreenFn () {
+      let element = document.body
+      this.fullscreen = true;
+         // 全屏
+         if (element.requestFullscreen)
+            element.requestFullscreen()
+         else if (element.mozRequestFullScreen)
+            element.mozRequestFullScreen()
+         else if (element.webkitRequestFullscreen)
+            element.webkitRequestFullscreen()
+         else if (element.msRequestFullscreen)
+            element.msRequestFullscreen()
+      },
+    exitFullscreen() {
+             // 退出全屏
+             if (document.exitFullscreen)
+            document.exitFullscreen()
+         else if (document.mozCancelFullScreen)
+            document.mozCancelFullScreen()
+         else if (document.webkitExitFullscreen)
+            document.webkitExitFullscreen()
+         this.fullscreen = false
+    },
+    checkIfMobile() {
+      const userAgent = navigator.userAgent || navigator.vendor || window.opera;
+      this.isMyMobile = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(userAgent);
+    },
     switchBGM(flag) {
       this.musicState = flag;
       if (flag) {
@@ -353,10 +439,38 @@ export default {
       this.switchBGM(false);
       this.$emit("toHome");
     },
+    hanldlanguage(item) {
+      this.$i18n.locale = item.key
+      this.language = item.key;
+      localStorage.setItem("locale", item.key); 
+    },
     readClick(item) {
+      console.log('item', item);
       this.activeRead = item;
-    }
+      this.getReadData();
+    },
+    async getReadData() {
+      let obj = {
+        [this.$t("operation.readList0")]: '',
+        [this.$t("operation.readList1")]: 'year',
+        [this.$t("operation.readList2")]: 'month',
+        [this.$t("operation.readList3")]: 'day',
+      };
+      let res = await  this.$http({
+        method: "get",
+        params: {
+          "num": this.m,
+          "type": obj[this.activeRead]
+        },
+        url: `https://sit-visitcommon.4dage.com//api/visit/trend/period/${this.m}`
+      });;
+      console.log('getReadData', res);
+      this.readVlaue = res.data && res.data.data && res.data.data.pcsVisit || 0;
+     }
   },
+	beforeDestroy() {
+		window.removeEventListener('resize', this.checkIfMobile);
+	},
 };
 </script>
 
@@ -495,13 +609,61 @@ export default {
     }
   }
 }
-
+.toHomeBoxMc{
+  height: auto;
+}
 .toHomeBox {
   margin-right: 20px;
   cursor: pointer;
   position: relative;
   width: 58px;
   height: 58px;
+  .yueduliangMC{
+    display: flex;
+    align-items: center;
+    position: absolute;
+    top: -50px;
+    background: #fff;
+    border-radius: 10px;
+    height: auto;
+    color: #0F7562;
+    padding: 10px;
+    top: -5px;
+    left: -120px;
+    .typelist{
+      width: 55px;
+      padding-right: 10px;
+      margin-right: 10px;
+      border-right: 1px solid #D2C9C1;
+    }
+    .typelist{
+      .active{
+        background: #0F7562;
+        border-radius: 25px;
+        color: #fff;
+      }
+      div{
+      height: 20px;
+      line-height: 20px;
+      font-family: Source Han Serif CN;
+      font-weight: 600;
+      font-size: 14px;
+      color: #00221C;
+      opacity: 0.85;
+      text-align: center;
+      border-bottom: 1px solid #D2C9C1;
+      &:last-child{
+        border: none;
+      }
+    }
+    }
+    img{    
+      width: 20px;    
+      right: 3px;
+      top: -7px;
+      position: absolute;
+    }
+  }
   .yueduliang{
     display: flex;
     align-items: center;
@@ -556,7 +718,7 @@ export default {
     background: #fff;
     opacity: 0.85;
     border-radius: 8px;
-    display: none;
+    // display: none;
     div{
       height: 30px;
       line-height: 30px;
@@ -577,7 +739,7 @@ export default {
       opacity: 1;
     }
     .ppList{
-      display: block;
+      // display: block;
     }
   }
 }
@@ -636,11 +798,14 @@ export default {
   .hoverTit {
     opacity: 0 !important;
   }
+  .yueduliang{
+    left: -196px
+  }
   .viewContainer {
     & > div {
       img {
-        width: 33px !important;
-        height: 33px !important;
+        // width: 33px !important;
+        // height: 33px !important;
       }
     }
   }
@@ -648,8 +813,8 @@ export default {
     width: 50px;
     margin-bottom: 15px;
   }
-
   .pinBottom-container {
+    background: none;
     .pinBottom.right.hideTarget {
       position: fixed;
       top: 200px;
@@ -658,17 +823,20 @@ export default {
         flex-direction: column;
         & > div,
         #volume {
-          width: 50px !important;
+          // width: 50px !important;
           text-align: right;
           margin-right: 0;
           margin-bottom: 10px;
-          & > div {
-            display: flex;
-            justify-content: flex-end;
+          & > .ppList {
+            // display: flex;
+            // justify-content: flex-end;
+            left: -105px;
+            top: -50px
+
           }
           img {
-            width: 33px;
-            height: 33px;
+            // width: 33px;
+            // height: 33px;
           }
         }
       }

+ 5 - 0
scene/yarn.lock

@@ -9975,6 +9975,11 @@ vue-hot-reload-api@^2.3.0:
   resolved "https://mirrors.cloud.tencent.com/npm/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
   integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
 
+vue-i18n@8.0.0:
+  version "8.0.0"
+  resolved "https://mirrors.cloud.tencent.com/npm/vue-i18n/-/vue-i18n-8.0.0.tgz#ae0c6e05ec8e36151bcf5f47c7b538c8af6d0282"
+  integrity sha512-Xi4xQEhL96zqXfPcfEM8Dusqmxu2jJBR88t+KGCxT7WoeDa7YHFtN7tauf9ZJQQEKt9kT6PH1+krVMB8tnl7TA==
+
 "vue-loader-v16@npm:vue-loader@^16.1.0":
   version "16.8.3"
   resolved "https://mirrors.cloud.tencent.com/npm/vue-loader/-/vue-loader-16.8.3.tgz#d43e675def5ba9345d6c7f05914c13d861997087"