hmp hace 4 años
padre
commit
4055b49c5d

+ 6 - 4
src/page/index/index.vue

@@ -7,13 +7,14 @@
 
     <div class="avue-layout" style="background-color: #042352;">
       <!-- 左侧导航栏 -->
-      <div v-show="menuIndex != 0" class="animate__animated avue-left animate__faster"
-        :class="menuIndex == 0 ? 'animate__bounceOutLeft' : 'animate__bounceInLeft'">
+      <div v-show="menuIndex != 0" style="background-color: #062252;" class="animate__animated avue-left animate__faster"
+        :class="menuIndex == 0 ? 'animate__fadeOutLeftBig' : 'animate__fadeInLeftBig'">
         <sidebar />
       </div>
       <div class="avue-main" :style="menuIndex == 0 ?'left: 0;width: 100%;height: calc(100vh - 10rem);':''">
         <!-- 顶部标签卡 -->
-        <div v-show="menuIndex != 0">
+        <div v-show="menuIndex != 0" class="animate__animated animate__faster"
+          :class="menuIndex == 0 ? 'animate__fadeOutDownBig' : 'animate__fadeInDownBig'">
           <tags />
           <transition name="fade-scale">
             <search class="avue-view" v-show="isSearch"></search>
@@ -21,7 +22,8 @@
         </div>
 
         <!-- 主体视图层 -->
-        <div style="height:100%;overflow-y:auto;overflow-x:hidden;"
+        <div class="animate__animated animate__fadeInUpBig"
+          style="height:100%;overflow-y:auto;overflow-x:hidden;"
           :style="menuIndex == 0 ?'height: calc(100vh - 10rem);':''" id="avue-view" v-show="!isSearch">
           <keep-alive>
             <router-view class="avue-view" v-if="$route.meta.keepAlive" />

+ 2 - 1
src/page/index/top/index.vue

@@ -49,7 +49,7 @@
       <div style="margin-left: 20px;"></div>
       <el-dropdown>
         <span class="el-dropdown-link">
-          <i class="icon">{{userInfo.userName || 'admin'}}</i>
+          <i class="icon" style="cursor: pointer;">{{userInfo.userName || 'admin'}}</i>
           <i class="el-icon-arrow-down el-icon--right icon" style="font-size: 18px;"></i>
         </span>
         <el-dropdown-menu slot="dropdown">
