ajustes
This commit is contained in:
@@ -4,24 +4,25 @@ sw.js,1778065253229,20540da27a8005d1e7a54a576607c687217feb037aedb26e5d8dab53d69d
|
||||
style.css,1770114976862,4c2e2686b637f6f2f060298dfbabf690219284ff4c5c027711c5b443dde07332
|
||||
script.js,1776937115126,4b08e5f41663ef287d352039798448e36a3c52c60014d58f7ed31471dab4066d
|
||||
manifest.json,1770114976862,eb6e5b596d2a562026e361e5ee5bd1f4c3fc94a5e3b8cfc9d8761c6d21b2b991
|
||||
index.html,1778067423164,0896158ce7fa3228f5ba10a60ab661d8dc55b4bb492c835399ce9626c8f40318
|
||||
firebase.js,1776936516051,37feb64e428313ec44afdabc4a2a348f29aae1ce0893c8099205750b1b5faf87
|
||||
firebase,1777902366124,9d8f53c2037285ddb56fad26e9a581980370cec0dae5bfae0e91e5a87e8b96b2
|
||||
RELATORIO_TECNICO.md,1778058174796,fad35f12b1f2d062f72e7a448bb643fd3cfdd24423eaacc14cbbb20172ead7be
|
||||
README.md,1778057411525,cc32fa073114e014f06988652ebe4c6af9ba3dbf913b9f25d38a16ce3d700605
|
||||
.vscode/settings.json,1778056161665,3a247752ccf28f259e2e604bf44311ab91b6db3864b120e08f2823951d1c55d8
|
||||
.git/index,1777997762141,9c98b1a4efc883a6a6bb5d798da2aa83b7b0e07655aec8c43f71ba041de76b86
|
||||
.git/index,1778067817139,b6a4caa468a35715a92747090f32166eadf3447788dbe8a15ca14f407d77c7f5
|
||||
.git/description,1773160274654,3cdc7b6a29de07f63b76d16b9911d93468000346945f759d4f6456660b5c113b
|
||||
.git/config,1773914677241,cb4cd1c7c28ac13d2dccf79f667245402cf551c998ba1f6b58abc28f3ae11e7f
|
||||
.git/ORIG_HEAD,1777392979044,2612c449de4f930bfb197ddb13780ca77cbb7bf6db7e91493d412b634ddcdebd
|
||||
.git/HEAD,1773160809135,a39dc51e21d1523cdef2091e7c7ab30a33ad42a7cd5da1f45139746e5c24b667
|
||||
.git/COMMIT_EDITMSG,1777997762142,47e4b83fa796b7965feed27fd3d7017275b18a8518ff0cbc20bf12dcc0ff7e36
|
||||
.git/refs/remotes/origin/main,1777997762539,07acf1e52d80759a7a23b8c54921216d19f042b468bed7e35eecff2180712b24
|
||||
.git/COMMIT_EDITMSG,1778067817140,6df556362d9eb5101e618d025d58a67cca69a740780977ebdaf2579be85ce022
|
||||
.git/refs/remotes/origin/main,1778067817533,c6caea8a10e8a97102165c36d3bdde2925b4777bea432affa7702c69316113bf
|
||||
.git/refs/remotes/origin/HEAD,1773830493701,0f5d56efe56c5dcabb387d965aad58d0f60a3b7485cb9b04bef04b93bebf911e
|
||||
.git/refs/heads/main,1777997762143,07acf1e52d80759a7a23b8c54921216d19f042b468bed7e35eecff2180712b24
|
||||
.git/refs/heads/main,1778067817141,c6caea8a10e8a97102165c36d3bdde2925b4777bea432affa7702c69316113bf
|
||||
.git/objects/fd/3d3838a9118dc446e6ab65d38a5ce1747fd0d6,1777393032091,b7fcc251a3edcfc6eb1d7a0ea70a10d16f297520eb5e95c822ab5f754da8dc4a
|
||||
.git/objects/f6/b7a98471bb9c718c8091a62fa65243aceb92b7,1778067817140,12c318e32181abf048c4811d48552676bff899b5172e58d11fd9136ae98c2c71
|
||||
.git/objects/f6/73a71b7a275609030462c0278586d61e5f3a00,1773830457776,6ef355c279049956337049bd863d18f205f75ec1bcaee8c82bf26a7d2a65af72
|
||||
.git/objects/f4/577dec9e03ee9efa3af7ee05d60576b07f8d99,1773161014724,c78b5a6ceff9eb62984db81b7041efbdcac774d45a96d7536ede20a9a6ba10c5
|
||||
.git/objects/f3/90a9352918931eb316b140a5e6b79d6e5e9f87,1778067817118,2e6f72a24865e145527ca0c1716eb17beb1e68a28b1e8472564d06d30d5a2a5f
|
||||
.git/objects/f3/7d7211c51f051db56b0e67a1bfca55f649e1e5,1773161195360,a0961540cd8d800dd424b0eb7d503bb35012ad90477c1ec10b9e4b34e1102027
|
||||
.git/objects/ed/cc9b9ffb9c172f4579f71d3e10414f58ea26d0,1777997762125,439ee4c3ff19456eafa85052089df8c4ea4c00c1c293fd4c639377d8d125ebb9
|
||||
.git/objects/ea/2dee2f517449595d633889a410cc2aefa2b513,1776937200147,9392a6f5dd0687166fd9b60a4f28176604046d293196fe53038e9d2e456d5336
|
||||
@@ -32,6 +33,7 @@ README.md,1778057411525,cc32fa073114e014f06988652ebe4c6af9ba3dbf913b9f25d38a16ce
|
||||
.git/objects/d3/f58873ab4f70d24d92349c7e85c7df5c7bb7c2,1776937200165,ca8deaee745fd2e87b4804183acc8c484a36b88db729b2c4cb52f17f99ffb747
|
||||
.git/objects/d0/ca0c1d5c7b38b5a5ec040918ce8ece33dfe52c,1776937200149,9d98989471faf7b255a3da69495d5ff5cfe01302e1626558a570e33a74b8c716
|
||||
.git/objects/c2/51549f632caf9449f632743316c3cf728fffc8,1776937257099,1f81e188648ae90999de0d723593b312ae205c183aa0bfd8562ffc83742a85ab
|
||||
.git/objects/b2/d3930d99b8f06b5d0ae445cc28cd2a4af0da24,1778067817138,e9d22b7f6ef7f12457135884486154e22b6c283f056db3968907d4585fda8ec2
|
||||
.git/objects/b1/23a037ff8edd8fe29dc828726a53f9b55dcc31,1773161195361,c118b3ce9a20c3b4aa540144f17e7dcc1bc26ff0b576c6e00451941e200feee9
|
||||
.git/objects/aa/64354c06769190bc3e113bd7ee4dfb0bfcdad1,1773830457796,31833bc03904dec3c2a34a49028c56042ee348df266b859968414bc009c83f7f
|
||||
.git/objects/a5/c46d963a0c127d421044eb6e50f1b3c8271d95,1777903218134,32190169472d3bc7ae8b307521f604f6fcdeed486694f0deffa2e9e55dc72e9a
|
||||
@@ -43,21 +45,27 @@ README.md,1778057411525,cc32fa073114e014f06988652ebe4c6af9ba3dbf913b9f25d38a16ce
|
||||
.git/objects/8e/7980160dd6e37a0edf181cb022b86334e205fd,1777393032077,921856f2b98e34016c387ef1f73025bba7ed846c64d8017ec6d2e6e0e9f7c586
|
||||
.git/objects/8d/053f517afe910c5933a43eca4e7dad2fe5edf1,1777997762122,e3802ac195f07bda67d59b5754f2254282916e9d5277388af9751fc1cb511723
|
||||
.git/objects/8c/b6ffc314647094561a18f0af805412260abc3b,1776326595546,a256a28d0e28ac76431ae5406923461a7b4fd7aaac40f5dae947377abc2ca830
|
||||
.git/objects/85/245c9ed8e19d706e7d22b06854421666354793,1778067817117,679bc4918add3e07552006ecbe2efa9f8219b4096728e08a6932cfd36cf3bbb0
|
||||
.git/objects/84/2dd08f73738644fe58eecb5409d5ebd1544efb,1776326595582,b5b51d6c09e2f4e9767489040755ab4e1c4cdce30f46567e4391e0e228f04395
|
||||
.git/objects/7f/0d5ab4d6ff0318cbd6a9c3f8eb57aaac4634a4,1777542176251,16d9b4319d629d55eb92c57e1070cca1671b642d2c780895fc600570fcb5b895
|
||||
.git/objects/7d/dec83df895fd4138fb260363a31d42aca01be7,1777903215823,7e84fefc9f50b243bf6456e585c91637cfc0deab22dd40762c75e3f65bedf077
|
||||
.git/objects/7d/999b5c85f7be07bd279e5a66139162cf63eef9,1778067817138,937c4042f6a2f5f9a163fcdf86515eb6013f9bd0e9a807e3740fde351767db32
|
||||
.git/objects/7b/4504f49c73b317f7e178597d5ae793880794d2,1777903218135,58046a9cddd44c7ff9e9e9e6db6d2c9ba98cb929d6e76479db066ffd62126fc8
|
||||
.git/objects/75/1bb2289fed8a49c4251445104647fd1ce9ea7c,1778067817116,6d9203e4bbaeee1bcb20122de49fd0e007195e8f01703e24a990b70d1efba679
|
||||
.git/objects/6f/3a2913e199cebe9ace75cf7e5a2818da27fbd3,1773161195356,54d84b384f82f8f1b37c547722e9d71bca19420481ee95702893b002a15d564d
|
||||
.git/objects/64/252d08a5b2f805100200ded406373568933c3a,1773161195359,0ab263a5e07f60a15d277e7928fd89d02c260d1ce0004c58ba591ceaa52d1b8b
|
||||
.git/objects/5d/b40ffe617959a1903859dfe399e1c1db842b80,1777393032076,8c9ba49d0b18a69b91a0b3351dd4bc1cdf21ed71ab83513e02789e12aa94f703
|
||||
.git/objects/59/1baf65bf75cf4d04647e7296aff7725b1531b8,1773161014723,c318202212d24ac44a60f4257c38fe4647e4128015caa8210a9487e2f96d9033
|
||||
.git/objects/58/a564985148007b5e4e7f13e3afa9f79debb771,1776183469621,897ee3588fb4b1fb29c58e5a2cea3d5a31e062f0ed873dca7f9539f83b4fd03f
|
||||
.git/objects/56/c2133ca1c4e1655993c1d48b5ee271d61d16e7,1778067817139,f2c19683ac8226426ed8922bd62f037ca0cb77a8992690013ad7560d35bfb8fd
|
||||
.git/objects/55/2e22a7e54217ad8c7ea90b10195baf9d42a36c,1777542176236,09b86220fbc32f2d59ec5b886201d95ecc1905b5027caf261a17d56e529805aa
|
||||
.git/objects/53/2b75117ba5c1870030b7234464a4d7035b1280,1777387356906,6180ed17b6f6018e7f132ae0d43d32a295fd23bfc5f165ad9b3941b60532077a
|
||||
.git/objects/52/11140c00a533a0d88e4d45fbd05a6cd1b16319,1776183305296,8e592b674b8f411d7b0569ffa976e4ee58f4a375e7d4732e7917ddfecfe8e824
|
||||
.git/objects/4c/cad493cf92a2abffe8e42c69b1a0fb11eb771a,1776183305312,85b3b6d5e020134e9b1b581382ab99cdf7ae726a512fccb77b13041a60e7209e
|
||||
.git/objects/46/c92ead4e560bfac09665e747f104c4e6639e1f,1777387356903,6a32730d91517dc002a328382d21729cc2e09e750ec0fe615b5f9256c10b32a8
|
||||
.git/objects/45/7f88a24dd64127fe448351e6d3d0d0a4ec4da0,1778067817115,baf7294ab47c9013d9f14611729e7c2fbd2900ec5267256647547d4ad334f129
|
||||
.git/objects/44/85476e52d470cdaba6e18db9df7591fceb0b13,1776183305294,2e7939525d8c7c114190b2aaeaa1cd712ac0d4153c4222c0c6f2c49a4aeb3e1a
|
||||
.git/objects/43/83d1d591ec9471fd88ffef009891025b35c0b8,1778067817124,a7194c7f232461447a126e58dabcdc62470788fa032b4a36070ac255b0c52cf6
|
||||
.git/objects/40/4bcf86370b3aa54e5c09e50a7be47241fe63ee,1773830230299,f9bae290124afebf31f114d71dc73d407a04a248fff87a729abfa68e807e6cf9
|
||||
.git/objects/3b/cafc02b8f3692fbb5b6d93debe13bb50563c2a,1776937200150,70a72e7716314bf0c914dd3d802a5a0ba4c93a23c179aaa86fb8c660f039e344
|
||||
.git/objects/38/465e5ae301b3ddefabfe22b188c4fee52182c0,1773161195398,dbcf76217184aff41336a8f6530dc63b073bb4235b0fec701dfa33df27a0b402
|
||||
@@ -72,21 +80,25 @@ README.md,1778057411525,cc32fa073114e014f06988652ebe4c6af9ba3dbf913b9f25d38a16ce
|
||||
.git/objects/2b/d5891243d72a793a41ea51994856446a350f55,1777387356904,0547ff6336463e58b4d266d7a08388b2ee53c501b37d95bf19846f896a3bd1a2
|
||||
.git/objects/2a/f13184106a656f511871672a98dca04e58f04b,1776937200165,207a73dfdc380c9ff77147f77f094d28c1e6471f74fc37175c9cc6dde8ff2b3b
|
||||
.git/objects/2a/a7aa1819e7c69a73c81dadbf3643a3aec6fed5,1776183305313,9e31ebefd7d25152cd322bd673d587b1e1367ae75e01aed02e86d6b58f5a430a
|
||||
.git/objects/28/dcc7b83036ea820a36dda70f67349a85dfe366,1778067817121,c5a8aea02acc65aa912914bd67c064da24f8b64a707f2e2999044931d81de173
|
||||
.git/objects/27/85c3386d34cce3cafd66e5892675c61548c3df,1777997762124,9362c43fef34a74a522bf592f011f778c530bba1edbf624926f84d7f9bf54183
|
||||
.git/objects/25/b0e88e2c1a6db6b52948a4d2fc649e06de8cb2,1776957069549,67160c871e47bc652ab9b8a11b65efe4a559f4dc7a84c16e9aeed10cd44d41b0
|
||||
.git/objects/25/5c1a39f46ad00812b25cf59858aabb19ebfa18,1776957069566,c328ecb00d90ba099ec4534307c0f3177478656f0fc2d21b4e02f6e743cf1773
|
||||
.git/objects/23/cec1dc9936a6d9be11078377c6a7685b26373f,1776183305295,d709b165a1199d66da18ba51afe1471aa7b068d4066284bf28d333f09e0c9670
|
||||
.git/objects/1f/96a9bfae61d4e97fc9f0375975e89f031ce971,1777542176253,10e365b22153e0f123b7086751a36b6779ce2368f721a3edffed8be8b92c4dba
|
||||
.git/objects/1e/df059fdd108ea56915dfccc9a58ad4170d580b,1778067817119,dcaad430c4d88918e61ac956c09211ed40896ae36b5285de662d2cc13db50355
|
||||
.git/objects/1a/6f0a583386ccf1152060c78f3237e4b928ebab,1777903218122,3b445ff37e72f864c5ce690f3b9e417ddfaee3e33dca1ad27390fcdc5e8c8e8d
|
||||
.git/objects/15/5422b0a09c128c529df656111fa3bf4a810999,1776183305292,f3973efacb5d450d6636f40464edc7361a5367cf15fa47ec6f6fdc0958b1548b
|
||||
.git/objects/11/0a88a7582625e48e2eddd5e18dfc7e2f6ecbd7,1778067817118,039e21f346feb3301f5fffb0ec308a4d5f5e4a2cc1a39563e59e12ea0b57a74c
|
||||
.git/objects/0f/e52b062580722aedaf1e72d0873dfcd52ae1d0,1777393032092,cda51340d22051dc215c44006c12ac911bfac5c0a0e9535fb2f5acb8fd2a62e5
|
||||
.git/objects/0d/982210a52ba6078db202a8b2ac2d04e8d4ac41,1776326595581,c4c80ce646b15b1aa2e9811149739253f98987c4eb84bdf21d21410d902b2ee4
|
||||
.git/objects/0b/fc5efae1d163add058f1940feea6649f5da1b1,1777393032074,f19ecb9e3799eb6cd2f62e145b429f8c7c48fe8ffda704c49d6d925e9818c000
|
||||
.git/objects/04/11accbb7c7608ce7cc7a296cdaaaf9c611fd28,1778067817122,106c0ea1a1d8ee8d73a0e48241240894ee4cd3269e40c191b8821a897d3a4a25
|
||||
.git/objects/00/0c1cd721b99d14281c3724f5488b040c152515,1777997762142,7d131dd9c4c33d6e017428809d3b927f369ee8fa38c7d6ae79d01bc10561e22b
|
||||
.git/logs/HEAD,1777997762143,f1258009669fe6da86a2aee96326d56f7d477b661aad447ff3bdaabbf9701c91
|
||||
.git/logs/refs/remotes/origin/main,1777997762540,e34bfe04d74b4940da23b0edef8c5d374a152af44181fc4904f4f67a9711c253
|
||||
.git/logs/HEAD,1778067817141,7bdcbeaa71468c78478906ffb453c4c7c65b8ddc4f706f53fae509ff64405372
|
||||
.git/logs/refs/remotes/origin/main,1778067817533,8a9c24916f99593929644967d9a8f3e00a810b8c014df0469d7809b4b4ff29e8
|
||||
.git/logs/refs/remotes/origin/HEAD,1773830493702,1eba2cff5035849e216a15d3b6013593fa5ef345a8d76bb2881d83b3cb247576
|
||||
.git/logs/refs/heads/main,1777997762143,f1258009669fe6da86a2aee96326d56f7d477b661aad447ff3bdaabbf9701c91
|
||||
.git/logs/refs/heads/main,1778067817141,7bdcbeaa71468c78478906ffb453c4c7c65b8ddc4f706f53fae509ff64405372
|
||||
.git/info/exclude,1773160274653,a362e375cc3330f10d115cfeb0f90a325219d80a764d57e2c4873f78d1d0b4f5
|
||||
.git/hooks/update.sample,1773160274656,2b0a4f42fa30a128b46ad80e89c1f73b89d58b8abb9e92aee1c35625baccb584
|
||||
.git/hooks/sendemail-validate.sample,1773160274654,4d0768bc11017be6b99d4bb4d34b4c8b2fd7ae8a93d42727591afb6737577db2
|
||||
@@ -102,4 +114,5 @@ README.md,1778057411525,cc32fa073114e014f06988652ebe4c6af9ba3dbf913b9f25d38a16ce
|
||||
.git/hooks/fsmonitor-watchman.sample,1773160274655,d366d691e33458260d77c44be36050a3faf0aa12760955cc8ca85ee88389c400
|
||||
.git/hooks/commit-msg.sample,1773160274654,4df962ba3955944bec38b211351c73f083d7b0e5360a5d3d76a49548e7314f9e
|
||||
.git/hooks/applypatch-msg.sample,1773160274655,91b94f5feaf0e4d2e6e7808a9188384a4300adf024fa24c48547ee87c64d6558
|
||||
.git/FETCH_HEAD,1778067520987,8dd09ee3bc8bc73b170ad713c1b297d159c64332b8fc924178df7c320512fa9a
|
||||
.git/FETCH_HEAD,1778141708711,df42fc98d5f625a624c1d4a1cac368b5d9d92a4ed6841b5fc530e12a8185c643
|
||||
index.html,1778141854716,8c8a2ce5f2e4811c1010aa00979e793cc45bb70f7990e4bb981009a2fb2e3292
|
||||
|
||||
121
index.html
121
index.html
@@ -341,12 +341,23 @@
|
||||
const [email, setEmail] = useState('');
|
||||
const [password, setPassword] = useState('');
|
||||
const [error, setError] = useState('');
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
|
||||
const handleSubmit = async (e) => {
|
||||
e.preventDefault();
|
||||
if (isLoading) return;
|
||||
|
||||
setError('');
|
||||
setIsLoading(true);
|
||||
|
||||
const success = await onLogin(email, password);
|
||||
|
||||
setIsLoading(false);
|
||||
if (!success) {
|
||||
setError('Email ou Palavra-passe incorreta');
|
||||
setTimeout(() => {
|
||||
setError('');
|
||||
}, 5000);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -392,8 +403,15 @@
|
||||
</div>
|
||||
)}
|
||||
<div className="space-y-4">
|
||||
<button type="submit" className="w-full bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 rounded-lg transition-colors shadow-lg shadow-blue-500/30">
|
||||
Entrar
|
||||
<button type="submit" disabled={isLoading} className={`w-full ${isLoading ? 'bg-blue-400 dark:bg-blue-600/50 cursor-not-allowed' : 'bg-blue-600 hover:bg-blue-700 shadow-lg shadow-blue-500/30'} text-white font-bold py-3 rounded-lg transition-colors flex justify-center items-center gap-2`}>
|
||||
{isLoading ? (
|
||||
<>
|
||||
<div className="w-5 h-5 border-2 border-white/30 border-t-white rounded-full animate-spin"></div>
|
||||
A entrar...
|
||||
</>
|
||||
) : (
|
||||
'Entrar'
|
||||
)}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
@@ -472,7 +490,7 @@
|
||||
userId = 'admin_001';
|
||||
} else {
|
||||
const residentUser = residents.find(r => r.email && r.email.toLowerCase() === email.toLowerCase());
|
||||
if (residentUser && (password === residentUser.contact || password === '1234')) {
|
||||
if (residentUser && (password === residentUser.password || password === '1234')) {
|
||||
role = residentUser.role || 'morador';
|
||||
userName = residentUser.name + (residentUser.unit && residentUser.unit !== 'Pendente' ? ` (${residentUser.unit})` : '');
|
||||
userId = residentUser.id || userId;
|
||||
@@ -763,7 +781,8 @@
|
||||
try {
|
||||
if (editingItem) {
|
||||
const residentRef = ref(db, `condominos/${editingItem.id}`);
|
||||
await set(residentRef, {
|
||||
const updatedData = {
|
||||
...editingItem,
|
||||
unit: formData.unit || '',
|
||||
name: formData.name || '',
|
||||
contact: formData.contact || '',
|
||||
@@ -771,7 +790,11 @@
|
||||
status: formData.status || 'Pago',
|
||||
pending: Number(formData.pending) || 0,
|
||||
role: formData.role || 'morador'
|
||||
});
|
||||
};
|
||||
if (formData.password) {
|
||||
updatedData.password = formData.password;
|
||||
}
|
||||
await set(residentRef, updatedData);
|
||||
showNotification(`Condómino ${formData.name} atualizado`);
|
||||
} else {
|
||||
const residentsListRef = ref(db, 'condominos');
|
||||
@@ -781,6 +804,7 @@
|
||||
name: formData.name || '',
|
||||
contact: formData.contact || '',
|
||||
email: formData.email || '',
|
||||
password: formData.password || '1234',
|
||||
status: formData.status || 'Pago',
|
||||
pending: Number(formData.pending) || 0,
|
||||
role: formData.role || 'morador'
|
||||
@@ -1266,6 +1290,73 @@
|
||||
const ProfileView = ({ theme, setTheme }) => {
|
||||
const [activeSection, setActiveSection] = useState('personal');
|
||||
|
||||
const isMorador = userRole !== 'admin';
|
||||
const [formData, setFormData] = useState({
|
||||
name: 'A carregar...',
|
||||
role: '...',
|
||||
email: '',
|
||||
contact: '',
|
||||
address: ''
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
if (isMorador) {
|
||||
const currentUserData = residents.find(r => r.id === currentUserId) || {};
|
||||
setFormData({
|
||||
name: currentUserData.name || currentUserName || '',
|
||||
role: `Fração ${currentUserData.unit || 'N/A'}`,
|
||||
email: currentUserData.email || '',
|
||||
contact: currentUserData.contact || '',
|
||||
address: 'Morada do Condomínio'
|
||||
});
|
||||
} else {
|
||||
const adminRef = ref(db, 'configuracoes/admin_profile');
|
||||
const unsub = onValue(adminRef, (snapshot) => {
|
||||
if (snapshot.exists()) {
|
||||
setFormData(snapshot.val());
|
||||
} else {
|
||||
setFormData({
|
||||
name: 'Administrador do Condomínio',
|
||||
role: 'Síndico / Gestor',
|
||||
email: 'admin@mycondominium.pt',
|
||||
contact: '+351 912 345 678',
|
||||
address: 'Rua das Flores, nº 123, Escritório 2B'
|
||||
});
|
||||
}
|
||||
});
|
||||
return () => unsub();
|
||||
}
|
||||
}, [residents, currentUserId, userRole, currentUserName, isMorador]);
|
||||
|
||||
const handleChange = (field, value) => {
|
||||
setFormData(prev => ({ ...prev, [field]: value }));
|
||||
};
|
||||
|
||||
const handleSave = async () => {
|
||||
if (isMorador) {
|
||||
const currentUserData = residents.find(r => r.id === currentUserId);
|
||||
if (currentUserData && currentUserData.id) {
|
||||
try {
|
||||
await set(ref(db, `condominos/${currentUserData.id}/email`), formData.email);
|
||||
await set(ref(db, `condominos/${currentUserData.id}/contact`), formData.contact);
|
||||
showNotification('Dados atualizados com sucesso!', 'success');
|
||||
sendSystemNotification('Um utilizador atualizou os seus dados pessoais.', 'info', 'admin');
|
||||
} catch (error) {
|
||||
console.error("Erro ao guardar os dados:", error);
|
||||
showNotification('Erro ao guardar os dados.', 'error');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
await set(ref(db, 'configuracoes/admin_profile'), formData);
|
||||
showNotification('Alterações guardadas com sucesso!', 'success');
|
||||
} catch (error) {
|
||||
console.error("Erro ao guardar perfil admin:", error);
|
||||
showNotification('Erro ao guardar as alterações.', 'error');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="bg-white dark:bg-dark-surface rounded-xl shadow-sm border border-slate-100 dark:border-dark-border overflow-hidden animate-fade-in flex flex-col h-full transition-colors">
|
||||
<div className="flex flex-col md:flex-row h-full">
|
||||
@@ -1314,19 +1405,16 @@
|
||||
<h3 className="text-lg font-bold text-slate-800 dark:text-white mb-6 pb-2 border-b border-slate-100 dark:border-dark-border">Dados Pessoais</h3>
|
||||
<div className="space-y-4">
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
<InputGroup label="Nome Completo" value="Administrador do Condomínio" disabled />
|
||||
<InputGroup label="Cargo" value="Síndico / Gestor" disabled />
|
||||
<InputGroup label="Nome Completo" value={formData.name} onChange={(e) => handleChange('name', e.target.value)} disabled={isMorador} />
|
||||
<InputGroup label={isMorador ? "Fração" : "Cargo"} value={formData.role} onChange={(e) => handleChange('role', e.target.value)} disabled={isMorador} />
|
||||
</div>
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
<InputGroup label="Email" value="admin@mycondominium.pt" type="email" />
|
||||
<InputGroup label="Telefone" value="+351 912 345 678" />
|
||||
<InputGroup label="Email" value={formData.email} onChange={(e) => handleChange('email', e.target.value)} type="email" />
|
||||
<InputGroup label="Telefone" value={formData.contact} onChange={(e) => handleChange('contact', e.target.value)} />
|
||||
</div>
|
||||
<InputGroup label="Morada (Sede)" value="Rua das Flores, nº 123, Escritório 2B" />
|
||||
<InputGroup label={isMorador ? "Morada" : "Morada (Sede)"} value={formData.address} onChange={(e) => handleChange('address', e.target.value)} disabled={isMorador} />
|
||||
<div className="flex justify-end mt-6">
|
||||
<button onClick={() => {
|
||||
showNotification('Alterações guardadas com sucesso!', 'success');
|
||||
sendSystemNotification('Um utilizador atualizou os seus dados pessoais.', 'info', 'admin');
|
||||
}} className="bg-blue-600 text-white px-6 py-2 rounded-lg font-medium hover:bg-blue-700 shadow-sm transition-colors">
|
||||
<button onClick={handleSave} className="bg-blue-600 text-white px-6 py-2 rounded-lg font-medium hover:bg-blue-700 shadow-sm transition-colors">
|
||||
Guardar Alterações
|
||||
</button>
|
||||
</div>
|
||||
@@ -2256,7 +2344,10 @@
|
||||
<InputGroup label="Fração" name="unit" value={formData.unit || ''} onChange={handleInputChange} placeholder="Ex: 1º Esq" required />
|
||||
<InputGroup label="Nome Completo" name="name" value={formData.name || ''} onChange={handleInputChange} placeholder="Nome do proprietário" required />
|
||||
<InputGroup label="Email" type="email" name="email" value={formData.email || ''} onChange={handleInputChange} placeholder="email@exemplo.com" />
|
||||
<InputGroup label="Contacto" name="contact" value={formData.contact || ''} onChange={handleInputChange} placeholder="912 345 678" />
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
<InputGroup label="Telemóvel" name="contact" value={formData.contact || ''} onChange={handleInputChange} placeholder="912 345 678" required />
|
||||
<InputGroup label="Palavra-passe" type="text" name="password" value={formData.password || ''} onChange={handleInputChange} placeholder={editingItem ? "Deixar em branco para manter" : "1234"} required={!editingItem} />
|
||||
</div>
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
<InputGroup label="Estado" name="status" value={formData.status || 'Pago'} onChange={handleInputChange} options={[{ value: 'Pago', label: 'Pago' }, { value: 'Pendente', label: 'Pendente' }, { value: 'Atrasado', label: 'Atrasado' }]} />
|
||||
<InputGroup label="Valor Pendente (€)" type="number" name="pending" value={formData.pending || 0} onChange={handleInputChange} />
|
||||
|
||||
Reference in New Issue
Block a user