|
|
- <template>
- <view class="receiving-map position-relative flex-1">
- <!-- 地图 -->
- <view class="map">
- <map id="myMap" style="width: 100%; height: 44vh" :subkey="mapKey"
- :latitude="latitude" :longitude="longitude" :markers="markers" :layer-style="1"
- @regionchange="onMapDrag" show-location>
- <!-- :polyline="polyline" 线-->
- <cover-image class="locate-img" src="https://cheum.oss-cn-beijing.aliyuncs.com/chemuXcx-img/newimg/locate2.png"></cover-image>
- <cover-view class="location-img-box" @click="test">
- <cover-image class="location-img" :src="IMG_URL + 'location.png'"></cover-image>
- </cover-view>
-
- </map>
-
- <view class="receiving-map-container position-absolute zIndex-1">
- <view class="flex align-center justify-between p-l-20 p-r-20">
- <view class="flex align-center receiving-map-container-title u-line-1">
- <u-icon name="map" color="##707070" size="40" />
- <text class="text-grey font-26 m-l-10 u-line-1">{{ locale }}</text>
- </view>
- <text class="text-grey font-26 m-l-10">(当前定位)</text>
- </view>
- <!-- <scroll-view scroll-y class="receiving-map-container-scroll" >
- <view class="m-l-20 m-r-20">
- <receiving-item v-for="item in 10" :key="item" />
- </view>
- </scroll-view> -->
- <view class="receiving-map-container-scroll">
- <view class="font-28 font-weight-bold text-black flex flex-wrap align-center justify-center receiving-map-container-tips">
- <text class="m-b-16">您附近1.5KM内没有取货点,</text>
- <text class="m-b-16">可以添加收货地址让快递小哥送货哟!</text>
- <text class="m-b-16 text-grey">*(运费自理,满100包邮)</text>
- </view>
-
- <view class="receiving-map-container-btn">
- <u-button type="primary" @click="toAdd">去添加收货地址</u-button>
- </view>
- </view>
- </view>
- </view>
-
- </view>
- </template>
- <script>
- /**
- * map 用到的属性
- * @param width map宽度
- * @param height map高度
- * @param latitude 中心纬度getLocation
- * @param longitude 中心经度
- * @param scale 缩放级别,取值范围为5-18
- * @param markers 标记点
- * @param show-location 显示带有方向的当前定位点
- * @param @markertap 点击标记点时触发
- * @param @labeltap 点击label时触发,e.detail = {markerId} 微信小程序2.9.0
- * @param @callouttap 点击标记点对应的气泡时触发,e.detail = {markerId}
- * @param @controltap 点击控件时触发,e.detail = {controlId}
- * */
- import QQMapWX from '@/plugin/map/qqmap-wx-jssdk.min.js'
- import { IMG_URL } from '@/env.js'
- import { MAP_KEY } from '@/config/settings.js'
- export default {
- data() {
- return {
- mapKey: MAP_KEY,
- IMG_URL,
- xuanran:true,//是否渲染地图
- showLocate:true,//展示地图上的标记点
- markers: [], // 标记点列表
- latitude: 0, // 当前位置经纬度
- longitude: 0, // 当前位置经纬度
- center : ['', ''],
- show: false, // 众筹店铺详细信息显示隐藏
- qqmapsdk: '',
- locale: ''
- }
- },
- onLoad() {
- this.qqmapsdk = new QQMapWX({
- key: this.mapKey // 必填
- })
- this.handleAuthorize()
- },
- onShow() {
- //调用地图信息
- },
- onHide() {
- },
- methods: {
- toAdd () {
- this.$tools.navigateTo({
- url: '/pages/my/address/address?type=set_location'
- })
- },
- test () {
- this.handleAuthorize()
- },
- // 距离换算
- getDistance(val){
- return ((val/1000)*1).toFixed(2) + 'km'
- },
- // 授权定位
- handleAuthorize() {
- uni.authorize({
- scope: 'scope.userLocation', // 获取地理信息必填的参数,其它参数见文档
- success: res => {
- this.getLocationFn()
- },
- // 授权失败
- fail(err) {
- err = err['errMsg']
- uni.showModal({
- title: '温馨提示',
- content: '为了您的体验,请授权定位服务。',
- showCancel: false,
- confirmText: '确认授权',
- }).then(res => {
- // 这里只设置了确认按钮,没有取消按钮
- //res : [null, {cancel: false, confirm: true, errMsg: 'showModal: ok'}]
- if (res[1]['confirm']) {
- // 点击了确认按钮时
- // 调用下边方法时,会弹出 【使用我的地理位置】界面, 未设置直接返回,还是会走fail授权失败的函数,
- // 还是会弹出上边的温馨提示!!!
- // 如果设置, scope.userLocation: true
- uni.openSetting({
- success(res) {
- // 如果不设置,res结果:
- // {errMsg: "openSetting:ok", authSetting: {scope.userLocation: false}}
- // 如果设置, res结果:
- // {errMsg: "openSetting:ok", authSetting: {scope.userLocation: true}}
- // console.log('小程序设置界面:', res)
- },
- })
- }
- })
- },
- })
- },
-
- getLocationFn() {
- uni.getLocation({
- type: 'gcj02', // <map> 组件默认为国测局坐标gcj02
- altitude: true,
- success: res => {
- console.log(res);
- this.latitude = res.latitude
- this.longitude = res.longitude
- this.getMarkeres(this.latitude,this.longitude);
- },
- fail: error =>{
- console.log('error-------',error)
- this.latitude = ''
- this.longitude = ''
- this.getMarkeres('','')
- }
- })
- },
- onMapDrag(e){
- var map = uni.createMapContext('myMap', this);
- map.getCenterLocation({
- success:(res)=>{
- console.log(res)
- this.qqmapsdk.reverseGeocoder({
- location: {
- latitude: res.latitude,
- longitude: res.longitude
- },
- success: (location) => {
- let {result} = location
- console.log('location=======>',result,result.formatted_addresses.recommend)
- this.locale = result.formatted_addresses.recommend
- },
- })
- setTimeout(()=>{
- this.getMarkeres(res.latitude, res.longitude)
- },1000)
- }
- })
- },
- // 获取取货列表
- getMarkeres (longitude, latitude) {
-
- // let arr = [longitude, latitude]
- // arr = arr.join()
- let imgUrl = 'https://cheum.oss-cn-beijing.aliyuncs.com/chemuXcx-img/index/'
- // this.queryMerchantInfo({
- // lon: latitude,
- // lat: longitude
- // }).then(res => {
- // this.nearlyList = res.result.slice(0, 3)
- // // 添加气泡
- // let num = 0
- // res.result.forEach((item, i) => {
- // num++
- // item.longitLat = item.longitLat.split(',')
- // item.business = item.business.split("、")
- let mk = {
- id: 1, //marker 序号
- width: '53rpx', //marker 宽度
- height: '60rpx', //marker 高度
- iconPath: imgUrl + 'markersImg-2.png', //marker 图标路径
- // iconPath: item.type == 2 ? imgUrl + 'markersImg-1.png' : imgUrl + 'markersImg-2.png', //marker 图标路径
- longitude, //marker 经度
- latitude: 90, //marker 纬度
- name: 'Cheum车姆',
- callout: {
- borderRadius: 10,
- padding: 10,
- color: '#333333',
- fontSize: 10,
- content: 'Cheum车姆',
- display:'ALWAYS'
- }
- }
- // if(this.xuanran){
- this.markers.push(mk)
- // console.log(this.markers)
- // // this.xuanran = false
- // }
- // if(num === res.result.length){
- // this.xuanran = false
- // }
- // })
-
- // // 初始化onMapDragNum
- // this.onMapDragNum = 0
-
- // })
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .locate-img {
- width: 50rpx;
- height: 82rpx;
- position: fixed;
- top: 22vh;
- left: 50%;
- transform: translate(-50%, -100%);
- }
- .location-img-box {
- position: fixed;
- top: 40vh;
- right: 0;
- transform: translate(-20%, -110%);
- }
- .location-img {
- width: 120rpx;
- height: 120rpx;
- }
- .receiving-map {
- &-container {
- width: 100vw;
- left: 0;
- bottom: 0;
- height: 60vh;
- background: #fff;
- border-radius: 47rpx 47rpx 0px 0px;
- &-title {
- width: 78%;
- height: 80rpx;
- box-sizing: border-box;
- }
- &-scroll {
- height: calc(60vh - 80rpx);
- }
-
- &-tips {
- padding-top: 80rpx;
- margin-bottom: 200rpx;
- }
-
-
- &-btn {
- padding: 0 150rpx;
- }
- }
- }
- </style>
|