派生自 wuyushui/SewerAndRainNetwork

chenyabin
2021-04-14 faadb3a39e89b2cb7a00e81e3778f480f1f09998
Merge remote-tracking branch 'origin/develop' into develop
1个文件已添加
12个文件已修改
358 ■■■■■ 已修改文件
src/assets/css/map/map-panel-style.less 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/common/PublicTable.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/common/PublicTabs.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/logic/PipeLineAnimal.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/service/BusiLayerService.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/service/LayerFactory.js 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/helpers/WfsHelper.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/panel/topicSearch/GasWasteSearch.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/panel/topicSearch/SewersSearch.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/panel/topicSearch/SolidWasteSearch.vue 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/panel/topicSearch/WaterWasteSearch.vue 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/conf/Constants.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/conf/layers/LayerFsss.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/css/map/map-panel-style.less
@@ -393,6 +393,7 @@
}
.el-table .cell, .el-table--border td:first-child .cell, .el-table--border th:first-child .cell {
  text-align: center;
}
@@ -411,12 +412,9 @@
.el-table td, .el-table th.is-leaf {
  font-size: 0.08rem;
}
.el-table td, .el-table th.is-leaf {
  border-bottom: none;
}
.el-table .warning-row {
  background: #27304d;
  background: #28304d;
}
.el-table .success-row {
src/components/BaseNav/PublicBounced/common/PublicTable.vue
@@ -13,7 +13,7 @@
    <span></span>
    <span></span>
    <div class="main-table">
      <el-table :data="listData" style="width: 100%" height="255px" :row-class-name="tableRowClassName">
      <el-table :data="listData" style="width: 100%" height="325px" :row-class-name="tableRowClassName">
        <el-table-column v-for="(item, index) in listLabel" :key="index" :prop="item.prop"
                         :label="item.label" :show-overflow-tooltip="true"></el-table-column>
      </el-table>
@@ -62,7 +62,7 @@
  },
  mounted () {
    this.$nextTick(() => {
      this.listData.push(this.displayContentTable[0], {}, {})
      this.listData.push(this.displayContentTable[0], {}, {}, {}, {}, {}, {})
    })
  },
  methods: {
@@ -100,8 +100,12 @@
//    //border: 1px red solid;
//  }
//}
/deep/ .el-table td, .el-table th.is-leaf {
  border-bottom: none;
/deep/ .el-table td {
  border-bottom: none !important;
}
/deep/ .el-table th.is-leaf {
  border-bottom: none !important;
}
/deep/ .el-table td {
@@ -109,6 +113,10 @@
  line-height: 45px !important;
}
/deep/ .el-table tbody tr:hover > td {
  background: none !important
}
.main {
  position: relative;
  background: rgba(33, 41, 69, 0.9);
src/components/BaseNav/PublicBounced/common/PublicTabs.vue
@@ -88,7 +88,7 @@
        line-height: 0.09rem;
        padding: 0.03rem .5%;
      }
      li:last-child {
      .lastli {
        visibility: hidden
      }
    }
src/components/LayerController/logic/PipeLineAnimal.js
New file
@@ -0,0 +1,28 @@
/**
 *  管线动画控制逻辑
 */
const layerPipeLines = require('../../../conf/layers/LayerPipeLines').LayerPipeLines
module.exports = function () {
  this.init = (layer, L) => {
    console.log('sssssss')
    const layers = layerPipeLines.layers
    for (var i = 0; i < layers.length; i++) {
      const config = layers[i]
      const code = config.code
      const layer = window.layerFactory.layers[code]
      layer.setStyle({
        FILL: true,
        WEIGHT: 3,
        FILL_COLOR: '#73b2ff',
        COLOR: '#73b2ff',
        FILL_OPACITY: 0.2,
        OPACITY: 1,
        DASH_ARRAY: '4,4',
        DASH_SPPED: -5,
        ICON_SIZE: [10, 10]
      })
      console.log(layer)
    }
  }
}
src/components/LayerController/service/BusiLayerService.js
@@ -13,9 +13,10 @@
  init (layer) {
    // 引入 关联的js,在constant.js中根据config配置的id得到处理js
    const id = this.config.code
    console.log(id)
    const file = logicMapper[id]
    if (!file) {
      console.log('找不到逻辑处理js!!!')
      console.log('找不到逻辑处理js!!!' + id)
    } else {
      var BusiLayer = require('../logic/' + file)
      var busiLayer = new BusiLayer()
src/components/LayerController/service/LayerFactory.js
@@ -21,7 +21,7 @@
        var checked = config.checked
        checked && this.load(config)
        checked && this.toggleZoomByConfnig(config)
        checked && this.toggleZoomByConfig(config)
      }
    }
  }
@@ -43,14 +43,14 @@
        var childLayer = config.childLayer
        layers && this.toggleZoomByLayer(layers)
        childLayer && this.toggleZoomByLayer(childLayer)
        this.toggleZoomByConfnig(config)
        this.toggleZoomByConfig(config)
      }
    } else {
      this.toggleZoomByConfnig(layerConfig)
      this.toggleZoomByConfig(layerConfig)
    }
  }
  toggleZoomByConfnig (config) {
  toggleZoomByConfig (config) {
    const zoom = this.map.getZoom()
    var checked = config.checked
    if (checked && config.minZoom) {
@@ -112,25 +112,57 @@
  }
  flyByLayerId (layerId, bound) {
    for (var k in this.layers) {
  flyByLayerId (code, id) {
    const layer = this.layers[code]
    if (layer.eachLayer) {
      layer.eachLayer(function (layer) {
        const layers = layer.getLayers()
        for (var i = 0; i < layers.length; i++) {
          const lay = layers[i]
          const feature = lay.feature
          lay.closePopup()
          if (feature.id === id) {
            lay.openPopup()
            break
          }
        }
      })
    }
    /* for (var k in this.layers) {
      var layerGroup = this.layers[k]
      layerGroup.eachLayer(function (layer) {
        console.log(layer)
        console.log(layer.getAttribution())
      })
      var layers = layerGroup.getLayers()
      if (layers) {
        for (var m = 0; m < layers.length; m++) {
          var layer = layers[m]
          console.log(layer.toGeoJSON())
          /* var feature = layer.feature
          console.log(layer)
          console.log(layer.getLayerId(val.id))
          /!* var feature = layer.feature
          if (feature.id === layerId) {
            this.map.flyToBounds(bound)
            return layer
          } */
          } *!/
        }
      }
    }
    } */
    return null
  }
  findLayerById (layer, id) {
    const layers = layer.getLayers
    if (layers) {
      this.findLayerById(layer.getLayers(), id)
    } else {
      layer.eachLayer(function (layer) {
        console.log(layer)
      })
    }
  }
  /**
   * todo 这里无效,貌似是因为geojson加载到地图也是个layergroup
   *
src/components/helpers/WfsHelper.js
@@ -1,11 +1,11 @@
/**
 * 加载WMS,拼接FILTER,LAYERS参数等
 */
