achievements.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // pages/achievements/achievements.js
  2. Page({
  3. data: {
  4. childId: 0,
  5. childName: '',
  6. loading: false,
  7. achievements: [
  8. { id: 1, name: '初次尝试', description: '完成第一个任务', icon: '⭐', unlocked: true, unlockedAt: '2026-03-25' },
  9. { id: 2, name: '三日火焰', description: '连续3天按时完成', icon: '🔥', unlocked: true, unlockedAt: '2026-03-28' },
  10. { id: 3, name: '一周达人', description: '连续7天按时完成', icon: '🏆', unlocked: false, condition: '连续打卡4天' },
  11. { id: 4, name: '百题斩', description: '完成100个任务', icon: '📖', unlocked: false, condition: '已完成15个任务' },
  12. { id: 5, name: '精准打击', description: '连续10个任务提前完成', icon: '🎯', unlocked: false, condition: '已提前完成3个任务' },
  13. { id: 6, name: '坚持不懈', description: '连续30天按时完成', icon: '💪', unlocked: false, condition: '连续打卡4天' },
  14. { id: 7, name: '专注大师', description: '完成50次专注训练', icon: '🧠', unlocked: false, condition: '已完成0次专注训练' },
  15. { id: 8, name: '积分富豪', description: '累计获得1000积分', icon: '💰', unlocked: false, condition: '已获得120积分' },
  16. { id: 9, name: '全勤宝宝', description: '一周所有任务全部完成', icon: '🏅', unlocked: false, condition: '本周完成3/5个任务' },
  17. { id: 10, name: '完美主义', description: '单月任务完成率100%', icon: '🎖️', unlocked: false, condition: '本月完成率60%' }
  18. ],
  19. stats: {
  20. totalTasks: 15,
  21. completedTasks: 12,
  22. totalPoints: 120,
  23. streakDays: 4,
  24. achievementsUnlocked: 2
  25. }
  26. },
  27. onLoad(options) {
  28. const childId = options.childId || 0;
  29. const childName = options.childName || '';
  30. this.setData({ childId, childName });
  31. wx.setNavigationBarTitle({ title: childName ? `${childName}的成就` : '成就徽章' });
  32. this.loadAchievements();
  33. },
  34. loadAchievements() {
  35. this.setData({ loading: true });
  36. setTimeout(() => {
  37. this.setData({ loading: false });
  38. }, 500);
  39. },
  40. onAchievementTap(e) {
  41. const achievementId = e.currentTarget.dataset.id;
  42. const achievement = this.data.achievements.find(a => a.id === achievementId);
  43. wx.showModal({
  44. title: achievement.name,
  45. content: `${achievement.description}\n\n${achievement.unlocked ? `解锁时间:${achievement.unlockedAt}` : `进度:${achievement.condition}`}`,
  46. showCancel: false
  47. });
  48. }
  49. });