forked from zhouruizhe/gmTouringMiniApp
53 lines
1.2 KiB
JavaScript
53 lines
1.2 KiB
JavaScript
// pages/badges/badges.js
|
|
const userStore = require('../../userStore.js');
|
|
|
|
Page({
|
|
data: {
|
|
points: 0,
|
|
badges: []
|
|
},
|
|
|
|
onLoad() {
|
|
this.refresh();
|
|
},
|
|
|
|
// 每次显示都刷新一次,保证从其他页面打卡回来后数据是最新的
|
|
onShow() {
|
|
this.refresh();
|
|
},
|
|
|
|
refresh() {
|
|
const data = userStore.getUserData();
|
|
|
|
// 将徽章数据处理为渲染友好的结构(格式化获得时间、补默认图标)
|
|
const badges = (data.badges || []).map(b => ({
|
|
name: b.name,
|
|
icon: this.getBadgeIcon(b.name),
|
|
obtainedAtText: this.formatTime(b.obtainedAt)
|
|
}));
|
|
|
|
this.setData({
|
|
points: data.points || 0,
|
|
badges
|
|
});
|
|
},
|
|
|
|
// 根据徽章名称返回对应的 emoji 图标(也可换成图片路径)
|
|
getBadgeIcon(name) {
|
|
const map = {
|
|
'探索者': '🧭',
|
|
'旅行家': '🌍',
|
|
'打卡达人': '🏆'
|
|
};
|
|
return map[name] || '🎖️';
|
|
},
|
|
|
|
// 格式化时间戳为 "YYYY-MM-DD HH:mm"
|
|
formatTime(ts) {
|
|
if (!ts) return '';
|
|
const d = new Date(ts);
|
|
const pad = n => (n < 10 ? '0' + n : '' + n);
|
|
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`;
|
|
}
|
|
});
|