<template lang="pug">
  <div class="ol_point">
    <el-container style='padding-left:0px;'>
      <el-aside width='333px' style='height:825px;'>
          <el-card class = "tree-container">
            <div class="ol_point_left_top">
              <div class="ol_point_left_topL">
                <div>资源列表</div>
              </div>
              //- <div style="float:right; margin:5px 5px 0 5px">
              //-   <el-button type="text" size="mini" icon='el-icon-shoucang' @click="treeDataOffClick()"></el-button>
              //- </div>
              <div class="ol_point_left_topR">
                <el-input suffix-icon="el-icon-search" size="small" v-model="searchInput" clearable></el-input>
              </div>
            </div>
            <el-tree class="dic_tree" :data="treeData" ref='tree' :accordion='true' :highlight-current='true' :props="defaultProps" :filter-node-method="filterNode" :default-expand-all='false' @node-click="handleNodeClick" :default-expanded-keys='defaultExpandedKeys' :node-key='nodeKey' >
              <span class="custom-tree-node" style='width:100%;line-height: 18px;' slot-scope="{ node, data }">
                <span v-if="node.data.level == 3" class="el-icon-zhandian  xa-icon"></span>
                <span v-if="node.data.level == 4 && node.data.iconB" class="el-icon-wq-treeIcon1  xa-icon"></span>
                <span v-if="node.data.level == 4 && !node.data.iconB" class="el-icon-wq-treeIcon  xa-icon"></span>
                <span v-if="node.data.level == 5 && node.data.name == '视频监控'" class="el-icon-shipin  xa-icon"></span>
                <span v-if="node.data.level == 5 && node.data.name == '出入口控制'" class="el-icon-churukoukongzhi  xa-icon"></span>
                <span v-if="node.data.level == 5 && node.data.name == '入侵报警'" class="el-icon-ruqinbaojing  xa-icon"></span>
                <span v-if="node.data.level == 5 && node.data.name == '安全检查'" class="el-icon-anquanjiancha  xa-icon"></span>
                <span v-if="node.data.level == 6 && node.data.isDefence" class="el-icon-fangqukuang7  xa-icon"></span>
                <span v-if="node.data.level == 6 && !node.data.isDefence" :class="node.data.icon+'7'" class='xa-icon'></span>
                <span v-if="node.data.level == 7 " :class="node.data.icon+'7'" class='xa-icon'></span>
                <span style="position: relative;" v-if="node.label.indexOf('在线') == -1 && node.label.indexOf('离线') == -1">&nbsp;{{node.label}}<span style="width:25px; height:16px; position: absolute;left: -46px;top: -3px;"></span></span>
                <span style="position: relative;" v-if="node.label.indexOf('在线') > -1">&nbsp;{{node.label.substring(0,node.label.length - 4)}}<span style='color:green;'>[在线]</span><span style="width:25px; height:16px; position: absolute;left: -46px;top: -3px;"></span></span>
                <span style="position: relative;" v-if="node.label.indexOf('离线') > -1">&nbsp;{{node.label.substring(0,node.label.length - 4)}}<span style='color:red;'>[离线]</span><span style="width:25px; height:16px; position: absolute;left: -46px;top: -3px;"></span></span>
                <span style="float:right;">
                  <el-button style="padding:0;" v-if="activeName == 2 && node.data.level == 6" type='text' icon="el-icon-delete" @click="treeDataDeleteClick(node,data)" ></el-button>
                </span>
                span(v-if=" node.data.iconB" class='el-icon-my-treeFlag')
              </span>
            </el-tree>
            <!-- <span class="el-icon-shousuo"></span> -->
          </el-card>
      </el-aside>

      <el-main style="padding:0px;height:825px;">
        <el-card>
          <div class="ol_point_right_button">
            <el-row :span="24" style='padding-top:5px;'>
                <el-col :md='14' :sm="5" class='tier-btn'>
                    <el-button type="primary" size="small" plain :class="[checkedData.tierId===item.id?'active-tier':'']" style="float:left;margin-left:10px;" v-for="item in mapList" :key='item.id' @click="changeMap(item)">{{item.name}}</el-button>
                </el-col>
                <el-col :md='10' :sm="5">
                  <div style="float:right;">
                    <div :class="item.value" style="margin:5px 5px 0 0;" :title="item.name" v-for="item in iconNameListBottom" @click="iconClick(item)"></div>
                  </div>
                </el-col>
            </el-row>
          </div>
            //-   <div class="ol_point_right_button_r">
            //-       <div :class="[transformationSta == 1?'on':'']" @click="transformation(1)">2D</div>
            //-       <div :class="[transformationSta == 2?'on':'']" @click="transformation(2)">3D</div>
            //-   </div>
          <div v-show="transformationSta==1">
            <el-row style="padding-bottom:15px;height:780px;background:#fff;" :span="24">
              <el-col class="resource-container" :style="obj" ref="drag">
                <div id="map" class="map" ref='map'  style="width: 100%;height: 720px;position:relative;"></div>
              </el-col>
            </el-row>
          </div>
          <div class="map_right">
            <div>
              <iframe :src="src" ref="iframe"></iframe>
            </div>
          </div>
        </el-card>
      </el-main>
      <query-detail v-if='queryDetailVisible' ref='queryDetail' @closeQ="closeQueryDetailVisible"></query-detail>
      <no-query-detail v-if='noQueryDetailVisible' ref='noQueryDetail' @closeQ="closeNoQueryDetailVisible"></no-query-detail>
    </el-container>
  </div>

