派生自 wuyushui/SewerAndRainNetwork

chenyabin
2021-04-01 175db8fd0f26c8f7b01c7bc717cbf46cebad9805
Merge remote-tracking branch 'origin/develop' into develop
5个文件已删除
2个文件已添加
15个文件已修改
2 文件已重命名
1763 ■■■■■ 已修改文件
src/Sgis.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mapApi.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mapUrl.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/GasComponents/ECharts.vue 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/GasComponents/EchartsTab.vue 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/GasComponents/GasTab.vue 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/GasComponents/GasTable.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/GasComponents/GasTabs.vue 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/GasComponents/PublicChart.vue 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/GasComponents/PublicTable.vue 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/GasComponents/PublicTabs.vue 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/GasComponents/PublicVideo.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/PublicBounced.vue 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/logic/SolidWaste.js 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/logic/WasteGas.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/logic/WasteWater.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/service/AnimalService.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/icon-btn/IconBtn.vue 221 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/panel/LegendPanel.vue 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/panel/RightSearchPanel.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/panel/topicSearch/GasWasteSearch.vue 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/panel/topicSearch/SolidWasteSearch.vue 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/panel/topicSearch/WaterWasteSearch.vue 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/conf/layers/LayerSolidWaste.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Sgis.js
@@ -49,6 +49,7 @@
 */
const initBasemapsHelper = (map) => {
  // todo 这里进行底图地图的初始化
  console.log(map)
  return new BasemapHelper({ map })
}
/**
src/api/mapApi.js
@@ -20,6 +20,14 @@
  getSolidWasteBaseInfo (data) {
    return axios.get(mapUrl.getSolidWasteBaseInfo, data)
  },
  // 固废详细信息
  getSolidWasteDetail (data) {
    return axios.get(mapUrl.getSolidWasteDetail, data)
  },
  // 固废 数据搜索 暂时
  getSolidWasteSurveyDetail (data) {
    return axios.get(mapUrl.getSolidWasteSurveyDetail, data)
  },
  getWasteGas (data) {
    return axios.get(mapUrl.getWasteGas, data)
  },
src/api/mapUrl.js
@@ -5,12 +5,13 @@
export const GetUser = $HOST + '/user/getUser'
export const getSolidWaste = $HOST + '/wasteSolid/getSolidWaste'
export const getSolidWasteBaseInfo = $HOST + '/wasteSolid/getSolidWasteBaseInfo'
export const getSolidWasteDetail = $HOST + '/wasteSolid/getSolidWasteDetail'
export const getSolidWasteSurveyDetail = $HOST + '/wasteSolid/getSolidWasteSurveyDetail'
export const getWasteGas = $HOST + '/wasteGas/getWasteGas'
export const getSolidWaste = $HOST + '/wasteSolid/getSolidWaste'
export const getWasteWater = $HOST + '/wasteWater/getWasteWater'
export const getSolidWasteBaseInfo = $HOST + '/wasteSolid/getSolidWasteBaseInfo'
export const getCompany = $HOST + '/company/getCompany'
src/components/BaseNav/PublicBounced/GasComponents/ECharts.vue
File was renamed from src/components/BaseNav/PublicBounced/GasComponents/GasECharts.vue
@@ -1,10 +1,18 @@
<template>
    <div style="width:750px;height:260px;" id="echarts" ref="main"></div>
    <div id="Tab">
        <div class="Infomation">
            <el-tag>氮氧化物 : 29.93 标准 : 100</el-tag>
            <el-tag>二氧化硫 : 17.34 标准 : 50</el-tag>
            <el-tag>烟尘 : 6.93 标准 : 30</el-tag>
            <el-tag>废气流量 : 120343.18</el-tag>
        </div>
        <div style="width:750px;height:260px;" id="echarts" ref="main"></div>
    </div>
</template>
<script>
export default {
  name: 'GasECharts',
  name: 'ECharts',
  methods: {
    drawChart: function () {
      const myChart = this.$echarts.init(this.$refs.main)
@@ -88,7 +96,7 @@
        xAxis: {
          type: 'category',
          boundaryGap: false,
          data: ['12:00:01', '12:00:02', '12:00:03', '12:00:04', '12:00:05', '12:00:06', '12:00:07'],
          data: ['2021.01.01', '2021.01.02', '2021.01.03', '2021.01.04', '2021.01.05', '2021.01.06', '2021.01.07'],
          axisLabel: { // x轴全部显示
            rotate: 20,
            interval: 0,
@@ -174,10 +182,23 @@
</script>
<style scoped lang="less">
    .Infomation{
        margin-left: 10px;
    }
    .el-tag{
        height: 25px;
        line-height: 25px;
        margin-right: 10px;
        font-size: 10px;
        background-color: rgba(0, 255, 246, 0.14);
        color: #00d0f9;
        border: none;
        padding: 0 15px;
    }
  #echarts{
    margin: 0;
    padding: 0;
    border: 1px solid #396d83;
    /*margin: 10px 10px 10px 10px;*/
    margin: 10px 10px 10px 10px;
  }
