aamin 1 год назад
Родитель
Сommit
e192f0a1e5
100 измененных файлов с 27738 добавлено и 129 удалено
  1. 3 0
      hot - 离线版/.browserslistrc
  2. 17 0
      hot - 离线版/.eslintrc.js
  3. 23 0
      hot - 离线版/.gitignore
  4. 24 0
      hot - 离线版/README.md
  5. 5 0
      hot - 离线版/babel.config.js
  6. 26499 0
      hot - 离线版/package-lock.json
  7. 32 0
      hot - 离线版/package.json
  8. 16 0
      hot - 离线版/public/index.html
  9. 22 0
      hot - 离线版/src/App.vue
  10. 34 0
      hot - 离线版/src/assets/base.css
  11. 0 0
      hot - 离线版/src/assets/images/IMGerror.png
  12. 0 0
      hot - 离线版/src/assets/images/loading.gif
  13. BIN
      hot - 离线版/src/assets/images/pc/audio.png
  14. BIN
      hot - 离线版/src/assets/images/pc/audioAc.png
  15. BIN
      hot - 离线版/src/assets/images/pc/icon-left.png
  16. BIN
      hot - 离线版/src/assets/images/pc/icon-right.png
  17. BIN
      hot - 离线版/src/assets/images/pc/icon1.png
  18. BIN
      hot - 离线版/src/assets/images/pc/icon1Ac.png
  19. BIN
      hot - 离线版/src/assets/images/pc/icon2.png
  20. BIN
      hot - 离线版/src/assets/images/pc/icon2Ac.png
  21. BIN
      hot - 离线版/src/assets/images/pc/icon3.png
  22. BIN
      hot - 离线版/src/assets/images/pc/icon3Ac.png
  23. BIN
      hot - 离线版/src/assets/images/pc/left.png
  24. BIN
      hot - 离线版/src/assets/images/pc/right.png
  25. BIN
      hot - 离线版/src/assets/logo.png
  26. 59 0
      hot - 离线版/src/components/HelloWorld.vue
  27. 23 0
      hot - 离线版/src/main.js
  28. 27 0
      hot - 离线版/src/router/index.js
  29. 29 0
      hot - 离线版/src/utils/browser.js
  30. 0 0
      hot - 离线版/src/utils/http.js
  31. 5 0
      hot - 离线版/src/views/About.vue
  32. 585 0
      hot - 离线版/src/views/Home.vue
  33. 3 0
      hot - 离线版/vue.config.js
  34. 4 2
      hot/src/views/Home.vue
  35. 1 1
      houtai/src/pages/A1Rule/RuleEdit/index.tsx
  36. 2 2
      houtai/src/pages/A3User/index.tsx
  37. 22 21
      houtai/src/pages/A4Prize/index.tsx
  38. 1 1
      houtai/src/pages/A8Scene/index.tsx
  39. 2 2
      scene - 离线版/public/static/css/css/main.css
  40. 11 2
      scene - 离线版/public/static/js/Hot.js
  41. 1 1
      scene - 离线版/public/static/js/loadCAD.js
  42. 30 5
      scene - 离线版/public/static/js/main_2020_show.js
  43. 6 3
      scene - 离线版/public/static/js/manage.js
  44. 4 2
      scene - 离线版/public/static/js/myShow.js
  45. 5 5
      scene - 离线版/src/pages/Home.vue
  46. 3 2
      scene - 离线版/src/views/gui/menu.vue
  47. 11 2
      scene/public/static/js/Hot.js
  48. 9 3
      scene/public/static/js/main_2020_show.js
  49. 2 0
      scene/public/static/js/manage.js
  50. BIN
      scene/src/assets/img/icon-down.png
  51. BIN
      scene/src/assets/img/icon-up.png
  52. 124 0
      scene/src/components/info/index.vue
  53. 3 1
      scene/src/pages/Home.vue
  54. 24 5
      scene/src/views/gui/menu.vue
  55. 2 0
      zhengquan/index.html
  56. 1 0
      zhengquan/public/scene/css/app.435ab0d9.css
  57. 1 1
      zhengquan/public/scene/css/app.a996bc07.css
  58. 0 1
      zhengquan/public/scene/hot/css/app.7c7a8fa0.css
  59. 0 9
      zhengquan/public/scene/hot/css/chunk-vendors.ff3e1284.css
  60. 0 1
      zhengquan/public/scene/hot/index.html
  61. 0 2
      zhengquan/public/scene/hot/js/about.168b35c2.js
  62. 0 1
      zhengquan/public/scene/hot/js/about.168b35c2.js.map
  63. 0 2
      zhengquan/public/scene/hot/js/app.373e84cf.js
  64. 0 1
      zhengquan/public/scene/hot/js/app.373e84cf.js.map
  65. 0 34
      zhengquan/public/scene/hot/js/chunk-vendors.e38b11cc.js
  66. 0 1
      zhengquan/public/scene/hot/js/chunk-vendors.e38b11cc.js.map
  67. 1 1
      zhengquan/public/scene/index.html
  68. 1 0
      zhengquan/public/scene/js/app.46876ebb.js
  69. 0 1
      zhengquan/public/scene/js/app.87935e31.js
  70. 1 0
      zhengquan/public/scene/js/app.f8d02c38.js
  71. 1 1
      zhengquan/public/scene/js/chunk-vendors.649c8c8a.js
  72. 11 2
      zhengquan/public/scene/static/js/Hot.js
  73. 10 3
      zhengquan/public/scene/static/js/main_2020_show.js
  74. 2 0
      zhengquan/public/scene/static/js/manage.js
  75. BIN
      zhengquan/public/staticData/animation/9/greeting.png
  76. BIN
      zhengquan/public/staticData/animation/9/idle.png
  77. BIN
      zhengquan/public/staticData/animation/9/talk.png
  78. 28 6
      zhengquan/public/staticData/data.js
  79. BIN
      zhengquan/public/staticData/game/mobile/1g.png
  80. BIN
      zhengquan/public/staticData/game/mobile/2g.png
  81. BIN
      zhengquan/public/staticData/game/mobile/3g.png
  82. BIN
      zhengquan/public/staticData/game/mobile/4g.png
  83. BIN
      zhengquan/public/staticData/game/mobile/5g.png
  84. BIN
      zhengquan/public/staticData/game/mobile/7g.png
  85. BIN
      zhengquan/public/staticData/game/pc/1.jpg
  86. BIN
      zhengquan/public/staticData/game/pc/1.png
  87. BIN
      zhengquan/public/staticData/game/pc/2.jpg
  88. BIN
      zhengquan/public/staticData/game/pc/2.png
  89. BIN
      zhengquan/public/staticData/game/pc/3.jpg
  90. BIN
      zhengquan/public/staticData/game/pc/3.png
  91. BIN
      zhengquan/public/staticData/game/pc/4.jpg
  92. BIN
      zhengquan/public/staticData/game/pc/4.png
  93. BIN
      zhengquan/public/staticData/game/pc/5.jpg
  94. BIN
      zhengquan/public/staticData/game/pc/5.png
  95. BIN
      zhengquan/public/staticData/game/pc/6.jpg
  96. BIN
      zhengquan/public/staticData/game/pc/6.png
  97. BIN
      zhengquan/public/staticData/game/pc/7.jpg
  98. BIN
      zhengquan/public/staticData/game/pc/7.png
  99. 8 2
      zhengquan/src/App.vue
  100. 0 0
      zhengquan/src/assets/fonts/SourceHanSerifCN-Heavy.otf

+ 3 - 0
hot - 离线版/.browserslistrc

@@ -0,0 +1,3 @@
+> 1%
+last 2 versions
+not dead

+ 17 - 0
hot - 离线版/.eslintrc.js

@@ -0,0 +1,17 @@
+module.exports = {
+  root: true,
+  env: {
+    node: true
+  },
+  'extends': [
+    'plugin:vue/essential',
+    'eslint:recommended'
+  ],
+  parserOptions: {
+    parser: 'babel-eslint'
+  },
+  rules: {
+    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
+    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
+  }
+}

+ 23 - 0
hot - 离线版/.gitignore

