import myAmapFun from "@/utils/initmap.js" var __CFG = null; //系统参数 __CFG = __CFG || { 'lat': '', 'lng': '', 'address': '', 'city':'', "UxLocation": { "lng": "", "lat": "", "address": "", 'city':'', 'temperature':'', 'weather':'', 'icon':'' }, iconWeatherMap:[{tit:'风',val:'weaiona',children:['有风', '平静', '微风', '和风', '清风', '强风/劲风', '疾风', '大风', '烈风', '风暴', '狂爆风', '飓风', '热带风暴', '龙卷风']}, {tit:'多云',val:'weaionb',children:['少云','多云']}, {tit:'晴间多云',val:'weaionc',children:['晴间多云', ]}, {tit:'雪',val:'weaiond',children:['雪', '阵雪', '小雪', '中雪', '大雪', '暴雪', '小雪-中雪', '中雪-大雪', '大雪-暴雪', '冷']}, {tit:'雾',val:'weaione',children:['浮尘', '扬沙', '沙尘暴', '强沙尘暴', '雾', '浓雾', '强浓雾', '轻雾', '大雾', '特强浓雾']}, {tit:'晴',val:'weaionf',children:['晴', '热']}, {tit:'雨夹雪',val:'weaiong',children:['雨雪天气', '雨夹雪', '阵雨夹雪']}, {tit:'雨',val:'weaionh',children:['阵雨', '雷阵雨', '雷阵雨并伴有冰雹', '小雨', '中雨', '大雨', '暴雨', '大暴雨', '特大暴雨', '强阵雨', '强雷阵雨', '极端降雨', '毛毛雨/细雨', '雨', '小雨-中雨', '中雨-大雨', '大雨-暴雨', '暴雨-大暴雨', '大暴雨-特大暴雨', '冻雨']}, {tit:'阴',val:'weaioni',children:['阴','未知']}, {tit:'霾',val:'weaionj',children:['霾', '中度霾', '重度霾', '严重霾',]}, ], }; function setUxLocation(UxLocation){ UxLocation = UxLocation || {}; __CFG.lng = UxLocation.lng || ''; __CFG.lat = UxLocation.lat || ''; __CFG.address = UxLocation.address || UxLocation.addr || ''; __CFG.city = UxLocation.city || UxLocation.city || ''; __CFG.UxLocation = UxLocation; } //判断是否微信 function checkIsWeixin() { if (/(micromessenger)/.test(navigator.userAgent.toLowerCase())) { return true; } else { return false; } }; //设置浏览器cookie function set_cookie(key, value, expire, path){ var keys = __CFG.C_PREFIX + key; path = path || '/'; var a = keys + "=" + value; if(typeof(expire) != 'undefined'){ var date = new Date(); expire = parseInt(expire,10); date.setTime(date.getTime() + expire*1000); a += "; expires="+date.toGMTString(); } a += ";path="+path; if(__CFG.C_DOMAIN){ a += ";domain="+__CFG.C_DOMAIN; } document.cookie = a; }; //删除浏览器cookie function remove_cookie(key){ if (!key) { return false; } else { var keys = __CFG.C_PREFIX + key; document.cookie = keys+"=;expires="+(new Date(0)).toGMTString(); } }; //获取浏览器cookie function get_cookie(key) { if (!key) { return false; } else { var keys = __CFG.C_PREFIX + key; var reg = new RegExp("(^| )" + keys + "=([^;]*)(;|\x24)"); var result = reg.exec(document.cookie); if (result) { return result[2] || ''; } return ''; } }; function getLocations(callback) { var uxlocation = {"lng": "", "lat": "", "address": ""}; callback = typeof(callback) == 'function' ? callback : function(res) {}; if (__CFG.lat == '' || __CFG.lng == '') { // #ifndef H5 uni.showLoading({ title: '获取位置信息中' }) uni.getLocation({ type: 'gcj02', geocode: 'true', success: function(res) { uxlocation.lat = res.latitude; uxlocation.lng = res.longitude; myAmapFun.getRegeo({ success: function(data) { // #ifdef APP-PLUS /* var latlng = { "lat": res.latitude, "lng": res.longitude } plugins.appLnglat(latlng); */ // #endif console.log('getRegeo', data); uxlocation.address = data[0].name; setUxLocation(uxlocation); uni.hideLoading(); //成功回调 }, fail: function(info) { //失败回调 // console.log(info) uni.navigateTo({ url: '/pages/addr/selectReceive' }) } }) setUxLocation(uxlocation); callback(); }, fail: function(error) { if (count <= 1) { uni.showToast({ icon: 'none', title: '定位失败' }) } // #ifdef APP-PLUS // plus.nativeUI.alert(JSON.stringify(error)) // #endif //callback(); uni.navigateTo({ url: '/pages/addr/selectReceive' }) }, complete: function(rs) { console.log('complete:'+JSON.stringify(rs)) } }) // #endif // #ifdef H5 var selat = '', selng = '', seaddress = ''; if(sessionStorage.getItem('UxLocation')){ var uxl = JSON.parse(sessionStorage.getItem('UxLocation')); selat = uxl.lat || ''; selng = uxl.lng || ''; seaddress = uxl.addr || ''; } if (selat && selng){ uxlocation.lng = selng; uxlocation.lat = selat; uxlocation.address = seaddress; setUxLocation(uxlocation); callback(); }else{ if(checkIsWeixin()){ getLocal(function(){ callback(); }); }else{ setTimeout(function (){ AMap.plugin('AMap.Geolocation', function() { var geolocation = new AMap.Geolocation({ enableHighAccuracy: false, // 是否使用高精度定位,默认:true timeout: 10000, // 设置定位超时时间,默认:无穷大 // showMarker: true, //定位成功后在定位到的位置显示点标记,默认:true // showCircle: true, //定位成功后用圆圈表示定位精度范围,默认:true // panToLocation: true, //定位成功后将定位到的位置作为地图中心点,默认:true // zoomToAccuracy:true, //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false extensions:'all' // 返回周边POI、道路交叉口等信息 }); geolocation.getCurrentPosition() AMap.event.addListener(geolocation, 'complete', onComplete) AMap.event.addListener(geolocation, 'error', onError) function onComplete (data) { console.log('onComplete:',data); var uaddress = ''; if(data.pois && data.pois.length > 0){ uaddress = data.pois[0].name; }else if(data.formattedAddress){ uaddress = data.formattedAddress; }else if( data.addressComponent){ uaddress = data.addressComponent.city + data.addressComponent.district } uxlocation.lng = data.position.lng || ''; uxlocation.lat = data.position.lat || ''; uxlocation.address = uaddress; setUxLocation(uxlocation); callback(); }; function onError (data) { // 定位出错 uni.navigateTo({ url: '/pages/addr/selectReceive' }) }; }) }, 500); } } // #endif } else { callback(); } }; function getGeocoder(lng, lat, callback) { callback = typeof(callback) == 'function' ? callback : function(res) {}; AMap.plugin('AMap.Geocoder', function() { var geocoder = new AMap.Geocoder({ // city 指定进行编码查询的城市,支持传入城市名、adcode 和 citycode city: '全国', extensions: 'all' }) var lnglat = [lng, lat]; geocoder.getAddress(lnglat, function(status, result) { console.log(status,result) if (status === 'complete' && result.info === 'OK') { // result为对应的地理位置详细信息 let items = result.regeocode.pois; if(items.length > 0){ var pos = {}; for (let i in items) { var obj = { "name": items[i].name, "addr": items[i].address, "lng": items[i].location.lng, "lat": items[i].location.lat }; if(i == '0'){ pos = obj; } } callback(pos); } }else{ } }) }) }; //初始化sdk配置 function initJssdk(callback ,url){ callback = typeof(callback) == 'function' ? callback : function(res) {}; //服务端进行签名 ,可使用uni.request替换。 签名算法请看文档 http('client/app/get_wechat',{url:url},function(res){ if(res.data){ jweixin.config({ debug: false, appId: res.data.wxjs_config.appId, timestamp:res.data.wxjs_config.timestamp, nonceStr: res.data.wxjs_config.nonceStr, signature:res.data.wxjs_config.signature, jsApiList: ['checkJsAPi','getLocation','onMenuShareAppMessage','onMenuShareTimeline','onMenuShareQQ','onMenuShareQZone','onMenuShareWeibo','updateAppMessageShareData','updateTimelineShareData','chooseWXPay'] }); //配置完成后,再执行分享等功能 if(callback){ callback(res.data.wxjs_config); } } },true); }; // 定位当前位置 function getLocal(callback){ callback = typeof(callback) == 'function' ? callback : function(res) {}; var urls = window.location.href; initJssdk(function(signData){ uni.showLoading({ title: '微信定位中...' }) var uxlocation = {"lng": "", "lat": "", "address": ""}; jweixin.ready(function () { jweixin.getLocation({ type: 'gcj02', success: function (res) { uxlocation.lng = res.longitude || ''; uxlocation.lat = res.latitude || ''; setUxLocation(uxlocation); AMap.plugin('AMap.Geocoder', function() { var geocoder = new AMap.Geocoder({extensions:'all'}); AMap.event.addListener(geocoder, 'error', error) var lnglat = [Number(res.longitude), Number(res.latitude)] geocoder.getAddress(lnglat, function(status, result) { if (status === 'complete' && result.info === 'OK') { console.log('complete:',result); uni.hideLoading(); // result为对应的地理位置详细信息 var addr = ''; if(result.regeocode.pois && result.regeocode.pois.length > 0){ addr = result.regeocode.pois[0].name; }else if(result.regeocode.formattedAddress){ addr = result.regeocode.formattedAddress; }else{ addr = result.regeocode.addressComponent.city + result.regeocode.addressComponent.district } uxlocation.address = addr; setUxLocation(uxlocation); callback(); }else{ uni.hideLoading(); callback(); } }); function error(res){ // getGeoLocation(res.longitude,res.latitude); alert('地址信息解析失败'); callback(); } }); }, fail: function (res) { uni.hideLoading(); alert('微信获取位置失败'); uni.navigateTo({ url: '/pages/addr/selectReceive' }) }, cancel: function (res) { uni.hideLoading(); alert('用户拒绝获取位置'); uni.navigateTo({ url: '/pages/addr/selectReceive' }) } }); }); },urls) }; function getLocation(callback) { callback = typeof(callback) == 'function' ? callback : function(res) {}; var num=1; // #ifdef H5 getLocationaddr(callback) // #endif // #ifdef MP-WEIXIN uni.getSetting({ success(res) { if(res.authSetting['scope.userLocation'] != undefined){ if (res.authSetting['scope.userLocation']) { getLocationaddr(callback) // 已经授权,可以直接调用 getLocation 获取地理位置 } else { showConfirm('您还未开启定位,是否去开启定位?').then(cres => { if (cres.confirm) { uni.openSetting({ success(res2) { if (res2.authSetting['scope.userLocation']) { } } }); callback(-1) } }) }; }else{ var uxlocation = {"lng": "", "lat": "", "address": ""}; // var citynum=1; uni.getLocation({ type: 'gcj02', geocode: 'true', success: function(ares) { uxlocation.lat = ares.latitude; uxlocation.lng = res.longitude; myAmapFun.getRegeo({ success: function(data) { // citynum=0; uxlocation.address = data[0].name+data[0].desc||data[0].regeocodeData.formatted_address; uxlocation.city = data[0].regeocodeData.addressComponent.city; setUxLocation(uxlocation); callback(uxlocation); //成功回调 }, fail: function(info) { //失败回调 } }) // 获取天气 // myAmapFun.getWeather({ // success(res){ // //temperature 温度 // //weather 天气现象 // uxlocation.city = res.city.data; // uxlocation.temperature = res.temperature.data; // uxlocation.weather = res.weather.data; // var weather=res.weather.data; // var weatherMap=__CFG.iconWeatherMap; // var url=require('@/static/images/weather/weaionf.png'); // Object.keys(weatherMap).some((key) => { // if (weatherMap[key].children.indexOf(weather)!=-1) { // url=require(`@/static/images/weather/${weatherMap[key].val}.png`) // return true; // } // }) // uxlocation.icon = url; // setUxLocation(uxlocation); // callback(uxlocation); // }, // fail(err){ // console.log('fail') // } // }) // if(citynum==1){ // setUxLocation(uxlocation); // callback(uxlocation); // } }, fail: function(error) { uni.showToast({ icon: 'none', title: '定位失败' }) // #ifdef APP-PLUS // #endif }, complete: function(rs) { // console.log('complete:'+JSON.stringify(rs)) } }) } }, fail(err) { console.log(err) }, }) // #endif // #ifdef APP-PLUS let system = uni.getSystemInfoSync(); if(system.platform === "android"){ var context = plus.android.importClass("android.content.Context"); var locationManger = plus.android.importClass("android.location.LocationManager"); var main = plus.android.runtimeMainActivity(); var mainSvr = main.getSystemService(context.LOCATION_SERVICE); if(!mainSvr.isProviderEnabled(locationManger.GPS_PROVIDER)){ uni.showModal({ title:"提示", content:"请授权位置获取地址", showCancel:false, success() { if(!mainSvr.isProviderEnabled(locationManger.GPS_PROVIDER)){ var Intent = plus.android.importClass("android.content.Intent"); var Settings = plus.android.importClass("android.provider.Settings"); var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); main.startActivity(intent); }else{ console.log("定位已开启") _self.setSite() } } }) }else{ plus.android.requestPermissions( ['android.permission.ACCESS_FINE_LOCATION'], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装 function(resultObj) { var result = 0; for (var i = 0; i < resultObj.granted.length; i++) { var grantedPermission = resultObj.granted[i]; console.log('已获取的权限:' + grantedPermission); result = 1 } for (var i = 0; i < resultObj.deniedPresent.length; i++) { var deniedPresentPermission = resultObj.deniedPresent[i]; console.log('拒绝本次申请的权限:' + deniedPresentPermission); result = 0 } for (var i = 0; i < resultObj.deniedAlways.length; i++) { var deniedAlwaysPermission = resultObj.deniedAlways[i]; console.log('永久拒绝申请的权限:' + deniedAlwaysPermission); result = -1 } // resolve(result); // 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限 if (result != 1) { showConfirm('您还未开启定位,是否去开启定位?').then(res => { if (res.confirm) { gotoAppPermissionSetting() callback(result) } }) }else{ getLocationaddr(callback) } }, function(error) { console.log('申请权限错误:' + error.code + " = " + error.message); // resolve({ // code: error.code, // message: error.message // }); } ); } } // #endif }; // 跳转到**应用**的权限页面 function gotoAppPermissionSetting() { var isIos // #ifdef APP-PLUS isIos = (plus.os.name == "iOS") // #endif if (isIos) { var UIApplication = plus.ios.import("UIApplication"); var application2 = UIApplication.sharedApplication(); var NSURL2 = plus.ios.import("NSURL"); // var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES"); var setting2 = NSURL2.URLWithString("app-settings:"); application2.openURL(setting2); plus.ios.deleteObject(setting2); plus.ios.deleteObject(NSURL2); plus.ios.deleteObject(application2); } else { var Intent = plus.android.importClass("android.content.Intent"); var Settings = plus.android.importClass("android.provider.Settings"); var Uri = plus.android.importClass("android.net.Uri"); var mainActivity = plus.android.runtimeMainActivity(); var intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); var uri = Uri.fromParts("package", mainActivity.getPackageName(), null); intent.setData(uri); mainActivity.startActivity(intent); } } function getLocationaddr(callback){ callback = typeof(callback) == 'function' ? callback : function(res) {}; var uxlocation = {"lng": "", "lat": "", "address": ""}; uni.getLocation({ type: 'gcj02', geocode: 'true', success: function(res) { uxlocation.lat = res.latitude; uxlocation.lng = res.longitude; myAmapFun.getRegeo({ success: function(data) { uxlocation.address = data[0].name+data[0].desc||data[0].regeocodeData.formatted_address; uxlocation.city = data[0].regeocodeData.addressComponent.city; setUxLocation(uxlocation); callback(uxlocation); }, fail: function(info) { //失败回调 console.log(info,223) } }) // 获取天气 // myAmapFun.getWeather({ // success(res){ // //temperature 温度 // //weather 天气现象 // uxlocation.city = res.city.data; // uxlocation.temperature = res.temperature.data; // uxlocation.weather = res.weather.data; // var weather=res.weather.data; // var weatherMap=__CFG.iconWeatherMap; // var url=require('@/static/images/weather/weaionf.png'); // Object.keys(weatherMap).some((key) => { // if (weatherMap[key].children.indexOf(weather)!=-1) { // url=require(`@/static/images/weather/${weatherMap[key].val}.png`) // return true; // } // }) // uxlocation.icon = url; // setUxLocation(uxlocation); // callback(uxlocation); // }, // fail(err){ // console.log('fail') // } // }) }, fail: function(error) { uni.showToast({ icon: 'none', title: '定位失败' }) // #ifdef APP-PLUS // #endif }, complete: function(rs) { // console.log('complete:'+JSON.stringify(rs)) } }) } const self = { getLocation, setUxLocation, __CFG } export default self