diff --git a/public/css/components.css b/public/css/components.css
index 53f7229..f96a037 100644
--- a/public/css/components.css
+++ b/public/css/components.css
@@ -509,15 +509,29 @@
background: var(--color-background);
}
+.btn-edit-user,
.btn-delete-user {
padding: var(--spacing-sm) var(--spacing-md);
- background: var(--color-danger);
color: white;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 0.875rem;
transition: all var(--transition-speed);
+ margin-right: var(--spacing-sm);
+}
+
+.btn-edit-user {
+ background: var(--color-primary);
+}
+
+.btn-edit-user:hover {
+ background: #2980b9;
+ transform: translateY(-1px);
+}
+
+.btn-delete-user {
+ background: var(--color-danger);
}
.btn-delete-user:hover {
diff --git a/public/js/complete-app.js b/public/js/complete-app.js
index e2096b0..b80ea52 100644
--- a/public/js/complete-app.js
+++ b/public/js/complete-app.js
@@ -692,11 +692,14 @@ function renderUsersTable(users) {
${user.is_admin ? '✓ Oui' : '✗ Non'} |
${new Date(user.created_at).toLocaleDateString('fr-FR')} |
+
${user.id !== state.user.id ? `
- ` : 'Vous-même'}
+ ` : ''}
|
`).join('');
@@ -756,6 +759,32 @@ async function createUser() {
}
}
+async function changeUserPassword(id, username) {
+ const password = prompt(`Nouveau mot de passe pour "${username}" :`);
+
+ if (!password) return;
+
+ if (password.length < 6) {
+ alert('Le mot de passe doit contenir au moins 6 caractères');
+ return;
+ }
+
+ const confirmPassword = prompt('Confirmer le nouveau mot de passe :');
+
+ if (password !== confirmPassword) {
+ alert('Les mots de passe ne correspondent pas');
+ return;
+ }
+
+ try {
+ await api.put(`/api/users/${id}`, { password });
+ alert('Mot de passe modifié avec succès');
+ } catch (error) {
+ console.error('Erreur modification mot de passe:', error);
+ alert('Erreur lors de la modification du mot de passe');
+ }
+}
+
async function deleteUser(id, username) {
const confirmed = await confirmDialog.show({
icon: '⚠️',
@@ -899,11 +928,19 @@ async function init() {
});
}
- // Event delegation pour les boutons de suppression d'utilisateurs
+ // Event delegation pour les boutons d'administration des utilisateurs
const usersTableBody = document.getElementById('usersTableBody');
if (usersTableBody) {
usersTableBody.addEventListener('click', (e) => {
- if (e.target.classList.contains('btn-delete-user') || e.target.closest('.btn-delete-user')) {
+ // Bouton changer mot de passe
+ if (e.target.classList.contains('btn-edit-user') || e.target.closest('.btn-edit-user')) {
+ const btn = e.target.classList.contains('btn-edit-user') ? e.target : e.target.closest('.btn-edit-user');
+ const userId = parseInt(btn.dataset.userId);
+ const username = btn.dataset.username;
+ changeUserPassword(userId, username);
+ }
+ // Bouton supprimer utilisateur
+ else if (e.target.classList.contains('btn-delete-user') || e.target.closest('.btn-delete-user')) {
const btn = e.target.classList.contains('btn-delete-user') ? e.target : e.target.closest('.btn-delete-user');
const userId = parseInt(btn.dataset.userId);
const username = btn.dataset.username;