From d39644872fa6f9499fc2c1651bced631a9e96b19 Mon Sep 17 00:00:00 2001 From: 陶杰 <1378534974@qq.com> Date: 星期一, 23 十二月 2024 09:48:53 +0800 Subject: [PATCH] 1.高德地图未开发完成版本(可能废弃) --- environments/index.js | 6 pages.json | 6 pages/user/address/gaode-address.vue | 359 +++++++++++++ map/amap-wx.130.js | 31 + pages/user/address/address.vue | 1217 ++++++++++++++++++++++---------------------- 5 files changed, 1,011 insertions(+), 608 deletions(-) diff --git a/environments/index.js b/environments/index.js index c8a5cf9..814a716 100644 --- a/environments/index.js +++ b/environments/index.js @@ -1,10 +1,14 @@ export default { - httpBaseUri: 'https://www.hmyxianhua.com/flower', + // httpBaseUri: 'https://www.hmyxianhua.com/flower', // httpBaseUri: 'http://47.99.58.211/flower', + // httpBaseUri: 'http://192.168.1.198:8080/flower', + // httpBaseUri: 'http://192.168.1.213:8080/flower', // httpBaseUri: 'http://localhost:8080/flower', + httpBaseUri: 'http://192.168.1.7:8080/flower', clientId: '', secret: '', tenantId: '', type: 'dev' } + diff --git a/map/amap-wx.130.js b/map/amap-wx.130.js new file mode 100644 index 0000000..718d6ef --- /dev/null +++ b/map/amap-wx.130.js @@ -0,0 +1,31 @@ +function AMapWX(a){this.key=a.key;this.requestConfig={key:a.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"};this.MeRequestConfig={key:a.key,serviceName:"https://restapi.amap.com/rest/me"}} +AMapWX.prototype.getWxLocation=function(a,b){wx.getLocation({type:"gcj02",success:function(c){c=c.longitude+","+c.latitude;wx.setStorage({key:"userLocation",data:c});b(c)},fail:function(c){wx.getStorage({key:"userLocation",success:function(d){d.data&&b(d.data)}});a.fail({errCode:"0",errMsg:c.errMsg||""})}})}; +AMapWX.prototype.getMEKeywordsSearch=function(a){if(!a.options)return a.fail({errCode:"0",errMsg:"\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570"});var b=a.options,c=this.MeRequestConfig,d={key:c.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"};b.layerId&&(d.layerId=b.layerId);b.keywords&&(d.keywords=b.keywords);b.city&&(d.city=b.city);b.filter&&(d.filter=b.filter);b.sortrule&&(d.sortrule=b.sortrule);b.pageNum&&(d.pageNum=b.pageNum);b.pageSize&&(d.pageSize=b.pageSize);b.sig&&(d.sig= +b.sig);wx.request({url:c.serviceName+"/cpoint/datasearch/local",data:d,method:"GET",header:{"content-type":"application/json"},success:function(e){(e=e.data)&&e.status&&"1"===e.status&&0===e.code?a.success(e.data):a.fail({errCode:"0",errMsg:e})},fail:function(e){a.fail({errCode:"0",errMsg:e.errMsg||""})}})}; +AMapWX.prototype.getMEIdSearch=function(a){if(!a.options)return a.fail({errCode:"0",errMsg:"\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570"});var b=a.options,c=this.MeRequestConfig,d={key:c.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"};b.layerId&&(d.layerId=b.layerId);b.id&&(d.id=b.id);b.sig&&(d.sig=b.sig);wx.request({url:c.serviceName+"/cpoint/datasearch/id",data:d,method:"GET",header:{"content-type":"application/json"},success:function(e){(e=e.data)&&e.status&&"1"===e.status&& +0===e.code?a.success(e.data):a.fail({errCode:"0",errMsg:e})},fail:function(e){a.fail({errCode:"0",errMsg:e.errMsg||""})}})}; +AMapWX.prototype.getMEPolygonSearch=function(a){if(!a.options)return a.fail({errCode:"0",errMsg:"\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570"});var b=a.options,c=this.MeRequestConfig,d={key:c.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"};b.layerId&&(d.layerId=b.layerId);b.keywords&&(d.keywords=b.keywords);b.polygon&&(d.polygon=b.polygon);b.filter&&(d.filter=b.filter);b.sortrule&&(d.sortrule=b.sortrule);b.pageNum&&(d.pageNum=b.pageNum);b.pageSize&&(d.pageSize=b.pageSize); +b.sig&&(d.sig=b.sig);wx.request({url:c.serviceName+"/cpoint/datasearch/polygon",data:d,method:"GET",header:{"content-type":"application/json"},success:function(e){(e=e.data)&&e.status&&"1"===e.status&&0===e.code?a.success(e.data):a.fail({errCode:"0",errMsg:e})},fail:function(e){a.fail({errCode:"0",errMsg:e.errMsg||""})}})}; +AMapWX.prototype.getMEaroundSearch=function(a){if(!a.options)return a.fail({errCode:"0",errMsg:"\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570"});var b=a.options,c=this.MeRequestConfig,d={key:c.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"};b.layerId&&(d.layerId=b.layerId);b.keywords&&(d.keywords=b.keywords);b.center&&(d.center=b.center);b.radius&&(d.radius=b.radius);b.filter&&(d.filter=b.filter);b.sortrule&&(d.sortrule=b.sortrule);b.pageNum&&(d.pageNum=b.pageNum);b.pageSize&& +(d.pageSize=b.pageSize);b.sig&&(d.sig=b.sig);wx.request({url:c.serviceName+"/cpoint/datasearch/around",data:d,method:"GET",header:{"content-type":"application/json"},success:function(e){(e=e.data)&&e.status&&"1"===e.status&&0===e.code?a.success(e.data):a.fail({errCode:"0",errMsg:e})},fail:function(e){a.fail({errCode:"0",errMsg:e.errMsg||""})}})}; +AMapWX.prototype.getGeo=function(a){var b=this.requestConfig,c=a.options;b={key:this.key,extensions:"all",s:b.s,platform:b.platform,appname:this.key,sdkversion:b.sdkversion,logversion:b.logversion};c.address&&(b.address=c.address);c.city&&(b.city=c.city);c.batch&&(b.batch=c.batch);c.sig&&(b.sig=c.sig);wx.request({url:"https://restapi.amap.com/v3/geocode/geo",data:b,method:"GET",header:{"content-type":"application/json"},success:function(d){(d=d.data)&&d.status&&"1"===d.status?a.success(d):a.fail({errCode:"0", +errMsg:d})},fail:function(d){a.fail({errCode:"0",errMsg:d.errMsg||""})}})}; +AMapWX.prototype.getRegeo=function(a){function b(d){var e=c.requestConfig;wx.request({url:"https://restapi.amap.com/v3/geocode/regeo",data:{key:c.key,location:d,extensions:"all",s:e.s,platform:e.platform,appname:c.key,sdkversion:e.sdkversion,logversion:e.logversion},method:"GET",header:{"content-type":"application/json"},success:function(g){if(g.data.status&&"1"==g.data.status){g=g.data.regeocode;var h=g.addressComponent,f=[],k=g.roads[0].name+"\u9644\u8fd1",m=d.split(",")[0],n=d.split(",")[1];if(g.pois&& +g.pois[0]){k=g.pois[0].name+"\u9644\u8fd1";var l=g.pois[0].location;l&&(m=parseFloat(l.split(",")[0]),n=parseFloat(l.split(",")[1]))}h.provice&&f.push(h.provice);h.city&&f.push(h.city);h.district&&f.push(h.district);h.streetNumber&&h.streetNumber.street&&h.streetNumber.number?(f.push(h.streetNumber.street),f.push(h.streetNumber.number)):f.push(g.roads[0].name);f=f.join("");a.success([{iconPath:a.iconPath,width:a.iconWidth,height:a.iconHeight,name:f,desc:k,longitude:m,latitude:n,id:0,regeocodeData:g}])}else a.fail({errCode:g.data.infocode, +errMsg:g.data.info})},fail:function(g){a.fail({errCode:"0",errMsg:g.errMsg||""})}})}var c=this;a.location?b(a.location):c.getWxLocation(a,function(d){b(d)})}; +AMapWX.prototype.getWeather=function(a){function b(g){var h="base";a.type&&"forecast"==a.type&&(h="all");wx.request({url:"https://restapi.amap.com/v3/weather/weatherInfo",data:{key:d.key,city:g,extensions:h,s:e.s,platform:e.platform,appname:d.key,sdkversion:e.sdkversion,logversion:e.logversion},method:"GET",header:{"content-type":"application/json"},success:function(f){if(f.data.status&&"1"==f.data.status)if(f.data.lives){if((f=f.data.lives)&&0<f.length){f=f[0];var k={city:{text:"\u57ce\u5e02",data:f.city}, +weather:{text:"\u5929\u6c14",data:f.weather},temperature:{text:"\u6e29\u5ea6",data:f.temperature},winddirection:{text:"\u98ce\u5411",data:f.winddirection+"\u98ce"},windpower:{text:"\u98ce\u529b",data:f.windpower+"\u7ea7"},humidity:{text:"\u6e7f\u5ea6",data:f.humidity+"%"}};k.liveData=f;a.success(k)}}else f.data.forecasts&&f.data.forecasts[0]&&a.success({forecast:f.data.forecasts[0]});else a.fail({errCode:f.data.infocode,errMsg:f.data.info})},fail:function(f){a.fail({errCode:"0",errMsg:f.errMsg||""})}})} +function c(g){wx.request({url:"https://restapi.amap.com/v3/geocode/regeo",data:{key:d.key,location:g,extensions:"all",s:e.s,platform:e.platform,appname:d.key,sdkversion:e.sdkversion,logversion:e.logversion},method:"GET",header:{"content-type":"application/json"},success:function(h){if(h.data.status&&"1"==h.data.status){h=h.data.regeocode;if(h.addressComponent)var f=h.addressComponent.adcode;else h.aois&&0<h.aois.length&&(f=h.aois[0].adcode);b(f)}else a.fail({errCode:h.data.infocode,errMsg:h.data.info})}, +fail:function(h){a.fail({errCode:"0",errMsg:h.errMsg||""})}})}var d=this,e=d.requestConfig;a.city?b(a.city):d.getWxLocation(a,function(g){c(g)})}; +AMapWX.prototype.getPoiAround=function(a){function b(e){e={key:c.key,location:e,s:d.s,platform:d.platform,appname:c.key,sdkversion:d.sdkversion,logversion:d.logversion};a.querytypes&&(e.types=a.querytypes);a.querykeywords&&(e.keywords=a.querykeywords);wx.request({url:"https://restapi.amap.com/v3/place/around",data:e,method:"GET",header:{"content-type":"application/json"},success:function(g){if(g.data.status&&"1"==g.data.status){if((g=g.data)&&g.pois){for(var h=[],f=0;f<g.pois.length;f++){var k=0== +f?a.iconPathSelected:a.iconPath;h.push({latitude:parseFloat(g.pois[f].location.split(",")[1]),longitude:parseFloat(g.pois[f].location.split(",")[0]),iconPath:k,width:22,height:32,id:f,name:g.pois[f].name,address:g.pois[f].address})}a.success({markers:h,poisData:g.pois})}}else a.fail({errCode:g.data.infocode,errMsg:g.data.info})},fail:function(g){a.fail({errCode:"0",errMsg:g.errMsg||""})}})}var c=this,d=c.requestConfig;a.location?b(a.location):c.getWxLocation(a,function(e){b(e)})}; +AMapWX.prototype.getStaticmap=function(a){function b(e){c.push("location="+e);a.zoom&&c.push("zoom="+a.zoom);a.size&&c.push("size="+a.size);a.scale&&c.push("scale="+a.scale);a.markers&&c.push("markers="+a.markers);a.labels&&c.push("labels="+a.labels);a.paths&&c.push("paths="+a.paths);a.traffic&&c.push("traffic="+a.traffic);e="https://restapi.amap.com/v3/staticmap?"+c.join("&");a.success({url:e})}var c=[];c.push("key="+this.key);var d=this.requestConfig;c.push("s="+d.s);c.push("platform="+d.platform); +c.push("appname="+d.appname);c.push("sdkversion="+d.sdkversion);c.push("logversion="+d.logversion);a.location?b(a.location):this.getWxLocation(a,function(e){b(e)})}; +AMapWX.prototype.getInputtips=function(a){var b=Object.assign({},this.requestConfig);a.location&&(b.location=a.location);a.keywords&&(b.keywords=a.keywords);a.type&&(b.type=a.type);a.city&&(b.city=a.city);a.citylimit&&(b.citylimit=a.citylimit);wx.request({url:"https://restapi.amap.com/v3/assistant/inputtips",data:b,method:"GET",header:{"content-type":"application/json"},success:function(c){c&&c.data&&c.data.tips&&a.success({tips:c.data.tips})},fail:function(c){a.fail({errCode:"0",errMsg:c.errMsg|| +""})}})}; +AMapWX.prototype.getDrivingRoute=function(a){var b=Object.assign({},this.requestConfig);a.origin&&(b.origin=a.origin);a.destination&&(b.destination=a.destination);a.strategy&&(b.strategy=a.strategy);a.waypoints&&(b.waypoints=a.waypoints);a.avoidpolygons&&(b.avoidpolygons=a.avoidpolygons);a.avoidroad&&(b.avoidroad=a.avoidroad);wx.request({url:"https://restapi.amap.com/v3/direction/driving",data:b,method:"GET",header:{"content-type":"application/json"},success:function(c){c&&c.data&&c.data.route&&a.success({paths:c.data.route.paths, +taxi_cost:c.data.route.taxi_cost||""})},fail:function(c){a.fail({errCode:"0",errMsg:c.errMsg||""})}})}; +AMapWX.prototype.getWalkingRoute=function(a){var b=Object.assign({},this.requestConfig);a.origin&&(b.origin=a.origin);a.destination&&(b.destination=a.destination);wx.request({url:"https://restapi.amap.com/v3/direction/walking",data:b,method:"GET",header:{"content-type":"application/json"},success:function(c){c&&c.data&&c.data.route&&a.success({paths:c.data.route.paths})},fail:function(c){a.fail({errCode:"0",errMsg:c.errMsg||""})}})}; +AMapWX.prototype.getTransitRoute=function(a){var b=Object.assign({},this.requestConfig);a.origin&&(b.origin=a.origin);a.destination&&(b.destination=a.destination);a.strategy&&(b.strategy=a.strategy);a.city&&(b.city=a.city);a.cityd&&(b.cityd=a.cityd);wx.request({url:"https://restapi.amap.com/v3/direction/transit/integrated",data:b,method:"GET",header:{"content-type":"application/json"},success:function(c){c&&c.data&&c.data.route&&(c=c.data.route,a.success({distance:c.distance||"",taxi_cost:c.taxi_cost|| +"",transits:c.transits}))},fail:function(c){a.fail({errCode:"0",errMsg:c.errMsg||""})}})}; +AMapWX.prototype.getRidingRoute=function(a){var b=Object.assign({},this.requestConfig);a.origin&&(b.origin=a.origin);a.destination&&(b.destination=a.destination);wx.request({url:"https://restapi.amap.com/v3/direction/riding",data:b,method:"GET",header:{"content-type":"application/json"},success:function(c){c&&c.data&&c.data.route&&a.success({paths:c.data.route.paths})},fail:function(c){a.fail({errCode:"0",errMsg:c.errMsg||""})}})};module.exports.AMapWX=AMapWX; \ No newline at end of file diff --git a/pages.json b/pages.json index e7f18b4..1fc700c 100644 --- a/pages.json +++ b/pages.json @@ -19,6 +19,12 @@ "navigationBarTitleText": "收货地址" } }, + { + "path": "pages/user/address/gaode-address", + "style": { + "navigationBarTitleText": "高德地图" + } + }, // #endif { "path": "pages/login/supplier-login", diff --git a/pages/user/address/address.vue b/pages/user/address/address.vue index cee367b..956fb97 100644 --- a/pages/user/address/address.vue +++ b/pages/user/address/address.vue @@ -2,7 +2,8 @@ <!-- 收货地址列表 --> <view class="p15 container-address"> <view class="search-container m-t-12 flex"> - <view class="flex1 input" @click="selectWxAddress('input')"> + <!-- <view class="flex1 input" @click="selectWxAddress('input')"> --> + <view class="flex1 input" @click="selectGaodeAddress('input')"> <u-input placeholder="小区名/店铺名/写字楼/街道名等" disabled v-model="search_flow"> <template slot="suffix"> <uni-icons color="#20613D" type="search" size="24"></uni-icons> @@ -14,7 +15,7 @@ <view class="desc-gray">当前位置</view> <view class="flex current-address"> <view class="flex1"> - {{ addressDesc || (address&&address.id?address.address: '选择地址') }} + {{ addressDesc || (address && address.id ? address.address : '选择地址') }} </view> <view class="flex" @click="changeCurrentAddress"> @@ -31,10 +32,10 @@ <view class="desc-gray">我的收货地址</view> </view> - <no-data v-if="!list||list.length==0" style="width: 100%;"></no-data> + <no-data v-if="!list || list.length == 0" style="width: 100%;"></no-data> <!-- 循环 --> - <view v-for="(item,index) of list" :key="index" class="location-each m-t-12"> + <view v-for="(item, index) of list" :key="index" class="location-each m-t-12"> <view class="flex"> <view class="container-info"> <view class="flex"> @@ -43,7 +44,7 @@ </view> <view class="address"> {{ item['province'] || '' }}{{ item['city'] && ('/' + item['city']) || '' }}{{ - item['region'] && ('/' + item['region']) || '' + item['region'] && ('/' + item['region']) || '' }} </view> <view class="address"> @@ -51,7 +52,7 @@ </view> </view> <!-- <view class="h-line"></view> --> - <view class="edit" @click="()=>{ + <view class="edit" @click="() => { this.submitForm = { ...item } @@ -64,8 +65,8 @@ <view class="flex"> <!-- --> <view class="flex"> - <view class="radio m-t-2 m-r-10" :class="[item.isDefault?'select':'']" - @click="changeDefaultAddress(item,index)"> + <view class="radio m-t-2 m-r-10" :class="[item.isDefault ? 'select' : '']" + @click="changeDefaultAddress(item, index)"> </view> <span class="desc" style="word-break: break-all;">{{ item.isDefault ? '默认地址:' : '当前地址:' }}</span> @@ -74,10 +75,10 @@ <view class="desc del t-red" @click="deleteAddress(item)"> 删除 </view> - <view class="desc del t-green m-l-10" v-if="source==='select'" @click="selectAddress(item)"> + <view class="desc del t-green m-l-10" v-if="source === 'select'" @click="selectAddress(item)"> 选择此地址 </view> - <view class="desc del t-green m-l-10" v-if="source==='home'" @click="selectAddress(item)"> + <view class="desc del t-green m-l-10" v-if="source === 'home'" @click="selectAddress(item)"> 按此地址定位 </view> </view> @@ -119,12 +120,14 @@ <view class="form-item-label require"> 收货地址 </view> - <view class="m-l-a m-r-0 flex " :class="[!dto['province']?'desc-gray':'']"> - <uni-data-picker :area="true" @change="(e)=>{PickArea(submitForm,e)}" placeholder="" + <view class="m-l-a m-r-0 flex " :class="[!dto['province'] ? 'desc-gray' : '']"> + <uni-data-picker :area="true" @change="(e) => { PickArea(submitForm, e) }" placeholder="" :localdata="regionDataPlus"> - {{ submitForm['province'] || '请选择' }}{{ submitForm['city'] && ('/' + submitForm['city']) || '' }}{{ - submitForm['region'] && ('/' + submitForm['region']) || '' - }} + {{ submitForm['province'] || '请选择' }}{{ submitForm['city'] && ('/' + submitForm['city']) + || '' + }}{{ + submitForm['region'] && ('/' + submitForm['region']) || '' + }} </uni-data-picker> <u-icon class="m-l-a" name="arrow-right"></u-icon> </view> @@ -154,7 +157,7 @@ </view> <view class="form-item-value"> <radio value="r1" :checked="submitForm.isDefault" - @click="submitForm.isDefault=!submitForm.isDefault" + @click="submitForm.isDefault = !submitForm.isDefault" style="transform:scale(0.6);margin-top: -8rpx;" /> </view> </view> @@ -168,80 +171,443 @@ </template> <script> - // #ifdef PUB_CUSTOMER - // import qqmapwx from '@/plugins/qqmap-wx-jssdk.min.js'; - // const lockey = 'GSBBZ-CJA3U-NNDVH-GE65N-6FIF6-ZGBCU'; //使用在腾讯位置服务申请的key - // const chooseLocation = requirePlugin('chooseLocation'); - // #endif +// #ifdef PUB_CUSTOMER +// import qqmapwx from '@/plugins/qqmap-wx-jssdk.min.js'; +// const lockey = 'GSBBZ-CJA3U-NNDVH-GE65N-6FIF6-ZGBCU'; //使用在腾讯位置服务申请的key +// const chooseLocation = requirePlugin('chooseLocation'); +// #endif - import { - mapState - } from 'vuex' - export default { - async onPullDownRefresh() { - this.page.current = 0 +import amapFile from '@/map/amap-wx.130.js'; + +import { + mapState +} from 'vuex' +export default { + async onPullDownRefresh() { + this.page.current = 0 + await this.getList() + uni.stopPullDownRefresh() + }, + async onLoad(options) { + // debugger; + // 引入高德地图的组件 + const myAmapFun = new amapFile.AMapWX({ key: '75d7da3feb329cd5ae997975b953abb6' }); + myAmapFun.getRegeo({ + success: (data) => { + console.log('当前位置:', data[0]); + console.log(data) + // this.setData({ + // longitude: data[0].longitude, + // latitude: data[0].latitude, + // locationName: data[0].name, + // }); + }, + fail(err) { + console.error(err); + }, + }); + + // this.list = [{}, {}] + this.source = options.source || '' + this.listApi = '/api/address/list' + if (!this.currentInfo.id) { + + } else { await this.getList() - uni.stopPullDownRefresh() + + } + + }, + onShow() { + + }, + computed: { + ...mapState({ + address: state => { + return state.defaultaddress || {} + }, + addressDesc: state => { + return state.addressDesc || '' + }, + // search_flow() { + // return this.addressDesc || '' + // } + }), + + }, + data() { + return { + source: '', + submitForm: { + name: '', + tel: '', + address: '', + isDefault: false, + province: '', + city: '', + region: '', + latitude: 0, + longitude: 0, + }, + regionDataPlus: [], + list: [], + search_flow: '', + }; + }, + methods: { + selectGaodeAddress(){ + uni.navigateTo({ + url: '/pages/user/address/gaode-address' + }) }, - async onLoad(options) { - // this.list = [{}, {}] - this.source = options.source || '' - this.listApi = '/api/address/list' - if (!this.currentInfo.id) { + selectWxAddress(source) { + let that = this - } else { - await this.getList() + { + //表单选择了地址 + wx.chooseLocation({ + success: location => { + console.log('success loc', location, source) + console.log(location) + // address: "江苏省苏州市吴中区太湖东路288号" + // errMsg: "chooseLocation:ok" + // latitude: 31.26249 + // longitude: 120.63212 + // name: "苏州市吴中区人民政府" + if (source === 'form') { + // (location.address || '') + + that.submitForm.address = (location.name || location.address || '') + that.submitForm.latitude = location.latitude || 0 + that.submitForm.longitude = location.longitude || 0 + } else if (source === 'input') { + // (location.address || '') + + // that.search_flow = (location.name || '') + that.$store.commit('setAddressDesc', (location.name || location.address || '')) + that.$forceUpdate() + that.backpage() + } + // if (!that.submitForm.province && location.provinceName) { + // that.submitForm.province = location.provinceName + // if (!that.submitForm.city && location.cityName) { + // that.submitForm.city = location.cityName + // } + // if (!that.submitForm.region && location.countyName) { + // that.submitForm.region = location.countyName + // } + // if (!that.submitForm.region && location.cityName) { + // that.submitForm.region = location.cityName + // } + // } + // success loc + // {errMsg: "chooseAddress:ok", userName: "张三", nationalCode: "510000", telNumber: "020-81167888", postalCode: "510000", …} + // cityName: "广州市" + // countyName: "海珠区" + // detailInfo: "新港中路397号" + // errMsg: "chooseAddress:ok" + // nationalCode: "510000" + // postalCode: "510000" + // provinceName: "广东省" + // telNumber: "020-81167888" + // userName: "张三" + }, + fail: e => { + console.log('fail loc', e) + // that.$message.showToast('定位失败') + } + }) + // uni.getLocation({ + // type: 'wgs84', + // success(res) { + // //得到经纬度 + // console.log(res); + // const referer = '花满芫'; //调用插件的app的名称 + // const location = JSON.stringify({ + // latitude: res.latitude, + // longitude: res.longitude + // }); + // const category = '生活服务,娱乐休闲'; + // // &category=${category} + + // wx.navigateTo({ + // url: `plugin://chooseLocation/index?key=${lockey}&referer=${referer}&location=${location}` + // }); + + // } + // }) + } + }, + validatePhoneNumber() { + + // 手机号码正则表达式,可以根据需要调整 + const phoneRegex = /^[1][3-9][0-9]{9}$/; + if (!phoneRegex.test(this.submitForm['tel'])) { + this.$message.showToast('请填写正确手机号码') } }, - onShow() { - // const location = chooseLocation.getLocation(); // 如果点击确认选点按钮,则返回选点结果对象,否则返回null - // // console.log('onshow location', location, this.tmp_picker_lock_index, this.formcodes["LOC_ONE"]) - // // address: "江苏省苏州市吴中区太湖东路280号" - // // city: "苏州市" - // // district: "吴中区" - // // latitude: 31.262438 - // // longitude: 120.633985 - // // name: "太湖东路280号小区" - // // province: "江苏省" - // if (location && location.address) { - // this.submitForm.address = location.address - // this.submitForm.latitude = location.latitude - // this.submitForm.longitude = location.longitude - // if (!this.submitForm.province && location.province) { - // this.submitForm.province = location.province - // if (!this.submitForm.city && location.city) { - // this.submitForm.city = location.city - // } - // if (!this.submitForm.region && location.district) { - // this.submitForm.region = location.district - // } - // if (!this.submitForm.region && location.city) { - // this.submitForm.region = location.city - // } - // } - // this.$forceUpdate() - // } + + addAddress() { + delete this.submitForm.id + this.submitForm['name'] = '' + this.submitForm['tel'] = '' + this.submitForm['address'] = '' + this.submitForm['province'] = '' + this.submitForm['city'] = '' + this.submitForm['region'] = '' + this.submitForm['isDefault'] = false + this.openAddressForm() }, - computed: { - ...mapState({ - address: state => { - return state.defaultaddress || {} + changeCurrentAddress() { + // if(!this.addressDesc){ + + // } + let that = this + this.$message.showLoading() + uni.getLocation({ + type: 'gcj02', + geocode: true, + success: async (res) => { + // this.location = { + // latitude: res.latitude, + // longitude: res.longitude, + // speed: res.speed, + // accuracy: res.accuracy, + // address: res.address, + // }; + const { + code, data + } = await that.$http.request('get', '/api/pub/customer/home/address/parse', { + data: {}, + params: { + // https://apis.map.qq.com/ws/geocoder/v1/?location=39.984154,116.307490&key=[你的key]&get_poi=1 + location: `${res.latitude},${res.longitude}` + } + }) + console.log('定位成功:', data); + if (data) { + var address = data.result && data.result.address || '' + + that.$store.commit('setAddressDesc', (address || '')) + that.$forceUpdate() + + that.backpage() + + } + + }, - addressDesc: state => { - return state.addressDesc || '' + fail: (err) => { + that.error = err; + console.error('定位失败:', err); }, - // search_flow() { - // return this.addressDesc || '' - // } - }), + complete() { + that.$message.hideLoading() + } + }); + }, + PickArea(item, e) { + console.log('PickArea', item, e) + if (e.detail.value) { + this.submitForm.province = '' + this.submitForm.city = '' + this.submitForm.region = '' + if (e.detail.value.length == 2) { + if (!!e.detail.value[0]) + this.submitForm.province = e.detail.value[0].value + if (!!e.detail.value[0]) + this.submitForm.city = e.detail.value[0].value + if (!!e.detail.value[1]) + this.submitForm.region = e.detail.value[1].value + } else if (e.detail.value.length <= 3) { + if (!!e.detail.value[0]) + this.submitForm.province = e.detail.value[0].value + if (!!e.detail.value[1]) + this.submitForm.city = e.detail.value[1].value + if (!!e.detail.value[2]) + this.submitForm.region = e.detail.value[2].value + } else { + //说明有重复的 + var plusnum = e.detail.value.length - 3 + if (!!e.detail.value[plusnum + 0]) + this.submitForm.province = e.detail.value[plusnum + 0].value + if (!!e.detail.value[plusnum + 1]) + this.submitForm.city = e.detail.value[plusnum + 1].value + if (!!e.detail.value[plusnum + 2]) + this.submitForm.region = e.detail.value[plusnum + 2].value + } + + this.$forceUpdate() + console.log('submit forn', this.submitForm) + } + }, + async init_area() { + // debugger; + // if (this.regionDataPlus && this.regionDataPlus.length > 0) { + + // } else { + // var a = this.$storage.getItem('cache_area') + var a = false + if (a) { + this.regionDataPlus = JSON.parse(a) || [] + } else { + await this.$http.request('get', '/api/pub/china/area/json/refresh') + const res = await this.$http.request('get', '/api/pub/china/area/json') + // console.log('area', JSON.parse(res.data)) + this.regionDataPlus = res.data && JSON.parse(res.data.replaceAll('code', 'value').replaceAll( + 'name', + 'text')) || [] + this.$storage.setItem('cache_area', JSON.stringify(this.regionDataPlus)) + } + // } }, - data() { - return { - source: '', - submitForm: { + chooseLocation() { + //前往接口挑选位置 + const qqmapsdk = new qqmapwx({ + // 使用你在腾讯地图应用生成的key + key: lockey + }); + + uni.getLocation({ + type: 'wgs84', + success(res) { + //得到经纬度 + console.log(res); + qqmapsdk.reverseGeocoder({ + location: { + latitude: res.latitude, + longitude: res.longitude + }, + //成功后的回调 + success: (r) => { + // console.log('地址信息', r.result.address_component); + // result: {location: {lat: 31.26249, lng: 120.63212}, address: "江苏省苏州市吴中区太湖东路288号",…} + // ad_info: {nation_code: "156", adcode: "320506", phone_area_code: "0512", city_code: "156320500",…} + // address: "江苏省苏州市吴中区太湖东路288号" + // address_component: {nation: "中国", province: "江苏省", city: "苏州市", district: "吴中区", street: "太湖东路",…} + // address_reference: {,…} + // formatted_addresses: {recommend: "长桥苏州市吴中区人民政府(太湖东路北)", rough: "长桥苏州市吴中区人民政府(太湖东路北)"} + // location: {lat: 31.26249, lng: 120.63212} + // status: 0 + tmp.formcodes['LOC_ONE'][tmp.tmp_picker_lock_index].longitude = r + .result.location.lng + tmp.formcodes['LOC_ONE'][tmp.tmp_picker_lock_index].latitude = r + .result.location.lat + tmp.formcodes['LOC_ONE'][tmp.tmp_picker_lock_index].loc_desc = r + .result.address + tmp.formcodes['LOC_ONE'][tmp.tmp_picker_lock_index]._show = false + tmp.$forceUpdate() + tmp.tmp_picker_lock_index = -1 + + }, + fail: function (res) { + console.log(res); + tmp.tmp_picker_lock_index = -1 + }, + }); + } + }); + }, + async changeDefaultAddress(item, index) { + if (item.isDefault) { + return + } + this.$nextTick(() => { + + this.$message.confirm('确定设置此地址为默认地址吗').then(async res => { + this.$message.showLoading() + var { + code + } = await this.$http.request('post', '/api/address/set/default/' + item + .id, { + data: { + id: item.id + }, + params: { + id: item.id + } + }) + this.$message.hideLoading() + if (code === 0) { + for (var dto of this.list) { + dto.isDefault = false + } + this.$message.showToast('设置成功') + item.isDefault = true + this.$store.commit('setDefaultAddress', { + ...item + }) + + + } + }, err => { + this.$nextTick(() => { + this.list[index].isDefault = false + this.$forceUpdate() + console.log('err', err, this.list[index]) + }) + + + }) + }) + }, + async selectAddress(item) { + //携带,然后返回 + + if (this.source === 'home') { + this.$store.commit('setAddressDesc', '') + this.$store.commit('setDefaultAddress', { + ...item + }) + } else { + await this.$message.confirm('确定选择此地址作为收货地址吗') + this.$store.commit('setDefaultAddress', { + ...item + }) + + } + this.backpage() + }, + async deleteAddress(item) { + await this.$message.confirm('确定删除此地址吗') + this.$message.showLoading() + var { + code + } = await this.$http.request('get', '/api/address/delete?id=' + item.id, {}) + this.$message.hideLoading() + if (code === 0) { + this.$message.showToast('删除成功') + if (this.address.id === item.id) { + //要清空地址了 + this.$store.commit('setDefaultAddress', {}) + } + setTimeout(() => { + this.page.current = 1 + this.getList() + }, 500) + } + }, + async openAddressForm() { + this.init_area() + if (this.submitForm.id) { + this.$message.showLoading() + var { + data + } = await this.$http.request('get', '/api/address/list/detail?id=' + this.submitForm.id, {}) + + + if (data) { + this.submitForm = { + ...this.submitForm, + ...data + } + } + this.$message.hideLoading() + } else { + this.submitForm = { + // name: this.currentInfo && this.currentInfo.nickName || '', + // tel: this.currentInfo && this.currentInfo.tel || '', name: '', tel: '', address: '', @@ -249,554 +615,191 @@ province: '', city: '', region: '', - latitude: 0, - longitude: 0, - }, - regionDataPlus: [], - list: [], - search_flow: '', - }; + } + } + + this.$refs.popup_form.open() + }, - methods: { - selectWxAddress(source) { - let that = this + closeAddressForm() { + this.$refs.popup_form.close() - { - //表单选择了地址 - wx.chooseLocation({ - success: location => { - console.log('success loc', location,source) - // address: "江苏省苏州市吴中区太湖东路288号" - // errMsg: "chooseLocation:ok" - // latitude: 31.26249 - // longitude: 120.63212 - // name: "苏州市吴中区人民政府" - if (source === 'form') { - // (location.address || '') + - that.submitForm.address = (location.name || location.address || '') - that.submitForm.latitude = location.latitude || 0 - that.submitForm.longitude = location.longitude || 0 - } else if (source === 'input') { - // (location.address || '') + - // that.search_flow = (location.name || '') - that.$store.commit('setAddressDesc', (location.name || location.address || '')) - that.$forceUpdate() - that.backpage() - } + }, + async saveOrUpdateAddress() { + if (!this.checkFormValues(this.submitForm, ['tel', 'name', 'address'])) { + this.$message.showToast('字段未填写完整') + return + } + if (!this.submitForm['province'] || !this.submitForm['province'] || !this.submitForm['province']) { + this.$message.showToast('省市区未选择完整') + return + } - // if (!that.submitForm.province && location.provinceName) { - // that.submitForm.province = location.provinceName - // if (!that.submitForm.city && location.cityName) { - // that.submitForm.city = location.cityName - // } - // if (!that.submitForm.region && location.countyName) { - // that.submitForm.region = location.countyName - // } - // if (!that.submitForm.region && location.cityName) { - // that.submitForm.region = location.cityName - // } - // } - // success loc - // {errMsg: "chooseAddress:ok", userName: "张三", nationalCode: "510000", telNumber: "020-81167888", postalCode: "510000", …} - // cityName: "广州市" - // countyName: "海珠区" - // detailInfo: "新港中路397号" - // errMsg: "chooseAddress:ok" - // nationalCode: "510000" - // postalCode: "510000" - // provinceName: "广东省" - // telNumber: "020-81167888" - // userName: "张三" - }, - fail: e => { - console.log('fail loc', e) - // that.$message.showToast('定位失败') - } - }) - // uni.getLocation({ - // type: 'wgs84', - // success(res) { - // //得到经纬度 - // console.log(res); - // const referer = '花满芫'; //调用插件的app的名称 - // const location = JSON.stringify({ - // latitude: res.latitude, - // longitude: res.longitude - // }); - // const category = '生活服务,娱乐休闲'; - // // &category=${category} - - // wx.navigateTo({ - // url: `plugin://chooseLocation/index?key=${lockey}&referer=${referer}&location=${location}` - // }); - - // } - // }) - } - }, - validatePhoneNumber() { - - // 手机号码正则表达式,可以根据需要调整 - const phoneRegex = /^[1][3-9][0-9]{9}$/; - if (!phoneRegex.test(this.submitForm['tel'])) { - this.$message.showToast('请填写正确手机号码') - } - - }, - - addAddress() { - delete this.submitForm.id - this.submitForm['name'] = '' - this.submitForm['tel'] = '' - this.submitForm['address'] = '' - this.submitForm['province'] = '' - this.submitForm['city'] = '' - this.submitForm['region'] = '' - this.submitForm['isDefault'] = false - this.openAddressForm() - }, - changeCurrentAddress() { - // if(!this.addressDesc){ - - // } - let that = this - this.$message.showLoading() - uni.getLocation({ - type: 'gcj02', - geocode: true, - success: async (res) => { - // this.location = { - // latitude: res.latitude, - // longitude: res.longitude, - // speed: res.speed, - // accuracy: res.accuracy, - // address: res.address, - // }; - const { - code,data - } = await that.$http.request('get', '/api/pub/customer/home/address/parse', { - data: {}, - params: { - // https://apis.map.qq.com/ws/geocoder/v1/?location=39.984154,116.307490&key=[你的key]&get_poi=1 - location:`${res.latitude},${res.longitude}` - } - }) - console.log('定位成功:', data); - if(data){ - var address = data.result&&data.result.address || '' - - that.$store.commit('setAddressDesc', (address || '')) - that.$forceUpdate() - - that.backpage() - - } - - - }, - fail: (err) => { - that.error = err; - console.error('定位失败:', err); - }, - complete() { - that.$message.hideLoading() - } - }); - }, - PickArea(item, e) { - console.log('PickArea', item, e) - if (e.detail.value) { - this.submitForm.province = '' - this.submitForm.city = '' - this.submitForm.region = '' - if (e.detail.value.length == 2) { - if (!!e.detail.value[0]) - this.submitForm.province = e.detail.value[0].value - if (!!e.detail.value[0]) - this.submitForm.city = e.detail.value[0].value - if (!!e.detail.value[1]) - this.submitForm.region = e.detail.value[1].value - } else if (e.detail.value.length <= 3) { - if (!!e.detail.value[0]) - this.submitForm.province = e.detail.value[0].value - if (!!e.detail.value[1]) - this.submitForm.city = e.detail.value[1].value - if (!!e.detail.value[2]) - this.submitForm.region = e.detail.value[2].value - } else { - //说明有重复的 - var plusnum = e.detail.value.length - 3 - if (!!e.detail.value[plusnum + 0]) - this.submitForm.province = e.detail.value[plusnum + 0].value - if (!!e.detail.value[plusnum + 1]) - this.submitForm.city = e.detail.value[plusnum + 1].value - if (!!e.detail.value[plusnum + 2]) - this.submitForm.region = e.detail.value[plusnum + 2].value - } - - this.$forceUpdate() - console.log('submit forn', this.submitForm) - } - }, - async init_area() { - // debugger; - // if (this.regionDataPlus && this.regionDataPlus.length > 0) { - - // } else { - // var a = this.$storage.getItem('cache_area') - var a =false - if (a) { - this.regionDataPlus = JSON.parse(a) || [] - } else { - await this.$http.request('get', '/api/pub/china/area/json/refresh') - const res = await this.$http.request('get', '/api/pub/china/area/json') - // console.log('area', JSON.parse(res.data)) - this.regionDataPlus = res.data && JSON.parse(res.data.replaceAll('code', 'value').replaceAll( - 'name', - 'text')) || [] - this.$storage.setItem('cache_area', JSON.stringify(this.regionDataPlus)) - } - // } - - }, - chooseLocation() { - //前往接口挑选位置 - const qqmapsdk = new qqmapwx({ - // 使用你在腾讯地图应用生成的key - key: lockey - }); - - uni.getLocation({ - type: 'wgs84', - success(res) { - //得到经纬度 - console.log(res); - qqmapsdk.reverseGeocoder({ - location: { - latitude: res.latitude, - longitude: res.longitude - }, - //成功后的回调 - success: (r) => { - // console.log('地址信息', r.result.address_component); - // result: {location: {lat: 31.26249, lng: 120.63212}, address: "江苏省苏州市吴中区太湖东路288号",…} - // ad_info: {nation_code: "156", adcode: "320506", phone_area_code: "0512", city_code: "156320500",…} - // address: "江苏省苏州市吴中区太湖东路288号" - // address_component: {nation: "中国", province: "江苏省", city: "苏州市", district: "吴中区", street: "太湖东路",…} - // address_reference: {,…} - // formatted_addresses: {recommend: "长桥苏州市吴中区人民政府(太湖东路北)", rough: "长桥苏州市吴中区人民政府(太湖东路北)"} - // location: {lat: 31.26249, lng: 120.63212} - // status: 0 - tmp.formcodes['LOC_ONE'][tmp.tmp_picker_lock_index].longitude = r - .result.location.lng - tmp.formcodes['LOC_ONE'][tmp.tmp_picker_lock_index].latitude = r - .result.location.lat - tmp.formcodes['LOC_ONE'][tmp.tmp_picker_lock_index].loc_desc = r - .result.address - tmp.formcodes['LOC_ONE'][tmp.tmp_picker_lock_index]._show = false - tmp.$forceUpdate() - tmp.tmp_picker_lock_index = -1 - - }, - fail: function(res) { - console.log(res); - tmp.tmp_picker_lock_index = -1 - }, - }); - } - }); - }, - async changeDefaultAddress(item, index) { - if (item.isDefault) { - return - } - this.$nextTick(() => { - - this.$message.confirm('确定设置此地址为默认地址吗').then(async res => { - this.$message.showLoading() - var { - code - } = await this.$http.request('post', '/api/address/set/default/' + item - .id, { - data: { - id: item.id - }, - params: { - id: item.id - } - }) - this.$message.hideLoading() - if (code === 0) { - for (var dto of this.list) { - dto.isDefault = false - } - this.$message.showToast('设置成功') - item.isDefault = true - this.$store.commit('setDefaultAddress', { - ...item - }) - - - } - }, err => { - this.$nextTick(() => { - this.list[index].isDefault = false - this.$forceUpdate() - console.log('err', err, this.list[index]) - }) + // 手机号码正则表达式,可以根据需要调整 + const phoneRegex = /^[1][3-9][0-9]{9}$/; + if (!phoneRegex.test(this.submitForm['tel'])) { + this.$message.showToast('请填写正确手机号码') + return + } - }) - }) - }, - async selectAddress(item) { - //携带,然后返回 - - if(this.source==='home'){ - this.$store.commit('setAddressDesc', '') - this.$store.commit('setDefaultAddress', { - ...item - }) - }else{ - await this.$message.confirm('确定选择此地址作为收货地址吗') - this.$store.commit('setDefaultAddress', { - ...item - }) - - } - this.backpage() - }, - async deleteAddress(item) { - await this.$message.confirm('确定删除此地址吗') - this.$message.showLoading() - var { - code - } = await this.$http.request('get', '/api/address/delete?id=' + item.id, {}) - this.$message.hideLoading() - if (code === 0) { - this.$message.showToast('删除成功') - if (this.address.id === item.id) { - //要清空地址了 - this.$store.commit('setDefaultAddress', {}) - } - setTimeout(() => { - this.page.current = 1 - this.getList() - }, 500) - } - }, - async openAddressForm() { - this.init_area() - if (this.submitForm.id) { - this.$message.showLoading() - var { - data - } = await this.$http.request('get', '/api/address/list/detail?id=' + this.submitForm.id, {}) - - if (data) { - this.submitForm = { - ...this.submitForm, - ...data - } - } - this.$message.hideLoading() - } else { - this.submitForm = { - // name: this.currentInfo && this.currentInfo.nickName || '', - // tel: this.currentInfo && this.currentInfo.tel || '', - name: '', - tel: '', - address: '', - isDefault: false, - province: '', - city: '', - region: '', - } - } - - this.$refs.popup_form.open() - - }, - closeAddressForm() { + this.$message.showLoading() + const { + code + } = await this.$http.request('post', '/api/address/' + (this.submitForm.id ? 'update' : + 'add'), { + data: this.submitForm + }) + this.$message.hideLoading() + if (code === 0) { this.$refs.popup_form.close() + this.$message.showToast(this.submitForm.id ? '修改成功' : '新增成功') - }, - async saveOrUpdateAddress() { - if (!this.checkFormValues(this.submitForm, ['tel', 'name', 'address'])) { - this.$message.showToast('字段未填写完整') - return + let tmp = this + setTimeout(() => { + tmp.page.current = 1 + tmp.refreshList() + }, 300) + //如果当前选择的地址是这个,需要更新一下数据 + if (this.address.id && this.submitForm.id === this.address.id) { + this.$store.commit('setDefaultAddress', { + ...this.submitForm + }) } - if (!this.submitForm['province'] || !this.submitForm['province'] || !this.submitForm['province']) { - this.$message.showToast('省市区未选择完整') - return - } + } + }, - // 手机号码正则表达式,可以根据需要调整 - const phoneRegex = /^[1][3-9][0-9]{9}$/; - if (!phoneRegex.test(this.submitForm['tel'])) { - this.$message.showToast('请填写正确手机号码') - return - } - - - - this.$message.showLoading() - const { - code - } = await this.$http.request('post', '/api/address/' + (this.submitForm.id ? 'update' : - 'add'), { - data: this.submitForm - }) - this.$message.hideLoading() - if (code === 0) { - this.$refs.popup_form.close() - this.$message.showToast(this.submitForm.id ? '修改成功' : '新增成功') - - let tmp = this - setTimeout(() => { - tmp.page.current = 1 - tmp.refreshList() - }, 300) - //如果当前选择的地址是这个,需要更新一下数据 - if (this.address.id && this.submitForm.id === this.address.id) { - this.$store.commit('setDefaultAddress', { - ...this.submitForm - }) - } - } - }, - - } } +} </script> <style lang="scss" scoped> - .container-address { - .current-address { - padding: 20rpx; - background-color: #FFFFFF; - border-radius: 16rpx; - margin-top: 16rpx; - margin-bottom: 20rpx; - } +.container-address { + .current-address { + padding: 20rpx; + background-color: #FFFFFF; + border-radius: 16rpx; + margin-top: 16rpx; + margin-bottom: 20rpx; + } - .popup-address-form { - background: #FFFFFF; - border-radius: 16rpx; - // width: 690rpx; - height: 882rpx; - margin-top: 120rpx; - margin-left: 30rpx; - margin-right: 30rpx; - padding: 24rpx 36rpx; + .popup-address-form { + background: #FFFFFF; + border-radius: 16rpx; + // width: 690rpx; + height: 882rpx; + margin-top: 120rpx; + margin-left: 30rpx; + margin-right: 30rpx; + padding: 24rpx 36rpx; - .submit { - margin-top: 30rpx; + .submit { + margin-top: 30rpx; - .form-input { - height: 36rpx; - line-height: 36rpx; - } - } - } - - .location-each { - background: #FFFFFF; - border-radius: 16rpx; - margin-bottom: 24rpx; - padding: 36rpx; - - .name { - font-size: 32rpx; - color: #000000; - line-height: 44rpx; - text-align: left; - font-style: normal; - } - - .tel { - font-size: 28rpx; - color: #666666; - line-height: 40rpx; - text-align: left; - font-style: normal; - padding-top: 4rpx; - margin-left: 20rpx; - } - - .address { - font-size: 24rpx; - color: #000000; - line-height: 34rpx; - text-align: left; - font-style: normal; - } - - .desc { - font-size: 24rpx; - color: #666666; - line-height: 34rpx; - text-align: left; - font-style: normal; - } - - .del { - // vertical-align: baseline; - margin-left: auto; - margin-right: 6rpx; - margin-top: 4rpx; - } - - .container-info { - max-width: 540rpx; - } - - .h-line { - width: 2rpx; - height: 46rpx; - background-color: #EEEEEE; - margin-left: 28rpx; - margin-right: 24rpx; - } - - .v-line { - width: 638rpx; - height: 2rpx; - // border: 2rpx solid #EEEEEE; - background-color: #EEEEEE; - margin-top: 24rpx; - margin-bottom: 24rpx; - } - - .edit { - // min-width: 80rpx; - width: fit-content; - margin-left: auto; - margin-right: 0rpx; - display: flex; - position: relative; - - .icon { - // margin: 0 auto; - // mar - margin-left: auto; - margin-right: auto; - margin-top: 20rpx; - display: block; - - } - } - - .edit::before { - content: " "; - width: 2rpx; - height: 46rpx; - background-color: #EEEEEE; - position: absolute; - left: -24rpx; - top: 20rpx; + .form-input { + height: 36rpx; + line-height: 36rpx; } } } + + .location-each { + background: #FFFFFF; + border-radius: 16rpx; + margin-bottom: 24rpx; + padding: 36rpx; + + .name { + font-size: 32rpx; + color: #000000; + line-height: 44rpx; + text-align: left; + font-style: normal; + } + + .tel { + font-size: 28rpx; + color: #666666; + line-height: 40rpx; + text-align: left; + font-style: normal; + padding-top: 4rpx; + margin-left: 20rpx; + } + + .address { + font-size: 24rpx; + color: #000000; + line-height: 34rpx; + text-align: left; + font-style: normal; + } + + .desc { + font-size: 24rpx; + color: #666666; + line-height: 34rpx; + text-align: left; + font-style: normal; + } + + .del { + // vertical-align: baseline; + margin-left: auto; + margin-right: 6rpx; + margin-top: 4rpx; + } + + .container-info { + max-width: 540rpx; + } + + .h-line { + width: 2rpx; + height: 46rpx; + background-color: #EEEEEE; + margin-left: 28rpx; + margin-right: 24rpx; + } + + .v-line { + width: 638rpx; + height: 2rpx; + // border: 2rpx solid #EEEEEE; + background-color: #EEEEEE; + margin-top: 24rpx; + margin-bottom: 24rpx; + } + + .edit { + // min-width: 80rpx; + width: fit-content; + margin-left: auto; + margin-right: 0rpx; + display: flex; + position: relative; + + .icon { + // margin: 0 auto; + // mar + margin-left: auto; + margin-right: auto; + margin-top: 20rpx; + display: block; + + } + } + + .edit::before { + content: " "; + width: 2rpx; + height: 46rpx; + background-color: #EEEEEE; + position: absolute; + left: -24rpx; + top: 20rpx; + } + } +} </style> \ No newline at end of file diff --git a/pages/user/address/gaode-address.vue b/pages/user/address/gaode-address.vue new file mode 100644 index 0000000..d748557 --- /dev/null +++ b/pages/user/address/gaode-address.vue @@ -0,0 +1,359 @@ +<template> + <view class="content"> + <!-- <view class="btns"> + <view @click="back">取 消</view> + <view @click="getCurrentLocation">获取当前地址</view> + </view> --> + <view class="inputCon"> + <view class="searchView"> + <text class="iconfont icon-sousuo" @click="searchFn"></text> + <input type="text" placeholder="搜索地点" v-model="searchWords" confirm-type="search" @confirm="searchFn" /> + <text @click="cancel">取消</text> + </view> + </view> + <!-- 地图部分 --> + <view class="content-map"> + <map style="width: 100%;height: 100%;" v-if="mapFlafg" :latitude="latitude" :longitude="longitude" :markers="markers" + @tap="tap" :scale="16" :title="title"/> + </view> + <!-- <view id="container"></view> --> + <!-- 搜索框 --> + + <!-- 地点列表部分 --> + <view class="list"> + <view class="item" v-for="(add,index) in dataTips" :key="add.id" @click="select(add,index)" + :class="selectIndex==index?'active':''"> + <view class="name">{{add.name}}</view> + <view class="address">{{add.district || ''}}{{add.address || ''}}</view> + </view> + </view> + </view> +</template> + +<script> + // 引入高德地图api提供的微信小程序的接口 + import amapFile from '@/map/amap-wx.130.js'; + // 创建地图 + var myAmapFun = new amapFile.AMapWX({ + key: '75d7da3feb329cd5ae997975b953abb6' + }); //key值要申请为 去高德地图申请微信小程序的key + // var myAmapFun = new amapFile.AMapWX({key: ''}); //key我的 + export default { + data() { + return { + mapFlafg:false, + selectIndex: undefined, + selectAddr: {}, + searchWords: "", + id: 1, // 使用 marker点击事件 需要填写id + title: 'map', + latitude: 39.91667, // 纬度 + longitude: 116.41667, // 经度 + + markers: [{ + latitude: 39.91667, // 纬度 + longitude: 116.41667, // 经度 + width: 30, + height: 30, + iconPath: '' + // iconPath: '../../static/ditu.png' + }], + dataTips: [] + } + }, + onLoad() { + var self = this; + uni.getLocation({ + type: 'gcj02', + success: function(res) { + console.log(res, '当前地址定位'); + if (res.errMsg == "getLocation:ok") { + console.log(self.mark, 'onload里面看看'); + self.longitude = res.longitude; + self.latitude = res.latitude; + self.$set(self.markers[0],"longitude",res.longitude); + self.$set(self.markers[0],"latitude",res.latitude); + self.mapFlafg=true; + console.log(self.markers,"markers") + // self.markers[0].longitude = res.longitude; + // self.markers[0].latitude = res.latitude; + } + }, + complete: () => { + // 获取当前位置的地点列表 + myAmapFun.getPoiAround({ + location: self.longitude + ',' + self.latitude, + success: (data) => { + console.log("获取当前的列表", data); + this.dataTips = data.poisData; + }, + fail: (info) => { + console.log(info, '点击地图错误信息1') + } + }) + } + }); + + }, + methods: { + cancel() { + if (this.searchWords) { + this.searchWords = ""; + myAmapFun.getPoiAround({ + location: this.markers[0].longitude + ',' + this.markers[0].latitude, + success: (data) => { + console.log("获取当前的列表", data); + this.$nextTick(() => { + this.dataTips = data.poisData; + }) + }, + fail: (info) => { + console.log(info) + } + }) + } + }, + reserGeo() { + myAmapFun.getRegeo({ + success: (data) => { + console.log("getRegeo", data); + }, + fail: (info) => { + console.log(info) + } + }) + }, + // 根据地址列表中选择某一个地点 + select(add, index) { + if (!add) { + return; + } + this.selectIndex = index; + var location = add.location.split(","); + console.log(location, add, '列表地点的经纬度'); + this.selectAddr = { + address: add.pname ? (add.pname + add.cityname + add.adname) : (add.district + add + .address), + detailAddress: add.address, + latitude: location[1], + longitude: location[0] + }; + this.markers[0].latitude = +location[1]; + this.markers[0].longitude = +location[0]; + uni.setStorageSync("address", this.selectAddr.address); + // 选择地点后,将选取的地点传递到前一个页面中 + // var pages = getCurrentPages(); // 获取所有的页面栈 + // var prevPage = pages[pages.length - 2]; // 找到上一个页面,注意是页面,如果是页面中有组件,则需要通过页面接受到数据后,再次往组件中传递 + // prevPage.$vm.userAddress.locationAddress = this.selectAddr.address; //在上一个页面中就可以用userAddress进行接收 + // prevPage.$vm.userAddress.detail = this.selectAddr.detailAddress; //在上一个页面中就可以用userAddress进行接收 + // prevPage.$vm.selectAddr = this.selectAddr; + // prevPage.$vm.address = { + // province: add.pname, + // city: add.cityname, + // district: add.adname, + // } + uni.navigateBack({ + delta: 1 + }); + + }, + // 在地图上点击进行选点,这个选点在地图缩放比例较大时无效,因为精读的问题。 + tap(e) { + console.log(e, '点击了地图'); + var location = e.detail.longitude + ',' + e.detail.latitude + myAmapFun.getRegeo({ + location: location, + success: (data) => { + console.log("获取指定定位信息", data); + this.selectAddr = { + address: data[0].regeocodeData.formatted_address, + latitude: e.detail.latitude, + longitude: e.detail.longitude + }; + this.markers[0].latitude = data[0].latitude; + this.markers[0].longitude = data[0].longitude; + myAmapFun.getPoiAround({ + location: data[0].longitude + ',' + data[0].latitude, + success: (data) => { + console.log("获取当前的列表", data); + this.dataTips = data.poisData; + }, + fail: (info) => { + console.log(info, '点击地图错误信息1') + } + }) + }, + fail: (info) => { + console.log(info, '点击地图错误信息2'); + } + }) + }, + // 根据内容进行检索 + searchFn() { + console.log("根据地址检索", this.searchWords); + myAmapFun.getInputtips({ + keywords: this.searchWords, + location: '', + success: (data) => { + console.log(111, data); + if (data && data.tips) { + this.dataTips = data.tips; + } + }, + fail: data => { + console.log(222, data); + } + }) + }, + // getCurrentLocation() { + // let that = this + // uni.getLocation({ + // type: 'wgs84', + // success: function(res) { + // console.log(res, '当前地址定位'); + // if (res.errMsg == "getLocation:ok") { + // console.log(that.mark, 'onload里面看看'); + // this.longitude = res.longitude; + // this.latitude = res.latitude; + // this.markers[0].longitude = res.longitude; + // this.markers[0].latitude = res.latitude; + // } + // } + // }); + // }, + } + } +</script> + +<style lang="scss" scoped> + .btns { + + position: fixed; + top: 0; + left: 0; + height: 260upx; + width: 100%; + background: linear-gradient(to bottom, rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0)); + display: flex; + align-items: center; + justify-content: space-between; + z-index: 10 !important; + + view { + border-radius: 10%; + margin: 100upx 24upx 0; + font-size: 30upx; + + &:first-child { + color: #fff; + } + + &:last-child { + width: 100upx; + height: 60upx; + line-height: 60upx; + text-align: center; + border-radius: 10upx; + background: #20c295; + color: #fff; + } + } + } + + .content { + // position: relative; + height: 100vh; + display: flex; + flex-direction: column; + + .content-map { + width: 100%; + height: 50vh; + } + + .list { + // flex: 0 1 calc(50vh - 10upx); + border-radius: 30rpx; + background-color: #fff; + // position: absolute; + // bottom:-660rpx; + height: calc(50vh - 10upx); + overflow-y: auto; + width: 100%; + margin: 0upx auto 0; + padding-bottom: 20upx; + + .item { + border-bottom: 2upx solid #f3f3f3; + padding: 0 30rpx; + + &:last-child { + border: none; + } + + .address { + font-size: 22upx; + color: #666; + margin: 10upx 0; + } + + .name { + font-size: 30upx; + color: #333; + margin-top: 10upx; + } + + &.active { + .name { + font-weight: bold; + color: #E13500; + } + + .address { + color: #E13500; + } + } + } + } + + .inputCon { + flex: 0 1 108rpx; + width: 100%; + background: #fff; + // top: -60upx; + // position: relative; + z-index: 20; + // height: 100upx; + display: flex; + align-items: center; + justify-content: center; + + .searchView { + width: 702upx; + height: 60upx; + display: flex; + align-items: center; + line-height: 60upx; + border-radius: 40upx; + padding: 0 30upx; + box-sizing: border-box; + background: #f3f3f3; + font-size: 26upx; + + .iconfont { + color: #666; + margin-right: 20upx; + } + + input { + flex: 1; + } + + view { + flex-shrink: 0; + } + } + } + + } +</style> \ No newline at end of file -- Gitblit v1.9.3