mxx 3 gadi atpakaļ
vecāks
revīzija
effeb7adf9

+ 506 - 0
src/components/mapdrag/warehouseReceiptMap.vue

@@ -0,0 +1,506 @@
+<style lang='scss' scoped>
+  .mapContent {
+    position: relative;
+    .center-add {
+      position: absolute;
+      top: 0;
+      bottom: 0;
+      left: 0;
+      right: 0;
+      margin: auto;
+      z-index: 999;
+      width: 30px;
+      height: 30px;
+    }
+  }
+
+  #mapContainer {
+    width: 100%;
+    height: 330px;
+  }
+
+  // #tip {
+  //   position: absolute;
+  //   top: -45px;
+  //   display: flex;
+  // }
+
+  // #tip .el-input {
+  //   // width: 179px;
+  //   margin-right: 0px;
+  // }
+
+  // #tip .el-select {
+  //   margin-right: 10px;
+  // }
+
+  // #tip .el-select {
+  //   width: 179px;
+  // }
+
+  // #tip .el-textarea {
+  //   width: 179px;
+
+  //   /deep/ .el-textarea__inner {
+  //     height: 40px;
+  //     resize: none;
+  //   }
+  // }
+
+  // .el-button--primary {
+  //   background-color: #5878e8;
+  //   border-color: #5878e8;
+  // }
+
+  // .el-button--default {
+  //   color: #5878e8;
+  //   border-color: #5473e8;
+  // }
+
+  // .address {
+  //   display: flex;
+  //   align-items: center;
+  //   margin-right: 20px;
+
+  //   // position:absolute;
+  //   // top: -35px;
+  //   .address-input {
+  //     display: inline-block;
+  //     width: 480px;
+  //   }
+  // }
+</style>
+
+<template>
+  <div class="mapContent">
+    <div id="mapContainer"></div>
+    <!-- <div id="tip" v-show="showFlag === false ? false : true">
+      <el-select v-model="province" @change="selectP" placeholder="省">
+        <el-option
+          v-for="item in provinces"
+          :key="item.adcode"
+          :label="item.name"
+          :value="item.adcode"
+        >
+        </el-option>
+      </el-select>
+      <el-select v-model="city" @change="selectC" placeholder="市">
+        <el-option
+          v-for="item in citys"
+          :key="item.adcode"
+          :label="item.name"
+          :value="item.name"
+        >
+        </el-option>
+      </el-select>
+      <el-select v-model="district" @change="selectD" placeholder="区">
+        <el-option
+          v-for="item in districts"
+          :key="item.adcode"
+          :label="item.name"
+          :value="item.adcode"
+        >
+        </el-option>
+      </el-select>
+      <div class="address">
+        <el-input type="text" id="searchValue" placeholder="请输入关键字:" v-model="address" clearable class="address-input">
+        </el-input>
+      </div>
+      <el-button>经纬度:{{center}}</el-button>
+      <el-button @click="positions" type="primary" v-if='!isShowaddress'>确定定位</el-button>
+      <el-button @click="anewselect" v-if='!isShowaddress'>重新选择</el-button>
+      <el-button @click="submit" v-if='isShowaddress'>确定</el-button>
+    </div> -->
+
+
+  </div>
+</template>
+
+<script>
+  import {
+    regionData,
+    CodeToText,
+    TextToCode
+  } from 'element-china-area-data'
+  import image from '../../../public/img/ic_locationmarker.jpg'
+  export default {
+    data() {
+      return {
+        map: null,
+        provinces: [],
+        province: '',
+        districts: [],
+        district: '',
+        citys: [],
+        city: '',
+        polygons: [],
+        selectedOptions1: [],
+        areacode: '',
+        address: '',
+        objPoint: [],
+        markers: [],
+        zoomEnable: true,
+        dragEnable: true,
+        status: true,
+        center: '',
+      }
+    },
+    props: ['flagVisible', 'position', 'selectedOptions', 'isShowaddress', 'type'],
+    computed: {
+      showFlag() {
+        return this.flagVisible
+      },
+    },
+    watch: {
+      selectedOptions: {
+        handler(newValue, oldValue) {
+          this.province = CodeToText[newValue[0]]
+          this.selectP(this.province)
+          this.city = CodeToText[newValue[1]]
+          this.selectC(CodeToText[newValue[1]])
+          this.district = newValue[2]
+          this.selectD(this.district)
+        },
+        deep: true
+      }
+    },
+    async created() {
+      // 已载入高德地图API,则直接初始化地图
+      if (window.AMap && window.AMapUI) {
+        this.initMap()
+        // 未载入高德地图API,则先载入API再初始化
+      } else {
+        await remoteLoad(`http://webapi.amap.com/maps?v=1.3&key=${MapKey}`)
+        await remoteLoad('http://webapi.amap.com/ui/1.0/main.js')
+        this.initMap()
+      }
+    },
+    mounted() {
+      // console.log(this)
+      setTimeout(() => {
+        var that = this
+        this.map = new AMap.Map('mapContainer', {
+          resizeEnable: true,
+          zoom: 10,
+          zoomEnable: this.zoomEnable,
+          dragEnable: this.dragEnable,
+        })
+        this.map.on('click', function(e) {
+          if (this.status) {
+            var marker = new AMap.Marker({
+              position: new AMap.LngLat(e.lnglat.getLng(), e.lnglat
+                .getLat()), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
+            })
+            that.map.remove(that.markers)
+            that.$emit('marker', e)
+            that.markers.push(marker)
+            // 将创建的点标记添加到已有的地图实例:
+            that.map.add(marker)
+          }
+        })
+        this.marker = new AMap.Marker({
+          icon: new AMap.Icon({
+            size: new AMap.Size(0, 0),
+            image: image,
+          }),
+          map: that.map,
+        })
+        AMap.plugin(
+          ['AMap.Autocomplete', 'AMap.PlaceSearch', 'AMap.Geocoder', 'AMap.DistrictSearch'],
+          function() {
+            var autocomplete = new AMap.Autocomplete({
+              input: 'searchValue',
+            })
+            var placeSearch = new AMap.PlaceSearch({
+              city: that.acode,
+              citylimit: true,
+              pageSize: 1,
+              pageIndex: 1,
+              map: that.map,
+            })
+            var districtSearch = new AMap.DistrictSearch({
+              subdistrict: 1,
+              level: 'city',
+              showbiz: false,
+            });
+
+            AMap.event.addListener(autocomplete, 'select', function(e) {
+              that.marker.setMap(that.map)
+              if (e.poi.location) {
+                placeSearch.search() // 关键字查询查询
+                that.marker.setPosition(e.poi.location)
+                geocoder.getAddress(e.poi.location, function(status, result) {
+                  console.log(e.poi.location, "klokolkjolk")
+                  if (status === 'complete') {
+                    var obj = {}
+                    that.province = result.regeocode.addressComponent.province
+                    that.city = result.regeocode.addressComponent.city
+                    that.district = result.regeocode.addressComponent.district
+                    obj.formattedAddress = result.regeocode.formattedAddress
+                    obj.areacode = result.regeocode.addressComponent.adcode
+                    that.address = result.regeocode.formattedAddress
+                    obj.lat = e.poi.location.lat
+                    obj.lng = e.poi.location.lng
+                    that.$emit('searchAddress', obj)
+                  } else {
+                    that.$emit('searchAddress', '')
+                  }
+                  that.map.setFitView()
+                })
+              } else {
+                districtSearch.search(e.poi.name, (status, result1) => {
+                  if (status == 'complete') {
+                    that.marker.setPosition(result1.districtList[0].center)
+                    geocoder.getAddress(result1.districtList[0].center, function(status, result) {
+                      if (status === 'complete') {
+                        var obj = {}
+                        that.province = result.regeocode.addressComponent.province
+                        that.city = result.regeocode.addressComponent.city
+                        that.district = result.regeocode.addressComponent.district
+                        obj.formattedAddress = result.regeocode.formattedAddress
+                        obj.areacode = result.regeocode.addressComponent.adcode
+                        that.address = result.regeocode.formattedAddress
+                        obj.lat = result1.districtList[0].center.lat
+                        obj.lng = result1.districtList[0].center.lng
+                        that.$emit('searchAddress', obj)
+                      } else {
+                        that.$emit('searchAddress', '')
+                      }
+                      that.map.setFitView()
+                    })
+
+
+                  }
+                })
+              }
+            })
+            // 经纬度
+            var geocoder = new AMap.Geocoder({
+              radius: 1000,
+            })
+            that.map.on('moveend', function(e) {
+              //地图变动之后需要重新赋值省市区,未完成
+              that.center = that.map.getCenter(); //获取当前地图中心位置
+              that.center.lat = Number(that.center.lat.toFixed(3))
+              that.center.lng = Number(that.center.lng.toFixed(3))
+              that.center.Q = Number(that.center.Q.toFixed(3))
+              that.center.R = Number(that.center.R.toFixed(3))
+              for (var i = 0, l = that.polygons.length; i < l; i++) {
+                that.polygons[i].setMap(null)
+              }
+              that.marker.setMap(that.map)
+              that.marker.setPosition(that.center)
+              geocoder.getAddress(that.center, function(status, result) {
+                if (status === 'complete') {
+                  var obj = {}
+                  that.province = result.regeocode.addressComponent.province
+                  that.city = result.regeocode.addressComponent.city
+                  that.district = result.regeocode.addressComponent.district
+                  obj.formattedAddress = result.regeocode.formattedAddress
+                  obj.areacode = result.regeocode.addressComponent.adcode
+                  that.address = result.regeocode.formattedAddress
+                  obj.lat = that.center.lat
+                  obj.lng = that.center.lng
+                  that.$emit('pickedAddress', obj)
+                } else {
+                  that.$emit('pickedAddress', '')
+                }
+              })
+            });
+            that.map.on('zoomend', function() {
+              //地图变动之后需要重新赋值省市区,未完成
+              // this.zoom = map.getZoom(); //获取当前地图级别
+              that.center = that.map.getCenter(); //获取当前地图中心位置
+              that.center.lat = Number(that.center.lat.toFixed(3))
+              that.center.lng = Number(that.center.lng.toFixed(3))
+              that.center.Q = Number(that.center.Q.toFixed(3))
+              that.center.R = Number(that.center.R.toFixed(3))
+              for (var i = 0, l = that.polygons.length; i < l; i++) {
+                that.polygons[i].setMap(null)
+              }
+              that.marker.setMap(that.map)
+              that.marker.setPosition(that.center)
+              geocoder.getAddress(that.center, function(status, result) {
+                if (status === 'complete') {
+                  var obj = {}
+                  that.province = result.regeocode.addressComponent.province
+                  that.city = result.regeocode.addressComponent.city
+                  that.district = result.regeocode.addressComponent.district
+                  obj.formattedAddress = result.regeocode.formattedAddress
+                  obj.areacode = result.regeocode.addressComponent.adcode
+                  that.address = result.regeocode.formattedAddress
+                  obj.lat = that.center.lat
+                  obj.lng = that.center.lng
+                  that.$emit('pickedAddress', obj)
+                } else {
+                  that.$emit('pickedAddress', '')
+                }
+              })
+            });
+            // that.map.on('click', function (e) {
+            //   for (var i = 0, l = that.polygons.length; i < l; i++) {
+            //     that.polygons[i].setMap(null)
+            //   }
+            //   that.marker.setMap(that.map)
+            //   that.marker.setPosition(e.lnglat)
+            //   geocoder.getAddress(e.lnglat, function (status, result) {
+            //     if (status === 'complete') {
+            //       var obj = {}
+            //       that.province = result.regeocode.addressComponent.province
+            //       that.city = result.regeocode.addressComponent.city
+            //       that.district = result.regeocode.addressComponent.district
+            //       obj.formattedAddress = result.regeocode.formattedAddress
+            //       obj.areacode = result.regeocode.addressComponent.adcode
+            //       that.address = result.regeocode.formattedAddress
+            //       obj.lat = e.lnglat.lat
+            //       obj.lng = e.lnglat.lng
+            //       that.$emit('pickedAddress', obj)
+            //     } else {
+            //       that.$emit('pickedAddress', '')
+            //     }
+            //   })
+            // })
+            // 根据坐标点定位,获取地址的详细信息
+            if (that.position) {
+              that.marker.setMap(that.map)
+              that.marker.setPosition(that.position)
+              geocoder.getAddress(that.position, function(status, result) {
+                if (status === 'complete') {
+                  var obj = {}
+                  obj.formattedAddress = result.regeocode.formattedAddress
+                  obj.areacode = result.regeocode.addressComponent.adcode
+                  that.address = result.regeocode.formattedAddress
+                  that.$emit('positionAddress', obj)
+                  that.province = result.regeocode.addressComponent.province
+                  that.city = result.regeocode.addressComponent.city
+                  that.district = result.regeocode.addressComponent.district
+                }
+              })
+              that.map.setFitView()
+            } else {
+              return false
+            }
+          }
+        )
+      }, 500)
+      this.loadmap()
+    },
+    methods: {
+      positions() {
+        this.status = false
+        var status = {
+          zoomEnable: false,
+          dragEnable: false,
+        }
+        this.map.setStatus(status)
+        this.loadmap()
+        let _data = []
+        _data.push(this.province)
+        _data.push(this.city)
+        _data.push(this.district)
+        _data.push(this.address)
+        _data.push(this.type)
+        this.$emit('addressListen', _data)
+      },
+      anewselect() {
+        this.status = true
+        var status = {
+          zoomEnable: true,
+          dragEnable: true,
+        }
+        this.map.setStatus(status)
+        this.loadmap()
+      },
+      loadmap(val) {
+        let params = val
+        var that = this // 插件
+        for (var j = 0, k = that.polygons.length; j < k; j++) {
+          that.polygons[j].setMap(null)
+        }
+        AMap.plugin(['AMap.DistrictSearch', 'AMap.Polygon'], function() {
+          // 标注
+          var opts = {
+            subdistrict: 1,
+            extensions: 'all',
+            showbiz: false,
+          }
+          var district = new AMap.DistrictSearch(opts) // 注意:需要使用插件同步下发功能才能这样直接使用
+          function getData(data) {
+            console.log(data)
+            that.$emit('selectedAddress', data)
+            // 清除地图上的所有覆盖物
+            that.areacode = data.citycode
+            var bounds = data.boundaries
+            if (data.level === 'country') {
+              that.provinces = data.districtList
+              that.citys = []
+              that.districts = []
+            } else if (data.level === 'province') {
+              that.map.remove(that.marker)
+              that.citys = data.districtList
+              that.districts = []
+              that.address = ''
+            } else if (data.level === 'city') {
+              that.districts = data.districtList
+            }
+            if (data.level === 'country' && bounds) {
+              return false
+            } else {
+              for (var i = 0, l = bounds.length; i < l; i++) {
+                var polygon = new AMap.Polygon({
+                  map: that.map,
+                  strokeWeight: 1,
+                  strokeColor: '#CC66CC',
+                  fillColor: '#CCF3FF',
+                  fillOpacity: 0.5,
+                  path: bounds[i],
+                })
+                that.polygons.push(polygon)
+              }
+              that.map.setFitView()
+            }
+          }
+          let sear = val ? params : '中国'
+          district.search(sear, function(status, result) {
+            if (status === 'complete') {
+              getData(result.districtList[0])
+            }
+          })
+        })
+      },
+      selectP(val) {
+        this.province = CodeToText[val]
+        if (this.status) {
+          this.$emit('provinceChange', val)
+          this.loadmap(val)
+          this.city = ''
+          this.district = ''
+        }
+      },
+      selectC(val) {
+        console.log(val)
+        if (this.status) {
+          this.loadmap(val)
+          this.district = ''
+        }
+      },
+      selectD(val) {
+        this.district = CodeToText[val]
+        if (this.status) {
+          this.loadmap(val)
+        }
+      },
+      submit() {
+        let _data = []
+        _data.push(this.province)
+        _data.push(this.city)
+        _data.push(this.district)
+        _data.push(this.address)
+        _data.push(this.type)
+        this.$emit('addressListen', _data)
+        this.$parent.blurMap()
+        console.log("submit")
+      }
+    },
+  }
+</script>

+ 4 - 6
src/views/tradeServicesManagement/warehouseReceiptRegulation.vue

@@ -1,15 +1,13 @@
 <template>
 	<div>
-		
+		 <map-drag></map-drag>
 	</div>
 </template>
 <script>
-	import {
-		getList,
-	
-	} from '@/model/tradeServicesManagement/index'
+  import mapDrag from '@/components/mapdrag/warehouseReceiptMap'
+	import {getList} from '@/model/tradeServicesManagement/index'
 	export default {
-		components: {},
+		 components: {mapDrag},
 		data() {
 			return {