Maxence LANONE 3 years ago
commit fdf90aa4fa

1430
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -3,13 +3,27 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"@emotion/react": "^11.10.5",
"@emotion/styled": "^11.10.5",
"@fullcalendar/core": "^5.11.3",
"@fullcalendar/daygrid": "^5.11.3",
"@fullcalendar/list": "^5.11.3",
"@fullcalendar/react": "^5.11.2",
"@fullcalendar/timegrid": "^5.11.3",
"@mui/material": "^5.10.13",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"axios": "^1.1.3",
"chart": "^0.1.2",
"chart.js": "^3.9.1",
"crypto-js": "^4.1.1",
"date-fns": "^2.29.3",
"fullcalendar": "^5.11.3",
"pg": "^8.8.0",
"react": "^18.2.0",
"react-big-calendar": "^1.5.0",
"react-datepicker": "^4.8.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.4.2",
"react-scripts": "^5.0.1",

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

@ -58,6 +58,20 @@ app.get('/Customer/Id/:id', (req, res) => {
});
});
app.get('/User/Id/:id', (req, res) => {
const id = req.params.id;
let sql = 'SELECT lastname,firstname,phone,mail,login,idrole FROM users WHERE iduser = ?';
db.query(sql, [id], (err, result) => {
if (err) throw err;
console.log(result);
res.send(result);
});
});
app.get('/User/Auth/:login/:pwd', (req, res) => {
const login = req.params.login;
@ -72,6 +86,56 @@ app.get('/User/Auth/:login/:pwd', (req, res) => {
});
});
app.get('/User/Role/:login', (req, res) => {
const login = req.params.login;
let sql = 'SELECT idRole FROM users WHERE login = ?';
db.query(sql, [login], (err, result) => {
if (err) throw err;
console.log(result);
res.send(result);
});
});
app.get('/Role/All/', (req, res) => {
let sql = 'SELECT idRole,name FROM roles ORDER BY idRole';
db.query(sql, (err, result) => {
if (err) throw err;
console.log(result);
res.send(result);
});
});
app.get('/User/All', (req, res) => {
let sql = 'SELECT iduser,lastname,firstname,login,phone,mail,roles.name FROM users,roles where users.idrole = roles.idrole Order by roles.idrole,lastname,firstname;';
db.query(sql, (err, result) => {
if (err) throw err;
console.log(result);
res.send(result);
});
});
app.get('/User/Exist/:login', (req, res) => {
const login = req.params.login;
let sql = 'SELECT idUser FROM users WHERE login = ?';
db.query(sql, [login], (err, result) => {
if (err) throw err;
console.log(result);
res.send(result);
});
});
app.post('/User/Add', (req, res) => {
let form = req.body;

@ -15,14 +15,17 @@
"cors": "^2.8.5",
"express": "^4.18.2",
"mysql": "^2.18.1",
"nodemon": "^2.0.20",
"parser": "^0.1.4"
},
"devDependencies": {
"nodemon": "^2.0.20"
}
},
"node_modules/abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
},
"node_modules/accepts": {
"version": "1.3.8",
@ -40,6 +43,7 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dev": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@ -56,7 +60,8 @@
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
"node_modules/bignumber.js": {
"version": "9.0.0",
@ -70,6 +75,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true,
"engines": {
"node": ">=8"
}
@ -147,6 +153,7 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@ -156,6 +163,7 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@ -187,6 +195,7 @@
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
"funding": [
{
"type": "individual",
@ -212,7 +221,8 @@
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true
},
"node_modules/content-disposition": {
"version": "0.5.4",
@ -308,6 +318,7 @@
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"dependencies": {
"ms": "^2.1.1"
}
@ -445,6 +456,7 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@ -502,6 +514,7 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
@ -533,6 +546,7 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
@ -555,6 +569,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
"engines": {
"node": ">=4"
}
@ -604,7 +619,8 @@
"node_modules/ignore-by-default": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
"integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="
"integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
"dev": true
},
"node_modules/inherits": {
"version": "2.0.4",
@ -623,6 +639,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"dependencies": {
"binary-extensions": "^2.0.0"
},
@ -634,6 +651,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
@ -642,6 +660,7 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
@ -653,6 +672,7 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"engines": {
"node": ">=0.12.0"
}
@ -717,6 +737,7 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
},
@ -755,6 +776,7 @@
"version": "2.0.20",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz",
"integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==",
"dev": true,
"dependencies": {
"chokidar": "^3.5.2",
"debug": "^3.2.7",
@ -782,6 +804,7 @@
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
"integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
"dev": true,
"dependencies": {
"abbrev": "1"
},
@ -796,6 +819,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
@ -855,6 +879,7 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"engines": {
"node": ">=8.6"
},
@ -882,7 +907,8 @@
"node_modules/pstree.remy": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
"integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="
"integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
"dev": true
},
"node_modules/qs": {
"version": "6.11.0",
@ -938,6 +964,7 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"dependencies": {
"picomatch": "^2.2.1"
},
@ -964,6 +991,7 @@
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true,
"bin": {
"semver": "bin/semver"
}
@ -1040,6 +1068,7 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz",
"integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==",
"dev": true,
"dependencies": {
"semver": "~7.0.0"
},
@ -1051,6 +1080,7 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
"integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
}
@ -1088,6 +1118,7 @@
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"dependencies": {
"has-flag": "^3.0.0"
},
@ -1099,6 +1130,7 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
@ -1129,6 +1161,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
"integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
"dev": true,
"dependencies": {
"nopt": "~1.0.10"
},
@ -1151,7 +1184,8 @@
"node_modules/undefsafe": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
"integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="
"integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
"dev": true
},
"node_modules/unpipe": {
"version": "1.0.0",
@ -1187,7 +1221,8 @@
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
},
"accepts": {
"version": "1.3.8",
@ -1202,6 +1237,7 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dev": true,
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@ -1215,7 +1251,8 @@
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
"bignumber.js": {
"version": "9.0.0",
@ -1225,7 +1262,8 @@
"binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true
},
"body": {
"version": "5.1.0",
@ -1297,6 +1335,7 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@ -1306,6 +1345,7 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"requires": {
"fill-range": "^7.0.1"
}
@ -1328,6 +1368,7 @@
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
"requires": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@ -1342,7 +1383,8 @@
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true
},
"content-disposition": {
"version": "0.5.4",
@ -1413,6 +1455,7 @@
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"requires": {
"ms": "^2.1.1"
}
@ -1522,6 +1565,7 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
@ -1569,6 +1613,7 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"optional": true
},
"function-bind": {
@ -1590,6 +1635,7 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"requires": {
"is-glob": "^4.0.1"
}
@ -1605,7 +1651,8 @@
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
"has-symbols": {
"version": "1.0.3",
@ -1640,7 +1687,8 @@
"ignore-by-default": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
"integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="
"integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
"dev": true
},
"inherits": {
"version": "2.0.4",
@ -1656,6 +1704,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"requires": {
"binary-extensions": "^2.0.0"
}
@ -1663,12 +1712,14 @@
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true
},
"is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
@ -1676,7 +1727,8 @@
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
},
"isarray": {
"version": "1.0.0",
@ -1720,6 +1772,7 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@ -1749,6 +1802,7 @@
"version": "2.0.20",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz",
"integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==",
"dev": true,
"requires": {
"chokidar": "^3.5.2",
"debug": "^3.2.7",
@ -1766,6 +1820,7 @@
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
"integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
"dev": true,
"requires": {
"abbrev": "1"
}
@ -1773,7 +1828,8 @@
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
},
"object-assign": {
"version": "4.1.1",
@ -1814,7 +1870,8 @@
"picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true
},
"process-nextick-args": {
"version": "2.0.1",
@ -1833,7 +1890,8 @@
"pstree.remy": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
"integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="
"integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
"dev": true
},
"qs": {
"version": "6.11.0",
@ -1877,6 +1935,7 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"requires": {
"picomatch": "^2.2.1"
}
@ -1899,7 +1958,8 @@
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
"send": {
"version": "0.18.0",
@ -1968,6 +2028,7 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz",
"integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==",
"dev": true,
"requires": {
"semver": "~7.0.0"
},
@ -1975,7 +2036,8 @@
"semver": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
"integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A=="
"integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
"dev": true
}
}
},
@ -2006,6 +2068,7 @@
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
@ -2014,6 +2077,7 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"requires": {
"is-number": "^7.0.0"
}
@ -2035,6 +2099,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
"integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
"dev": true,
"requires": {
"nopt": "~1.0.10"
}
@ -2051,7 +2116,8 @@
"undefsafe": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
"integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="
"integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
"dev": true
},
"unpipe": {
"version": "1.0.0",

@ -15,8 +15,10 @@
"cors": "^2.8.5",
"express": "^4.18.2",
"mysql": "^2.18.1",
"nodemon": "^2.0.20",
"parser": "^0.1.4"
},
"description": ""
"description": "",
"devDependencies": {
"nodemon": "^2.0.20"
}
}

@ -2,24 +2,38 @@ import React from 'react';
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Compte from './pages/Compte';
import Connexion from './pages/Connexion';
import Admin from './pages/Admin.js';
import Admin_modif from './pages/Admin_modif.js';
import Admin_supp from './pages/Admin_supp.js';
import Admin_modif from './pages/Admin_modif';
import Admin_supp from './pages/Admin_supp';
import Dashboard from './pages/Dashboard';
import Analyse from './pages/Analyse';
import Admin_list from './pages/Admin_list';
import Admin_create from './pages/Admin_create';
import Calendrier from './pages/Calendrier';
import Repertoire from './pages/Repertoire';
import Parametres from './pages/Parametres';
const App = () => {
return (
<BrowserRouter>
<Routes>
<Routes>
<Route path="/" element={<Connexion />} />
<Route path="/Admin" element={<Admin />} />
<Route path="/Admin_create" element={<Admin_create />} />
<Route path="/Account" element={<Compte />} />
<Route path="/Admin_list" element={<Admin_list />} />
<Route path="/Admin_modif" element={<Admin_modif />} />
<Route path="/Admin_supp" element={<Admin_supp />} />
<Route path="/Dashboard" element={<Dashboard />} />
</Routes>
<Route path="/Analyse" element={<Analyse />} />
<Route path="/Calendrier" element={<Calendrier />} />
<Route path="/Repertoire" element={<Repertoire />} />
<Route path="/Parametres" element={<Parametres />} />
</Routes>
</BrowserRouter>
);
}
export default App;

@ -1,37 +1,29 @@
import React from 'react';
import { NavLink } from 'react-router-dom';
const NavigationAdmin = () => {
const NavigationAdmin = (props) => {
return (
<div className="nav_bar_verticale">
<img className="logo" srcSet="./LogoApp.svg"></img>
<NavLink className="create_user" to="/Admin">
<NavLink className="create_user" to="/Admin_create">
<button id="bouton_créer" className="bouton" type="button" value="Créer un utilisateur" onClick={changeColor}>Créer utilisateur</button>
</NavLink>
<NavLink className="modify_user" to="/Admin_modif">
<button id="bouton_modif" className="bouton" type="button" value="Modifier un utilisateur" onClick={changeColor2}>Modifier utilisateur</button>
<NavLink className="modify_user" to="/Admin_modif" state={{ iduser: props.iduser }}>
<button id="bouton_modif" className="bouton" type="button" value="Modifier un utilisateur" onClick={changeColor}>Modifier utilisateur</button>
</NavLink>
<NavLink className="delete_user" to="/Admin_supp">
<button id="bouton_sup" className="bouton" type="button" value="Supprimer un utilisateur" onClick={changeColor3}>Supprimer utilisateur</button>
<button id="bouton_sup" className="bouton" type="button" value="Supprimer un utilisateur" onClick={changeColor}>Supprimer utilisateur</button>
</NavLink>
</div>
);
};
function changeColor() {
let button = document.getElementById("bouton_créer");
button.style.backgroundColor = "rgb(170,170,170)";
}
function changeColor2() {
let button = document.getElementById("bouton_modif");
button.style.backgroundColor = "rgb(170,170,170)";
}
function changeColor3() {
let button = document.getElementById("bouton_sup");
button.style.backgroundColor = "rgb(170,170,170)";
function changeColor() {
let b1 = document.querySelector('button');
b1.style.backgroundColor = "rgb(170,170,170)";
}
export default NavigationAdmin;

@ -0,0 +1,55 @@
import React from 'react';
import { NavLink } from 'react-router-dom';
const NavigationDashboard = () => {
return (
<div className="nav_bar_verticale">
<NavLink className="mon_compte" to="/Account">
<div className="parti_one">
<button className="button" type="submit">
<img id='bigImage' className="logo_nav_bar" srcSet="./logo_person.svg"/>
</button>
</div>
</NavLink>
<NavLink className="dashboard" to="/Dashboard">
<div className="parti_two">
<button className="button" type="submit">
<img className="logo_nav_bar" srcSet="./logo_speed.svg"/>
</button>
<NavLink className="analyse" to="/Analyse">
<div className="parti_two">
<button className="button" type="submit">
<img className="logo_nav_bar" srcSet="./logo_graph.svg"/>
</button>
</div>
</NavLink>
<NavLink className="calendrier" to="/Calendrier">
<div className="parti_two">
<button className="button" type="submit">
<img className="logo_nav_bar" srcSet="./logo_calendrier.svg"/>
</button>
</div>
</NavLink>
</div>
</NavLink>
<NavLink className="repertoire" to="/Repertoire">
<div className="parti_three">
<button className="button" type="submit">
<img className="logo_nav_bar" srcSet="./logo_group.svg"/>
</button>
</div>
</NavLink>
<NavLink className="parametres" to="/Parametres">
<div className="parti_four">
<button className="button" type="submit">
<img className="logo_nav_bar" srcSet="./logo_parametre.svg"/>
</button>
</div>
</NavLink>
</div>
);
};
export default NavigationDashboard;

@ -1,64 +0,0 @@
import React from 'react';
import axios from 'axios'
import NavigationAdmin from '../components/NavigationAdmin.js';
const api = axios.create({
baseURL: 'http://localhost:8080'
})
function Admin() {
function checkAdd(event){
event.preventDefault();
const formData = new FormData(event.currentTarget);
const values = Object.fromEntries(formData.entries());
console.log(values.firstname);
api.post('/User/Add', values).then (function(response) {
console.log(response.data);
});
};
return (
<div className="page_admin">
<NavigationAdmin />
{/* Create a admin page */}
<div className="Titre_Formulaire">
<p className="Titre">Admin</p>
<div className="Formulaire">
<form className="form" onSubmit={checkAdd}>
<table className="Formulaire_de_connexion">
<tr>
<div className="texte_côté">
<p>Nom :</p>
<p>Prénom :</p>
<p>Rôle :</p>
<p>Identifiant :</p>
<p>Mot de passe :</p>
</div>
</tr>
<tr>
<input id="nom" name='lastname' className="texte_zone" type="text" placeholder="Nom..."/>
<input id="prénom" name='firstname' className="texte_zone" type="text" placeholder="Prénom..."/>
<input id="rôle" name='idrole' className="texte_zone" type="text" placeholder="Rôle..."/>
<input id="identifiant" name='login' className="texte_zone" type="text" placeholder="Identifiant..."/>
<input id="password" name='password' className="texte_zone" type="password" placeholder="Mot de passe (par default)..."/>
</tr>
</table>
<div className="bouton_submit">
<button className="bouton_val" type="submit">Valider</button>
<button className="bouton_ann" type='reset'>Annuler</button>
</div>
</form>
</div>
</div>
</div>
);
};
export default Admin;

@ -0,0 +1,111 @@
import React, { useState, useEffect } from 'react';
import axios from 'axios'
import NavigationAdmin from '../components/NavigationAdmin.js';
import CryptoJS from 'crypto-js';
import Select, { SelectChangeEvent } from '@mui/material/Select';
import MenuItem from '@mui/material/MenuItem';
import { NavLink } from 'react-router-dom';
import { useNavigate } from "react-router-dom";
import { Button } from '@mui/material';
const api = axios.create({
baseURL: 'http://localhost:8080'
})
function Admin_create() {
const [loginError, setLoginError] = useState(false);
const [roles, setRoles] = useState([]);
const [selectedIdRole, setSelectedIdRole] = useState(1);
const navigate = useNavigate();
useEffect(() =>{
api.get('/Role/All/').then((response) => {
setRoles(response.data);
});
}, []);
function handleChangeRole(event){
setSelectedIdRole(event.target.value);
};
function checkAdd(event){
event.preventDefault();
const formData = new FormData(event.currentTarget);
const values = Object.fromEntries(formData.entries());
{/* Verif value login exist déja */}
console.log(values.firstname);
api.get('/User/Exist/'+ values.login).then((response) => {
const login = response.data;
if (login.length > 0){
setLoginError(true);
}
else {
setLoginError(false);
values.password = CryptoJS.SHA256(values.password).toString(CryptoJS.enc.Hex);
api.post('/User/Add', values).then (function(response) {
console.log(response.data);
});
navigate("/Admin_list");
}
});
};
return (
<div className="page_admin">
{/*<NavigationAdmin />*/}
{/* Create a admin page */}
<div className="Titre_Formulaire">
<p className="Titre">Admin</p>
<p className="Sous-titre">Création d'utilisateur</p>
<div className="Formulaire">
<form className="form" onSubmit={checkAdd}>
<table className="Formulaire_de_connexion">
<tr>
<div className="texte_côté">
<p>Nom :</p>
<p>Prénom :</p>
<p>Téléphone :</p>
<p>Email :</p>
<p>Rôle :</p>
<p>Identifiant :</p>
<p>Mot de passe :</p>
</div>
</tr>
<tr>
<input id="nom" name='lastname' className="texte_zone" type="text" placeholder="Nom..." required/>
<input id="prenom" name='firstname' className="texte_zone" type="text" placeholder="Prénom..." required/>
<input id="phone" name='phone' className="texte_zone" type="tel"
placeholder="Téléphone..." pattern="[0-9]{10}" required/>
<input id="email" name='mail' className="texte_zone" type="email" placeholder="Email..." required/>
<Select
name='idrole'
value={selectedIdRole}
onChange={handleChangeRole}
>
{roles.map(role => (
<MenuItem value={role.idRole}>{role.name}</MenuItem>
))}
</Select>
<input id="identifiant" name='login' className="texte_zone" type="text" placeholder="Identifiant..." required/>
<input id="password" name='password' className="texte_zone" type="password" placeholder="Mot de passe..." required/>
</tr>
</table>
<p>{loginError === true?"L'identifiant existe déja":''}</p>
<div className="bouton_submit">
<button className="bouton_val" type="submit">Valider</button>
<NavLink className="bouton_ann" to="/Admin_list">Retour</NavLink>
</div>
</form>
</div>
</div>
</div>
);
};
export default Admin_create;

@ -0,0 +1,101 @@
import React, { useState, useEffect } from 'react';
import axios from 'axios'
import NavigationAdmin from '../components/NavigationAdmin.js';
import { TableContainer,Table,TableHead,TableBody,TableRow,TableCell } from '@mui/material';
import { Paper } from '@mui/material';
const api = axios.create({
baseURL: 'http://localhost:8080'
})
function Admin_list() {
const [users, setUsers] = useState([]);
const [selectedIdUser, setSelectedIdUser] = useState();
useEffect(() =>{
api.get('/User/All/').then((response) => {
setUsers(response.data);
setSelectedIdUser(response.data[0].iduser);
});
}, []);
const handleClick = (event, iduser) => {
setSelectedIdUser(iduser);
};
return (
<div className="page_admin">
<link rel="stylesheet" href="https://unicons.iconscout.com/release/v4.0.0/css/line.css"></link>
{/* Create a page to delete an user in the admin page*/}
<NavigationAdmin iduser={selectedIdUser}/>
<div className="Titre_Formulaire_Rech">
<p className="Titre">Admin</p>
<p className="Sous-titre">Liste des utilisateurs</p>
<div className="rechLogo">
<div className="input_box">
<input type="search" placeholder="Rechercher..."/>
<span className="search">
<i class="uil uil-search search-icon"></i>
</span>
</div>
{/*
<form className="formulaire">
<table className="Formulaire_de_recherche">
<tr className="tr_bouton">
<div className="bouton_personnes">
<p className="bouton_personne1">
<strong>Dupont Jacques</strong>
</p>
<p className="bouton_personne2">
<strong>Carreau Alexis</strong>
</p>
</div>
</tr>
<tr>
<div id="style" className='bouton_submit'>
<button className="bouton_sup" type="submit" onClick="document.getElementById('style').style.backgroundColor='green'">Supprimer</button>
<button className="bouton_ann" type="submit" onClick="document.getElementById('style').style.backgroundColor='red'">Annuler</button>
</div>
</tr>
</table>
</form>
*/}
<TableContainer component={Paper} sx={{ maxHeight: 0.8 }}>
<Table aria-label="simple table" size="small" stickyHeader>
<TableHead >
<TableRow>
<TableCell sx={{ bgcolor: 'info.main'}} align="left">Nom</TableCell>
<TableCell sx={{ bgcolor: 'info.main'}} align="center">Prénom</TableCell>
<TableCell sx={{ bgcolor: 'info.main'}} align="center">Identifiant</TableCell>
<TableCell sx={{ bgcolor: 'info.main'}} align="center">Téléphone</TableCell>
<TableCell sx={{ bgcolor: 'info.main'}} align="center">Email</TableCell>
<TableCell sx={{ bgcolor: 'info.main'}} align="center">Rôle</TableCell>
</TableRow>
</TableHead>
<TableBody >
{users.map((user) => (
<TableRow
key={user.iduser}
hover
onClick={(event) => handleClick(event, user.iduser)}
selected={user.iduser === selectedIdUser}
>
<TableCell align="left">{user.lastname}</TableCell>
<TableCell align="center">{user.firstname}</TableCell>
<TableCell align="center">{user.login}</TableCell>
<TableCell align="center">{user.phone}</TableCell>
<TableCell align="center">{user.mail}</TableCell>
<TableCell align="center">{user.name}</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</TableContainer>
</div>
</div>
</div>
);
};
export default Admin_list;

@ -1,14 +1,48 @@
import React from 'react';
import axios from 'axios'
import React, { useState, useEffect } from 'react';
import NavigationAdmin from '../components/NavigationAdmin.js';
import Admin from './Admin.js';
import Admin from './Admin_create.js';
import { useLocation } from "react-router-dom"
import Select, { SelectChangeEvent } from '@mui/material/Select';
import MenuItem from '@mui/material/MenuItem';
const api = axios.create({
baseURL: 'http://localhost:8080'
})
function Admin_modif() {
const location = useLocation();
const { iduser } = location.state;
const [currentUser, setCurrentUser] = useState([]);
const [roles, setRoles] = useState([]);
const [selectedIdRole, setSelectedIdRole] = useState(1);
useEffect(() =>{
const apiString = '/User/Id/' + iduser;
api.get(apiString).then((response) => {
setCurrentUser(response.data[0]);
setSelectedIdRole(response.data[0].idrole);
});
});
useEffect(() =>{
api.get('/Role/All/').then((response) => {
setRoles(response.data);
});
}, []);
function handleChangeRole(event){
setSelectedIdRole(event.target.value);
};
const Admin_modif = () => {
return (
<div className="page_admin">
<NavigationAdmin />
{/* Create a admin page */}
<div className="Titre_Formulaire">
<p className="Titre">Admin</p>
<p className="Sous-titre">Modification d'utilisateur</p>
<div className="Formulaire">
<form className="form">
<table className="Formulaire_de_connexion">
@ -18,15 +52,26 @@ const Admin_modif = () => {
<p>Prénom :</p>
<p>Rôle :</p>
<p>Identifiant :</p>
<p>Identifiant :</p>
<p>Mot de passe :</p>
</div>
</tr>
<tr>
<input id="nom" className="texte_zone" type="text" placeholder="Nom..."/>
<input id="prénom" className="texte_zone" type="text" placeholder="Prénom..."/>
<input id="rôle" className="texte_zone" type="text" placeholder="Rôle..."/>
<input id="identifiant" className="texte_zone" type="text" placeholder="Identifiant..."/>
<input id="password" className="texte_zone" type="password" placeholder="Mot de passe (par default)..."/>
<input id="nom" value={currentUser.lastname} name='lastname' className="texte_zone" type="text" placeholder="Nom..." required/>
<input id="prenom" value={currentUser.firstname} name="firstname" className="texte_zone" type="text" placeholder="Prénom..." required/>
<Select
name='idrole'
value={selectedIdRole}
onChange={handleChangeRole}
>
{roles.map(role => (
<MenuItem value={role.idRole}>{role.name}</MenuItem>
))}
</Select>
<input id="phone" value={currentUser.phone} name="phone" className="texte_zone" type="tel"
placeholder="Téléphone..." pattern="[0-9]{10}" required/>
<input id="email" value={currentUser.mail} name="mail" className="texte_zone" type="email" placeholder="Email..." required/>
<input id="identifiant" value={currentUser.login} name="login" className="texte_zone" type="text" placeholder="Identifiant..." required/>
</tr>
<tr>
<div className="button_submit">

@ -1,7 +1,29 @@
import React from 'react';
import React, { useState, useEffect } from 'react';
import axios from 'axios'
import NavigationAdmin from '../components/NavigationAdmin.js';
import { TableContainer,Table,TableHead,TableBody,TableRow,TableCell } from '@mui/material';
import { Paper } from '@mui/material';
const api = axios.create({
baseURL: 'http://localhost:8080'
})
const Admin_supp = () => {
const [users, setUsers] = useState([]);
const [selectedIdUser, setSelectedIdUser] = useState();
useEffect(() =>{
api.get('/User/All/').then((response) => {
setUsers(response.data);
setSelectedIdUser(response.data[0].iduser);
});
}, []);
const handleClick = (event, iduser) => {
setSelectedIdUser(iduser);
};
return (
<div className="page_admin">
<link rel="stylesheet" href="https://unicons.iconscout.com/release/v4.0.0/css/line.css"></link>
@ -9,6 +31,7 @@ const Admin_supp = () => {
<NavigationAdmin />
<div className="Titre_Formulaire_Rech">
<p className="Titre">Admin</p>
<p className="Sous-titre">Supression d'utilisateur</p>
<div className="rechLogo">
<div className="input_box">
<input type="search" placeholder="Rechercher..."/>
@ -16,6 +39,7 @@ const Admin_supp = () => {
<i class="uil uil-search search-icon"></i>
</span>
</div>
{/*
<form className="formulaire">
<table className="Formulaire_de_recherche">
<tr className="tr_bouton">
@ -36,6 +60,38 @@ const Admin_supp = () => {
</tr>
</table>
</form>
*/}
<TableContainer component={Paper} sx={{ maxHeight: 0.8 }}>
<Table aria-label="simple table" size="small" stickyHeader>
<TableHead >
<TableRow>
<TableCell sx={{ bgcolor: 'info.main'}} align="left">Nom</TableCell>
<TableCell sx={{ bgcolor: 'info.main'}} align="center">Prénom</TableCell>
<TableCell sx={{ bgcolor: 'info.main'}} align="center">Identifiant</TableCell>
<TableCell sx={{ bgcolor: 'info.main'}} align="center">Téléphone</TableCell>
<TableCell sx={{ bgcolor: 'info.main'}} align="center">Email</TableCell>
<TableCell sx={{ bgcolor: 'info.main'}} align="center">Rôle</TableCell>
</TableRow>
</TableHead>
<TableBody >
{users.map((user) => (
<TableRow
key={user.iduser}
hover
onClick={(event) => handleClick(event, user.iduser)}
selected={user.iduser === selectedIdUser}
>
<TableCell align="left">{user.lastname}</TableCell>
<TableCell align="center">{user.firstname}</TableCell>
<TableCell align="center">{user.login}</TableCell>
<TableCell align="center">{user.phone}</TableCell>
<TableCell align="center">{user.mail}</TableCell>
<TableCell align="center">{user.name}</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</TableContainer>
</div>
</div>
</div>

@ -0,0 +1,52 @@
import React from 'react';
import axios from 'axios'
import Chart from 'chart.js/auto'
import NavigationDashboard from '../components/NavigationDashboard';
window.Chart = Chart
const api = axios.create({
baseURL: 'http://localhost:8080'
})
const Analyse = () => {
return (
<body>
<link rel="stylesheet" href="https://unicons.iconscout.com/release/v4.0.0/css/line.css"></link>
<div className="page_analyse">
{/* Create an analysis page */}
<div className="haut_de_page">
<h2 className="titre">Analyse</h2>
<div className="rechLogo">
<div className="input_box">
<input type="search" placeholder="Rechercher..."/>
<span className="search">
<i class="uil uil-search search-icon"></i>
</span>
</div>
<img className="logo" srcSet="./LogoApp.svg"/>
</div>
</div>
<div className="bas_de_page">
<NavigationDashboard />
<div className="Analyse">
<div className="Stat_1">
Tendances des ventes
</div>
<div className="Stat_2">
Statistique n°2
</div>
</div>
</div>
</div>
</body>
);
};
export default Analyse;

@ -0,0 +1,87 @@
import React, { useState } from 'react';
import "react-datepicker/dist/react-datepicker.css";
import NavigationDashboard from '../components/NavigationDashboard';
import format from "date-fns/format";
import getDay from "date-fns/getDay";
import parse from "date-fns/parse";
import startOfWeek from "date-fns/startOfWeek";
import { Calendar, dateFnsLocalizer } from "react-big-calendar";
import "react-big-calendar/lib/css/react-big-calendar.css";
import DatePicker from "react-datepicker";
const locales = {
"en-US": require("date-fns/locale/en-US"),
};
const localizer = dateFnsLocalizer({
format,
parse,
startOfWeek,
getDay,
locales
});
const events = [
];
const Calendrier = () => {
const [newEvent, setNewEvent] = useState({title: "", start: "", end:""});
const [allEvents, setAllEvents] = useState(events);
function handleAddEvent() {
setAllEvents([...allEvents, newEvent]);
}
return (
<body>
<link rel="stylesheet" href="https://unicons.iconscout.com/release/v4.0.0/css/line.css"></link>
<div className="page_calendrier">
{/*Create a calendar page*/}
<div className="haut_de_page">
<h2 className="titre">Calendrier</h2>
<link href='fullcalendar/main.css' rel='stylesheet' />
<div className="rechLogo">
<div className="input_box">
<input type="search" placeholder="Rechercher..."/>
<span className="search">
<i class="uil uil-search search-icon"></i>
</span>
</div>
<img className="logo" srcSet="./LogoApp.svg"/>
</div>
</div>
<div className="bas_de_page">
<NavigationDashboard />
<div className="Calendrier">
<h2 className="Titre">Ajouter un évènement
<div className="mini_formulaire_evenement">
<input className="ajout_input" type="text" placeholder="Ajoutez un titre" style={{height: "20px", width: "100%", marginRight: "10px"}}
value={newEvent.Titre} onChange={(e) => setNewEvent({...newEvent, title: e.target.value})}/>
<DatePicker className="ajout_input" placeholderText="Date de début" style={{height: "20px", width: "100%", marginRight: "10px"}}
selected={newEvent.start} onChange={(start) => setNewEvent({...newEvent, start})} />
<DatePicker className="ajout_input" placeholderText="Date de fin" style={{height: "20px", width: "100%"}}
selected={newEvent.end} onChange={(end) => setNewEvent({...newEvent, end})} />
</div>
<button className="bouton_ajout" onClick={handleAddEvent}>
<p>Ajouter l'évènement</p>
</button>
</h2>
<Calendar localizer={localizer} events={allEvents}
startAccessor="start" endAccessor="end" style={{height: "100%", width:"99%"}}/>
</div>
</div>
</div>
</body>
);
};
export default Calendrier;

@ -1,4 +1,5 @@
import React from 'react';
import NavigationDashboard from '../components/NavigationDashboard';
const Compte = () => {
@ -22,34 +23,7 @@ const Compte = () => {
</div>
</div>
<div className="bas_de_page">
<div className="nav_bar_verticale">
<div className="parti_one">
<button className="button" type="submit">
<img className="logo_nav_bar" srcSet="./logo_person.svg"/>
</button>
</div>
<div className="parti_two">
<button className="button" type="submit">
<img className="logo_nav_bar" srcSet="./logo_speed.svg"/>
</button>
<button className="button" type="submit">
<img className="logo_nav_bar" srcSet="./logo_graph.svg"/>
</button>
<button className="button" type="submit">
<img className="logo_nav_bar" srcSet="./logo_calendrier.svg"/>
</button>
</div>
<div className="parti_three">
<button className="button" type="submit">
<img className="logo_nav_bar" srcSet="./logo_group.svg"/>
</button>
</div>
<div className="parti_four">
<button className="button" type="submit">
<img className="logo_nav_bar" srcSet="./logo_parametre.svg"/>
</button>
</div>
</div>
<NavigationDashboard />
<div className="Compte">
<div className="name_picture">
<div className="picture">
@ -64,7 +38,7 @@ const Compte = () => {
<p className="nom">Mateo Centeno</p>
</div>
<div className='bouton_submit'>
<button className="bouton_modifierNom" type="submit">Modifier le nom</button>
<button className="bouton_modifierNom" type="submit">Modifier</button>
</div>
</div>
</div>

@ -1,8 +1,10 @@
import axios from 'axios'
import React, { useState } from 'react';
import CryptoJS from 'crypto-js';
import Admin from './Admin.js'
import Admin from './Admin_create.js'
import Dashboard from './Dashboard.js'
import Dashboard from './Dashboard.js';
import Admin_list from './Admin_list.js';
const api = axios.create({
baseURL: 'http://localhost:8080'
@ -13,6 +15,7 @@ function Connexion() {
const [auth, setAuth] = useState("");
const [login, setLogin] = useState("");
const [password, setPassword] = useState("");
const [roleUser, setRole] = useState("");
function changeLogin(event) {
setLogin(event.target.value);
@ -53,10 +56,22 @@ function Connexion() {
}
if (auth === "Succeed") {
if (login === "admin")
return <Admin />
else
return <Dashboard />
const apiString = '/User/role/' + login;
api.get(apiString).then((response) => {
const role = response.data;
console.log("Role: " + role[0].idRole);
console.log("longueur role: " + role.length);
if (role.length > 0){
setRole(role[0].idRole);
}
else
setRole(-1);
});
console.log("RoleUser: " + roleUser);
if (roleUser === 4)
return (<Admin_list />);
else if (roleUser === 1)
return (<Dashboard />);
}
else {
return (

@ -1,28 +1,75 @@
import React from 'react';
import NavigationDashboard from '../components/NavigationDashboard';
const Dashboard = () => {
return (
<body className="corps_page_dashboard">
<body>
<link rel="stylesheet" href="https://unicons.iconscout.com/release/v4.0.0/css/line.css"></link>
<div className="page_principale">
{/* Create a principal page */}
<div className="haut_de_page">
<h2 className="titre">Dashboard</h2>
<div className="rechLogo">
<div className="input_box">
<input type="search" placeholder="Rechercher..."/>
<span className="search">
<i class="uil uil-search search-icon"></i>
</span>
</div>
<link rel="stylesheet" href="https://unicons.iconscout.com/release/v4.0.0/css/line.css"></link>
<div className="page_dashboard">
{/* Create an account page */}
<div className="haut_de_page">
<h2 className="titre">Dashboard</h2>
<div className="rechLogo">
<div className="input_box">
<input type="search" placeholder="Rechercher..."/>
<span className="search">
<i class="uil uil-search search-icon"></i>
</span>
</div>
<img className="logo" srcSet="./LogoApp.svg"/>
</div>
</div>
</body>
<div className="bas_de_page">
<NavigationDashboard />
<div className="Dashboard">
<div className="_gauche">
<div className="_haut">
<div className="Mes_infos">
Mes infos
</div>
<div className="Alertes">
Alertes
</div>
</div>
<div className="_bas">
<div className="Mes_prochaines_activités">
Mes prochaines activités
</div>
<div className="Chiffre_clés">
<div className="Ch_Clé_gauche">
<div className="Ch_Clé_gauche_haut">
Chiffre_clés
</div>
<div className="Ch_Clé_gauche_bas">
Chiffre_clés
</div>
</div>
<div className="Ch_Clé_droite">
<div className="Ch_Clé_droite_haut">
Chiffre_clés
</div>
<div className="Ch_Clé_droite_bas">
Chiffre_clés
</div>
</div>
</div>
</div>
</div>
<div className="_droite">
<div className="clients_important">
clients important
</div>
<div className="contacts_ajouté_récemment">
contacts ajouté récemment
</div>
</div>
</div>
</div>
</div>
</body>
);
};

@ -0,0 +1,58 @@
import React from 'react';
import NavigationDashboard from '../components/NavigationDashboard';
const Parametre = () => {
return (
<body>
<link rel="stylesheet" href="https://unicons.iconscout.com/release/v4.0.0/css/line.css"></link>
<div className="page_parametre">
{/* Create an account page */}
<div className="haut_de_page">
<h2 className="titre">Paramètre</h2>
<div className="rechLogo">
<div className="input_box">
<input type="search" placeholder="Rechercher..."/>
<span className="search">
<i class="uil uil-search search-icon"></i>
</span>
</div>
<img className="logo" srcSet="./LogoApp.svg"/>
</div>
</div>
<div className="bas_de_page">
<NavigationDashboard />
<div className="Parametre">
<div className="one">
<div className="one_haut">
sécurité
</div>
<div className="one_milieu">
<p className="text_one_milieu">Signaler un problème</p>
<div className='bouton_submit'>
<button className="bouton_signalerPB" type="submit">Signaler</button>
</div>
</div>
<div className="one_bas">
<p className="text_one_milieu">Mot de passe</p>
<div className='bouton_submit'>
<button className="bouton_modifierMDP" type="submit">Modifier</button>
</div>
</div>
</div>
<div className="two">
coucou
</div>
<div className="three">
coucou
</div>
</div>
</div>
</div>
</body>
);
};
export default Parametre;

@ -0,0 +1,13 @@
import React from 'react';
import NavigationDashboard from '../components/NavigationDashboard';
const Repertoire = () => {
return (
<body>
coucou
</body>
);
};
export default Repertoire;

@ -67,10 +67,7 @@
}
}
/*.form{
align-self: center;
font-size: 30px;
}*/
.Titre_Formulaire{
display: flex;
@ -95,61 +92,82 @@
font-size: 70px;
font-weight: bold;
}
.Formulaire{
.Sous-titre {
display: flex;
flex-direction: column;
align-items: center;
/*background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);*/
margin-left: 10px;
margin-right: 10px;
margin: 10px;
font-size: 40px;
font-weight: bold;
}
.Formulaire_de_connexion {
.Formulaire{
display: flex;
flex-direction: row;
margin-top: 10%;
flex-direction: column;
align-items: center;
/*background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);*/
margin-left: 10px;
margin-right: 10px;
.texte_côté {
display:flex;
flex-direction: column;
justify-content: space-around;
height: 100%;
}
input {
.form{
display: flex;
flex-direction: column;
margin: 10px;
}
align-self: center;
font-size: 30px;
.button_submit {
display: flex;
margin-top: 150%;
margin-bottom: 2%;
padding-left: 10px;
.bouton_réini{
background-color: rgb(190, 189, 189);
border-radius: 5px;
border: 1px solid black;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
cursor: pointer;
.Formulaire_de_connexion {
display: flex;
flex-direction: row;
margin-top: 5%;
/*background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);*/
.texte_côté {
display:flex;
flex-direction: column;
justify-content: space-around;
height: 100%;
}
input {
display: flex;
flex-direction: column;
margin: 10px;
}
.button_submit {
display: flex;
margin-top: 150%;
margin-bottom: 2%;
padding-left: 10px;
.bouton_réini{
background-color: rgb(190, 189, 189);
border-radius: 5px;
border: 1px solid black;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
cursor: pointer;
}
}
}
}
}
.texte {
align-self: center;
font-size: 15px;
@ -187,8 +205,6 @@
font-size: 15px;
border-radius: 15px;
width: 20%;
align-items: center;
justify-content: center;
&:hover {
box-shadow: 0, 5px, 35px, 0 rgba(0, 0, 0, 1);
@ -204,15 +220,15 @@
.bouton_ann{
//display: flex;
background-color: grey;
border: 1px solid rgba(255, 255, 255, 0.1);
border: 0px solid rgba(255, 255, 255, 0.1);
backdrop-filter: blur(30px);
color: rgb(255, 255, 255);
cursor: pointer;
font-size: 15px;
border-radius: 15px;
width: 20%;
align-items: center;
justify-content: center;
text-decoration: none;
text-align: center;
&:hover {
box-shadow: 0, 5px, 35px, 0 rgba(0, 0, 0, 1);
@ -231,37 +247,51 @@
display: flex;
flex-direction: column;
flex-basis: 100%;
/*background: rgba(255, 255, 255, 0.3);
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);*/
-webkit-backdrop-filter: blur(15px);
margin: 10px;
padding: 10px;
.Titre {
display: flex;
background: rgba(255, 255, 255, 0.3);
/*background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
//margin: 10px;
-webkit-backdrop-filter: blur(15px);*/
margin: 10px;
font-size: 70px;
font-weight: bold;
}
.Sous-titre {
display: flex;
/*background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);*/
margin: 10px;
font-size: 40px;
font-weight: bold;
}
.rechLogo {
display: flex;
flex-direction: column;
flex-basis: 100%;
background: rgba(255, 255, 255, 0.3);
/*background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
-webkit-backdrop-filter: blur(15px);*/
//margin: 10px;
//padding: 10px;
align-items: center;
margin-top: 5%;
.input_box {
display: flex;
@ -370,7 +400,6 @@
border-radius: 15px;
width: 30%;
align-items: center;
justify-content: center;
&:hover {
box-shadow: 0, 5px, 35px, 0 rgba(0, 0, 0, 1);

@ -0,0 +1,164 @@
body {
background-image: url("../../../public/fond_page_connexion.png");
background-repeat: no-repeat;
background-attachment: fixed;
background-position: center;
background-size: cover;
.page_analyse {
display: flex;
flex-direction: column;
justify-content: space-evenly;
width: auto;
height: 100vh;
.haut_de_page {
display: flex;
flex-direction: row;
justify-content: space-between;
padding: 50px;
width: auto;
height: 10%;
align-items: center;
margin: 10px 10px 5px 10px;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
.titre {
font-size: 40px;
}
.rechLogo {
display: flex;
flex-direction: row;
justify-content: space-between;
.input_box {
display: flex;
justify-content: center;
align-items: center;
position: relative;
height: 40px;
max-width: 350px;
width: 100%;
margin: 30px 30px;
border-radius: 25px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
input {
position: relative;
width: 100%;
height: 100%;
padding: 0 15px 0 65px;
outline: none;
border: none;
border-radius: 25px;
font-size: 16px;
font-weight: 400;
color: #333;
}
.search {
display: flex;
align-items: center;
justify-content: center;
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 60px;
border-radius: 25px 0 0 25px;
.search-icon {
font-size: 30px;
color: black;
}
}
}
.logo {
display: flex;
width: 100px;
height: 100px;
}
}
}
.bas_de_page {
display: flex;
flex-direction: row;
justify-content: space-between;
width: auto;
height: 86%;
.nav_bar_verticale {
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
width: 5%;
margin: 5px 5px 10px 10px;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
.button {
display: flex;
object-fit: cover;
background-color: transparent;
border: none;
cursor: pointer;
.logo_nav_bar{
display: flex;
margin: 10px;
height: 50px;
width: 50px;
}
}
}
.Analyse {
display: flex;
flex-direction: column;
justify-content: space-evenly;
height: auto;
width: 93.4%;
margin: 5px 10px 10px 5px;
.Stat_1 {
display: flex;
width: auto;
height: 50%;
margin: 50px 50px 8px 50px;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
}
.Stat_2 {
display: flex;
width: auto;
height: 50%;
margin: 8px 50px 50px 50px;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
}
}
}
}
}

@ -0,0 +1,208 @@
body {
background-image: url("../../../public/fond_page_connexion.png");
background-repeat: no-repeat;
background-attachment: fixed;
background-position: center;
background-size: cover;
.page_calendrier {
display: flex;
flex-direction: column;
justify-content: space-evenly;
width: auto;
height: 100vh;
.haut_de_page {
display: flex;
flex-direction: row;
justify-content: space-between;
padding: 50px;
width: auto;
height: 10%;
align-items: center;
margin: 10px 10px 5px 10px;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
.titre {
font-size: 40px;
}
.rechLogo {
display: flex;
flex-direction: row;
justify-content: space-between;
.input_box {
display: flex;
justify-content: center;
align-items: center;
position: relative;
height: 40px;
max-width: 350px;
width: 100%;
margin: 30px 30px;
border-radius: 25px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
input {
position: relative;
width: 100%;
height: 100%;
padding: 0 15px 0 65px;
outline: none;
border: none;
border-radius: 25px;
font-size: 16px;
font-weight: 400;
color: #333;
}
.search {
display: flex;
align-items: center;
justify-content: center;
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 60px;
border-radius: 25px 0 0 25px;
.search-icon {
font-size: 30px;
color: black;
}
}
}
.logo {
display: flex;
width: 100px;
height: 100px;
}
}
}
.bas_de_page {
display: flex;
flex-direction: row;
justify-content: space-between;
width: auto;
height: 86%;
.nav_bar_verticale {
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
width: 5%;
margin: 5px 5px 10px 10px;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
.button {
display: flex;
object-fit: cover;
background-color: transparent;
border: none;
cursor: pointer;
.logo_nav_bar{
display: flex;
margin: 10px;
height: 50px;
width: 50px;
}
}
}
.Calendrier {
display: flex;
flex-direction: row;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
width: 100%;
margin: 5px 10px 10px 5px;
text-align: center;
.Titre {
display: flex;
flex-direction: column;
justify-content: space-around;
width: 175px;
margin: 30px;
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
.mini_formulaire_evenement {
display: flex;
flex-direction: column;
margin-top: 10px;
height: 100px;
}
.bouton_ajout {
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
margin-left: auto;
margin-right: auto;
width: 75%;
height: 50px;
border-radius: 10px;
background-color: rgba(163, 163, 163, 0.371);
border: 1px solid rgba(255,255,255,0.1);
backdrop-filter: blur(30px);
color: rgb(255, 255, 255);
cursor: pointer;
font-size: 15px;
&:hover{
background-color: rgba(114, 114, 114, 0.371);
}
&:active{
background-color:rgba(68, 68, 68, 0.972);
}
}
}
}
.rbc-calendar {
border-radius: 15px;
border: 1px solid black;
.rbc-day-bg {
border-radius: 5px;
border-color: black;
}
.rbc-month-view {
border-radius: 10px;
border-color: black;
border-right: none;
border-bottom: none;
}
}
.ajout_input {
border-radius: 10px;
text-align: center;
}
}
}
}

@ -1,5 +1,9 @@
body {
background-image: url("../../../public/fond_page_connexion.png");
background-repeat: no-repeat;
background-attachment: fixed;
background-position: center;
background-size: cover;
.page_compte {
display: flex;
@ -110,6 +114,7 @@ body {
object-fit: cover;
background-color: transparent;
border: none;
cursor: pointer;
.logo_nav_bar{
display: flex;
@ -167,14 +172,15 @@ body {
display: flex;
margin-left: 30px;
align-items: center;
cursor: pointer;
.bouton_ajoutPhoto {
height: 40px;
width: 150px;
background-color: rgb(190, 189, 189);
border-radius: 5px;
border: 1px solid black;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
cursor: pointer;
&:hover{
background-color: lightgrey;
@ -209,16 +215,17 @@ body {
display: flex;
.bouton_modifierNom {
width: 100px;
height: 25px;
width: 75px;
height: 20px;
background-color: rgb(190, 189, 189);
border-radius: 5px;
border-radius: 5px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
cursor: pointer;
&:hover{
background-color: lightgrey;
}
}
}
}
}

@ -1,8 +1,11 @@
.corps_page_dashboard{
body {
background-image: url("../../../public/fond_page_connexion.png");
.page_principale {
background-repeat: no-repeat;
background-attachment: fixed;
background-position: center;
background-size: cover;
.page_dashboard {
display: flex;
flex-direction: column;
justify-content: space-evenly;
@ -84,5 +87,214 @@
}
}
}
.bas_de_page {
display: flex;
flex-direction: row;
justify-content: space-between;
width: auto;
height: 86%;
.nav_bar_verticale {
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
width: 5%;
margin: 5px 5px 10px 10px;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
.button {
display: flex;
object-fit: cover;
background-color: transparent;
border: none;
cursor: pointer;
.logo_nav_bar{
display: flex;
margin: 10px;
height: 50px;
width: 50px;
}
}
}
.Dashboard {
display: flex;
flex-direction: row;
justify-content: space-between;
width: 93.4%;
height: auto;
margin: 5px 10px 10px 5px;
._gauche {
display: flex;
flex-direction: column;
justify-content: space-between;
width: 76%;
._haut {
display: flex;
flex-direction: row;
justify-content: space-between;
width: auto;
height: 40%;
.Mes_infos {
display: flex;
width: 40%;
height: auto;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
}
.Alertes {
display: flex;
width: 58.5%;
height: auto;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
}
}
._bas {
display: flex;
flex-direction: row;
justify-content: space-between;
width: auto;
height: 58%;
.Mes_prochaines_activités {
display: flex;
width: 45%;
height: auto;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
}
.Chiffre_clés {
display: flex;
flex-direction: row;
justify-content: space-between;
width: 53%;
height: auto;
.Ch_Clé_gauche {
display: flex;
flex-direction: column;
justify-content: space-between;
width: 45%;
height: auto;
.Ch_Clé_gauche_haut {
display: flex;
width: auto;
height: 53%;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
}
.Ch_Clé_gauche_bas {
display: flex;
width: auto;
height: 42%;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
}
}
.Ch_Clé_droite {
display: flex;
flex-direction: column;
justify-content: space-between;
width: 51%;
height: auto;
.Ch_Clé_droite_haut {
display: flex;
width: auto;
height: 46%;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
}
.Ch_Clé_droite_bas {
display: flex;
width: auto;
height: 49%;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
}
}
}
}
}
._droite {
display: flex;
flex-direction: column;
justify-content: space-between;
width: 23%;
.clients_important {
display: flex;
width: auto;
height: 64%;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
}
.contacts_ajouté_récemment {
display: flex;
width: auto;
height: 34%;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
}
}
}
}
}
}
}

@ -0,0 +1,246 @@
body {
background-image: url("../../../public/fond_page_connexion.png");
background-repeat: no-repeat;
background-attachment: fixed;
background-position: center;
background-size: cover;
.page_parametre {
display: flex;
flex-direction: column;
justify-content: space-evenly;
width: auto;
height: 100vh;
.haut_de_page {
display: flex;
flex-direction: row;
justify-content: space-between;
padding: 50px;
width: auto;
height: 10%;
align-items: center;
margin: 10px 10px 5px 10px;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
.titre {
font-size: 40px;
}
.rechLogo {
display: flex;
flex-direction: row;
justify-content: space-between;
.input_box {
display: flex;
justify-content: center;
align-items: center;
position: relative;
height: 40px;
max-width: 350px;
width: 100%;
margin: 30px 30px;
border-radius: 25px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
input {
position: relative;
width: 100%;
height: 100%;
padding: 0 15px 0 65px;
outline: none;
border: none;
border-radius: 25px;
font-size: 16px;
font-weight: 400;
color: #333;
}
.search {
display: flex;
align-items: center;
justify-content: center;
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 60px;
border-radius: 25px 0 0 25px;
.search-icon {
font-size: 30px;
color: black;
}
}
}
.logo {
display: flex;
width: 100px;
height: 100px;
}
}
}
.bas_de_page {
display: flex;
flex-direction: row;
justify-content: space-between;
width: auto;
height: 86%;
.nav_bar_verticale {
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
width: 5%;
margin: 5px 5px 10px 10px;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
.button {
display: flex;
object-fit: cover;
background-color: transparent;
border: none;
cursor: pointer;
.logo_nav_bar{
display: flex;
margin: 10px;
height: 50px;
width: 50px;
}
}
}
.Parametre {
display: flex;
flex-direction: column;
justify-content: space-between;
width: 94.3%;
height: auto;
margin: 5px 10px 10px 5px;
.one {
display: flex;
flex-direction: column;
justify-content: space-evenly;
width: auto;
height: 28.5%;
padding: 10px;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
.one_haut {
display: flex;
flex-direction: row;
justify-content: space-between;
height: 50%;
border-bottom: 1px solid black;
}
.one_milieu {
display: flex;
flex-direction: row;
justify-content: space-between;
padding: 9px;
height: 25%;
border-bottom: 1px solid black;
.bouton_submit {
display: flex;
margin-left: 30px;
align-items: center;
cursor: pointer;
.bouton_signalerPB {
width: 75px;
height: 20px;
background-color: rgb(190, 189, 189);
border-radius: 5px;
border-radius: 5px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
cursor: pointer;
&:hover{
background-color: lightgrey;
}
}
}
}
.one_bas {
display: flex;
flex-direction: row;
justify-content: space-between;
padding: 9px;
height: 25%;
.bouton_submit {
display: flex;
margin-left: 30px;
align-items: center;
cursor: pointer;
.bouton_modifierMDP {
width: 75px;
height: 20px;
background-color: rgb(190, 189, 189);
border-radius: 5px;
border-radius: 5px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
cursor: pointer;
&:hover{
background-color: lightgrey;
}
}
}
}
}
.two {
display: flex;
width: auto;
height: 28.5%;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
}
.three {
display: flex;
width: auto;
height: 40%;
background: rgba(255, 255, 255, 0.3);
border-radius: 15px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(15px);
}
}
}
}
}

@ -1,4 +1,8 @@
@import "./settings.scss";
@import "./components/connexion.scss";
@import "./components/admin.scss";
@import "./components/compte.scss";
@import "./settings";
@import "./components/connexion";
@import "./components/admin";
@import "./components/compte";
@import "./components/dashboard";
@import "./components/analyse";
@import "./components/calendrier";
@import "./components/parametre"
Loading…
Cancel
Save