first commit
This commit is contained in:
128
miniprogram/pages/result/result.js
Normal file
128
miniprogram/pages/result/result.js
Normal file
@@ -0,0 +1,128 @@
|
||||
const app = getApp()
|
||||
const db = wx.cloud.database()
|
||||
|
||||
Page({
|
||||
data: {
|
||||
roomId: '',
|
||||
center: { latitude: 39.9, longitude: 116.4 },
|
||||
markers: [],
|
||||
recommendations: [],
|
||||
scale: 13,
|
||||
selectedIndex: -1 // 当前选中的索引
|
||||
},
|
||||
|
||||
onLoad: function (options) {
|
||||
this.setData({ roomId: options.roomId })
|
||||
this.fetchResult()
|
||||
},
|
||||
|
||||
async fetchResult() {
|
||||
wx.showLoading({ title: '加载结果...' })
|
||||
try {
|
||||
const res = await db.collection('rooms').doc(this.data.roomId).get()
|
||||
const data = res.data
|
||||
|
||||
if (data && data.result && data.result.success) {
|
||||
const result = data.result
|
||||
const center = result.center
|
||||
const recommendations = result.recommendations || []
|
||||
|
||||
// 构建 Markers
|
||||
const markers = []
|
||||
|
||||
// 中心点 Marker
|
||||
markers.push({
|
||||
id: 0,
|
||||
latitude: center.lat,
|
||||
longitude: center.lng,
|
||||
iconPath: '',
|
||||
width: 0,
|
||||
height: 0,
|
||||
callout: {
|
||||
content: '最佳中心点',
|
||||
display: 'ALWAYS',
|
||||
padding: 8,
|
||||
borderRadius: 4,
|
||||
bgColor: '#FF6B6B',
|
||||
color: '#FFFFFF',
|
||||
fontSize: 12
|
||||
}
|
||||
})
|
||||
|
||||
// 推荐点 Markers
|
||||
recommendations.forEach((place, index) => {
|
||||
markers.push({
|
||||
id: index + 1, // ID 从 1 开始
|
||||
latitude: place.location.lat,
|
||||
longitude: place.location.lng,
|
||||
iconPath: '',
|
||||
width: 0,
|
||||
height: 0,
|
||||
callout: {
|
||||
content: `${index + 1}`, // 默认只显示序号
|
||||
display: 'ALWAYS',
|
||||
padding: 6,
|
||||
borderRadius: 4,
|
||||
bgColor: '#4CAF50',
|
||||
color: '#FFFFFF',
|
||||
fontSize: 11
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
this.setData({
|
||||
center: { latitude: center.lat, longitude: center.lng },
|
||||
recommendations: recommendations,
|
||||
markers: markers
|
||||
})
|
||||
} else {
|
||||
wx.showToast({ title: '暂无结果', icon: 'none' })
|
||||
}
|
||||
wx.hideLoading()
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
wx.hideLoading()
|
||||
wx.showToast({ title: '加载失败', icon: 'none' })
|
||||
}
|
||||
},
|
||||
|
||||
onListTap(e) {
|
||||
const index = e.currentTarget.dataset.index
|
||||
const place = this.data.recommendations[index]
|
||||
|
||||
// 如果点击已选中的,取消选中
|
||||
const newSelectedIndex = this.data.selectedIndex === index ? -1 : index
|
||||
|
||||
// 更新选中状态
|
||||
this.setData({ selectedIndex: newSelectedIndex })
|
||||
|
||||
// 更新地图标记的 callout
|
||||
const markers = this.data.markers
|
||||
markers.forEach((marker, markerIndex) => {
|
||||
if (marker.id > 0) { // 推荐点 Marker(ID 从 1 开始)
|
||||
const placeIndex = marker.id - 1
|
||||
if (newSelectedIndex === placeIndex) {
|
||||
// 选中的地点显示名称
|
||||
markers[markerIndex].callout.content = `${index + 1}. ${place.name}`
|
||||
markers[markerIndex].callout.bgColor = '#FF6B6B' // 红色背景
|
||||
markers[markerIndex].callout.fontSize = 12
|
||||
} else {
|
||||
// 未选中的地点只显示序号
|
||||
markers[markerIndex].callout.content = `${placeIndex + 1}`
|
||||
markers[markerIndex].callout.bgColor = '#4CAF50' // 绿色背景
|
||||
markers[markerIndex].callout.fontSize = 11
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// 更新 markers 数据
|
||||
this.setData({ markers })
|
||||
|
||||
// 移动地图到选中地点
|
||||
if (newSelectedIndex >= 0) {
|
||||
this.setData({
|
||||
center: { latitude: place.location.lat, longitude: place.location.lng }
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user