Files
Pet3/miniprogram/pages/records/records.js
2026-06-25 18:24:29 +08:00

63 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// pages/records/records — 6/6b 记录Tab含空状态
const { call } = require('../../utils/cloud.js');
const store = require('../../utils/store.js');
const { ACHIEVEMENTS, TOTAL } = require('../../utils/achievements.js');
const { formatDurationCN, formatDistance, toDateStr } = require('../../utils/format.js');
Page({
data: {
isEmpty: false,
dogName: '豆豆',
primaryDogId: '',
wall: [],
unlockedCount: 0,
total: TOTAL,
walks: [],
dogs: [],
},
onShow() {
if (typeof this.getTabBar === 'function' && this.getTabBar()) {
this.getTabBar().setData({ selected: 0, walkState: (store.getWalkSession() || {}).status || 'idle' });
}
this.load();
},
async load() {
const dogs = store.getState().dogs || [];
const primaryDogId = store.getState().currentDogId || (dogs[0] && dogs[0]._id) || '';
this.setData({ dogs, primaryDogId, dogName: (dogs[0] && dogs[0].name) || '狗狗' });
// 历史
const hist = await call('getHistory', {});
const walks = (hist.ok ? hist.data.walks : []).slice(0, 8).map((w) => ({
_id: w._id,
title: `${toDateStr(w.startAt)} · ${(w.dogNames || []).join('、')}`,
sub: `${formatDurationCN(w.duration)} · ${formatDistance(w.distance)}`,
isManual: w.isManual,
}));
// 成就概览(取前 4基于主狗解锁状态
let wall = ACHIEVEMENTS.slice(0, 4).map((a) => ({ key: a.key, name: a.name, unlocked: false }));
let unlockedCount = 0;
if (primaryDogId) {
const dd = await call('getDogDetail', { dogId: primaryDogId });
if (dd.ok) {
const keys = new Set(dd.data.achievements.unlocked.map((u) => u.achievementKey));
unlockedCount = dd.data.achievements.unlocked.length;
wall = ACHIEVEMENTS.slice(0, 4).map((a) => ({ key: a.key, name: a.name, unlocked: keys.has(a.key) }));
}
}
this.setData({ isEmpty: walks.length === 0, walks, wall, unlockedCount });
},
goAch() {
const q = this.data.primaryDogId ? `?dogId=${this.data.primaryDogId}` : '';
wx.navigateTo({ url: `/pages/achievements/achievements${q}` });
},
startWalk() { wx.navigateTo({ url: '/pages/walking/walking' }); },
openAdd() { this.selectComponent('#addSheet').open(); },
onSaved() { this.load(); },
});