Newer
Older
qd_cnooc_front / src / views / overview / overviewSimple.vue
[wangxitong] on 15 Apr 2022 35 KB 总览新模型+模糊查询
<!--suppress ALL -->
<template>
  <div style="overflow-y: hidden">
    <!--筛选条件-->
    <div class="map-search-div">
      <el-form ref="selectForm" :inline="true" :model="listQuery" class="form-container">
        <el-row>
          <el-form-item>
            <!--水表检查井编号/地址-->
            <el-input v-model.trim="listQuery.keywords" placeholder="井编号/设备编号" clearable size="small"/>
          </el-form-item>
          <!--<el-form-item>-->
            <!--<el-select v-model="listQuery.wellType" placeholder="选择井类型" @change="changetype" clearable size="small">-->
              <!--<el-option-->
                <!--v-for="item in wellTypeList"-->
                <!--:key="'welltype_'+item.value"-->
                <!--:label="item.name"-->
                <!--:value="item.value"/>-->
            <!--</el-select>-->
          <!--</el-form-item>-->

          <el-button class="filter-item" type="primary" icon="el-icon-search" @click="getWellList" size="small" style="margin-top: 2px">搜索</el-button>
          <!--<el-form-item style="margin-left:10px">-->
            <!--<el-checkbox v-model="showAll">显示全部井</el-checkbox>-->
          <!--</el-form-item>-->
          <el-form-item style="margin-left: 10px">
            <el-slider v-model="alpha" style="width: 150px"></el-slider>
          </el-form-item>
          <el-form-item style="margin-left:5px">
            <el-button type="primary" size="small" icon="el-icon-map-location" circle @click="flytoinit"/>
          </el-form-item>
          <el-form-item style="margin-left:5px">
            <el-button :type="showAlarm?'danger':'info'" size="small" icon="el-icon-bell" circle @click="showAlarm=!showAlarm"/>
          </el-form-item>
          <el-form-item style="margin-left: 5px">
            <el-switch
              v-model="value"
              active-color="#637F2C"
              inactive-color="#071a69"
              active-text="深蓝"
              inactive-text="实景">
            </el-switch>
          </el-form-item>
          <el-form-item style="margin-left: 5px">
            <el-switch
              v-model="value1"
              :disabled="value"
              active-text="开启流向"
              inactive-text="关闭流向">
            </el-switch>
          </el-form-item>
        </el-row>
      </el-form>
    </div>
    <!--<div v-if="refreshType=='websocket'" class="function-div">-->
      <!--<el-button :type="showAlarm?'danger':'info'" icon="el-icon-bell" circle @click="showAlarm=!showAlarm"/>-->
      <!--<el-button type="primary" icon="el-icon-refresh-right" circle @click="refreshAlarm"/>-->
    <!--</div>-->
    <div v-if="showAlarm==true && alarmList.length>0" class="map-alarm-div">
      <div class="map-alarm-div-header">
        告警列表
        <span class="icon-right" @click="tableShow=!tableShow">
          <i v-if="tableShow" class="el-icon-arrow-up"/>
          <i v-else class="el-icon-arrow-down"/>
        </span>
      </div>
      <transition name="el-collapse-transition">
        <el-scrollbar
          v-show="tableShow"
          :style="{visibility: tableShow?'visible':'hidden'}"
          :class="{moredatascollor:alarmList.length>6}"
          :native="false">
          <el-table
            :data="alarmList"
            class="alarm-list-table"
            border
            @row-dblclick="alarmRowClick">
            <el-table-column v-for="column in columns" :key="column.value" :label="column.text" :width="column.width" :align="column.align" show-overflow-tooltip>
              <template slot-scope="scope">
                {{ scope.row[column.value] }}
              </template>
            </el-table-column>
          </el-table>
        </el-scrollbar>
      </transition>
    </div>
    <div id="mars3dContainer" class="mars3d-container"/>
    <div class="cover"/>
  </div>
</template>

