CCCPaste

189326bb99ca8

function handleFormSubmit(e) {
            e.preventDefault();
            
            const lockerNumber = document.getElementById('lockerNumber').value;
            const zone = document.getElementById('zone').value;
            
            fetch(`${API_URL}/lockers`, {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({
                    number: lockerNumber,
                    zone: zone,
                    name: document.getElementById('lastName').value,
                    firstName: document.getElementById('firstName').value,
                    code: document.getElementById('code').value,
                    birthDate: document.getElementById('birthDate').value
                })
            })
            .then(res => {
                if (!res.ok) throw new Error('Erreur ' + res.status);
                closeModal();
                loadData();
                showStatus('Casier enregistré', 'success');
            })
            .catch(err => {
                showStatus('Erreur: ' + err.message, 'error');
            });
        }        function loadData() {
            fetch(`${API_URL}/lockers`)
                .then(res => {
                    if (!res.ok) throw new Error('Erreur ' + res.status);
                    return res.json();
                })
                .then(data => {
                    DATA = data;
                    console.log('Données chargées:', DATA.length);
                    renderAllTables();
                })
                .catch(err => {
                    console.error('Erreur chargement:', err);
                    alert('Erreur: Impossible de charger les données.\n\nAssurez-vous que:\n1. Le serveur Node.js est lancé (npm run dev)\n2. L\'URL est: ' + API_URL);
                });
        }        .sync-indicator {
            text-align: center;
            padding: 10px;
            font-size: 12px;
            color: #999;
            transition: all 0.3s;
        }

        .sync-indicator.syncing {
            color: #0066cc;
            font-weight: 500;
        }

        .sync-indicator.updated {
            color: #2e7d32;
            font-weight: 500;
        }        function loadData() {
            fetch(`${API_URL}/lockers`)
                .then(res => {
                    if (!res.ok) throw new Error('Erreur ' + res.status);
                    return res.json();
                })
                .then(data => {
                    DATA = data;
                    console.log('Données chargées:', DATA.length);
                    renderAllTables();
                })
                .catch(err => {
                    console.error('Erreur chargement:', err);
                    alert('Erreur: Impossible de charger les données.\n\nAssurez-vous que:\n1. Le serveur Node.js est lancé (npm run dev)\n2. L\'URL est: ' + API_URL);
                });
        }        function setupApp() {
            console.log('Détection de l\'API...');
            
            // Déterminer l'URL correcte
            const protocol = window.location.protocol;
            const host = window.location.host;
            API_URL = `${protocol}//${host}/api`;
            
            console.log('API_URL:', API_URL);
            
            // Attacher les événements
            document.querySelectorAll('.tab-button').forEach(btn => {
                btn.addEventListener('click', function() {
                    switchTab(this.dataset.zone);
                    loadData(); // Rafraîchir quand on change d'onglet
                });
            });

            document.getElementById('globalSearch').addEventListener('input', function(e) {
                if (e.target.value.trim()) {
                    searchLockers(e.target.value);
                } else {
                    renderAllTables();
                }
            });

            document.getElementById('lockerForm').addEventListener('submit', handleFormSubmit);

            // Charger les données
            loadData();
            checkServerStatus();
            
            // Rafraîchir automatiquement toutes les 60 secondes
            setInterval(() => {
                console.log('Rafraîchissement automatique...');
                loadData();
                checkServerStatus();
            }, 60000); // 60000 ms = 1 minute
        }        function openModal(zone) {
            document.getElementById('zone').value = zone;
            document.getElementById('modalTitle').textContent = 'Attribuer un casier';
            document.getElementById('lastName').value = '';
            document.getElementById('firstName').value = '';
            document.getElementById('code').value = '';
            document.getElementById('birthDate').value = '';
            document.getElementById('statusMessage').innerHTML = '';
            
            populateLockerSelect(zone);
            document.getElementById('modal').classList.add('active');
        }

        function openModalEdit(lockerNumber) {
            const locker = DATA.find(l => l.number === lockerNumber);
            if (!locker) return;
            
            document.getElementById('zone').value = locker.zone;
            document.getElementById('modalTitle').textContent = `Modifier ${locker.number}`;
            document.getElementById('lockerNumber').value = lockerNumber;
            document.getElementById('lastName').value = locker.name;
            document.getElementById('firstName').value = locker.firstName;
            document.getElementById('code').value = locker.code;
            document.getElementById('birthDate').value = locker.birthDate;
            document.getElementById('statusMessage').innerHTML = '';
            
            populateLockerSelect(locker.zone, lockerNumber);
            document.getElementById('modal').classList.add('active');
        }


    
    
    Gestion des Casiers
    


    

Gestion des Casiers

⚪ Vérification...

Zone NORD (N01 à N75)

N° Casier Nom Prénom Code ID Date de naissance Statut Actions

Zone SUD (S01 à S75)

N° Casier Nom Prénom Code ID Date de naissance Statut Actions

Zone PCA (PCA01 à PCA40)

N° Casier Nom Prénom Code ID Date de naissance Statut Actions
✓ À jour