@@ -0,0 +1,23 @@
+.DS_Store
+node_modules
+/dist
+
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 24 - 0
hot - 离线版/README.md

@@ -0,0 +1,24 @@
+# hotspot
+
+## Project setup
+```
+npm install
+```
+
+### Compiles and hot-reloads for development
+```
+npm run serve
+```
+
+### Compiles and minifies for production
+```
+npm run build
+```
+
+### Lints and fixes files
+```
+npm run lint
+```
+
+### Customize configuration
+See [Configuration Reference](https://cli.vuejs.org/config/).

+ 5 - 0
hot - 离线版/babel.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    '@vue/cli-plugin-babel/preset'
+  ]
+}

Разница между файлами не показана из-за своего большого размера
+ 26499 - 0
hot - 离线版/package-lock.json


+ 32 - 0
hot - 离线版/package.json

@@ -0,0 +1,32 @@
+{
+  "name": "hotspot",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve",
+    "build": "vue-cli-service build",
+    "lint": "vue-cli-service lint"
+  },
+  "dependencies": {
+    "axios": "^0.20.0",
+    "core-js": "^3.6.5",
+    "swiper": "^5.4.5",
+    "v-viewer": "^1.5.1",
+    "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-eslint": "^10.1.0",
+    "eslint": "^6.7.2",
+    "eslint-plugin-vue": "^6.2.2",
+    "less": "^3.0.4",
+    "less-loader": "^5.0.0",
+    "vue-template-compiler": "^2.6.11"
+  }
+}

+ 16 - 0
hot - 离线版/public/index.html

@@ -0,0 +1,16 @@
+<!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>
+</html>

+ 22 - 0
hot - 离线版/src/App.vue

@@ -0,0 +1,22 @@
+<template>
+  <div id="app">
+    <router-view/>
+  </div>
+</template>
+
+<style lang="less">
+html,body{
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+}
+*{
+  margin: 0;
+  padding: 0;
+}
+#app {
+  width: 100%;
+  height: 100%;
+}
+
+</style>

+ 34 - 0
hot - 离线版/src/assets/base.css

@@ -0,0 +1,34 @@
+* {
+  margin: 0;
+  padding: 0;
+  box-sizing: border-box;
+}
+body{
+  user-select: none;
+}
+.viewer-title {
+  display: none !important;
+}
+
+.viewer-prev {
+  display: none !important;
+}
+
+.viewer-next {
+  display: none !important;
+}
+
+.viewer-navbar {
+  display: none !important;
+}
+
+.viewer-close {
+  display: none !important;
+}
+
+@media screen and (max-width: 800px) {
+  .viewer-footer {
+    bottom: auto;
+    top: 10px;
+  }
+}

zhengquan/public/scene/hot/img/IMGerror.f7bd5886.png → hot - 离线版/src/assets/images/IMGerror.png


zhengquan/public/scene/hot/img/loading.236fa088.gif → hot - 离线版/src/assets/images/loading.gif


BIN
hot - 离线版/src/assets/images/pc/audio.png


BIN
hot - 离线版/src/assets/images/pc/audioAc.png


BIN
hot - 离线版/src/assets/images/pc/icon-left.png


BIN
hot - 离线版/src/assets/images/pc/icon-right.png


BIN
hot - 离线版/src/assets/images/pc/icon1.png


BIN
hot - 离线版/src/assets/images/pc/icon1Ac.png


BIN
hot - 离线版/src/assets/images/pc/icon2.png


BIN
hot - 离线版/src/assets/images/pc/icon2Ac.png


BIN
hot - 离线版/src/assets/images/pc/icon3.png


BIN
hot - 离线版/src/assets/images/pc/icon3Ac.png


BIN
hot - 离线版/src/assets/images/pc/left.png


BIN
hot - 离线版/src/assets/images/pc/right.png


BIN
hot - 离线版/src/assets/logo.png


+ 59 - 0
hot - 离线版/src/components/HelloWorld.vue

@@ -0,0 +1,59 @@
+<template>
+  <div class="hello">
+    <h1>{{ msg }}</h1>
+    <p>
+      For a guide and recipes on how to configure / customize this project,<br>
+      check out the
+      <a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
+    </p>
+    <h3>Installed CLI Plugins</h3>
+    <ul>
+      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
+      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router" target="_blank" rel="noopener">router</a></li>
+      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
+    </ul>
+    <h3>Essential Links</h3>
+    <ul>
+      <li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
+      <li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
+      <li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
+      <li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
+      <li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
+    </ul>
+    <h3>Ecosystem</h3>
+    <ul>
+      <li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
+      <li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
+      <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
+      <li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
+      <li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
+    </ul>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'HelloWorld',
+  props: {
+    msg: String
+  }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style scoped lang="less">
+h3 {
+  margin: 40px 0 0;
+}
+ul {
+  list-style-type: none;
+  padding: 0;
+}
+li {
+  display: inline-block;
+  margin: 0 10px;
+}
+a {
+  color: #42b983;
+}
+</style>

+ 23 - 0
hot - 离线版/src/main.js

@@ -0,0 +1,23 @@
+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 VueLazyLoad from 'vue-lazyload'
+Vue.use(VueLazyLoad, {
+  error: require('@/assets/images/IMGerror.png'),
+  loading: require('@/assets/images/loading.gif')
+})
+
+Vue.config.productionTip = false
+Vue.prototype.$http = axios
+
+Vue.use(Viewer)
+
+import './assets/base.css'
+new Vue({
+  router,
+  render: h => h(App)
+}).$mount('#app')

+ 27 - 0
hot - 离线版/src/router/index.js

@@ -0,0 +1,27 @@
+import Vue from 'vue'
+import VueRouter from 'vue-router'
+import Home from '../views/Home.vue'
+
+Vue.use(VueRouter)
+
+const routes = [
+  {
+    path: '/',
+    name: 'Home',
+    component: Home
+  },
+  {
+    path: '/about',
+    name: 'About',
+    // route level code-splitting
+    // this generates a separate chunk (about.[hash].js) for this route
+    // which is lazy-loaded when the route is visited.
+    component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
+  }
+]
+
+const router = new VueRouter({
+  routes
+})
+
+export default router

+ 29 - 0
hot - 离线版/src/utils/browser.js

@@ -0,0 +1,29 @@
+function versions () {
+    var u = window.navigator.userAgent
+    return {
+      // IE内核
+      trident: u.indexOf('Trident') > -1,
+      // opera内核
+      presto: u.indexOf('Presto') > -1,
+      // 苹果、谷歌内核
+      webKit: u.indexOf('AppleWebKit') > -1,
+      // 火狐内核
+      gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') === -1,
+      // 是否为移动终端 / Tablets use desktop version
+      mobile: (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) && !(/Tablet|iPad/i.test(navigator.userAgent)),
+      // ios终端
+      ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
+      // android终端或者uc浏览器
+      android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1,
+      // 是否为iPhone或者安卓QQ浏览器
+      iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1,
+      // 是否为iPad
+      iPad: u.indexOf('iPad') > -1,
+      // 是否为web应用程序,没有头部与底部
+      webApp: u.indexOf('Safari') === -1,
+      // 是否为微信浏览器
+      weixin: ~u.indexOf('MicroMessenger')
+    }
+  }
+  
+  export default versions()

+ 0 - 0
hot - 离线版/src/utils/http.js


+ 5 - 0
hot - 离线版/src/views/About.vue

@@ -0,0 +1,5 @@
+<template>
+  <div class="about">
+    <h1>This is an about page</h1>
+  </div>
+</template>

+ 585 - 0
hot - 离线版/src/views/Home.vue

@@ -0,0 +1,585 @@
+<template>
+  <div class="home">
+    <div class="main">
+      <div class="mainCon" v-show="!oneTxt">
+        <!-- 音频播放器 -->
+        <audio id="myAudio" v-if="audio" v-show="isOneAduio" :src="urlToFitFu(audio)" controls></audio>
+        <!-- 音频图标 -->
+        <div class="audioIcon" v-if="audio && !isOneAduio" @click="audioSta = !audioSta"
+          :title="audioSta ? '关闭音频' : '打开音频'">
+          <img :src="require(`@/assets/images/pc/audio${audioSta ? 'Ac' : ''}.png`)
+            " alt="" />
+        </div>
+
+        <!-- 如果只有一个模块 -->
+        <div class="oneTabNum" v-if="flooTab.length === 1 && data[myType] && data[myType].length">
+          {{ myInd + 1 }} / {{ data[myType].length }}
+        </div>
+
+        <!-- 底部的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="" />
+            {{ 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>
+          </div>
+        </div>
+
+        <!-- 主要内容 -->
+
+        <div class="contenBoxMain">
+          <div class="contenBox" :class="{ contenBoxAc: index === myInd }" 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>
+            </div>
+            <!-- 视频页面 -->
+            <div class="videoBox" v-else-if="myType === 'video'">
+              <video id="videoID" controls :src="urlToFitFu(item.url)" v-if="index === myInd"></video>
+            </div>
+            <!-- 图片页面 -->
+            <div class="imgBox" v-else-if="myType === 'img'">
+              <div class="smImgBox" @click="lookImg(urlToFitFu(item))">
+                <img v-lazy="urlToFitFu(item)" alt="" />
+              </div>
+            </div>
+          </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>
+        </div>
+      </div>
+
+      <!-- 下面的文字介绍 -->
+      <div class="flooTxt" :class="{ flooTxtOne: oneTxt }">
+        <div class="flooTxtBox">
+          <div class="myTitle">{{ myTitle }}</div>
+          <!-- 视频的介绍 -->
+          <div class="myTxt" v-if="myType === 'video' && videoTxt[myInd]">
+            {{ videoTxt[myInd] }}
+          </div>
+          <div class="myTxt" v-if="myType === 'img' && imgTxt[myInd]">
+            {{ imgTxt[myInd] }}
+          </div>
+          <div class="myTxt" v-html="myTxt"></div>
+        </div>
+      </div>
+    </div>
+    <!-- 查看图片 -->
+    <viewer class="viewerCla" ref="viewer" :images="lookPics">
+      <img :src="lookPics[0]" alt="" />
+    </viewer>
+  </div>
+</template>
+
+
+<script>
+export default {
+  name: "Home",
+  data() {
+    return {
+      m: this.$route.query.m,
+      id: this.$route.query.id,
+      // 音频地址
+      audio: "",
+      // 如果只有单独的音频
+      isOneAduio: false,
+      // 音频状态
+      audioSta: false,
+
+      data: {
+        // 模型数组
+        model: [],
+        // 视频数组
+        video: [],
+        // 图片数组
+        img: [],
+      },
+      // 当前 type
+      myType: "",
+
+      // 底部的tab
+      flooTab: [],
+
+      // 当前索引
+      myInd: 0,
+
+      // 查看图片
+      lookPics: [],
+
+      // 标题
+      myTitle: "",
+      // 内容
+      myTxt: "",
+      // 视频内容
+      videoTxt: [],
+      imgTxt: [],
+
+      // 只有标题和文字(没有视频,没有模型,没有图片)
+      oneTxt: false,
+    };
+  },
+  watch: {
+    myType() {
+      this.myInd = 0;
+    },
+    // 音频的开启和关闭
+    audioSta(val) {
+      const dom = document.querySelector("#myAudio");
+      if (val) {
+        dom.play();
+        dom.onended = () => {
+          // console.log("----音频播放完毕");
+          this.audioSta = false;
+        };
+      } else dom.pause();
+    },
+  },
+  computed: {},
+  components: {},
+  methods: {
+    // 本地化 url 适配
+    urlToFitFu(url) {
+      const resUrl = url;
+      if (url.includes("https://super.4dage.com")) {
+        return url.replace("https://super.4dage.com", "");
+      } else if (url.includes("http://super.4dage.com")) {
+        return url.replace("http://super.4dage.com", "");
+      } else return resUrl;
+    },
+    // 点击左右箭头
+    cutMyInd(num, flag) {
+      if (flag) return;
+      this.myInd += num;
+    },
+    // 点击查看大图
+    lookImg(url) {
+      let dom = this.$refs.viewer.$viewer;
+      this.lookPics = [url];
+      dom.show();
+    },
+    async getData() {
+      // https://www.4dmodel.com/
+      // let url = `https://super.4dage.com/data/${
+      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];
+      console.log("----", resData);
+      if (resData) {
+        this.audio = resData.backgroundMusic;
+        // 只有单独的音频上传
+        if (
+          resData.backgroundMusic &&
+          !resData.model &&
+          !resData.video &&
+          !resData.images
+        ) {
+          this.isOneAduio = true;
+        }
+        // 底部的tab
+        const arr = [];
+        const obj = {};
+        if (resData.model) {
+          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: "视频" });
+        }
+        if (resData.images) {
+          obj.img = resData.images;
+          arr.push({ id: 3, type: "img", name: "图片" });
+        }
+        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";
+
+        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;
+        }
+      }
+    },
+  },
+  mounted() {
+    this.getData();
+    // 监听视频观看完成时,记录积分
+    setTimeout(() => {
+      const videoIDDom = document.getElementById('videoID')
+      videoIDDom.addEventListener('ended', () => {
+        console.log('视频观看完成', window, window.parent, window.parent.window, window.parent.window.parent.window)
+        if(window.parent && window.parent.window.parent.window && window.parent.window.parent.window.addScoreFu){
+          window.parent.window.parent.window.addScoreFu('观看视频')
+        }
+      })
+    }, 800)
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.home {
+  .viewerCla img {
+    display: none;
+  }
+
+  width: 100%;
+  height: 100%;
+  background-color: rgba(0, 0, 0, 0.79);
+  // backdrop-filter: blur(10px);
+  position: relative;
+
+  #myAudio {
+    z-index: 11;
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    transform: translate(-50%, -50%);
+    width: 500px;
+    height: 60px;
+  }
+
+  .main {
+    width: 1200px;
+    margin: 0 auto;
+    height: 100%;
+    padding-top: 40px;
+
+    .mainCon {
+      position: relative;
+      border-radius: 6px;
+      overflow: hidden;
+      width: 100%;
+      height: calc(100% - 200px);
+      // background: linear-gradient(#929292, #c5c5c5);
+
+      .audioIcon {
+        z-index: 10;
+        cursor: pointer;
+        position: absolute;
+        right: 20px;
+        bottom: 30px;
+      }
+
+      .oneTabNum {
+        z-index: 10;
+        position: absolute;
+        bottom: 30px;
+        left: 50%;
+        transform: translateX(-50%);
+        font-size: 14px;
+      }
+
+      .flooTabBox {
+        z-index: 10;
+        position: absolute;
+        bottom: 30px;
+        left: 50%;
+        transform: translateX(-50%);
+        display: flex;
+
+        .tabRow {
+          cursor: pointer;
+          display: flex;
+          align-items: center;
+          margin: 0 12px;
+          font-size: 12px;
+          background-color: #489182;
+          color: #FCE9AC;
+          padding: 0px 14px;
+          height: 36px;
+          border-radius: 18px;
+
+          &>img {
+            margin-right: 6px;
+          }
+        }
+
+        .tabRowAc {
+          background-color: #EAD5A3;
+          pointer-events: none;
+          color: #489182;
+        }
+      }
+
+      .contenBoxMain {
+        position: relative;
+        width: 100%;
+        height: 100%;
+      }
+
+      .contenBox {
+        width: 100%;
+        height: 100%;
+        position: absolute;
+        top: 0;
+        left: 0;
+        opacity: 0;
+        pointer-events: none;
+        transition: all 0.5s;
+
+        .modelBox,
+        .videoBox,
+        .imgBox {
+          width: 100%;
+          height: 100%;
+        }
+
+        .modelBox {
+          iframe {
+            width: 100%;
+            height: 100%;
+          }
+        }
+
+        .videoBox {
+          padding: 100px 100px 120px;
+
+          video {
+            width: 100%;
+            height: 100%;
+          }
+        }
+
+        .imgBox {
+          // padding: 100px 100px 120px;
+
+          .smImgBox {
+            width: 100%;
+            height: 100%;
+            cursor: zoom-in;
+
+            &>img {
+              pointer-events: none;
+              width: 100%;
+              height: 100%;
+              object-fit: contain;
+            }
+          }
+        }
+      }
+
+      .contenBoxAc {
+        opacity: 1;
+        pointer-events: auto;
+      }
+
+      .awccJJ {
+        cursor: pointer;
+        position: absolute;
+        top: 50%;
+        transform: translateY(-50%);
+        left: 10px;
+        width: 37px;
+        height: 37px;
+        background-image: url("../assets/images/pc/left.png");
+        background-size: 100% 100%;
+
+        &:focus {
+          outline: none;
+        }
+      }
+
+      .rightJJ {
+        left: auto;
+        right: 10px;
+        background-image: url("../assets/images/pc/right.png");
+      }
+
+      .noClick {
+        cursor: default;
+        opacity: 0.4;
+      }
+    }
+
+    .flooTxt {
+      margin-top: 20px;
+      width: 100%;
+      height: 160px;
+
+      .flooTxtBox {
+        width: 100%;
+        height: 100%;
+        overflow-y: auto;
+
+        .myTitle {
+          color: #fff;
+          font-size: 22px;
+          font-weight: 700;
+          margin-bottom: 10px;
+          text-align: center;
+        }
+
+        .myTxt {
+          font-size: 16px;
+          color: #ffffff;
+          line-height: 24px;
+        }
+
+        &::-webkit-scrollbar {
+          /*滚动条整体样式*/
+          width: 3px;
+          /*高宽分别对应横竖滚动条的尺寸*/
+          height: 1px;
+        }
+
+        &::-webkit-scrollbar-thumb {
+          /*滚动条里面小方块*/
+          border-radius: 10px;
+          -webkit-box-shadow: inset 0 0 5px transparent;
+          background: #EAD5A3;
+        }
+
+        &::-webkit-scrollbar-track {
+          /*滚动条里面轨道*/
+          -webkit-box-shadow: inset 0 0 5px transparent;
+          border-radius: 10px;
+          background: transparent;
+        }
+      }
+    }
+
+    .flooTxtOne {
+      height: 600px;
+    }
+  }
+}
+
+// 移动端
+@media screen and (max-width: 1000px) {
+  .home {
+    #myAudio {
+      width: 90vw;
+      max-width: 500px;
+    }
+
+    .main {
+      width: 90%;
+      height: 94%;
+      padding: 0;
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      transform: translate(-50%, -50%);
+
+      .mainCon {
+        border-radius: 8px 8px 0 0;
+
+        .audioIcon {
+          cursor: default;
+          right: auto;
+          bottom: auto;
+          top: 6px;
+          left: 6px;
+
+          &>img {
+            width: 30px;
+          }
+        }
+
+        .flooTabBox {
+          width: 100%;
+          bottom: 20px;
+          justify-content: center;
+
+          .tabRow {
+            cursor: default;
+            margin: 0 6px;
+            padding: 0 10px;
+            height: 32px;
+
+            &>img {
+              width: 16px;
+            }
+          }
+        }
+
+        .contenBox {
+          .videoBox {
+            padding: 0px 0;
+            position: relative;
+
+            video {
+              width: 96%;
+              max-height: 100%;
+              height: auto;
+              position: absolute;
+              top: 50%;
+              left: 2%;
+              transform: translateY(-50%);
+            }
+          }
+
+          .imgBox {
+            // padding: 60px 50px 80px;
+
+            .smImgBox {
+              cursor: default;
+            }
+          }
+        }
+
+        .awccJJ {
+          left: 0;
+          width: 28px;
+          height: 57px;
+          cursor: default;
+          background-image: url("../assets/images/pc/icon-left.png");
+        }
+
+        .rightJJ {
+          left: auto;
+          right: 0;
+          background-image: url("../assets/images/pc/icon-right.png");
+        }
+      }
+
+      .flooTxt {
+        margin-top: 0;
+        padding: 20px 15px 15px;
+        height: 200px;
+        // background-color: #fff;
+        border-radius: 0 0 8px 8px;
+
+        .flooTxtBox {
+          .myTitle {
+            font-size: 18px;
+          }
+
+          .myTxt {
+            font-size: 14px;
+            line-height: 22px;
+          }
+        }
+      }
+
+      .flooTxtOne {
+        height: 100%;
+      }
+    }
+  }
+}
+</style>
+

