派生自 wuyushui/SewerAndRainNetwork

yangdelong
2021-05-30 4adfa4774e09f3b388335bb8dee5dea518856e5b
Merge remote-tracking branch 'origin/develop' into develop
1个文件已删除
8个文件已添加
26个文件已修改
2 文件已重命名
1822 ■■■■ 已修改文件
dist.zip 补丁 | 查看 | 原始文档 | blame | 历史
public/assets/governEquipment.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/assets/images/map-pages/title_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
public/assets/images/map-pages/title_bg2.png 补丁 | 查看 | 原始文档 | blame | 历史
public/assets/images/map/governEquipment/govern_green.png 补丁 | 查看 | 原始文档 | blame | 历史
src/App.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/host.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mapApi.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mapUrl.js 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/logic/GovernEquipment.js 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/logic/SourcesPollution.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/logic/WasteGas.js 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/logic/WasteWater.js 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/modules/LcServiceLayer.vue 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/PublicDataStandard.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/PublicSector.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/WasteWater/PublicTabs.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/WasteWater/WasteWaterDayChart.vue 287 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/WasteWater/WasteWaterHoursChart.vue 271 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/WasteWater/WasteWaterIndex.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/WasteWater/WasteWaterRealChart.vue 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/enterprise-emergency/events-reported/EventsReported.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/enterprise-emergency/events-reported/ReportLocationPoint.vue 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/enterprise-emergency/events-reported/ReportLocationSearch.vue 238 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/enterprise-emergency/events-reported/ReportLocationSection.vue 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/helpers/MapManager.js 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/panel/RightSearchPanel.vue 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/panel/topicSearch/WasteGasSearch.vue 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/panel/topicSearch/WasteWaterSearch.vue 86 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/panel/topicSearch/enterprise-emergency/EventQuery.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/table/components/tabHandover.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/conf/Constants.js 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/conf/Topic.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/conf/layers/LayerEnvRisk.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/utils.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/popup/DynamicHeader/DynamicTable.vue 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/popup/DynamicHeader/TableColumn.vue 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dist.zip
Binary files differ
public/assets/governEquipment.json
New file
@@ -0,0 +1,22 @@
[
  {
    "no": 0,
    "company": "扬子石化",
    "plate": "炼油板块",
    "unitName": "芳烃厂、炼油厂",
    "governName": "硫磺回收治理设施",
    "Longitude": 118.7936111111,
    "Latitude": 32.2583305556,
    "status": 1
  },
  {
    "no": 1,
    "company": "中韩石化",
    "plate": "炼油板块",
    "unitName": "炼油二部",
    "governName": "催化裂化治理设施",
    "Longitude": 114.44016,
    "Latitude": 30.65305,
    "status": 1
  }
]
public/assets/images/map-pages/title_bg.png
public/assets/images/map-pages/title_bg2.png
public/assets/images/map/governEquipment/govern_green.png
src/App.vue
@@ -29,5 +29,9 @@
  -ms-overflow-style: none;
  font-size: 12px;
}
.popoverBoxStyle{
  border: 0.00521rem solid #00fff6;
  box-shadow: 0 0 0.03rem #00fff6;
  background-color: rgba(0, 16, 30, 0.8) !important;
}
</style>
src/api/host.js
@@ -4,10 +4,11 @@
import { getSchemeHost } from '../utils/tools'
export const $HOST = getSchemeHost()
// 环保二期
export const $HOSTII = 'http://10.246.162.140:8080'
// 管线分析-线上
// export const $HOSTANALYSE = 'http://xearth.cn:6202'
export const $HOSTANALYSE = 'http://10.238.235.179:6202'
// 管线分析-本地
// export const $HOSTANALYSE = 'http://10.238.105.124:8089'
src/api/mapApi.js
@@ -31,7 +31,7 @@
  },
  // 废气点加载
  getWasteGas (data) {
    return axios.get(mapUrl.getWasteGas, data)
    return axios.post(mapUrl.getWasteGas, qs.stringify(data), { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' })
  },
  // 废气明细表
  getWasteGasDetails (data) {
@@ -54,7 +54,7 @@
    return axios.get(mapUrl.getWasteWaterMonitoringDetails, data)
  },
  // 废水日数据和小时数据及明细表
  getQueryOnlineMonData (data, setHeaders) {
  getQueryOnlineMonData (data) {
    return axios.post(mapUrl.getQueryOnlineMonData, qs.stringify(data), { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' })
  },
  // 废水人工数据
src/api/mapUrl.js
@@ -1,7 +1,7 @@
/**
 * 该文件配置接口的URL地址
 */
import { $HOST, $HOSTANALYSE } from './host'
import { $HOST, $HOSTII, $HOSTANALYSE } from './host'
export const GetUser = $HOST + '/user/getUser'
@@ -12,18 +12,18 @@
export const getSolidWasteSurveyDetail = $HOST + '/wasteSolid/getSolidWasteSurveyDetail'
// 废气
export const getWasteGas = $HOST + '/wasteGas/getWasteGas'
export const getWasteGas = $HOSTII + '/EPInterface/DataService/EPMapService.asmx/ObtainningConInfo'
export const getWasteGasDetails = $HOST + '/wasteGas/getWasteGasMonitoringDetails'
export const DataItems = $HOST + '/wasteGas/RTDB/DataItems' // 废气实时数据
export const getWasteGasMonData = $HOST + '/wasteGas/QueryOnlineMonData'
export const getWasteGasManualData = $HOST + '/wasteGas/QueryLabMonData'
// 废水
export const getWasteWater = 'http://10.246.162.140:8080/EPInterface/DataService/EPMapService.asmx/ObtainningConInfo' // 废水点信息
export const getWasteWater = $HOSTII + '/EPInterface/DataService/EPMapService.asmx/ObtainningConInfo' // 废水点信息
export const getWasteWaterMonitoring = $HOST + '/wasteWater/getWasteWaterMonitoring' // 废水监测数据
export const getWasteWaterMonitoringDetails = $HOST + '/wasteWater/getWasteWaterMonitoringDetails' // 废水监测数据明细表
export const getQueryOnlineMonData = 'http://10.246.162.140:8080/EPInterface/DataService/EPMapService.asmx/QueryOnlineMonData' // 废水日数据小时数据及明细表数据
export const getQueryLabMonData = 'http://10.246.162.140:8080/EPInterface/DataService/EPMapService.asmx/QueryLabMonData' // 人工数据
export const getQueryOnlineMonData = $HOSTII + '/EPInterface/DataService/EPMapService.asmx/QueryOnlineMonData' // 废水日数据小时数据及明细表数据
export const getQueryLabMonData = $HOSTII + '/EPInterface/DataService/EPMapService.asmx/QueryLabMonData' // 人工数据
export const getDataItems = $HOST + '/wasteWater/RTDB/DataItems' // 实时数据
// 公司
src/components/LayerController/logic/GovernEquipment.js
New file
@@ -0,0 +1,93 @@
/**
 * 污染源
 */
// 信息组件
const GovernEquipmentIndex = require('../../base-page/RiskSource/RiskSourceIndex.vue').default
// 使用封装方法
const AnimalService = require('../service/AnimalService').default
// 请求接口数据
const mapApi = require('../../../api/mapApi').default
// 公共方法 panTo() 引用
const { setPanTo } = require('../../../utils/utils')
const governGreen = '/assets/images/map/governEquipment/govern_green.png'
module.exports = function () {
  /**
   * 初始化并加载图层
   * @param L leaflet对象
   */
  this.init = async (layer, L) => {
    this.animalService = new AnimalService({
      L: L,
      layer: layer
    })
    const data = await mapApi.getGovernEquipment()
    for (let i = 0; i < data.length; i++) {
      const postion = [data[i].Latitude, data[i].Longitude] // 坐标
      const iconUrl = this.governIconUrl(data[i].status) // 治理设施图标
      const marker = L.marker(postion, {
        totransferData: data[i],
        icon: L.icon({
          iconUrl: iconUrl,
          iconSize: [30, 30],
          iconAnchor: [15, 15]
        })
      })
      layer.addLayer(marker)
    }
  }
  /**
   * 提示窗
   * @param layer
   * @returns {string}
   */
  this.bindTooltip = (layer) => {
    return layer.options.totransferData.governName
  }
  /**
   * 信息弹窗
   * @param e
   */
  this.clickListener = (e) => {
    // 脉冲效果
    this.animalService.pulseEffect(e.latlng)
    // 信息弹窗平移
    setPanTo(e.latlng, 200)
    // 弹框标题
    const title = e.layer.options.totransferData.Name
    window.$layer.open({
      content: {
        comp: GovernEquipmentIndex, // 组件
        parent: this, // 父组件
        data: { // 传递的参数
          riskSourceId: e.layer.options.totransferData.no
        }
      },
      title: title // 标题
    })
  }
  /**
   * 治理设施图标配置
   * @param t
   * @returns {string}
   */
  this.governIconUrl = (t) => {
    let iconUrl = null
    switch (t) {
      case 1:
        iconUrl = governGreen
        break
      case 2:
        iconUrl = ''
        break
      default:
        iconUrl = ''
        break
    }
    return iconUrl
  }
}
src/components/LayerController/logic/SourcesPollution.js
File was deleted
src/components/LayerController/logic/WasteGas.js
@@ -26,10 +26,22 @@
      L: L,
      layer: layer
    })
    const res = await mapApi.getWasteGas()
    // console.log(res)
    const param = {
      companyId: 3900100145, // 企业编码
      id: '',
      monType: 2, // 废气
      userCode: 'wenchun.deng', // 用户名称
      monDuration: '',
      epName: '',
      secdDeptId: '',
      contrLevel: '',
      dataStatus: '',
      dataFlag: '',
      runStatus: '',
      emissTypeId: ''
    }
    const res = await mapApi.getWasteGas(param)
    const data = res.Result.DataInfo || {}
    // console.log(data)
    for (let i = 0; i < data.length; i++) {
      // 经纬度 位置
      const positionX = data[i].Latitude
src/components/LayerController/logic/WasteWater.js
@@ -27,11 +27,11 @@
      L: L,
      layer: layer
    })
    const res = await mapApi.getWasteWater({
      companyId: 3900100145, // 企业名称
    const param = {
      companyId: 3900100145, // 企业编码
      id: '',
      monType: 1, // 值为1查询废水
      userCode: 'wenchun.deng', // 角色名称
      monType: 1, // 废水
      userCode: 'wenchun.deng', // 用户名称
      monDuration: '',
      epName: '',
      secdDeptId: '',
@@ -40,7 +40,8 @@
      dataFlag: '',
      runStatus: '',
      emissTypeId: ''
    })
    }
    const res = await mapApi.getWasteWater(param)
    const data = res.Result.DataInfo || {}
    for (let i = 0; i < data.length; i++) {
      // 经纬度 位置
@@ -54,7 +55,7 @@
        totransferData: data[i],
        icon: L.icon({
          iconUrl: iconUrl,
          iconSize: [35, 35],
          iconSize: [30, 30],
          iconAnchor: [15, 15]
        })
      })
src/components/LayerController/modules/LcServiceLayer.vue
@@ -7,17 +7,17 @@
                    <i class="downUp el-icon-caret-bottom" @click="item.isShow=!item.isShow" :class="item.isShow?'':'active'" ></i><!-- el-icon-arrow-down -->
                    <!-- 一级图层遍历 -->
                    <div style="padding-left:25px;padding-top:10px;color:#fff;font-size: 16px;">
                        <input type="checkbox"  :class="item.type==1?'active':''" :name="'wmsLayer_'+item.code" :checked="item.checked" :value="item.code" @change="swAllLayers(item)"/>{{ item.name }}
                        <input type="checkbox" :class="{ 'active': item.type === 1 }" :name="'wmsLayer_'+item.code" :checked="item.checked" :value="item.code" @change="swAllLayers(item)"/>{{ item.name }}
                    </div>
                    <div class="layerbox-item" v-show="item.isShow" >
                        <!-- 二级图层遍历 -->
                        <div class="basemap-layer-item" v-for="(itm,index2) in item.layers" :key="index2" :class="!itm.layers?'felxs':''" >
                            <input type="checkbox" :class="itm.type==1?'active':''" :name="'wmsSublayers_'+item.code+'_'+itm.code" :checked="itm.checked" :value="itm.code" @change="swAllLayers(itm)"/>{{ itm.name }}
                            <input type="checkbox" :class="{ 'active': itm.type === 1 }" :name="'wmsSublayers_'+item.code+'_'+itm.code" :checked="itm.checked" :value="itm.code" @change="swAllLayers(itm)"/>{{ itm.name }}
                            <!-- 三级图层遍历 -->
                            <div class="layerbox-item-3" v-show="itm.layers">
                                <div class="basemap-layer-item" v-for="(layer,index3) in itm.layers" :key="index3">
                                    <input type="checkbox"
                                           :class="layer.type==1?'active':''"
                                           :class="{ 'active': layer.type === 1 }"
                                           :name="'wmsSublayers_'+item.code+'_'+layer.code"
                                           :checked="layer.checked"
                                           :value="layer.code"
@@ -36,7 +36,7 @@
<script>
import LcServiceLayerFilter from '@components/LayerController/modules/LcServiceLayerFilter'
import bus from '@/eventBus'
export default {
  name: 'LcServiceLayer',
  components: { LcServiceLayerFilter },
@@ -68,6 +68,8 @@
      } else {
        this.toggleLayer(item)
      }
      /* <<<<<<< HEAD
      bus.$emit('changeSearchBar', item)
      this.serviceLayers.forEach(function (item1, index1) {
        if (item1.layers) {
          item1.istrue = 0
@@ -112,6 +114,7 @@
          // console.log(item1.layers.length, item1.istrue, item1.isfalse, item1.type)
        }
      })
>>>>>>> de7390c66ef3e3fe316e804495a78d05a01f0160 */
      // console.log(this.serviceLayers)
    },
    swLayers (configs, checked) {
@@ -126,6 +129,30 @@
        }
      }
    },
    setLayerType (configs, checkedSum) {
      if (configs) {
        for (let i = 0, len = configs.length; i < len; ++i) {
          const config = configs[i]
          const checked = config.checked
          if (config.layers) {
            checkedSum = this.setLayerType(config.layers, checkedSum || 0)
            if (checkedSum === config.layers.length) {
              config.type = 2
              config.checked = true
            } else if (checkedSum === 0) {
              config.type = 0
              config.checked = false
            } else {
              config.type = 1
            }
            checkedSum = 0
            continue
          }
          checkedSum = checkedSum + (checked ? 1 : 0)
        }
        return checkedSum
      }
    },
    toggleLayer (itm) {
      if (itm.checked) {
        window.layerFactory.show(itm)
@@ -134,6 +161,15 @@
      }
      // this.updateWms()
    }
  },
  watch: {
    serviceLayers: {
      handler: function (val) {
        this.setLayerType(val, 0)
      },
      immediate: true,
      deep: true
    }
  }
}
</script>
src/components/base-page/PublicDataStandard.vue
@@ -7,7 +7,7 @@
      <!--      <span class="grid-content">废气流量 : <i style="color: #e8ee0b">120343.18</i></span>-->
      <span class="grid-content" v-for="item in dataStandard" :key="item.current.name">{{ item.current.name }} :
        <i style="color: #e8ee0b">{{ item.current.val }}</i>  {{
          item.standard.name ? item.standard.name + ':' : ''
          item.standard.name && item.current.name.indexOf('流量') === -1 ? item.standard.name + ':' : ''
        }} <i style="color: #fff">{{ item.standard.val }}</i></span>
    </div>
  </div>