</style>
src/components/BaseNav/PublicBounced/GasComponents/EchartsTab.vue
File was deleted
src/components/BaseNav/PublicBounced/GasComponents/GasTab.vue
File was deleted
src/components/BaseNav/PublicBounced/GasComponents/GasTable.vue
src/components/BaseNav/PublicBounced/GasComponents/GasTabs.vue
File was deleted
src/components/BaseNav/PublicBounced/GasComponents/PublicChart.vue
New file
@@ -0,0 +1,103 @@
<template>
    <div class="win">
        <div class="border_corner border_corner_left_top"></div>
        <div class="border_corner border_corner_right_top"></div>
        <div class="border_corner border_corner_left_bottom"></div>
        <div class="border_corner border_corner_right_bottom"></div>
        <ul class="tab">
            <li @click='tabTaggle("ECharts")'>实试数据</li>
            <li @click='tabTaggle("ECharts")'>日数据</li>
            <li @click='tabTaggle("ECharts")'>月数据</li>
            <li @click='tabTaggle("ECharts")'>人工数据</li>
        </ul>
        <component :is="currentTab"></component>
    </div>
</template>
<script>
import ECharts from './ECharts'
export default {
  name: 'PublicChart',
  components: {
    ECharts
  },
  data () {
    return {
      currentTab: 'ECharts'
    }
  },
  methods: {
    tabTaggle (taggleMenu) {
      this.currentTab = taggleMenu
    }
  }
}
</script>
<style scoped>
    *{
        margin: 0;
        padding: 0;
        list-style: none;
    }
    .win {
        position: relative;
        margin-bottom: 13px;
        background-color: rgba(33, 41, 69,0.9);
        border: 0.8px solid #396d83;
    }
    .border_corner{
        z-index: 999;
        position: absolute;
        width: 10px;
        height: 10px;
        background: rgba(0,0,0,0);
        border: 1.5px solid #47d5ea;
    }
    .border_corner_left_top{
        top: 0;
        left: 0;
        border-right: none;
        border-bottom: none;
    }
    .border_corner_right_top{
        top: 0;
        right: 0;
        border-left: none;
        border-bottom: none;
    }
    .border_corner_left_bottom{
        bottom: 0;
        left: 0;
        border-right: none;
        border-top: none;
    }
    .border_corner_right_bottom{
        bottom: 0;
        right: 0;
        border-left: none;
        border-top: none;
    }
    .tab{
        display: flex;
        border-bottom: 1px solid #396d83;
        margin-bottom: 10px;
    }
    li{
        background-color: #243a55;
        margin: 10px 10px 2px 10px;
        /*padding: 5px 10px;*/
        width: 90px;
        height: 25px;
        line-height: 25px;
        text-align: center;
        border-radius: 5px;
    }
    ul li:hover{
        background-color: #0e639e;
        color: #682000;
        cursor: pointer;
    }
</style>
src/components/BaseNav/PublicBounced/GasComponents/PublicTable.vue
@@ -9,15 +9,15 @@
      <div class="main-video">
        <el-table
            tooltip-effect="dark"
            :data="data"
            :data="displayContentTable2"
        >
          <el-table-column prop="name" label="序号"></el-table-column>
          <el-table-column prop="name" label="类别"></el-table-column>
          <el-table-column prop="date" label="固废名称"></el-table-column>
          <el-table-column prop="address" label="代码"></el-table-column>
          <el-table-column prop="address" label="产生量"></el-table-column>
          <el-table-column prop="name" label="储存量"></el-table-column>
          <el-table-column prop="date" label="产生装置"></el-table-column>
          <el-table-column prop="StoragePlaceId" label="序号"></el-table-column>
          <el-table-column prop="StoragePlaceTypeName" label="类别"></el-table-column>
          <el-table-column prop="StoragePlaceName" label="固废名称"></el-table-column>
          <el-table-column prop="StorageZDMJ" label="代码"></el-table-column>
          <el-table-column prop="StorageZCNL" label="产生量"></el-table-column>
          <el-table-column prop="StorageZCL" label="储存量"></el-table-column>
          <el-table-column prop="StorageType" label="产生装置"></el-table-column>
        </el-table>
      </div>
    </div>
@@ -27,33 +27,22 @@
<script>
export default {
  name: 'PublicTable',
  props: ['requestSolidWasteData'],
  props: ['displayContentTable'],
  data () {
    return {
      data: [{
        date: '2016-05-03',
        name: '王小虎',
        address: '上海市普陀区'
      }, {
        date: '2016-05-02',
        name: '王小虎',
        address: '上海市普陀区'
      }, {
        date: '2016-05-02',
        name: '王小虎',
        address: '上海市普陀区'
      }]
    }
  },
  mounted () {
    this.$nextTick(() => {
      this.getSolidWasteData()
    })
  },
  methods: {
    getSolidWasteData () {
      // const data = requestSolidWasteData
      // console.log(data)
      displayContentTable2: [
        {
          CompanyName: '中韩石化',
          StoragePlaceId: 3,
          StoragePlaceName: '灰渣场',
          StoragePlaceTypeName: '一般固废填埋场',
          StorageType: '粉煤灰、灰渣',
          StorageZCL: '38',
          StorageZCNL: '40.7',
          StorageZDMJ: '10.60798'
        }
      ],
      displayContentTable3: []
    }
  }
}
@@ -71,7 +60,7 @@
  .main-video {
    width: 100%;
    min-height: 195px;
    min-height: 164px;
    video {
      width: 100%;
src/components/BaseNav/PublicBounced/GasComponents/PublicTabs.vue
New file
@@ -0,0 +1,142 @@
<template>
  <!-- 框 -->
  <div class="win">
    <!-- 四个角的边框效果 -->
    <div class="border_corner border_corner_left_top"></div>
    <div class="border_corner border_corner_right_top"></div>
    <div class="border_corner border_corner_left_bottom"></div>
    <div class="border_corner border_corner_right_bottom"></div>
    <div class="main">
      <div class="main-matter">
        <div v-if="value === 'feiqi'">
          <el-row type="flex" class="row-bg row-item-one" justify="space-around">
            <el-col :span="8">监测点名称:{{ setWasteGasdata.Name }}</el-col>
            <el-col :span="8">生产单位:{{ setWasteGasdata.porltName }}</el-col>
            <el-col :span="8">排放类型名称:{{ setWasteGasdata.MonTypeName }}</el-col>
          </el-row>
          <el-row type="flex" class="row-bg" justify="space-around">
            <el-col :span="8">排放去向:{{ setWasteGasdata.EmissDirecti }}</el-col>
            <el-col :span="8">控制级别名称:{{ setWasteGasdata.ContrLevelShowName }}</el-col>
            <el-col :span="8">内/外排口:{{ setWasteGasdata.OrOutPortName }}</el-col>
          </el-row>
        </div>
       <div v-else-if="value === 'gufei'">
         <el-row type="flex" class="row-bg row-item-one" justify="space-around">
           <el-col :span="8">监测点名称:{{ displayContentTab2.StoragePlaceName }}</el-col>
           <el-col :span="8">生产单位:{{ displayContentTab2.StoragePlaceName }}</el-col>
           <el-col :span="8">排放类型加载:{{ displayContentTab2.DesignFloorArea }}</el-col>
         </el-row>
         <el-row type="flex" class="row-bg" justify="space-around">
           <el-col :span="8">排放去向:{{ displayContentTab2.StorageQty }}</el-col>
           <el-col :span="8">控制级别名称:{{ displayContentTab2.SurplusFloorArea }}</el-col>
           <el-col :span="8">内/外排口:{{ displayContentTab2.StorageDate }}</el-col>
         </el-row>
       </div>
        <div v-else-if="value === 'feishui'">
          <el-row type="flex" class="row-bg row-item-one" justify="space-around">
            <el-col :span="8">监测点名称:{{ setWasteGasdata.Name }}</el-col>
            <el-col :span="8">生产单位:{{ setWasteGasdata.porltName }}</el-col>
            <el-col :span="8">排放类型名称:{{ setWasteGasdata.MonTypeName }}</el-col>
          </el-row>
          <el-row type="flex" class="row-bg" justify="space-around">
            <el-col :span="8">排放去向:{{ setWasteGasdata.EmissDirecti }}</el-col>
            <el-col :span="8">控制级别名称:{{ setWasteGasdata.ContrLevelShowName }}</el-col>
            <el-col :span="8">内/外排口:{{ setWasteGasdata.OrOutPortName }}</el-col>
          </el-row>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  name: 'GasTable',
  props: ['displayContentTab', 'value', 'setWasteGasdata'],
  data () {
    return {
      displayContentTab2: []
    }
  },
  mounted () {
    this.$nextTick(() => {
      this.displayContentTab.forEach(item => {
        this.displayContentTab2 = item
        console.log(item)
      })
    })
  }
}
</script>
<style scoped lang="less">
.win {
  position: relative;
  margin-bottom: 13px;
  background-color: rgba(33, 41, 69,0.9);
}
.main {
  width: 100%;
  height: 100%;
  .main-matter{
    font-size: 13px;
    font-weight: normal;
    padding: 10px 6px;
    border: 1px solid #396d83;
    .row-item-one{
      margin-bottom: 7px;
    }
    .el-row {
      width: 100%;
      color: #00d0f9;
      display: flex;
      font-size: 12px !important;
      .el-col{
        flex: 1;
        width: 100%;
        background-color: #243a55;;
        text-align: center;
        line-height: 28px;
        margin-left: 6px;
        border-radius: 4px;
        &:nth-child(1){
          margin-left:0;
        }
      }
    }
  }
}
.border_corner{
  z-index: 999;
  position: absolute;
  width: 10px;
  height: 10px;
  background: rgba(0,0,0,0);
  border: 1.5px solid #47d5ea;
}
.border_corner_left_top{
  top: 0;
  left: 0;
  border-right: none;
  border-bottom: none;
}
.border_corner_right_top{
  top: 0;
  right: 0;
  border-left: none;
  border-bottom: none;
}
.border_corner_left_bottom{
  bottom: 0;
  left: 0;
  border-right: none;
  border-top: none;
}
.border_corner_right_bottom{
  bottom: 0;
  right: 0;
  border-left: none;
  border-top: none;
}
</style>
src/components/BaseNav/PublicBounced/GasComponents/PublicVideo.vue
src/components/BaseNav/PublicBounced/PublicBounced.vue
@@ -6,14 +6,14 @@
    </div>
    <div class="public-bounced-content">
      <div class="public-bounced-content-left">
        <GasTab :displayContent="displayContentTab" ></GasTab>
        <PublicTabs :displayContentTab="displayContentTab" :value="value" :setWasteGasdata="setWasteGasdata"></PublicTabs>
        <div class="public-bounced-content-left-bottom">
          <PublicTable v-if="value === 'gufei'"></PublicTable>
          <GasECharts v-else></GasECharts>
          <PublicChart v-else></PublicChart>
        </div>
      </div>
      <div class="public-bounced-content-right">
        <GasVideo></GasVideo>
        <PublicVideo></PublicVideo>
      </div>
    </div>
  </div>
@@ -22,34 +22,42 @@
<script>
import '@/components/BaseNav/SolidWaste/directive/dir'
import GasTab from '@components/BaseNav/PublicBounced/GasComponents/GasTab'
import PublicTabs from '@components/BaseNav/PublicBounced/GasComponents/PublicTabs'
import PublicTable from '@components/BaseNav/PublicBounced/GasComponents/PublicTable'
import GasECharts from '@components/BaseNav/PublicBounced/GasComponents/GasECharts'
import GasVideo from '@components/BaseNav/PublicBounced/GasComponents/GasVideo'
// import GasTabs from './GasComponents/GasTabs'
import PublicVideo from '@components/BaseNav/PublicBounced/GasComponents/PublicVideo'
import PublicChart from './GasComponents/PublicChart'
export default {
  name: 'PublicBounced',
  components: {
    GasTab,
    PublicTabs,
    PublicTable,
    GasECharts,
    GasVideo
    PublicChart,
    PublicVideo
  },
  data () {
    return {
      setWasteGasdata: '',
      displayContentTitle: '',
      displayContentTab: '',
      flag: false
      displayContentTable: '',
      flag: false,
      value: ''
    }
  },
  methods: {
    setData (data, value) {
      // data.forEach((item, index) => {
      //   // console.log(item.StoragePlaceName)
      //   // this.displayContentTitle = item.StoragePlaceName
      // })
      this.displayContentTab = data
    setData (dataBasic, dataDetailed, value) {
      dataBasic.forEach(item => {
        this.displayContentTitle = item.StoragePlaceName
      })
      this.displayContentTab = dataBasic
      this.displayContentTable = dataDetailed
      this.flag = true
      this.value = value
    },
    setGasData (data, value) {
      this.setWasteGasdata = data
      this.displayContentTitle = data.Name
      this.flag = true
      this.value = value
    },
src/components/LayerController/logic/SolidWaste.js
@@ -36,52 +36,33 @@
      var iconUrl = this.differentTypes(judgeValue)
      const marker = L.marker([positionX, positionY], {
        test: getSolidWasteData[i],
        totransferData: getSolidWasteData[i],
        icon: L.icon({
          iconUrl: iconUrl,
          iconSize: [50, 50],
          iconAnchor: [25, 25]
        })
      })
      marker.bindTooltip(getSolidWasteData[i].Name, {
        permanent: true,
        offset: [0, 14],
        direction: 'bottom',
        className: 'company-bindTooltip'
      })
      layer.addLayer(marker)
    }
  }
  this.bindTooltip = (layer) => {
    return layer.options.test.Name
    return layer.options.totransferData.Name
  }
  this.clickListener = (e) => {
    // 点击marker的pulse()光波
    this.animalService.pulseEffect(e.latlng)
    /* flyTo()弹出框平移事件 */
    // this.setPanTo(e.latlng, 200)
    /* 点击数据的接口请求 */
    this.requestSolidWasteData(e).then(e)
  }
  // 根据点击不同数据 进行接口的数据请求
  this.requestSolidWasteData = async (e) => {
    const dataValue = {
      StoragePlaceId: e.layer.options.test.StoragePlaceId
    }
    const result = await mapApi.getSolidWasteBaseInfo(dataValue)
    // console.log(result)
    const PublicBounced = window.Vue.extend(publicBounced)
    const instance = new PublicBounced()
    instance.$mount()
    document.body.appendChild(instance.$el)
    instance.setData(result.Result.DataInfo, 'gufei')
  }
  // flayTo()
  // this.setPanTo = (pos, value) => {
  //   var position = pos
  //   position = this.map.latLngToLayerPoint(position)
  //   position.y += value
  //   position = this.map.layerPointToLatLng(position)
  //   this.map.flyTo(position)
  // }
  // 不同类型图片封装
  this.differentTypes = (judgeValue) => {
@@ -93,4 +74,32 @@
    }
    return effectOfChange
  }
  // 根据点击不同数据 进行接口的数据请求
  this.requestSolidWasteData = async (e) => {
    // 基本信息展示
    const dataValue = {
      StoragePlaceId: e.layer.options.totransferData.StoragePlaceId
    }
    const resultBasic = await mapApi.getSolidWasteBaseInfo(dataValue)
    // 详细信息展示
    const resultDetailed = await mapApi.getSolidWasteDetail(dataValue)
    const PublicBounced = window.Vue.extend(publicBounced)
    const instance = new PublicBounced()
    instance.$mount()
    document.body.appendChild(instance.$el)
    instance.setData(resultBasic.Result.DataInfo, resultDetailed, 'gufei')
    /* flyTo()弹出框平移事件 */
    this.setPanTo(e.latlng, 200)
  }
  // flayTo()
  this.setPanTo = (pos, value) => {
    var position = pos
    position = window.map.latLngToLayerPoint(position)
    position.y += value
    position = window.map.layerPointToLatLng(position)
    window.map.flyTo(position)
  }
}
src/components/LayerController/logic/WasteGas.js
@@ -56,7 +56,8 @@
    // const result = await mapApi.getWasteGas(dataValue)
    const PublicBounced = window.Vue.extend(publicBounced)
    const instance = new PublicBounced()
    instance.setData(e.layer.options.test)
    instance.setGasData(e.layer.options.test, 'feiqi')
    console.log(e.layer.options.test)
    instance.$mount()
    document.body.appendChild(instance.$el)
  }
