240 lines
6.0 KiB
JavaScript
240 lines
6.0 KiB
JavaScript
import config from '@/utils/mapConfig';
|
|
import { CITY_GET_LOCATION, CITY_SELECT_COUNTY, CITY_CHANGE_CODE, CITY_CHANGE_COUNTY } from '../mutation-types';
|
|
import Vue from 'vue'
|
|
import VueJsonp from '@/utils/vue-jsonp.umd.js'
|
|
Vue.use(VueJsonp)
|
|
|
|
const state = {
|
|
city: '定位中',
|
|
county: '',
|
|
province:'',
|
|
detailAddress:'',
|
|
countyList: [],
|
|
currentCityCode: '',
|
|
defaultCity: '',
|
|
defaultCounty: '',
|
|
latitude:'',
|
|
longitude:''
|
|
};
|
|
|
|
const getters = {
|
|
city: state => state.city,
|
|
county: state => state.county,
|
|
detailAddress: state=> state.detailAddress,
|
|
province: state => state.province,
|
|
currentCityCode: state => state.currentCityCode,
|
|
defaultCity: state => state.defaultCity,
|
|
defaultCounty: state => state.defaultCounty,
|
|
countyList: state => state.countyList,
|
|
latitude: state => state.latitude,
|
|
longitude: state => state.longitude
|
|
};
|
|
|
|
const mutations = {
|
|
// 设置当前城市信息
|
|
[CITY_GET_LOCATION](state, payload) {
|
|
state.city = payload.city;
|
|
state.county = payload.county;
|
|
state.province = payload.province;
|
|
state.detailAddress = payload.detailAddress,
|
|
state.currentCityCode = payload.currentCityCode;
|
|
state.defaultCity = payload.city;
|
|
state.defaultCounty = payload.county;
|
|
state.countyList = [];
|
|
state.latitude = payload.latitude;
|
|
state.longitude = payload.longitude;
|
|
},
|
|
[CITY_SELECT_COUNTY](state, payload) {
|
|
state.countyList = payload.list;
|
|
},
|
|
[CITY_CHANGE_CODE](state, payload) {
|
|
state.city = payload.city;
|
|
state.currentCityCode = payload.code;
|
|
state.county = '';
|
|
},
|
|
// 在更新区级信息后,同时更新默认信息
|
|
[CITY_CHANGE_COUNTY](state, payload) {
|
|
state.county = payload.county;
|
|
state.defaultCity = state.city;
|
|
state.defaultCounty = state.county;
|
|
}
|
|
};
|
|
|
|
const actions = {
|
|
|
|
// 获取当前定位 城市 区
|
|
[CITY_GET_LOCATION]({commit, dispatch}) {
|
|
|
|
// Vue.jsonp(
|
|
// 'https://apis.map.qq.com/ws/geocoder/v1/?location=25.288289676896564,110.31579578706705&key=UGMBZ-S5AKU-YQGV3-47M5J-BAQ62-ZBBJW',
|
|
// {
|
|
// //callbackName: 'QQmap',
|
|
// output:'jsonp',
|
|
// })
|
|
// .then(json => {
|
|
//
|
|
// console.log('json:'+json)
|
|
// let latitude = 25.288289676896564;
|
|
// let longitude = 110.31579578706705;
|
|
// // Success.
|
|
// commit({
|
|
// type: CITY_GET_LOCATION,
|
|
// city: json.result.ad_info.city,
|
|
// currentCityCode: json.result.ad_info.adcode,
|
|
// county: json.result.ad_info.district,
|
|
// latitude:latitude,
|
|
// longitude:longitude
|
|
// });
|
|
//
|
|
// }).catch(err => {
|
|
// // Failed.
|
|
// console.log('地址解析失败:'+JSON.stringify(err))
|
|
// })
|
|
|
|
uni.getLocation({
|
|
type: 'wgs84',
|
|
success: function(res) {
|
|
let latitude = res.latitude;
|
|
let longitude = res.longitude;
|
|
|
|
console.log('latitude:'+latitude+'longitude:'+longitude)
|
|
|
|
// #ifdef H5
|
|
Vue.jsonp(
|
|
'https://apis.map.qq.com/ws/geocoder/v1/?location='+latitude+','+longitude+'&key='+config.key,
|
|
{
|
|
//callbackName: 'QQmap',
|
|
output:'jsonp',
|
|
}).then(json => {
|
|
// Success.
|
|
// console.log('json:'+JSON.stringify(json))
|
|
// let latitude = 25.288289676896564;
|
|
// let longitude = 110.31579578706705;
|
|
// Success.
|
|
commit({
|
|
type: CITY_GET_LOCATION,
|
|
city: json.result.ad_info.city,
|
|
detailAddress:json.result.formatted_addresses.recommend,
|
|
province:json.result.ad_info.province,
|
|
currentCityCode: json.result.ad_info.adcode,
|
|
county: json.result.ad_info.district,
|
|
latitude:latitude,
|
|
longitude:longitude
|
|
});
|
|
|
|
}).catch(err => {
|
|
// Failed.
|
|
console.log('地址解析失败:'+JSON.stringify(err))
|
|
})
|
|
// #endif
|
|
|
|
// #ifndef H5
|
|
uni.request({
|
|
url: 'https://apis.map.qq.com/ws/geocoder/v1/?location='+latitude+','+longitude+'&key='+config.key,
|
|
success: function(res) {
|
|
// console.log('res:'+JSON.stringify(res.data));
|
|
commit({
|
|
type: CITY_GET_LOCATION,
|
|
city: res.data.result.ad_info.city,
|
|
province:res.data.result.ad_info.province,
|
|
detailAddress:res.data.result.formatted_addresses.recommend,
|
|
currentCityCode: res.data.result.ad_info.adcode,
|
|
county: res.data.result.ad_info.district,
|
|
latitude:latitude,
|
|
longitude:longitude
|
|
});
|
|
},
|
|
fail:function(res){
|
|
console.log('地址解析失败')
|
|
},
|
|
complete:function(){
|
|
|
|
}
|
|
});
|
|
// #endif
|
|
},
|
|
fail:function(res){
|
|
|
|
// uni.showToast({
|
|
// title:'城市定位失败:'+JSON.stringify(res),
|
|
// icon:'none',
|
|
// duration:2000
|
|
// })
|
|
}
|
|
});
|
|
|
|
|
|
},
|
|
// 根据城市代码 定位区县
|
|
[CITY_SELECT_COUNTY]({ commit, state }) {
|
|
console.log('正在定位区县');
|
|
let code = state.currentCityCode;
|
|
|
|
// #ifdef H5
|
|
Vue.jsonp(
|
|
'https://apis.map.qq.com/ws/district/v1/getchildren?&id='+code+'&key='+config.key,
|
|
{
|
|
output:'jsonp',
|
|
})
|
|
.then(json => {
|
|
|
|
commit({
|
|
type: CITY_SELECT_COUNTY,
|
|
list: json.result[0]
|
|
});
|
|
|
|
}).catch(err => {
|
|
// Failed.
|
|
console.log('地址解析失败:'+JSON.stringify(err))
|
|
})
|
|
// #endif
|
|
|
|
// #ifndef H5
|
|
uni.request({
|
|
url: 'https://apis.map.qq.com/ws/district/v1/getchildren?&id='+code+'&key='+config.key,
|
|
success: function(res) {
|
|
commit({
|
|
type: CITY_SELECT_COUNTY,
|
|
list: res.data.result[0]
|
|
});
|
|
//console.log(res.data);
|
|
console.log('请求区县成功' + 'https://apis.map.qq.com/ws/district/v1/getchildren?&id='+code+'&key='+config.key);
|
|
},
|
|
fail: function() {
|
|
console.log('请求区县失败,请重试');
|
|
}
|
|
});
|
|
// #endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
// 更新城市名和城市代码
|
|
[CITY_CHANGE_CODE]({commit}, data) {
|
|
commit({
|
|
type: CITY_CHANGE_CODE,
|
|
city: data.city,
|
|
code: data.code
|
|
});
|
|
},
|
|
// 更新选择区县
|
|
[CITY_CHANGE_COUNTY]({commit}, data) {
|
|
commit({
|
|
type: CITY_CHANGE_COUNTY,
|
|
county: data.county
|
|
});
|
|
}
|
|
};
|
|
|
|
export default {
|
|
namespaced: true,
|
|
state,
|
|
getters,
|
|
mutations,
|
|
actions
|
|
};
|