// pages/poi/poi.js const userStore = require('../../userStore.js'); // 模拟的景点数据,实际项目中可以来自云端接口 const POI_LIST = [ { id: 'poi_001', name: '西湖', icon: '🌊', desc: '杭州最著名的湖泊' }, { id: 'poi_002', name: '灵隐寺', icon: '🛕', desc: '千年古刹,禅意悠远' }, { id: 'poi_003', name: '雷峰塔', icon: '🗼', desc: '白娘子传说所在地' }, { id: 'poi_004', name: '西溪湿地', icon: '🌾', desc: '城市中的绿色湿地' }, { id: 'poi_005', name: '千岛湖', icon: '🏝️', desc: '碧水青山,湖光山色' } ]; Page({ data: { points: 0, badgeCount: 0, pois: [] }, onLoad() { this.refresh(); }, onShow() { this.refresh(); }, // 每次刷新:把打卡状态合并到景点列表中,同时更新顶部积分/徽章数 refresh() { const data = userStore.getUserData(); const checkedSet = new Set(data.checkIns.map(c => c.poiId)); const pois = POI_LIST.map(p => ({ ...p, checked: checkedSet.has(p.id) })); this.setData({ points: data.points, badgeCount: data.badges.length, pois }); }, // 点击打卡按钮 onCheckIn(e) { const { id, name } = e.currentTarget.dataset; const res = userStore.checkIn(id, name); wx.showToast({ title: res.message, icon: res.success ? 'success' : 'none', duration: 1500 }); if (res.success) { this.refresh(); } }, // 跳转到徽章页面 goBadges() { wx.navigateTo({ url: '/pages/badges/badges' }); }, // 调试用:清空本地数据 onResetData() { wx.showModal({ title: '确认清空', content: '将清除所有积分、徽章和打卡记录', success: (r) => { if (r.confirm) { wx.clearStorageSync(); this.refresh(); wx.showToast({ title: '已清空', icon: 'success' }); } } }); } });