+ 3 - 0
hot - 离线版/vue.config.js

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

+ 4 - 2
hot/src/views/Home.vue

@@ -219,9 +219,11 @@ export default {
       const videoIDDom = document.getElementById('videoID')
       videoIDDom.addEventListener('ended', () => {
         console.log('视频观看完成', window, window.parent, window.parent.window, window.parent.window.parent.window)
-        window.parent.window.parent.window.addScoreFu('观看视频')
+        if (window.parent && window.parent.window.parent.window && window.parent.window.parent.window.addScoreFu) {
+          window.parent.window.parent.window.addScoreFu('观看视频')
+        }
       })
-    },800)
+    }, 800)
   },
 };
 </script>

+ 1 - 1
houtai/src/pages/A1Rule/RuleEdit/index.tsx

@@ -61,7 +61,7 @@ function RuleEdit({ id, closePage, upTableList, editMode }: Props) {
       // 富文本 为空
       const { val, flag } = richTxtRef.current.fatherBtnOkFu();
       if (flag) {
-        MessageFu.error("产品简介不能为空");
+        MessageFu.error("游戏规则不能为空");
         return;
       }
 

+ 2 - 2
houtai/src/pages/A3User/index.tsx

@@ -95,7 +95,7 @@ function A3User() {
       realNameTime.current = window.setTimeout(() => {
         setTableSelect({
           ...tableSelect,
-          realName: e.target.value.trim(),
+          searchKey: e.target.value.trim(),
           pageNum: 1,
         });
       }, 500);
@@ -287,7 +287,7 @@ function A3User() {
           </div> */}
 
           <div className="selectBoxRow">
-            <span>真实姓名:</span>
+            <span>用户名:</span>
             <Input
               key={inputKey}
               maxLength={8}

+ 22 - 21
houtai/src/pages/A4Prize/index.tsx

@@ -16,7 +16,6 @@ import {
   DatePicker,
   DatePickerProps,
   Select,
-
   FormInstance,
 } from "antd";
 import { useDispatch, useSelector } from "react-redux";
@@ -24,7 +23,6 @@ import { RootState } from "@/store";
 import { PrizeTableType } from "@/types";
 import ImageLazy from "@/components/ImageLazy";
 import {
-
   deletePrizeByIdAPI,
   editPrizeByIdAPI,
   getPrizeDetailAPI,
@@ -32,10 +30,7 @@ import {
 } from "@/store/action/A4Prise";
 import { MessageFu } from "@/utils/message";
 import { RangePickerProps } from "antd/es/date-picker";
-import {
-  RcFile,
-
-} from "antd/es/upload";
+import { RcFile } from "antd/es/upload";
 import RichText from "@/components/Z_RichText";
 import moment from "moment";
 import UpFileOne from "@/components/Z_upFileOne";
@@ -140,20 +135,12 @@ function A4Prize() {
           setEditPageVisible(false);
         }
       }
+      form.resetFields();
+      setCover("")
     },
-    [cover, curEditItem, getList, modalType]
+    [cover, curEditItem, form, getList, modalType]
   );
 
-  const [loading, setLoading] = React.useState<boolean>(false);
-
-  const [imageUrl, setImageUrl] = React.useState<string>("");
-
-  const getBase64 = (img: RcFile, callback: (url: string) => void) => {
-    const reader = new FileReader();
-    reader.addEventListener("load", () => callback(reader.result as string));
-    reader.readAsDataURL(img);
-  };
-
   const handleChange = (value: string) => {
     console.log(`selected ${value}`);
   };
