v12 — ИИ-помощник внутри приложения для спортсмена и родителя

This commit is contained in:
Dauren777 2026-06-01 10:54:43 +00:00
parent ec7595e38f
commit ca046a17aa

View File

@ -394,6 +394,18 @@ input[type=file]{display:none}
</div>
</div>
</main>
<!-- AI ASSISTANT для приложения -->
<div class="ai-helper" id="aiAppHelper">
<div class="ai-header" onclick="toggleAppAI()">
&#x1F916; ИИ-помощник
<button onclick="event.stopPropagation();toggleAppAI()" id="aiAppToggleBtn">&#x25BC;</button>
</div>
<div class="ai-body" id="aiAppBody">
<div class="ai-msg">&#x1F44B; Я здесь! Выбери раздел — я подскажу что делать.</div>
</div>
</div>
</div>
<div class="toast" id="toast">Сохранено!</div>
@ -522,9 +534,9 @@ function updateCityList() {
cities.forEach(c => { const opt = document.createElement('option'); opt.value = c; datalist.appendChild(opt); });
}
function toggleAI() {
const ai = document.getElementById('aiHelper');
const btn = document.getElementById('aiToggleBtn');
function toggleAppAI() {
const ai = document.getElementById('aiAppHelper');
const btn = document.getElementById('aiAppToggleBtn');
if (ai.classList.contains('minimized')) {
ai.classList.remove('minimized');
btn.textContent = '\u25BC';
@ -535,14 +547,86 @@ function toggleAI() {
}
function aiSay(msg) {
const body = document.getElementById('aiBody');
// Find active AI helper
const body = document.getElementById('aiAppBody') || document.getElementById('aiBody');
if (!body) return;
const div = document.createElement('div');
div.className = 'ai-msg';
div.textContent = msg;
div.innerHTML = msg;
body.appendChild(div);
body.scrollTop = body.scrollHeight;
}
function getTabHelp(tab) {
const helps = {
diary: [
'&#x1F4D6; Это твой дневник тренировок. Записывай сюда каждую тренировку!',
'&#x270F; Заполни дату, тип тренировки, километраж и лучшее время.',
'&#x1F4C8; Через месяц ты увидишь свой прогресс — это очень мотивирует!'
],
health: [
'&#x2764;&#xFE0F; Здесь ты следишь за здоровьем. Витамины, сон, анализы.',
'&#x1F48A; Отмечай галочками принятые витамины каждый день.',
'&#x1F4A4; Записывай часы сна и утренний пульс — это важно для восстановления!'
],
norms: [
'&#x1F4CA; Здесь таблица разрядов. Смотри, сколько осталось до следующего уровня!',
'&#x1F3AF; Твоя цель — МС (23 секунды). Ты уже перешагнул 3 взрослый!'
],
video: [
'&#x1F3AC; Загружай видео своих заплывов и смотри в повторе.',
'&#x1F4F9; Снимай сбоку от бортика — так лучше видно технику гребка и поворота.'
],
photos: [
'&#x1F4F7; Галерея твоих достижений. Загружай фото с соревнований!'
],
grades: [
'&#x1F393; Школьные оценки. Учёба важна не меньше тренировок — особенно для NCAA!',
'&#x1F4CA; Средний балл считается автоматически. Держи его выше 4.0!'
],
lessons: [
'&#x1F4DA; Здесь ссылки на обучающие видео. Найди их на YouTube и учись у лучших!'
],
ranking: [
'&#x2B50; Рейтинг спортсменов и тренеров. Родители могут голосовать за лучших!',
'&#x1F3C6; Топ-3 отмечены золотом, серебром и бронзой.'
]
};
return helps[tab] || ['&#x1F44B; Я здесь чтобы помочь! Выбери раздел и я подскажу что делать.'];
}
function aiWelcome() {
const tab = document.querySelector('.tab-btn.active');
const tabId = tab ? tab.dataset.tab : 'diary';
const msgs = getTabHelp(tabId);
msgs.forEach((m, i) => setTimeout(() => aiSay(m), i * 1200));
}
// Update welcome on tab switch
document.querySelectorAll('.tab-btn').forEach(btn => {
const orig = btn.onclick;
btn.addEventListener('click', () => {
setTimeout(() => {
const helps = getTabHelp(btn.dataset.tab);
aiSay('&#x1F4CC; ' + helps[0]);
}, 300);
});
});
function toggleAI() {
const ai = document.getElementById('aiHelper');
const btn = document.getElementById('aiToggleBtn');
if (ai.classList.contains('minimized')) {
ai.classList.remove('minimized');
btn.textContent = '\u25BC';
} else {
ai.classList.add('minimized');
btn.textContent = '\u25B2';
}
}
function aiHelp(field) {
const tips = {
regName: '&#x270F; Напиши свои Фамилию, Имя и Отчество. Например: Кайрат Гали Аскарович.',
@ -616,6 +700,7 @@ function loginProfile(id) {
}
renderAll();
renderRankings();
setTimeout(aiWelcome, 1000);
}
function showProfileScreen() {