派生自 wuyushui/SewerAndRainNetwork

陈泽平
2021-05-28 32c49e86a7876f9252b0a88a0685c203830476f1
企业应急-事件上报-搜索定位
1个文件已添加
4个文件已修改
465 ■■■■ 已修改文件
src/api/request.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/enterprise-emergency/events-reported/EventsReported.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/enterprise-emergency/events-reported/ReportLocation.vue 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/enterprise-emergency/events-reported/ReportLocationSearch.vue 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/enterprise-emergency/events-reported/ReportLocationSection.vue 296 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/request.js
@@ -23,3 +23,6 @@
    }
  })
}
export function reportLocationSearch (data = {}) {
  return $http.get('http://10.246.133.164//api/search?', data)
}
src/components/base-page/enterprise-emergency/events-reported/EventsReported.vue
@@ -132,7 +132,8 @@
            </el-form-item>
        </el-form>
        <el-dialog
                custom-class="el-dialog--center"
                custom-class="event-report-dialog"
                title="事发位置定位"
                :visible.sync="dialogLocation"
                :append-to-body="true"
                :modal="false"
@@ -384,7 +385,7 @@
    /*    margin-left: 6.4rem !important;*/
    /*}*/
    /deep/ .el-dialog--center {
    /deep/ .event-report-dialog {
        left: 5rem;
        top: 1rem;
        margin-top: 2rem;
@@ -392,6 +393,8 @@
    }
    /deep/ .el-dialog {
        left: 5rem;
        top: 1rem;
        width: 3.087834rem;
    }
src/components/base-page/enterprise-emergency/events-reported/ReportLocation.vue
@@ -1,42 +1,33 @@
<template>
    <div class="report-location-box">
        <div class="report-location">
            <el-tabs v-model="activeName">
                <el-tab-pane label="点击定位" name="first">
                    <div class="click-location">
                        <el-row>
                            <el-input type="text" v-model="clickLocation" clearable @focus="focusLocation"></el-input>
                        </el-row>
                        <el-row>
                            <el-button type="primary" @click="confirm">确认</el-button>
                        </el-row>
        <el-tabs v-model="activeName">
            <el-tab-pane label="搜索定位" name="first">
                <ReportLocationSearch></ReportLocationSearch>
            </el-tab-pane>
            <el-tab-pane label="管段定位" name="second">
                <ReportLocationSection></ReportLocationSection>
            </el-tab-pane>
            <el-tab-pane label="经纬度定位" name="third">
                <el-row class="place-box">
                    <div class="place-left">
                        <el-form :model="LongLatPos" label-width="90px">
                            <el-form-item label="经度:">
                                <el-input v-model="LongLatPos.longPos"></el-input>
                            </el-form-item>
                            <el-form-item label="纬度:">
                                <el-input v-model="LongLatPos.latPos"></el-input>
                            </el-form-item>
                        </el-form>
                    </div>
                </el-tab-pane>
                <el-tab-pane label="管段定位" name="second">
                    <ReportLocationSection></ReportLocationSection>
                </el-tab-pane>
                <el-tab-pane label="经纬度定位" name="third">
                    <el-row class="place-box">
                        <div class="place-left">
                            <el-form :model="LongLatPos" label-width="90px">
                                <el-form-item label="经度:">
                                    <el-input v-model="LongLatPos.longPos"></el-input>
                                </el-form-item>
                                <el-form-item label="纬度:">
                                    <el-input v-model="LongLatPos.latPos"></el-input>
                                </el-form-item>
                            </el-form>
                        </div>
                        <div class="place-right">
                            <el-button type="primary" @click="mapPoints">定位</el-button>
                        </div>
                    </el-row>
                    <div class="place-bottom" style="text-align: center;margin: 10px">
                        <el-button type="primary" @click="confirm">确认</el-button>
                    <div class="place-right">
                        <el-button type="primary" @click="mapPoints">定位</el-button>
                    </div>
                </el-tab-pane>
            </el-tabs>
        </div>
                </el-row>
                <div class="place-bottom" style="text-align: center;margin: 5px">
                    <el-button type="primary" @click="confirm">确认</el-button>
                </div>
            </el-tab-pane>
        </el-tabs>
    </div>
</template>
@@ -44,18 +35,18 @@
// import eventBus from '../../../../eventBus'
// 管段定位组件
import ReportLocationSection from './ReportLocationSection'
import ReportLocationSearch from './ReportLocationSearch'
export default {
  name: 'ReportLocation',
  components: {
    ReportLocationSearch,
    ReportLocationSection
  },
  data () {
    return {
      // active tab切换
      activeName: 'first',
      // 点击定位绑定数据
      clickLocation: '',
      // 经纬度定位
      LongLatPos: {
        longPos: '',
@@ -81,6 +72,9 @@
      // const point = [e.latlng.lng, e.latlng.lat]
      const pointX = e.latlng.lng
      const pointY = e.latlng.lat
      // let marker = window.L.marker(point,{
      //
      // })
      this.clickLocation = '\'' + pointX + '\'' + pointY + ''
      this.mapPointResult(e)
    },
@@ -115,19 +109,7 @@
        align-items: center;
        justify-content: space-around;
    }
    .click-location {
        margin: 0 auto;
        text-align: center;
        .el-input {
            width: 80%;
            margin: 15px auto;
        }
        .el-button {
            margin: 15px auto;
        }
    }
    .place {
        text-align: center;
src/components/base-page/enterprise-emergency/events-reported/ReportLocationSearch.vue
New file
@@ -0,0 +1,79 @@
<template>
    <div class="click-location">
        <el-row>
            <el-input type="text" v-model="clickLocation" clearable @change="focusLocation"></el-input>
        </el-row>
        <el-row>
            <el-button type="primary" @click="confirm" style="text-align: right">确认</el-button>
        </el-row>
    </div>
</template>
<script>
import { reportLocationSearch } from '../../../../api/request'
// import { pulseEffect } from '../../../../utils/utils'
export default {
  name: 'ReportLocationSearch',
  data () {
    return {
      // 点击定位绑定数据
      clickLocation: ''
    }
  },
  methods: {
    // 获得焦点 进行定位
    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: {
          keyWord: this.clickLocation,
          level: window.map.getZoom(),
          mapBound: getBoundsData,
          queryType: 7,
          count: 14,
          start: 0,
          queryTerminal: 10000
        },
        type: 'query'
      }
      console.log(data)
      reportLocationSearch(data).then(res => {
        // console.log(res)
        const as = res.pois[0].lonlat.trim().split(' ')
        window.map.setView([as[1], as[0]], 17)
        // for (let i = 0; i < res.pois.length; i++) {
        //   const as = res.pois[i].lonlat.trim().split(' ')
        //   window.map.flyTo([as[0], as[1]], 16)
        // }
        // window.map.setView(as, 17)
      })
    },
    // 点击确认按钮事件
    confirm () {
      // 通过子组件向父组件传递数据
      this.$emit('locationClick', this.LongLatPos)
      console.log('搜索定位')
    }
  }
}
</script>
<style lang="less" scoped>
    .click-location {
        margin: 0 auto;
        text-align: center;
        .el-input {
            width: 80%;
            margin: 15px auto;
        }
        .el-button {
            margin: 15px auto;
        }
    }
</style>
src/components/base-page/enterprise-emergency/events-reported/ReportLocationSection.vue
@@ -12,7 +12,8 @@
                    </el-form-item>
                </el-col>
                <el-col :span="8">
                    <el-button type="primary" size="small" icon="el-icon-search" @click="pipeClickLocation">定位</el-button>
                    <el-button type="primary" size="small" icon="el-icon-location-outline" @click="pipeClickLocation">定位
                    </el-button>
                </el-col>
            </el-row>
            <el-row>
@@ -30,12 +31,12 @@
        </el-form>
        <div class="pipe-table" v-show="this.tableList.length>=1">
            <el-card>
                <span class="fixed-style">管线名称</span>
                <span class="fixed-style" style="display: block">管线名称</span>
                <el-table
                        :data="tableList"
                        border
                        height="240"
                        max-height="280"
                        height="120"
                        max-height="140"
                        @row-click="sectionShowClick"
                        style="width: 100%">
                    <el-table-column
@@ -50,6 +51,11 @@
                    </el-table-column>
                    <el-table-column
                            show-overflow-tooltip
                            prop="properties.subchaname"
                            label="支线名称">
                    </el-table-column>
                    <el-table-column
                            show-overflow-tooltip
                            prop="properties.mediumtype"
                            label="管线类型">
                    </el-table-column>
@@ -61,13 +67,13 @@
                </el-table>
            </el-card>
            <el-card>
                <span class="fixed-style">管段列表</span>
                <span class="fixed-style" style="display: block">管段列表</span>
                <el-table
                        :data="tableListSection"
                        border
                        @row-click="sectionCode"
                        height="100"
                        max-height="120"
                        max-height="100"
                        style="width: 100%">
                    <el-table-column
                            show-overflow-tooltip
@@ -100,22 +106,32 @@
                        </template>
                    </el-table-column>
                </el-table>
                <span class="fixed-style">附属设施列表</span>
                <span class="fixed-style" style="display: block">附属设施列表</span>
                <el-table
                        :data="tableDataAffFac"
                        border
                        @row-click="affFacName"
                        height="100"
                        max-height="120"
                        style="width: 120%">
                        max-height="100"
                        style="width: 100%">
                    <el-table-column
                            show-overflow-tooltip
                            prop="properties.name"
                            prop="properties.pipecode"
                            label="附属设施编号">
                    </el-table-column>
                    <el-table-column
                            show-overflow-tooltip
                            prop="properties.measattribute"
                            label="附属设施名称">
                    </el-table-column>
                    <el-table-column
                            show-overflow-tooltip
                            prop="properties.type"
                            prop="properties.code"
                            label="附属设施名称">
                    </el-table-column>
                    <el-table-column
                            show-overflow-tooltip
                            prop="properties.datasource"
                            label="附属设施类型">
                    </el-table-column>
                    <el-table-column width="40" fixed="right" label="操作">
@@ -126,21 +142,21 @@
                </el-table>
            </el-card>
        </div>
        <el-row style="text-align: center;margin: 10px">
        <el-row style="text-align: right;margin: 10px">
            <el-button type="primary" @click="confirm">确认</el-button>
        </el-row>
    </div>
</template>
<script>
import WfsHelper from '@components/helpers/WfsHelper'
import AjaxUtils from '@utils/AjaxUtils'
// import { pulseEffect } from '../../../../utils/utils'
// import mapApi from '../../../../api/mapApi'
import WfsHelper from '@components/helpers/WfsHelper'
import AjaxUtils from '@utils/AjaxUtils'
import { fitBounds, highlight } from '../../../../components/helpers/LocateHelper'
import eventBus from '../../../../eventBus'
// import MapManager from '../../../helpers/MapManager'
import { WMS_URL } from '../../../../conf/Constants'
export default {
  name: 'ReportLocationSection',
@@ -157,111 +173,227 @@
      tableListSection: [],
      // 附属设施查询列表数据
      tableDataAffFac: [],
      // 分页功能
      pageSize: 3,
      total: 0,
      currentPage: 1
      // 定义类型判断 if 是搜索到的数据可以进行管线选择 else 点击定位选择的管线不可以进行选择
      SectionAndAffFacTableJudge: false,
      locateJudgmentSearch: false
    }
  },
  mounted () {
    this.wfsHelper = new WfsHelper()
  },
  methods: {
    // 点击管线列表 展示管段内容
    // 点击管线列表 展示管段内容 和附属设施内容
    async sectionShowClick (val) {
      console.log(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
      // 如果 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.mediumtype
        console.log(AffFacSearch)
        this.wfsHelper.clearFilter()
        this.wfsHelper.setTypeName(['sewer:view_pipeline'])
        this.wfsHelper.addLike('type', 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')) {
          // console.log(resAffFac.features)
          // for (let i = 0; i < resAffFac.features.length; i++) {
          //   console.log(resAffFac.features[i])
          // }
          this.tableDataAffFac = resAffFac.features
        }
        this.wfsHelper = new WfsHelper()
      }
      this.wfsHelper = new WfsHelper()
      // 附属设施查询
      this.tableDataAffFac = []
      const AffFacSearch = val.properties.pipename
      this.wfsHelper.clearFilter()
      this.wfsHelper.setTypeName(['sewer:view_pipeline'])
      this.wfsHelper.addLike('name', AffFacSearch)
      this.wfsHelper.addEquals('name', '\'' + 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
      }
      this.wfsHelper = new WfsHelper()
    },
    // 点击管段列表 管段编码传递
    sectionCode (val) {
      console.log(val)
      // console.log(val)
      this.form.sectionName = val.properties.pipecode
    },
    // 点击附属设施列表 管段编码传递
    affFacName (val) {
      console.log(val)
      // console.log(val)
      this.form.affiliatedFacilities = val.properties.name
    },
    // 定位功能
    localAdr (val) {
      console.log(val)
      fitBounds(val)
      highlight(val)
    },
    // 管线点击点击定位功能
    // 管线 点击定位管段的选择功能
    pipeClickLocation () {
      // console.log('val')
      // this.selectPipeLine()
      // 设施不进行 管线表格数据的点击交互
      this.SectionAndAffFacTableJudge = false
      window.mapManager.clickDialogSwitch = false
      this.tableList = []
      // this.tableList = []
      // 点击获取数据
      window.map.on('click', (e) => {
        window.mapManager.loadWfsDatas(e.latlng).then((res) => {
          // console.log(res)
          for (let i = 0; i < res.features.length; i++) {
            // console.log(res.features[i].properties)
            this.tableList.push(res.features[i])
          }
          // console.log(this.tableList)
        // window.mapManager.loadWfsDatas(e.latlng).then((res) => {
        //   console.log(res)
        //   for (let i = 0; i < res.features.length; i++) {
        //     this.tableList.push(res.features[i])
        //     this.tableListSection.push(res.features[i])
        //     this.tableDataAffFac.push(res.features[i])
        //   }
        // })
        // return new Promise((resolve, reject) => {
        const size = window.map.getSize()
        var point = window.map.latLngToContainerPoint(e.latlng, window.map.getZoom())
        const wmsParams = Object.assign({
          LAYERS: 'pipeline_group',
          QUERY_LAYERS: 'pipeline_group',
          WIDTH: size.x,
          HEIGHT: size.y,
          X: Math.round(point.x),
          Y: Math.round(point.y),
          BBOX: window.map.getBounds().toBBoxString()
        }, {
          VERSION: '1.1.1',
          SERVICE: 'WMS',
          REQUEST: 'GetFeatureInfo',
          // bbox: bbox,
          FORMAT: 'image/png',
          INFO_FORMAT: 'application/json',
          TRANSPARENT: true,
          FEATURE_COUNT: 50,
          SRS: 'EPSG:4326',
          EXCEPTIONS: 'application/vnd.ogc.se_inimage'
        })
        AjaxUtils.get4JsonDataByUrl(WMS_URL, wmsParams, (res) => {
          // console.log(res)
          for (let i = 0; i < res.data.features.length; i++) {
            // console.log(res.data.features[i])
            this.tableList.push(res.data.features[i])
          }
        })
        // 管段
        this.sectionData(e)
        // 附属设施
        this.affFacData(e)
        // })
      })
      // 数据 重新获取 进行置空
      this.tableList = []
      this.tableListSection = []
      this.form.pipeName = ''
      this.tableDataAffFac = []
      this.form.sectionName = ''
      this.form.affiliatedFacilities = ''
    },
    // 点击定位 擦寻管段
    sectionData (e) {
      const size = window.map.getSize()
      var point = window.map.latLngToContainerPoint(e.latlng, window.map.getZoom())
      const wmsParams = Object.assign({
        LAYERS: 'sewer:pipesegment',
        QUERY_LAYERS: 'sewer:pipesegment',
        WIDTH: size.x,
        HEIGHT: size.y,
        X: Math.round(point.x),
        Y: Math.round(point.y),
        BBOX: window.map.getBounds().toBBoxString()
      }, {
        VERSION: '1.1.1',
        SERVICE: 'WMS',
        REQUEST: 'GetFeatureInfo',
        // bbox: bbox,
        FORMAT: 'image/png',
        INFO_FORMAT: 'application/json',
        TRANSPARENT: true,
        FEATURE_COUNT: 50,
        SRS: 'EPSG:4326',
        EXCEPTIONS: 'application/vnd.ogc.se_inimage'
      })
      AjaxUtils.get4JsonDataByUrl(WMS_URL, wmsParams, (res) => {
        // console.log(res)
        for (let i = 0; i < res.data.features.length; i++) {
          this.tableListSection.push(res.data.features[i])
        }
      })
    },
    // 附属设施
    affFacData (e) {
      const size = window.map.getSize()
      var point = window.map.latLngToContainerPoint(e.latlng, window.map.getZoom())
      const wmsParams = Object.assign({
        LAYERS: 'pipeline_fs',
        QUERY_LAYERS: 'pipeline_fs',
        WIDTH: size.x,
        HEIGHT: size.y,
        X: Math.round(point.x),
        Y: Math.round(point.y),
        BBOX: window.map.getBounds().toBBoxString()
      }, {
        VERSION: '1.1.1',
        SERVICE: 'WMS',
        REQUEST: 'GetFeatureInfo',
        // bbox: bbox,
        FORMAT: 'image/png',
        INFO_FORMAT: 'application/json',
        TRANSPARENT: true,
        FEATURE_COUNT: 50,
        SRS: 'EPSG:4326',
        EXCEPTIONS: 'application/vnd.ogc.se_inimage'
      })
      AjaxUtils.get4JsonDataByUrl(WMS_URL, wmsParams, (res) => {
        console.log(res)
        for (let i = 0; i < res.data.features.length; i++) {
          this.tableDataAffFac.push(res.data.features[i])
        }
        console.log(this.tableDataAffFac)
      })
    },
    // 管线搜索
    async pipelineSearch () {
      // this.pipeTable = !this.pipeTable
      this.SectionAndAffFacTableJudge = true
      this.tableList = []
      this.tableListSection = []
      this.tableDataAffFac = []
      this.wfsHelper.clearFilter()
      this.wfsHelper.setTypeName(['sewer:pipeline'])
      if (this.form.pipeName) {
        this.wfsHelper.addLike('name', this.form.pipeName)
        this.wfsHelper.addLike('pipename', this.form.pipeName)
      }
      // this.wfsHelper.addEquals('type', '\'' + this.form.pipeName + '\'')
      // this.wfsHelper.addEquals('pipename', '\'' + this.form.pipeName + '\'')
      const res = await AjaxUtils.GetDataAsynByUrl(this.wfsHelper.getUrl(), {})
      console.log(res)
      // console.log(res)
      if (res instanceof Object && Object.prototype.hasOwnProperty.call(res, 'features')) {
        this.total = res.totalFeatures
        // console.log(res.features)
        this.tableList = res.features
      }
      this.wfsHelper = new WfsHelper()
    },
    // 分页功能 currentPage 改变时会触发
    handlePage (val) {
      // console.log(val)
      this.currentPage = val
    },
    // 分页功能 pageSize 改变时会触发
    handleSizeChange (val) {
      // console.log(val)
      this.pageSize = val
      // this.form.pipeName = ''
      this.form.sectionName = ''
      this.form.affiliatedFacilities = ''
    },
    // 点击确认
    confirm () {
      console.log('点击确定选择完成')
      // console.log('点击确定选择完成')
      eventBus.$emit('section-search', true)
      this.form.pipeName = ''
      this.form.sectionName = ''
      this.form.affiliatedFacilities = ''
      this.tableList = []
      this.tableListSection = []
      this.tableDataAffFac = []
      this.SectionAndAffFacTableJudge = false
    }
  }
}
@@ -282,18 +414,18 @@
    }
    .pipe-table {
        display: flex;
        align-items: center;
        justify-content: space-around;
        /*display: flex;*/
        /*align-items: center;*/
        /*justify-content: space-around;*/
        /deep/ .el-card {
            width: 1.39523rem;
            max-width: 1.39523rem;
            height: 1.9343rem;
            max-height: 1.9343rem;
            /*width: 1.39523rem;*/
            /*max-width: 1.39523rem;*/
            /*height: 0.9343rem;*/
            /*max-height: 0.9343rem;*/
            .el-table {
                margin: 0.07345rem auto;
                margin: 0.05345rem auto;
            }
        }
    }