@@ -16,6 +16,11 @@
<script>
export default {
  name: 'PublicDataStandard',
  watch: {
    dataStandard (val, oldVal) {
      this.dataStandard = val
    }
  },
  props: {
    dataStandard: {
      type: Array,
@@ -31,12 +36,12 @@
.animation {
  .information {
    .grid-content {
      padding: 0.02rem;
      background-color: #2e4967;
      padding: 0.03rem 0.08rem 0.03rem 0.08rem;
      text-align: center;
      border-radius: 0.02rem;
      line-height: 0.15rem;
      margin: 0 0.05rem;
      margin: 0 0.03rem;
      box-shadow: 0 0 10px rgba(129,211,248,.35) inset;
    }
  }
}
src/components/base-page/PublicSector.vue
@@ -31,7 +31,6 @@
  .public-bounced-content {
    padding: 0.05rem;
    display: flex;
    .public-bounced-content-left {
    }
src/components/base-page/WasteWater/PublicTabs.vue
@@ -8,12 +8,12 @@
      <div class="main-matter">
        <div>
          <ul>
            <li>监测点名称:{{ storagePlaceId.Name }}</li>
            <li>生产单位:{{ storagePlaceId.porltName }}</li>
            <li>排放类型名称:{{ storagePlaceId.MonTypeName }}</li>
            <li>排放去向:{{ storagePlaceId.EmissDirecti }}</li>
            <li>控制级别名称:{{ storagePlaceId.ContrLevelShowName }}</li>
            <li>内/外排放口:{{ storagePlaceId.OrOutPortName }}</li>
            <li><span class="namer">监测点名称:</span>{{ storagePlaceId.Name }}</li>
            <li><span class="namer">生产单位:</span>{{ storagePlaceId.porltName }}</li>
            <li><span class="namer">排放类型名称:</span>{{ storagePlaceId.MonTypeName }}</li>
            <li><span class="namer">排放去向:</span>{{ storagePlaceId.EmissDirecti }}</li>
            <li><span class="namer">控制级别名称:</span>{{ storagePlaceId.ContrLevelShowName }}</li>
            <li><span class="namer">内/外排放口:</span>{{ storagePlaceId.OrOutPortName }}</li>
          </ul>
        </div>
      </div>
@@ -60,14 +60,18 @@
      li {
        margin-bottom: 0.04rem;
        text-align: center;
        min-width: 31%;
        background-color: #243a55;
        color: #00d0f9;
        box-shadow: 0 0 10px rgba(129,211,248,.35) inset;
        color: #00fff6;
        border-radius: 0.02rem;
        font-size: 0.08rem;
        line-height: 0.09rem;
        padding: 0.03rem .5%;
        .namer{
          display: inline-block;
          width: .6rem;
          text-align: right;
        }
      }
    }
src/components/base-page/WasteWater/WasteWaterDayChart.vue
@@ -1,5 +1,5 @@
<template>
    <div class="echarts-box">
    <div id="wasteWaterDayChartBox" class="echarts-box">
        <div class="tab-scroll">
            <PublicDataStandard :dataStandard="dataStandard"></PublicDataStandard>
        </div>
@@ -9,11 +9,18 @@
            <span class="demonstration">结束时间:</span>
            <el-date-picker v-model="formData.timeEnd" value-format="yyyy-MM-dd" type="datetime" size="mini"></el-date-picker>
            <span class="demonstration">采样点数:</span>
            <el-select v-model="formData.region" placeholder="请选择" size="mini">
            <el-select class="selectBox" v-model="formData.region" placeholder="请选择" size="mini">
                <el-option v-for="(item,index) in formData.regionList" :key="index" :label="item" :value="item"></el-option>
            </el-select>
            <el-button @click="querySearch()">查询</el-button>
            <el-button>明细表</el-button>
            <el-popover
                placement="top"
                width="100%"
                popper-class="popoverBoxStyle"
                trigger="click">
              <dynamic-table :tableData="tableData" :tableHeader="tableConfig" v-if="tableData"></dynamic-table>
              <el-button slot="reference" id="mingxiBtn">明细表</el-button>
            </el-popover>
        </div>
        <div class="echarts-chart">
            <div ref="echartsDay"></div>
@@ -26,56 +33,19 @@
import dayjs from 'dayjs'
import PublicDataStandard from '../PublicDataStandard'
import mapApi from '@/api/mapApi'
import DynamicTable from '../../../views/popup/DynamicHeader/DynamicTable' // 多级表头
export default {
  name: 'WasteWaterDayChart',
  components: {
    PublicDataStandard
    PublicDataStandard,
    DynamicTable
  },
  data () {
    return {
      // tab栏传递接收数据
      dataStandard: [
        {
          current: {
            name: '氮氧化物',
            val: 29.93
          },
          standard: {
            name: '标准',
            val: 100
          }
        },
        {
          current: {
            name: '二氧化硫',
            val: 17.34
          },
          standard: {
            name: '标准',
            val: 50
          }
        },
        {
          current: {
            name: '烟尘',
            val: 6.93
          },
          standard: {
            name: '标准',
            val: 30
          }
        },
        {
          current: {
            name: '废气流量',
            val: 120
          },
          standard: {
            name: '',
            val: null
          }
        }],
      dataStandard: [],
      tableData: null,
      formData: {
        region: '25',
        regionList: [25, 50, 75, 100],
@@ -86,7 +56,98 @@
      dataType: 1,
      jcdID: 1,
      bzz: null,
      bzzList: []
      bzzList: [],
      // 表头数据
      tableConfig: [
        {
          id: 100,
          label: '排放点',
          prop: 'OnLineMonEmissPointName'
        },
        {
          id: 200,
          label: '监测时间',
          prop: 'MonTimeStr'
        },
        {
          id: 300,
          label: 'COD',
          prop: 'PoltmtrlName',
          children: [
            {
              id: 310,
              label: '实测排放量(kg/h)',
              prop: 'COD_EmissQty'
            },
            {
              id: 320,
              label: '实测浓度(mg/l)',
              prop: 'COD_MonQty'
            },
            {
              id: 330,
              label: '标准值(mg/l)',
              prop: 'COD_StdValue'
            }
          ]
        },
        {
          id: 400,
          label: '氨氮',
          prop: 'PoltmtrlName',
          children: [
            {
              id: 410,
              label: '实测排放量(kg/h)',
              prop: '氨氮_EmissQty'
            },
            {
              id: 420,
              label: '实测浓度(mg/l)',
              prop: '氨氮_MonQty'
            },
            {
              id: 430,
              label: '标准值(mg/l)',
              prop: '氨氮_StdValue'
            }
          ]
        },
        {
          id: 500,
          label: 'PH',
          prop: 'PoltmtrlName',
          children: [
            {
              id: 510,
              label: '实测排放量(kg/h)',
              prop: 'pH_EmissQty'
            },
            {
              id: 520,
              label: '实测浓度(mg/l)',
              prop: 'pH_MonQty'
            },
            {
              id: 530,
              label: '标准值(mg/l)',
              prop: 'pH_StdValue'
            }
          ]
        },
        {
          id: 600,
          label: '废水流量',
          prop: '',
          children: [
            {
              id: 610,
              label: '实测流量(m³/h)',
              prop: '废水流量_MonQty'
            }
          ]
        }
      ]
    }
  },
  mounted () {
@@ -104,7 +165,7 @@
        poltMtrlId: '',
        emissTypeId: '',
        onLineMonEmissPointId: 23,
        monItemId: 28,
        monItemId: '28,31,35', // 监测项  COD、氨氮、PH
        beginTime: this.formData.timeStart,
        endTime: this.formData.timeEnd,
        dataType: this.dataType
@@ -114,6 +175,8 @@
    },
    get24HourDate (res) {
      if (res.length > 0) {
        this.dataStandard = []
        this.tableData = this.analysisResult(res) // 小时明细表解析结果
        // 处理数据开始
        const d = res
        const nameList = [] // 存放图例
@@ -148,19 +211,44 @@
          if (nameList.length === 0) {
            nameList.push(d[i].PoltmtrlName.trim())
            dateList.push(strDate)
            this.dataStandard.push({
              current: {
                name: d[i].PoltmtrlName.trim(),
                val: ''
              },
              standard: {
                name: '标准',
                val: ''
              }
            })
            bzh.push(d[i].StdValue)
            data = {
              name: d[i].PoltmtrlName.trim(),
              data: [d[i].MonQty]
              data: []
            }
            if (d[i].MonQty !== null) {
              data.data.push(d[i].MonQty)
            }
            dataList.push(data)
          } else if (nameList.indexOf(d[i].PoltmtrlName.trim()) < 0) {
            nameList.push(d[i].PoltmtrlName)
            bzh.push(d[i].StdValue)
            this.dataStandard.push({
              current: {
                name: d[i].PoltmtrlName.trim(),
                val: ''
              },
              standard: {
                name: '标准',
                val: ''
              }
            })
            data = {
              name: d[i].PoltmtrlName.trim(),
              data: [d[i].MonQty]
              data: []
            }
            if (d[i].MonQty !== null) {
              data.data.push(d[i].MonQty)
            }
            dataList.push(data)
          } else {
@@ -169,7 +257,7 @@
            }
            for (let j = 0; j < dataList.length; j++) {
              if (d[i].PoltmtrlName.trim() === dataList[j].name) {
                dataList[j].data.push(d[i].MonQty)
                if (d[i].MonQty !== null)dataList[j].data.push(d[i].MonQty)
              }
            }
          }
@@ -265,7 +353,10 @@
          }
          ydatas.push(ydata)
        }
        for (var t = 0; t < this.dataStandard.length; t++) {
          this.dataStandard[t].current.val = ydatas[t].data[ydatas[t].data.length - 1].toFixed(2)
          this.dataStandard[t].standard.val = ydatas[t].bzz
        }
        const yname = '浓度(mg/l)'
        this.effChartShow(legend, xdata, ydatas, yname, this.jcdID, this.datatype)
      }
@@ -273,7 +364,6 @@
    effChartShow (legend, xdata, ydatas, yname, jcdID, datatype) {
      this.chart = this.$echarts.init(this.$refs.echartsDay)
      this.chart.clear()
      // console.log(this.chart)
      this.chart.clear()
      let dataUnit = ''
      if (datatype === 1) {
@@ -302,12 +392,14 @@
                      biaozhuiz = bzzList[i].bzhui
                    }
                  }
                  if (c.value[1] > biaozhuiz) {
                    return zdcbcolor
                  } else if (c.value[1] > biaozhuiz * 0.9) {
                    return '#FFA500'
                  } else {
                    return '#33c95f'
                  if (c.value) {
                    if (c.value[1] > biaozhuiz) {
                      return zdcbcolor
                    } else if (c.value[1] > biaozhuiz * 0.9) {
                      return '#FFA500'
                    } else {
                      return '#33c95f'
                    }
                  }
                },
                lineStyle: { // 折线的颜色
@@ -429,9 +521,12 @@
            saveAsImage: {}
          }
        },
        grid: { // 网格
          top: '20%'
          // left: '5%'
        grid: {
          // 与绝对定位相似,top,left,right,bottom 设定是根据上级盒子宽高来计算
          top: '20%',
          left: '6%',
          right: '6%',
          bottom: '12%'
        },
        legend: {
          data: legend
@@ -544,11 +639,75 @@
      }
      this.chart.setOption(option)
      window.onresize = this.chart.resize
    },
    analysisResult (result) {
      // 处理表格头
      const json = {}
      const arr = []
      // 处理表格内容
      const bodyDataList = []
      const dataMap = {}
      for (let i = 0; i < result.length; i++) {
        json[result[i].PoltmtrlName] = result[i].PoltmtrlName
        const rgdata = result[i]
        const timeTag = rgdata.MonTimeStr
        if (!dataMap[timeTag]) {
          dataMap[timeTag] = { MonTimeStr: '' + rgdata.MonTimeStr }
        }
        // 往数据中添加属性数据
        const el = dataMap[timeTag]
        el.OnLineMonEmissPointName = rgdata.OnLineMonEmissPointName
        el[rgdata.PoltmtrlName + '_EmissQty'] = rgdata.EmissQty ? rgdata.EmissQty.toFixed(2) : '--'
        el[rgdata.PoltmtrlName + '_MonQty'] = rgdata.MonQty ? rgdata.MonQty.toFixed(2) : '--'
        el[rgdata.PoltmtrlName + '_StdValue'] = rgdata.StdValue ? rgdata.StdValue.toFixed(2) : '--'
      }
      let FSLLtemp = null
      for (var key in json) {
        if (key === '废水流量' || key === '废水') {
          FSLLtemp = key
        } else {
          arr.push(key)
        }
      }
      if (FSLLtemp != null) {
        arr.push(FSLLtemp)
      }
      for (var p in dataMap) {
        bodyDataList.push(dataMap[p])
      }
      return bodyDataList
    }
  }
}
</script>
<style scoped lang="less">
<style lang="less">
#wasteWaterDayChartBox .echarts-form .el-input__inner {
  background-color: rgba(0, 0, 0, 0);
  height: .13rem;
  border-color: #336fa4;
}
#wasteWaterDayChartBox .echarts-form{
  margin-top: 1px
}
#wasteWaterDayChartBox .echarts-form .el-input__icon{
  height: .13rem;
  top: -.02rem;
  right: -0.03rem;
  position: absolute;
  color: #00d0f9;
}
#wasteWaterDayChartBox .echarts-form .selectBox .el-input__icon:last-child{
  top: .02rem;
}
#wasteWaterDayChartBox .echarts-form .selectBox .is-reverse{
  top: -.02rem !important;
}
#wasteWaterDayChartBox .echarts-form .el-button{
  background-color: rgba(0, 0, 0, 0);
  height: .13rem;
}
#mingxiBtn{
  margin-left: -.02rem;
}
</style>
src/components/base-page/WasteWater/WasteWaterHoursChart.vue
@@ -1,5 +1,5 @@
<template>
  <div class="echarts-box">
  <div id="wasteWaterHoursChartBox" class="echarts-box">
    <div class="tab-scroll">
      <PublicDataStandard :dataStandard="dataStandard"></PublicDataStandard>
    </div>