@@ -169,6 +169,7 @@
           type: "warning"
         }).then(() => {
           this.$store.dispatch("LogOut").then(() => {
+			this.$store.commit("SET_MENU_INDEX",0);
             resetRouter();
             this.$router.push({
               path: "/login"

+ 1 - 1
src/page/index/top/top-menu.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <div class="tab-left">
-      <div @click="menuClick(item,index)" v-for="(item,index) in items" :key="index">
+      <div style="cursor: pointer;" @click="menuClick(item,index)" v-for="(item,index) in items" :key="index">
         <div :class="menuIndex == index?'selected animate__heartBeat':''" class="tabName animate__animated"
           style="margin-right: 1.875rem;">
           <span>{{generateTitle(item)}}</span>

+ 11 - 10
src/page/login/userlogin.vue

@@ -41,9 +41,9 @@
         </el-row>
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" size="small" @click.native.prevent="handleLogin" class="login-submit">
-          {{$t('login.submit')}}
-        </el-button>
+          <el-button type="primary" size="small" @click.native.prevent="handleLogin" id="submit" class="login-submit">
+            {{$t('login.submit')}}
+          </el-button>
       </el-form-item>
     </el-form>
   </div>
@@ -140,13 +140,14 @@
           (this.passwordType = "");
       },
       handleLogin() {
+        this.$animateCss('#submit','animate__flip')
         this.$refs.loginForm.validate(valid => {
           if (valid) {
-            const loading = this.$loading({
-              lock: true,
-              text: '登录中,请稍后。。。',
-              spinner: "el-icon-loading"
-            });
+            // const loading = this.$loading({
+            //   lock: true,
+            //   text: '登录中,请稍后。。。',
+            //   spinner: "el-icon-loading"
+            // });
             this.$store.dispatch("LoginByUsername", this.loginForm).then(() => {
               // this.$router.push({path: this.tagWel.value});
               getByTenantId(this.loginForm.tenantId).then(res => {
@@ -175,9 +176,9 @@
 
                 })
               });
-              loading.close();
+              // loading.close();
             }).catch(() => {
-              loading.close();
+              // loading.close();
               this.refreshCode();
             });
           }

+ 98 - 497
src/views/wel/index.vue

@@ -1,24 +1,9 @@
 <template>
-  <div class="full animate__animated animate__faster"  :class="menuIndex == 0 ? 'animate__bounceInLeft' : 'animate__bounceOutLeft'" style="overflow: hidden;" >
-    <!--  背景--3D场景   -->
-    <scene3-d ref="scene" style="z-index: 9;" :camera-option="cameraOptions" :controls-option="controlsOption"
-      @loadingFinish="initScene">
-    </scene3-d>
-    <!-- 数据面板  -->
-    <main-scene @openDialog="openDialog" @playVideo="playVideo" @showInfoBox="showInfoBox" ref="data-panel"
-      style="z-index: 9;"> </main-scene>
-
-    <!--  工具栏   -->
-    <tools-bar :option="toolsOption"></tools-bar>
-
-    <!-- 园区事件 -->
-    <mp-dialog ref="mpDialog" title="园区事件">
-      <div slot="detail" style="color: #FFFFFF;padding: 1.25rem;">
-        {{dialogDetail.detail}}
-      </div>
-    </mp-dialog>
-    <!-- 视频播放 -->
-    <devicePlayer ref="devicePlayer"></devicePlayer>
+  <div  class="full animate__animated animate__faster"
+    :class="menuIndex == 0 ? 'animate__fadeInLeftBig' : 'animate__fadeOutLeftBig'">
+    <basic-container style="margin-top: 10px;">
+      <avue-data-card :option="option"></avue-data-card>
+    </basic-container>
   </div>
 </template>
 
@@ -26,503 +11,119 @@
   import {
     mapGetters
   } from "vuex";
-  import devicePlayer from "@/components/scene/wvp/devicePlayer.vue";
-  import mpDialog from "../../components/mp-dialog.vue"
-  import TopBar from "../../components/3DScene/top-bar/top-bar";
-  import Scene3D from "../../components/3DScene/3DScene";
-  import MainScene from "../../components/scene/mainScene";
-  import ToolsBar from "../../components/3DScene/tools-bar/tools-bar";
-  import * as Three from "three";
-  import {
-    getBox1,
-    getCameraBox
-  } from "../../components/3DScene/infoBox";
-  import {
-    CSS2DObject
-  } from "three/examples/jsm/renderers/CSS2DRenderer";
-  import {
-    fullscreenToggel
-  } from "../../util/util";
   export default {
-    name: "index",
-    components: {
-      devicePlayer,
-      mpDialog,
-      MainScene,
-      Scene3D,
-      TopBar,
-      ToolsBar,
-    },
     computed: {
       ...mapGetters(["menuIndex"])
     },
     data() {
       return {
-        dialogDetail: {},
-
-        mesh: {},
-        searchText: "",
-        searchCameraType: "",
-        searchType: "building",
-        searchIndex: 0,
-        isReady: false,
-        handlePanelShow: false,
-        toolsPanelType: "building",
-        toolsOption: [{
-            icon: '/img/tools/361.png',
-            name: '旋转',
-            event: this.round
-          },
-          {
-            icon: '/img/tools/reset.png',
-            name: '复位',
-            event: this.reset
-          },
-          {
-            icon: '/img/tools/loudong.png',
-            name: '建筑信息',
-            event: () => {
-              this.showBox(this.buildingObj, "building")
-            }
-          },
-          {
-            icon: '/img/tools/video.png',
-            name: '摄像头',
-            event: () => {
-              this.showBox(this.cameraObj, "camera")
-            }
-          },
-          {
-            icon: '/img/tools/full.png',
-            name: '信息框',
-            event: () => {
-              this.$refs['data-panel'].infoBoxShow()
-            }
-          },
-        ],
-        finishNum: 0,
-        loadingSchedule: 0,
-        buildingsRes: [],
-        cameraRes: [],
-        objs: [],
-        gltf: [
-          '/gltf/7_8/20H.gltf',
-          '/gltf/5H/5H.gltf',
-          '/gltf/3H/3H.gltf',
-          '/gltf/7H/7H.gltf',
-          '/gltf/13H/13H.gltf',
-          '/gltf/14H/14H.gltf',
-          '/gltf/17H/17H.gltf',
-          '/gltf/1H/1H.gltf',
-          '/gltf/DX2/DX2.gltf',
-          '/gltf/TiKuai/TiKuai.gltf',
-          '/gltf/SKY/Sky.gltf',
-          '/gltf/Tree_Car/Tree_Car.gltf',
-        ],
-        controlsOption: {
-          minDistance: 100,
-          maxDistance: 500,
-          autoRotate: false,
-          autoRotateSpeed: 1,
-          keyPanSpeed: 3,
-          target: new Three.Vector3(0, 0, 0),
-          enableDamping: true,
-        },
-        cameraOptions: {
-          position: [5000, 5000, 1000],
-          near: 0.01,
-          far: 50000,
-          lookAt: [1300, 0, 1300],
+        option: {
+          span: 8,
+          data: [{
+              name: '大屏设计器',
+              src: './test/3.png',
+              text: '自动生成大屏数据面板',
+              href: 'https://data.avuejs.com/build/1427195433161928705',
+              target: '_blank'
+            },
+            {
+              name: '3D场景设计器',
+              src: './test/1.png',
+              text: '构建自己的3D可视化场景',
+              href: 'http://8.129.99.119/editor/editor/',
+              target: '_blank'
+            },
+            {
+              name: '信阳榕基软件园',
+              src: './test/2.png',
+              text: '信阳软件园区',
+              href: 'http://192.168.1.69:1888/',
+              target: '_blank'
+            },
+            // {
+            //   name: '城市指挥中心',
+            //   src: './test/5.png',
+            //   text: '城市指挥中心',
+            //   href:'http://36.103.227.152:1777',
+            //   target:'_blank'
+            // },
+            // {
+            //   name: '城市网格管理',
+            //   src: './test/4.png',
+            //   text: '城市网格管理',
+            //   href:'http://36.103.227.152:1666',
+            //   target:'_blank'
+            // },
+            // {
+            //   name: '宁夏银川市望远工业园区德锐斯创业园',
+            //   src: './test/6.png',
+            //   text: '宁夏银川市望远工业园区德锐斯创业园',
+            //   href:'http://139.9.103.171:1999/#/wel/index21',
+            //   target:'_blank'
+            // },
+            // {
+            //   name: '宁夏数字社区',
+            //   src: './test/7.png',
+            //   text: '宁夏数字社区',
+            //   href:'http://139.9.103.171:1888/#/wel/smartCommunity',
+            //   target:'_blank'
+            // },
+            // {
+            //   name: '消防态势--设备态势',
+            //   src: './test/8.png',
+            //   text: '消防态势--设备态势',
+            //   href:'http://192.168.1.69:1889/#/wel/fireDevices',
+            //   target:'_blank'
+            // },
+            // {
+            //   name: '养老服务',
+            //   src: './test/9.png',
+            //   text: '养老服务',
+            //   href:'http://192.168.1.69:1889/#/wel/smartPension',
+            //   target:'_blank'
+            // },
+            // {
+            //   name: '公安服务',
+            //   src: './test/10.png',
+            //   text: '公安服务',
+            //   href:'http://192.168.1.69:1889/#/wel/smartPolice',
+            //   target:'_blank'
+            // },
+            // {
+            //   name: '运营服务',
+            //   src: './test/11.png',
+            //   text: '运营服务',
+            //   href:'http://192.168.1.69:1889/#/wel/operatePlatform',
+            //   target:'_blank'
+            // },
+          ]
         },
-        obj: [{
-            mtlUrl: '/obj/CAR.mtl',
-            objUrl: '/obj/CAR.obj'
-          },
-          {
-            mtlUrl: '/obj/DX.mtl',
-            objUrl: '/obj/DX.obj'
-          },
-          {
-            mtlUrl: '/test/Tree.mtl',
-            objUrl: '/test/Tree.obj'
-          },
-          {
-            mtlUrl: '/obj/TiKuai.mtl',
-            objUrl: '/obj/TiKuai.obj'
-          },
-          {
-            mtlUrl: '/obj/XiaoPin.mtl',
-            objUrl: '/obj/XiaoPin.obj'
-          },
-          {
-            mtlUrl: '/test/Building_A.mtl',
-            objUrl: '/test/Building_A.obj'
-          },
-          {
-            mtlUrl: '/test/BuildingB.mtl',
-            objUrl: '/test/BuildingB.obj'
-          },
-          {
-            mtlUrl: '/test/BuildingC.mtl',
-            objUrl: '/test/BuildingC.obj'
-          },
-          {
-            mtlUrl: '/obj/building/3H.mtl',
-            objUrl: '/obj/building/3H.obj'
-          },
-          {
-            mtlUrl: '/obj/building/5H.mtl',
-            objUrl: '/obj/building/5H.obj'
-          },
-          {
-            mtlUrl: '/obj/building/13H.mtl',
-            objUrl: '/obj/building/13H.obj'
-          },
-          {
-            mtlUrl: '/obj/building/14H.mtl',
-            objUrl: '/obj/building/14.obj'
-          },
-          {
-            mtlUrl: '/obj/building/17.mtl',
-            objUrl: '/obj/building/17.obj'
-          },
-          {
-            mtlUrl: '/obj/building/20.mtl',
-            objUrl: '/obj/building/20.obj'
-          },
-        ],
-        buildings: [{
-            text: '软件园主楼',
-            position: [100, 115, 100]
-          },
-          {
-            text: '软件园副楼',
-            position: [170, 50, 50]
-          },
-          {
-            text: '软件园A栋',
-            position: [0, 105, 110]
-          },
-          {
-            text: '软件园B栋',
-            position: [-70, 105, 110]
-          },
-          {
-            text: '软件园C栋',
-            position: [-120, 105, 55]
-          },
-          {
-            text: '软件园D栋',
-            position: [-120, 105, -20]
-          },
-        ],
-        cameraList: [{
-            number: 'HK-nm51658186',
-            position: [50, 0, 70],
-            src: '/video/video2.mp4',
-            name: "设备2",
-            type: "枪机"
-          },
-          {
-            number: 'HK-nm51658186',
-            position: [-100, 0, 100],
-            src: '/video/video3.mp4',
-            name: "设备3",
-            type: "枪机"
-          },
-          {
-            number: 'HK-nm51658186',
-            position: [100, 0, 20],
-            src: '/video/video4.mp4',
-            name: "设备4",
-            type: "枪机"
-          },
-          {
-            number: 'HK-nm51658186',
-            position: [200, 0, 50],
-            src: '/video/video4.mp4',
-            name: "设备4",
-            type: "球机"
-          },
-          {
-            number: 'HK-nm51658186',
-            position: [75, 0, 10],
-            src: '/video/video4.mp4',
-            name: "设备4",
-            type: "球机"
-          },
-        ],
-        cameraObj: {},
-        buildingObj: {},
-      }
-    },
-    provide() {
-      return {
-        "index": this
-      }
-    },
-    mounted() {
-      this.buildingsRes = this.buildings;
-      this.cameraRes = this.cameraList;
-    },
-    watch: {
-      searchCameraType() {
-        this.cameraRes = this.searchCameraType == "全部" ? this.cameraList : this.cameraList.filter(item => item.type ==
-          this.searchCameraType)
       }
     },
     methods: {
-      showInfoBox() {
-        this.toolsOption.forEach(item => {
-          if (item.name == '信息框') {
-            if (item.icon == '/img/tools/full.png') {
-              item.icon = '/img/tools/full-out.png'
-            } else {
-              item.icon = '/img/tools/full.png'
-            }
-            console.log(item, "123");
-            this.$forceUpdate()
-          }
-        })
-      },
-      openDialog(item) {
-        this.dialogDetail = item
-        this.$refs.mpDialog.open(item.time)
-      },
-      playVideo(item) {
 
-        const {
-          deviceId
-        } = item
-        const {
-          channelId
-        } = item
-        const {
-          info
-        } = item
-        this.$refs.devicePlayer.openDialog("media", deviceId, channelId, info);
-      },
-      reset() {
-        this.$refs['scene'].camera.position.z = this.cameraOptions.position[0];
-        this.$refs['scene'].camera.position.x = this.cameraOptions.position[1];
-        this.$refs['scene'].camera.position.y = this.cameraOptions.position[2];
-        this.$refs['scene'].camera.lookAt(...this.cameraOptions.lookAt);
-        this.$refs['scene'].controls.target.set(0, 0, 0);
-        this.$refs['data-panel'].infoBoxShow(true);
-      },
-      handleNext(num, list) {
-        this.searchIndex = (this.searchIndex + num) % list.children.length;
-        if (this.searchIndex < 0) {
-          this.searchIndex = list.children.length + this.searchIndex;
-        }
-        list.children.forEach((item, index) => {
-          console.log(this.searchIndex, index);
-          if (index == this.searchIndex) {
-            this.$refs['scene'].flyto(item.position);
-            item.visible = true;
-          } else {
-            item.visible = false;
-          }
-        })
-      },
-      async initScene() {
-        this.$refs['scene'].scene.fog = new Three.Fog(this.$refs['scene'].scene.background, 1, 5000);
-        //添加天空盒
-        // this.$refs['scene'].addSkyBox(
-        //   [
-        //     '/sky/HDR_r.jpg',
-        //     '/sky/HDR_l.jpg',
-        //     '/sky/HDR_u.jpg',
-        //     '/sky/HDR_d.jpg',
-        //     '/sky/HDR_f.jpg',
-        //     '/sky/HDR_b.jpg',
-        //   ]
-        // );
-        //  添加模型
-        // await this.addObj();
-        await this.addGltf();
-        this.addDirectionalLight();
-        this.initBoxInfo();
-        this.isReady = true;
-        //自旋转
-        // this.$refs['scene'].controls.autoRotate = true;
-
-      },
-      toBuilding(objIndex, list) {
-        list.children.forEach((item, index) => {
-          if (objIndex == index) {
-            this.searchIndex = index;
-            this.$refs['scene'].flyto(item.position);
-            item.visible = true;
-          } else {
-            item.visible = false;
-          }
-        })
-      },
-      quitToolPanel() {
-        this.handlePanelShow = false;
-        this.buildingObj.children.forEach(item => {
-          item.visible = false;
-        })
-        this.cameraObj.children.forEach(item => {
-          item.visible = false;
-        })
-        this.reset();
-      },
-      async addGltf() {
-        this.gltf.forEach(item => {
-          this.$refs['scene'].addGltf(item,
-            (gltf) => {
-              this.$refs['scene'].scene.add(gltf.scene)
-              gltf.scene.traverse(function(child) {
-                child.castShadow = true;
-                child.receiveShadow = true;
-                if (child.isMesh) {
-                  console.log(child, 546546);
-                  child.material.color = new Three.Color("rgb(200,200,200)");
-                  child.material.side = Three.DoubleSide;
-                  child.material.emissive = child.material.color;
-                  child.material.emissiveMap = child.material.map;
-
-                  if (child.material.name == 'JZ_LanGan_GeZi' || child.material.name == 'JZ_14_LanGan' ||
-                    child.name.indexOf("Tree") > -1) {
-                    console.log(child.name, 456789)
-                    child.material.transparent = true;
-                  }
-                }
-              });
-              this.finishNum++;
-              this.loadingSchedule = ((this.finishNum * 100) / (this.gltf.length * 100)) * 100
-            },
-            (xhr) => {
-              if (xhr.total == xhr.loaded) {
-                // this.finishNum++;
-              }
-            });
-        })
-
-      },
-      initBoxInfo() {
-        this.buildingObj = new Three.Object3D();
-        this.buildings.forEach(item => {
-          let element = getBox1(item.text, this);
-          let label = new CSS2DObject(element);
-          label.position.x = item.position[0];
-          label.position.y = item.position[1];
-          label.position.z = item.position[2];
-          label.visible = false;
-          this.buildingObj.add(label);
-        })
-        this.$refs['scene'].scene.add(this.buildingObj);
-
-        this.cameraObj = new Three.Object3D();
-        this.cameraList.forEach(item => {
-          let element = getCameraBox(item, this);
-          let label = new CSS2DObject(element);
-          label.position.x = item.position[0];
-          label.position.y = item.position[1];
-          label.position.z = item.position[2];
-          label.visible = false;
-          this.cameraObj.add(label);
-        })
-        this.$refs['scene'].scene.add(this.cameraObj);
-
-      },
-      //添加平行光
-      addDirectionalLight() {
-        //添加光源
-        let dirLight = new Three.DirectionalLight("#bebebe", 1)
-        dirLight.position.set(1, 1, 1);
-        dirLight.shadow.mapSize.width = 512; // default
-        dirLight.shadow.mapSize.height = 512; // default
-        dirLight.shadow.camera.near = 1; // default
-        dirLight.shadow.camera.far = 100;
-        dirLight.castShadow = true;
-        this.$refs['scene'].scene.add(dirLight);
-      },
-      showBox(list, type) {
-        this.$refs['scene'].controls.autoRotate = false;
-        this.toolsPanelType = type;
-        this.handlePanelShow = true;
-        this.searchIndex = 0;
-        if (list.children.length > 0) {
-          list.children[0].visible = true;
-          this.$refs['data-panel'].infoBoxShow(false)
-          this.$refs['scene'].flyto(list.children[0].position)
-        }
-
-      },
-      showCamera() {
-        const list = this.cameraObj;
-        list.children.forEach((item, index) => {
-          item.visible = !item.visible;
-        })
-      },
-      handleFull() {
-        fullscreenToggel();
-      },
-      round() {
-        this.$refs['scene'].controls.autoRotate = !this.$refs['scene'].controls.autoRotate;
-      },
-      handleSearch() {
-        this.buildingsRes = this.buildings.filter(item => item.text.indexOf(this.searchText) > -1)
-      },
     }
   }
 </script>
 
-<style scoped>
-  .handle-panel-1 {
-    width: 20%;
-    height: 430px;
-    /* background: rgba(230, 160, 9, 0.5); */
-    position: absolute;
-    top: 200px;
-    left: 3%;
-  }
 
-  .handle-panel-2 {
-    width: 20%;
-    height: 510px;
-    /* background: rgba(230, 160, 9, 0.5); */
-    position: absolute;
-    top: 200px;
-    left: 3%;
-  }
 
-  .search-body {
-    overflow-y: scroll;
-    width: 100%;
+<style scoped lang="scss">
+  /deep/ .data-card .item {
+    position: relative;
+    margin: 0 auto 50px;
+    width: 500px;
     height: 300px;
-  }
-
-  .search-footer {
-    width: 100%;
-    height: 60px;
-    background: rgba(0, 0, 0, 0.5);
-    color: whitesmoke;
-    font-size: 18px;
-  }
-
-  .search-item {
-    width: 95%;
-    margin: auto;
-    height: 45px;
-    border-bottom: 1px solid #525252;
-  }
-
-  .click:hover {
-    cursor: pointer;
-    transform: translate(1px, 1px);
-  }
+    overflow: hidden;
+    /* border-radius: 5px;
+    border-color: transparent; */
+    /* border-width: 1px;
+    border-style: solid; */
+    /* box-shadow: 2px 2px 2px #30313B; */
 
-  .click:active {
-    cursor: pointer;
-    transform: translate(2px, 2px);
   }
 
-  .building-click:hover {
-    cursor: pointer;
-    text-shadow: 2px 2px 2px #ccffb4;
+  /deep/ .el-card {
+    border: 1px solid transparent;
   }
 </style>

+ 528 - 0
src/views/wel/index1.vue

@@ -0,0 +1,528 @@
+<template>
+  <div class="full animate__animated animate__faster" v-show="menuIndex == 0" :class="menuIndex == 0 ? 'animate__fadeInUpBig' : 'animate__fadeOutUpBig'" style="overflow: hidden;" >
+    <!--  背景--3D场景   -->
+    <scene3-d ref="scene" style="z-index: 9;" :camera-option="cameraOptions" :controls-option="controlsOption"
+      @loadingFinish="initScene">
+    </scene3-d>
+    <!-- 数据面板  -->
+    <main-scene @openDialog="openDialog" @playVideo="playVideo" @showInfoBox="showInfoBox" ref="data-panel"
+      style="z-index: 9;"> </main-scene>
+
+    <!--  工具栏   -->
+    <tools-bar :option="toolsOption"></tools-bar>
+
+    <!-- 园区事件 -->
+    <mp-dialog ref="mpDialog" title="园区事件">
+      <div slot="detail" style="color: #FFFFFF;padding: 1.25rem;">
+        {{dialogDetail.detail}}
+      </div>
+    </mp-dialog>
+    <!-- 视频播放 -->
+    <devicePlayer ref="devicePlayer"></devicePlayer>
+  </div>
+</template>
+
+<script>
+  import {
+    mapGetters
+  } from "vuex";
+  import devicePlayer from "@/components/scene/wvp/devicePlayer.vue";
+  import mpDialog from "../../components/mp-dialog.vue"
+  import TopBar from "../../components/3DScene/top-bar/top-bar";
+  import Scene3D from "../../components/3DScene/3DScene";
+  import MainScene from "../../components/scene/mainScene";
+  import ToolsBar from "../../components/3DScene/tools-bar/tools-bar";
+  import * as Three from "three";
+  import {
+    getBox1,
+    getCameraBox
+  } from "../../components/3DScene/infoBox";
+  import {
+    CSS2DObject
+  } from "three/examples/jsm/renderers/CSS2DRenderer";
+  import {
+    fullscreenToggel
+  } from "../../util/util";
+  export default {
+    name: "index",
+    components: {
+      devicePlayer,
+      mpDialog,
+      MainScene,
+      Scene3D,
+      TopBar,
+      ToolsBar,
+    },
+    computed: {
+      ...mapGetters(["menuIndex"])
+    },
+    data() {
+      return {
+        dialogDetail: {},
+
+        mesh: {},
+        searchText: "",
+        searchCameraType: "",
+        searchType: "building",
+        searchIndex: 0,
+        isReady: false,
+        handlePanelShow: false,
+        toolsPanelType: "building",
+        toolsOption: [{
+            icon: '/img/tools/361.png',
+            name: '旋转',
+            event: this.round
+          },
+          {
+            icon: '/img/tools/reset.png',
+            name: '复位',
+            event: this.reset
+          },
+          {
+            icon: '/img/tools/loudong.png',
+            name: '建筑信息',
+            event: () => {
+              this.showBox(this.buildingObj, "building")
+            }
+          },
+          {
+            icon: '/img/tools/video.png',
+            name: '摄像头',
+            event: () => {
+              this.showBox(this.cameraObj, "camera")
+            }
+          },
+          {
+            icon: '/img/tools/full.png',
+            name: '信息框',
+            event: () => {
+              this.$refs['data-panel'].infoBoxShow()
+            }
+          },
+        ],
+        finishNum: 0,
+        loadingSchedule: 0,
+        buildingsRes: [],
+        cameraRes: [],
+        objs: [],
+        gltf: [
+          '/gltf/7_8/20H.gltf',
+          '/gltf/5H/5H.gltf',
+          '/gltf/3H/3H.gltf',
+          '/gltf/7H/7H.gltf',
+          '/gltf/13H/13H.gltf',
+          '/gltf/14H/14H.gltf',
+          '/gltf/17H/17H.gltf',
+          '/gltf/1H/1H.gltf',
+          '/gltf/DX2/DX2.gltf',
+          '/gltf/TiKuai/TiKuai.gltf',
+          '/gltf/SKY/Sky.gltf',
+          '/gltf/Tree_Car/Tree_Car.gltf',
+        ],
+        controlsOption: {
+          minDistance: 100,
+          maxDistance: 500,
+          autoRotate: false,
+          autoRotateSpeed: 1,
+          keyPanSpeed: 3,
+          target: new Three.Vector3(0, 0, 0),
+          enableDamping: true,
+        },
+        cameraOptions: {
+          position: [5000, 5000, 1000],
+          near: 0.01,
+          far: 50000,
+          lookAt: [1300, 0, 1300],
+        },
+        obj: [{
+            mtlUrl: '/obj/CAR.mtl',
+            objUrl: '/obj/CAR.obj'
+          },
+          {
+            mtlUrl: '/obj/DX.mtl',
+            objUrl: '/obj/DX.obj'
+          },
+          {
+            mtlUrl: '/test/Tree.mtl',
+            objUrl: '/test/Tree.obj'
+          },
+          {
+            mtlUrl: '/obj/TiKuai.mtl',
+            objUrl: '/obj/TiKuai.obj'
+          },
+          {
+            mtlUrl: '/obj/XiaoPin.mtl',
+            objUrl: '/obj/XiaoPin.obj'
+          },
+          {
+            mtlUrl: '/test/Building_A.mtl',
+            objUrl: '/test/Building_A.obj'
+          },
+          {
+            mtlUrl: '/test/BuildingB.mtl',
+            objUrl: '/test/BuildingB.obj'
+          },
+          {
+            mtlUrl: '/test/BuildingC.mtl',
+            objUrl: '/test/BuildingC.obj'
+          },
+          {
+            mtlUrl: '/obj/building/3H.mtl',
+            objUrl: '/obj/building/3H.obj'
+          },
+          {
+            mtlUrl: '/obj/building/5H.mtl',
+            objUrl: '/obj/building/5H.obj'
+          },
+          {
+            mtlUrl: '/obj/building/13H.mtl',
+            objUrl: '/obj/building/13H.obj'
+          },
+          {
+            mtlUrl: '/obj/building/14H.mtl',
+            objUrl: '/obj/building/14.obj'
+          },
+          {
+            mtlUrl: '/obj/building/17.mtl',
+            objUrl: '/obj/building/17.obj'
+          },
+          {
+            mtlUrl: '/obj/building/20.mtl',
+            objUrl: '/obj/building/20.obj'
+          },
+        ],
+        buildings: [{
+            text: '软件园主楼',
+            position: [100, 115, 100]
+          },
+          {
+            text: '软件园副楼',
+            position: [170, 50, 50]
+          },
+          {
+            text: '软件园A栋',
+            position: [0, 105, 110]
+          },
+          {
+            text: '软件园B栋',
+            position: [-70, 105, 110]
+          },
+          {
+            text: '软件园C栋',
+            position: [-120, 105, 55]
+          },
+          {
+            text: '软件园D栋',
+            position: [-120, 105, -20]
+          },
+        ],
+        cameraList: [{
+            number: 'HK-nm51658186',
+            position: [50, 0, 70],
+            src: '/video/video2.mp4',
+            name: "设备2",
+            type: "枪机"
+          },
+          {
+            number: 'HK-nm51658186',
+            position: [-100, 0, 100],
+            src: '/video/video3.mp4',
+            name: "设备3",
+            type: "枪机"
+          },
+          {
+            number: 'HK-nm51658186',
+            position: [100, 0, 20],
+            src: '/video/video4.mp4',
+            name: "设备4",
+            type: "枪机"
+          },
+          {
+            number: 'HK-nm51658186',
+            position: [200, 0, 50],
+            src: '/video/video4.mp4',
+            name: "设备4",
+            type: "球机"
+          },
+          {
+            number: 'HK-nm51658186',
+            position: [75, 0, 10],
+            src: '/video/video4.mp4',
+            name: "设备4",
+            type: "球机"
+          },
+        ],
+        cameraObj: {},
+        buildingObj: {},
+      }
+    },
+    provide() {
+      return {
+        "index": this
+      }
+    },
+    mounted() {
+      this.buildingsRes = this.buildings;
+      this.cameraRes = this.cameraList;
+    },
+    watch: {
+      searchCameraType() {
+        this.cameraRes = this.searchCameraType == "全部" ? this.cameraList : this.cameraList.filter(item => item.type ==
+          this.searchCameraType)
+      }
+    },
+    methods: {
+      showInfoBox() {
+        this.toolsOption.forEach(item => {
+          if (item.name == '信息框') {
+            if (item.icon == '/img/tools/full.png') {
+              item.icon = '/img/tools/full-out.png'
+            } else {
+              item.icon = '/img/tools/full.png'
+            }
+            console.log(item, "123");
+            this.$forceUpdate()
+          }
+        })
+      },
+      openDialog(item) {
+        this.dialogDetail = item
+        this.$refs.mpDialog.open(item.time)
+      },
+      playVideo(item) {
+
+        const {
+          deviceId
+        } = item
+        const {
+          channelId
+        } = item
+        const {
+          info
+        } = item
+        this.$refs.devicePlayer.openDialog("media", deviceId, channelId, info);
+      },
+      reset() {
+        this.$refs['scene'].camera.position.z = this.cameraOptions.position[0];
+        this.$refs['scene'].camera.position.x = this.cameraOptions.position[1];
+        this.$refs['scene'].camera.position.y = this.cameraOptions.position[2];
+        this.$refs['scene'].camera.lookAt(...this.cameraOptions.lookAt);
+        this.$refs['scene'].controls.target.set(0, 0, 0);
+        this.$refs['data-panel'].infoBoxShow(true);
+      },
+      handleNext(num, list) {
+        this.searchIndex = (this.searchIndex + num) % list.children.length;
+        if (this.searchIndex < 0) {
+          this.searchIndex = list.children.length + this.searchIndex;
+        }
+        list.children.forEach((item, index) => {
+          console.log(this.searchIndex, index);
+          if (index == this.searchIndex) {
+            this.$refs['scene'].flyto(item.position);
+            item.visible = true;
+          } else {
+            item.visible = false;
+          }
+        })
+      },
+      async initScene() {
+        this.$refs['scene'].scene.fog = new Three.Fog(this.$refs['scene'].scene.background, 1, 5000);
+        //添加天空盒
+        // this.$refs['scene'].addSkyBox(
+        //   [
+        //     '/sky/HDR_r.jpg',
+        //     '/sky/HDR_l.jpg',
+        //     '/sky/HDR_u.jpg',
+        //     '/sky/HDR_d.jpg',
+        //     '/sky/HDR_f.jpg',
+        //     '/sky/HDR_b.jpg',
+        //   ]
+        // );
+        //  添加模型
+        // await this.addObj();
+        await this.addGltf();
+        this.addDirectionalLight();
+        this.initBoxInfo();
+        this.isReady = true;
+        //自旋转
+        // this.$refs['scene'].controls.autoRotate = true;
+
+      },
+      toBuilding(objIndex, list) {
+        list.children.forEach((item, index) => {
+          if (objIndex == index) {
+            this.searchIndex = index;
+            this.$refs['scene'].flyto(item.position);
+            item.visible = true;
+          } else {
+            item.visible = false;
+          }
+        })
+      },
+      quitToolPanel() {
+        this.handlePanelShow = false;
+        this.buildingObj.children.forEach(item => {
+          item.visible = false;
+        })
+        this.cameraObj.children.forEach(item => {
+          item.visible = false;
+        })
+        this.reset();
+      },
+      async addGltf() {
+        this.gltf.forEach(item => {
+          this.$refs['scene'].addGltf(item,
+            (gltf) => {
+              this.$refs['scene'].scene.add(gltf.scene)
+              gltf.scene.traverse(function(child) {
+                child.castShadow = true;
+                child.receiveShadow = true;
+                if (child.isMesh) {
+                  console.log(child, 546546);
+                  child.material.color = new Three.Color("rgb(200,200,200)");
+                  child.material.side = Three.DoubleSide;
+                  child.material.emissive = child.material.color;
+                  child.material.emissiveMap = child.material.map;
+
+                  if (child.material.name == 'JZ_LanGan_GeZi' || child.material.name == 'JZ_14_LanGan' ||
+                    child.name.indexOf("Tree") > -1) {
+                    console.log(child.name, 456789)
+                    child.material.transparent = true;
+                  }
+                }
+              });
+              this.finishNum++;
+              this.loadingSchedule = ((this.finishNum * 100) / (this.gltf.length * 100)) * 100
+            },
+            (xhr) => {
+              if (xhr.total == xhr.loaded) {
+                // this.finishNum++;
+              }
+            });
+        })
+
+      },
+      initBoxInfo() {
+        this.buildingObj = new Three.Object3D();
+        this.buildings.forEach(item => {
+          let element = getBox1(item.text, this);
+          let label = new CSS2DObject(element);
+          label.position.x = item.position[0];
+          label.position.y = item.position[1];
+          label.position.z = item.position[2];
+          label.visible = false;
+          this.buildingObj.add(label);
+        })
+        this.$refs['scene'].scene.add(this.buildingObj);
+
+        this.cameraObj = new Three.Object3D();
+        this.cameraList.forEach(item => {
+          let element = getCameraBox(item, this);
+          let label = new CSS2DObject(element);
+          label.position.x = item.position[0];
+          label.position.y = item.position[1];
+          label.position.z = item.position[2];
+          label.visible = false;
+          this.cameraObj.add(label);
+        })
+        this.$refs['scene'].scene.add(this.cameraObj);
+
+      },
+      //添加平行光
+      addDirectionalLight() {
+        //添加光源
+        let dirLight = new Three.DirectionalLight("#bebebe", 1)
+        dirLight.position.set(1, 1, 1);
+        dirLight.shadow.mapSize.width = 512; // default
+        dirLight.shadow.mapSize.height = 512; // default
+        dirLight.shadow.camera.near = 1; // default
+        dirLight.shadow.camera.far = 100;
+        dirLight.castShadow = true;
+        this.$refs['scene'].scene.add(dirLight);
+      },
+      showBox(list, type) {
+        this.$refs['scene'].controls.autoRotate = false;
+        this.toolsPanelType = type;
+        this.handlePanelShow = true;
+        this.searchIndex = 0;
+        if (list.children.length > 0) {
+          list.children[0].visible = true;
+          this.$refs['data-panel'].infoBoxShow(false)
+          this.$refs['scene'].flyto(list.children[0].position)
+        }
+
+      },
+      showCamera() {
+        const list = this.cameraObj;
+        list.children.forEach((item, index) => {
+          item.visible = !item.visible;
+        })
+      },
+      handleFull() {
+        fullscreenToggel();
+      },
+      round() {
+        this.$refs['scene'].controls.autoRotate = !this.$refs['scene'].controls.autoRotate;
+      },
+      handleSearch() {
+        this.buildingsRes = this.buildings.filter(item => item.text.indexOf(this.searchText) > -1)
+      },
+    }
+  }
+</script>
+
+<style scoped>
+  .handle-panel-1 {
+    width: 20%;
+    height: 430px;
+    /* background: rgba(230, 160, 9, 0.5); */
+    position: absolute;
+    top: 200px;
+    left: 3%;
+  }
+
+  .handle-panel-2 {
+    width: 20%;
+    height: 510px;
+    /* background: rgba(230, 160, 9, 0.5); */
+    position: absolute;
+    top: 200px;
+    left: 3%;
+  }
+
+  .search-body {
+    overflow-y: scroll;
+    width: 100%;
+    height: 300px;
+  }
+
+  .search-footer {
+    width: 100%;
+    height: 60px;
+    background: rgba(0, 0, 0, 0.5);
+    color: whitesmoke;
+    font-size: 18px;
+  }
+
+  .search-item {
+    width: 95%;
+    margin: auto;
+    height: 45px;
+    border-bottom: 1px solid #525252;
+  }
+
+  .click:hover {
+    cursor: pointer;
+    transform: translate(1px, 1px);
+  }
+
+  .click:active {
+    cursor: pointer;
+    transform: translate(2px, 2px);
+  }
+
+  .building-click:hover {
+    cursor: pointer;
+    text-shadow: 2px 2px 2px #ccffb4;
+  }
+</style>