Merge branch 'main' of https://github.com/Charles40130/Projet-Dev-Web-Ing1
This commit is contained in:
commit
76d5e02d4c
@ -9,8 +9,14 @@ const th = `${thTd} bg-gray-100`;
|
|||||||
function User() {
|
function User() {
|
||||||
const [users, setUsers] = useState([]);
|
const [users, setUsers] = useState([]);
|
||||||
const [logs, setLogs] = useState([]);
|
const [logs, setLogs] = useState([]);
|
||||||
|
|
||||||
const [name, setname] = useState("");
|
const [name, setname] = useState("");
|
||||||
|
const [surname, setSurname] = useState("");
|
||||||
|
const [pseudo, setPseudo] = useState("");
|
||||||
const [email, setEmail] = useState("");
|
const [email, setEmail] = useState("");
|
||||||
|
const [password, setPassword] = useState("");
|
||||||
|
const [gender, setGender] = useState("Homme");
|
||||||
|
|
||||||
const [pointsInput, setPointsInput] = useState({});
|
const [pointsInput, setPointsInput] = useState({});
|
||||||
|
|
||||||
const handleAddUser = (e) => {
|
const handleAddUser = (e) => {
|
||||||
@ -18,20 +24,32 @@ function User() {
|
|||||||
const newUser = {
|
const newUser = {
|
||||||
id: Date.now(),
|
id: Date.now(),
|
||||||
name,
|
name,
|
||||||
|
surname,
|
||||||
|
pseudo,
|
||||||
email,
|
email,
|
||||||
|
password,
|
||||||
|
gender,
|
||||||
accessLevel: "User",
|
accessLevel: "User",
|
||||||
points: 0,
|
points: 0,
|
||||||
};
|
};
|
||||||
setUsers([...users, newUser]);
|
setUsers([...users, newUser]);
|
||||||
logAction(name, "Utilisateur ajouté");
|
logAction(name, "Utilisateur ajouté");
|
||||||
|
|
||||||
|
// Réinitialisation du formulaire
|
||||||
setname("");
|
setname("");
|
||||||
|
setSurname("");
|
||||||
|
setPseudo("");
|
||||||
setEmail("");
|
setEmail("");
|
||||||
|
setPassword("");
|
||||||
|
setGender("Homme");
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
axios.get(`${API_BASE_URL}/users`).then((response) => {
|
axios.get(`${API_BASE_URL}/users`).then((response) => {
|
||||||
setUsers(response.data);
|
setUsers(response.data);
|
||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const handleDeleteUser = (userId) => {
|
const handleDeleteUser = (userId) => {
|
||||||
const user = users.find((u) => u.id === userId);
|
const user = users.find((u) => u.id === userId);
|
||||||
|
|
||||||
@ -50,10 +68,7 @@ function User() {
|
|||||||
window.location.reload();
|
window.location.reload();
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error(
|
console.error("Erreur lors de la suppression de l'utilisateur :", error);
|
||||||
"Erreur lors de la suppression de l'utilisateur :",
|
|
||||||
error
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
logAction(user.name, "Utilisateur supprimé");
|
logAction(user.name, "Utilisateur supprimé");
|
||||||
@ -68,7 +83,7 @@ function User() {
|
|||||||
const handleChangeAccessLevel = (userId, newLevel) => {
|
const handleChangeAccessLevel = (userId, newLevel) => {
|
||||||
setUsers(
|
setUsers(
|
||||||
users.map((user) => {
|
users.map((user) => {
|
||||||
if (user.id === userId && newLevel != user.role) {
|
if (user.id === userId && newLevel !== user.role) {
|
||||||
const oldLevel = user.role;
|
const oldLevel = user.role;
|
||||||
user.role = newLevel;
|
user.role = newLevel;
|
||||||
if (user.role === "user") {
|
if (user.role === "user") {
|
||||||
@ -91,10 +106,7 @@ function User() {
|
|||||||
alert("Il y a eu une erreur dans le changement de niveau !");
|
alert("Il y a eu une erreur dans le changement de niveau !");
|
||||||
console.error("Erreur lors du changement de niveau :", error);
|
console.error("Erreur lors du changement de niveau :", error);
|
||||||
});
|
});
|
||||||
logAction(
|
logAction(user.name, `Niveau d'accès changé de ${oldLevel} à ${newLevel}`);
|
||||||
user.name,
|
|
||||||
`Niveau d'accés changé de ${oldLevel} à ${newLevel}`
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return user;
|
return user;
|
||||||
})
|
})
|
||||||
@ -113,14 +125,14 @@ function User() {
|
|||||||
points: user.points,
|
points: user.points,
|
||||||
})
|
})
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
alert("Les points ont bien été enregistré !");
|
alert("Les points ont bien été enregistrés !");
|
||||||
console.log("Ajout des points réussit :", response.data);
|
console.log("Ajout des points réussi :", response.data);
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
alert("Il y a eu une erreur dans l'ajout des points!");
|
alert("Il y a eu une erreur dans l'ajout des points !");
|
||||||
console.error("Erreur lors de l'ajout des points :", error);
|
console.error("Erreur lors de l'ajout des points :", error);
|
||||||
});
|
});
|
||||||
logAction(user.name, `Points ajustés par ${pointsToAdd}`);
|
logAction(user.name, `Points ajustés à ${pointsToAdd}`);
|
||||||
}
|
}
|
||||||
return user;
|
return user;
|
||||||
})
|
})
|
||||||
@ -145,7 +157,7 @@ function User() {
|
|||||||
link.click();
|
link.click();
|
||||||
document.body.removeChild(link);
|
document.body.removeChild(link);
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex min-h-screen">
|
<div className="flex min-h-screen">
|
||||||
<Sidebar />
|
<Sidebar />
|
||||||
@ -155,31 +167,62 @@ function User() {
|
|||||||
Gestion des utilisateurs
|
Gestion des utilisateurs
|
||||||
</h1>
|
</h1>
|
||||||
<p>Gérez les utilisateurs à partir de ce panneau.</p>
|
<p>Gérez les utilisateurs à partir de ce panneau.</p>
|
||||||
|
|
||||||
<form
|
<form
|
||||||
className="gap-3 mb-5 grid grid-cols-[1fr_1fr_auto]"
|
className="gap-3 mb-5 grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6"
|
||||||
onSubmit={handleAddUser}
|
onSubmit={handleAddUser}
|
||||||
>
|
>
|
||||||
<input
|
<input
|
||||||
className="p-3 border rounded-md"
|
className="p-3 border rounded-md"
|
||||||
type="text"
|
type="text"
|
||||||
id="name"
|
placeholder="Nom"
|
||||||
placeholder="name"
|
|
||||||
value={name}
|
value={name}
|
||||||
onChange={(e) => setname(e.target.value)}
|
onChange={(e) => setname(e.target.value)}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
|
<input
|
||||||
|
className="p-3 border rounded-md"
|
||||||
|
type="text"
|
||||||
|
placeholder="Prénom"
|
||||||
|
value={surname}
|
||||||
|
onChange={(e) => setSurname(e.target.value)}
|
||||||
|
required
|
||||||
|
/>
|
||||||
|
<input
|
||||||
|
className="p-3 border rounded-md"
|
||||||
|
type="text"
|
||||||
|
placeholder="Pseudo"
|
||||||
|
value={pseudo}
|
||||||
|
onChange={(e) => setPseudo(e.target.value)}
|
||||||
|
required
|
||||||
|
/>
|
||||||
<input
|
<input
|
||||||
className="p-3 border rounded-md"
|
className="p-3 border rounded-md"
|
||||||
type="email"
|
type="email"
|
||||||
id="email"
|
|
||||||
placeholder="Email"
|
placeholder="Email"
|
||||||
value={email}
|
value={email}
|
||||||
onChange={(e) => setEmail(e.target.value)}
|
onChange={(e) => setEmail(e.target.value)}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
|
<input
|
||||||
|
className="p-3 border rounded-md"
|
||||||
|
type="password"
|
||||||
|
placeholder="Mot de passe"
|
||||||
|
value={password}
|
||||||
|
onChange={(e) => setPassword(e.target.value)}
|
||||||
|
required
|
||||||
|
/>
|
||||||
|
<select
|
||||||
|
className="p-3 border rounded-md"
|
||||||
|
value={gender}
|
||||||
|
onChange={(e) => setGender(e.target.value)}
|
||||||
|
>
|
||||||
|
<option value="Homme">Homme</option>
|
||||||
|
<option value="Femme">Femme</option>
|
||||||
|
<option value="Autre">Autre</option>
|
||||||
|
</select>
|
||||||
<button
|
<button
|
||||||
className="p-3 bg-green-600 text-white border-none rounded-md "
|
className="p-3 bg-green-600 text-white border-none rounded-md col-span-full md:col-span-1"
|
||||||
type="submit"
|
type="submit"
|
||||||
>
|
>
|
||||||
Ajouter utilisateur
|
Ajouter utilisateur
|
||||||
@ -189,19 +232,25 @@ function User() {
|
|||||||
<table className="w-full">
|
<table className="w-full">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th className={`${th}`}>Nom</th>
|
<th className={th}>Nom</th>
|
||||||
<th className={`${th}`}>Email</th>
|
<th className={th}>Prénom</th>
|
||||||
<th className={`${th}`}>Niveau d'accès</th>
|
<th className={th}>Pseudo</th>
|
||||||
<th className={`${th}`}>Points</th>
|
<th className={th}>Email</th>
|
||||||
<th className={`${th}`}>Actions</th>
|
<th className={th}>Genre</th>
|
||||||
|
<th className={th}>Niveau d'accès</th>
|
||||||
|
<th className={th}>Points</th>
|
||||||
|
<th className={th}>Actions</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{users.map((user) => (
|
{users.map((user) => (
|
||||||
<tr key={user.id}>
|
<tr key={user.id}>
|
||||||
<td className={`${thTd}`}>{user.name}</td>
|
<td className={thTd}>{user.name}</td>
|
||||||
<td className={`${thTd}`}>{user.email}</td>
|
<td className={thTd}>{user.surname}</td>
|
||||||
<td className={`${thTd}`}>
|
<td className={thTd}>{user.pseudo}</td>
|
||||||
|
<td className={thTd}>{user.email}</td>
|
||||||
|
<td className={thTd}>{user.gender}</td>
|
||||||
|
<td className={thTd}>
|
||||||
<select
|
<select
|
||||||
value={user.role}
|
value={user.role}
|
||||||
onChange={(e) =>
|
onChange={(e) =>
|
||||||
@ -214,7 +263,7 @@ function User() {
|
|||||||
<option value="complexe">Complexe</option>
|
<option value="complexe">Complexe</option>
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
<td className={`${thTd}`}>
|
<td className={thTd}>
|
||||||
<input
|
<input
|
||||||
className="border ml-4 w-16"
|
className="border ml-4 w-16"
|
||||||
type="number"
|
type="number"
|
||||||
@ -234,7 +283,7 @@ function User() {
|
|||||||
Changer
|
Changer
|
||||||
</button>
|
</button>
|
||||||
</td>
|
</td>
|
||||||
<td className={`${thTd}`}>
|
<td className={thTd}>
|
||||||
<button
|
<button
|
||||||
className="p-2 bg-red-600 text-white border-none rounded-md"
|
className="p-2 bg-red-600 text-white border-none rounded-md"
|
||||||
onClick={() => handleDeleteUser(user.id)}
|
onClick={() => handleDeleteUser(user.id)}
|
||||||
@ -255,17 +304,17 @@ function User() {
|
|||||||
<table className="w-full">
|
<table className="w-full">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th className={`${th}`}>Nom</th>
|
<th className={th}>Nom</th>
|
||||||
<th className={`${th}`}>Action</th>
|
<th className={th}>Action</th>
|
||||||
<th className={`${th}`}>Timestamp</th>
|
<th className={th}>Timestamp</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{logs.map((log) => (
|
{logs.map((log) => (
|
||||||
<tr key={log.id}>
|
<tr key={log.id}>
|
||||||
<td className={`${thTd}`}>{log.name}</td>
|
<td className={thTd}>{log.name}</td>
|
||||||
<td className={`${thTd}`}>{log.action}</td>
|
<td className={thTd}>{log.action}</td>
|
||||||
<td className={`${thTd}`}>{log.timestamp}</td>
|
<td className={thTd}>{log.timestamp}</td>
|
||||||
</tr>
|
</tr>
|
||||||
))}
|
))}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user