@@ -9,11 +9,18 @@
      <span class="demonstration">结束时间:</span>
      <el-date-picker v-model="formData.endTime" value-format="yyyy-MM-dd HH" type="datetime" size="mini"></el-date-picker>
      <span class="demonstration">采样点数:</span>
      <el-select v-model="formData.region" placeholder="请选择" size="mini">
      <el-select class="selectBox" v-model="formData.region" placeholder="请选择" size="mini">
        <el-option v-for="(item,index) in formData.regionList" :key="index" :label="item" :value="item"></el-option>
      </el-select>
      <el-button @click="querySearch()">查询</el-button>
      <el-button>明细表</el-button>
      <el-popover
          placement="top"
          width="100%"
          popper-class="popoverBoxStyle"
          trigger="click">
        <dynamic-table :tableData="tableData" :tableHeader="tableConfig" v-if="tableData"></dynamic-table>
        <el-button slot="reference" id="mingxiBtn">明细表</el-button>
      </el-popover>
    </div>
    <div class="echarts-chart">
      <div ref="echartsHour"></div>
@@ -26,56 +33,21 @@
import PublicDataStandard from '../PublicDataStandard'
import dayjs from 'dayjs'
import mapApi from '../../../api/mapApi'
import DynamicTable from '../../../views/popup/DynamicHeader/DynamicTable' // 多级表头
export default {
  name: 'WasteWaterHoursChart',
  components: {
    PublicDataStandard
    PublicDataStandard,
    DynamicTable
  },
  data () {
    return {
      // tab栏传递接收数据
      dataStandard: [
        {
          current: {
            name: '氮氧化物',
            val: 29.93
          },
          standard: {
            name: '标准',
            val: 100
          }
        },
        {
          current: {
            name: '二氧化硫',
            val: 17.34
          },
          standard: {
            name: '标准',
            val: 50
          }
        },
        {
          current: {
            name: '烟尘',
            val: 6.93
          },
          standard: {
            name: '标准',
            val: 30
          }
        },
        {
          current: {
            name: '废气流量',
            val: 123
          },
          standard: {
            name: '',
            val: null
          }
        }],
      dataStandard: [],
      popUpName: '',
      tableData: null,
      mingxiBoxHtml: '',
      formData: {
        region: '25',
        regionList: [25, 50, 75, 100],
@@ -87,7 +59,98 @@
      dataType: 2,
      bzz: null,
      bzzList: [],
      bz: ''
      bz: '',
      // 表头数据
      tableConfig: [
        {
          id: 100,
          label: '排放点',
          prop: 'OnLineMonEmissPointName'
        },
        {
          id: 200,
          label: '监测时间',
          prop: 'MonTimeStr'
        },
        {
          id: 300,
          label: 'COD',
          prop: 'PoltmtrlName',
          children: [
            {
              id: 310,
              label: '实测排放量(kg/h)',
              prop: 'COD_EmissQty'
            },
            {
              id: 320,
              label: '实测浓度(mg/l)',
              prop: 'COD_MonQty'
            },
            {
              id: 330,
              label: '标准值(mg/l)',
              prop: 'COD_StdValue'
            }
          ]
        },
        {
          id: 400,
          label: '氨氮',
          prop: 'PoltmtrlName',
          children: [
            {
              id: 410,
              label: '实测排放量(kg/h)',
              prop: '氨氮_EmissQty'
            },
            {
              id: 420,
              label: '实测浓度(mg/l)',
              prop: '氨氮_MonQty'
            },
            {
              id: 430,
              label: '标准值(mg/l)',
              prop: '氨氮_StdValue'
            }
          ]
        },
        {
          id: 500,
          label: 'PH',
          prop: 'PoltmtrlName',
          children: [
            {
              id: 510,
              label: '实测排放量(kg/h)',
              prop: 'pH_EmissQty'
            },
            {
              id: 520,
              label: '实测浓度(mg/l)',
              prop: 'pH_MonQty'
            },
            {
              id: 530,
              label: '标准值(mg/l)',
              prop: 'pH_StdValue'
            }
          ]
        },
        {
          id: 600,
          label: '废水流量',
          prop: '',
          children: [
            {
              id: 610,
              label: '实测流量(m³/h)',
              prop: '废水流量_MonQty'
            }
          ]
        }
      ]
    }
  },
  mounted () {
@@ -105,18 +168,20 @@
        poltMtrlId: '',
        emissTypeId: '',
        onLineMonEmissPointId: 23,
        monItemId: 28,
        monItemId: '28,31,35', // 监测项  COD、氨氮、PH
        beginTime: this.formData.startTime,
        endTime: this.formData.endTime,
        dataType: this.dataType
      }
      const result = (await mapApi.getQueryOnlineMonData(data)).Result.DataInfo
      // console.log(result)
      this.popUpName = result[0].OnLineMonEmissPointName
      this.get24HourDate(result)
    },
    // 绘制小时数据折线图
    get24HourDate (result) {
      if (result.length > 0) {
        this.dataStandard = []
        this.tableData = this.analysisResult(result) // 小时明细表解析结果
        const d = result
        const nameList = [] // 存放图例
        const dateList = [] // 存放时间
@@ -170,24 +235,43 @@
              }
            }
          }
          if (nameList.length === 0) {
            nameList.push(d[i].PoltmtrlName.trim())
            this.dataStandard.push({
              current: {
                name: d[i].PoltmtrlName.trim(),
                val: 29.93
              },
              standard: {
                name: '标准',
                val: 100
              }
            })
            dateList.push(strDate)
            if ((d[i].PoltmtrlName === '废水流量' || d[i].PoltmtrlName === '废水') && d[i].MonQty < 0) {
              d[i].MonQty = 0
            }
            data.push(d[i].MonQty)
            if (d[i].MonQty !== null)data.push(d[i].MonQty)
            bzh.push(d[i].StdValue)
          } else if (nameList.indexOf(d[i].PoltmtrlName.trim()) < 0) {
            nameList.push(d[i].PoltmtrlName)
            this.dataStandard.push({
              current: {
                name: d[i].PoltmtrlName.trim(),
                val: 29.93
              },
              standard: {
                name: '标准',
                val: 100
              }
            })
            bzh.push(d[i].StdValue)
            dataList.push(data)
            data = []
            if ((d[i].PoltmtrlName === '废水流量' || d[i].PoltmtrlName === '废水') && d[i].MonQty < 0) {
              d[i].MonQty = 0
            }
            data.push(d[i].MonQty)
            if (d[i].MonQty !== null)data.push(d[i].MonQty)
          } else if (i === d.length - 1) {
            if ((d[i].PoltmtrlName === '废水流量' || d[i].PoltmtrlName === '废水') && d[i].MonQty < 0) {
              d[i].MonQty = 0
@@ -202,10 +286,9 @@
            if ((d[i].PoltmtrlName === '废水流量' || d[i].PoltmtrlName === '废水') && d[i].MonQty < 0) {
              d[i].MonQty = 0
            }
            data.push(d[i].MonQty)
            if (d[i].MonQty !== null)data.push(d[i].MonQty)
          }
        }
        const newList = []
        for (let i = 0; i < dataList.length; i++) {
@@ -291,7 +374,10 @@
        // console.log(ydatas)
        const yname = '浓度(mg/l)'
        for (var t = 0; t < this.dataStandard.length; t++) {
          this.dataStandard[t].current.val = ydatas[t].data[ydatas[t].data.length - 1].toFixed(2)
          this.dataStandard[t].standard.val = ydatas[t].bzz
        }
        this.effChartShow(legend, xdata, ydatas, yname, this.jcdID, this.datatype)
      }
    },
