upload project
This commit is contained in:
commit
06961cae04
422 changed files with 110626 additions and 0 deletions
252
subpackages/map-extras/searchLocation/searchLocation.js
Normal file
252
subpackages/map-extras/searchLocation/searchLocation.js
Normal file
|
|
@ -0,0 +1,252 @@
|
|||
const mapConfig = require('../../../utils/map-config.js');
|
||||
const config = require('../../../config/config.js');
|
||||
|
||||
Page({
|
||||
data: {
|
||||
searchKeyword: '',
|
||||
searchResults: [],
|
||||
showSearchTips: true,
|
||||
showNoResults: false,
|
||||
currentCity: '乌鲁木齐市'
|
||||
},
|
||||
|
||||
onLoad: function() {
|
||||
// 设置导航栏标题
|
||||
wx.setNavigationBarTitle({
|
||||
title: '搜索地点'
|
||||
});
|
||||
|
||||
// 获取用户当前位置和城市
|
||||
this.getUserCurrentLocation();
|
||||
},
|
||||
|
||||
// 获取用户当前位置和城市
|
||||
getUserCurrentLocation: function() {
|
||||
wx.showLoading({
|
||||
title: '获取位置中...',
|
||||
});
|
||||
|
||||
// 获取经纬度信息
|
||||
wx.getLocation({
|
||||
type: 'gcj02',
|
||||
success: (res) => {
|
||||
const latitude = res.latitude;
|
||||
const longitude = res.longitude;
|
||||
|
||||
// 通过经纬度获取城市信息
|
||||
wx.request({
|
||||
url: 'https://restapi.amap.com/v3/geocode/regeo',
|
||||
method: 'GET',
|
||||
data: {
|
||||
key: config.amapKey || mapConfig.MAP_CONFIG.amapKey,
|
||||
location: `${longitude},${latitude}`,
|
||||
extensions: 'all'
|
||||
},
|
||||
success: (regeoRes) => {
|
||||
|
||||
wx.hideLoading();
|
||||
|
||||
if (regeoRes.data.status === '1' && regeoRes.data.regeocode) {
|
||||
const city = regeoRes.data.regeocode.addressComponent.city ||
|
||||
regeoRes.data.regeocode.addressComponent.province;
|
||||
|
||||
if (city) {
|
||||
this.setData({
|
||||
currentCity: city
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
fail: (error) => {
|
||||
console.error('获取城市信息失败:', error);
|
||||
wx.hideLoading();
|
||||
this.setData({
|
||||
currentCity: '乌鲁木齐市'
|
||||
});
|
||||
wx.showToast({
|
||||
title: '无法获取城市信息,使用默认城市乌鲁木齐',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
fail: (error) => {
|
||||
console.error('获取位置失败:', error);
|
||||
wx.hideLoading();
|
||||
this.setData({
|
||||
currentCity: '乌鲁木齐市'
|
||||
});
|
||||
wx.showToast({
|
||||
title: '无法获取位置信息,使用默认城市乌鲁木齐',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
onSearchInput: function(e) {
|
||||
const keyword = e.detail.value;
|
||||
this.setData({
|
||||
searchKeyword: keyword,
|
||||
showSearchTips: keyword.length === 0 && this.data.searchResults.length === 0,
|
||||
showNoResults: false
|
||||
});
|
||||
|
||||
if (keyword.trim()) {
|
||||
this.onSearch();
|
||||
}
|
||||
},
|
||||
|
||||
// 搜索事件
|
||||
onSearch: function() {
|
||||
const keyword = this.data.searchKeyword.trim();
|
||||
if (!keyword) {
|
||||
wx.showToast({
|
||||
title: '请输入搜索关键词',
|
||||
icon: 'none'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 显示加载提示
|
||||
wx.showLoading({
|
||||
title: '搜索中...',
|
||||
mask: true
|
||||
});
|
||||
|
||||
wx.request({
|
||||
url: 'https://restapi.amap.com/v3/place/text',
|
||||
method: 'GET',
|
||||
data: {
|
||||
key: config.amapKey || mapConfig.MAP_CONFIG.amapKey,
|
||||
keywords: keyword,
|
||||
city: this.data.currentCity,
|
||||
citylimit: true,
|
||||
offset: 20,
|
||||
extensions: 'all'
|
||||
},
|
||||
success: (res) => {
|
||||
|
||||
wx.hideLoading();
|
||||
|
||||
if (res.data.status === '1' && res.data.pois && res.data.pois.length > 0) {
|
||||
this.setData({
|
||||
searchResults: res.data.pois,
|
||||
showSearchTips: false,
|
||||
showNoResults: false
|
||||
});
|
||||
} else {
|
||||
this.setData({
|
||||
searchResults: [],
|
||||
showSearchTips: false,
|
||||
showNoResults: true
|
||||
});
|
||||
}
|
||||
},
|
||||
fail: (error) => {
|
||||
console.error('搜索地点失败:', error);
|
||||
wx.hideLoading();
|
||||
wx.showToast({
|
||||
title: '搜索失败,请重试',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// 选择搜索结果中的地点
|
||||
selectLocation: function(e) {
|
||||
const { id } = e.currentTarget.dataset;
|
||||
const resultIndex = parseInt(id);
|
||||
if (this.data.searchResults[resultIndex]) {
|
||||
const selectedPoi = this.data.searchResults[resultIndex];
|
||||
|
||||
|
||||
console.log('选择的地点原始数据:', JSON.stringify(selectedPoi, null, 2)); console.log('地点距离:', typeof selectedPoi.distance === 'undefined' ? '无' : JSON.stringify(selectedPoi.distance));
|
||||
|
||||
const locationData = {
|
||||
name: selectedPoi.name || '',
|
||||
address: selectedPoi.address || '',
|
||||
distance: Array.isArray(selectedPoi.distance) ?
|
||||
(selectedPoi.distance.length > 0 ? selectedPoi.distance[0] : '') :
|
||||
(selectedPoi.distance || ''),
|
||||
location: selectedPoi.location || '',
|
||||
type: selectedPoi.type || '',
|
||||
typecode: selectedPoi.typecode || ''
|
||||
};
|
||||
|
||||
if (!locationData.name && locationData.address) {
|
||||
locationData.name = locationData.address;
|
||||
}
|
||||
if (!locationData.address && locationData.name) {
|
||||
locationData.address = locationData.name;
|
||||
}
|
||||
|
||||
wx.setStorageSync('selectedPoi', locationData);
|
||||
|
||||
let storedData = wx.getStorageSync('selectedPoi');
|
||||
|
||||
if (JSON.stringify(storedData) !== JSON.stringify(locationData)) {
|
||||
console.warn('存储数据不匹配,重新保存...');
|
||||
wx.setStorageSync('selectedPoi', locationData);
|
||||
storedData = wx.getStorageSync('selectedPoi');
|
||||
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
const finalStoredData = wx.getStorageSync('selectedPoi');
|
||||
|
||||
const pages = getCurrentPages();
|
||||
|
||||
let publishPage = null;
|
||||
for (let i = pages.length - 1; i >= 0; i--) {
|
||||
if (pages[i].route === 'subpackages/media/edits/edits') {
|
||||
publishPage = pages[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (publishPage) {
|
||||
if (publishPage.receiveLocationData && typeof publishPage.receiveLocationData === 'function') {
|
||||
|
||||
publishPage.receiveLocationData(locationData);
|
||||
} else {
|
||||
|
||||
publishPage.setData({
|
||||
currentLocation: locationData.address || locationData.name || locationData.toString(),
|
||||
locationName: locationData.name || locationData.address || locationData.toString(),
|
||||
distance: locationData.distance || '',
|
||||
fullAddress: locationData.address && locationData.address !== locationData.name ? locationData.address : ''
|
||||
});
|
||||
console.log('已通过页面栈设置发布页数据:', {
|
||||
currentLocation: locationData.address || locationData.name || locationData.toString(),
|
||||
locationName: locationData.name || locationData.address || locationData.toString(),
|
||||
distance: locationData.distance || '',
|
||||
fullAddress: locationData.address && locationData.address !== locationData.name ? locationData.address : ''
|
||||
});
|
||||
}
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
let delta = 1;
|
||||
for (let i = pages.length - 1; i >= 0; i--) {
|
||||
if (pages[i].route === 'subpackages/media/edits/edits') {
|
||||
delta = pages.length - 1 - i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 返回到发布页
|
||||
wx.navigateBack({ delta: delta });
|
||||
|
||||
}, 100);
|
||||
}
|
||||
},
|
||||
|
||||
// 取消搜索
|
||||
onCancel: function() {
|
||||
wx.navigateBack();
|
||||
}
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue