<!--
 * @Descripttion: 
 * @version: 
 * @Author: JC9527
 * @Date: 2023-08-14 15:46:26
 * @LastEditors: JC9527
 * @LastEditTime: 2023-08-17 21:32:14
-->
<!--
 * @Descripttion: 
 * @version: 
 * @Author: JC9527
 * @Date: 2023-08-14 15:46:26
 * @LastEditors: JC9527
 * @LastEditTime: 2023-08-17 16:15:51
-->
<!--
 * @Descripttion: 
 * @version: 
 * @Author: JC9527
 * @Date: 2023-08-14 15:46:26
 * @LastEditors: JC9527
 * @LastEditTime: 2023-08-17 15:40:05
-->
<template>
  <div class="map-main">
    <div id="showMap" class="showMap"></div>
    <div class="left-bg">
      <div class="bgt"></div>
    </div>
    <div class="map-left">
      <map-left></map-left>
    </div>
    <img src="@/assets/images/action-left.png" alt="" class="left-image">
    <img src="@/assets/images/action-right.png" alt="" class="right-image">
    <div class="middle-top-left">
      <div class="input-keyword">
        <el-input
          placeholder="请输入关键字"
          v-model="input">
          <i slot="suffix" class="el-icon-search" @click="search"></i>
        </el-input>
      </div>
      <div class="laser-positioning">
        <span>地图扎点</span>
        <img src="@/assets/images/positioning.png" alt="">
      </div>
      <div class="creation-task">
        <span>任务创建</span>
        <img src="@/assets/images/createdTask.png" alt="">
      </div>
    </div>
    <div class="middle-bottom-left">
      <div class="list" @click="changeMap(1)">
        <div class="leftbg" :class="actionMap == 1 ? 'action-map':''">
          <img src="@/assets/images/icon1.png" alt="">
        </div>
        <div class="rightbg" v-show="actionMap == 1">
          <span>执法人员</span>
        </div>
      </div>
      <div class="list" @click="changeMap(2)">
        <div class="leftbg" :class="actionMap == 2 ? 'action-map':''">
          <img src="@/assets/images/icon2.png" alt="">
        </div>
        <div class="rightbg" v-show="actionMap == 2">
          <span>普通事件</span>
        </div>
      </div>
      <div class="list" @click="changeMap(2)">
        <div class="leftbg" :class="actionMap == 2 ? 'action-map':''">
          <img src="@/assets/images/icon3.png" alt="">
        </div>
        <div class="rightbg" v-show="actionMap == 2">
          <span>重点事件</span>
        </div>
      </div>
      <div class="list" @click="changeMap(3)">
        <div class="leftbg" :class="actionMap == 3 ? 'action-map':''">
          <img src="@/assets/images/icon4.png" alt="">
        </div>
        <div class="rightbg" v-show="actionMap == 3">
          <span>执法车辆</span>
        </div>
      </div>
      <div class="list" @click="changeMap(4)">
        <div class="leftbg" :class="actionMap == 4 ? 'action-map':''">
          <img src="@/assets/images/icon5.png" alt="">
        </div>
        <div class="rightbg" v-show="actionMap == 4">
          <span>监控视频</span>
        </div>
      </div>
    </div>
    <div class="middle-bottom-right">
      <div class="btn-action">
        <span :class="action == 1? 'action':''" @click="actionBtn(1)">电子地图</span>
        <span :class="action == 2? 'action':''" @click="actionBtn(2)">卫星地图</span>
      </div>
    </div>
    <div class="map-right">
      <map-right></map-right>
    </div>
    <div class="right-bg">
      <div class="bgt"></div>
    </div>
    <div class="bottom-bg">
      <div class="bgt"></div>
    </div>
    <personage-track ref="personageTrack"></personage-track>
    <crew-assign ref="crewAssign"></crew-assign>
    <video-wall ref="videoWall"></video-wall>
    <person-popup v-if="personPopup" v-on:personClose="personClose" v-on:getRoute="presoninfo" :point="mypoint"></person-popup>
    <event-popup v-if="eventPopup" v-on:eventClose="eventClose" v-on:zhipai="personzhipai" :point="mypoint"></event-popup>
    <car-popup v-if="carPopup" v-on:carClose="carClose" v-on:carinfo="carinfo" :point="mypoint"></car-popup>
    <monitoring-popup v-if="monitoringPopup" v-on:monitoringClose="monitoringClose" v-on:monitoringInfo="monitoringInfo" :point="mypoint"></monitoring-popup>
  </div>
</template>
<script>
import L from 'leaflet'
//引入坐标系转换插件
import 'proj4'
import 'proj4leaflet'
//引入中国底图插件
import '@/utils/lib/leaflet.ChineseTmsProviders.js'
//引入坐标系偏移插件
import '@/utils/lib/leaflet.mapCorrection.min.js'
// import zhifarenyuan from "@/utils/mapJson/zhifarenyuan.json"
// import shijianfenbu from "@/utils/mapJson/shijianfenbu.json"
// import zhifacheliang from "@/utils/mapJson/zhifacheliang.json"
// import jiankongshipin from "@/utils/mapJson/jiankongshipin.json"
import point from "@/utils/mapJson/point.json"

import jiangninggeo from "@/utils/mapJson/jiangningjingkaiqugeo.json"
import detachment1 from "@/utils/mapJson/detachment1.json"
import detachment2 from "@/utils/mapJson/detachment2.json"
import detachment3 from "@/utils/mapJson/detachment3.json"
import detachment4 from "@/utils/mapJson/detachment4.json"
import mapLeft from "../components/mapLeftContent.vue"
import mapRight from "../components/mapRightContent.vue"
// import mapCentre from "../components/mapCentre.vue"
// 弹窗
import personageTrack from "../../components/personagetrack/index.vue"
import crewAssign from "../../components/crewAssign/index.vue"
import videoWall from "../../components/videoWall/index.vue"
import personPopup from "../../components/personPopup/index.vue"
import eventPopup from "../../components/eventPopup/index.vue"
import carPopup from "../../components/carPopup/index.vue"
import monitoringPopup from "../../components/monitoringPopup/index.vue"
export default {
  name: 'myMap',
  components:{mapLeft,mapRight,personageTrack,crewAssign,videoWall,personPopup,eventPopup,carPopup,monitoringPopup},
  data() {
    return {
      globalMap:null,
      basemap:null,
      townCenter: [31.863971, 118.835418],
      myZoom:12,
      mapLayers:{
        mapLayer1:null,
        mapLayer2:null,
        mapLayer3:null,
        mapLayer4:null,
        mapLayer5:null,
      },
      mapEvent:{
        mapEvent1:null,
        mapEvent2:null,
        mapEvent3:null,
        mapEvent4:null,
      },
      mapLayer1:null,
      mapLayer2:null,
      mapLayer3:null,
      mapLayer4:null,
      mapLayer5:null,
      input:'',                       // 输入框的值
      actionMap:1,                    // 默认选中执法人员地图
      action:1,                       // 切换执法人员/车辆/事件分类/监控视频控制的值
      personPopup:false,
      eventPopup:false,
      carPopup:false,
      monitoringPopup:false,
      mypoint:{},
    }
  },
  methods:{
    initMap(){
      this.globalMap = L.map('showMap', {
        center: this.townCenter, // 地图中心[纬度，经度]
        zoom: this.myZoom, // 地图层级
        zoomControl: false,
        attributionControl: false, // 右下角leaflet图标
        doubleClickZoom: false, // 双击放大
        scrollWheelZoom: true, // 滚轮放大
        dragging: true,
      })

      // 电子底图/百度
      this.basemap = L.tileLayer.chinaProvider('Geoq.Normal.PurplishBlue', {
        maxZoom: 18,
        minZoom: 5,
      })
      this.globalMap.addLayer(this.basemap);

      this.globalMap.createPane('mapLayer1')
      this.globalMap.getPane('mapLayer1').style.zIndex = 501
      this.globalMap.getPane('mapLayer1').style.pointerEvents = 'none'

      this.globalMap.createPane('mapLayer2')
      this.globalMap.getPane('mapLayer2').style.zIndex = 502
      this.globalMap.getPane('mapLayer2').style.pointerEvents = 'none'

      this.globalMap.createPane('mapLayer3')
      this.globalMap.getPane('mapLayer3').style.zIndex = 502
      this.globalMap.getPane('mapLayer3').style.pointerEvents = 'none'

      this.globalMap.createPane('mapLayer4')
      this.globalMap.getPane('mapLayer4').style.zIndex = 502
      this.globalMap.getPane('mapLayer4').style.pointerEvents = 'none'

      this.globalMap.createPane('mapLayer5')
      this.globalMap.getPane('mapLayer5').style.zIndex = 502
      this.globalMap.getPane('mapLayer5').style.pointerEvents = 'none'

      this.globalMap.createPane('mapEvent1')
      this.globalMap.getPane('mapEvent1').style.zIndex = 503
      this.globalMap.getPane('mapEvent1').style.pointerEvents = 'none'

      this.mapEvent.mapEvent1 = L.featureGroup().addTo(this.globalMap)


      this.mapLayers.mapLayer1 = L.featureGroup().addTo(this.globalMap)
      this.mapLayers.mapLayer2 = L.featureGroup().addTo(this.globalMap)
      this.mapLayers.mapLayer3 = L.featureGroup().addTo(this.globalMap)
      this.mapLayers.mapLayer4 = L.featureGroup().addTo(this.globalMap)
      this.mapLayers.mapLayer5 = L.featureGroup().addTo(this.globalMap)

      this.globalMap.on('zoomend', e => {
        let zoom = this.globalMap.getZoom()
        console.log('层级：', zoom)
      })
      // this.addLayer2();
      this.addLayer1();
      this.addMark("执法人员");
      // this.addLayer2();
      // this.addLayer3();
      // this.addLayer4();
      // this.addLayer5();
    },
    addLayer1(){
      this.mapLayers.mapLayer1.clearLayers()
      // this.mapLayers.mapLayer2.clearLayers()
      let geojson = L.geoJSON(jiangninggeo,{
          pane: 'mapLayer1',
          style: function (feature) {
            return {
              color: '#00C5EC',
              weight: 1,
              fillColor: 'rgba(64,175,255,0.4)',
              fillOpacity: 1,
            }
          },
        },{ className: 'jack-s' }
      ).addTo(this.mapLayers.mapLayer1)
      // this.addMark()
      // 获取json文件的中心位置
      this.mapLayer1 = geojson.getBounds()
      // 居中加载json文件
      this.globalMap.fitBounds(this.mapLayer1)
    },
    addMark(name){
      this.mapEvent.mapEvent1.clearLayers()
      let ico1 = L.icon({
        iconUrl: require('../../../assets/images/icon/icon1.png'),
        iconSize: [52, 81],
      })
      let ico2 = L.icon({
        iconUrl: require('../../../assets/images/icon/icon2.png'),
        iconSize: [44, 91],
      })
      let ico3 = L.icon({
        iconUrl: require('../../../assets/images/icon/icon3.png'),
        iconSize: [44, 91],
      })
      let ico4 = L.icon({
        iconUrl: require('../../../assets/images/icon/icon4.png'),
        iconSize: [45, 95],
      })
      let ico5 = L.icon({
        iconUrl: require('../../../assets/images/icon/icon5.png'),
        iconSize: [52, 81],
      })
      point.features.map((item)=>{
        if(this.actionMap == 1) {
          if(item.properties.name == "执法人员"){
            let marker = L.marker({lng:item.geometry.coordinates[0],lat:item.geometry.coordinates[1]},{icon:ico1})
            marker.addTo(this.mapEvent.mapEvent1)
            this.markerClick(marker)
          }
        } else if(this.actionMap == 2) {
          let marker
          if(item.properties.name == "普通事件") {
            marker = L.marker({lng:item.geometry.coordinates[0],lat:item.geometry.coordinates[1]},{icon:ico2})
            marker.addTo(this.mapEvent.mapEvent1)
            this.markerClick(marker)
          } else if(item.properties.name == "重点事件"){
            marker = L.marker({lng:item.geometry.coordinates[0],lat:item.geometry.coordinates[1]},{icon:ico3})
            marker.addTo(this.mapEvent.mapEvent1)
            this.markerClick(marker)
          }
        } else if(this.actionMap == 3) {
          if(item.properties.name == "执法车辆"){
            let marker = L.marker({lng:item.geometry.coordinates[0],lat:item.geometry.coordinates[1]},{icon:ico4})
            marker.addTo(this.mapEvent.mapEvent1)
            this.markerClick(marker)
          }
        } else if(this.actionMap == 4) {
          if(item.properties.name == "监控视频"){
            let marker = L.marker({lng:item.geometry.coordinates[0],lat:item.geometry.coordinates[1]},{icon:ico5})
            marker.addTo(this.mapEvent.mapEvent1)
            this.markerClick(marker)
          }
        }
        
      })
      // let geojson = L.geoJSON(cheshi,{
      //   onEachFeature: (feature, layer) => {
      //     console.log(feature)
      //     console.log(layer)
      //     let bounds = layer._latlng
      //     console.log(bounds)
      //     let marker 
      //     // let center = bounds.getCenter()
      //     if(feature.properties.name == "监控视频"){
      //       marker = L.marker(bounds,{icon:ico5})
      //     } else if(feature.properties.name == "执法人员") {
      //       marker = L.marker({lng:118.74576613991007,lat:31.8391346298732},{icon:ico1})
      //     } else if(feature.properties.name == "普通事件") {
      //       marker = L.marker(bounds,{icon:ico2})
      //     } else if(feature.properties.name == "重点事件") {
      //       marker = L.marker(bounds,{icon:ico3})
      //     } else if(feature.properties.name == "执法车辆") {
      //       marker = L.marker(bounds,{icon:ico4})
      //     }
      //     marker.addTo(this.mapEvent.mapEvent1)
      //   }
      // }).addTo(this.mapEvent.mapEvent1)
    },
    markerClick(marker){
      marker.on('click', e => {
        console.log(e);
        this.mypoint = e.containerPoint;
        if(this.actionMap == 1) {
          this.personPopup = true;
        } else if(this.actionMap == 2) {
          this.eventPopup = true;
        } else if(this.actionMap == 3) {
          this.carPopup = true
        } else if(this.actionMap == 4){
          this.monitoringPopup = true;
        }
      })
    },
    personClose(){
      this.personPopup = false;
    },
    eventClose(){
      this.eventPopup = false;
    },
    carClose(){
      this.carPopup = false;
    },
    monitoringClose(){
      this.monitoringPopup = false;
    },
    personzhipai(){
      this.$refs.crewAssign.open();
    },
    presoninfo(){
      this.$refs.personageTrack.open('person');
    },
    carinfo(){
      this.$refs.personageTrack.open('car');
    },
    monitoringInfo(){
      this.$refs.videoWall.open();
    },
    addLayer2(){
      this.mapLayers.mapLayer2.clearLayers()
      let geojson = L.geoJSON(detachment1,{
          pane: 'mapLayer2',
          style: function (feature) {
            return {
              color: '#00C5EC',
              weight: 1,
              fillColor: 'rgba(255,0,0,0.38)',
              fillOpacity: 1,
            }
          },
          onEachFeature: (feature, layer) => {
            console.log(feature.properties.name)
            let polygon = L.polygon(layer._latlngs, {
              text: feature.properties.name,
              textStyle: {
                strokeStyle: '#ffffff',//描边颜色
                fillStyle: '#00000',//文字颜色
                // eslint-disable-next-line quotes
                font: "18px 'PuHuiTi-Medium'",
                lineWidth: 1,//描边粗细
                offsetX: -36,//-字号*4个字/2
                offsetY: 9,//字号/2
              }
            })
            polygon.addTo(this.mapLayers.mapLayer2)
          }
        },{ className: 'jack-s2' }
      ).addTo(this.mapLayers.mapLayer2)
      this.mapLayer2 = geojson.getBounds()
    },
    addLayer3(){
      this.mapLayers.mapLayer3.clearLayers()
      let geojson = L.geoJSON(detachment2,{
          pane: 'mapLayer3',
          style: function (feature) {
            return {
              color: '#00C5EC',
              weight: 1,
              fillColor: 'rgba(255,0,0,0.38)',
              fillOpacity: 1,
            }
          },
        },{ className: 'jack-s3' }
      ).addTo(this.mapLayers.mapLayer3)
      this.mapLayer3 = geojson.getBounds()
    },
    addLayer4(){
      this.mapLayers.mapLayer4.clearLayers()
      let geojson = L.geoJSON(detachment3,{
          pane: 'mapLayer4',
          style: function (feature) {
            return {
              color: '#00C5EC',
              weight: 1,
              fillColor: 'rgba(255,0,0,0.38)',
              fillOpacity: 1,
            }
          },
        },{ className: 'jack-s4' }
      ).addTo(this.mapLayers.mapLayer4)
      // 获取json文件的中心位置
      this.mapLayer4 = geojson.getBounds()
    },
    addLayer5(){
      this.mapLayers.mapLayer5.clearLayers()
      let geojson = L.geoJSON(detachment4,{
          pane: 'mapLayer5',
          style: function (feature) {
            return {
              color: '#00C5EC',
              weight: 1,
              fillColor: 'rgba(255,0,0,0.38)',
              fillOpacity: 1,
            }
          },
        },{ className: 'jack-s5' }
      ).addTo(this.mapLayers.mapLayer5)
      // 获取json文件的中心位置
      this.mapLayer5 = geojson.getBounds()
    },
    actionBtn(id){
      this.action = id;
      // console.log(id)
      // this.$emit('actionBtn',id);
      // if(id == 1){
      //   this.$refs.personageTrack.open();
      // } else {
      //   this.$refs.crewAssign.open();
      // }
    },
    // 输入框的搜索框点击事件
    search(){
      
    },
    // 创建任务的点击事件
    createdTask(){

    },
    // 地图扎点的点击事件
    positioning(){
      // this.$refs.videoWall.open();
    },
    // 切换地图事件
    changeMap(id){
      this.actionMap = id;
      this.personPopup = false;
      this.eventPopup = false;
      this.carPopup = false;
      this.monitoringPopup = false;
      this.addMark()
      switch(id){
        case 1:
          this.addMark("执法人员")
          break;
        case 2:
          this.addMark("普通事件")
          break;
        case 3:
          this.addMark("执法车辆")
          break;
        case 4:
          this.addMark("监控视频")
          break;
        default:
          return;
      }
    },
  },
  mounted(){
    this.$nextTick(()=>{
      this.initMap()
    })
  }
}
</script>
<style lang="scss" scoped>

