派生自 wuyushui/SewerAndRainNetwork

chenzeping
2021-04-14 e6fd63ae6632fde723b850100a33827be12e32c6
src/components/panel/topicSearch/SolidWasteSearch.vue
@@ -1,6 +1,6 @@
<template>
  <div class="sewers-search" v-if="judgeVisible">
    <div class="search-title">{{title}}</div>
    <div class="panel-title">{{ title }}</div>
    <div class="search-panel ">
      <el-form ref="form" :model="form" label-width="90px" class="search-form">
        <el-form-item v-for="(item,index) in solidWasteTypeOptions" :key="index" :label="item.label+':'" size="mini"
@@ -15,27 +15,24 @@
            </el-option>
          </el-select>
        </el-form-item>
        <!--  <div class="search-radio">
          <el-radio v-model="radio" label="1">全部</el-radio>
          <el-radio v-model="radio" label="2">正常</el-radio>
          <el-radio v-model="radio" label="3">预警</el-radio>
        </div> -->
        <el-radio-group v-model="form.type" class="levelOfRisk">
          <el-radio  v-for="(item,index) in levelOfRisk" :label="item.value" :key="index"><span class="levelOfRisk-type">{{item.name}}</span></el-radio>
        <el-radio-group v-model="form.transferData" class="levelOfRisk">
          <el-radio v-for="(item,index) in levelOfRisk" :label="item.value" :key="index">
            <span class="levelOfRisk-type">{{ item.name }}</span>
          </el-radio>
        </el-radio-group>
        <div class="rightButtonSearch">
          <el-input  v-model="form.keyword" size="mini"  placeholder="在此输入关键字搜索"></el-input>
          <el-buttom class="el-icon-search" @click="handleSearch"></el-buttom>
          <el-input v-model="form.keyword" size="mini" placeholder="在此输入关键字搜索"></el-input>
          <el-button class="el-icon-search" @click="handleSearch"></el-button>
        </div>
      </el-form>
    </div>
    <el-scrollbar style="height:286.22px">
      <div class="environmental-risk-list" v-for="(item,index) in searchDataDisplay" :key="index" ><!-- v-for="(item,index) in list" :key="index" -->
      <div class="environmental-risk-list" v-for="(item,index) in searchDataDisplay" :key="index"
           @click="setBounced(item)">
        <i class="state"></i>
        <div>
          <h3>###炼化部</h3>
          <p>所属部门:<span>炼化部</span></p>
          <p>所属部门:<span>{{ item.Name }}</span></p>
          <p>风险级别:<span>三级</span></p>
        </div>
      </div>
