一、获取微信地址
- 在小程序的开发中,内置了获取微信地址的API接口。我们可以直接调用,对返回的数据进行相关的处理即可。代码如下:
<view class="wx_address flex_c_m" bindtap='weChat'>
<text class="iconfont iconweixin1"></text>
<text class="we_address">获取微信收货地址</text>
</view>
weChat() {
let that = this;
wx.getSetting({
success(res) {
console.log("vres.authSetting['scope.address']:", res.authSetting['scope.address'])
if (res.authSetting['scope.address']) {
wx.chooseAddress({
success(res) {
console.log(res.userName)
console.log(res.postalCode)
console.log(res.provinceName)
console.log(res.provinceName)
console.log(res.countyName)
console.log(res.detailInfo)
console.log(res.nationalCode)
console.log(res.telNumber)
let obj = {
TakeMan: res.userName,
TakeTel: res.telNumber,
TakeProvince: res.provinceName,
TakeCity: res.cityName,
TakeArea: res.countyName,
TakeAddress: res.detailInfo,
TakeBuildingNo: "",
IsDefault: false,
CommunityName: "",
CommunityAddress: "",
TakeLongitude: "",
TakeLatitude: ""
}
http.requestLoading('api/services/app/ShopMemerShippingAddressService/AddMemerShippingAddress', obj, '', 'POST').then(res => {
console.log(res)
if (res.data.Result.Code == 0) {
wx.showToast({
title: '获取微信地址成功',
icon: 'none'
})
that.getAddressList();
}
})
}
})
} else {
if (res.authSetting['scope.address'] == false) {
wx.openSetting({
success(res) {
console.log(res.authSetting)
}
})
} else {
wx.chooseAddress({
success(res) {
console.log(res.userName)
console.log(res.postalCode)
console.log(res.provinceName)
console.log(res.cityName)
console.log(res.countyName)
console.log(res.detailInfo)
console.log(res.nationalCode)
console.log(res.telNumber)
}
})
}
}
}
})
}
- 效果图如下:
二、联动搜索及模糊查询
- 在项目中实现选择省市区,根据选择的内容进行更详细的地址。详细地址可以通过搜索查到,具体代码如下:
<view class="address_top">
<view class="wx_address flex_c_m" bindtap='weChat'>
<text class="iconfont iconweixin1"></text>
<text class="we_address">获取微信收货地址</text>
</view>
<view class="personal">
<view class="personal_list">
<view class="personal_data">
<text class="personal_data_type">收货人</text>
<input class="zc_input" bindinput="inputValue" value="{{userName}}" placeholder="请填写收货人姓名"></input>
</view>
</view>
<view class="personal_list">
<view class="personal_data">
<text class="personal_data_type">手机号码</text>
<input class="zc_input" bindinput="telNumber" value="{{telNumber}}" placeholder="请填写联系方式"></input>
</view>
</view>
<view class="personal_list">
<picker mode="region" bindchange="bindRegionChange" value="{{region}}">
<view class="personal_data">
<text class="personal_data_type">所在地址</text>
<view class="picker">
<text class="address">{{region.length ? (region[0]+'-'+region[1]+'-'+region[2]) : ''}}</text>
<text class="iconfont iconxiangshang-copy toushustore_right"></text>
</view>
</view>
</picker>
</view>
<view class="personal_list">
<view class="personal_data" bindtap='onChangeAddress'>
<text class="personal_data_type">详细地址</text>
<input class="zc_input_txt" placeholder="请输入所在小区/大厦/学校 等" value="{{chooseAddress}}"></input>
<text class="iconfont iconxiangshang-copy toushustore_right"></text>
</view>
</view>
<view class="personal_list">
<view class="personal_data">
<text class="personal_data_type">楼牌号</text>
<input class="zc_input_txt" value="{{IDNo}}" maxlength="18" placeholder="请输入楼号/门牌号" bindinput="idNo"></input>
</view>
</view>
</view>
</view>
<view style="height:30rpx;"></view>
<view class="switch flex_lr_m">
<view>设为默认地址</view>
<view>
<switch checked="{{switch1Checked}}" bindchange="switch1Change" color="#FEB1C6" />
</view>
</view>
<!-- 保存收货地址 -->
<view class="add_address flex_c_m" bindtap="Preservation">
<text class="add_txt">保存</text>
</view>
- 这里需要说明一下,需要引入腾讯地图的SDK。借助SDK实现将省市区转为经纬度,从而实现联动的效果。模糊查询是借助内置的API实现的。
const http = require('../../../server/request.js');
const QQMapWX = require('../../../utils/qqmap-wx-jssdk.min.js');
const app = require('../../../utils/uselogn.js');
let qqMap = new QQMapWX({
key: 'PIQBZ-VC6L5-6MRIU-QXQJE-BOVHK'
});
Page({
data: {
userName: '',
provinceName: '',
cityName: '',
countyName: '',
detailInfo: '',
telNumber: '',
region: [],
switch1Checked: false,
chooseAddress: '',
IDNo: '',
lng: '',
lat: '',
isshop: true,
i:''
},
onLogin: app.userLogin,
onLoad: function(options) {
console.log(options)
if (Object.keys(options).length == 0) {
console.log("空对象")
} else {
console.log("非空对象")
this.setData({
isshop: false,
i: options.index
})
}
},
onReady: function() {
},
onShow: function() {
this.onLogin(this.authCallback);
},
authCallback: function() {
},
onHide: function() {
},
onUnload: function() {
},
onPullDownRefresh: function() {
},
onReachBottom: function() {
},
onShareAppMessage: function() {
},
weChat() {
let that = this;
wx.getSetting({
success(res) {
console.log("vres.authSetting['scope.address']:", res.authSetting['scope.address'])
if (res.authSetting['scope.address']) {
wx.chooseAddress({
success(res) {
console.log(res.userName)
console.log(res.postalCode)
console.log(res.provinceName)
console.log(res.provinceName)
console.log(res.countyName)
console.log(res.detailInfo)
console.log(res.nationalCode)
console.log(res.telNumber)
let region = [];
region.push(res.provinceName, res.countyName, res.countyName)
that.setData({
userName: res.userName,
telNumber: res.telNumber,
region: region,
chooseAddress: res.detailInfo
})
}
})
} else {
if (res.authSetting['scope.address'] == false) {
wx.openSetting({
success(res) {
console.log(res.authSetting)
}
})
} else {
wx.chooseAddress({
success(res) {
console.log(res.userName)
console.log(res.postalCode)
console.log(res.provinceName)
console.log(res.cityName)
console.log(res.countyName)
console.log(res.detailInfo)
console.log(res.nationalCode)
console.log(res.telNumber)
}
})
}
}
}
})
},
bindRegionChange: function(e) {
console.log('picker发送选择改变,携带值为', e)
this.setData({
region: e.detail.value
})
console.log(e.detail.value[0] + e.detail.value[1] + e.detail.value[2])
qqMap.geocoder({
address: e.detail.value[0] + e.detail.value[1] + e.detail.value[2],
complete: (res => {
console.log(res.result.location);
this.setData({
lng: res.result.location.lng,
lat: res.result.location.lat
})
})
})
},
switch1Change(e) {
console.log(e)
this.setData({
switch1Checked: e.detail.value
})
},
Preservation() {
let parm = {
TakeMan: this.data.userName,
TakeTel: this.data.telNumber,
TakeProvince: this.data.region[0],
TakeCity: this.data.region[1],
TakeArea: this.data.region[2],
TakeAddress: this.data.chooseAddress,
TakeBuildingNo: this.data.IDNo,
IsDefault: this.data.switch1Checked,
CommunityName: "",
CommunityAddress: "",
TakeLongitude: "",
TakeLatitude: ""
}
console.log(parm)
http.requestLoading('api/services/app/ShopMemerShippingAddressService/AddMemerShippingAddress?__shop__=4aa5b012-65aa-4f1c-be1f-c7c5852dee7b', parm, '', 'POST').then(res => {
console.log(res)
if (res.data.Result.Code == 0) {
wx.showToast({
title: '地址保存成功',
icon: 'none'
})
if (this.data.i == 1) {
wx.setStorageSync('addreass', parm)
wx.navigateBack({
delta: 2
})
} else if (this.data.i == 2) {
wx.setStorageSync('addreass1', parm)
wx.navigateBack({
delta: 2
})
} else {
setTimeout(() => {
wx.navigateTo({
url: '/pages/shoppingMall/shippingAddress/shippingAddress',
})
}, 500)
}
}
})
},
onChangeAddress: function() {
var _page = this;
wx.chooseLocation({
latitude: _page.data.lat,
longitude: _page.data.lng,
success: function(res) {
_page.setData({
chooseAddress: res.name
});
},
fail: function(err) {
console.log(err)
}
});
},
idNo(e) {
console.log(e.detail.value)
this.setData({
IDNo: e.detail.value
})
},
inputValue(e) {
this.setData({
userName: e.detail.value
})
},
telNumber(e) {
this.setData({
telNumber: e.detail.value
})
}
})
- 效果图如下所示:
三、导航
- 导航可以利用小程序自带的API去实现,通过传递不同的参数来控制目的地不同。代码如下:
<view class="receiv flex_lr_m" bindtap="click">
<text class="receiv_name">提货地点</text>
<view class="dib receiv_address">{{shoplists.StoreAddress}}</view>
<text class="iconfont icondizhi1"></text>
</view>
click() {
console.log(1)
let that = this;
let lat = that.data.shoplists.Latitude;
let long = that.data.shoplists.Longitude;
wx.getLocation({
type: 'wgs84',
success: function(res) {
var latitude = res.latitude
var longitude = res.longitude
console.log(typeof latitude, longitude, res, typeof lat, parseFloat(long))
wx.openLocation({
latitude: latitude,
longitude: longitude,
name: that.data.shoplists.StoreAddress,
address: that.data.shoplists.StoreAddress
})
}
})
}
- 效果图如下: