import myAmapFun from "@/utils/initmap.js" import {showConfirm} from '@/utils/common' // #ifdef H5 var jweixin = require('jweixin-module'); // #endif 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; } //设置浏览器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 checkIsWeixin() { if (/(micromessenger)/.test(navigator.userAgent.toLowerCase())) { return true; } else { return false; } }; //初始化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, // 必填,签名,见附录1 // 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; var that = this; // #ifdef H5 myAmapFun.getWeather({ success(res){ console.log(res) var uxlocation ={}; //temperature 温度 //weather 天气现象 uxlocation.city = res.city.data; uxlocation.temperature = res.temperature.data; uxlocation.weather = res.weather.data; setUxLocation(uxlocation); callback(res.liveData); }, fail(err){ console.log('fail') } }) // setTimeout(function (){ // AMap.plugin(['AMap.Geolocation','AMap.Geocoder', 'AMap.Weather'], 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) // var weather = new AMap.Weather(); // function onComplete(data) { // // data是具体的定位信息 // // that.$store.dispatch('UPDATE_ADDRESS', data.formattedAddress) // // weather.getForecast(data.addressComponent.adcode, function(err, data) { // // console.log(err, data); // // }); // var lng=data.position.lng // var lat=data.position.lat // console.log(data) // weather.getLive(data.addressComponent.adcode, function(err, ress) { // console.log(err) // let weatherObj = { // temperature: ress.temperature, // currentCity: ress.city, // weatherDesc: ress.weather // } // console.log(ress) // callback(weatherObj); // }); // } // function onError(data) { // // 定位出错 // if (data.info == 'NOT_SUPPORTED') { // uni.showModal({ // title: '提示', // content: '当前浏览器不支持定位功能' || '定位失败' // }) // } else if (data.info == 'FAILED') { // uni.showModal({ // title: '提示', // content: data.message || '定位失败' // }) // } // } // }) // }, 500); // // #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{ // getLocationaddr(callback) // } // }, // 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(res.liveData); }, fail(err){ console.log('fail') } }) }, fail: function(error) { uni.showToast({ icon: 'none', title: '定位失败' }) }, complete: function(rs) { console.log('complete:'+JSON.stringify(rs)) } }) } const self = { getLocation, setUxLocation, checkIsWeixin, __CFG } export default self