@@ -46,17 +43,14 @@
<script>
import mapApi from '@/api/mapApi'
import publicBounced from '@/components/BaseNav/PublicBounced/PublicBounced'
import defaultImg from '../../../../public/assets/images/map/solidwaste/gf_green2.png'
export default {
  name: 'SolidWasteSearch',
  props: ['title'],
  data () {
    return {
      levelOfRisk: [
        { name: '全部', value: '1' },
        { name: '正常', value: '2' },
        { name: '预警', value: '3' }
      ],
      judgeVisible: true,
      solidWasteTypeOptions: [{
        value: '1',
@@ -123,35 +117,136 @@
          key: 'length'
        }]
      }],
      radio: '1',
      form: {
        keyword: '固废面板数据查询',
        // 数据的传递
        transferData: ''
        transferData: 1
      },
      levelOfRisk: [
        {
          name: '全部',
          value: 1
        },
        {
          name: '正常',
          value: 2
        },
        {
          name: '预警',
          value: 3
        }
      ],
      // 数据搜索之后,存储数据的
      searchDataDisplay: []
      searchDataDisplay: [],
      instance: null,
      intervals: [],
      layer: window.map,
      L: window.L,
      times: 5,
      colors: ['#98FB98', '#ff0000']
    }
  },
  methods: {
    handlePipelineType (val) {
      // console.log(val)
      this.solidWasteTypeOptions.forEach(item => {
        // console.log(item.value)
        if (val === item.value) {
          // console.log('数据选择相同')
          // 接收数据 用于之后接口数据的调用
          // this.form.transferData = item.value
          this.handleSearch(item.value)
        }
      })
    },
    // 点击搜索实现数据的搜索展示
    async handleSearch (data) {
      // console.log(this.form.keyword)
      const result = await mapApi.getSolidWasteSurveyDetail(data)
      // console.log(result)
      const result = await mapApi.getSolidWaste(data)
      this.searchDataDisplay = result.Result.DataInfo
      // 循环遍历数据 根据进行marker 的创建
      for (let i = 0; i < this.searchDataDisplay.length; i++) {
        // 经纬度 位置
        const positionX = this.searchDataDisplay[i].Latitude
        const positionY = this.searchDataDisplay[i].Longitude
        // 定义类型 用来区分数据的不同 1.接口接口数据来进行数据的判断 2.根据数据类型的不同,进行不同类型的图片显示
        const judgeValue = this.searchDataDisplay[i].StorageQty
        var iconUrl = this.differentTypes(judgeValue)
        const marker = this.L.marker([positionX, positionY], {
          // totransferData: this.searchDataDisplay[i],
          icon: this.L.icon({
            iconUrl: iconUrl,
            iconSize: [30, 30],
            iconAnchor: [15, 15]
          })
        })
        this.layer.addLayer(marker)
      }
    },
    // 不同类型图片封装
    differentTypes (judgeValue) {
      var effectOfChange
      if (judgeValue === 1) {
        effectOfChange = defaultImg
      } else {
        effectOfChange = defaultImg
      }
      return effectOfChange
    },
    // 数据展示,点击进行弹框及点的展示
    async setBounced (val) {
      const pos = [val.Latitude, val.Longitude]
      window.map.flyTo(pos, 11)
      const t1 = setTimeout(async () => {
        const dataValue = {
          StoragePlaceId: val.StoragePlaceId
        }
        // 弹框标题
        const title = val.Name
        // 基本信息 tabs
        const resultBasic = await mapApi.getSolidWasteBaseInfo(dataValue)
        // 详细信息展示 table
        const resultDetailed = await mapApi.getSolidWasteDetail(dataValue)
        // 绑定弹框实例
        this.instance && this.instance.closePopup()
        const PublicBounced = window.Vue.extend(publicBounced)
        this.instance = new PublicBounced().$mount()
        document.body.appendChild(this.instance.$el)
        // document.body.removeChild(instance.$el)
        // 通过方法 向绑定弹框传递数据
        this.instance.setData(title, resultBasic.Result.DataInfo, resultDetailed.Result.DataInfo, 'gufei')
        this.setPanTo(pos, 250)
      }, 1000)
      console.log(t1)
      // clearTimeout(t1)
      this.pulseEffect(pos)
    },
    // flayTo() 弹框的可滑动事件
    setPanTo (pos, value) {
      var position = pos
      position = window.map.latLngToLayerPoint(position)
      position.y += value
      position = window.map.layerPointToLatLng(position)
      window.map.flyTo(position)
    },
    pulseEffect (xy) {
      // 插件 效果实现
      var pulsingIcon = this.L.icon.pulse({
        iconSize: [20, 20],
        color: this.colors[0],
        fillColor: ''
      })
      var picGroupMarker = this.L.marker(xy, { icon: pulsingIcon }).addTo(this.layer)
      var times = this.times
      // 定时
      var timeInterval = setInterval(() => {
        if (times > 0) {
          times--
        } else {
          clearInterval(timeInterval)
          picGroupMarker.remove()
        }
      }, 1000)
    },
    // select的option的数据选择
    handlePipelineType (val) {
      this.solidWasteTypeOptions.forEach(item => {
        if (val === item.value) {
          this.handleSearch(item.value)
        }
      })
    }
  }
}