src/components/LayerController/logic/WasteWater.js
@@ -52,13 +52,15 @@
  this.clickListener = async (e) => {
    // console.log(e)
    this.animalService.pulseEffect(e.latlng)
    const dataValue = {
      StoragePlaceId: e.layer.options.test.StoragePlaceId
    }
    const result = await mapApi.getWasteWater(dataValue)
    // const dataValue = {
    //   StoragePlaceId: e.layer.options.test.StoragePlaceId
    // }
    // const result = await mapApi.getWasteWater(dataValue)
    // console.log(result)
    const PublicBounced = window.Vue.extend(publicBounced)
    const instance = new PublicBounced()
    instance.setData(result)
    instance.setGasData(e.layer.options.test, 'feishui')
    console.log(e.layer.options.test)
    instance.$mount()
    document.body.appendChild(instance.$el)
  }
src/components/LayerController/service/AnimalService.js
@@ -4,8 +4,9 @@
class AnimalService {
  constructor (config) {
    this.intervals = [] // 定时器列表
    // todo 这种情况一般用 window级的L、map还是传递呢
    this.L = config.L
    this.layer = config.layer
    this.layer = window.map
    this.times = config.times || 5
    this.colors = ['#98FB98', '#ff0000']
  }
src/components/icon-btn/IconBtn.vue
File was deleted
src/components/panel/LegendPanel.vue
@@ -2,13 +2,13 @@
  <div class="legend-panel">
    <transition name="fade">
      <div :class="'legend-content map-background'" v-show="legendControl">
        <div class="legend-content-box" v-for="(item,index) in legendContents" :key="index">
          <p><span>{{ item.title }}</span></p>
          <div :class="index === 5 ? '':'map-under-line'"></div>
        <div class="legend-content-box" v-for="(item,index) in serviceLayers" :key="index">
          <p><span>{{ item.name }}</span></p>
          <div class="map-under-line"></div>
          <ul>
            <li v-for="(ite,inde) in item.items" :key="inde">
            <li v-for="(ite,inde) in item.layers" :key="inde">
              <img :src='ite.legendImage' alt=''>
              <span>{{ ite.legendContent }}</span>
              <span>{{ ite.name }}</span>
            </li>
          </ul>
        </div>
@@ -28,111 +28,12 @@
  data () {
    return {
      // 控制图例 内容的 显示/隐藏
      legendControl: false,
      // 图里存储数据
      legendContents: [
        {
          title: '企业',
          items: [
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '中国石化'
            },
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '油田企业      '
            },
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '炼化企业'
            },
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '销售企业'
            }
          ]
        },
        {
          title: '水情',
          items: [
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '水文站'
            }
          ]
        },
        {
          title: '管线',
          items: [
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '天然气管线'
            },
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '天然气场站'
            },
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '成品油管线'
            },
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '成品油场站'
            }
          ]
        },
        {
          title: '台风',
          items: [
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '台风实测中心'
            },
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '台风实测路径'
            },
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '台风预测中心'
            },
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '台风预测路径'
            },
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '台风当前中心'
            }
          ]
        },
        {
          title: '降水等级(单位:mm)',
          items: [
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '小雨0-5'
            },
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '中雨5-10'
            },
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '大雨10-20'
            },
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '暴雨20-50'
            },
            {
              legendImage: '../.././assets/images/map-pages/setting.png',
              legendContent: '大暴雨50-100'
            }
          ]
        }
      ]
      legendControl: false
    }
  },
  computed: {
    serviceLayers () {
      return this.$store.state.map.serviceLayers.LayerSewersLine
    }
  },
  methods: {
src/components/panel/RightSearchPanel.vue
@@ -96,7 +96,7 @@
      console.log(done)
    },
    selected (val) {
      console.log(val)
      // console.log(val)
      this.topicList.forEach((itm) => {
        itm.checked = val.name === itm.name
      })
src/components/panel/topicSearch/GasWasteSearch.vue
@@ -0,0 +1,244 @@
<template>
  <div class="solidwaste-search" v-if="judgeVisible">
    <div class="search-title">
      <span>废气</span>
      <!--      <span>{{ title }}</span>-->
    </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"
                      class="search-panel-item">
          <el-select style="width: 100%" v-model="form.pipelineType" @change="handlePipelineType"
                     :popper-class="'select-down'">
            <el-option
                v-for="item in solidWasteTypeOptions"
                :key="item.value"
                :label="item.label"
                :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-input v-model="form.keyword" size="mini" placeholder="在此输入关键字搜索">
          <i slot="suffix" class="search-btn el-input__icon el-icon-search" @click="handleSearch"></i>
        </el-input>
        <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>
          <el-radio v-model="radio" label="4">异常</el-radio>
          <el-radio v-model="radio" label="5">停产</el-radio>
        </div>
      </el-form>
      <div>
        <el-card class="box-card" v-for="(item,index) in searchDataDisplay" :key="index">
          <div v-if="total > 3">
            {{ item.CompanyName }}
          </div>
        </el-card>
<!--        <el-pagination-->
<!--            small-->
<!--            layout="prev, pager, next"-->
<!--            :total=total-->
<!--            :current-page=1-->
<!--            class="warnPagination"-->
<!--        >-->
<!--        </el-pagination>-->
      </div>
      <!--      <el-scrollbar style="height:100%">-->
      <!--      <el-card class="footer-page">-->
      <!--        <ul>-->
      <!--          {{ searchDataDisplay }}-->
      <!--          <li v-for="(item,index) in searchDataDisplay" :key="index">-->
      <!--            {{ item.CompanyName }}-->
      <!--          </li>-->
      <!--        </ul>-->
      <!--      </el-card>-->
      <!--          <el-pagination-->
      <!--              small-->
      <!--              @current-change="handlePage"-->
      <!--              :page-size=pageSize-->
      <!--              layout="prev, pager, next"-->
      <!--              :total=total-->
      <!--              :current-page=current-->
      <!--              class="warnPagination"-->
      <!--          >-->
      <!--          </el-pagination>-->
      <!--      </el-card>-->
      <!--      </el-scrollbar>-->
    </div>
  </div>
</template>
<script>
import mapApi from '@/api/mapApi'
export default {
  name: 'SolidWasteSearch',
  props: ['title'],
  data () {
    return {
      judgeVisible: true,
      solidWasteTypeOptions: [{
        value: '1',
        label: '区域',
        options: [{
          value: '1',
          layerName: '固废',
          key: 'pipename',
          label: '全部固废'
        }],
        labelList: [{
          label: '输送介质',
          key: 'mediumtype'
        }, {
          label: '长度(m)',
          key: 'length'
        }]
      }, {
        value: '2',
        label: '企业名称',
        options: [{
          value: '1',
          layerName: '固废',
          key: 'pipename',
          label: '全部固废'
        }],
        labelList: [{
          label: '输送介质',
          key: 'mediumtype'
        }, {
          label: '长度(m)',
          key: 'length'
        }]
      }, {
        value: '3',
        label: '二级单位',
        options: [{
          value: '1',
          layerName: '固废',
          key: 'pipename',
          label: '全部固废'
        }],
        labelList: [{
          label: '输送介质',
          key: 'mediumtype'
        }, {
          label: '长度(m)',
          key: 'length'
        }]
      }, {
        value: '4',
        label: '企业名称',
        options: [{
          value: '1',
          layerName: '固废',
          key: 'pipename',
          label: '全部固废'
        }],
        labelList: [{
          label: '输送介质',
          key: 'mediumtype'
        }, {
          label: '长度(m)',
          key: 'length'
        }]
      }],
      radio: '1',
      form: {
        keyword: '输入关键字'
      },
      searchDataDisplay: [],
      total: 0
    }
  },
  methods: {
    handlePipelineType (val) {
      this.solidWasteTypeOptions.forEach((itm) => {
        if (val === itm.value) {
          this.dataTypeOptions = itm.options
          this.form.pipelineType = itm.label
          this.form.labelList = itm.labelList
        }
      })
      this.form.dataType = this.dataTypeOptions[0].label
      this.form.key = this.dataTypeOptions[0].key
    },
    // 点击搜索实现数据的搜索展示
    async handleSearch () {
      // console.log(this.form.keyword)
      const result = await mapApi.getWasteGas()
      console.log(result)
      this.searchDataDisplay = result.Result.DataInfo
      this.total = result.Result.DataInfo.length
    },
    handleLocation (val) {
      // console.log(val)
      const bound = this.L.geoJSON([val], {}).getBounds()
      var layer = window.serviceLayerHelper.getByLayerId(val.id)
      layer && layer.openPopup()
      this.$store.state.map.map.flyToBounds(bound)
    }
  }
}
</script>
<style lang="less" scoped>
.solidwaste-search {
  position: relative;
  overflow: hidden;
  background-color: #365e60;
  .search-panel {
    background-color: transparent;
    border: 1px solid @background-color-split;
    padding: 10px;
    /deep/ input {
      border-radius: 0;
      background-color: @background-color-split;
      border: solid 1px @color;
      color: @color-gray;
      font-size: 0.01rem;
      .el-select .el-input.is-focus .el-input__inner {
        border-color: @color;
        margin-top: 13px;
      }
    }
    /deep/ input:focus {
      border-color: @color;
    }
  }
  .search-btn {
  }
  /deep/.search-radio {
    margin: 6px 0;
    display: flex;
    flex-wrap: wrap;
    //justify-content: flex-end;
    //align-content: space-between;
    .el-radio {
      color: #ffffff!important;
      line-height: 2;
      .el-radio__label{
        padding-left: 0px;
      }
    }
  }
  .location-btn:hover, .el-input__icon:hover {
    color: @color;
    cursor: pointer;
  }
  .box-card {
    margin: 15px auto;
  }
}
</style>
src/components/panel/topicSearch/SolidWasteSearch.vue
@@ -0,0 +1,234 @@
<template>
  <div class="solidwaste-search" v-if="judgeVisible">
    <div class="search-title">
      <span>固废</span>
      <!--      <span>{{ title }}</span>-->
    </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"
                      class="search-panel-item">
          <el-select style="width: 100%" v-model="form.pipelineType" @change="handlePipelineType"
                     :popper-class="'select-down'">
            <el-option
                v-for="item in solidWasteTypeOptions"
                :key="item.value"
                :label="item.label"
                :value="item.value">
            </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-input v-model="form.keyword" size="mini" placeholder="在此输入关键字搜索">
          <i slot="suffix" class="search-btn el-input__icon el-icon-search" @click="handleSearch"></i>
        </el-input>
      </el-form>
      <el-card class="box-card"
               v-for="(item,index) in searchDataDisplay.slice((currentPage-1)*PageSize,currentPage*PageSize)"
               :key="index">
        <div v-if="totalCount > 0">
          {{ item.CompanyName }}
        </div>
      </el-card>
      <div class="search-pagination">
        <el-pagination
            small
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="currentPage"
            :page-sizes="[1, 2, 3]"
            :page-size="1"
            layout="total, sizes, prev, pager, next, jumper"
            :total='totalCount'>
        </el-pagination>
      </div>
    </div>
    <!--      <el-scrollbar style="height:100%">-->
    <!--      </el-scrollbar>-->
  </div>
</template>
<script>
import mapApi from '@/api/mapApi'
export default {
  name: 'SolidWasteSearch',
  props: ['title'],
  data () {
    return {
      judgeVisible: true,
      solidWasteTypeOptions: [{
        value: '1',
        label: '区域',
        options: [{
          value: '1',
          layerName: '固废',
          key: 'pipename',
          label: '全部固废'
        }],
        labelList: [{
          label: '输送介质',
          key: 'mediumtype'
        }, {
          label: '长度(m)',
          key: 'length'
        }]
      }, {
        value: '2',
        label: '企业名称',
        options: [{
          value: '1',
          layerName: '固废',
          key: 'pipename',
          label: '全部固废'
        }],
        labelList: [{
          label: '输送介质',
          key: 'mediumtype'
        }, {
          label: '长度(m)',
          key: 'length'
        }]
      }, {
        value: '3',
        label: '二级单位',
        options: [{
          value: '1',
          layerName: '固废',
          key: 'pipename',
          label: '全部固废'
        }],
        labelList: [{
          label: '输送介质',
          key: 'mediumtype'
        }, {
          label: '长度(m)',
          key: 'length'
        }]
      }, {
        value: '4',
        label: '企业名称',
        options: [{
          value: '1',
          layerName: '固废',
          key: 'pipename',
          label: '全部固废'
        }],
        labelList: [{
          label: '输送介质',
          key: 'mediumtype'
        }, {
          label: '长度(m)',
          key: 'length'
        }]
      }],
      radio: '1',
      form: {
        keyword: '固废面板数据查询',
        // 数据的传递
        transferData: ''
      },
      searchDataDisplay: [],
      // 默认显示第几页
      currentPage: 1,
      // 总条数,根据接口获取数据长度(注意:这里不能为空)
      totalCount: 1,
      // 个数选择器(可修改)
      pageSizes: [1, 2, 3, 4],
      // 默认每页显示的条数(可修改)
      PageSize: 1
    }
  },
  methods: {
    // 每页显示的条数
    handleSizeChange (val) {
      this.PageSize = val
      this.currentPage = 1
    },
    // 显示第几页
    handleCurrentChange (val) {
      this.currentPage = val
    },
    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)
      this.searchDataDisplay = result.Result.DataInfo
      this.totalCount = result.Result.DataInfo.length
    }
  }
}
</script>
<style lang="less" scoped>
.solidwaste-search {
  position: relative;
  overflow: hidden;
  .search-panel {
    background-color: transparent;
    border: 1px solid @background-color-split;
    padding: 10px;
    /deep/ input {
      border-radius: 0;
      background-color: @background-color-split;
      border: solid 1px @color;
      color: @color-gray;
      font-size: 0.01rem;
      .el-select .el-input.is-focus .el-input__inner {
        border-color: @color;
      }
    }
    /deep/ input:focus {
      border-color: @color;
    }
  }
  .search-btn {
  }
  .search-radio {
    margin: 15px auto;
    display: flex;
    align-items: center;
    justify-content: space-around;
  }
  .location-btn:hover, .el-input__icon:hover {
    color: @color;
    cursor: pointer;
  }
  .box-card {
    margin: 15px auto;
  }
  .search-pagination {
    padding: 0;
    margin: 15px auto;
  }
}
</style>
src/components/panel/topicSearch/WaterWasteSearch.vue
@@ -0,0 +1,244 @@
<template>
    <div class="solidwaste-search" v-if="judgeVisible">
        <div class="search-title">
            <span>废水</span>
            <!--      <span>{{ title }}</span>-->
        </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"
                              class="search-panel-item">
                    <el-select style="width: 100%" v-model="form.pipelineType" @change="handlePipelineType"
                               :popper-class="'select-down'">
                        <el-option
                                v-for="item in solidWasteTypeOptions"
                                :key="item.value"
                                :label="item.label"
                                :value="item.value">
                        </el-option>
                    </el-select>
                </el-form-item>
                <el-input v-model="form.keyword" size="mini" placeholder="在此输入关键字搜索">
                    <i slot="suffix" class="search-btn el-input__icon el-icon-search" @click="handleSearch"></i>
                </el-input>
                <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>
                    <el-radio v-model="radio" label="4">异常</el-radio>
                    <el-radio v-model="radio" label="5">停产</el-radio>
                </div>
            </el-form>
            <div>
                <el-card class="box-card" v-for="(item,index) in searchDataDisplay" :key="index">
                    <div v-if="total > 3">
                        {{ item.CompanyName }}
                    </div>
                </el-card>
                <!--        <el-pagination-->
                <!--            small-->
                <!--            layout="prev, pager, next"-->
                <!--            :total=total-->
                <!--            :current-page=1-->
                <!--            class="warnPagination"-->
                <!--        >-->
                <!--        </el-pagination>-->
            </div>
            <!--      <el-scrollbar style="height:100%">-->
            <!--      <el-card class="footer-page">-->
            <!--        <ul>-->
            <!--          {{ searchDataDisplay }}-->
            <!--          <li v-for="(item,index) in searchDataDisplay" :key="index">-->
            <!--            {{ item.CompanyName }}-->
            <!--          </li>-->
            <!--        </ul>-->
            <!--      </el-card>-->
            <!--          <el-pagination-->
            <!--              small-->
            <!--              @current-change="handlePage"-->
            <!--              :page-size=pageSize-->
            <!--              layout="prev, pager, next"-->
            <!--              :total=total-->
            <!--              :current-page=current-->
            <!--              class="warnPagination"-->
            <!--          >-->
            <!--          </el-pagination>-->
            <!--      </el-card>-->
            <!--      </el-scrollbar>-->
        </div>
    </div>
