connexion avec signalR
This commit is contained in:
153
renderer.js
153
renderer.js
@@ -65,9 +65,41 @@ document.addEventListener('DOMContentLoaded', async () => {
|
||||
ipcRenderer.on('incoming-call', (event, callData) => {
|
||||
handleIncomingCall(callData);
|
||||
});
|
||||
|
||||
// Écouter les événements SignalR de basculement de centre
|
||||
ipcRenderer.on('switch-to-center', (event, data) => {
|
||||
console.log('Basculement vers le centre:', data.centreName);
|
||||
|
||||
// Trouver le centre et basculer automatiquement
|
||||
const centre = currentCentres.find(c => c.id === data.centreId);
|
||||
if (centre) {
|
||||
selectCenter(data.centreId);
|
||||
|
||||
// Afficher une notification
|
||||
showNotification(`Appel entrant sur ${data.centreName}`, 'info');
|
||||
|
||||
// Mettre à jour le statut
|
||||
updateAgentStatus('EN APPEL');
|
||||
}
|
||||
});
|
||||
|
||||
// Écouter la libération de centre après raccrochage
|
||||
ipcRenderer.on('release-center', (event, data) => {
|
||||
console.log('Libération de la file:', data.queueName);
|
||||
|
||||
// Mettre à jour le statut
|
||||
updateAgentStatus('DISPONIBLE');
|
||||
|
||||
// Incrementer le compteur d'appels
|
||||
callStats.calls++;
|
||||
updateCallStats();
|
||||
|
||||
// Afficher une notification
|
||||
showNotification('Appel terminé', 'success');
|
||||
});
|
||||
});
|
||||
|
||||
// Connexion
|
||||
// Connexion via SignalR
|
||||
async function handleLogin(e) {
|
||||
e.preventDefault();
|
||||
|
||||
@@ -75,6 +107,7 @@ async function handleLogin(e) {
|
||||
const password = document.getElementById('password').value;
|
||||
const terminal = document.getElementById('terminal').value;
|
||||
const errorDiv = document.getElementById('loginError');
|
||||
const loginBtn = document.querySelector('#loginForm button[type="submit"]');
|
||||
|
||||
// Vérifier que le terminal est sélectionné et valide
|
||||
if (!terminal) {
|
||||
@@ -91,24 +124,38 @@ async function handleLogin(e) {
|
||||
// Sauvegarder le terminal sélectionné pour la prochaine fois
|
||||
localStorage.setItem('last-terminal', terminal);
|
||||
|
||||
// Pour l'instant, utiliser l'authentification locale (simulation)
|
||||
// TODO: Intégrer l'authentification SignalR
|
||||
const config = await ipcRenderer.invoke('get-config');
|
||||
const agent = config.agents.find(a =>
|
||||
a.email === `${accessCode}@callcenter.fr` &&
|
||||
a.password === password
|
||||
);
|
||||
// Désactiver le bouton pendant la connexion
|
||||
loginBtn.disabled = true;
|
||||
loginBtn.textContent = 'Connexion en cours...';
|
||||
errorDiv.textContent = '';
|
||||
|
||||
if (agent) {
|
||||
currentAgent = agent;
|
||||
currentAgent.terminal = terminal; // Ajouter le terminal sélectionné
|
||||
currentCentres = config.centres.filter(c =>
|
||||
agent.centresAssignes.includes(c.id)
|
||||
);
|
||||
errorDiv.textContent = '';
|
||||
showMainPage();
|
||||
} else {
|
||||
errorDiv.textContent = 'Code d\'accès ou mot de passe incorrect';
|
||||
try {
|
||||
// Préparer les credentials pour SignalR
|
||||
const credentials = {
|
||||
email: accessCode, // Utiliser directement le code agent comme email
|
||||
password: password,
|
||||
terminal: terminal
|
||||
};
|
||||
|
||||
// Appeler l'authentification SignalR
|
||||
const result = await ipcRenderer.invoke('login-agent', credentials);
|
||||
|
||||
if (result.success) {
|
||||
currentAgent = result.agent;
|
||||
currentCentres = result.centres;
|
||||
errorDiv.textContent = '';
|
||||
console.log('Connexion réussie:', currentAgent.name, 'sur le poste', terminal);
|
||||
showMainPage();
|
||||
} else {
|
||||
errorDiv.textContent = result.message || 'Identifiants incorrects';
|
||||
loginBtn.disabled = false;
|
||||
loginBtn.textContent = 'Se connecter';
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la connexion:', error);
|
||||
errorDiv.textContent = 'Erreur de connexion. Veuillez réessayer.';
|
||||
loginBtn.disabled = false;
|
||||
loginBtn.textContent = 'Se connecter';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -421,6 +468,76 @@ function playNotificationSound() {
|
||||
oscillator.stop(audioContext.currentTime + 0.2);
|
||||
}
|
||||
|
||||
// Fonction pour mettre à jour le statut de l'agent
|
||||
function updateAgentStatus(status) {
|
||||
const statusElement = document.getElementById('statusText');
|
||||
const indicatorElement = document.getElementById('statusIndicator');
|
||||
|
||||
if (statusElement && indicatorElement) {
|
||||
switch(status) {
|
||||
case 'DISPONIBLE':
|
||||
updateStatus('available');
|
||||
break;
|
||||
case 'EN APPEL':
|
||||
updateStatus('incall');
|
||||
break;
|
||||
case 'HORS LIGNE':
|
||||
updateStatus('offline');
|
||||
break;
|
||||
default:
|
||||
statusElement.textContent = status;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fonction pour afficher une notification
|
||||
function showNotification(message, type = 'info') {
|
||||
// Créer un élément de notification temporaire
|
||||
const notification = document.createElement('div');
|
||||
notification.className = `notification notification-${type}`;
|
||||
notification.textContent = message;
|
||||
|
||||
// Styles de base pour la notification
|
||||
notification.style.cssText = `
|
||||
position: fixed;
|
||||
top: 20px;
|
||||
right: 20px;
|
||||
padding: 15px 20px;
|
||||
background: ${type === 'success' ? '#4caf50' : type === 'error' ? '#f44336' : '#2196f3'};
|
||||
color: white;
|
||||
border-radius: 5px;
|
||||
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
|
||||
z-index: 10000;
|
||||
animation: slideIn 0.3s ease;
|
||||
`;
|
||||
|
||||
document.body.appendChild(notification);
|
||||
|
||||
// Retirer la notification après 3 secondes
|
||||
setTimeout(() => {
|
||||
notification.style.animation = 'slideOut 0.3s ease';
|
||||
setTimeout(() => notification.remove(), 300);
|
||||
}, 3000);
|
||||
|
||||
// Jouer un son si c'est une notification d'appel
|
||||
if (type === 'info' && message.includes('Appel entrant')) {
|
||||
playNotificationSound();
|
||||
}
|
||||
}
|
||||
|
||||
// Fonction pour mettre à jour les statistiques d'appels
|
||||
function updateCallStats() {
|
||||
const callCountElement = document.getElementById('callCount');
|
||||
const appointmentCountElement = document.getElementById('appointmentCount');
|
||||
|
||||
if (callCountElement) {
|
||||
callCountElement.textContent = callStats.calls;
|
||||
}
|
||||
if (appointmentCountElement) {
|
||||
appointmentCountElement.textContent = callStats.appointments;
|
||||
}
|
||||
}
|
||||
|
||||
async function saveNotes() {
|
||||
const notes = document.getElementById('quickNotes').value;
|
||||
if (!notes.trim()) return;
|
||||
|
||||
Reference in New Issue
Block a user