</template>

<script>
import QueryDetail from './query-detail'
import NoQueryDetail from './no-query-detail'
import { getUUID } from '@/util'
import Vue from 'vue'

import 'ol/ol.css'
import { Map, View, layer, Markers } from 'ol'
import { Projection, Transform } from 'ol/proj'
import { getCenter } from 'ol/extent'
import overviewmap from 'ol/control/OverviewMap'
import ImageLayer from 'ol/layer/Image'
import ImageStatic from 'ol/source/ImageStatic'
import { control } from 'ol/control/Control'
import Zoom from 'ol/control/Zoom'
import { DoubleClickZoom, Select } from 'ol/interaction'
// 图上图标相关
import OlFeature from 'ol/Feature'
import OlGeomPoint from 'ol/geom/Point'
import OlLayerVector from 'ol/layer/Vector'
import OlSourceVector from 'ol/source/Vector'
import OlStyleStyle from 'ol/style/Style'
import OlStyleIcon from 'ol/style/Icon'
import LineString from 'ol/geom/LineString'
import Polygon from 'ol/geom/Polygon'

// 用来添加相关文字描述的
import { Text, Fill, Stroke, Circle, Style } from 'ol/style'

import { mapState, mapGetters, mapActions } from 'vuex'

let that
export default {
  name: 'sys-user',
  filters: {
    ellipsis(value) {
      if (!value) return ''
      if (value.length > 20) {
        return value.slice(0, 20) + '...'
      }
      return value
    }
  },
  data() {
    return {
      imgLayerList: [],
      controlList: [],
      imgurl: '',
      transformationSta: 1,
      isCollapse: true,
      urlPath: window.CONFIG.urlPath,
      dataListLoading: false,
      dataListSelections: [],
      addOrUpdateVisible: false,
      queryDetailVisible: false,
      noQueryDetailVisible: false,
      treeData: [],
      listArr: [],
      defaultExpandedKeys: [],
      iconNameListBottom: [],
      defaultProps: {
        children: 'children',
        label: 'name',
        level1: 'level'
      },
      nodeKey: 'id',
      station: {}, //当前选择的站点
      mapList: [], //当前站点的所有层
      stationMap: {}, //当前选择的层
      clickItem: {},
      checkedData: {
        stationId: '',
        stationName: '',
        tierId: '',
        tierName: '',
        resourceId: '',
        sId: localStorage.getItem('stationId')
      },
      currentNode: {},
      dragAble: false,
      list: [],
      obj: 'pointer-events:initial',
      editable: false,
      activeName: '1',
      searchInput: '',
      regionMouse: {
        x: 0,
        y: 0,
        w: 0,
        h: 0,
        status: false
      },
      vectorLayer: [],
      lineVectorLayer: [],
      resolutions: [],
      code: ''
    }
  },
  components: {
    QueryDetail,
    NoQueryDetail
  },
  watch: {
    searchInput(val) {
      this.$refs.tree.filter(val)
    }
  },
  created() {
    that = this
    this.initTreeStationMap()
    this.initResourceTypeDicList()
  },
  methods: {
    // 初始化地图
    initMap(url) {
      this.resolutions = []
      let mapList = this.mapList
      //   let mapsrcList = []
      //   if (mapList != null && mapList.length > 0) {
      //     mapsrcList = mapList.map((e) => e.readPath)
      //   }
      this.imgurl = url
      // 计算静态地图映射到地图上的范围
      let extent = [-1100, 110, 1460, 820]

      let projection = new Projection({
        // 投影
        code: 'xkcd-image',
        units: 'pixels',
        extent: extent
      })
      if (mapList.length > 0) {
        for (var i = 0; i < mapList.length; i++) {
          let layerItem = new ImageLayer({
            id: mapList[i].id,
            source: new ImageStatic({
              url: mapList[i].readPath, //这里添加静态图片的地址
              projection: projection,
              imageExtent: extent
            }),
            visible: false
          })
          this.imgLayerList.push(layerItem)

          let controlItem = new overviewmap({
            className: 'ol-overviewmap myOverview', //鹰眼控件样式
            // 在鹰眼中加载相同坐标系下不同数据源的图层
            layers: [
              new ImageLayer({
                source: new ImageStatic({
                  url: mapList[i].readPath, //这里添加静态图片的地址
                  projection: projection,
                  imageExtent: extent
                })
              })
            ],
            collapseLabel: '\u00BB', //鹰眼控件展开时功能按钮上的标识
            label: '\u00AB', //鹰眼控件折叠时功能按钮上的标识
            collapsed: false //初始为展开方式
          })
          this.controlList.push(controlItem)

          let resolutionItem = 1
          this.resolutions.push(resolutionItem)
        }
      }

      let zoomControl = new Zoom({
        delta: 0.2,
        zoomInTipLabel: '',
        zoomOutTipLabel: ''
      })
      // 大图
      this.map = new Map({
        target: 'map',
        layers: this.imgLayerList,
        controls: [zoomControl],
        resolutions: this.resolutions,
        view: new View({
          projection: projection,
          center: getCenter([0, 0, 0, 0]), // 获取范围的中心坐标。
          zoom: 2.5,
          maxZoom: 5.0,
          minZoom: 1.5,
          extent: [-1100, -100, 2000, 1000] //[minX, minY, maxX, maxY] 控制拖动
        })
      })
      // 删除默认的双击事件
      const dblClickInteraction = this.map
        .getInteractions()
        .getArray()
        .find((interaction) => {
          return interaction instanceof DoubleClickZoom
        })
      this.map.removeInteraction(dblClickInteraction)
      //将鹰眼控件加载到map中
      this.map.addControl(this.controlList[0])

      //点击事件
      this.changeVectorLayer(this.list)

      this.map.on('click', function (evt) {
        let feature = evt.map.forEachFeatureAtPixel(
          evt.pixel,
          function (feature) {
            return feature
          }
        )
        if (feature) {
          for (let i in that.list) {
            let style = that.getPointStyle(
              that.list[i].imageSrc + '.png',
              that.list[i].name
            )
            let style2 = that.getPointStyle(
              that.list[i].imageSrc + '2.png',
              that.list[i].name,
              0.3
            )
            //获取feature对象
            let feature_ = that.vectorLayer
              .getSource()
              .getFeatureById(that.list[i].id)
            //获取红外对射或者振动光纤第二个点的feature对象
            let featureEnd = that.vectorLayer
              .getSource()
              .getFeatureById(that.list[i].key + 'end')
            if (feature_) {
              if (feature_ === feature || featureEnd === feature) {
                //修改选中样式
                feature_.setStyle(style2)
                if (featureEnd) {
                  featureEnd.setStyle(style2)
                }
                that.pointListClick(that.list[i])
              } else {
                //清除选中以外的样式
                feature_.setStyle(style)
                if (featureEnd) {
                  featureEnd.setStyle(style)
                }
              }
            }
          }
        }
      })
    },
    mapClick(feature, item, flag) {
      //默认样式
      let style = this.getPointStyle(item.imageSrc + '.png', item.name)
      //选中样式
      let style2 = this.getPointStyle(item.imageSrc + '2.png', item.name, 0.3)
      //获取feature对象
      let feature_ = this.vectorLayer.getSource().getFeatureById(item.id)
      //获取红外对射或者振动光纤第二个点的feature对象
      let featureEnd = this.vectorLayer
        .getSource()
        .getFeatureById(item.key + 'end')
      if (feature_) {
        if (feature_ === feature || featureEnd === feature) {
          //console.log(feature_)
          //修改选中样式
          feature_.setStyle(style2)
          if (featureEnd) {
            featureEnd.setStyle(style2)
          }
        } else {
          //清除选中以外的样式
          feature_.setStyle(style)
          if (featureEnd) {
            featureEnd.setStyle(style)
          }
        }
      } else {
        //获取新增的feature对象
        let newFeature = this.vectorLayer.getSource().getFeatureById(item.key)
        //获取红外对射或者振动光纤第二个点的feature对象
        let newFeatureEnd = this.vectorLayer
          .getSource()
          .getFeatureById(item.key + 'end')
        if (newFeature) {
          if (newFeature === feature || newFeatureEnd === feature) {
            newFeature.setStyle(style2)
            if (newFeatureEnd) {
              newFeatureEnd.setStyle(style2)
            }
          } else {
            //清除选中以外的样式
            newFeature.setStyle(style)
            if (newFeatureEnd) {
              newFeatureEnd.setStyle(style)
            }
          }
        }
      }
    },
    getPointStyle(src, name, zoom) {
      let style = new OlStyleStyle({
        image: new OlStyleIcon({
          anchor: [0.5, 0.5],
          scale: zoom || 0.4,
          //rotation:0 旋转度
          src: require('@/assets/images/' + src)
        }),
        text: new Text({
          text: name, // 添加文字描述
          font: '14px font-size', // 设置字体大小
          fill: new Fill({
            // 设置字体颜色
            color: 'black'
          }),
          offsetY: 30 // 设置文字偏移量
        })
      })
      return style
    },
    clearLayer() {
      if (this.map) {
        this.map.removeLayer(this.vectorLayer)
        this.map.removeLayer(this.lineVectorLayer)
        this.map.removeInteraction(this.modify)
        return false
      } else {
        return true
      }
    },
    changeVectorLayer(list) {
      if (list) {
        this.list = list
      } else {
        this.clearLayer()
      }
      if (this.clearLayer()) return
      this.lineVectorLayer = new OlLayerVector({
        source: new OlSourceVector({
          features: []
        }),
        style: new OlStyleStyle({
          stroke: new Stroke({
            color: '#409EFF',
            width: 3
          })
        })
      })
      this.map.addLayer(this.lineVectorLayer)

      let lineLastArr = []
      let featuresArr = []
      for (let i in list) {
        if (list[i].imageSrc) {
          //振动光纤和红外线对射
          if (
            list[i].type === 'e670524ecb9e4a03b8ddbc7d91a63b1b' ||
            list[i].type === '4f69755dbc0c45e49c142857286c5669'
          ) {
            let lineFeatures = []
            lineFeatures.push([list[i].xlongit, list[i].ylat])
            lineFeatures.push([list[i].xpoint, list[i].ypoint])
            this.lineVectorLayer
              .getSource()
              .addFeature(new OlFeature(new LineString(lineFeatures)))
            lineLastArr.push(list[i])
          }
          featuresArr.push(this.getFeature(list[i].xlongit, list[i].ylat))
          let style = this.getPointStyle(
            list[i].imageSrc + '.png',
            this.list[i].name
          )
          featuresArr[i].setStyle(style)
          featuresArr[i].setId(list[i].id)
        } else {
          continue
        }
      }

      let LinefeaturesArr = []
      for (let i in lineLastArr) {
        LinefeaturesArr.push(
          this.getFeature(lineLastArr[i].xpoint, lineLastArr[i].ypoint)
        )
        let style = this.getPointStyle(
          lineLastArr[i].imageSrc + '.png',
          lineLastArr[i].name
        )
        LinefeaturesArr[i].setStyle(style)
        LinefeaturesArr[i].setId(lineLastArr[i].key + 'end')
        this.list.push(lineLastArr[i])
      }

      this.vectorLayer = new OlLayerVector({
        source: new OlSourceVector({
          features: featuresArr.concat(LinefeaturesArr)
        })
      })
      this.map.addLayer(this.vectorLayer)
    },
    getFeature(x, y) {
      return new OlFeature({
        type: 'icon',
        geometry: new OlGeomPoint([x, y])
      })
    },
    // 树节点过滤
    filterNode(value, data) {
      if (!value) return true
      return data.name.indexOf(value) !== -1
    },
    handleClick(tab) {
      //左侧tab切换
      if (tab) {
        this.activeName = tab
      }
      if (this.activeName == 1) {
        this.initTreeStationMap()
      } else {
        this.initTreeStationMap(true)
      }
    },
    treeDataDeleteClick(node, data) {
      this.$confirm('确认取消该收藏?', '取消收藏', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        closeOnClickModal: false
      }).then(() => {
        //左侧tree取消收藏按钮
        // console.log(node)
        // console.log(node.parent.childNodes.length, '节点长度')
        // console.log(data)
        let len = node.parent.childNodes.length
        let pid = data.pid
        let tid = data.tierId

        this.$http({
          url: this.$http.adornUrlEq('/liEnshrine/delete'),
          method: 'post',
          data: {
            resourceId: node.data.id,
            stationId: this.checkedData.sId
          }
        }).then((data) => {
          if (data && data.code === 0) {
            this.$message.success('取消收藏成功1111')
            // this.defaultExpandedKeys = [this.treeData[0].id]
            this.initTreeStationMap(true)
            if (len > 1) {
              this.defaultExpandedKeys = [pid]
            } else {
              this.defaultExpandedKeys = [tid]
            }
          }
        })
      })
    },
    treeDataOffClick() {
      //左侧tree收藏按钮
      let node = this.$refs.tree.getCurrentNode()
      // console.log(node)
      if (node.level !== 6) {
        this.$message.warning('只能收藏资源点或防区')
        return
      }
      let dForm = {}
      if (node.isDefence && node.level == 6) {
        //如果是防区
        dForm = {
          resourceId: node.id,
          byx1: '1',
          stationId: this.checkedData.sId
        }
      } else {
        dForm = {
          resourceId: node.id,
          stationId: this.checkedData.sId
        }
      }
      this.$http({
        url: this.$http.adornUrlEq('/liEnshrine/save'),
        method: 'post',
        data: dForm
      }).then((data) => {
        if (data && data.code === 0) {
          if (data.msg === '收藏成功') {
            this.$message.success(data.msg)
          } else {
            this.$message.warning(data.msg)
          }
        }
      })
    },
    pointListClick(item) {
      //监视器列表点击
      //关闭其他窗口
      // this.closeNoQueryDetailVisible()
      if (this.transformationSta === 1) {
        if (
          item.type === 'b6af764f2a6e454490a6b1b3c9057e57' ||
          item.type === 'ece0b8b2db27411886254e81134988a3'
        ) {
          // console.log('1')
          this.queryDetail(item.id)
        } else {
          // console.log('2')
          this.noQueryDetail(item.id)
        }
        // console.log('subCode', item.subCode, typeof (item.subCode))
        // switch (item.subCode) {
        //   case '01' :
        //     //视频监控
        //     this.queryDetail01Visible = true
        //     this.$nextTick(() => {
        //       this.$refs.queryDetail01.init(item.id, this.checkedData.sId)
        //     })
        //     break
        //   case '02' :
        //     //出入口控制
        //     this.queryDetail02Visible = true
        //     this.$nextTick(() => {
        //       this.$refs.queryDetail02.init(item.id, this.checkedData.sId)
        //     })
        //     break
        //   case '03' :
        //     //入侵报警
        //     this.queryDetail03Visible = true
        //     this.$nextTick(() => {
        //       this.$refs.queryDetail03.init(item.id, this.checkedData.sId)
        //     })
        //     break
        //   case '04' :
        //     //安全检查
        //     this.queryDetail04Visible = true
        //     this.$nextTick(() => {
        //       this.$refs.queryDetail04.init(item.id, this.checkedData.sId)
        //     })
        //     break
        //   case '05' :
        //     //电子巡更
        //     this.queryDetail05Visible = true
        //     this.$nextTick(() => {
        //       this.$refs.queryDetail05.init(item.id, this.checkedData.sId)
        //     })
        //     break
        // }
      }
      this.activeChooseResourceBox(item.id)
      this.defaultExpandedKeys = [item.id]
      // this.$refs.tree.setCurrentKey(item.id)
    },
    //初始化站点下的资源点
    initTreeStationMap() {
      this.$http({
        url: this.$http.adornUrl('/liResource/getTreeList'),
        method: 'post',
        data: {
          stationId: this.checkedData.sId,
          name: this.searchInput
        }
      })
        .then((data) => {
          if (data && data.code === 0) {
            this.treeData = data.tree
            console.log('data:', this.treeData)
            if (this.treeData && this.treeData.length > 0) {
              Vue.set(this.treeData[0], 'iconB', true)
            }
            return data
          }
        })
        .then((data) => {
          if (
            this.checkedData.sId &&
            this.treeData &&
            this.treeData.length > 0
          ) {
            // this.defaultExpandedKeys = [data.nodes[0].id]
          }
          this.initStation(this.checkedData.sId)
        })
    },
    initResourceTypeDicList() {
      this.$http({
        url: this.$http.adornUrl('/sysDictionary/getResourceTypeDicList'),
        method: 'get',
        params: { stationId: this.checkedData.sId }
      }).then((data) => {
        if (data && data.code === 0) {
          this.iconNameListBottom = JSON.parse(JSON.stringify(data.list))
          this.iconNameListBottom.forEach((res) => {
            res.value += '3'
          })
        }
      })
    },
    iconClick(item) {
      this.iconNameListBottom.forEach((res) => {
        if (res.id === item.id) {
          if (
            res.value.substring(res.value.length - 1, res.value.length) != 4
          ) {
            res.value = res.value.substring(0, res.value.length - 1) + '4'
          }
        } else {
          if (
            res.value.substring(res.value.length - 1, res.value.length) == 4
          ) {
            res.value = res.value.substring(0, res.value.length - 1) + '3'
          }
        }
      })

      if (
        this.currentNode.level == 5 ||
        (this.currentNode.level == 6 && this.currentNode.isDefence)
      ) {
        this.list = []
        this.currentNode.children.forEach((el) => {
          if (item === null || (item != null && item.id === el.type)) {
            this.list.push(el)
          }
        })

        this.list.forEach((res) => {
          Vue.set(res, 'active', false)
        })
      } else {
        this.showResourceByMapId(item)
      }
      this.clickItem = item
      this.changeVectorLayer(this.list)
    },
    initStation(id) {
      this.$http({
        url: this.$http.adornUrl(`/liStation/getId/${id}`),
        method: 'get',
        params: this.$http.adornParams()
      })
        .then((data) => {
          if (data && data.code === 0) {
            this.station = data.bean
            this.mapList = data.bean.mapList
            if (this.mapList && this.treeData) {
              this.mapList.forEach((element) => {
                element.readPath = this.urlPath + element.filePath
              })
              this.checkedData.stationId = this.station.id
              this.checkedData.stationName = this.station.stationName
              this.checkedData.tierId = !this.mapList[0]
                ? ''
                : this.mapList[0].id
              if (!this.checkedData.tierId) {
                return
              }
              this.isFlag(this.treeData, this.checkedData.tierId)
              if (this.treeData[0]) {
                this.$refs.tree.setCurrentNode(this.treeData[0].children[0])
                this.defaultExpandedKeys = [this.checkedData.tierId]
                this.checkedData.tierName = this.mapList[0].name
                this.stationMap = this.mapList[0]
              }
            }
          }
        })
        .then(() => {
          if (!this.checkedData.tierId) {
            return
          }
          this.showResourceByMapId(null)
          if (!this.map) {
            this.initMap()
            this.imgLayerList[0].setVisible(true) //初始第一个显示
          } else {
            this.changeVectorLayer(this.list)
          }
        })
    },
    isFlag(data, id) {
      data.forEach((res) => {
        if (res.id === id) {
          Vue.set(res, 'iconB', true)
        } else {
          Vue.set(res, 'iconB', false)
        }
        if (res.children) {
          this.isFlag(res.children, id)
        }
      })
    },
    // 改变层级和鹰眼图
    changeImgControl(id) {
      //   console.log('mapid', id)
      let srcIndex = this.imgLayerList.findIndex((e) => {
        return e.values_.id == id
      })
      this.map.removeControl(this.controlList[srcIndex])
      this.map.addControl(this.controlList[srcIndex])
      for (var k = 0; k < this.imgLayerList.length; k++) {
        if (this.imgLayerList[k].values_.id == id) {
          this.imgLayerList[k].setVisible(true)
        } else {
          this.imgLayerList[k].setVisible(false)
        }
      }
    },
    addBox(obj) {
      this.boxVectorLayer = new OlLayerVector({
        source: new OlSourceVector({
          features: []
        }),
        style: new OlStyleStyle({
          stroke: new Stroke({
            color: '#409EFF',
            width: 2
          }),
          fill: new Fill({
            color: 'rgba(0, 0, 255, 0.1)'
          })
        })
      })
      this.map.addLayer(this.boxVectorLayer)
      //创建矩形对象
      let start = [obj.xpoint, obj.ypoint]
      let end = [obj.xlongit, obj.ylat]
      let boxFeature = new OlFeature({
        geometry: new Polygon([
          [start, [start[0], end[1]], end, [end[0], start[1]], start]
        ])
      })
      boxFeature.setId(obj.id + 'box')
      this.boxVectorLayer.getSource().addFeature(boxFeature)
    },
    //线路资源点树节点点击事件
    handleNodeClick(node) {
      // console.log(node)
      this.currentNode = node
      let name = node.name
      let id = node.id
      this.isFlag(this.treeData, id)
      if (node.level !== 7) {
        this.regionMouse = {
          x: 0,
          y: 0,
          w: 0,
          h: 0,
          status: false
        }
      }
      //每次选择节点都先清空资源位
      console.log('选中节点的层级', node)
      if (node.level === 4) {
        this.map.removeLayer(this.boxVectorLayer)
        //层级
        this.checkedData.tierId = id
        this.checkedData.tierName = name
        this.checkedData.stationId = node.stationId
        this.stationMap = node
        // console.log('选中节点的层级id', this.tierId)
        this.showResourceByMapId(null)
        this.changeImgControl(id)
        this.changeVectorLayer(this.list)
      } else if (node.level === 5) {
        this.map.removeLayer(this.boxVectorLayer)
        //资源点类型
        this.list = []
        if (node.children) {
          node.children.forEach((res) => {
            this.list.push(res)
          })
        }

        this.checkedData.tierId = node.tierId
        this.mapList.forEach((res) => {
          if (res.id === node.tierId) {
            this.stationMap = res
          }
        })

        this.list.forEach((res) => {
          Vue.set(res, 'active', false)
        })
        this.changeImgControl(node.tierId)
        this.changeVectorLayer(this.list)
      } else if (node.level === 6) {
        this.map.removeLayer(this.boxVectorLayer)
        //资源点
        let subNode = this.$refs.tree.getNode(node.tierId + node.type).data
        // console.log('当前要选中的层级节点', subNode)
        this.list = []
        subNode.children.forEach((res) => {
          this.list.push(res)
        })
        this.list.forEach((res) => {
          Vue.set(res, 'active', false)
        })
        this.changeVectorLayer(this.list)

        // 点亮对应的marker
        let feature = this.vectorLayer.getSource().getFeatureById(id)
        if (feature) {
          for (let i in this.list) {
            if (feature.id_ == that.list[i].id) {
              this.listItem = that.list[i]
            }
            //flag为ture打开详情或者编辑页面
            this.mapClick(feature, that.list[i], false)
          }
        }
        this.checkedData.resourceId = id
        this.checkedData.tierId = node.tierId

        this.activeChooseResourceBox(id)
        this.pointListClick(node)
        this.changeImgControl(node.tierId)
      }

      this.iconNameListBottom.forEach((res) => {
        if (res.id === this.clickItem.id) {
          if (
            res.value.substring(res.value.length - 1, res.value.length) == 4
          ) {
            res.value = res.value.substring(0, res.value.length - 1) + '3'
          }
        }
      })
    },
    setStyle(item) {
      //选中样式
      let style2 = this.getPointStyle(item.imageSrc + '2.png', item.name, 0.3)
      let feature_ = this.vectorLayer.getSource().getFeatureById(item.id)
      feature_.setStyle(style2)
      let featureEnd = this.vectorLayer
        .getSource()
        .getFeatureById(item.key + 'end')
      if (featureEnd) {
        featureEnd.setStyle(style2)
      }
    },
    //激活选中资源点位节点
    activeChooseResourceBox(id, level) {
      this.list.forEach((res) => {
        if (res.id === id) {
          Vue.set(res, 'active', true)
        } else {
          Vue.set(res, 'active', false)
        }
      })
    },
    //切换层级
    changeMap(map) {
      this.map.removeLayer(this.boxVectorLayer)

      // 切换openlayer
      // console.log(this.map)
      //图层缩放级别设置为默认
      this.map.getView().setZoom(1)
      // console.log(this.imgLayerList)
      this.changeImgControl(map.id)
      this.currentNode = this.$refs.tree.getNode(map.id).data
      // console.log('当前要选中的节点', this.currentNode)
      //将选中的层级树节点设置为选中

      this.$refs.tree.setCurrentNode(this.currentNode)
      // this.defaultExpandedKeys = [this.currentNode.id]
      this.defaultExpandedKeys = [map.id]
      this.isFlag(this.treeData, this.currentNode.id)
      // console.log('当前要选中的节点2', this.currentNode)
      this.checkedData.tierId = map.id
      this.checkedData.tierName = map.name
      this.stationMap = map

      this.iconNameListBottom.forEach((res) => {
        if (res.id === this.clickItem.id) {
          if (
            res.value.substring(res.value.length - 1, res.value.length) == 4
          ) {
            res.value = res.value.substring(0, res.value.length - 1) + '3'
          }
        }
      })
      this.showResourceByMapId(null)
      this.changeVectorLayer(this.list)
    },
    //根据层级id展示当前层级所有的资源点
    showResourceByMapId(item) {
      let tierNode = this.$refs.tree.getNode(this.checkedData.tierId).data
      // console.log('当前要选中的层级节点', tierNode.children)
      this.list = []
      //this.list = tierNode.children[0].children || []

      if (tierNode && tierNode.children) {
        tierNode.children.forEach((type) => {
          type.children.forEach((res) => {
            if (item === null || (item != null && item.id === res.type)) {
              this.list.push(res)
            }
          })
        })
      }
      this.list.forEach((res) => {
        Vue.set(res, 'active', false)
      })
    },
    //详情
    queryDetail(id) {
      this.queryDetailVisible = true
      this.noQueryDetailVisible = false
      this.$nextTick(() => {
        this.$refs.queryDetail.init(id, this.checkedData.sId)
      })
    },
    noQueryDetail(id) {
      this.noQueryDetailVisible = true
      this.queryDetailVisible = false
      this.$nextTick(() => {
        this.$refs.noQueryDetail.init(id, this.checkedData.sId)
      })
    },
    closeQueryDetailVisible() {
      this.queryDetailVisible = false
    },
    closeNoQueryDetailVisible() {
      this.noQueryDetailVisible = false
    },
    transformation(now) {
      //2D3D转换
      this.transformationSta = now
      // console.log('当前节点', this.currentNode)
      // console.log(this.mapList)

      if (now == 1) {
        if (this.currentNode.level == 6) {
          this.$nextTick(() => {
            // console.log(22222222222)
            this.changeImgControl(this.currentNode.tierId)
          })
        } else if (
          this.currentNode.level == 5 ||
          this.currentNode.level == 6 ||
          this.currentNode.level == 7
        ) {
          this.$nextTick(() => {
            // console.log(3333333333333)
            this.changeImgControl(this.currentNode.tierId)
          })
        }
      }
    }
  }
}
</script>
<style lang="scss" scoped>
.dic_tree {
  background: #f4f4f4;
  font-size: 14px;
  transform: translateX(-6px);
  // margin-top: 20px;
}
.dic_tree /deep/ .el-tree-node__content {
  padding-left: 0px !important;
}