@@ -455,12 +541,15 @@
            saveAsImage: {}
          }
        },
        grid: { // 网格
          top: '20%'
          // left: '15%'
        },
        legend: {
          data: legend
        },
        grid: {
          // 与绝对定位相似,top,left,right,bottom 设定是根据上级盒子宽高来计算
          top: '20%',
          left: '6%',
          right: '6%',
          bottom: '12%'
        },
        dataZoom: [{
          type: 'inside',
@@ -570,11 +659,71 @@
      }
      this.chart.setOption(option)
      window.onresize = this.chart.resize
    },
    analysisResult (result) {
      // 处理表格头
      const json = {}
      const arr = []
      // 处理表格内容
      const bodyDataList = []
      const dataMap = {}
      for (let i = 0; i < result.length; i++) {
        json[result[i].PoltmtrlName] = result[i].PoltmtrlName
        const rgdata = result[i]
        const timeTag = rgdata.MonTimeStr
        if (!dataMap[timeTag]) {
          dataMap[timeTag] = { MonTimeStr: '' + rgdata.MonTimeStr }
        }
        // 往数据中添加属性数据
        const el = dataMap[timeTag]
        el.OnLineMonEmissPointName = rgdata.OnLineMonEmissPointName
        el[rgdata.PoltmtrlName + '_EmissQty'] = rgdata.EmissQty ? rgdata.EmissQty.toFixed(2) : '--'
        el[rgdata.PoltmtrlName + '_MonQty'] = rgdata.MonQty ? rgdata.MonQty.toFixed(2) : '--'
        el[rgdata.PoltmtrlName + '_StdValue'] = rgdata.StdValue ? rgdata.StdValue.toFixed(2) : '--'
      }
      let FSLLtemp = null
      for (var key in json) {
        if (key === '废水流量' || key === '废水') {
          FSLLtemp = key
        } else {
          arr.push(key)
        }
      }
      if (FSLLtemp != null) {
        arr.push(FSLLtemp)
      }
      for (var p in dataMap) {
        bodyDataList.push(dataMap[p])
      }
      return bodyDataList
    }
  }
}
</script>
<style scoped lang="less">
<style>
#wasteWaterHoursChartBox .echarts-form .el-input__inner {
  background-color: rgba(0, 0, 0, 0);
  height: .13rem;
  border-color: #336fa4;
}
#wasteWaterHoursChartBox .echarts-form .el-input__icon{
  height: .13rem;
  top: -.02rem;
  right: -0.03rem;
  position: absolute;
  color: #00d0f9;
}
#wasteWaterHoursChartBox .echarts-form .selectBox .el-input__icon:last-child{
  top: .02rem;
}
#wasteWaterHoursChartBox .echarts-form .selectBox .is-reverse{
  top: -.02rem !important;
}
#wasteWaterHoursChartBox .echarts-form .el-button{
  background-color: rgba(0, 0, 0, 0);
  height: .13rem;
}
#mingxiBtn{
  margin-left: -.02rem;
}
</style>
src/components/base-page/WasteWater/WasteWaterIndex.vue
@@ -28,9 +28,9 @@
        <component :is="currentTab" ref="RealData"></component>
      </div>
    </template>
    <template v-slot:video>
<!--    <template v-slot:video>
      <public-video></public-video>
    </template>
    </template>-->
  </public-sector>
</template>
@@ -84,26 +84,26 @@
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 5px 0;
  padding-left: 0.07rem;
  border-bottom: 1px #243a55 solid;
  .navigation-left {
    display: flex;
    align-items: center;
    .uncheck {
      margin: 0 10px;
      cursor: pointer;
      padding: 5px;
      margin-left: -0.05rem;
      width: .8rem;
      padding: 6px 0;
      /*border: 1px solid #2b87c8;*/
      /*border-radius: 4px;*/
      background-position: 0 0;
      background-repeat: no-repeat;
      background-size: 100% 100%;
      background-image: url("../../../../public/assets/images/map-pages/title_bg.png");
      text-align: center;
      vertical-align: middle !important;
      color: #fff;
      -webkit-transform: skew(30deg);
      -moz-transform: skew(30deg);
      -o-transform: skew(30deg);
      transform: skew(15deg);
    }
    .default-uncheck {
@@ -113,15 +113,13 @@
    }
    .hover {
      background-color: #0e539e;
      background-image: url("../../../../public/assets/images/map-pages/title_bg2.png");
      color: #ffffff;
      cursor: pointer;
    }
    .hover:hover {
      cursor: pointer;
      padding: 5px;
      border: 1px solid #5F9EA0;
      border-radius: 4px;
      text-align: center;
      color: #F0FFFF;
@@ -129,7 +127,6 @@
  }
  .navigation-left :hover {
    background-color: #0e639e;
    color: #fff;
    cursor: pointer;
  }
src/components/base-page/WasteWater/WasteWaterRealChart.vue
@@ -1,5 +1,5 @@
<template>
  <div class="echarts-box">
  <div id="wasteWaterRealChartBox" class="echarts-box">
    <div class="tab-scroll">
      <PublicDataStandard :dataStandard="dataStandard"></PublicDataStandard>
    </div>
@@ -9,7 +9,7 @@
      <span class="demonstration">结束时间:</span>
      <el-date-picker v-model="formData.endTime" value-format="yyyy-MM-dd HH:mm:ss" type="datetime" size="mini"></el-date-picker>
      <span class="demonstration">采样点数:</span>
      <el-select v-model="formData.region" placeholder="请选择" size="mini">
      <el-select class="selectBox" v-model="formData.region" placeholder="请选择" size="mini">
        <el-option v-for="(item,index) in formData.regionList" :key="index" :label="item" :value="item"></el-option>
      </el-select>
      <el-button @click="querySearch()">查询</el-button>
@@ -502,7 +502,11 @@
          }
        },
        grid: {
          top: '20%'
          // 与绝对定位相似,top,left,right,bottom 设定是根据上级盒子宽高来计算
          top: '20%',
          left: '6%',
          right: '6%',
          bottom: '12%'
        },
        legend: {
          data: this.legendList
@@ -610,6 +614,30 @@
}
</script>
<style scoped lang="less">
<style lang="less">
#wasteWaterRealChartBox .echarts-form .el-input__inner {
  background-color: rgba(0, 0, 0, 0);
  height: .13rem;
  border-color: #336fa4;
}
#wasteWaterRealChartBox .echarts-form{
  margin-top: 1px
}
#wasteWaterRealChartBox .echarts-form .el-input__icon{
  height: .13rem;
  top: -.02rem;
  right: -0.03rem;
  position: absolute;
  color: #00d0f9;
}
#wasteWaterRealChartBox .echarts-form .selectBox .el-input__icon:last-child{
  top: .02rem;
}
#wasteWaterRealChartBox .echarts-form .selectBox .is-reverse{
  top: -.02rem !important;
}
#wasteWaterRealChartBox .echarts-form .el-button{
  background-color: rgba(0, 0, 0, 0);
  height: .13rem;
}
</style>
src/components/base-page/enterprise-emergency/events-reported/EventsReported.vue
@@ -127,8 +127,8 @@
                </el-form-item>
            </div>
            <el-form-item class="confirmCancel">
                <el-button type="primary" @click="submitForm('ruleForm')">确认</el-button>
                <el-button @click="resetForm('ruleForm')">取消</el-button>
                <el-button type="primary" size="small" @click="submitForm('ruleForm')">确认</el-button>
                <el-button size="small" @click="resetForm('ruleForm')">取消</el-button>
            </el-form-item>
        </el-form>
        <el-dialog
src/components/base-page/enterprise-emergency/events-reported/ReportLocationPoint.vue
@@ -1,30 +1,58 @@
<template>
    <div class="location-lon-and-lat">
        <el-row class="place-box">
            <div class="place-left">
                <el-form :model="LongLatPos" label-width="90px">
        <!--        <el-row>-->
        <!--            <el-form :model="lonlatpos" label-width="60px">-->
        <!--                <el-col :span="12">-->
        <!--                    <el-form-item label="经度:">-->
        <!--                        <el-input type="text" v-model="lonlatpos.longPos"></el-input>-->
        <!--                    </el-form-item>-->
        <!--                </el-col>-->
        <!--                <el-col :span="12">-->
        <!--                    <el-form-item label="纬度:">-->
        <!--                        <el-input type="text" v-model="lonlatpos.latPos"></el-input>-->
        <!--                    </el-form-item>-->
        <!--                </el-col>-->
        <!--            </el-form>-->
        <!--            <el-row>-->
        <!--                <el-col :span="12" style="text-align: center;margin: 5px 0">-->
        <!--                    <el-button type="primary" size="small" @click="mapPoints">精确定位</el-button>-->
        <!--                </el-col>-->
        <!--                <el-col :span="12" style="text-align: center;margin: 5px 0">-->
        <!--                    <el-button type="primary" size="small" @click="dataPoints">数据识取</el-button>-->
        <!--                </el-col>-->
        <!--            </el-row>-->
        <!--        </el-row>-->
        <el-form :model="lonlatpos" label-width="60px">
            <el-row class="pipe-line-search">
                <el-col :span="12">
                    <el-form-item label="经度:">
                        <el-input v-model="LongLatPos.longPos"></el-input>
                        <el-input v-model="lonlatpos.longPos"></el-input>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="纬度:">
                        <el-input v-model="LongLatPos.latPos"></el-input>
                        <el-input v-model="lonlatpos.latPos"></el-input>
                    </el-form-item>
                </el-form>
            </div>
            <div class="place-right">
                <el-button type="primary" size="small" @click="mapPoints">点击定位</el-button>
                <el-button type="primary" size="small" @click="dataPoints">数据定位</el-button>
            </div>
                </el-col>
            </el-row>
        </el-form>
        <el-row>
            <el-col :span="12" style="text-align: center;margin: 5px 0">
                <el-button type="primary" size="small" @click="mapPoints">精确定位</el-button>
            </el-col>
            <el-col :span="12" style="text-align: center;margin: 5px 0">
                <el-button type="primary" size="small" @click="dataPoints">数据识取</el-button>
            </el-col>
        </el-row>
        <div class="place-bottom" style="text-align: right;margin: 5px">
            <el-button type="primary" @click="confirm">确认</el-button>
        </div>
        <el-row class="place-bottom" style="text-align: right;margin: 5px">
            <el-button type="primary" @click="confirm" size="small">确认</el-button>
        </el-row>
    </div>
