From 62b741ff7af320c608da27779979c384d4fe4b6c Mon Sep 17 00:00:00 2001 From: guisilvagomes Date: Fri, 10 Oct 2025 16:39:57 -0300 Subject: [PATCH] =?UTF-8?q?Mudan=C3=A7as?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + MEDICONNECT 2/src/components/Header.tsx | 4 +- .../src/components/ProfileSelector.tsx | 47 ++- .../src/components/auth/ProtectedRoute.tsx | 24 +- MEDICONNECT 2/src/context/AuthContext.tsx | 185 ++++++++- MEDICONNECT 2/src/pages/Home.tsx | 6 +- MEDICONNECT 2/src/pages/LoginMedico.tsx | 73 ++-- MEDICONNECT 2/src/pages/LoginPaciente.tsx | 14 +- MEDICONNECT 2/src/pages/LoginSecretaria.tsx | 361 +++++------------- MEDICONNECT 2/src/pages/PainelAdmin.tsx | 24 +- MEDICONNECT 2/src/pages/PainelSecretaria.tsx | 184 ++++++--- MEDICONNECT 2/src/services/medicoService.ts | 24 +- MEDICONNECT 2/src/services/pacienteService.ts | 119 +++++- .../src/services/relatorioService.ts | 204 ++++++---- 14 files changed, 792 insertions(+), 479 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..65822348c --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Local Netlify folder +.netlify diff --git a/MEDICONNECT 2/src/components/Header.tsx b/MEDICONNECT 2/src/components/Header.tsx index 64546b046..c3054fbb0 100644 --- a/MEDICONNECT 2/src/components/Header.tsx +++ b/MEDICONNECT 2/src/components/Header.tsx @@ -93,7 +93,7 @@ const Header: React.FC = () => { - - {/* Informações de demonstração */} -
-

- Para Demonstração: -

-

- Email:riseup@popcode.com.br
- Senha: riseup +

+ {LOCAL_MEDICO.email} /{" "} + {LOCAL_MEDICO.senha}

-
+ diff --git a/MEDICONNECT 2/src/pages/LoginPaciente.tsx b/MEDICONNECT 2/src/pages/LoginPaciente.tsx index 0e7473ed4..6dd25c63a 100644 --- a/MEDICONNECT 2/src/pages/LoginPaciente.tsx +++ b/MEDICONNECT 2/src/pages/LoginPaciente.tsx @@ -59,10 +59,10 @@ const LoginPaciente: React.FC = () => { // Credenciais fixas para LOGIN LOCAL de paciente const LOCAL_PATIENT = { - email: "pedro.araujo@mediconnect.com", - senha: "local123", - nome: "Pedro Araujo", - id: "pedro.araujo@mediconnect.com", + email: "guilhermesilvagomes1020@gmail.com", + senha: "guilherme123", + nome: "Guilherme Silva Gomes", + id: "guilhermesilvagomes1020@gmail.com", } as const; const handleLogin = async (e: React.FormEvent) => { @@ -359,13 +359,13 @@ const LoginPaciente: React.FC = () => { type="button" onClick={handleLoginLocal} disabled={loading} - className="w-full bg-gradient-to-r from-blue-700 to-blue-400 text-white py-3 px-4 rounded-lg font-medium hover:from-blue-800 hover:to-blue-500 disabled:opacity-50 disabled:cursor-not-allowed transition-all" + className="w-full bg-gradient-to-r from-blue-700 to-blue-400 text-white py-3 px-4 rounded-lg font-medium hover:from-blue-800 hover:to-blue-500 hover:scale-105 active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:scale-100 transition-all duration-200" > {loading ? "Entrando..." : "Entrar"}

- Credenciais locais: {LOCAL_PATIENT.email} / - {LOCAL_PATIENT.senha} + {LOCAL_PATIENT.email} /{" "} + {LOCAL_PATIENT.senha}

) : ( diff --git a/MEDICONNECT 2/src/pages/LoginSecretaria.tsx b/MEDICONNECT 2/src/pages/LoginSecretaria.tsx index 6dfb88fd5..b5e9303ad 100644 --- a/MEDICONNECT 2/src/pages/LoginSecretaria.tsx +++ b/MEDICONNECT 2/src/pages/LoginSecretaria.tsx @@ -10,40 +10,64 @@ const LoginSecretaria: React.FC = () => { senha: "", }); const [loading, setLoading] = useState(false); - const [showCadastro, setShowCadastro] = useState(false); - const [cadastroData, setCadastroData] = useState({ - nome: "", - email: "", - senha: "", - confirmarSenha: "", - telefone: "", - cpf: "", - }); const navigate = useNavigate(); - const { loginComEmailSenha } = useAuth(); + // Credenciais fixas para LOGIN LOCAL de secretaria + const LOCAL_SECRETARIA = { + email: "secretaria.mediconnect@gmail.com", + senha: "secretaria@mediconnect", + nome: "Secretaria MediConnect", + id: "secretaria.mediconnect@gmail.com", + } as const; + const handleLogin = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); try { - console.log("[LoginSecretaria] Tentando login com:", formData.email); - // Tenta login real via authService primeiro + console.log("[LoginSecretaria] Fazendo login com email:", formData.email); + + const authService = (await import("../services/authService")).default; + const loginResult = await authService.login({ + email: formData.email, + password: formData.senha, + }); + + if (!loginResult.success) { + console.log("[LoginSecretaria] Erro no login:", loginResult.error); + toast.error(loginResult.error || "Email ou senha incorretos"); + setLoading(false); + return; + } + + console.log("[LoginSecretaria] Login bem-sucedido!", loginResult.data); + + const tokenStore = (await import("../services/tokenStore")).default; + const token = tokenStore.getAccessToken(); + console.log("[LoginSecretaria] Token salvo:", token ? "SIM" : "NÃO"); + + if (!token) { + console.error("[LoginSecretaria] Token não foi salvo!"); + toast.error("Erro ao salvar credenciais de autenticação"); + setLoading(false); + return; + } + const ok = await loginComEmailSenha(formData.email, formData.senha); - console.log("[LoginSecretaria] Resultado login:", ok); if (ok) { - console.log("[LoginSecretaria] Login bem-sucedido, redirecionando..."); + console.log("[LoginSecretaria] Navegando para /painel-secretaria"); + toast.success("Login realizado com sucesso!"); navigate("/painel-secretaria"); } else { - console.error("[LoginSecretaria] Login falhou - credenciais inválidas"); - toast.error("Email ou senha incorretos"); + console.error("[LoginSecretaria] loginComEmailSenha retornou false"); + toast.error("Erro ao processar login"); } } catch (error) { console.error("[LoginSecretaria] Erro no login:", error); - toast.error("Erro ao fazer login. Verifique suas credenciais."); + toast.error("Erro ao fazer login. Tente novamente."); } finally { setLoading(false); } @@ -52,279 +76,84 @@ const LoginSecretaria: React.FC = () => { return (
- {/* Header */}

- {showCadastro ? "Criar Conta de Secretária" : "Área da Secretaria"} + Área da Secretaria

- {showCadastro - ? "Preencha os dados para criar uma conta de secretária" - : "Faça login para acessar o sistema de gestão"} + Faça login para acessar o sistema de gestão

- {/* Formulário */}
- {!showCadastro ? ( -
-
- -
- - - setFormData((prev) => ({ - ...prev, - email: e.target.value, - })) - } - className="form-input pl-10 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" - placeholder="secretaria@clinica.com" - required - autoComplete="email" - /> -
-
- -
- -
- - - setFormData((prev) => ({ - ...prev, - senha: e.target.value, - })) - } - className="form-input pl-10 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" - placeholder="Sua senha" - required - autoComplete="current-password" - /> -
-
- Email:riseup@popcode.com.br
- Senha: riseup - -
- ) : ( -
{ - e.preventDefault(); - toast( - "Cadastro de secretária não disponível. Entre em contato com o administrador." - ); - }} - className="space-y-4" - noValidate - > -
- + Email + +
+ - setCadastroData((prev) => ({ - ...prev, - nome: e.target.value, - })) - } - className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" - required - autoComplete="name" - /> -
-
- - - setCadastroData((prev) => ({ - ...prev, - cpf: e.target.value, - })) - } - className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" - placeholder="000.000.000-00" - required - inputMode="numeric" - pattern="^\d{3}\.\d{3}\.\d{3}-\d{2}$|^\d{11}$" - /> -
-
- - - setCadastroData((prev) => ({ - ...prev, - telefone: e.target.value, - })) - } - className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" - placeholder="(11) 99999-9999" - required - inputMode="numeric" - pattern="^\(?\d{2}\)?\s?9?\d{4}-?\d{4}$" - autoComplete="tel" - /> -
-
- - - setCadastroData((prev) => ({ - ...prev, - email: e.target.value, - })) + setFormData((prev) => ({ ...prev, email: e.target.value })) } - className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" + className="form-input pl-10 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" + placeholder="seu@email.com" required autoComplete="email" />
-
-
- - - setCadastroData((prev) => ({ - ...prev, - senha: e.target.value, - })) - } - className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" - minLength={6} - required - autoComplete="new-password" - /> -
-
- - - setCadastroData((prev) => ({ - ...prev, - confirmarSenha: e.target.value, - })) - } - className="form-input dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" - required - autoComplete="new-password" - aria-invalid={ - cadastroData.confirmarSenha !== "" && - cadastroData.confirmarSenha !== cadastroData.senha - } - aria-describedby={ - cadastroData.confirmarSenha !== "" && - cadastroData.confirmarSenha !== cadastroData.senha - ? "sec_senha_help" - : undefined - } - /> - {cadastroData.confirmarSenha !== "" && - cadastroData.confirmarSenha !== cadastroData.senha && ( -

- As senhas não coincidem. -

- )} -
+
+ +
+ +
+ + + setFormData((prev) => ({ ...prev, senha: e.target.value })) + } + className="form-input pl-10 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-gray-100" + placeholder="Sua senha" + required + autoComplete="current-password" + />
-
- - -
- - )} +
+ + + +

