// Canal de diffusion global pour un nombre indéfini d'appareils en temps réel const syncChannel = new BroadcastChannel('togola_gestion_sync_v12'); // Écouteur global multi-appareils (Illimité) syncChannel.onmessage = function (event) { if (!currentUser) return; let data = event.data; if (data && data.user === currentUser) { loadUserData(currentUser); showToast("🔄 Données synchronisées en temps réel (Appareil distant) !"); } }; // Écouteur localStorage de secours pour la persistance inter-onglets/appareils window.addEventListener('storage', function(e) { if(!currentUser) return; if(e.key === 'tg_cityweb_accounts_v12') { loadAllAccounts(); loadUserData(currentUser); } }); function handleLogin() { let user = document.getElementById('loginUser').value.trim().toLowerCase(); let pass = document.getElementById('loginPass').value.trim(); let found = accounts.find(a => a.user === user && a.pass === pass); if(found) { // Gestion SANS LIMITE (Indéfini) des appareils connectés if(!found.devices) found.devices = []; if(!found.devices.includes(currentDeviceId)) { found.devices.push(currentDeviceId); // Ajout direct sans condition de quota } currentUser = user; localStorage.setItem('tg_cityweb_accounts_v12', JSON.stringify(accounts)); localStorage.setItem('tg_cityweb_current_user_v12', currentUser); loadUserData(currentUser); document.getElementById('authScreen').style.display = 'none'; showToast("✅ Connexion réussie (Appareils illimités synchronisés) !"); } else { showToast("Identifiant ou mot de passe incorrect."); } } function saveUserData() { if(!currentUser) return; let accIndex = accounts.findIndex(a => a.user === currentUser); if(accIndex !== -1) { accounts[accIndex].config = config; accounts[accIndex].stock = stockData; accounts[accIndex].sales = salesHistory; localStorage.setItem('tg_cityweb_accounts_v12', JSON.stringify(accounts)); // Diffusion instantanée à TOUS les appareils connectés (nombre indéfini) syncChannel.postMessage({ user: currentUser, timestamp: Date.now() }); } }
Hosted & Compiled with HtmlRunner.com