</template>
<script>
import { pulseEffect } from '../../../../utils/utils'
import iconUrl from '../../../../../public/assets/images/map/loc.png'
import iconUrl from '../../../../../public/assets/images/map/marker-icon.png'
import eventBus from '../../../../eventBus'
export default {
@@ -32,58 +60,67 @@
  data () {
    return {
      // 经纬度定位
      LongLatPos: {
      lonlatpos: {
        longPos: '',
        latPos: ''
      },
      marker: null
      marker: window.L.layerGroup().addTo(window.map),
      layersGroupArrList: []
    }
  },
  methods: {
    // 点击定位
    // 精确定位
    mapPoints () {
      window.map.on('click', (e) => {
        this.LongLatPos.longPos = parseFloat(e.latlng.lng).toFixed(6)
        this.LongLatPos.latPos = parseFloat(e.latlng.lat).toFixed(6)
        const as = [this.LongLatPos.latPos, this.LongLatPos.longPos]
        this.lonlatpos.longPos = parseFloat(e.latlng.lng).toFixed(8)
        this.lonlatpos.latPos = parseFloat(e.latlng.lat).toFixed(8)
        const as = [e.latlng.lat, e.latlng.lng]
        // console.log(as)
        window.map.setView(as, 17)
        pulseEffect(as)
        this.marker = window.L.marker(as, {
          icon: window.L.icon({
            iconUrl: iconUrl,
            iconSize: [30, 30],
            iconAnchor: [15, 15]
            iconSize: [26, 40],
            iconAnchor: [13, 20]
          })
        })
        window.map.addLayer(this.marker)
        this.layersGroupArrList.push(this.marker)
        window.map.off('click')
      })
    },
    // 通过数据定位
    dataPoints () {
      const as = [this.LongLatPos.latPos, this.LongLatPos.longPos]
      // console.log(as)
      window.map.setView(as, 17)
      pulseEffect(as)
      this.marker = window.L.marker(as, {
        icon: window.L.icon({
          iconUrl: iconUrl,
          iconSize: [30, 30],
          iconAnchor: [15, 15]
      // this.lonlatpos.latPos = ''
      // this.lonlatpos.longPos = ''
      if (this.lonlatpos.latPos !== '' && this.lonlatpos.longPos !== '') {
        const as = [this.lonlatpos.latPos, this.lonlatpos.longPos]
        window.map.setView(as, 17)
        pulseEffect(as)
        this.marker = window.L.marker(as, {
          icon: window.L.icon({
            iconUrl: iconUrl,
            iconSize: [26, 40],
            iconAnchor: [13, 20]
          })
        })
      })
      window.map.addLayer(this.marker)
      this.LongLatPos.latPos = ''
      this.LongLatPos.longPos = ''
        window.map.addLayer(this.marker)
        this.layersGroupArrList.push(this.marker)
      } else {
        this.$message('请输入识取经纬度')
      }
    },
    // 点击确认按钮事件
    confirm () {
      for (let i = 0; i < this.layersGroupArrList.length; i++) {
        window.map.removeLayer(this.layersGroupArrList[i])
      }
      window.mapManager.clearHighlight()
      window.map.removeLayer(this.marker)
      // window.map.removeLayer(this.marker)
      eventBus.$emit('location-setChange', true)
      this.LongLatPos.longPos = ''
      this.LongLatPos.latPos = ''
      this.lonlatpos.longPos = ''
      this.lonlatpos.latPos = ''
    }
  }
}
src/components/base-page/enterprise-emergency/events-reported/ReportLocationSearch.vue
@@ -1,27 +1,54 @@
<template>
    <div class="click-location">
        <el-row>
            <el-input type="text" v-model="clickLocation" clearable @change="focusLocation"></el-input>
        </el-row>
        <el-scrollbar style="height:86.22px">
            <el-row v-for="(item,index) in searchList" :key="index" style="display: flex;align-items: center">
                <el-col :span="12">
                    <span>{{ item.name }}</span>
                </el-col>
                <el-col :span="12">
                    <el-button type="primary" size="mini" icon="el-icon-position" @click="locationMapClick(item)">定位
                    </el-button>
                </el-col>
                <!--            <el-pagination-->
                <!--                    layout="prev, pager, next"-->
                <!--                    :total="50">-->
                <!--            </el-pagination>-->
            </el-row>
        </el-scrollbar>
        <el-row style="text-align: right">
            <el-button type="primary" @click="confirm">确认</el-button>
        </el-row>
  <div class="click-location">
    <el-row>
      <!--      clearable-->
      <el-input type="text" v-model="clickLocation" @change="focusLocation">
        <el-button slot="suffix" type="text" @click="focusLocation">
          <img src="../../../../../public/assets/images/map/emergency/search.png" alt="">
        </el-button>
      </el-input>
    </el-row>
    <!--        <el-scrollbar style="height:250.34px">-->
    <el-row v-for="(item,index) in searchList.slice((currentPage-1)*pageSize,currentPage*pageSize)" :key="index"
            style="display: flex;align-items: center;margin: 0.1343rem 15px;text-align: left"
            class="environmental-risk-list">
      <el-col :span="4">
        <img src="../../../../../public/assets/images/map/marker-icon.png" alt="" class="state"
             style="background: none;margin: 0 15px">
      </el-col>
      <el-col :span="12">
        <div class=search-list>
          <!--                        <h4 :class="activeNum===index?'hover':''" @click="handleLocation(index)">名称:<h3 style="display: inline-block">{{ item.name }}</h3></h4>-->
          <h3 :class="activeNum===index?'hover':''" @click="handleLocation(index)">名称:{{ item.name }}</h3>
          <p style="text-overflow: ellipsis;white-space: nowrap;overflow: hidden">地址:<span>{{ item.address }}</span>
          <p>电话:<span>{{ item.phone }}</span></p>
        </div>
      </el-col>
      <el-col :span="8" style="text-align: right">
        <el-button type="primary" size="mini" icon="el-icon-position" @click="locationMapClick(item,index)">
          定位
        </el-button>
      </el-col>
    </el-row>
    <!--        </el-scrollbar>-->
    <!--        <el-card class="footer-page" >-->
    <div v-if="total > 10">
      <el-pagination
          small
          @current-change="handlePage"
          :page-size=pageSize
          :current-page.sync="currentPage"
          layout="prev, pager, next"
          :total=total
          class="warnPagination"
      >
      </el-pagination>
    </div>
    <!--        </el-card>-->
    <el-row style="text-align: right">
      <el-button type="primary" size="small" @click="confirm">确认</el-button>
    </el-row>
  </div>
</template>
<script>
@@ -29,24 +56,36 @@
import { reportLocationSearch } from '../../../../api/request'
import { pulseEffect } from '../../../../utils/utils'
import eventBus from '../../../../eventBus'
import iconUrl from '../../../../../public/assets/images/map/loc.png'
import iconUrl from '../../../../../public/assets/images/map/marker-icon.png'
export default {
  name: 'ReportLocationSearch',
  data () {
    return {
      activeNum: -1,
      // 点击定位绑定数据
      clickLocation: '',
      searchList: [],
      marker: null
      marker: window.L.layerGroup().addTo(window.map),
      layer: window.L.layerGroup().addTo(window.map),
      layersGroupArrList: [],
      total: 0,
      // 分页 默认展示
      currentPage: 1,
      // 分页 每页多少数据
      pageSize: 3
    }
  },
  methods: {
    handlePage (currentPage) {
      // this.focusLocation()
      this.currentPage = currentPage
    },
    handleLocation (index) {
      this.activeNum = index
    },
    // 搜索定位
    focusLocation () {
      // console.log(this.clickLocation)
      // console.log(window.map.getZoom())
      // console.log(window.map.getBounds())
      const getBoundsData = '' + window.map.getBounds()._southWest.lng + ',' + window.map.getBounds()._southWest.lat + ',' + window.map.getBounds()._northEast.lng + ',' + window.map.getBounds()._northEast.lat
      const data = {
        postStr: {
@@ -60,60 +99,47 @@
        },
        type: 'query'
      }
      // console.log(data)
      // $http.get('http://10.246.133.164//api/search?', data)
      reportLocationSearch(data).then(res => {
        // console.log(res)
        this.searchList = res.pois
        // console.log(this.searchList)
        // const as = res.pois[0].lonlat.trim().split(' ')
        // window.map.setView([as[1], as[0]], 17)
        // pulseEffect([as[1], as[0]])
        // for (let i = 0; i < res.pois.length; i++) {
        //   const as = res.pois[i].lonlat.trim().split(' ')
        //   if (res.pois[i].name.indexOf(this.clickLocation) >= 0) {
        //     window.map.setView([as[1], as[0]], 17)
        //     pulseEffect([as[1], as[0]])
        //   }
        // }
        this.total = res.pois.length
        // this.searchList = res.statistics.priorityCitys
        // this.total = res.statistics.priorityCitys.length
      })
      this.clickLocation = ''
    },
    // 点击定位
    locationMapClick (val) {
      console.log(val)
    locationMapClick (val, index) {
      this.activeNum = index
      const ps = val.lonlat.trim().split(' ')
      // const htmls = '<div><ul><li>' + val.name + '</li> + <li>' + val.adress + '</li></ul></div>'
      // var myIcon = window.L.divIcon({
      //   html: htmls,
      //   className: 'company-bindTooltip',
      //   iconSize: 16
      // })
      const htmls = '<div><ul><li>' + val.name + '</li> <br/> <li>' + val.address + '</li> <br/> <li>' + val.phone + '</li></ul></div>'
      this.marker = window.L.marker([ps[1], ps[0]], {
        icon: window.L.icon({
          iconUrl: iconUrl,
          iconSize: [30, 30],
          iconAnchor: [15, 15]
          iconSize: [26, 40],
          iconAnchor: [13, 20]
        })
        // icon: myIcon
      })
        .bindTooltip(htmls, {
          // permanent: 'true',
        .bindTooltip(val.name, {
          permanent: 'true',
          direction: 'bottom',
          offset: [0, 10],
          sticky: true,
          className: ''
        })
      window.map.addLayer(this.marker)
      this.layersGroupArrList.push(this.marker)
      window.map.setView([ps[1], ps[0]], 17)
      pulseEffect([ps[1], ps[0]])
    },
    // 点击确认按钮事件
    confirm () {
      window.mapManager.clearHighlight()
      window.map.removeLayer(this.marker)
      for (let i = 0; i < this.layersGroupArrList.length; i++) {
        window.map.removeLayer(this.layersGroupArrList[i])
      }
      this.searchList = []
      this.clickLocation = ''
      this.total = 0
      eventBus.$emit('location-setChange', true)
    }
  }
@@ -121,27 +147,91 @@
</script>
<style lang="less" scoped>
    /*/deep/ .el-row {*/
    /*    margin: 2px 0 !important;*/
    /*    padding: 0;*/
    /*    height: 10px;*/
    /*    max-height: 10px;*/
    /*}*/
    .div-list-search {
/*/deep/ .el-row {*/
/*    margin: 2px 0 !important;*/
/*    padding: 0;*/
/*    height: 10px;*/
/*    max-height: 10px;*/
/*}*/
.environmental-risk-list {
  color: @color;
  border-bottom: 1px solid rgba(0, 255, 246, 0.14);
    }
  h3 {
    font-size: 0.1rem;
  }
}
    .click-location {
        margin: 0 auto;
        text-align: center;
/*<!--.environmental-risk-list:hover {-->*/
/*<!--    color: @color-highlight;-->*/
/*<!--    background: @background-color;-->*/
/*<!--}-->*/
.search-list {
  h3:hover {
    color: @color-highlight;
  }
}
        .el-input {
            width: 80%;
            margin: 15px auto;
        }
.hover {
  color: @color-highlight;
}
        .el-button {
            margin: 15px auto;
        }
    }
.click-location {
  margin: 0 auto;
  text-align: center;
  .el-input {
    width: 80%;
    margin: 15px auto;
  }
}
/deep/
.warnPagination {
  .btn-quicknext, .btn-quickprev {
    color: #e4e8f1 !important;
    background-color: transparent;
    // border: 1px solid #25AECD;
    border-left: 1px solid #25AECD;
    border-bottom: 1px solid #25AECD;
    border-top: 1px solid #25AECD;
    color: #e4e8f1;
  }
  .el-pager li {
    color: #e4e8f1;
    background: transparent;
    // border: 1px solid #25AECD;
    border-left: 1px solid #25AECD;
    border-bottom: 1px solid #25AECD;
    border-top: 1px solid #25AECD;
  }
  .el-pager li.active {
    border-color: #25AECD;
    background-color: rgba(38, 222, 253, 0.3);
    color: #e4e8f1;
  }
  .el-pager li:hover {
    border-color: #25AECD;
    background-color: rgba(38, 222, 253, 0.3);
    color: #34e0ff;
  }
  .btn-prev {
    background-color: transparent;
    // border: 1px solid #25AECD;
    border-left: 1px solid #25AECD;
    border-bottom: 1px solid #25AECD;
    border-top: 1px solid #25AECD;
    color: #e4e8f1;
  }
  .btn-next {
    background-color: transparent;
    border: 1px solid #25AECD;
    color: #e4e8f1;
  }
}
</style>
src/components/base-page/enterprise-emergency/events-reported/ReportLocationSection.vue
@@ -1,30 +1,37 @@
<template>
    <div class="ReportLocationSection">
        <el-form :model="form" label-width="90px">
        <el-form :model="form" label-width="120px">
            <el-row class="pipe-line-search">
                <el-col :span="12">
                <el-col :span="18">
                    <el-form-item label="管线名称:">
                        <el-input v-model="form.pipeName">
                        <el-input v-model="form.pipeName" @change="pipelineSearch">
                            <el-button style="padding-right:10px;" slot="suffix" type="text" @click="pipelineSearch">
                                <img src="../../../../../public/assets/images/map/emergency/search.png" alt="">
                            </el-button>
                        </el-input>
                    </el-form-item>
                </el-col>
                <el-col :span="8">
                <el-col :span="6">
                    <el-button type="primary" size="small" icon="el-icon-location-outline" @click="pipeClickLocation">定位
                    </el-button>
                </el-col>
            </el-row>
            <el-row>
                <el-col :span="12">
                <el-col :span="24">
                    <el-form-item label="管段编码:">
                        <el-input v-model="form.sectionName" disabled></el-input>
                    </el-form-item>
                </el-col>
            </el-row>
            <el-row>
                <el-col :span="12">
                    <el-form-item label="附属设施:">
                    <el-form-item label="附属设施编码:">
                        <el-input v-model="form.affiliatedFacilities" disabled></el-input>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="附属设施类型:">
                        <el-input v-model="form.affiliatedFacilitiesCode" disabled></el-input>
                    </el-form-item>
                </el-col>
            </el-row>
@@ -141,7 +148,7 @@
            </el-card>
        </div>
        <el-row style="text-align: right;margin: 10px">
            <el-button type="primary" @click="confirm">确认</el-button>
            <el-button type="primary" @click="confirm" size="small">确认</el-button>
        </el-row>
    </div>
</template>
@@ -160,7 +167,8 @@
      form: {
        pipeName: '',
        sectionName: '',
        affiliatedFacilities: ''
        affiliatedFacilities: '',
        affiliatedFacilitiesCode: ''
      },
      // 管线查询数据列表
      tableList: [],
@@ -196,57 +204,73 @@
        this.tableList = res.features
      }
      this.wfsHelper = new WfsHelper()
      this.form.pipeName = ''
      // this.form.pipeName = ''
      this.form.sectionName = ''
      this.form.affiliatedFacilities = ''
      this.form.affiliatedFacilitiesCode = ''
    },
    // 点击管线列表 展示管段内容 和附属设施内容
    async sectionShowClick (val) {
      console.log(val)
      // 如果 SectionAndAffFacTableJudge === true 是搜索数据结果的列表 可以进行 管段 附属设施交互 点击定位查询结果 不进行点击交互
    sectionShowClick (val) {
      // console.log(val)
      // this.SectionAndAffFacTableJudge = true
      if (this.SectionAndAffFacTableJudge === true) {
        // 管段查询
        const sectionNameSearch = val.properties.pipename
        this.tableListSection = []
        this.wfsHelper.clearFilter()
        this.wfsHelper.setTypeName(['sewer:pipesegment'])
        this.wfsHelper.addLike('pipename', sectionNameSearch)
        this.wfsHelper.addEquals('pipename', '\'' + sectionNameSearch + '\'')
        const res = await AjaxUtils.GetDataAsynByUrl(this.wfsHelper.getUrl(), {})
        // console.log(res)
        if (res instanceof Object && Object.prototype.hasOwnProperty.call(res, 'features')) {
          this.tableListSection = res.features
        }
        this.wfsHelper = new WfsHelper()
        // 附属设施查询
        this.tableDataAffFac = []
        const AffFacSearch = val.properties.pipecode
        console.log(AffFacSearch)
        this.wfsHelper.clearFilter()
        this.wfsHelper.setTypeName(['sewer:view_pipeline'])
        this.wfsHelper.addLike('pipecode', AffFacSearch)
        // this.wfsHelper.addEquals('type', '\'' + AffFacSearch + '\'')
        const resAffFac = await AjaxUtils.GetDataAsynByUrl(this.wfsHelper.getUrl(), {})
        console.log(resAffFac)
        if (resAffFac instanceof Object && Object.prototype.hasOwnProperty.call(resAffFac, 'features')) {
          // for (let i = 0; i < resAffFac.features.length; i++) {
          //   // console.log(resAffFac.features[i])
          //   this.tableDataAffFac.push(resAffFac.features[i].properties)
          // }
          this.tableDataAffFac = resAffFac.features
        }
        this.wfsHelper = new WfsHelper()
        this.searchSection(val)
        this.searchAffFacData(val)
      }
    },
    // 管段查询
    async searchSection (val) {
      const sectionNameSearch = val.properties.pipename
      this.tableListSection = []
      this.wfsHelper.clearFilter()
      this.wfsHelper.setTypeName(['sewer:pipesegment'])
      this.wfsHelper.addLike('pipename', sectionNameSearch)
      this.wfsHelper.addEquals('pipename', '\'' + sectionNameSearch + '\'')
      const res = await AjaxUtils.GetDataAsynByUrl(this.wfsHelper.getUrl(), {})
      // console.log(res)
      if (res instanceof Object && Object.prototype.hasOwnProperty.call(res, 'features')) {
        this.tableListSection = res.features
      }
    },
    // 附属设施查询
    async searchAffFacData (val) {
      this.tableDataAffFac = []
      const AffFacSearch = val.properties.pipecode
      this.wfsHelper.clearFilter()
      this.wfsHelper.setTypeName(['sewer:view_pipeline'])
      this.wfsHelper.addLike('pipecode', AffFacSearch)
      // this.wfsHelper.addEquals('type', '\'' + AffFacSearch + '\'')
      const resAffFac = await AjaxUtils.GetDataAsynByUrl(this.wfsHelper.getUrl(), {})
      console.log(resAffFac)
      if (resAffFac instanceof Object && Object.prototype.hasOwnProperty.call(resAffFac, 'features')) {
        this.tableDataAffFac = resAffFac.features
      }
    },
    // 搜索的公共方法优化
    async publicSearch (searchVal, searchKeyword, searchTypeName, tableListData) {
      tableListData = []
      this.wfsHelper = new WfsHelper()
      this.wfsHelper.clearFilter()
      this.wfsHelper.setTypeName(searchTypeName)
      this.wfsHelper.addLike(searchKeyword, searchVal)
      this.wfsHelper.addEquals(searchKeyword, '\'' + searchVal + '\'')
      const res = await AjaxUtils.GetDataAsynByUrl(this.wfsHelper.getUrl(), {})
      // console.log(res)
      if (res instanceof Object && Object.prototype.hasOwnProperty.call(res, 'features')) {
        tableListData = res.features
      }
    },
    // 点击管段列表 管段编码传递
    sectionCode (val) {
      // console.log(val)
      this.form.sectionName = val.properties.pipecode
      this.form.sectionName = val.properties.pipesegcode
    },
    // 点击附属设施列表 管段编码传递
    affFacName (val) {
      // console.log(val)
      console.log(val)
      // this.form.affiliatedFacilities = val.properties.code
      this.form.affiliatedFacilities = val.properties.name
      this.form.affiliatedFacilitiesCode = val.properties.type
    },
    // 定位功能
    localAdr (val) {
@@ -258,23 +282,27 @@
    pipeClickLocation () {
      // 设施不进行 管线表格数据的点击交互
      this.SectionAndAffFacTableJudge = false
      // 点击获取数据
      window.map.on('click', (e) => {
        // 点击地图关闭弹框
        window.mapManager.clickDialogSwitch = false
        // 管线点击数据
        this.pipeData(e)
        // 管段点击数据
        this.sectionData(e)
        // 附属设施数据
        this.affFacData(e)
        // 关闭点击事件
        window.map.off('click')
      })
      if (this.SectionAndAffFacTableJudge === false) {
        // 点击获取数据
        window.map.on('click', (e) => {
          this.SectionAndAffFacTableJudge = false
          // 点击地图关闭弹框
          window.mapManager.clickDialogSwitch = false
          // 管线点击数据
          this.pipeData(e)
          // 管段点击数据
          this.sectionData(e)
          // 附属设施数据
          this.affFacData(e)
          // 关闭点击事件
          window.map.off('click')
        })
      }
      // 数据 重新获取 进行置空
      this.form.pipeName = ''
      this.form.sectionName = ''
      this.form.affiliatedFacilities = ''
      this.form.affiliatedFacilitiesCode = ''
      this.tableList = []
      this.tableListSection = []
      this.tableDataAffFac = []
@@ -317,7 +345,7 @@
        BBOX: window.map.getBounds().toBBoxString()
      }, defaultWmsParams)
      AjaxUtils.get4JsonDataByUrl(WMS_URL, wmsParams, (res) => {
        console.log(res)
        // console.log(res)
        for (let i = 0; i < res.data.features.length; i++) {
          dataList.push(res.data.features[i])
        }
src/components/helpers/MapManager.js
@@ -44,7 +44,7 @@
      var point = this.map.latLngToContainerPoint(latlng, this.map.getZoom())
      const wmsLayerService = window.layerFactory.wmsLayerService
      const layers = wmsLayerService.wmsLayerList.getLayers()
      // const filters = wmsLayerService.wmsLayerList.getFilters()
      const filters = wmsLayerService.wmsLayerList.getFilters()
      const wmsParams = Object.assign({
        LAYERS: layers,
        QUERY_LAYERS: layers,
@@ -54,6 +54,9 @@
        Y: Math.round(point.y),
        BBOX: this.map.getBounds().toBBoxString()
      }, this.defaultWmsParams, params)
      if (filters) {
        wmsParams.CQL_FILTER = filters
      }
      AjaxUtils.get4JsonDataByUrl(WMS_URL, wmsParams, (res) => {
        resolve(res.data)
      })
src/components/panel/RightSearchPanel.vue
@@ -12,7 +12,7 @@
                    </div>
                </li>
            </ul> -->
            <ul v-for="item in topicList" :key="item.name"
            <ul v-for="item in list" :key="item.name"
                :class="item.checked?'module-wrap map-btn-active':'module-wrap map-btn-unactive'"
                @click="()=>{selected(item)}" v-show="item.isShow">
              <el-tooltip :popper-class="'map-tooltip'" effect="dark" :content="item.name" placement="left">
@@ -51,10 +51,10 @@
<script>
import EnvRiskSearch from './topicSearch/EnvRiskSearch'
import DischargeSearch from './topicSearch/DischargeSearch'
import { TopicList } from '../../conf/Topic'
import { topicList } from '../../conf/Topic'
import GasWasteSearch from '@components/panel/topicSearch/GasWasteSearch'
import WaterWasteSearch from '@components/panel/topicSearch/WaterWasteSearch'
import WasteGasSearch from '@components/panel/topicSearch/WasteGasSearch'
import WasteWaterSearch from '@components/panel/topicSearch/WasteWaterSearch'
import SolidWasteSearch from '@components/panel/topicSearch/SolidWasteSearch'
import SewersSearch from '@components/panel/topicSearch/SewersSearch'
import SoilGroundWaterSearch from '@components/panel/topicSearch/SoilGroundWaterSearch.vue'
@@ -62,13 +62,11 @@
import PipeInformationSearch from '@components/panel/topicSearch/pipeInformationSearch.vue'
import EnterpriseEmergencySearch from './topicSearch/EnterpriseEmergencySearch'
import bus from '@/eventBus'
export default {
  name: 'MonitorPanel',
  components: {
    GasWasteSearch,
    WaterWasteSearch,
    WasteGasSearch,
    WasteWaterSearch,
    SolidWasteSearch,
    EnvRiskSearch,
    DischargeSearch,
@@ -78,7 +76,7 @@
    return {
      isShow: true,
      topicMenu: [],
      topicList: TopicList,
      list: topicList,
      topicCheckedList: [],
      isPanelVisible: false,
      gcComp: SewersSearch,
@@ -91,7 +89,11 @@
      selectGroup: false
    }
  },
  computed: {},
  computed: {
    serviceLayers () {
      return this.$store.state.map.serviceLayers.LayerSewersLine
    }
  }, /*
  watch: {
    '$store.state.map.topic.topicCheckedList': function (newVal, oldVal) {
      console.log(oldVal)
@@ -106,35 +108,55 @@
        })
      })
    }
  },
  }, */
  methods: {
    handleClose (done) {
      console.log(done)
    },
    setSearchPanelChange () {
      // 搜索面板没有显示时,将所有主题选择状态设置为false
      this.selectGroup = !this.selectGroup
      if (!this.selectGroup) {
        this.topicList.forEach((itm) => {
        this.list.forEach((itm) => {
          itm.checked = false
        })
      }
    },
    unselected (val) {
      // console.log(val)
      this.selectGroup = true
      this.list.forEach((itm) => {
        if (itm.name === val.name) {
          console.log(val.name)
          itm.checked = false
          itm.isShow = false
        }
      })
    },
    selected (val) {
      // console.log(val)
      this.title = val.name
      this.selectGroup = true
      this.topicList.forEach((itm) => {
        itm.checked = val.name === itm.name
      this.list.forEach((itm) => {
        if (itm.name === val.name) {
          itm.isShow = true
          itm.checked = true
        } else {
          itm.checked = false
        }
      })
      this.setComp(val)
    },
    setComp (val) {
      this.title = val.name
      switch (val.name) {
        case '污染源':
          this.gcComp = DischargeSearch
          break
        case '废水':
          this.gcComp = WaterWasteSearch
          this.gcComp = WasteWaterSearch
          break
        case '废气':
          this.gcComp = GasWasteSearch
          this.gcComp = WasteGasSearch
          break
        case '固废':
          this.gcComp = SolidWasteSearch
@@ -160,9 +182,6 @@
      }
    },
    handlePage (page) {
    },
    handleGd () {
      this.title = '管道信息查询'
    },
    toggleMonitorPanel () {
      this.isCollapse = !this.isCollapse
@@ -204,37 +223,60 @@
      //     })
      //   }
    },
    defaultLastOne () {
      let v = {}
      this.topicList.forEach((item) => {
        if (item.isShow) {
          v = item
    containsLayer (layer) {
      if (layer) {
        for (let i = 0; i < layer.length; i++) {
          const lay = layer[i]
          const checked = lay.checked
          for (let j = 0; j < this.list.length; j++) {
            const topic = this.list[j]
            if (lay.name === topic.name) {
              if (lay.layers) {
                const isChecked = this.isChecked(lay.layers)
                if (isChecked) {
                  this.selected(topic)
                } else {
                  this.unselected(topic)
                }
              } else if (checked) {
                this.selected(topic)
              }
              break
            }
          }
          this.containsLayer(lay.layers)
        }
      })
      this.selected(v)
      }
    },
    isChecked (layers) {
      for (let i = 0; i < layers.length; i++) {
        const layer = layers[i]
        const checked = layer.checked
        if (checked) {
          return true
        }
        if (layer.layers) {
          return this.isChecked(layer.layers)
        }
      }
      return false
    }
  },
  mounted () {
    const that = this
    bus.$on('changeSearchBar', function (obj) {
      that.gcComp = ''
      that.topicList.forEach((item) => {
        if (item.name === obj.name) {
          if (obj.type > 0) {
            item.isShow = true
          } else {
            item.isShow = false
          }
          // item.isShow = obj.checked
          if (item.isShow) {
            that.selected(item)
          } else {
            that.defaultLastOne()
          }
        }
      })
    })
  //  console.log(that.topicList)
    /* bus.$on('changeSearchBar', (obj) => {
      const topic = this.search(this.serviceLayers, obj)
      console.log('====' + JSON.stringify(topic))
    }) */
  },
  watch: {
    serviceLayers: {
      handler: function (newVal, oldVal) {
        this.containsLayer(newVal)
      },
      immediate: true,
      deep: true
    }
  }
}
</script>
src/components/panel/topicSearch/WasteGasSearch.vue
File was renamed from src/components/panel/topicSearch/GasWasteSearch.vue
@@ -3,7 +3,7 @@
    <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 label="区域:" size="mini" class="search-panel-item">
<!--        <el-form-item label="区域:" size="mini" class="search-panel-item">
          <el-select style="width: 100%"  v-model="form.areaVal" @change="areaType"  :popper-class="'select-down'">
            <el-option
                v-for="item in inareaTypeOptions"
@@ -12,7 +12,7 @@
                :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        </el-form-item>-->
        <el-form-item label="企业名称:" size="mini">
          <el-select style="width: 100%"  v-model="form.enterpriseVal"  @change="enterpriseType" :popper-class="'select-down'">
            <el-option
@@ -23,8 +23,9 @@
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="二级单位:" size="mini">
          <el-select style="width: 100%"  v-model="form.enterpriseSubunitsVal"  @change="enterpriseSubunitsType" :popper-class="'select-down'">
        <el-form-item label="单位部门:" size="mini">
          <el-select style="width: 100%"  v-model="form.enterpriseSubunitsVal"  @change="enterpriseSubunitsType"
                     :popper-class="'select-down'">
            <el-option
                v-for="item in enterpriseSubunitsTypeOptions"
                :key="item.value"
@@ -33,10 +34,11 @@
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="三级单位:" size="mini">
          <el-select style="width: 100%"  v-model="form.enterpriseSubunitsVal"  @change="enterpriseSubunitsType" :popper-class="'select-down'">
        <el-form-item label="控制级别:" size="mini">
          <el-select style="width: 100%"  v-model="form.enterpriseLevelVal"  @change="enterpriseLevelType"
                     :popper-class="'select-down'">
            <el-option
                v-for="item in enterpriseSubunitsTypeOptions"
                v-for="item in enterpriseLevelTypeOptions"
                :key="item.value"
                :label="item.label"
                :value="item.value">
@@ -45,7 +47,9 @@
        </el-form-item>
<!--        <el-form-item label="风险级别" size="mini"></el-form-item>-->
        <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  v-for="(item,index) in levelOfRisk" :label="item.value" :key="index">
            <span class="levelOfRisk-type">{{item.name}}</span>
          </el-radio>
        </el-radio-group>
        <!--              <el-form-item >-->
        <div class="page_total">
@@ -74,8 +78,7 @@
        <img src="../../../../public/assets/images/map/exhaust/fq_green2.png" alt="" class="state"/>
        <div>
          <h3>{{ item.Name }}</h3>
          <p>所属部门:<span>{{ item.porltName }}</span></p>
          <p>风险级别:<span>三级</span></p>
          <p>所属部门:<span>{{ item.DeptSname }}</span></p>
        </div>
      </div>
@@ -108,7 +111,7 @@
import { pulseEffect, setPanTo } from '../../../utils/utils'
export default {
  name: 'GasWasteSearch',
  name: 'WasteGasSearch',
  props: ['title'],
  data () {
    return {
@@ -117,23 +120,31 @@
      total: 0,
      // 分页
      pageSize: 10,
      current: 1,
      inareaTypeOptions: [],
      enterpriseTypeOptions: [],
      enterpriseSubunitsTypeOptions: [],
      enterpriseLevelTypeOptions: [
        { label: '国控', value: '1' },
        { label: '省控', value: '2' },
        { label: '市控', value: '3' },
        { label: '其他', value: '4' }
      ],
      form: {
        areaVal: '',
        enterpriseVal: '',
        enterpriseSubunitsVal: '',
        enterpriseLevelVal: '',
        type: ''
      },
      // pageSize: 10,
      // current: 1,
      levelOfRisk: [
        { name: '全部', value: '1' },
        { name: '正常', value: '2' },
        { name: '超标', value: '3' },
        { name: '异常', value: '4' },
        { name: '停产', value: '5' }
        { name: '预警', value: '4' },
        { name: '异常', value: '5' },
        { name: '缺失', value: '6' },
        { name: '停运', value: '7' }
      ]
    }
  },
@@ -144,13 +155,13 @@
      this.handleSearch()
    },
    // 区域筛选
    areaType (val) {
    /* areaType (val) {
      this.pipelineTypeOptions.forEach((itm) => {
        if (val === itm.value) {
        }
      })
    },
    }, */
    // 企业筛选
    enterpriseType (val) {
      this.dataTypeOptions.forEach((itm) => {
@@ -163,17 +174,29 @@
    enterpriseSubunitsType (val) {
    },
    // 三级单位筛选
    // 控制级别筛选
    enterpriseLevelType (val) {
    },
    async handleSearch () {
      const param = {
        pipelineType: this.form.pipelineType,
        dataType: this.form.dataType
        companyId: 3900100145, // 企业编码
        id: '',
        monType: 2, // 废气
        userCode: 'wenchun.deng', // 用户名称
        monDuration: '',
        epName: '',
        secdDeptId: '',
        contrLevel: '',
        dataStatus: '',
        dataFlag: '',
        runStatus: '',
        emissTypeId: ''
      }
      // console.log(param)
      const res = await mapApi.getWasteGas(param)
      // console.log(res)
      this.list = res.Result.DataInfo
      console.log(this.list)
      this.list = res.Result.DataInfo || {}
      this.total = this.list.length
    },
    // 弹窗展示
    async handleLocation (val) {
src/components/panel/topicSearch/WasteWaterSearch.vue
File was renamed from src/components/panel/topicSearch/WaterWasteSearch.vue
@@ -3,7 +3,7 @@
        <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 label="区域:" size="mini" class="search-panel-item">
<!--                <el-form-item label="区域:" size="mini" class="search-panel-item">
                    <el-select style="width: 100%" v-model="form.areaVal" @change="areaType"
                               :popper-class="'select-down'">
                        <el-option
@@ -13,7 +13,7 @@
                                :value="item.value">
                        </el-option>
                    </el-select>
                </el-form-item>
                </el-form-item>-->
                <el-form-item label="企业名称:" size="mini">
                    <el-select style="width: 100%" v-model="form.enterpriseVal" @change="enterpriseType"
                               :popper-class="'select-down'">
@@ -25,7 +25,7 @@
                        </el-option>
                    </el-select>
                </el-form-item>
                <el-form-item label="二级单位:" size="mini">
                <el-form-item label="单位部门:" size="mini">
                    <el-select style="width: 100%" v-model="form.enterpriseSubunitsVal" @change="enterpriseSubunitsType"
                               :popper-class="'select-down'">
                        <el-option
@@ -36,11 +36,11 @@
                        </el-option>
                    </el-select>
                </el-form-item>
                <el-form-item label="三级单位:" size="mini">
                    <el-select style="width: 100%" v-model="form.enterpriseSubunitsVal" @change="enterpriseSubunitsType"
                <el-form-item label="控制级别:" size="mini">
                    <el-select style="width: 100%" v-model="form.enterpriseLevelVal" @change="enterpriseLevelType"
                               :popper-class="'select-down'">
                        <el-option
                                v-for="item in enterpriseSubunitsTypeOptions"
                                v-for="item in enterpriseLevelTypeOptions"
                                :key="item.value"
                                :label="item.label"
                                :value="item.value">
@@ -77,11 +77,10 @@
        <el-scrollbar style="height:264px">
            <div class="environmental-risk-list" v-for="(item,index) in list" :key="index"
                 @click="handleLocation(item)"><!--  -->
                <img src="../../../../public/assets/images/map/exhaust/fq_green2.png" alt="" class="state"/>
                <img src="../../../../public/assets/images/map/wastewater/fs_bright_green.png" alt="" class="state"/>
                <div>
                    <h3>{{ item.Name }}</h3>
                    <p>所属部门:<span>{{ item.porltName }}</span></p>
                    <p>风险级别:<span>三级</span></p>
                    <p>所属部门:<span>{{ item.DeptSname }}</span></p>
                </div>
            </div>
@@ -114,7 +113,7 @@
import { pulseEffect, setPanTo } from '../../../utils/utils'
export default {
  name: 'WaterWasteSearch',
  name: 'WasteWaterSearch',
  props: ['title'],
  data () {
    return {
@@ -124,40 +123,33 @@
      total: 0,
      // 分页
      pageSize: 10,
      current: 1,
      inareaTypeOptions: [],
      enterpriseTypeOptions: [],
      enterpriseSubunitsTypeOptions: [],
      enterpriseLevelTypeOptions: [
        { label: '国控', value: '1' },
        { label: '省控', value: '2' },
        { label: '市控', value: '3' },
        { label: '其他', value: '4' }
      ],
      form: {
        areaVal: '',
        enterpriseVal: '',
        enterpriseSubunitsVal: '',
        enterpriseLevelVal: '',
        type: '1'
      },
      // pageSize: 10,
      // current: 1,
      isWaybillHover: true,
      isRouteHover: false,
      levelOfRisk: [
        {
          name: '全部',
          value: '1'
        },
        {
          name: '正常',
          value: '2'
        },
        {
          name: '超标',
          value: '3'
        },
        {
          name: '异常',
          value: '4'
        },
        {
          name: '停产',
          value: '5'
        }
        { name: '全部', value: '1' },
        { name: '正常', value: '2' },
        { name: '超标', value: '3' },
        { name: '预警', value: '4' },
        { name: '异常', value: '5' },
        { name: '缺失', value: '6' },
        { name: '停运', value: '7' }
      ]
    }
  },
@@ -168,13 +160,13 @@
      this.handleSearch()
    },
    // 区域筛选
    areaType (val) {
    /* areaType (val) {
      this.pipelineTypeOptions.forEach((itm) => {
        if (val === itm.value) {
        }
      })
    },
    }, */
    // 企业筛选
    enterpriseType (val) {
      this.dataTypeOptions.forEach((itm) => {
@@ -187,17 +179,29 @@
    enterpriseSubunitsType (val) {
    },
    // 三级单位筛选
    // 控制级别筛选
    enterpriseLevelType (val) {
    },
    async handleSearch () {
      const param = {
        pipelineType: this.form.pipelineType,
        dataType: this.form.dataType
        companyId: 3900100145, // 企业编码
        id: '',
        monType: 1, // 废水
        userCode: 'wenchun.deng', // 用户名称
        monDuration: '',
        epName: '',
        secdDeptId: '',
        contrLevel: '',
        dataStatus: '',
        dataFlag: '',
        runStatus: '',
        emissTypeId: ''
      }
      // console.log(param)
      const res = await mapApi.getWasteWater(param)
      // console.log(res)
      this.list = res.Result.DataInfo
      console.log(this.list)
      this.list = res.Result.DataInfo || {}
      this.total = this.list.length
    },
    // 弹窗展示
    handleLocation (val) {
src/components/panel/topicSearch/enterprise-emergency/EventQuery.vue
@@ -66,7 +66,7 @@
                <i class="state"></i>
                <div>
                    <h3>
                        <span @click="disposalfx">件名称:XXX事件</span>
                        <span @click="disposalfx">事件名称:XXX事件</span>
                        <el-button class="rt btn00fff6" size="mini" style="margin-right: 0.04rem;"
                                   @click="startAnalysis">
                            <span>开始分析</span>
src/components/table/components/tabHandover.vue
@@ -19,8 +19,7 @@
import EnvironmentalRisk from '@components/table/components/EnvironmentalRisk'
import Pipeline from '@components/table/components/Pipeline'
import CorporateEmergency from '@components/table/components/CorporateEmergency'
import { TopicList } from '../../../conf/Topic'
import { topicList } from '../../../conf/Topic'
export default {
  name: 'tabHandover',
  components: {
@@ -37,8 +36,8 @@
    return {
      titleProp: '',
      activeName: '污染源',
      topicList: TopicList, // tab项
      gcComp: PollutionSource // 默认显示污染源内容
      topicList: topicList, // tab项
      gcComp: PollutionSource
    }
  },
  methods: {
src/conf/Constants.js
@@ -17,12 +17,12 @@
}
export const logicMapper = {
  wasteGasPfk: 'WasteGas.js',
  wasteWaterPfk: 'WasteWater.js',
  wasteSolidCcd: 'WasteSolid.js',
  wasteGasPfk: 'WasteGas.js', // 废气
  wasteWaterPfk: 'WasteWater.js', // 废水
  wasteSolidCcd: 'WasteSolid.js', // 固废
  sewersAreaGs: 'Company.js',
  pipesegment: 'PipeLineAnimal.js',
  pollutionSources: 'SourcesPollution.js',
  pollutionSourcesZlss: 'GovernEquipment.js', // 污染源-治理设施
  envRiskChart: 'EnvironmentRisk.js', // 风险统计图
  envRiskMajor: 'RiskSource.js', // 重大风险源
  envRiskFirst: 'RiskSource.js', // 一级风险源
@@ -65,7 +65,8 @@
  emergencyesources: '应急物资',
  firefightingunit: '消防单位',
  unitareaboundary: '装置区边界',
  sensitivetarget: '敏感目标'
  sensitivetarget: '敏感目标',
  chokevalve: '截流闸'
}
export const LAYERPROPS = {
@@ -92,6 +93,7 @@
    name: '管网名称',
    linenumtype: '管线类型',
    pipename: '管线名称',
    subchaname: '支线名称',
    mediumtype: '输送介质',
    length: '长度(m)',
    startposname: '起点位置名称',
@@ -414,5 +416,18 @@
    huncount: '常规人口数量',
    structureoridsitearea: '占地面积',
    adminzonename: '行政隶属'
  },
  // 截流闸
  chokevalve: {
    closurename: '名称',
    closurecode: '编码',
    pointnumber: '测点编号',
    mediumtype: '介质',
    size: '尺寸(m)',
    operatingtype: '控制方式',
    telephone: '联系电话',
    resperson: '负责人',
    startdate: '投用日期',
    operationalstatus: '运行状态'
  }
}
src/conf/Topic.js
@@ -12,10 +12,10 @@
  EnterpriseEmergencySearch: () => import('@components/panel/topicSearch/EnterpriseEmergencySearch.vue')
}
export const TopicList = [{
export const topicList = [{
  name: '污染源',
  id: 1,
  check: false,
  checked: false,
  isShow: false,
  icon: 'iconwuranyuan',
  comp: ''
src/conf/layers/LayerEnvRisk.js
@@ -26,7 +26,7 @@
      name: '重大风险',
      sname: '重大风险',
      checked: false, // 默认选中状态
      minZoom: 10,
      // minZoom: 10,
      color: 'red',
      level: 0
    },
@@ -36,7 +36,7 @@
      sname: '一级风险',
      checked: false, // 默认选中状态
      type: 0,
      minZoom: 10,
      // minZoom: 10,
      color: 'sandybrown',
      level: 1
    },
@@ -46,7 +46,7 @@
      sname: '二级风险',
      checked: false,
      type: 0,
      minZoom: 10,
      // minZoom: 10,
      color: 'yellow',
      level: 2
    },
@@ -56,7 +56,7 @@
      sname: '三级风险',
      checked: false,
      type: 0,
      minZoom: 10,
      // minZoom: 10,
      color: 'green',
      level: 3
    }
src/utils/utils.js
@@ -27,7 +27,7 @@
 * 脉冲效果
 */
export function pulseEffect (xy) {
  let times = 5
  let times = 1000
  const colors = ['#00f100', '#ff0000']
  // 插件 效果实现
  var pulsingIcon = window.L.icon.pulse({
src/views/popup/DynamicHeader/DynamicTable.vue
New file
@@ -0,0 +1,43 @@
<template>
  <el-table :data="tableData" border :height="height">
    <template v-for="item in tableHeader">
      <table-column v-if="item.children && item.children.length" :key="item.id" :coloumn-header="item"></table-column>
      <el-table-column v-else :key="item.id" :label="item.label" :prop="item.prop" align="center"></el-table-column>
    </template>
  </el-table>
</template>
<script>
import TableColumn from './TableColumn'
export default {
  props: {
    // 表格的数据
    tableData: {
      type: Array,
      required: true
    },
    // 多级表头的数据
    tableHeader: {
      type: Array,
      required: true
    },
    // 表格的高度
    height: {
      type: String,
      default: '340'
    }
  },
  components: {
    TableColumn
  },
  watch: {
    tableData (val, oldVal) {
      this.tableData = val
    }
  }
}
</script>
<style scoped>
</style>
src/views/popup/DynamicHeader/TableColumn.vue
New file
@@ -0,0 +1,24 @@
<template>
  <el-table-column :label="coloumnHeader.label" :prop="coloumnHeader.label" align="center">
    <template v-for="item in coloumnHeader.children">
      <tableColumn v-if="item.children && item.children.length" :key="item.id" :coloumn-header="item"></tableColumn>
      <el-table-column v-else :key="item.name" :label="item.label" :prop="item.prop" align="center"></el-table-column>
    </template>
  </el-table-column>
</template>
<script>
export default {
  name: 'tableColumn',
  props: {
    coloumnHeader: {
      type: Object,
      required: true
    }
  }
}
</script>
<style scoped>
</style>