.dic_tree /deep/ .el-tree-node {
  position: relative;
  padding-left: 16px;
}

.dic_tree /deep/ .el-tree-node__children {
  padding-left: 8px;
}

.dic_tree /deep/ .el-tree-node :last-child:before {
  height: 38px;
}

.dic_tree /deep/ .el-tree > .el-tree-node:before {
  border-left: none;
}

.tree-container /deep/ .el-tree > .el-tree-node:after {
  border-top: none;
}

.dic_tree /deep/ .el-tree-node:before {
  content: '';
  left: -4px;
  position: absolute;
  right: auto;
  border-width: 1px;
}

.dic_tree /deep/ .el-tree-node:after {
  content: '';
  left: -4px;
  position: absolute;
  right: auto;
  border-width: 1px;
}

.dic_tree /deep/ .el-tree-node:before {
  border-left: 1px dashed #bfbfbf;
  bottom: 0px;
  height: 100%;
  top: -26px;
  width: 1px;
}

.dic_tree /deep/ .el-tree-node:after {
  border-top: 1px dashed #bfbfbf;
  height: 20px;
  top: 12px;
  width: 35px;
  // background: red;
  position: absolute;
  z-index: 1;
}
.tree-container /deep/ .el-tree > .el-tree-node:after {
  border-top: none;
}