@@ -190,7 +177,7 @@ function A4Prize() {
       {
         title: "状态",
         render: (item: PrizeTableType) => (
-          <div>{item.stock > 0 ? "上架" : "下架"}</div>
+          <div>{item.isEnabled ? "上架" : "下架"}</div>
         ),
       },
       {
@@ -208,7 +195,10 @@ function A4Prize() {
               <Button
                 size="small"
                 type="text"
-                onClick={() => deletePrizeFu(item.id)}
+                onClick={() => {
+                  deletePrizeFu(item.id);
+                 
+                }}
               >
                 删除
               </Button>
@@ -250,7 +240,10 @@ function A4Prize() {
           className="scoreLimitBtn"
           size="small"
           type="primary"
-          onClick={() => setEditPageVisible(true)}
+          onClick={() => {
+            setEditPageVisible(true);
+            setModalType("add");
+          }}
         >
           新增
         </Button>
@@ -305,6 +298,9 @@ function A4Prize() {
             label="所需的积分"
             name="score"
             rules={[{ required: true, message: "不能为空!" }]}
+            getValueFromEvent={(e) =>
+              e.target.value.replace(/^(0+)|[^\d]+/g, "")
+            }
           >
             <Input maxLength={5} placeholder="请输入正整数,1-99999" />
           </Form.Item>
@@ -312,6 +308,9 @@ function A4Prize() {
             label="库存"
             name="stock"
             rules={[{ required: true, message: "不能为空!" }]}
+            getValueFromEvent={(e) =>
+              e.target.value.replace(/^(0+)|[^\d]+/g, "")
+            }
           >
             <Input maxLength={5} placeholder="请输入正整数,1-99999" />
           </Form.Item>
@@ -326,7 +325,7 @@ function A4Prize() {
           <Form.Item
             label="状态"
             name="isEnabled"
-            initialValue={curEditItem ? (curEditItem.stock > 0 ? 1 : 0) : 0}
+            initialValue={curEditItem ? (curEditItem.stock > 0 ? 1 : 0) : 1}
             rules={[{ required: true, message: "不能为空!" }]}
           >
             <Select
@@ -391,6 +390,8 @@ function A4Prize() {
               cancelText="取消"
               onConfirm={() => {
                 setEditPageVisible(false);
+                form.resetFields();
+                setCover("")
               }}
               okButtonProps={{ loading: false }}
             >

+ 1 - 1
houtai/src/pages/A8Scene/index.tsx

@@ -39,7 +39,7 @@ function A8Scene() {
   const lookFu = useCallback(async (code: string) => {
     const res = await isTokenFlagAPI();
     if (res.code === 0) {
-      isTokenFlagFu(res.data, baseURL + `/scene/index.html?m=${code}`);
+      isTokenFlagFu(res.data, baseURL + `/web/index.html#/scene?code=${code}`);
     }
   }, []);
 

+ 2 - 2
scene - 离线版/public/static/css/css/main.css

@@ -831,7 +831,7 @@ hr {
 
 .icon-fullscreen-exit:before {
     content: "";
-    background: url("https://super.4dage.com/images/narrow_off.png") center top no-repeat;
+    background: url("../../images/narrow_off.png") center top no-repeat;
     background-size: 100%;
     display: inline-block;
     width: 24px;
@@ -840,7 +840,7 @@ hr {
 
 .icon-fullscreen:before {
     content: "";
-    background: url("https://super.4dage.com/images/enlarge_on.png")center top no-repeat;
+    background: url("../../images/enlarge_on.png")center top no-repeat;
     background-size: 100%;
     display: inline-block;
     width: 24px;

+ 11 - 2
scene - 离线版/public/static/js/Hot.js

@@ -1212,8 +1212,13 @@ window.initHot = function(model){
                 var src = getLink(this.info.iframe[0]);
                 
                 if(this.info.linkType=="jumpLink"){
-                    var newPage = window.open(src, "_blank" ); 
-                    newPage.focus();  
+                    // var newPage = window.open(src, "_blank" ); 
+                    // newPage.focus(); 
+                    let m = src.substring(src.indexOf("?")+3, src.indexOf("&"))
+                    // window.location.href = src
+                    if(window.parent && window.parent.window.changeUnitByHot){
+                        window.parent.window.changeUnitByHot(m)
+                    } 
                     
                 }else if(this.info.linkType=="iframeDiv"){
                     
@@ -1772,6 +1777,10 @@ window.initHot = function(model){
         // if(!window.DATA.showHotListSta)return
         var docFragment = document.createDocumentFragment();
         var hots = hotGroup.children.filter(hot=>hot.info.actionType.openHot);
+        // hot信息本地化
+        // hots = hots.map((item:any) => {
+
+        // })
         hots = hots.sort((a,b)=>{return a.order - b.order});
 
         window.myHotList = hots

+ 1 - 1
scene - 离线版/public/static/js/loadCAD.js

@@ -15,7 +15,7 @@ window.grendCAD = (function grendCAD() {
     if (initScript) return cb();
 
     let $script = document.createElement("script");
-    $script.src = "//www.4dmodel.com/CAD/bundle.js";
+    $script.src = "static/js/bundle.js";
     $script.onload = function () {
       initScript = true;
       cb();

+ 30 - 5
scene - 离线版/public/static/js/main_2020_show.js

@@ -4855,7 +4855,9 @@ window.Modernizr = function(n, e, t) {
             n.prototype.playTour = function() {
                 // alert('开始导航')
                 // 触发形象talk状态
-                window.parent.window.handleRobot ? window.parent.window.handleRobot('talk'):'';
+                if(window.parent && window.parent.window.handleRobot){
+                    window.parent.window.handleRobot('talk')
+                }
                 if (!this.bounceable())
                     return this.tourIsPlaying ? void A.info("tour is already playing") 
                     : void (
@@ -4887,7 +4889,9 @@ window.Modernizr = function(n, e, t) {
             n.prototype.stopTour = function(isAutoStop) {//停止导览        isAutoStop 希望仅在飞完结束自动停止时的stopTour不停止tourSound, 这样才能完整播放tourSound.  不过似乎会在倒数第二个片段点击按钮停止导览时也视作自动结束的(执行this.interrupt() )。
                 // alert('停止导航')
                 // 回到idle状态
-                window.parent.window.handleRobot ? window.parent.window.handleRobot('greeting'):'';
+                if(window.parent && window.parent.window.handleRobot){
+                    window.parent.window.handleRobot('greeting')
+                }
                 SoundManager.pause('tour'), // 周恩光 自动导览暂停时同时停止语音
                 this.isInterrupted() || this.transitionStage === y.Moving && this.checkAndHandleWalkingtourInterruption(this.nextWarpStyle) || (this.tourIsPlaying && (this.player.zoomEnabled = this.wasZoomEnabled),
                 this.tourIsPlaying = !1, 
@@ -6294,7 +6298,9 @@ window.Modernizr = function(n, e, t) {
             function a() {
                 // window.parent.handleRobot('greeting'),
                 // alert('打开列表')
-                window.parent.window.handleTopRobot ? $("#drawer").hasClass("open") ? window.parent.window.handleTopRobot('bottom'): window.parent.window.handleTopRobot('top'):''
+                if(window.parent && window.parent.window.handleTopRobot){
+                    $("#drawer").hasClass("open") ? window.parent.window.handleTopRobot('bottom'): window.parent.window.handleTopRobot('top')
+                }
                 // $("#drawer").hasClass("open") ? alert('关闭列表'): alert('打开列表')
                 // window.parent.window.handleTopRobot('top')
                 // $("#drawer").hasClass("open") ? function(){window.parent && window.parent.window.handleTopRobot ? window.parent.window.handleTopRobot('bottom'):''}: function(){ window.parent && window.parent.window.handleTopRobot ? window.parent.window.handleTopRobot('top'):''}
@@ -14493,7 +14499,7 @@ window.Modernizr = function(n, e, t) {
                 
                 window.wx && manage.weixinShare();  
                 //初始画面
-                data.camera_start && data.camera_start.thumbImg &&  E(manage.dealURL(data.camera_start.thumbImg))
+                data.camera_start && data.camera_start.thumbImg && E(manage.dealURL(data.camera_start.thumbImg))
                 function E(e) {
                     $("<img/>").attr("src", e).on("load", function() {
                         $("#gui-thumb").css("backgroundImage", "url(" + e + ")").fadeIn(500),
@@ -17108,7 +17114,13 @@ window.Modernizr = function(n, e, t) {
                         if (cameraMode === a.MESH) return 
                                      
                         
-                        if(window.isLocal)src = manage.dealURL(src)
+                        if(window.isLocal){
+                            src = manage.dealURL(src)
+                            //本地文件莫名少了个"."
+                            if(src[src.length-1]=='.'){
+                               src = src.slice(0,-1) 
+                            }
+                        }
                         else src = "one" === g_version ? g_Prefix + src + "?" + randomTime().getTime() :  src + "?" + randomTime().getTime()
                          
                         var l = { 
@@ -17570,8 +17582,21 @@ window.Modernizr = function(n, e, t) {
                     responseType: "json",
                     auth: this.isPublic ? null : f.authorizationHeader
                 }).done(function(e) {
+                    // 将data2.js中所有https的值本地化
+                    function replaceHttpsWithHttp(obj) {
+                        for (let key in obj) {
+                          if (typeof obj[key] === 'string') {
+                            obj[key] = obj[key].replace('https://super.4dage.com', '');
+                          } else if (typeof obj[key] === 'object') {
+                            replaceHttpsWithHttp(obj[key]);
+                          }
+                        }
+                        return obj;
+                      }
+                    e = replaceHttpsWithHttp(e)
                     window.data2 = e;
                     
+                    
                     this.roomLabels = []
                     if(!e){
                         console.error("data2 is null") 

+ 6 - 3
scene - 离线版/public/static/js/manage.js

@@ -1,10 +1,12 @@
   
 var g_ProjectName=window.location.pathname.substring(window.location.pathname.indexOf("/")+1,window.location.pathname.lastIndexOf("/"));
-var g_Prefix="https://super.4dage.com/";
-// var g_Prefix=window.location.href.substring(0,window.location.href.indexOf("/index.html")+1);
+// var g_Prefix="https://super.4dage.com/";
+var g_Prefix=window.location.href.substring(0,window.location.href.indexOf("/index.html")+1);
 var s = window.location.href.split('/');
     s.pop();
 //var g_Prefix = s.join('/');
+window.isLocal = true
+
 var g_index=null;
 var g_modeldata=null;
 
@@ -93,6 +95,7 @@ var settings = {
     hotFastTran:false,
     transparentBg: false,
     bgImg:  null,
+    localPrefix: '',
      
     tileClass:{//默认全景贴图加载的清晰度
         pc:{
@@ -671,7 +674,7 @@ var Manage = function(){
     this.weixinURL = "https://res.wx.qq.com/open/js/jweixin-1.2.0.js",
     this.time = "?"+new Date().getTime();
     this.loadAudio();
-    this.loadWeixin();
+    // this.loadWeixin();
 }
 //动态加载js文件
 Manage.prototype.LoadJs = function(_files, succes){

+ 4 - 2
scene - 离线版/public/static/js/myShow.js

@@ -1,8 +1,10 @@
 var g_ProjectName=window.location.pathname.substring(window.location.pathname.indexOf("/")+1,window.location.pathname.lastIndexOf("/"));
-var g_Prefix="https://super.4dage.com/";
-// var g_Prefix=window.location.href.substring(0,window.location.href.indexOf("/index.html")+1);
+// var g_Prefix="https://super.4dage.com/";
+var g_Prefix=window.location.href.substring(0,window.location.href.indexOf("/index.html")+1);
 var s = window.location.href.split('/');
+window.isLocal = true
 s.pop();
+
 //var g_Prefix = s.join('/');
 var g_index=null;
 var g_modeldata=null;

+ 5 - 5
scene - 离线版/src/pages/Home.vue

@@ -170,11 +170,11 @@ export default {
   },
   async created() {
     // 发送访问量
-    try {
-      await addVisitAPI();
-    } catch (e) {
-      console.log(e);
-    }
+    // try {
+    //   await addVisitAPI();
+    // } catch (e) {
+    //   console.log(e);
+    // }
   },
 };
 </script>

+ 3 - 2
scene - 离线版/src/views/gui/menu.vue

@@ -247,7 +247,9 @@ export default {
     timeA = window.setInterval(() => {
       if (window.hotData) {
         clearInterval(timeA);
-        window.parent.window.handleRobo ? window.parent.window.handleRobot('greeting'):'';
+        if (window.parent && window.parent.window.handleRobot) {
+          window.parent.window.handleRobot('greeting')
+        }
       }
 
     }, 500);
@@ -287,7 +289,6 @@ export default {
       });
     },
     hotListChange() {
-      console.log('打开', window.parent)
       if (window.parent.window.hotListShowChangeFu) {
         window.parent.window.hotListShowChangeFu()
       }

+ 11 - 2
scene/public/static/js/Hot.js

@@ -1212,8 +1212,15 @@ window.initHot = function(model){
                 var src = getLink(this.info.iframe[0]);
                 
                 if(this.info.linkType=="jumpLink"){
-                    var newPage = window.open(src, "_blank" ); 
-                    newPage.focus();  
+                    // var newPage = window.open(src, "_blank" ); 
+                    // newPage.focus();  
+                    let m = src.substring(src.indexOf("?")+3, src.indexOf("&"))
+                    let point = src.substring(src.indexOf("&"))
+                    // window.location.href = src
+                    
+                    if(window.parent && window.parent.window.changeUnitByHot){
+                        window.parent.window.changeUnitByHot(m,point)
+                    }
                     
                 }else if(this.info.linkType=="iframeDiv"){
                     
@@ -1273,6 +1280,7 @@ window.initHot = function(model){
                 if(window.parent && window.parent.handleShowFigure) {
                     window.parent.handleShowFigure(false)
                 }
+                window.openHotspotCloseBGM()
                 g_currentHot = this,
                 popup.style.display = "block",
                 popup.classList.add("wait");
@@ -1746,6 +1754,7 @@ window.initHot = function(model){
         if(window.parent&&window.parent.handleShowFigure){
             window.parent.handleShowFigure(true)
         }
+        window.openHotspotCloseBGM()
         g_currentHot = null;
         var hotPop = document.getElementById('popup'); 
             hotPop.style.display = "none";

+ 9 - 3
scene/public/static/js/main_2020_show.js

@@ -4855,7 +4855,9 @@ window.Modernizr = function(n, e, t) {
             n.prototype.playTour = function() {
                 // alert('开始导航')
                 // 触发形象talk状态
-                window.parent.window.handleRobot ? window.parent.window.handleRobot('talk'):'';
+                if(window.parent && window.parent.window.handleRobot){
+                    window.parent.window.handleRobot('talk')
+                }
                 if (!this.bounceable())
                     return this.tourIsPlaying ? void A.info("tour is already playing") 
                     : void (
@@ -4887,7 +4889,9 @@ window.Modernizr = function(n, e, t) {
             n.prototype.stopTour = function(isAutoStop) {//停止导览        isAutoStop 希望仅在飞完结束自动停止时的stopTour不停止tourSound, 这样才能完整播放tourSound.  不过似乎会在倒数第二个片段点击按钮停止导览时也视作自动结束的(执行this.interrupt() )。
                 // alert('停止导航')
                 // 回到idle状态
-                window.parent.window.handleRobot ? window.parent.window.handleRobot('greeting'):'';
+                if(window.parent && window.parent.window.handleRobot){
+                    window.parent.window.handleRobot('greeting')
+                }
                 SoundManager.pause('tour'), // 周恩光 自动导览暂停时同时停止语音
                 this.isInterrupted() || this.transitionStage === y.Moving && this.checkAndHandleWalkingtourInterruption(this.nextWarpStyle) || (this.tourIsPlaying && (this.player.zoomEnabled = this.wasZoomEnabled),
                 this.tourIsPlaying = !1, 
@@ -6294,7 +6298,9 @@ window.Modernizr = function(n, e, t) {
             function a() {
                 // window.parent.handleRobot('greeting'),
                 // alert('打开列表')
-                window.parent.window.handleTopRobot ? $("#drawer").hasClass("open") ? window.parent.window.handleTopRobot('bottom'): window.parent.window.handleTopRobot('top'):''
+                if(window.parent && window.parent.window.handleTopRobot){
+                    $("#drawer").hasClass("open") ? window.parent.window.handleTopRobot('bottom'): window.parent.window.handleTopRobot('top')
+                }
                 // $("#drawer").hasClass("open") ? alert('关闭列表'): alert('打开列表')
                 // window.parent.window.handleTopRobot('top')
                 // $("#drawer").hasClass("open") ? function(){window.parent && window.parent.window.handleTopRobot ? window.parent.window.handleTopRobot('bottom'):''}: function(){ window.parent && window.parent.window.handleTopRobot ? window.parent.window.handleTopRobot('top'):''}

+ 2 - 0
scene/public/static/js/manage.js

@@ -1958,6 +1958,8 @@ Manage.prototype.loadAudio = function() { //相关:g_tourAudio \  g_playAudio
  
 Manage.prototype.switchBgmState = function(state){//按钮的状态完全代表是否应该播放bgm,即使还没加载完
     this.bgmShouldPlay = state
+
+    window.bgmShouldPlay = state
     
     
     if(state){

BIN
scene/src/assets/img/icon-down.png


BIN
scene/src/assets/img/icon-up.png


+ 124 - 0
scene/src/components/info/index.vue

@@ -0,0 +1,124 @@
+<template>
+  <div class="info-box" v-if="title != '' && disc != ''">
+    <div class="title-box" @click="() => {
+      isShow = !isShow;
+    }
+      ">
+      <div class="detail">
+        <div class="scroll-wrap">
+          <div class="scroll-item">
+            {{ title }}
+          </div>
+        </div>
+      </div>
+      <img v-show="!isShow" src="@/assets/img/icon-down.png" alt="" />
+      <img v-show="isShow" src="@/assets/img/icon-up.png" alt="" />
+    </div>
+    <div class="disc-box" v-show="isShow" v-html="disc"></div>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  data() {
+    return {
+      title: "",
+      disc: "",
+      isShow: false,
+    };
+  },
+  computed: {},
+  watch: {},
+  methods: {},
+  created() { },
+  mounted() {
+    let timeA = -1;
+    timeA = window.setInterval(() => {
+      if (window.DATA) {
+        clearInterval(timeA);
+      }
+      this.title = window.DATA.name;
+      this.disc = window.DATA.summary;
+      document.title = window.DATA.name;
+    }, 100);
+  },
+  beforeCreate() { }, //生命周期 - 创建之前
+  beforeMount() { }, //生命周期 - 挂载之前
+  beforeUpdate() { }, //生命周期 - 更新之前
+  updated() { }, //生命周期 - 更新之后
+  beforeDestroy() { }, //生命周期 - 销毁之前
+  destroyed() { }, //生命周期 - 销毁完成
+  activated() { }, //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style lang="less" scoped>
+::-webkit-scrollbar {
+    display: none
+}
+
+.info-box {
+  position: absolute;
+  z-index: 10000;
+  height: auto;
+  top: 10px;
+  left: 50%;
+  transform: translateX(-50%);
+  color: #ffffff;
+  display: flex;
+  flex-direction: column;
+  // justify-content: center;
+  align-items: center;
+
+  .title-box {
+    display: flex;
+    min-width: 180px;
+    justify-content: center;
+    align-items: center;
+    background: rgba(0, 0, 0, 0.288);
+    background-size: 100% 100%;
+    font-size: 18px;
+    font-family: "AdobeHeitiStd";
+    cursor: pointer;
+    border-radius: 15px 15px;
+    padding: 10px;
+    
+
+    img {
+      width: 20px;
+      height: 20px;
+      margin-left: 5px;
+      // margin-top: 10px;
+    }
+  }
+
+  .disc-box {
+    min-width: 180px;
+    max-width: 25vw;
+    background: rgba(0, 0, 0, 0.582);
+    background-size: 100% 100%;
+    padding: 30px;
+    text-indent: 2em;
+    line-height: 25px;
+    letter-spacing: 2px;
+    margin-top: 10px;
+    border-radius: 15px;
+  }
+}
+
+@media screen and (max-width: 1000px) {
+  .info-box {
+    // height: 58px;
+    width: 300px;
+    min-width: 0px;
+
+
+    .disc-box {
+      width: 100%;
+      max-width: 90vw;
+      max-height: 80vh;
+      overflow: auto;
+    }
+  }
+}
+</style>

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

@@ -70,6 +70,7 @@
       <v-other />
 
       <!-- <welcome @close="hideWelcome" v-if="showWelcome" /> -->
+      <info />
 
       <div class="loading" v-if="0">
         <span>加载中...</span>
@@ -96,6 +97,7 @@ import vError from "@/views/gui/error";
 import vrCon from "@/views/gui/vrcon";
 import vOther from "@/views/gui/other";
 import welcome from "@/components/welcome";
+import info from "@/components/info";
 
 import { addVisitAPI } from "../utils/api";
 
@@ -113,7 +115,7 @@ export default {
     vError,
     vrCon,
     vOther,
-    welcome,
+    info
   },
 
   data() {

+ 24 - 5
scene/src/views/gui/menu.vue

@@ -75,8 +75,8 @@
               <img class="active icon icon-inside active" :src="require('@/assets/images/icon/floor_active.png')" />
               <div class="btmText">顶部俯视</div>
             </div>
-            <div class="toHomeBox" style="margin-right: '10px';float: left;">
-              <img style="display: block;" src="../../assets/img/game.png" @click="openGameBox()" alt="" />
+            <div class="toHomeBox" style="margin-right: '10px';float: left;" @click="openGameBox()">
+              <img style="display: block;" src="../../assets/img/game.png" alt="" />
               <div class="btmText">互动游戏</div>
             </div>
             <div id="volume" class="toHomeBox toHomeBox2" style="margin-right: '10px';float: left; ">
@@ -221,7 +221,8 @@ export default {
       isFull: false,
       isLike: false,
       isShowHotList: false,
-      screenWidth: 0
+      screenWidth: 0,
+      BGMOldState: false
     };
   },
   watch: {},
@@ -247,12 +248,31 @@ export default {
     timeA = window.setInterval(() => {
       if (window.hotData) {
         clearInterval(timeA);
-        window.parent.window.handleRobo ? window.parent.window.handleRobot('greeting'):'';
+        if (window.parent && window.parent.window.handleRobot) {
+          window.parent.window.handleRobot('greeting')
+        }
+        this.switchBGM(true)
       }
 
     }, 500);
 
+    // 热点打开时,背景音乐关闭
+    window.openHotspotCloseBGM = () => {
+      // 保存原来状态
+      this.BGMOldState = window.bgmShouldPlay
+      // 在播放,就关闭
+      if (window.bgmShouldPlay) {
+        this.switchBGM(false)
+      }
+    }
 
+    // 热点关闭时,背景音乐恢复状态
+    window.openHotspotCloseBGM = () => {
+      // 原本在播放,就恢复
+      if (this.BGMOldState) {
+        this.switchBGM(true)
+      }
+    }
   },
   methods: {
     // 打开游戏界面
@@ -287,7 +307,6 @@ export default {
       });
     },
     hotListChange() {
-      console.log('打开', window.parent)
       if (window.parent.window.hotListShowChangeFu) {
         window.parent.window.hotListShowChangeFu()
       }

+ 2 - 0
zhengquan/index.html

@@ -5,6 +5,8 @@
   <meta charset="UTF-8">
   <link rel="icon" href="/favicon.ico">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <meta name="apple-mobile-web-app-capable" content="yes">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
 
   <!-- 本地开发 -->
   <script src="/staticData/data.js"></script>

Разница между файлами не показана из-за своего большого размера
+ 1 - 0
zhengquan/public/scene/css/app.435ab0d9.css


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
zhengquan/public/scene/css/app.a996bc07.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 1
zhengquan/public/scene/hot/css/app.7c7a8fa0.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 9
zhengquan/public/scene/hot/css/chunk-vendors.ff3e1284.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 1
zhengquan/public/scene/hot/index.html


+ 0 - 2
zhengquan/public/scene/hot/js/about.168b35c2.js

@@ -1,2 +0,0 @@
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["about"],{f820:function(t,e,n){"use strict";n.r(e);var a=function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)},s=[function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"about"},[n("h1",[t._v("This is an about page")])])}],u=n("2877"),c={},i=Object(u["a"])(c,a,s,!1,null,null,null);e["default"]=i.exports}}]);
-//# sourceMappingURL=about.168b35c2.js.map

Разница между файлами не показана из-за своего большого размера
+ 0 - 1
zhengquan/public/scene/hot/js/about.168b35c2.js.map


Разница между файлами не показана из-за своего большого размера
+ 0 - 2
zhengquan/public/scene/hot/js/app.373e84cf.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 1
zhengquan/public/scene/hot/js/app.373e84cf.js.map


Разница между файлами не показана из-за своего большого размера
+ 0 - 34
zhengquan/public/scene/hot/js/chunk-vendors.e38b11cc.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 1
zhengquan/public/scene/hot/js/chunk-vendors.e38b11cc.js.map


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
zhengquan/public/scene/index.html


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


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


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


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
zhengquan/public/scene/js/chunk-vendors.649c8c8a.js


+ 11 - 2
zhengquan/public/scene/static/js/Hot.js

@@ -1212,8 +1212,15 @@ window.initHot = function(model){
                 var src = getLink(this.info.iframe[0]);
                 
                 if(this.info.linkType=="jumpLink"){
-                    var newPage = window.open(src, "_blank" ); 
-                    newPage.focus();  
+                    // var newPage = window.open(src, "_blank" ); 
+                    // newPage.focus();  
+                    let m = src.substring(src.indexOf("?")+3, src.indexOf("&"))
+                    let point = src.substring(src.indexOf("&"))
+                    // window.location.href = src
+                    
+                    if(window.parent && window.parent.window.changeUnitByHot){
+                        window.parent.window.changeUnitByHot(m,point)
+                    }
                     
                 }else if(this.info.linkType=="iframeDiv"){
                     
@@ -1273,6 +1280,7 @@ window.initHot = function(model){
                 if(window.parent && window.parent.handleShowFigure) {
                     window.parent.handleShowFigure(false)
                 }
+                window.openHotspotCloseBGM()
                 g_currentHot = this,
                 popup.style.display = "block",
                 popup.classList.add("wait");
@@ -1746,6 +1754,7 @@ window.initHot = function(model){
         if(window.parent&&window.parent.handleShowFigure){
             window.parent.handleShowFigure(true)
         }
+        window.openHotspotCloseBGM()
         g_currentHot = null;
         var hotPop = document.getElementById('popup'); 
             hotPop.style.display = "none";

+ 10 - 3
zhengquan/public/scene/static/js/main_2020_show.js

@@ -4855,7 +4855,9 @@ window.Modernizr = function(n, e, t) {
             n.prototype.playTour = function() {
                 // alert('开始导航')
                 // 触发形象talk状态
-                window.parent.window.handleRobot('talk');
+                if(window.parent && window.parent.window.handleRobot){
+                    window.parent.window.handleRobot('talk')
+                }
                 if (!this.bounceable())
                     return this.tourIsPlaying ? void A.info("tour is already playing") 
                     : void (
@@ -4887,7 +4889,9 @@ window.Modernizr = function(n, e, t) {
             n.prototype.stopTour = function(isAutoStop) {//停止导览        isAutoStop 希望仅在飞完结束自动停止时的stopTour不停止tourSound, 这样才能完整播放tourSound.  不过似乎会在倒数第二个片段点击按钮停止导览时也视作自动结束的(执行this.interrupt() )。
                 // alert('停止导航')
                 // 回到idle状态
-                window.parent.window.handleRobot('greeting');
+                if(window.parent && window.parent.window.handleRobot){
+                    window.parent.window.handleRobot('greeting')
+                }
                 SoundManager.pause('tour'), // 周恩光 自动导览暂停时同时停止语音
                 this.isInterrupted() || this.transitionStage === y.Moving && this.checkAndHandleWalkingtourInterruption(this.nextWarpStyle) || (this.tourIsPlaying && (this.player.zoomEnabled = this.wasZoomEnabled),
                 this.tourIsPlaying = !1, 
@@ -6294,7 +6298,10 @@ window.Modernizr = function(n, e, t) {
             function a() {
                 // window.parent.handleRobot('greeting'),
                 // alert('打开列表')
-                $("#drawer").hasClass("open") ? window.parent.window.handleTopRobot('bottom'): window.parent.window.handleTopRobot('top')
+                if(window.parent && window.parent.window.handleTopRobot){
+                    $("#drawer").hasClass("open") ? window.parent.window.handleTopRobot('bottom'): window.parent.window.handleTopRobot('top')
+                }
+                // $("#drawer").hasClass("open") ? alert('关闭列表'): alert('打开列表')
                 // window.parent.window.handleTopRobot('top')
                 // $("#drawer").hasClass("open") ? function(){window.parent && window.parent.window.handleTopRobot ? window.parent.window.handleTopRobot('bottom'):''}: function(){ window.parent && window.parent.window.handleTopRobot ? window.parent.window.handleTopRobot('top'):''}
                 c(),

+ 2 - 0
zhengquan/public/scene/static/js/manage.js

@@ -1958,6 +1958,8 @@ Manage.prototype.loadAudio = function() { //相关:g_tourAudio \  g_playAudio
  
 Manage.prototype.switchBgmState = function(state){//按钮的状态完全代表是否应该播放bgm,即使还没加载完
     this.bgmShouldPlay = state
+
+    window.bgmShouldPlay = state
     
     
     if(state){

BIN
zhengquan/public/staticData/animation/9/greeting.png


BIN
zhengquan/public/staticData/animation/9/idle.png


BIN
zhengquan/public/staticData/animation/9/talk.png


Разница между файлами не показана из-за своего большого размера
+ 28 - 6
zhengquan/public/staticData/data.js


BIN
zhengquan/public/staticData/game/mobile/1g.png


BIN
zhengquan/public/staticData/game/mobile/2g.png


BIN
zhengquan/public/staticData/game/mobile/3g.png


BIN
zhengquan/public/staticData/game/mobile/4g.png


BIN
zhengquan/public/staticData/game/mobile/5g.png


BIN
zhengquan/public/staticData/game/mobile/7g.png


BIN
zhengquan/public/staticData/game/pc/1.jpg


BIN
zhengquan/public/staticData/game/pc/1.png


BIN
zhengquan/public/staticData/game/pc/2.jpg


BIN
zhengquan/public/staticData/game/pc/2.png


BIN
zhengquan/public/staticData/game/pc/3.jpg


BIN
zhengquan/public/staticData/game/pc/3.png


BIN
zhengquan/public/staticData/game/pc/4.jpg


BIN
zhengquan/public/staticData/game/pc/4.png


BIN
zhengquan/public/staticData/game/pc/5.jpg


BIN
zhengquan/public/staticData/game/pc/5.png


BIN
zhengquan/public/staticData/game/pc/6.jpg


BIN
zhengquan/public/staticData/game/pc/6.png


BIN
zhengquan/public/staticData/game/pc/7.jpg


BIN
zhengquan/public/staticData/game/pc/7.png


+ 8 - 2
zhengquan/src/App.vue

@@ -9,6 +9,10 @@ onMounted(() => {
   // @ts-ignore
   store.dataAll = dataAll;
 
+  const dom: HTMLDivElement | null = document.querySelector("#app");
+  if (dom && document.documentElement.clientWidth < 480) {
+    dom.style.height = document.documentElement.clientHeight + "px";
+  }
   // 移动端
   window.addEventListener(
     "resize",
@@ -45,10 +49,12 @@ onMounted(() => {
 }
 
 @font-face {
-  font-family: 'AlibabaPuHuiTi2.0-75SemiBold';
-  src: url('./assets/fonts//AlibabaPuHuiTi2.0-75SemiBold.ttf');
+  font-family: 'SourceHanSerifCN-Heavy';
+  src: url('./assets/fonts/SourceHanSerifCN-Heavy.otf');
 }
 
+
+
 #app {
   width: 100%;
   height: 100%;

+ 0 - 0
zhengquan/src/assets/fonts/SourceHanSerifCN-Heavy.otf


Некоторые файлы не были показаны из-за большого количества измененных файлов