|
- {obj.nom}
+ {obj.name}
|
{obj.description}
@@ -341,10 +203,10 @@ function AdminObjet() {
{obj.type}
|
- {obj.localisation}
+ {obj.location}
|
- {obj.proprietaire}
+ {obj.proprio}
|
{obj.status}
diff --git a/Front-end/src/pages/Admin/Dashboard.jsx b/Front-end/src/pages/Admin/Dashboard.jsx
index 2015ff5..0d823f4 100644
--- a/Front-end/src/pages/Admin/Dashboard.jsx
+++ b/Front-end/src/pages/Admin/Dashboard.jsx
@@ -1,6 +1,8 @@
import React, { useState } from "react";
import Sidebar from "./sidebar.jsx";
import { RadioTower, ArrowRight, BadgePlus, Settings } from "lucide-react";
+import { API_BASE_URL } from "../../config.js";
+import axios from "axios";
// Widgets initiaux pour le dashboard
const initialWidgets = [
@@ -109,7 +111,13 @@ function Dashboard() {
setWidgets([...widgets, newWidget]);
setShowAddWidgetModal(false);
};
-
+ /*
+ useEffect(() => {
+ axios.get(`${API_BASE_URL}/users`).then((response) => {
+ setUsers(response.data);
+ });
+ }, []);
+ */
return (
@@ -148,10 +156,10 @@ function Dashboard() {
{widget.type === "summary" && (
- Dashboard Summary
+ Résumé du tableau de bord
- Total Users
+ Total Utilisateur
{users.length}
@@ -167,6 +175,7 @@ function Dashboard() {
)}
+
{widget.type === "users" && (
@@ -222,6 +231,7 @@ function Dashboard() {
)}
+
{widget.type === "objects" && (
@@ -339,4 +349,4 @@ function Dashboard() {
);
}
-export default Dashboard;
+export default Dashboard;
\ No newline at end of file
diff --git a/Front-end/src/pages/Admin/User.jsx b/Front-end/src/pages/Admin/User.jsx
index db131ff..235e35f 100644
--- a/Front-end/src/pages/Admin/User.jsx
+++ b/Front-end/src/pages/Admin/User.jsx
@@ -1,10 +1,16 @@
-import React, { useState } from "react";
+import React, { useState, useEffect } from "react";
import Sidebar from "./sidebar.jsx";
+import { API_BASE_URL } from "../../config.js";
+import axios from "axios";
+
+// Définition de styles utilisés (si nécessaire – vous pouvez convertir ces styles en classes Tailwind)
+const thTd = "p-2 border border-gray-300 text-left";
+const th = `${thTd} bg-gray-100`;
function User() {
const [users, setUsers] = useState([]);
const [logs, setLogs] = useState([]);
- const [username, setUsername] = useState("");
+ const [name, setName] = useState("");
const [email, setEmail] = useState("");
const [pointsInput, setPointsInput] = useState({});
@@ -12,70 +18,113 @@ function User() {
const handleAddUser = (e) => {
e.preventDefault();
const newUser = {
- id: Date.now(),
- username,
+ id: Date.now(), // ID généré temporairement ; en production, il sera géré par la BDD.
+ name,
email,
- accessLevel: "User", // Niveau d'accès par défaut
+ accessLevel: "User",
points: 0,
};
setUsers([...users, newUser]);
- logAction(username, "User added");
- setUsername("");
+ logAction(name, "User added");
+ setName("");
setEmail("");
+ // TODO : Envoyer newUser à l'API si nécessaire.
};
+ // Chargement des utilisateurs depuis l'API au montage du composant
+ useEffect(() => {
+ axios
+ .get(`${API_BASE_URL}/users`)
+ .then((response) => setUsers(response.data))
+ .catch((error) =>
+ console.error("Erreur lors de la récupération des utilisateurs:", error)
+ );
+ }, []);
+
// Suppression d'un utilisateur
const handleDeleteUser = (userId) => {
const user = users.find((u) => u.id === userId);
if (user) {
- logAction(user.username, "User deleted");
+ logAction(user.name, "User deleted");
}
setUsers(users.filter((u) => u.id !== userId));
+ // TODO : Envoyer la suppression au backend.
};
- // Changement du niveau d'accès via le menu déroulant
+ // Changement du niveau d'accès
const handleChangeAccessLevel = (userId, newLevel) => {
setUsers(
users.map((user) => {
- if (user.id === userId) {
+ if (user.id === userId && newLevel !== user.accessLevel) {
const oldLevel = user.accessLevel;
user.accessLevel = newLevel;
- logAction(
- user.username,
- `Access level changed from ${oldLevel} to ${newLevel}`
- );
+ // Exemple de remise à zéro ou affectation de points en fonction du rôle :
+ if (newLevel === "user") {
+ user.points = 0;
+ } else if (newLevel === "complexe") {
+ user.points = 60;
+ } else if (newLevel === "admin") {
+ user.points = 100;
+ }
+ axios
+ .post(`${API_BASE_URL}/setUserPoints`, {
+ id: user.id,
+ points: user.points,
+ })
+ .then((response) => {
+ alert("Le changement de niveau a bien été enregistré !");
+ console.log("Niveau changé:", response.data);
+ })
+ .catch((error) => {
+ alert("Erreur lors du changement de niveau !");
+ console.error(error);
+ });
+ logAction(user.name, `Access level changed from ${oldLevel} to ${newLevel}`);
}
return user;
})
);
};
- // Ajustement des points d'un utilisateur
+ // Ajustement des points : additionne les points saisis aux points existants
const handleAdjustPoints = (userId) => {
const pointsToAdd = parseInt(pointsInput[userId]) || 0;
setUsers(
users.map((user) => {
if (user.id === userId) {
- user.points += pointsToAdd;
- logAction(user.username, `Points adjusted by ${pointsToAdd}`);
+ // On additionne au lieu de remplacer
+ user.points = (user.points || 0) + pointsToAdd;
+ axios
+ .post(`${API_BASE_URL}/setUserPoints`, {
+ id: user.id,
+ points: user.points,
+ })
+ .then((response) => {
+ alert("Les points ont bien été enregistrés !");
+ console.log("Points mis à jour :", response.data);
+ })
+ .catch((error) => {
+ alert("Erreur lors de l'ajustement des points !");
+ console.error(error);
+ });
+ logAction(user.name, `Points adjusted by ${pointsToAdd}, new total: ${user.points}`);
}
return user;
})
);
- // Réinitialiser l'input pour cet utilisateur
setPointsInput({ ...pointsInput, [userId]: "" });
};
// Fonction de journalisation des actions
- const logAction = (username, action) => {
+ const logAction = (name, action) => {
const timestamp = new Date().toLocaleString();
- setLogs([...logs, { id: Date.now(), username, action, timestamp }]);
+ setLogs([...logs, { id: Date.now(), name, action, timestamp }]);
};
- // Fonction pour générer et télécharger le fichier txt des logs
+ // Fonction pour générer et télécharger les logs dans un fichier texte
const downloadLogs = () => {
const logText = logs
- .map((log) => `${log.timestamp} - ${log.username} - ${log.action}`)
+ .map((log) => `${log.timestamp} - ${log.name} - ${log.action}`)
.join("\n");
const blob = new Blob([logText], { type: "text/plain;charset=utf-8" });
const link = document.createElement("a");
@@ -95,17 +144,17 @@ function User() {
Gérez les utilisateurs à partir de ce panneau.
{/* Formulaire d'ajout d'utilisateur */}
{/* Tableau des utilisateurs */}
-
+
- |
- Username
- |
-
- Email
- |
-
- Access Level
- |
-
- Points
- |
-
- Actions
- |
+ Nom |
+ Email |
+ Niveau d'accès |
+ Points |
+ Actions |
{users.map((user) => (
- |
- {user.username}
- |
-
- {user.email}
- |
-
+ | {user.name} |
+ {user.email} |
+
|
-
- {user.points}
+ |
setPointsInput({
...pointsInput,
[user.id]: e.target.value,
})
}
- className="w-[60px] ml-2.5 p-1 border border-gray-300 rounded-md"
+ className="w-16 ml-2 p-1 border border-gray-300 rounded-md"
/>
|
-
+ |
|
@@ -203,40 +236,27 @@ function User() {
{/* Tableau des logs */}
-
- Login History and Action Logs
+
+ Historique des connexions et journal des logs
-
+
- |
- Username
- |
-
- Action
- |
-
- Timestamp
- |
+ Nom |
+ Action |
+ Timestamp |
{logs.map((log) => (
- |
- {log.username}
- |
-
- {log.action}
- |
-
- {log.timestamp}
- |
+ {log.name} |
+ {log.action} |
+ {log.timestamp} |
))}
- {/* Bouton de téléchargement des logs */}
|