.tree-container {
  /* 树的parent,样式自定 */
}
.dic_tree /deep/ .el-tree-node__expand-icon.expanded {
  transform: rotate(0deg);
  -webkit-transform: rotate(0deg);
}
.dic_tree /deep/ .el-icon-caret-right:before {
  background: url('../../../assets/images/add.png');

  content: '';
  display: block;
  width: 18px;
  height: 18px;
  font-size: 18px;
  background-size: 18px;
  // background:skyblue;
}
.dic_tree
  /deep/
  .el-tree-node__expand-icon.expanded.el-icon-caret-right:before {
  background: url('../../../assets/images/sub.png');
  content: '';
  display: block;
  width: 18px;
  height: 18px;
  font-size: 18px;
  background-size: 18px;
  // background:skyblue;
}
.dic_tree /deep/.el-tree-node__content > .el-tree-node__expand-icon {
  padding: 0 2px 0 0;
}

.dic_tree /deep/.el-tree-node__expand-icon.is-leaf::before {
  opacity: 0;
}
.dic_tree /deep/.is-leaf.el-tree-node__expand-icon.el-icon-caret-right {
  // margin-left: -15px !important;
}
</style>

<style lang="scss">
// openlayer 样式
.resource-container {
  .ol-overviewmap {
    left: 89%;
  }
}
</style>
<style lang="scss">
.resource-container {
  width: 100%;
  height: 100%;
  position: relative;
  border: 0px solid black;
  overflow: auto;
  .span-box {
    font-size: 12px;
    border-radius: 5px;
    position: absolute;
  }
}

