Merge branch 'feature/saisie-manuelle-poste'
This commit is contained in:
@@ -1,5 +1,28 @@
|
|||||||
# Changelog - SimpleConnect Electron
|
# Changelog - SimpleConnect Electron
|
||||||
|
|
||||||
|
## [1.3.1] - 2025-10-17
|
||||||
|
|
||||||
|
### Ajouté
|
||||||
|
- **Saisie manuelle de postes téléphoniques personnalisés** : L'utilisateur peut désormais taper un numéro de poste qui n'est pas dans la liste officielle
|
||||||
|
- Activation de `addItems` et `addChoices` dans Choices.js pour les éléments `<select>`
|
||||||
|
- Validation de format numérique uniquement
|
||||||
|
- Avertissement visuel non-bloquant (5 secondes) si le poste n'est pas dans la liste officielle
|
||||||
|
- Textes UX explicites guidant l'utilisateur ("Rechercher ou saisir un poste...")
|
||||||
|
- Le serveur accepte tout numéro de poste valide
|
||||||
|
|
||||||
|
### Modifié
|
||||||
|
- **Affichage des terminaux simplifié** : Les numéros de postes s'affichent maintenant sans le préfixe "Poste"
|
||||||
|
- Affichage direct "2101" au lieu de "Poste 2101"
|
||||||
|
- Interface plus épurée et compacte
|
||||||
|
- Modifié dans Choices.js et dans tous les fallbacks natifs
|
||||||
|
|
||||||
|
### Corrigé
|
||||||
|
- **Contraste de l'élément survolé dans la liste déroulante** : Amélioration de la lisibilité
|
||||||
|
- Fond bleu clair (#e8f0fe) au lieu de bleu foncé (#667eea)
|
||||||
|
- Texte noir foncé (#1a1a1a) au lieu de blanc
|
||||||
|
- Poids de police semi-gras (500) pour meilleure lisibilité
|
||||||
|
- Résout le problème d'illisibilité lors de la navigation au clavier
|
||||||
|
|
||||||
## [1.3.0] - 2025-09-12
|
## [1.3.0] - 2025-09-12
|
||||||
|
|
||||||
### Ajouté
|
### Ajouté
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "simpleconnect-electron",
|
"name": "simpleconnect-electron",
|
||||||
"version": "1.3.0",
|
"version": "1.3.1",
|
||||||
"description": "Application de gestion centralisée des plannings médicaux pour centres d'appels",
|
"description": "Application de gestion centralisée des plannings médicaux pour centres d'appels",
|
||||||
"main": "main.js",
|
"main": "main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
54
renderer.js
54
renderer.js
@@ -157,17 +157,38 @@ async function handleLogin(e) {
|
|||||||
const loginBtn = document.querySelector('#loginForm button[type="submit"]');
|
const loginBtn = document.querySelector('#loginForm button[type="submit"]');
|
||||||
|
|
||||||
// Vérifier que le terminal est sélectionné et valide
|
// Vérifier que le terminal est sélectionné et valide
|
||||||
if (!terminal) {
|
if (!terminal || terminal.trim() === '') {
|
||||||
errorDiv.textContent = 'Veuillez sélectionner un poste téléphonique';
|
errorDiv.textContent = 'Veuillez sélectionner ou saisir un poste téléphonique';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Valider que le terminal existe dans la liste
|
// Valider le format du terminal (doit être numérique)
|
||||||
|
if (!/^\d+$/.test(terminal)) {
|
||||||
|
errorDiv.textContent = 'Le poste doit être un numéro (ex: 3001)';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Avertir si le poste n'est pas dans la liste officielle
|
||||||
if (!validateTerminal(terminal)) {
|
if (!validateTerminal(terminal)) {
|
||||||
errorDiv.textContent = 'Poste téléphonique invalide. Veuillez choisir un poste de la liste.';
|
console.log(`⚠️ Avertissement : Le poste ${terminal} n'est pas dans la liste officielle`);
|
||||||
return;
|
|
||||||
|
// Afficher un avertissement visuel temporaire
|
||||||
|
const warningDiv = document.createElement('div');
|
||||||
|
warningDiv.className = 'warning-message';
|
||||||
|
warningDiv.style.cssText = 'color: #ff9800; font-size: 0.9em; margin-top: 5px;';
|
||||||
|
warningDiv.textContent = `⚠️ Attention : Le poste ${terminal} n'est pas dans la liste officielle`;
|
||||||
|
|
||||||
|
// Insérer l'avertissement avant le message d'erreur
|
||||||
|
errorDiv.parentNode.insertBefore(warningDiv, errorDiv);
|
||||||
|
|
||||||
|
// Supprimer l'avertissement après 5 secondes
|
||||||
|
setTimeout(() => {
|
||||||
|
if (warningDiv.parentNode) {
|
||||||
|
warningDiv.remove();
|
||||||
|
}
|
||||||
|
}, 5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sauvegarder le terminal sélectionné pour la prochaine fois
|
// Sauvegarder le terminal sélectionné pour la prochaine fois
|
||||||
localStorage.setItem('last-terminal', terminal);
|
localStorage.setItem('last-terminal', terminal);
|
||||||
|
|
||||||
@@ -804,7 +825,7 @@ async function loadTerminals() {
|
|||||||
terminals.forEach(terminal => {
|
terminals.forEach(terminal => {
|
||||||
choicesData.push({
|
choicesData.push({
|
||||||
value: terminal.toString(),
|
value: terminal.toString(),
|
||||||
label: `Poste ${terminal}`
|
label: terminal.toString() // Affichage simple du numéro sans préfixe
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -827,7 +848,7 @@ async function loadTerminals() {
|
|||||||
terminals.forEach(terminal => {
|
terminals.forEach(terminal => {
|
||||||
const option = document.createElement('option');
|
const option = document.createElement('option');
|
||||||
option.value = terminal;
|
option.value = terminal;
|
||||||
option.textContent = `Poste ${terminal}`;
|
option.textContent = terminal.toString(); // Affichage simple du numéro sans préfixe
|
||||||
terminalSelect.appendChild(option);
|
terminalSelect.appendChild(option);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -841,15 +862,20 @@ async function loadTerminals() {
|
|||||||
// Créer une nouvelle instance Choices.js
|
// Créer une nouvelle instance Choices.js
|
||||||
terminalChoices = new window.Choices(terminalSelect, {
|
terminalChoices = new window.Choices(terminalSelect, {
|
||||||
searchEnabled: true,
|
searchEnabled: true,
|
||||||
searchPlaceholderValue: 'Rechercher un poste...',
|
addItems: true, // Permet l'ajout d'items
|
||||||
itemSelectText: '',
|
addChoices: true, // IMPORTANT: Pour les <select>, permet d'ajouter des choices personnalisés
|
||||||
noResultsText: 'Aucun poste trouvé',
|
searchPlaceholderValue: 'Rechercher ou saisir un poste...',
|
||||||
|
itemSelectText: 'Appuyez sur Entrée pour sélectionner',
|
||||||
|
noResultsText: 'Aucun poste trouvé. Appuyez sur Entrée pour utiliser ce numéro.',
|
||||||
noChoicesText: 'Aucun poste disponible',
|
noChoicesText: 'Aucun poste disponible',
|
||||||
|
addItemText: (value) => {
|
||||||
|
return `Utiliser le poste personnalisé : <b>${value}</b>`;
|
||||||
|
},
|
||||||
shouldSort: false,
|
shouldSort: false,
|
||||||
searchResultLimit: 20,
|
searchResultLimit: 20,
|
||||||
renderChoiceLimit: -1,
|
renderChoiceLimit: -1,
|
||||||
placeholder: true,
|
placeholder: true,
|
||||||
placeholderValue: 'Sélectionner un poste téléphonique',
|
placeholderValue: 'Sélectionner ou saisir un poste téléphonique',
|
||||||
choices: choicesData.length > 0 ? choicesData : [{value: '', label: 'Aucun poste disponible', disabled: true}],
|
choices: choicesData.length > 0 ? choicesData : [{value: '', label: 'Aucun poste disponible', disabled: true}],
|
||||||
searchFields: ['label', 'value'],
|
searchFields: ['label', 'value'],
|
||||||
fuseOptions: {
|
fuseOptions: {
|
||||||
@@ -903,7 +929,7 @@ async function loadTerminals() {
|
|||||||
terminals.forEach(terminal => {
|
terminals.forEach(terminal => {
|
||||||
const option = document.createElement('option');
|
const option = document.createElement('option');
|
||||||
option.value = terminal;
|
option.value = terminal;
|
||||||
option.textContent = `Poste ${terminal}`;
|
option.textContent = terminal.toString(); // Affichage simple du numéro sans préfixe
|
||||||
terminalSelect.appendChild(option);
|
terminalSelect.appendChild(option);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1192,6 +1192,7 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.choices__item--choice.is-highlighted {
|
.choices__item--choice.is-highlighted {
|
||||||
background: #667eea;
|
background: #e8f0fe !important; /* Bleu très clair pour meilleur contraste */
|
||||||
color: white;
|
color: #1a1a1a !important; /* Texte noir foncé */
|
||||||
|
font-weight: 500; /* Légèrement en gras pour lisibilité */
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user