UpdatePasswordPopup

src/layouts/components/password/UpdatePasswordPopup.vue
Overlay Medium 1 uso

Popup obrigatório de atualização de senha inicial. Exibido automaticamente quando AppActiveUser.old_password_in_use = true e a rota não é /two-factor ou /chat-attendance. Sem botão de fechar — o usuário deve atualizar a senha para continuar. Contém: ícone de cadeado, texto explicativo, alert collapsible com requisitos, 2 campos senha com toggle visibilidade, indicador PasswordStrong, e botão Salvar. Valida filterPassword(password) >= 75 antes de salvar. MutationObserver previne remoção do popup via DevTools — se #updatePasswordPopup sumir, recarrega a página. Zero props, zero eventos.

Requisitos Recolhidos (padrão)

Estado inicial: showRequirements = false. Alert primário exibe apenas o texto "Veja os requisitos" com chevron-down. Campos vazios → botão Salvar desabilitado.

Atualizar Senha

Atualização de senha necessária

Sua senha atual é temporária. Por segurança, defina uma nova senha para continuar.

Veja os requisitos da nova senha
Força: —
Real src/layouts/main/Main.vue:78
<!-- Registrado junto com os outros 2 popups de sistema -->
<notification-popup/>
<contract-popup/>
<update-password-popup/>

Requisitos Expandidos + Senha Forte

showRequirements = true: alert expand para 170px mostrando 6 requisitos. Campos preenchidos com senha forte (score ≥ 75) → PasswordStrong verde → botão Salvar ativo.

Atualizar Senha

Atualização de senha necessária

Sua senha atual é temporária. Por segurança, defina uma nova senha para continuar.

Veja os requisitos da nova senha
  • 1 letra maiúscula
  • 1 letra minúscula
  • 2 caracteres especiais
  • 1 caractere numérico
  • 8 caracteres
  • Sem sequências ou repetições
Força: Muito forte
Sintético comportamento interno
<!-- Fluxo interno — sem props configuráveis -->
<!-- 1. mounted(): old_password_in_use=true → isPopupActive=true + watchPopupDeletion() -->
<!-- 2. vs-alert collapsible: clique em 'Veja os requisitos' toggle showRequirements -->
<!-- 3. vs-input senha + confirme senha com toggle visibility (vs-icon olho, 23px) -->
<!-- 4. password-strong :password="password" — score em tempo real -->
<!-- 5. Salvar: score >= 75 → dispatch user/updatePassword → fecha popup -->
<!--    score < 75 → $vs.notify danger "Senha fraca" -->
<!-- 6. Fechar: impossível — button-close-hidden=true, sem cancelar -->
<update-password-popup/>

MutationObserver — Proteção Anti-DevTools

O componente registra um MutationObserver no document.body ao abrir. Se #updatePasswordPopup for removido do DOM (ex: via DevTools), a página é recarregada. O observer é desconectado em 3 situações.

mounted(): isPopupActive = true → watchPopupDeletion() chamado
MutationObserver observa document.body (childList + subtree)
↓ elemento removido do DOM
observer.callback: #updatePasswordPopup não encontrado → location.reload()
── observer.disconnect() em:
1. Salvo com sucesso (dispatch user/updatePassword resolvido)
2. Mudança de rota (watch: $route)
3. beforeDestroy()

API

Resumo
PropsNenhuma
Eventos emitidosNenhum
PadrãoSingleton Vuex — bloqueante, sem fechar
Condição de aberturaAppActiveUser.old_password_in_use = true + rota permitida
Rotas bloqueadas/two-factor, /chat-attendance — não renderiza

Estado interno (data)

PropriedadeTipoDescrição
isPopupActiveBooleanControla vs-popup. Setado true em mounted quando old_password_in_use=true.
passwordStringCampo nova senha. Passado para PasswordStrong e filterPassword().
confirm_passwordStringCampo confirmação. Validado contra password via vee-validate.
showRequirementsBooleanToggle do vs-alert de requisitos. False = recolhido, True = expandido (170px).
showPasswordBooleanToggle visibilidade campo nova senha. Alterna ícone visibility/visibility_off.
showConfirmPasswordBooleanToggle visibilidade campo confirmação.
observerMutationObserverReferência ao observer. Desconectado em 3 situações (ver seção acima).

Validação de senha

CondiçãoResultado
Campos vazios ou erro vee-validate Botão Salvar desabilitado (computed formValid)
filterPassword(password) < 75 $vs.notify danger — senha fraca
filterPassword(password) >= 75 dispatch user/updatePassword → UPDATE_USER_INFO(old_password_in_use=false) → fecha popup

Dependências

TipoDependênciaDescrição
Vuesax vs-popup, vs-input, vs-icon, vs-alert, vs-button Popup base e campos de formulário
Custom PasswordStrong, FeatherIcon Indicador de força de senha e ícones
Store user (módulo dinâmico) Action user/updatePassword e AppActiveUser.old_password_in_use
Utils filterPassword() Calcula score de força da senha (0–100). Threshold: 75 para salvar.
Web API MutationObserver Proteção anti-DevTools: recarrega página se popup removido do DOM

Onde é usado

ArquivoNota
src/layouts/main/Main.vue:78 Único uso. Registrado no bloco de popups de sistema junto com NotificationPopup e ContractPopup.