checkDeviceLoaction.vue 3.66 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
<template>
  <el-dialog
    title="拾取坐标"
    :visible.sync="dialogTableVisible"
    :show-close="false"
    :close-on-click-modal="false"
  >

    <el-row class="lt">
      经纬度:
      <el-input
        placeholder="经度"
        v-model.number="lnglat.lng"
        type="number"
      ></el-input>
      <el-input
        placeholder="纬度"
        v-model.number="lnglat.lat"
        type="number"
      ></el-input>
      <el-button type="primary" size="small" @click="confirmFun">确定</el-button
      >
      <el-button size="small" @click="$emit('dialogcancelFun')">取消</el-button
      >
    </el-row>
    <div style="width: 47vw; height: 65vh" id="container"></div>

    <el-col :span="8" class="button">
      <el-input id="ss" placeholder="输入地址" v-model="keyWorld"  ></el-input>
      <el-button size="small" type="primary" icon="el-icon-search" @click="search" style="position: fixed;margin-left: 3px;">搜索</el-button>
    </el-col>

  </el-dialog>
</template>
<script>
  export default {
    props: {
      dialogTableVisible: false,
      slat: 0,
      slng: 0
    },
    data(){
      return{
        lnglat: {
          lat: "",
          lng: ""
        },
        keyWorld: ""
      }
    },
    watch:{
      dialogTableVisible:{
        handler(value) {
          if(value){
            let that = this;
            that.$nextTick(() => {
              //初始化地图
              let map = new AMap.Map("container", {
                center: [114.72995, 38.37417],
                // resizeEnable: true,
                disableSocket: true,
                viewMode: "3D",
                showLabel: true,
                pitch: 8,
                zoom: 12
              });
              var overlays = [];
              //坐标回显
              if (typeof that.slng == "number" && that.slng != 0) {
                that.lnglat.lng = that.slng;
                that.lnglat.lat = that.slat;
                let marker = new AMap.Marker({
                  position: [that.slng,that.slat]
                });
                marker.setMap(map);
                map.setCenter([that.slng,that.slat]);
                overlays.push(marker);
              }

              //点击获取坐标点
              var mouseTool = new AMap.MouseTool(map);
              //监听draw事件可获取画好的覆盖物
              mouseTool.on('draw',function(e){
                map.remove(overlays);
                overlays.push(e.obj);
                that.lnglat.lat = e.obj._position.lat;
                that.lnglat.lng = e.obj._position.lng;
              })
              that.draw(mouseTool);

              //搜索功能
              AMap.plugin(["AMap.AutoComplete","AMap.PlaceSearch"], function() {
                that.placeSearch = new AMap.PlaceSearch({
                  map: map
                });
              });
            })
          }
        },
        // 代表在wacth里声明了firstName这个方法之后立即先去执行handler方法
        immediate: true

      }
    },
    methods:{
      confirmFun(){
        this.$emit('confirmFun',this.lnglat);
        this.$emit('dialogcancelFun');
      },
      draw(mouseTool){
        mouseTool.marker({
          //同Marker的Option设置
        });
      },
      search(){
        this.placeSearch.search(this.keyWorld);  //关键字查询查询
      }
    }
  }

</script>

<style scoped lang="scss">
  .lt{
    margin-bottom: 10px;
  }
  .lt .el-input {
    width: 180px;
    margin-right: 15px;
    display: inline-block;
  }

  .button{
    position: relative;
    top: -453px;
    left: 14px;
  }

  .button .el-input{
    width: 180px;
    margin-right: 10px;
    display: inline-block;
  }
</style>