派生自 wuyushui/SewerAndRainNetwork

chenyibo
2021-03-30 1250621ab9ea6ea93911be0f283c3bfcdceb0667
Merge branch 'develop' of http://xearth.cn:6600/r/wuyushui/SewerAndRainNetwork into develop
14个文件已添加
14个文件已修改
1 文件已重命名
643 ■■■■■ 已修改文件
src/api/SolidWaste/index.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/map-pages/basenav/flugas/exhaust/fq_blue.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/map-pages/basenav/flugas/exhaust/fq_bright_green.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/map-pages/basenav/flugas/exhaust/fq_gray.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/map-pages/basenav/flugas/exhaust/fq_green.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/map-pages/basenav/flugas/exhaust/fq_green_xc.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/map-pages/basenav/flugas/exhaust/fq_orange.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/map-pages/basenav/flugas/exhaust/fq_red.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/map-pages/basenav/flugas/exhaust/fq_yellow.png 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/GasComponents/GasECharts.vue 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/GasComponents/GasTab.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/GasComponents/GasTable.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/GasComponents/GasVideo.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/GasComponents/PublicTable.vue 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/PublicBounced.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/SolidWaste/SolidWaste.js 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/SolidWaste/directive/dir.js 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/SolidWaste/directive/directive.js 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/SolidWaste/directive/index.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/WasteWater/WasteWater.js 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/logic/Sample.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/logic/WasteGas.js 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/service/AnimalService.js 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/service/BusiLayerService.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/service/LayerFactory.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/service/WfsLayerService.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/service/WmsLayerService.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/conf/Constants.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/MapTemplate.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/SolidWaste/index.js
New file
@@ -0,0 +1,6 @@
import $http from '@utils/axios'
// import Qs from 'qs'
export const getSolidWaste = (data = {}) => {
  return $http.get('/wasteSolid/getSolidWaste', data)
}
src/assets/images/map-pages/basenav/flugas/exhaust/fq_blue.png
src/assets/images/map-pages/basenav/flugas/exhaust/fq_bright_green.png
src/assets/images/map-pages/basenav/flugas/exhaust/fq_gray.png
src/assets/images/map-pages/basenav/flugas/exhaust/fq_green.png
src/assets/images/map-pages/basenav/flugas/exhaust/fq_green_xc.png
src/assets/images/map-pages/basenav/flugas/exhaust/fq_orange.png
src/assets/images/map-pages/basenav/flugas/exhaust/fq_red.png
src/assets/images/map-pages/basenav/flugas/exhaust/fq_yellow.png
src/components/BaseNav/PublicBounced/GasComponents/GasECharts.vue
@@ -7,10 +7,12 @@
    <div class="border_corner border_corner_left_bottom"></div>
    <div class="border_corner border_corner_right_bottom"></div>
    <div class="main">
      <div class="main-echarts">
        <div id="echarts" style="width:100%;height:100%" ref="main"></div>
        <div id="echarts" ref="main"></div>
        <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>
    </div>
  </div>