+ {LOCAL_SECRETARIA.email} /{" "} + {LOCAL_SECRETARIA.senha} +

+
diff --git a/MEDICONNECT 2/src/pages/PainelAdmin.tsx b/MEDICONNECT 2/src/pages/PainelAdmin.tsx index 09ab32335..db8896690 100644 --- a/MEDICONNECT 2/src/pages/PainelAdmin.tsx +++ b/MEDICONNECT 2/src/pages/PainelAdmin.tsx @@ -379,14 +379,21 @@ const PainelAdmin: React.FC = () => { } try { + console.log("[PainelAdmin] Deletando paciente:", { id, nome }); + const response = await deletePatient(id); + + console.log("[PainelAdmin] Resultado da deleção:", response); + if (response.success) { toast.success("Paciente deletado com sucesso!"); loadPacientes(); } else { + console.error("[PainelAdmin] Falha ao deletar:", response.error); toast.error(response.error || "Erro ao deletar paciente"); } - } catch { + } catch (error) { + console.error("[PainelAdmin] Erro ao deletar paciente:", error); toast.error("Erro ao deletar paciente"); } }; @@ -395,12 +402,12 @@ const PainelAdmin: React.FC = () => { const handleEditMedico = (medico: Doctor) => { setEditingMedico(medico); setFormMedico({ - crm: medico.crm, - crm_uf: medico.crm_uf, + crm: medico.crm || "", + crm_uf: medico.crm_uf || "SP", specialty: medico.specialty || "", - full_name: medico.full_name, - cpf: medico.cpf, - email: medico.email, + full_name: medico.full_name || "", + cpf: medico.cpf || "", + email: medico.email || "", phone_mobile: medico.phone_mobile || "", phone2: medico.phone2 || "", cep: medico.cep || "", @@ -982,7 +989,10 @@ const PainelAdmin: React.FC = () => {