import MapConfig from '../../conf/MapConfig'
import { PIPELINE_WFS } from '../../conf/Constants'
function WfsHelper () {
  this.filters = []
  this.typeNames = []
  this.url = MapConfig.PIPELINE_WFS
  this.url = PIPELINE_WFS
  this.params = {
    REQUEST: 'getfeature',
    OUTPUTFORMAT: 'JSON',
@@ -23,8 +23,10 @@
  }
  this.addLike = (property, literal) => {
    var filter = '<PropertyIsLike><PropertyName>' + property + '</PropertyName><Literal>*' + literal + '*</Literal></PropertyIsLike>'
    this.filters.push(filter)
    if (property && literal) {
      var filter = '<PropertyIsLike><PropertyName>' + property + '</PropertyName><Literal>*' + literal + '*</Literal></PropertyIsLike>'
      this.filters.push(filter)
    }
  }
  /**
src/components/panel/topicSearch/GasWasteSearch.vue
@@ -64,7 +64,7 @@
      </el-form>
    </div>
    <el-scrollbar style="height:264px">
      <div class="environmental-risk-list" ><!-- v-for="(item,index) in list" :key="index" -->
      <div class="environmental-risk-list" v-for="(item,index) in list" :key="index" @click="handleLocation(item)"><!--  -->
        <i class="state"></i>
        <div>
          <h3>###炼化部</h3>
@@ -165,16 +165,15 @@
      // const res = await AjaxUtils.GetDataAsynByUrl(wfsHelper.getUrl(), {})
      const res = await mapApi.getWasteGas()
      console.log(res)
      if (res.data instanceof Object && Object.prototype.hasOwnProperty.call(res.data, 'features')) {
        this.list = res.data.features
      }
      this.list = res.Result.DataInfo
      // if (res.data instanceof Object && Object.prototype.hasOwnProperty.call(res.data, 'features')) {
      //   this.list = res.data.features
      // }
    },
    handleLocation (val) {
      console.log(val)
      const bound = this.L.geoJSON([val], {}).getBounds()
      var layer = window.serviceLayerHelper.getByLayerId(val.id)
      layer && layer.openPopup()
      this.$store.state.map.map.flyToBounds(bound)
      const pos = [val.Latitude, val.Longitude]
      window.map.flyTo(pos, 17)
    }
  }
}
src/components/panel/topicSearch/SewersSearch.vue
@@ -17,13 +17,13 @@
              </el-select>
            </el-form-item>
            <el-form-item :label="form.pipelineType+':'" size="mini">
              <el-select style="width: 100%" v-model="form.dataType" :popper-class="'select-down'">
              <el-select style="width: 100%" v-model="form.dataType" value-key="code" :popper-class="'select-down'">
                <!--  @change="handleDataType"-->
                <el-option
                    v-for="item in subItems"
                    :key="item.code"
                    :label="item.name"
                    :value="item.name">
                    :value="item">
                </el-option>
              </el-select>
            </el-form-item>
@@ -37,13 +37,12 @@
        <el-scrollbar style="height:380.44px;">
          <div class="environmental-risk-list" v-for="(item,index) in list" :key="index">
            <div @click="handleLocation(item)">
              <h3 class="B-TMD-table-list-title-y"
                  :class="['B-TMD-table-list-title-y-nam', { 'warning': item.vehicleStatus==='910003' }, { 'offline': item.vehicleStatus==='910001' }]">
              <h3 class="B-TMD-table-list-title-y">
                {{ item.properties.pipename }}</h3>
              <p v-for="itm in labelList" :key="itm.label">
              <!--<p v-for="itm in labelList" :key="itm.label">
                <span>{{ itm.label }}:</span>
                <span :title="item.properties[itm.key] ">{{ item.properties[itm.key] }}</span>
              </p>
              </p>-->
            </div>
          </div>
        </el-scrollbar>
@@ -126,7 +125,7 @@
    async handleSearch () {
      var wfsHelper = new WfsHelper()
      // todo 现在管网还没区分开类型,后面改
      wfsHelper.addTypeName('管网')
      wfsHelper.addTypeName(this.form.dataType.name)
      wfsHelper.addLike('name', this.form.keyword)
      // const _this = this
      const res = await AjaxUtils.GetDataAsynByUrl(wfsHelper.getUrl(), {})
@@ -136,10 +135,9 @@
      }
    },
    handleLocation (val) {
      console.log(val)
      const bound = this.L.geoJSON([val], {}).getBounds()
      // var layer = window.layerFactory.flyByLayerId(val.id, bound)
      window.map.flyToBounds(bound)
      window.layerFactory.flyByLayerId(this.form.dataType.code, val.id)
      // layer && layer.openPopup()
    }
  }
src/components/panel/topicSearch/SolidWasteSearch.vue
@@ -15,7 +15,7 @@
            </el-option>
          </el-select>
        </el-form-item>
        <el-radio-group v-model="form.type" class="levelOfRisk">
        <el-radio-group v-model="form.transferData" class="levelOfRisk">
          <el-radio v-for="(item,index) in levelOfRisk" :label="item.value" :key="index">
            <span class="levelOfRisk-type">{{ item.name }}</span>
          </el-radio>
@@ -43,6 +43,7 @@
<script>
import mapApi from '@/api/mapApi'
import publicBounced from '@/components/BaseNav/PublicBounced/PublicBounced'
export default {
  name: 'SolidWasteSearch',
@@ -115,47 +116,87 @@
          key: 'length'
        }]
      }],
      levelOfRisk: [
        {
          name: '全部',
          value: '1'
        },
        {
          name: '正常',
          value: '2'
        },
        {
          name: '预警',
          value: '3'
        }
      ],
      form: {
        keyword: '固废面板数据查询',
        // 数据的传递
        transferData: ''
        transferData: 1
      },
      levelOfRisk: [
        {
          name: '全部',
          value: 1
        },
        {
          name: '正常',
          value: 2
        },
        {
          name: '预警',
          value: 3
        }
      ],
      // 数据搜索之后,存储数据的
      searchDataDisplay: []
      searchDataDisplay: [],
      searchDataDisplayName: '',
      searchDataDisplayId: ''
    }
  },
  methods: {
    setBounced (val) {
      const pos = [val.Latitude, val.Longitude]
      window.map.flyTo(pos, 11)
    },
    handlePipelineType (val) {
      this.solidWasteTypeOptions.forEach(item => {
        if (val === item.value) {
          this.handleSearch(item.value)
        }
      })
    },
    // 点击搜索实现数据的搜索展示
    async handleSearch (data) {
      // console.log(this.form.keyword)
      const result = await mapApi.getSolidWaste(data)
      console.log(result)
      this.searchDataDisplay = result.Result.DataInfo
      this.searchDataDisplayName = result.Result.DataInfo[0].Name
      this.searchDataDisplayId = result.Result.DataInfo[0].StoragePlaceId
      console.log(this.searchDataDisplayName)
    },
    // 数据展示,点击进行弹框及点的展示
    setBounced (val) {
      const pos = [val.Latitude, val.Longitude]
      window.map.flyTo(pos, 11)
      const t1 = setTimeout(async () => {
        const dataValue = {
          StoragePlaceId: this.searchDataDisplayId
        }
        // console.log(e.layer.options.totransferData.Name)
        // 弹框标题
        const title = this.searchDataDisplayName
        console.log(title)
        // 基本信息 tabs
        const resultBasic = await mapApi.getSolidWasteBaseInfo(dataValue)
        // 详细信息展示 table
        const resultDetailed = await mapApi.getSolidWasteDetail(dataValue)
        // 绑定弹框实例
        const PublicBounced = window.Vue.extend(publicBounced)
        const instance = new PublicBounced().$mount()
        document.body.appendChild(instance.$el)
        // document.body.removeChild(instance.$el)
        // 通过方法 向绑定弹框传递数据
        instance.setData(title, resultBasic.Result.DataInfo, resultDetailed.Result.DataInfo, 'gufei')
        // this.setPanTo(e.latlng, 300)
      }, 3000)
      console.log(t1)
      // clearTimeout(t1)
    },
    // flayTo() 弹框的可滑动事件
    setPanTo (pos, value) {
      var position = pos
      position = window.map.latLngToLayerPoint(position)
      position.y += value
      position = window.map.layerPointToLatLng(position)
      window.map.flyTo(position)
    },
    // select的option的数据选择
    handlePipelineType (val) {
      this.solidWasteTypeOptions.forEach(item => {
        if (val === item.value) {
          this.handleSearch(item.value)
        }
      })
    }
  }
}
src/components/panel/topicSearch/WaterWasteSearch.vue
@@ -1,40 +1,44 @@
<template>
    <div class="sewers-search" v-if="judgeVisible">
        <div class="panel-title">{{title}}</div>
        <div class="search-panel ">
            <el-form ref="form" :model="form" label-width="90px" class="search-form">
                <el-form-item v-for="(item,index) in solidWasteTypeOptions" :key="index" :label="item.label+':'" size="mini"
                              class="search-panel-item">
                    <el-select style="width: 100%" v-model="form.pipelineType" @change="handlePipelineType"
                               :popper-class="'select-down'">
                        <el-option
                                v-for="item in solidWasteTypeOptions"
                                :key="item.value"
                                :label="item.label"
                                :value="item.value">
                        </el-option>
                    </el-select>
                </el-form-item>
                <el-radio-group v-model="form.type" class="levelOfRisk">
                    <el-radio  v-for="(item,index) in levelOfRisk" :label="item.value" :key="index"><span class="levelOfRisk-type">{{item.name}}</span></el-radio>
                </el-radio-group>
                <div class="rightButtonSearch">
                    <el-input  v-model="form.keyword" size="mini"  placeholder="在此输入关键字搜索"></el-input>
                    <el-button class="el-icon-search" @click="handleSearch"></el-button>
                </div>
            </el-form>
  <div class="sewers-search" v-if="judgeVisible">
    <div class="panel-title">{{ title }}</div>
    <div class="search-panel ">
      <el-form ref="form" :model="form" label-width="90px" class="search-form">
        <el-form-item v-for="(item,index) in solidWasteTypeOptions" :key="index" :label="item.label+':'" size="mini"
                      class="search-panel-item">
          <el-select style="width: 100%" v-model="form.pipelineType" @change="handlePipelineType"
                     :popper-class="'select-down'">
            <el-option
                v-for="item in solidWasteTypeOptions"
                :key="item.value"
                :label="item.label"
                :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-radio-group v-model="form.type" class="levelOfRisk">
          <el-radio v-for="(item,index) in levelOfRisk" :label="item.value" :key="index"><span class="levelOfRisk-type">{{
              item.name
            }}</span>
          </el-radio>
        </el-radio-group>
        <div class="rightButtonSearch">
          <el-input v-model="form.keyword" size="mini" placeholder="在此输入关键字搜索"></el-input>
          <el-button class="el-icon-search" @click="handleSearch"></el-button>
        </div>
        <el-scrollbar style="height:264px">
            <div class="environmental-risk-list" v-for="(item,index) in searchDataDisplay" :key="index" ><!-- v-for="(item,index) in list" :key="index" -->
                <i class="state"></i>
                <div>
                    <h3>###炼化部</h3>
                    <p>所属部门:<span>炼化部</span></p>
                    <p>风险级别:<span>三级</span></p>
                </div>
            </div>
        </el-scrollbar>
      </el-form>
    </div>
    <el-scrollbar style="height:264px">
      <div class="environmental-risk-list" v-for="(item,index) in list" :key="index" @click="handleLocation(item)">
        <!-- v-for="(item,index) in list" :key="index" -->
        <i class="state"></i>
        <div>
          <h3>###炼化部</h3>
          <p>所属部门:<span>炼化部</span></p>
          <p>风险级别:<span>三级</span></p>
        </div>
      </div>
    </el-scrollbar>
  </div>
</template>
<script>
@@ -47,12 +51,28 @@
  data () {
    return {
      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'
        }
      ],
      list: [],
      judgeVisible: true,
      solidWasteTypeOptions: [{
        value: '1',
@@ -144,15 +164,13 @@
      // console.log(this.form.keyword)
      const result = await mapApi.getWasteWater()
      console.log(result)
      this.searchDataDisplay = result.Result.DataInfo
      this.list = result.Result.DataInfo
      this.total = result.Result.DataInfo.length
    },
    handleLocation (val) {
      // console.log(val)
      const bound = this.L.geoJSON([val], {}).getBounds()
      var layer = window.serviceLayerHelper.getByLayerId(val.id)
      layer && layer.openPopup()
      this.$store.state.map.map.flyToBounds(bound)
      console.log(val)
      const pos = [val.Latitude, val.Longitude]
      window.map.flyTo(pos, 17)
    }
  }
}
src/conf/Constants.js
@@ -10,7 +10,8 @@
  wasteGasPfk: 'WasteGas.js',
  wasteWaterPfk: 'WasteWater.js',
  wasteSolidCcd: 'SolidWaste.js',
  sewersAreaGs: 'Company.js'
  sewersAreaGs: 'Company.js',
  pipesegment: 'PipeLineAnimal.js'
}
export const STYLES = {
src/conf/layers/LayerFsss.js
@@ -54,7 +54,7 @@
      code: 'pipesegment',
      name: '流向',
      sname: 'ywslx',
      wfs: WFS_URL + '?TYPENAME=流向',
      url: 'pipesegment',
      checked: false
    },
    {