</template>
<script>
import mapApi from '@/api/mapApi'
export default {
  name: 'SolidWasteSearch',
  props: ['title'],
  data () {
    return {
      judgeVisible: true,
      solidWasteTypeOptions: [{
        value: '1',
        label: '区域',
        options: [{
          value: '1',
          layerName: '固废',
          key: 'pipename',
          label: '全部固废'
        }],
        labelList: [{
          label: '输送介质',
          key: 'mediumtype'
        }, {
          label: '长度(m)',
          key: 'length'
        }]
      }, {
        value: '2',
        label: '企业名称',
        options: [{
          value: '1',
          layerName: '固废',
          key: 'pipename',
          label: '全部固废'
        }],
        labelList: [{
          label: '输送介质',
          key: 'mediumtype'
        }, {
          label: '长度(m)',
          key: 'length'
        }]
      }, {
        value: '3',
        label: '二级单位',
        options: [{
          value: '1',
          layerName: '固废',
          key: 'pipename',
          label: '全部固废'
        }],
        labelList: [{
          label: '输送介质',
          key: 'mediumtype'
        }, {
          label: '长度(m)',
          key: 'length'
        }]
      }, {
        value: '4',
        label: '企业名称',
        options: [{
          value: '1',
          layerName: '固废',
          key: 'pipename',
          label: '全部固废'
        }],
        labelList: [{
          label: '输送介质',
          key: 'mediumtype'
        }, {
          label: '长度(m)',
          key: 'length'
        }]
      }],
      radio: '1',
      form: {
        keyword: '输入关键字'
      },
      searchDataDisplay: [],
      total: 0
    }
  },
  methods: {
    handlePipelineType (val) {
      this.solidWasteTypeOptions.forEach((itm) => {
        if (val === itm.value) {
          this.dataTypeOptions = itm.options
          this.form.pipelineType = itm.label
          this.form.labelList = itm.labelList
        }
      })
      this.form.dataType = this.dataTypeOptions[0].label
      this.form.key = this.dataTypeOptions[0].key
    },
    // 点击搜索实现数据的搜索展示
    async handleSearch () {
      // console.log(this.form.keyword)
      const result = await mapApi.getWasteWater()
      console.log(result)
      this.searchDataDisplay = result.Result.DataInfo
      this.total = result.Result.DataInfo.length
    },
    handleLocation (val) {
      // console.log(val)
      const bound = this.L.geoJSON([val], {}).getBounds()
      var layer = window.serviceLayerHelper.getByLayerId(val.id)
      layer && layer.openPopup()
      this.$store.state.map.map.flyToBounds(bound)
    }
  }
}
</script>
<style lang="less" scoped>
    .solidwaste-search {
        position: relative;
        overflow: hidden;
        /*background-color: #365e60;*/
        .search-panel {
            background-color: transparent;
            border: 1px solid @background-color-split;
            padding: 10px;
            /deep/ input {
                border-radius: 0;
                background-color: @background-color-split;
                border: solid 1px @color;
                color: @color-gray;
                font-size: 0.01rem;
                .el-select .el-input.is-focus .el-input__inner {
                    border-color: @color;
                    margin-top: 13px;
                }
            }
            /deep/ input:focus {
                border-color: @color;
            }
        }
        .search-btn {
        }
        /deep/.search-radio {
            margin: 6px 0;
            display: flex;
            flex-wrap: wrap;
            //justify-content: flex-end;
            //align-content: space-between;
            .el-radio {
                color: #ffffff!important;
                line-height: 2;
                .el-radio__label{
                    padding-left: 0px;
                }
            }
        }
        .location-btn:hover, .el-input__icon:hover {
            color: @color;
            cursor: pointer;
        }
        .box-card {
            margin: 15px auto;
        }
    }
</style>
src/conf/layers/LayerSolidWaste.js
@@ -2,6 +2,7 @@
 * 固废图层
 * @type {string}
 */
export const LayerSolidWaste = {
  code: 'solidWaste',
  name: '固废',