Newer
Older
smartwell_front / src / views / wellManage / detailMapLonLat.vue
<template>
  <el-dialog
    append-to-body
    title="选择窨井所在位置"
    :visible.sync="dialogFormVisible"
  >
    <el-row>
      <el-col class="overview-map-container">
        <a-map-container
          ref="map"
          :center="center"
          :zoom="zoom"
          :base-layer="baseLayer"
          :style="{height:(bodyHeight-200)+'px'}"
          vid="overview"
          class="map-demo"
          @ready="mapReady"
        />
      </el-col>
    </el-row>
    <el-row :gutter="10">
      <el-col :span="5">
        <el-input
          v-model.trim="postionForm.longitude"
          type="text"
          placeholder="经度"
          disabled
        />
      </el-col>
      <el-col :span="5">
        <el-input
          v-model.trim="postionForm.latitude"
          type="text"
          placeholder="纬度"
          disabled
        />
      </el-col>
      <el-col :span="14">
        <el-input
          v-model.trim="postionForm.postion"
          type="text"
          placeholder="详细地址"
          disabled
        />
      </el-col>
    </el-row>
    <div
      slot="footer"
      class="dialog-footer"
    >
      <el-button type="primary" @click="saveData">
        确定
      </el-button>
      <el-button @click="dialogFormVisible = false">
        取消
      </el-button>
    </div>
  </el-dialog>
</template>

<script>
import { mapGetters } from 'vuex'
import AMapContainer from '@/components/Amap/AMapContainer'
import AMapLoader from '@amap/amap-jsapi-loader'
export default {
  name: 'DetailMapLonLat',
  components: { AMapContainer },
  data() {
    return {
      postionlatlon: '',
      postionForm: {
        longitude: '', // 经度
        latitude: '', // 纬度
        postion: '' // 详细地址
      },
      map: null, // 地图对象
      baseLayer: 'gaode_vec', // 底图图层
      center: [this.$store.getters.lng, this.$store.getters.lat], // 地图中心
      zoom: 12,
      dialogFormVisible: false // 对话框是否显示
    }
  },
  computed: {
    ...mapGetters([
      'bodyHeight'
    ])
  },
  watch: {
    postionlatlon(val) {
      var _this = this
      window._AMapSecurityConfig = {
        securityJsCode: this.$store.getters.amapSecurityCode
      }
      AMapLoader.load({
        key: this.$store.getters.amapKey // 秘钥,从store中取
      }).then((AMap) => {
        AMap.plugin('AMap.Geocoder', function() {
          var geocoder = new AMap.Geocoder({
            city: ''
          })
          var lnglat = val.split(',')
          geocoder.getAddress(lnglat, function(status, result) {
            if (status === 'complete' && result.info === 'OK') {
              _this.postionForm.postion = result.regeocode.formattedAddress
            }
          })
        })
      })
    }
  },
  methods: {
    // 初始化放这里
    mapReady(map) {
      this.map = map
      var _this = this
      map.on('click', function(e) {
        _this.postionForm.longitude = e.lnglat.lng
        _this.postionForm.latitude = e.lnglat.lat
        _this.postionlatlon = e.lnglat.lng + ',' + e.lnglat.lat
      })
    },
    initDialog(val) {
      this.dialogFormVisible = val
    },
    saveData() {
      this.$emit('getLonLat', this.postionlatlon)
      this.dialogFormVisible = false
    }
  }
}
</script>
<style rel="stylesheet/scss" lang="scss">
.overview-map-container{
  width: 100%;
}
.el-row {
  margin-bottom: 10px;
}
</style>