.tier-btn {
  .active-tier {
    background-color: #409eff;
    color: #ffffff;
  }
}
.ol_point {
  .regionDiv {
    background: #35aff8;
    opacity: 0.5;
    z-index: 10;
  }
  .el-tree {
    background: #f4f4f4;
    font-size: 12px;
    overflow-y: auto;
    height: 750px;
  }
  .el-card__body {
    padding: 0;
  }
  .el-card {
    height: 99%;
    background: #f4f4f4;
  }
  .el-tree {
    padding: 20px 20px 0 0px;
  }
  .el-tree--highlight-current
    .el-tree-node.is-current
    > .el-tree-node__content {
    background-color: #f4f4f4 !important;
    color: #fff !important;
    .el-button--text {
      color: #fff;
    }
    .custom-tree-node {
      background-color: #35aff8 !important;
    }
  }

  .ol_point_left_top {
    height: 50px;
    background: #e1edf4;
    padding-left: 10px;
    .ol_point_left_topL {
      height: 40px;
      padding-top: 10px;
      float: left;
      div {
        height: 40px;
        float: left;
        padding: 0 10px 0 10px;
        line-height: 40px;
        cursor: pointer;
        font-size: 14px;
        border: 1px solid transparent;

        span {
          color: #35aff8;
        }
      }
      div.on {
        background: #fff;
        border: 1px solid #c3c3c3;
        border-bottom: none;
        font-family: Microsoft YaHei;
        font-weight: 400;
      }
    }
    .ol_point_left_topR {
      float: right;
      margin-top: 10px;
      .el-input {
        width: 109px;
      }
    }
  }
  .ol_point_right_button {
    height: 50px;
    width: 100%;
    background: #e3e4e6;
    border-bottom: 1px solid #ccc;
    ol_point_right_button_l {
      margin-left: 20px;
    }
    .el-button--primary.is-plain {
      margin-top: 5px;
      background: #ced1d6;
      border: none;
      color: #656565;
    }
    .tier-btn .active-tier {
      background-color: #409eff;
      color: #ffffff;
    }
    .el-button.is-plain:hover {
      background: #fff;
      border-color: #32a5ea;
      color: #32a5ea;
    }
  }
  .ol_point_right_button_r {
    position: absolute;
    right: 20px;
    top: 60px;
    width: 95px;
    height: 26px;
    z-index: 10;
    font-size: 12px;
    line-height: 25px;
    overflow: hidden;
    border-radius: 13px;
    background: #ced1d6;
    border: 1px solid rgba(0, 0, 0, 0.2);
    box-shadow: 0px 1px 0px 1px rgba(255, 255, 255, 0.25),
      0px 2px 4px 0px rgba(0, 0, 0, 0.1);
    div {
      width: 46px;
      height: 24px;
      float: left;
      text-align: center;
      cursor: pointer;
    }
    div.on {
      background: #45b5f8;
      color: #fff;
      border-radius: 13px;
      border: 1px solid rgba(23, 41, 71, 0.5);
      box-shadow: 0px 1px 0px 0px rgba(255, 255, 255, 0.3),
        0px 2px 0px 0px rgba(255, 255, 255, 0.15);
    }
  }
  .map_right {
    margin-top: 50px;
    iframe {
      width: 1600px;
      height: 680px;
    }
  }
}
.ol-overviewmap .ol-overviewmap-map {
  height: 110px !important;
}
</style>