</template>
@@ -22,18 +24,27 @@
      const myChart = this.$echarts.init(this.$refs.main)
      const option = {
        title: {
          text: '折线图堆叠'
          // text: '折线图堆叠'
        },
        // color: '#fff',
        color: ['#5470c6', '#91CC75', '#EE6666', '#FF0087'],
        tooltip: {
          trigger: 'axis'
          trigger: 'axis',
          axisPointer: {
            type: 'cross',
            label: {
              color: '#1a4245'
            }
          }
        },
        // legend: {
        //   data: ['邮件营销', '联盟广告', '视频广告', '直接访问', '搜索引擎']
        // },
        legend: {
          data: ['氮氧化物', '二氧化硫', '烟尘', '废气流量']
          // pageTextStyle: {
          //   color: '#fff'
          // }
        },
        grid: {
          left: '3%',
          right: '4%',
          right: '3%',
          bottom: '3%',
          containLabel: true
        },
@@ -42,63 +53,98 @@
            saveAsImage: {}
          }
        },
        // 图标缩放设置
        dataZoom: [{
          type: 'inside',
          start: 0,
          end: 100
        }, {
          start: 0,
          end: 100,
          show: false,
          // handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
          handleSize: '80%',
          handleStyle: {
            color: '#fff',
            shadowBlur: 3,
            shadowColor: 'rgba(0, 0, 0, 0.6)',
            shadowOffsetX: 2,
            shadowOffsetY: 2
          }
        }],
        // x轴的设置
        xAxis: {
          type: 'category',
          boundaryGap: false,
          data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
          axisLabel: {
          data: ['12:00:01', '12:00:02', '12:00:03', '12:00:04', '12:00:05', '12:00:06', '12:00:07'],
          axisLabel: { // x轴全部显示
            rotate: 20,
            interval: 0,
            textStyle: {
              color: '#7edae8' // 坐标的字体颜色
              color: '#fff'
            }
          },
          axisLine: {
            show: false, // 隐藏坐标轴
          splitLine: { // 网格垂直线为虚线
            show: true,
            lineStyle: {
              color: '#00eeff' // 坐标轴的颜色
              type: 'dashed'
            }
          },
          axisTick: { // x 轴刻度显示
            show: false
          },
          axisLine: {
            lineStyle: {
              color: '#FFFFFF',
              width: 1 // 这里是为了突出显示加上的
            }
          }
        },
        // Y 轴的设置
        yAxis: [{
          type: 'value',
          // name: yname, // 后期图标Y轴显示单位
          name: '浓度(mg/m³)',
          axisLabel: {
            formatter: '{value}',
            textStyle: {
              color: '#7edae8' // 坐标的字体颜色
              color: '#fff' // 坐标的字体颜色
            }
          },
          axisPointer: {
            snap: true // 自动吸附最近的点
          },
          splitLine: {
            show: false // y轴 网格线不显示
          },
          axisLine: {
            show: false, // 隐藏坐标轴
            lineStyle: {
              color: '#00eeff' // 坐标轴的颜色
              color: '#ffffff', // 坐标轴的颜色
              width: 1
            }
          }
        }],
        series: [
          {
            name: '邮件营销',
            name: '氮氧化物',
            type: 'line',
            stack: '总量',
            data: [120, 132, 101, 134, 90, 230, 210]
          },
          {
            name: '联盟广告',
            type: 'line',
            stack: '总量',
            data: [220, 182, 191, 234, 290, 330, 310]
          },
          {
            name: '视频广告',
            name: '二氧化硫',
            type: 'line',
            stack: '总量',
            data: [150, 232, 201, 154, 190, 330, 410]
          },
          {
            name: '直接访问',
            name: '烟尘',
            type: 'line',
            stack: '总量',
            data: [320, 332, 301, 334, 390, 330, 320]
          },
          {
            name: '搜索引擎',
            name: '废气流量',
            type: 'line',
            stack: '总量',
            data: [820, 932, 901, 934, 1290, 1330, 1320]
@@ -115,50 +161,48 @@
</script>
<style scoped lang="less">
.win {
  width: 100%;
  height: 100%;
  position: relative;
  //display: inline-block;
  background-color: rgba(33, 41, 69,0.9);
}
.border_corner{
  z-index: 2500;
  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;
}
.main {
  width: 100%;
  height: 100%;
  .main-echarts{
    border: 1px solid #396d83;
  }
}
    .win {
        /*width: 100%;*/
        /*height: 100%;*/
        position: relative;
        //display: inline-block;
        background-color: rgba(33, 41, 69,0.9);
    }
    #echarts{
        width: 600px;
        height: 260px;
    }
    .border_corner{
        z-index: 2500;
        position: absolute;
        width: 14px;
        height: 14px;
        background: rgba(0,0,0,0);
        border: 2px 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-bottom-left-radius: 4px;
    }
    .border_corner_right_bottom{
        bottom: 0;
        right: 0;
        border-left: none;
        border-top: none;
    }
</style>
src/components/BaseNav/PublicBounced/GasComponents/GasTab.vue
@@ -37,7 +37,6 @@
.win {
  position: relative;
  //display: inline-block;
  margin-bottom: 13px;
  background-color: rgba(33, 41, 69,0.9);
}
@@ -46,7 +45,6 @@
  height: 100%;
  .main-matter{
    font-size: 13px;
    padding: 9px 7px;
    font-weight: normal;
    border: 1px solid #396d83;
    .row-item-one{
@@ -56,7 +54,7 @@
      width: 100%;
      color: #00d0f9;
      display: flex;
      font-size: 12px!important;
      font-size: 12px !important;
      .el-col{
        flex: 1;
        width: 100%;
@@ -73,7 +71,7 @@
  }
}
.border_corner{
  z-index: 2500;
  z-index: 999;
  position: absolute;
  width: 10px;
  height: 10px;
@@ -104,20 +102,4 @@
  border-left: none;
  border-top: none;
}
//.el-row {
//  width: 100%;
//  color: #00d0f9;
//  .el-col{
//    width: 180px;
//    height: 28px;
//    background-color: #243a55;;
//    text-align: center;
//    line-height: 28px;
//    margin-left: 6px;
//    border-radius: 4px;
//    &:nth-child(1){
//      margin-left:0;
//    }
//  }
//}
</style>
src/components/BaseNav/PublicBounced/GasComponents/GasTable.vue
src/components/BaseNav/PublicBounced/GasComponents/GasVideo.vue
@@ -7,7 +7,7 @@
    <div class="border_corner border_corner_right_bottom"></div>
    <div class="main">
      <div class="main-video">
        <video width="100%" height="100%" controls>
        <video controls>
          <source src="movie.mp4" type="video/mp4">
          <source src="movie.ogg" type="video/ogg">
        </video>
@@ -24,23 +24,25 @@
<style scoped lang="less">
.win {
  /*width: 100%;*/
  /*height: 100%;*/
  position: relative;
  //display: inline-block;
  background-color: rgba(33, 41, 69,0.9);
/*//border: 1px solid #396d83;*/
}
.main {
  width: 100%;
  height: 100%;
  .main-video {
    padding: 7px;
    border: 1px solid #396d83;
    //border: 1px solid #396d83;
    width: 100%;
    height: 100%;
    video {
      width: 100%;
      height: 100%;
      outline: none;
    }
  }
}
.border_corner{
  z-index: 2500;
  z-index: 999;
  position: absolute;
  width: 14px;
  height: 14px;
src/components/BaseNav/PublicBounced/GasComponents/PublicTable.vue
@@ -1,53 +1,48 @@
<template>
  <div class="public-table">
    <table border="1">
      <tr>
        <th>111</th>
        <th>111</th>
        <th>111</th>
        <th>111</th>
        <th>111</th>
        <th>111</th>
      </tr>
      <tr>
        <td>4444444444</td>
        <td>4444444444</td>
        <td>4444444444</td>
        <td>4444444444</td>
        <td>4444444444</td>
        <td>4444444444</td>
      </tr>
    </table>
    <el-col class="el-col">
      <el-table
          border
          tooltip-effect="dark"
          :data="data"
      >
        <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>
    </el-col>
  </div>
</template>
<script>
export default {
  name: 'PublicTable',
  props: ['requestSolidWasteData'],
  data () {
    return {
      tableData: [{
        date: '2016-05-02',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-04',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1517 弄'
      }, {
        date: '2016-05-01',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1519 弄'
      }, {
        date: '2016-05-03',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1516 弄'
      }]
      data: []
    }
  },
  mounted () {
    this.$nextTick(() => {
      this.getSolidWasteData()
    })
  },
  methods: {
    getSolidWasteData () {
      // const data = requestSolidWasteData
      // console.log(data)
    }
  }
}
</script>
<style lang="less" scoped>
.public-table {
}
</style>
src/components/BaseNav/PublicBounced/PublicBounced.vue
@@ -7,7 +7,7 @@
    <div class="public-bounced-content">
      <div class="public-bounced-content-left">
        <GasTab :displayContent="displayContent"></GasTab>
        <PublicTable v-if="value === 'gufei'"></PublicTable>
        <PublicTable v-if="value === 'gufei'" :requestSolidWasteData="displayContent.StoragePlaceId"></PublicTable>
        <GasECharts v-else></GasECharts>
      </div>
      <div class="public-bounced-content-right">
@@ -19,7 +19,7 @@
<script>
import '@/components/BaseNav/SolidWaste/directive'
import '@/components/BaseNav/SolidWaste/directive/dir'
import GasTab from '@components/BaseNav/PublicBounced/GasComponents/GasTab'
import PublicTable from '@components/BaseNav/PublicBounced/GasComponents/PublicTable'
import GasECharts from '@components/BaseNav/PublicBounced/GasComponents/GasECharts'
@@ -54,10 +54,11 @@
<style lang="less" scoped>
.public-bounced {
  width: 75%;
  z-index: 999;
  position: absolute;
  top: 50%;
  left: 50%;
  bottom: 5%;
  left: 15%;
  background-color: #002432;
  border: 1px #9fc5c8 solid;
@@ -82,16 +83,20 @@
  }
  .public-bounced-content {
    margin: 15px auto;
    display: flex;
    align-items: center;
    justify-content: space-around;
    .public-bounced-content-left {
      width: 48%;
      height: 100%;
    }
    .public-bounced-content-right {
      width: 48%;
      height: 100%;
    }
  }
}
</style>
src/components/BaseNav/SolidWaste/SolidWaste.js
@@ -67,7 +67,7 @@
            // console.log(this.map.setCenter([e.target.getLatLng().lat, e.target.getLatLng().lng]))
            // this.map.flyTo([e.target.getLatLng().lat, e.target.getLatLng().lng])
            // this.map.panTo([e.target.getLatLng().lat, e.target.getLatLng().lng], 100)
            this.setPanTo(e.target.getLatLng(), 30)
            this.setPanTo(e.target.getLatLng(), 250)
            this.EffectOfPulse(e.target.getLatLng())
            this.SolidWastePopup.setData(data[i], 'gufei')
            return this.SolidWastePopup.$el
@@ -87,8 +87,9 @@
    position = this.map.latLngToLayerPoint(position)
    position.y += value
    position = this.map.layerPointToLatLng(position)
    this.map.setView(position)
    // this.map.flyTo(position)
    // this.map.setView(position)
    this.map.flyTo(position)
    // this.map.panTo(position)
  }
  // 固废点击进行的 内容的设置
@@ -121,32 +122,32 @@
  // 脉冲效果设置实现
  EffectOfPulse (position, markers, layerGroup) {
    // 区分直接执行 和判断执行的不同区别
    var differentColor = ''
    if (markers) {
      differentColor = '#ff0000'
    } else {
      differentColor = '#98FB98'
    }
    // 坐标数据:报警传进来的是数组 / 点击传进来的是object
    var FinalPosition = position instanceof Array ? {
      lat: position[0],
      lng: position[1]
    } : position
    // 插件 效果实现
    var pulsingIcon = this.L.icon.pulse({
      iconSize: [20, 20],
      color: differentColor,
      fillColor: ''
    })
    if (markers) {
      // markers.push(this.L.marker(FinalPosition, { icon: pulsingIcon }))
      // this.L.layerGroup(markers).addLayer(layerGroup)
    } else {
      var picGroupMarker = new this.L.FeatureGroup()
      this.L.marker(FinalPosition, { icon: pulsingIcon }).addTo(picGroupMarker)
      this.pulseHeighLightMarker = picGroupMarker.addTo(this.SolidWasteLayerGroup)
      this.PulseCountSetting()
    }
    // var differentColor = ''
    // if (markers) {
    //   differentColor = '#ff0000'
    // } else {
    //   differentColor = '#98FB98'
    // }
    // // 坐标数据:报警传进来的是数组 / 点击传进来的是object
    // var FinalPosition = position instanceof Array ? {
    //   lat: position[0],
    //   lng: position[1]
    // } : position
    // // 插件 效果实现
    // var pulsingIcon = this.L.icon.pulse({
    //   iconSize: [20, 20],
    //   color: differentColor,
    //   fillColor: ''
    // })
    // if (markers) {
    //   // markers.push(this.L.marker(FinalPosition, { icon: pulsingIcon }))
    //   // this.L.layerGroup(markers).addLayer(layerGroup)
    // } else {
    //   var picGroupMarker = new this.L.FeatureGroup()
    //   this.L.marker(FinalPosition, { icon: pulsingIcon }).addTo(picGroupMarker)
    //   this.pulseHeighLightMarker = picGroupMarker.addTo(this.SolidWasteLayerGroup)
    //   this.PulseCountSetting()
    // }
  }
  // 对图标脉冲 进行set设置  // 高亮图层
src/components/BaseNav/SolidWaste/directive/dir.js
src/components/BaseNav/SolidWaste/directive/directive.js
New file
@@ -0,0 +1,77 @@
export default {
  bind (el, binding, vnode) {
    const dialogHeaderEl = el.querySelector('.el-dialog__header')
    const dragDom = el.querySelector('.el-dialog')
    dialogHeaderEl.style.cssText += ';cursor:move;'
    dragDom.style.cssText += ';top:0px;'
    // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
    const getStyle = (function () {
      if (window.document.currentStyle) {
        return (dom, attr) => dom.currentStyle[attr]
      } else {
        return (dom, attr) => getComputedStyle(dom, false)[attr]
      }
    })()
    dialogHeaderEl.onmousedown = (e) => {
      // 鼠标按下,计算当前元素距离可视区的距离
      const disX = e.clientX - dialogHeaderEl.offsetLeft
      const disY = e.clientY - dialogHeaderEl.offsetTop
      const dragDomWidth = dragDom.offsetWidth
      const dragDomHeight = dragDom.offsetHeight
      const screenWidth = document.body.clientWidth
      const screenHeight = document.body.clientHeight
      const minDragDomLeft = dragDom.offsetLeft
      const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth
      const minDragDomTop = dragDom.offsetTop
      const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomHeight
      // 获取到的值带px 正则匹配替换
      let styL = getStyle(dragDom, 'left')
      let styT = getStyle(dragDom, 'top')
      if (styL.includes('%')) {
        styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100)
        styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100)
      } else {
        styL = +styL.replace(/\px/g, '')
        styT = +styT.replace(/\px/g, '')
      }
      document.onmousemove = function (e) {
        // 通过事件委托,计算移动的距离
        let left = e.clientX - disX
        let top = e.clientY - disY
        // 边界处理
        if (-(left) > minDragDomLeft) {
          left = -minDragDomLeft
        } else if (left > maxDragDomLeft) {
          left = maxDragDomLeft
        }
        if (-(top) > minDragDomTop) {
          top = -minDragDomTop
        } else if (top > maxDragDomTop) {
          top = maxDragDomTop
        }
        // 移动当前元素
        dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`
        // emit onDrag event
        vnode.child.$emit('dragDialog')
      }
      document.onmouseup = function (e) {
        document.onmousemove = null
        document.onmouseup = null
      }
    }
  }
}
src/components/BaseNav/SolidWaste/directive/index.js
New file
@@ -0,0 +1,14 @@
// import drag from './drag'
import drag from './directive'
const install = function (Vue) {
  Vue.directive('el-drag-dialog', drag)
}
if (window.Vue) {
  window['el-drag-dialog'] = drag
  Vue.use(install) // eslint-disable-line
}
drag.install = install
export default drag
src/components/BaseNav/WasteWater/WasteWater.js
@@ -52,16 +52,17 @@
      const Icon = new WasteWaterIcon({ iconUrl: iconUrl })
      // let url = Icon.options.iconUrl
      const marker = this.L.marker.magic([positionX, positionY], { icon: Icon, magic: 'vanishIn' })
      // const marker = this.L.marker.magic([positionX, positionY], { icon: Icon, magic: 'vanishIn' }) // 带显示动画
      const marker = this.L.marker([positionX, positionY], { icon: Icon })
      marker.bindPopup(() => {
        return this.WasteWaterPopup.$el
      }, {
        className: 's-map-popup',
        minWidth: 1000,
        closeButton: true,
        autoClose: false
      })
      // marker.bindPopup(() => {
      //   return this.WasteWaterPopup.$el
      // }, {
      //   className: 's-map-popup',
      //   minWidth: 1000,
      //   closeButton: true,
      //   autoClose: false
      // })
      // 划过出现 展示数据
      marker.bindTooltip(data[i].Name, {
        permanent: true,
@@ -74,7 +75,7 @@
        try {
          // console.log(e)
          this.EffectOfPulse(e.target.getLatLng())
          this.WasteWaterPopup.setDate(data[i])
          this.WasteWaterPopup.setData(data[i])
          return this.WasteWaterPopup.$el
        } catch (error) {
          console.log(error)
src/components/LayerController/logic/Sample.js
@@ -1,9 +1,9 @@
module.exports = function () {
  this.init = (layer) => {
  this.init = (L) => {
    console.log('sample init !!!')
  }
  this.clickListener = (list) => {
  this.clickListener = (e, data) => {
    console.log('sample clickListener !!!')
  }
}
src/components/LayerController/logic/WasteGas.js
New file
@@ -0,0 +1,46 @@
/**
 * 废气
 */
const AnimalService = require('../service/AnimalService').default
const AjaxUtils = require('../../../utils/AjaxUtils').default
module.exports = function () {
  /**
   * 返回marker对象数组
   * @param L leaflet对象
   */
  this.init = (layer, L) => {
    this.animalService = new AnimalService({ L: L, layer: layer })
    AjaxUtils.get4JsonDataByUrl('http://10.246.162.140:8080/EPInterface/DataService/EPMapService.asmx/ObtainningConInfo', {
      companyId: 3900100145,
      id: '',
      monType: 1,
      userCode: 'wenchun.deng',
      monDuration: '',
      epName: '',
      secdDeptId: '',
      contrLevel: '',
      dataStatus: '',
      dataFlag: '',
      runStatus: '',
      emissTypeId: ''
    }, function (res) {
      const data = res.data.Result.DataInfo
      for (let i = 0; i < data.length; i++) {
        // 经纬度 位置
        const positionX = data[i].Latitude
        const positionY = data[i].Longitude
        layer.addLayer(L.marker([positionX, positionY], {}))
      }
    })
  }
  this.bindTooltip = (layer) => {
    return '测试废气'
  }
  this.clickListener = (e) => {
    console.log(e)
    this.animalService.pulseEffect(e.latlng)
  }
}
src/components/LayerController/service/AnimalService.js
New file
@@ -0,0 +1,37 @@
/**
 * 动态效果封装
 */
class AnimalService {
  constructor (config) {
    this.intervals = [] // 定时器列表
    this.L = config.L
    this.layer = config.layer
    this.times = config.times || 5
    this.colors = ['#98FB98', '#ff0000']
  }
  /**
   * 脉冲效果
   */
  pulseEffect (xy) {
    // 插件 效果实现
    var pulsingIcon = this.L.icon.pulse({
      iconSize: [20, 20],
      color: this.colors[0],
      fillColor: ''
    })
    var picGroupMarker = this.L.marker(xy, { icon: pulsingIcon }).addTo(this.layer)
    var times = this.times
    // 定时
    var timeInterval = setInterval(() => {
      if (times > 0) {
        times--
      } else {
        clearInterval(timeInterval)
        picGroupMarker.remove()
      }
    }, 1000)
  }
}
export default AnimalService
src/components/LayerController/service/BusiLayerService.js
@@ -13,18 +13,21 @@
  init (layer) {
    // 引入 关联的js,在constant.js中根据config配置的id得到处理js
    const id = this.config.code
    console.log(logicMapper)
    const file = logicMapper[id]
    if (!file) {
      console.log('找不到逻辑处理js!!!')
    } else {
      console.log('-----' + file)
      var BusiLayer = require('../logic/' + file)
      console.log(BusiLayer)
      var busiLayer = new BusiLayer()
      // 调用init
      busiLayer.init(layer)
      busiLayer.init(layer, this.L)
      if (busiLayer.bindTooltip) {
        layer.bindTooltip(busiLayer.bindTooltip(layer))
      }
      // 调用click事件
      if (busiLayer.clickListener) {
        layer.on('click', busiLayer.clickListener)
      }
      layer.addTo(this.map)
    }
  }
}
src/components/LayerController/service/LayerFactory.js
@@ -2,15 +2,12 @@
import WfsLayerService from './WfsLayerService'
import BusiLayerService from './BusiLayerService'
import WmsLayerService from './WmsLayerService'
class LayerFactory {
  constructor (options) {
    this.L = options.L
    this.map = window.map
    this.layers = {}
  }
  createLayerGroup () {
    return this.L.layerGroup().addTo(this.map)
  }
  init () {
@@ -25,28 +22,26 @@
        var wfs = childConfig.wfs
        var wms = childConfig.wms
        var url = childConfig.url
        // 判断是否已经加载过,加载过就 忽略掉
        const layer = this.layers[code]
        // 判断是否已经加载过,加载过就 直接得到对象调用 显示函数
        var layer = this.layers[code]
        if (!layer) {
          const newLayer = this.createLayerGroup()
          this.layers[code] = newLayer
          layer = this.L.featureGroup({}).addTo(this.map)
          // 2. 判断类型
          if (wfs) {
            // 3. 实例化具体service
            // var busiLayerService = new BusiLayerService()
            // busiLayerService.init()
            var wfsLayerService = new WfsLayerService(childConfig)
            wfsLayerService.init(newLayer)
            wfsLayerService.init(layer)
          }
          if (wms) {
            var wmsLayerService = new WmsLayerService(childConfig)
            wmsLayerService.init(newLayer)
            wmsLayerService.init(layer)
          }
          // 请求业务数据接口
          if (url) {
            var busiLayerService = new BusiLayerService(childConfig)
            busiLayerService.init(newLayer)
            busiLayerService.init(layer)
          }
          layer ? (this.layers[code] = layer) : console.log('LayerFactory:newLayer is null,please check !!!')
        } else {
          this.show(code)
        }
@@ -69,9 +64,9 @@
  }
  /**
   * 设置index,线在最下面,点在上面
   * @param layerGroup 图层组
   */
     * 设置index,线在最下面,点在上面
     * @param layerGroup 图层组
     */
  setZIndex (layerGroup) {
    var layers = layerGroup.getLayers()
    if (layers.length > 0) {
src/components/LayerController/service/WfsLayerService.js
@@ -21,15 +21,20 @@
  }
  init (layer) {
    this.layer = layer
    const wfsUrl = this.config.wfs
    if (wfsUrl) {
      AjaxUtils.get4JsonDataByUrl(wfsUrl, this.params, (res) => this.draw(layer, res.data.features))
      this.loadData(wfsUrl)
    }
  }
  draw (layer, features) {
  loadData (wfsUrl) {
    AjaxUtils.get4JsonDataByUrl(wfsUrl, this.params, (res) => this.draw(res.data.features))
  }
  draw (features) {
    const icon = this.config.icon
    const geojson = this.L.geoJSON(features, {
    this.L.geoJSON(features, {
      style: function (feature) {
        return {
          fill: styles.defaultLineStyle.fill,
@@ -66,8 +71,7 @@
          .bindTooltip((layer) => this.tooltipListener(layer), { direction: 'bottom', offset: [0, 15], sticky: true })
          .on('mouseover', (e) => this.mouseOverListener(e, layer)).on('mouseout', (e) => this.mouseOutListener(e, layer))
      }
    }).addTo(layer)
    return geojson
    }).addTo(this.layer)
  }
  mouseOverListener (e, layer) {
src/components/LayerController/service/WmsLayerService.js
@@ -1,11 +1,11 @@
class WfsLayerService {
class WmsLayerService {
  constructor (config) {
    this.config = config
  }
  init () {
  init (layer) {
  }
}
export default WfsLayerService
export default WmsLayerService
src/conf/Constants.js
@@ -7,7 +7,8 @@
export const logicMapper = {
  fsqy: 'Sample.js',
  fspfk: 'Sample.js',
  fsjcd: 'Sample.js'
  fsjcd: 'Sample.js',
  wasteGasJcd: 'WasteGas.js'
}
export const props = {
src/views/MapTemplate.vue
@@ -165,7 +165,7 @@
      this.vectorLayerHelper = Sgis.initVectorLayersHelper(this.map) // 初始化动态要素图层助手
      this.vectorLayerHelper.initVectorLayers(this.config)
      // this.ChangeState()
      this.ChangeState()
      // this.AddGasHelper()
      // this.ChangeWaterState()