252 lines
7.2 KiB
JavaScript
252 lines
7.2 KiB
JavaScript
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();
|
|
}
|
|
});
|