.map-main {
  width: 100%;
  height: 100%;
  position: relative;
  .left-bg {
    position: absolute;
    left: 20px;
    top: 0;
    width: 11px;
    height: 95%;
    padding: 20px 0 0 0;
    z-index: 600;
    .bgt {
      width: 100%;
      height: 100%;
      background-image: url('../../../assets/images/broadside-bg.png');
      background-size: 100% 100%;
    }
  }
  .right-bg {
    position: absolute;
    top: 0;
    right: 20px;
    width: 11px;
    height: 95%;
    padding: 20px 0;
    z-index: 600;
    .bgt {
      width: 100%;
      height: 100%;
      background-image: url('../../../assets/images/broadside-bg.png');
      background-size: 100% 100%;
    }
  }
  .bottom-bg {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    width: 100%;
    height: 20px;
    z-index: 600;
    .bgt {
      width: 100%;
      height: 100%;
      background-image: url('../../../assets/images/bottom-bg.png');
      background-size: 100% 100%;
    }
  }
  .map-left {
    position: absolute;
    left: 47px;
    top: 10px;
    width: 460px;
    height: 95%;
    z-index: 600;
    box-sizing: border-box;
    background: rgba(216,216,216,0.05);
  }
  .left-image {
    z-index: 600;
    position: absolute;
    left: 527px;
    bottom: 50%;
    width: 40px;
    cursor: pointer;
  }
  .right-image {
    z-index: 600;
    position: absolute;
    right: 527px;
    bottom: 50%;
    width: 40px;
    cursor: pointer;
  }
  .map-right {
    position: absolute;
    right: 47px;
    top: 10px;
    width: 460px;
    z-index: 600;
    // margin: 10px 17px 0 10px;
    // padding: 20px 0;
    box-sizing: border-box;
  }
  .middle-top-left {
    z-index: 600;
    position: absolute;
    left: 537px;
    top: 10px;
    display: flex;
    .input-keyword {
      ::v-deep .el-input {
        background: rgba(0,60,116,0.2);
        box-shadow: inset 0px 0px 6px 0px #00C2FF;
        border-radius: 2px;
        border: 1px solid rgba(181,207,255,0.5);
        .el-input__inner {
          background-color: transparent;
          width: 222px;
          height: 38px;
          color: #fff;
          border: none;
        }
        .el-input__inner::placeholder {
          /* 在这里添加你想要修改的 placeholder 样式 */
          font-size: 14px;
          font-family: Source Han Sans CN-Regular, Source Han Sans CN;
          font-weight: 400;
          color: #D3EEF2;
          line-height: 20px;
        }
      }
      ::v-deep .el-input__suffix {
        line-height: 44px;
        color: #D3EEF2;
        right: 10px;
        cursor: pointer;
        .el-icon-search:before {
          font-size: 24px;
          color: #D3EEF2;
        }
      }
    }
    .laser-positioning,.creation-task {
      // height: 38px;
      margin-left: 8px;
      background: rgba(0,60,116,0.6);
      box-shadow: inset 0px 0px 6px 0px #00C2FF;
      border-radius: 2px;
      border: 1px solid rgba(181,207,255,0.5);
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 9px 13px;
      cursor: pointer;
      span {
        font-size: 14px;
        font-family: Source Han Sans CN-Regular, Source Han Sans CN;
        font-weight: 400;
        color: #D3EEF2;
        line-height: 20px;
        margin-right: 12px;
      }
      img {
        width: 20px;
      }
    }
  }
  .middle-bottom-left {
    position: absolute;
    left: 537px;
    bottom: 40px;
    // width: 200px;
    z-index: 600;
    padding: 5px 10px;
    display: flex;
    flex-direction: column;
    .list{
      margin-top: 10px;
      display: flex;
      align-items: center;
      .leftbg {
        display: flex;
        align-items: center;
        justify-content: center;
        background-image: url('../../../assets/images/iconbg2.png');
        background-size: 100% 100%;
        width: 36px;
        height: 36px;
        cursor: pointer;
        img {
          width: 20px;
        }
      }
      .action-map {
        background-image: url('../../../assets/images/iconbg1.png');
      }
      .rightbg {
        padding-left: 6px;
        margin-left: 2px;
        background-image: url('../../../assets/images/right-icon.png');
        width: 115px;
        height: 36px;
        display: flex;
        align-items: center;
        span {
          font-size: 16px;
          font-family: Source Han Sans CN-Bold, Source Han Sans CN;
          font-weight: 700;
          color: #FFFFFF;
          line-height: 26px;
          text-shadow: 0px 0px 5px #0077FF;
        }
      }
    }
  }
  .middle-bottom-right {
    position: absolute;
    bottom: 40px;
    right: 537px;
    z-index: 600;
    .btn-action {
      display: flex;
      span {
        flex: 1;
        display: inline-block;
        text-align: center;
        padding: 10px 33px;
        font-size: 16px;
        font-family: Source Han Sans CN-Regular, Source Han Sans CN;
        font-weight: 400;
        color: #D3EEF2;
        cursor: pointer;
        background: transparent;
        box-shadow: inset 0px 0px 6px 0px #00C2FF;
        border-radius: 2px 2px 2px 2px;
        opacity: 1;
        border: 1px solid rgba(181,207,255,0.5);
        &:nth-child(1) {
          margin-right: 10px;
        }
      }
      .action {
        color: #fff;
        background-color: rgba(255,125,64,0.8);
        box-shadow: inset 0px 0px 13px 0px #F6B463;
        border-radius: 2px 2px 2px 2px;
        border: 1px solid rgba(181,207,255,0.5);
      }
    }
  }
  

  .showMap {
    width: 100%;
    height: 100%;
  }
  
}

</style>
