front-back integrated

This commit is contained in:
2026-09-30 02:25:03 +03:00
parent 93ca76c6e1
commit 1f81632083
13 changed files with 298 additions and 27 deletions
+19 -6
View File
@@ -1,8 +1,8 @@
import { loadState, saveState, state, updateSyncStatus } from './state.js';
import { renderMainScreen } from './render/main-screen.js';
import { sync } from './sync.js';
import { sync, initAppData } from './sync.js';
// Подключаем logic-модули (они регистрируются в window)
// Подключаем logic-модули
import './logic/workout.js';
import './logic/exercise.js';
import './logic/set.js';
@@ -20,12 +20,14 @@ import './modals/edit-exercise-modal.js';
import './modals/edit-workout-date-modal.js';
function renderHeader() {
const modeLabel = state.mode === 'trainer' ? '👨‍🏫 Тренер' : '👤 Личный';
document.getElementById('app-header').innerHTML = `
<div>
<h2>Gym Tracker</h2>
<h2>Gym Tracker <span style="font-size:0.8rem; color:var(--text-secondary); font-weight:400;">(${modeLabel})</span></h2>
<div id="sync-status" class="sync-status">● Локально</div>
</div>
<div class="header-actions">
<button class="icon-btn header-btn" onclick="App.toggleMode()" title="Сменить режим">🔄</button>
<button class="icon-btn header-btn" onclick="ML.showBodyMetrics()" title="Замеры">📏</button>
<button class="icon-btn header-btn" onclick="SettingsLogic.show()" title="Настройки">⚙️</button>
<button class="btn btn-small btn-secondary" onclick="AppSync.sync()" title="Синхронизация">🔄</button>
@@ -33,17 +35,28 @@ function renderHeader() {
`;
}
function init() {
async function init() {
loadState();
renderHeader();
renderMainScreen();
updateSyncStatus();
// Загружаем справочники с бэкенда в фоне
await initAppData();
}
// Глобальные хелперы для inline-обработчиков
// Глобальные хелперы
window.App = {
getWorkout: (id) => state.workouts.find(w => w.id === id),
saveAndRender: () => { saveState(); /* перерисовка не нужна — select не требует */ },
saveAndRender: () => { saveState(); },
toggleMode: () => {
state.mode = state.mode === 'personal' ? 'trainer' : 'personal';
state.currentClientId = state.mode === 'personal' ? null : state.currentClientId;
saveState();
renderHeader();
renderMainScreen();
alert(`Режим изменён на: ${state.mode === 'trainer' ? 'Тренер' : 'Личный трекер'}`);
}
};
window.AppSync = { sync };
window.App.backToMain = () => renderMainScreen();