fix(dashboard): добавлено определение loadPetHero (ReferenceError на проде)
Функция loadPetHero вызывалась, но её тело не попало в коммит
667054f (Edit не применился). Восстановлено: рендер питомца через
PetSprite + загрузка /api/pet, как и задумано.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -3261,6 +3261,41 @@
|
|||||||
document.getElementById('hc-lab-meta').textContent = 'Освой: ' + lab.goal;
|
document.getElementById('hc-lab-meta').textContent = 'Освой: ' + lab.goal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ══ HERO: Pet (synced with /pet module via /api/pet + PetSprite) ═ */
|
||||||
|
async function loadPetHero() {
|
||||||
|
const card = document.getElementById('hc-pet');
|
||||||
|
if (!card) return;
|
||||||
|
let d;
|
||||||
|
try { d = await LS.api('/api/pet'); }
|
||||||
|
catch { card.style.display = 'none'; return; } // фича питомца выключена
|
||||||
|
if (!d) { card.style.display = 'none'; return; }
|
||||||
|
|
||||||
|
// Sprite — единый рендер из pet-sprite.js (как на /pet)
|
||||||
|
const art = document.getElementById('hc-pet-art');
|
||||||
|
if (art && window.PetSprite) {
|
||||||
|
art.innerHTML = PetSprite.render(d.petLevel || 1, d.mood || 'neutral', d.accessories || [], d.petColor || 'purple', d.streakCurrent || 0);
|
||||||
|
}
|
||||||
|
document.getElementById('hc-pet-name').textContent = d.petName || 'Квантик';
|
||||||
|
document.getElementById('hc-pet-lvl').textContent = d.petLevel || 1;
|
||||||
|
|
||||||
|
// XP до следующего уровня питомца
|
||||||
|
const cur = d.xpForCurrLevel || 0;
|
||||||
|
const next = d.xpForNextLevel; // null = макс
|
||||||
|
const have = Math.max(0, (d.xp || 0) - cur);
|
||||||
|
const need = next != null ? Math.max(1, next - cur) : have;
|
||||||
|
const pct = next != null ? Math.min(100, Math.round(have / need * 100)) : 100;
|
||||||
|
document.getElementById('hc-pet-xp').textContent = have;
|
||||||
|
document.getElementById('hc-pet-xpmax').textContent = next != null ? need : '—';
|
||||||
|
document.getElementById('hc-pet-prog').style.width = pct + '%';
|
||||||
|
|
||||||
|
// Стрик / цель дня / настроение
|
||||||
|
document.getElementById('hc-pet-streak').textContent = d.streakCurrent || 0;
|
||||||
|
const quests = d.quests || [];
|
||||||
|
const doneCnt = quests.filter(q => q.done).length;
|
||||||
|
document.getElementById('hc-pet-goal').textContent = quests.length ? `${doneCnt}/${quests.length}` : '—';
|
||||||
|
document.getElementById('hc-pet-mood').textContent = window.PetSprite ? PetSprite.moodLabel(d.mood) : (d.mood || 'бодр');
|
||||||
|
}
|
||||||
|
|
||||||
/* ══ ACTIVITY: data structure ══════════════════════════════════════ */
|
/* ══ ACTIVITY: data structure ══════════════════════════════════════ */
|
||||||
let _activityRows = []; // raw history rows
|
let _activityRows = []; // raw history rows
|
||||||
let _hmScale = 12; // weeks to show
|
let _hmScale = 12; // weeks to show
|
||||||
|
|||||||
Reference in New Issue
Block a user