Files
2023-09-20 21:49:33 +08:00

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
};