<script>
  import axios from 'axios'
  import { mapGetters } from 'vuex'
  import SelectTree from '@/components/SelectTree/singleSelect'
  import { getWellType } from '@/api/well'
  import { getWellList, getWellInfo, getAlarmsNow, getWellAlarms, getWellByCode,getMapping } from '@/api/overview'
  import DeptSelect from '../../components/DeptSelect/index'

  import 'mars3d/dist/mars3d.css'
  import * as mars3d from 'mars3d'
  import 'cesium/Source/Widgets/widgets.css'// 导入必须的样式表
  var Cesium = require('../../../node_modules/cesium/Source/Cesium')

  var rectangle = null
  var alarmIcons= []
  var typeList = []

  var ysline = null
  var  wsline = null
  var  underground = null
  var  img_layer = null
  var  tile_layer = null
  var  tiles3dLayer = null
  var  rain_point_layer = null
  var  rain_point_layer1 = null
  var  sewage_point_layer = null
  var  alarm_layer = null
  var  fly_layer = null
  var building = null
  var flow = null
  var street = null
  var well_model_layer = null
  var watch_model_layer = null
  var zs_model_layer = null
  var well_pic_layer = null
  var watch_pic_layer = null
  var zs_pic_layer = null
  export default {
    name: 'OverviewSimple',
    components: { DeptSelect, SelectTree },
    data() {
      return {
        type: 'massMarkers', // 加载数据方式:massMarkers或cluster
        refreshType: 'websocket', // 刷新数据方式:clock或websocket
        value: true,
        value1: true,
        showAlarm: true, // 是否显示报警
        showAll: false, // 是否显示全部井
        alpha: 40, // 是否显示全部井
        listQuery: {
          keywords: '', // 关键字
          wellType: '', // 井类型
          // deptid: '', // 组织机构
          // isAlarm: '1' // 是否报警
        }, // 筛选条件
        columns: [
          {
            text: '水表检查井编号',
            value: 'wellCode',
            width: 120,
            align: 'center'
          },
          {
            text: '设备编号',
            value: 'devcode',
            width: 130,
            align: 'center'
          },
          {
            text: '告警原因',
            value: 'alarmContent',
            align: 'center',
            width: 200
          },
          {
            text: '时间',
            value: 'alarmTime',
            width: 170,
            align: 'center'
          }
        ], // 告警列表显示列
        tableShow: true, // 是否显示告警列表
        tableIcon: 'el-icon-arrow-up',
        showWellType: this.showWellType(), // 是 否显示井类型下拉
        wellTypeList: [], // 井类型列表
        showDeptTree: 0, // 是否显示权属单位下拉,0不显示,1显示树,2显示平面
        center: [this.$store.getters.lng, this.$store.getters.lat], // 地图中心
        zoom: 12, // 地图缩放比例
        alarmList: [], // 报警列表
        alarmInfo: {
          wellCode: '',
          deptName: '',
          position: '',
          deep: '',
          alarms: []
        }, // 显示报警详情气泡内容
        timer :null,
        currentWindow: {
          visible: false, // 窗体显示与否
          position: [this.$store.getters.lng, this.$store.getters.lat],
          windowType: 'info' // 窗体类型:详情info或报警alarm
        }, // 当前窗体属性
        deptShowTop: false, // 是否显示顶级
        clock: null, // 计时器
        hasAlarm: false, // 是否有报警,
        loading: true, // 加载图标是否显示
        trackPopUp:false,
        removeHandler:null,
        showClearBtn: false // 是否显示清除查询按钮
      }
    },
    computed: {
      ...mapGetters([
        'needRefresh'
      ])
    },
    mounted() {
      this.initmars3d()
    },
    watch: {
      value(val){
        if(val){
          window.map.basemap = 2011
          building.show = false
          flow.show = false
          street.show = true
        }else{
          window.map.basemap = 2021
          building.show = true
          flow.show = true
          street.show = false
        }
      },
      value1(val){
        if(!val){
          flow.show = false
        }else{
          flow.show = true
        }
      },
      alpha(val){
        window.map.basemap.opacity = val/100
        underground.alpha = val/100
        if(building !== null){
          building.setStyle({
            opacity: val/100
          })
        }
      },
      showAll(val) {
        tile_layer.show = val
      },
      // needRefresh(val) {
      //   // 需要刷新
      //   if (val) {
      //     this.refreshAlarm()
      //   }
      // },
      showAlarm(val){
        if(!val && this.currentWindow.windowType=='alarm'){
          this.currentWindow.visible = false
        }
        alarm_layer.show = val
      }
    },
    created() {
      this.fetchWellType()
    },
    computed: {
      handler() {
        return new Cesium.ScreenSpaceEventHandler(window.map.scene.canvas)
      }
    },
    methods: {
      changetype(){
        if(this.listQuery.wellType==='1'){ // 雨水
          rain_point_layer.show = true
          rain_point_layer1.show = true
          sewage_point_layer.show = false
        }else if(this.listQuery.wellType==='2'){ //污水
          rain_point_layer.show = false
          rain_point_layer1.show = false
          sewage_point_layer.show = true
        }else{
          rain_point_layer.show = true
          rain_point_layer1.show = true
          sewage_point_layer.show = true
        }
      },

      async initpoints() {
        // 井
        let params = ''
        getMapping(params, this.listQuery.keywords).then(response => {
          if (response.code === 200) {
            if(well_model_layer!==null) window.map.removeLayer(well_model_layer)
            well_model_layer = new mars3d.layer.GraphicLayer()
            window.map.addLayer(well_model_layer)
            for(let i=0;i<response.data.length;i++){
              well_model_layer.addGraphic(new mars3d.graphic.ModelPrimitive({
                position: [response.data[i].longitude,response.data[i].latitude, 0],
                style: {
                  url: '../static/model/ys.gltf',
                  scale: 2
                },
                popup: `供水井<br />井编号:${response.data[i].wellCode}<br />所属单位:${response.data[i].deptName}<br />详细位置:${response.data[i].position}`,
              }))
            }
          }
        })
        params = '13'
        getMapping(params, this.listQuery.keywords).then(response => {
          if (response.code === 200) {
            if(watch_model_layer!==null) window.map.removeLayer(watch_model_layer)
            watch_model_layer = new mars3d.layer.GraphicLayer()
            window.map.addLayer(watch_model_layer)
            if(watch_pic_layer!==null) window.map.removeLayer(watch_pic_layer)
            watch_pic_layer = new mars3d.layer.GraphicLayer()
            window.map.addLayer(watch_pic_layer)
            for(let i=0;i<response.data.length;i++){
              watch_model_layer.addGraphic(new mars3d.graphic.ModelPrimitive({
                position: [response.data[i].longitude,response.data[i].latitude, -0.5],
                style: {
                  url: '../static/model/sb.glb',
                  scale: 2,
                  heading: 90
                },
                popup: `远程水表<br />设备编号:${response.data[i].devcode}<br />设备模型:${response.data[i].modelName}<br />设备类型:${response.data[i].deviceTypeName}<br />井编号:${response.data[i].wellCode}<br />所属单位:${response.data[i].deptName}<br />详细位置:${response.data[i].position}`
              }))
              watch_pic_layer.addGraphic( new mars3d.graphic.BillboardEntity({
                id: response.data[i].devcode,
                position: [response.data[i].longitude,response.data[i].latitude, 1],
                style: {
                  image: '../static/images/icon/sb.png',
                  scale: 1,
                  horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
                  verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
                  scaleByDistance: new Cesium.NearFarScalar(10, 1, 2000, 0.3),
                },
                popup: `远程水表<br />设备编号:${response.data[i].devcode}<br />设备模型:${response.data[i].modelName}<br />设备类型:${response.data[i].deviceTypeName}<br />井编号:${response.data[i].wellCode}<br />所属单位:${response.data[i].deptName}<br />详细位置:${response.data[i].position}`
              }))
            }
          }
        })
        params = '8'
        getMapping(params, this.listQuery.keywords).then(response => {
          if (response.code === 200) {
            if(zs_model_layer!==null) window.map.removeLayer(zs_model_layer)
            zs_model_layer = new mars3d.layer.GraphicLayer()
            window.map.addLayer(zs_model_layer)

            if(zs_pic_layer!==null) window.map.removeLayer(zs_pic_layer)
            zs_pic_layer = new mars3d.layer.GraphicLayer()
            window.map.addLayer(zs_pic_layer)
            for(let i=0;i<response.data.length;i++){
              zs_model_layer.addGraphic(new mars3d.graphic.ModelPrimitive({
                position: [response.data[i].longitude,response.data[i].latitude, 0],
                style: {
                  url: '../static/model/zs.glb',
                  scale: 1,
                  heading: 90
                },
                popup: `噪声记录仪<br />设备编号:${response.data[i].devcode}<br />设备模型:${response.data[i].modelName}<br />设备类型:${response.data[i].deviceTypeName}<br />井编号:${response.data[i].wellCode}<br />所属单位:${response.data[i].deptName}<br />详细位置:${response.data[i].position}`,
              }))
              zs_pic_layer.addGraphic( new mars3d.graphic.BillboardEntity({
                id: response.data[i].devcode,
                position: [response.data[i].longitude,response.data[i].latitude, 1],
                style: {
                  image: '../static/images/icon/zs.png',
                  scale: 1,
                  horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
                  verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
                  scaleByDistance: new Cesium.NearFarScalar(10, 1, 2000, 0.3),
                },
                popup: `噪声记录仪<br />设备编号:${response.data[i].devcode}<br />设备模型:${response.data[i].modelName}<br />设备类型:${response.data[i].deviceTypeName}<br />井编号:${response.data[i].wellCode}<br />所属单位:${response.data[i].deptName}<br />详细位置:${response.data[i].position}`
              }))
            }
          }
        })
      },
      // 初始化放这里
      // lat: 35.9, lng: 120.2384, alt: 10000, heading: 360, pitch: -45
      async initmars3d() {
        var mapOptions = {
          scene: {
            sceneMode: Cesium.SceneMode.SCENE2D,
            // 默认视角参数
            // center: { lat: 35.97, lng: 120.2384, alt: 2000, heading: 360, pitch: -45 },
            // [120.24058441929344,35.99170047670947]
            center: { lat: 35.991700, lng: 120.2405844, alt: 4000, heading: 360, pitch: -90 },
            // 以下是Cesium.Globe对象相关参数
            globe: {
              depthTestAgainstTerrain: true, // 是否启用深度监测
              baseColor: '#071a69', // 地球默认背景色
              showGroundAtmosphere: false, // 是否在地球上绘制的地面大气
              enableLighting: false // 是否显示昼夜区域
            },
            // 以下是Cesium.ScreenSpaceCameraController对象相关参数
            cameraController: {
              zoomFactor: 3.0, // 鼠标滚轮放大的步长参数
              minimumZoomDistance: 1, // 地球放大的最小值(以米为单位)
              maximumZoomDistance: 50000000, // 地球缩小的最大值(以米为单位)
              enableRotate: true, // 2D和3D视图下,是否允许用户旋转相机
              enableTranslate: true, // 2D和哥伦布视图下,是否允许用户平移地图
              enableTilt: true, // 3D和哥伦布视图下,是否允许用户倾斜相机
              enableZoom: true, // 是否允许 用户放大和缩小视图
              enableCollisionDetection: true // 是否允许 地形相机的碰撞检测
            }
          },
          control:{
            infoBox: false,
            sceneModePicker: true
          },
          basemaps: [
            {
              pid: 10,
              id: 2011,
              name: "天地图",
              type: "group",
              layers: [
                { name: "注记", type: "tdt", layer: "ter_z", key: ["9ae78c51a0a28f06444d541148496e36"] },
                { name: "注记", type: "tdt", layer: "img_z", key: ["9ae78c51a0a28f06444d541148496e36"] },
              ]
            },
            // {
            //   pid: 10,
            //   id: 2011,
            //   name: "天地图",
            //   type: "group",
            //   layers: [
            //     {
            //       name: '行政区划界线',
            //       type: 'xyz',
            //       url: 'https://t{s}.tianditu.gov.cn/DataServer?T=ibo_w&x={x}&y={y}&l={z}&tk=9ae78c51a0a28f06444d541148496e36',
            //       subdomains: '01234567',
            //       maximumLevel: 10,
            //       show: true,
            //       id: 1,
            //       templateValues: {
            //         dataServer: 'http://data.marsgis.cn'
            //       },
            //       zIndex: 0
            //     },
            //     {
            //       name: '天地图注记',
            //       type: 'tdt',
            //       layer: 'img_z',
            //       key: ['9ae78c51a0a28f06444d541148496e36'],
            //       show: true,
            //       id: 2,
            //       // templateValues: {dataServer: 'http://data.marsgis.cn'},
            //       zIndex: 1
            //     }
            //   ]
            // },
            {
              "id": 2021,
              "pid": 10,
              "name": "天地图影像",
              "icon": "http://mars3d.cn/example/img/basemaps/tdt_img.png",
              "type": "tdt",
              "layer": "img_d",
              "key": ["9ae78c51a0a28f06444d541148496e36"],
              "show": true
            },
            // {
            //   "id": 2020,
            //   "pid": 10,
            //   "name": "天地图电子",
            //   "icon": "http://mars3d.cn/example/img/basemaps/tdt_vec.png",
            //   "type": "group",
            //   "layers": [
            //     { "name": "底图", "type": "tdt", "layer": "vec_d", "key": ["9ae78c51a0a28f06444d541148496e36"] },
            //     { "name": "注记", "type": "tdt", "layer": "vec_z", "key": ["9ae78c51a0a28f06444d541148496e36"] }
            //   ]
            // },
            // {
            //   crs: 'gcj',
            //   enablePickFeatures: false,
            //   icon: 'http://mars3d.cn/example/img/basemaps/bd-c-midnight.png',
            //   id: 2017,
            //   name: '蓝色底图(GCJ02偏移)',
            //   type: 'arcgis',
            //   url: 'http://map.geoq.cn/arcgis/rest/services/ChinaOnlineStreetPurplishBlue/MapServer'
            // }
          ],
        }
        // 创建三维地球场景
        let map = new mars3d.Map('mars3dContainer', mapOptions)
        map.basemap = 2011
        map.scene.screenSpaceCameraController.enableCollisionDetection = false
        // 设置鼠标
        map.scene.screenSpaceCameraController.tiltEventTypes = [ Cesium.CameraEventType.RIGHT_DRAG ]
        // 缩放设置 重新设置缩放成员
        map.scene.screenSpaceCameraController.zoomEventTypes = [Cesium.CameraEventType.MIDDLE_DRAG, Cesium.CameraEventType.WHEEL, Cesium.CameraEventType.PINCH]
        // 鼠标左键平移
        map.scene.screenSpaceCameraController.rotateEventTypes = [Cesium.CameraEventType.LEFT_DRAG]
        let bloomEffect = new mars3d.effect.BloomEffect({
          enabled: true
        })
        map.addEffect(bloomEffect)
        window.map = map
        underground = new mars3d.thing.Underground({
          alpha: this.alpha/100,
        })
        map.addThing(underground)
        window.map.basemap.opacity = this.alpha/100
        // let that = this
        // this.handler.setInputAction(function(movement) {
        //   if(window.map.level<19){
        //      ysline.show = true
        //      wsline.show = true
        //   }else{
        //     if(that.alpha<90){
        //        ysline.show = false
        //        wsline.show = false
        //     }
        //   }
        // }, Cesium.ScreenSpaceEventType.WHEEL)

        // lat: 35.9, lng: 120.2384,
        let graphicLayer = new mars3d.layer.GraphicLayer()
        map.addLayer(graphicLayer)

        building  = new mars3d.graphic.ModelPrimitive({
          position: [120.242284, 35.983704, 0],
          style: {
            url: '../static/model/m1/m1.gltf',
            scale: 1,
            heading: 18.8,
            opacity: this.alpha/100
          }
        })
        graphicLayer.addGraphic(building)
        building.show = false
        var handler = new Cesium.ScreenSpaceEventHandler( map.viewer.canvas);
        handler.setInputAction(function(evt) {
          var cartesian=map.viewer.camera.pickEllipsoid(evt.position,map.viewer.scene.globe.ellipsoid);

          var cartographic=Cesium.Cartographic.fromCartesian(cartesian);

          var lng=Cesium.Math.toDegrees(cartographic.longitude);//经度值

          var lat=Cesium.Math.toDegrees(cartographic.latitude);//纬度值

          var mapPosition={x:lng,y:lat,z:cartographic.height};//cartographic.height的值始终为零。

          console.log('['+lng+','+lat+'],')

        }, Cesium.ScreenSpaceEventType.LEFT_CLICK)


        axios.get('./static/position.json').then((result) => {
          const positions = result.data.positions
          flow = new mars3d.layer.GraphicLayer()
          map.addLayer(flow)
          street = new mars3d.layer.GraphicLayer()
          map.addLayer(street)
          for(let j=0;j<positions.length;j++){
            flow.addGraphic(this.addFlow(positions[j].items,positions[j].repeat))
            street.addGraphic(this.addStreet(positions[j].items))
          }
          flow.show = false
        }).catch((error) => {
          console.log('get position error...' + error)
        })

        // tile_layer = new mars3d.layer.ArcGisLayer({
        //   url: 'http://223.82.47.232:11408/arcgis/rest/services/crgx/MapServer',
        //   layers: '0,3',
        //   show:false,
        //   // maximumTerrainLevel: 19,
        //   enablePickFeatures: false,
        // })
        // map.addLayer(tile_layer)
        // let wfsLayer = new mars3d.layer.ArcGisWfsLayer({
        //   name: '雨水管线',
        //   url: 'http://223.82.47.232:11408/arcgis/rest/services/crgx/MapServer/4',
        //   minimumLevel: 19,
        //   symbol: {
        //     type: 'polylineVolumeP',
        //     styleOptions: {
        //       color: '#375cad',
        //       shape: 'pipeline',
        //       radius: 0.1
        //     },
        //     callback: function (attr, styleOpt){
        //       var val= {attr}.attr
        //       return {setHeight: [-val.起始埋深,-val.终止埋深]}
        //     }
        //   },
        //   popup: '名称:雨水管线<br />编号:{编号}<br />材质:{材质}<br />管径:{管径}<br />所属道路:{所属道路}',
        // })
        // map.addLayer(wfsLayer)
        // let wfsLayer = new mars3d.layer.ArcGisWfsLayer({
        //   name: '管线',//'污水管线',
        //   url: 'http://223.82.47.232:11408/arcgis/rest/services/qd/MapServer/0',
        //   minimumLevel: 19,
        //   symbol: {
        //     type: 'polylineVolumeP',
        //     styleOptions: {
        //       color: '#eb6b0c00',
        //       shape: 'pipeline',
        //       radius: 0.1
        //     },
        //     callback: function (attr, styleOpt){
        //       var val= {attr}.attr
        //       return {setHeight: [-val.起始埋深,-val.终止埋深]}
        //     }
        //   },
        //   popup: '名称:给水管线<br />编号:{编号}<br />材质:{材质}<br />管径:{管径}<br />所属道路:{所属道路}',
        // })
        // map.addLayer(wfsLayer)
        // ysline = new mars3d.layer.ArcGisWfsLayer({
        //   name: '雨水线',
        //   url: 'http://223.82.47.232:11408/arcgis/rest/services/crgx/MapServer/4',
        //   // maximumLevel: 19,
        //   enablePickFeatures: false,
        //   symbol: {
        //     type: 'polylineP',
        //     styleOptions: {
        //       color: '#375cad',
        //       // radius: 0.1
        //     },
        //   },
        // })
        // map.addLayer(ysline)
        // wsline = new mars3d.layer.ArcGisWfsLayer({
        //   name: '管线',
        //   url: 'http://223.82.47.232:11408/arcgis/rest/services/qd/MapServer/0',
        //   // maximumLevel: 19,
        //   enablePickFeatures: false,
        //   symbol: {
        //     type: 'polylineP',
        //     styleOptions: {
        //       color: '#eb6b0c',
        //       // radius: 0.1
        //     },
        //   },
        // })
        // map.addLayer(wsline)
        this.initpoints()
        this.refreshAlarm()
      },
      // 获取井类型,显示井类型下拉
      fetchWellType() {
        getWellType().then(response => {
          this.wellTypeList = []
          // 如果该用户支持的井类型只有一个,则不显示该筛选框
          // const wellTypes = this.$store.getters.wellTypes
          for (const wellType of response.data) {
            // if (wellTypes.indexOf(wellType.value) !== -1) {
              this.wellTypeList.push(wellType)
            // }
          }
          if (this.wellTypeList.length <= 1) {
            this.showWellType = false
          }
        })
      },
      addFlow(positions,repeat){
        var style = {
          width: 10,
          material: mars3d.MaterialUtil.createMaterialProperty(mars3d.MaterialType.LineFlow, {
            color: "#217bd9",
            repeat: new Cesium.Cartesian2(repeat, 1),
            image: '../static/images/line.png',
            speed: 15
          })
        }
        var graphic = new mars3d.graphic.PolylineEntity({
          positions: positions,
          style: style
        })
        return graphic
      },
      addStreet(positions){
        var graphic = new mars3d.graphic.PolylineEntity({
          positions: positions,
          style: {
            width: 8,
            color:  Cesium.Color.AQUA,
            clampToGround: true
          }
        })
        return graphic
      },
      randomPoint() {
        //120.242, 35.98342
        const jd = this.random(120.242 * 1000, 117.30 * 1000) / 1000
        const wd = this.random(35.94342 * 1000, 35.98342 * 1000) / 1000
        return new mars3d.LatLngPoint( wd, jd, 100)
      },
      random(min, max) {
        return Math.floor(Math.random() * (max - min + 1) + min)
      },
      flytoinit(){
        if(window.map._viewer.scene._mode === Cesium.SceneMode.SCENE3D){
          var center = {  lat: 35.97, lng: 120.2384, alt: 2000, heading: 360, pitch: -45 }
        }else{
          var center = { lat: 35.991700, lng: 120.2405844, alt: 4000, heading: 360, pitch: -90 }
        }
        window.map.setCameraView(center)
      },
      // 获取全部井列表
      getWellList() {
        if(this.listQuery.keywords=== ''){
          this.initpoints()
          return
        }
        getWellList(this.listQuery).then(response => {
          if (response.code === 200) { // todo
            let str = "1 <> 1"
            for (const res of response.data) {
              str += (" or 编号 = '" + res.wellCode + "'")
            }
            this.initpoints(str)
          }
        })
      },
      // 点击井详情气泡
      openInfoWindow(wellId) {
        this.currentWindow.visible = false
        getWellInfo(wellId).then(response => {
          if (response.code === 200) {
            const wellInfo = response.data
            this.wellInfo = {
              wellCode: wellInfo.wellCode,
              position: wellInfo.position,
              wellTypeName: wellInfo.wellTypeName,
              deptName: wellInfo.deptName,
              bfztName: wellInfo.bfztName,
              deep: wellInfo.deep
            }
            this.currentWindow.position = [wellInfo.lngGaode, wellInfo.latGaode]
            this.currentWindow.visible = true
            this.currentWindow.windowType = 'info'
            this.trackPopUp = true
          }
        })
      },
      // 刷新报警列表
      refreshAlarm() {
        this.count = 60
        this.loading = true
        getAlarmsNow().then(response => {
          if (response.code === 200) {
            this.loading = false
            // 获取当前报警列表
            this.alarmList = response.data
            if (this.alarmList.length > 0) {
              this.hasAlarm = true
            }
            for (const alarm of response.data) {
              // if()
            }
            // let str = "1 <> 1"
            // var map = {};
            // for (const alarm of response.data) {
            //   str += (" or 编号 = '" + alarm.wellCode + "'")
            //   map[alarm.wellCode] = alarm
            // }
            // if(alarm_layer!==null){
            //   window.map.removeLayer(alarm_layer)
            // }
            // alarm_layer = new mars3d.layer.ArcGisWfsLayer({
            //   name: '报警点',
            //   url: 'http://223.82.47.232:11408/arcgis/rest/services/sfw/MapServer/1',
            //   where: str,
            //   // minimumLevel: 15,
            //   symbol: {
            //     type: 'modelP',
            //     styleOptions: {
            //       url: '../static/model/baojing.gltf',
            //       minimumPixelSize: 20,
            //       maximumScale: 15,
            //       scale: 1
            //     },
            //     // callback: function (attr, styleOpt){
            //     //   var val= {attr}.attr
            //     //   return {setHeight: val.井深}
            //     // }
            //   },
            //   popup:  function(e){
            //     var val = e.graphic.options.attr
            //     return  `井编号:${val.编号}<br />井名称:${val.附属物名称}<br />所属道路:${val.所属道路}<br />告警原因:${map[val.编号].alarmContent}<br />告警时间:${map[val.编号].alarmTime}`
            //   }
            // })
            // window.map.addLayer(alarm_layer)
          }
        })
      },
      // 点击报警详情
      openAlarmWindow(wellId, position) {
        // 旧弹窗不显示
        this.currentWindow.visible = false
        // this.filterIcon()
        getWellAlarms(wellId).then(response => {
          if (response.code === 200) {
            const wellInfo = response.data
            this.alarmInfo = {
              wellCode: wellInfo.wellCode,
              position: wellInfo.position,
              deptName: wellInfo.deptName,
              wellTypeName: wellInfo.wellTypeName,
              alarms: wellInfo.alarmList,
              deep: wellInfo.deep
            }
            this.currentWindow.position = position
            this.center = position
            this.currentWindow.visible = true
            this.currentWindow.windowType = 'alarm'
            this.trackPopUp = true
          }
        })
      },
      // 点击报警列表
      alarmRowClick(row, column, event) {
        if(this.alpha<10){
          this.alpha = 15
        }

        this.flytoinit()
        if(fly_layer!==null) window.map.removeLayer(fly_layer)
        const wellId = row.wellCode
        let str = "编号 = '" + wellId + "'"
        fly_layer = null
        fly_layer = new mars3d.layer.ArcGisWfsLayer({
          name: '报警点',
          url: 'http://223.82.47.232:11408/arcgis/rest/services/sfw/MapServer/1',
          where: str,
          symbol: {
            type: 'modelP',
            styleOptions: {
              url: '../static/model/baojing.gltf',
              scale: 0
            },
            callback: function (attr, styleOpt){
              var val= {attr}.attr
              var center = {lat: val.wd, lng: val.jd, alt: 50, heading: 360, pitch: -90}
              window.map.setCameraView(center)
            }
          }
        })
        window.map.addLayer(fly_layer)
      }
    }
  }
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
  /deep/ .mars3d-popup-content {
    margin: 20px;
    line-height: 1.9;
    font-size: 18px;
  }
  /deep/ .cesium-toolbar-button {
    margin-top: 5px !important;
    width: 48px !important;
    height: 48px !important;
  }
  /depp/ span.cesium-sceneModePicker-wrapper {
    margin: 0 50px !important;
  }
  /deep/ .mars3d-popup-close-button {
    top: 10px;
    right: 10px;
  }
  /deep/ .mars3d-popup{
    margin-top: -40px;
  }
  /deep/ .mars3d-popup-content {
    margin: 15px;
    line-height: 1.5;
    font-size: 16px;
  }
  /deep/ .mars3d-popup-content-wrapper {
    box-shadow: 0 2px 6px #00192faa;
    max-height: 1000px;
  }
  /deep/ .mars3d-popup-background {
    background: #00192faa;
    border-radius: 10px;
  }
  /deep/ .mars3d-popup-tip {
    border-radius: 0px !important;
  }
  /deep/.mars3d-popup-close-button{
    top: 10px;
  }
  @CHARSET "UTF-8";
  // 查询框
  .map-search-div{
    position: absolute;
    z-index: 100;
    padding: 0px 10px;
    background-color: rgba(244, 244, 244, 0.9);
    /*left: 90px;*/
    .el-form-item{
      margin-bottom: 0px;
    }
  }
  // 刷新框
  .function-div{
    position: absolute;
    left: 0px;
    right: 10px;
    z-index: 1100;
    padding: 10px;
    color: #ce8b74;
    font-size: 14px;
    /*background-color: rgba(244, 233, 230, 1.0);*/
    .font-red{
      color: red;
      font-weight: bold;
    }
    .el-icon-refresh:hover{
      color: red;
      font-weight: bold;
      cursor: pointer;
    }
  }
  // 报警列表
  .map-alarm-div{
    position: absolute;
    z-index: 100;
    background-color: rgba(255, 234, 241,0.8);
    top: 40px;
    left: 0px;
    .map-alarm-div-header{
      line-height: 35px;
      width: 621px;
      padding-left: 10px;
      .icon-right{
        position: absolute;
        right: 15px;
      }
      .icon-right:hover{
        color: #409EFF;
        cursor: pointer;
      }
    }
    .el-scrollbar {
      /*height: 200px;*/
      width: 100%;
    }
    .moredatascollor{
      height: 200px;
    }
    .el-scrollbar__wrap {
      overflow-y: auto;
      overflow-x: hidden;
      padding:0px !important;
      margin-bottom: 0px !important;
    }

    .el-table th{
      /*background-color: rgba(255, 229, 230, 0.8);*/
      padding: 7px 0px;
    }
    .el-table td{
      /*background-color: rgba(255, 234, 241, 0.8);*/
      padding: 5px 0px;
      /*line-height: 1;*/
    }
    .el-table td:hover{
      /*background-color: rgba(255, 234, 241, 0.8);*/
    }
    .transition-box {
      margin-bottom: 10px;
      width: 200px;
      height: 100px;
      border-radius: 4px;
      background-color: #409EFF;
      text-align: center;
      color: #fff;
      padding: 40px 20px;
      box-sizing: border-box;
      margin-right: 20px;
    }
  }
  // 刷新框
  .refresh-div{
    position: absolute;
    right: 10px;
    top: 7px;
    z-index: 100;
    padding: 10px;
    color: #ce8b74;
    font-size: 14px;
    background-color: rgba(244, 233, 230, 1.0);
    .font-red{
      color: red;
      font-weight: bold;
    }
    .el-icon-refresh:hover{
      color: red;
      font-weight: bold;
      cursor: pointer;
    }
  }
  // 地图
  .el-divider--horizontal{
    margin: 5px 0;
  }
  /*按钮样式*/
  .add-button{
  }
</style>
<style rel="stylesheet/scss" lang="scss">
  .map-alarm-div {
    .el-scrollbar__wrap {
      overflow-y: auto;
      overflow-x: hidden;
      padding: 0px !important;
      margin-bottom: 0px !important;
    }
  }
  .cover{
    position: absolute;
    bottom: 3px;
    left: 0px;
    /*background-color: red;*/
    background-color: #122252;
    width: 130px;
    height: 32px;
  }
</style>