ContractPopup
Popup de aceitação de termos e contrato. Exibido obrigatoriamente (sem botão fechar) quando o usuário não assinou o contrato (contract_signed_at ou contract_subscriber_ip nulos). Renderiza PDFs inline via vue-pdf com paginação. Dois documentos em sequência: Contrato de Prestação de Serviços → Regras. Recusar em qualquer etapa faz logout imediato.
Etapa 1 — Contrato de Prestação de Serviços
Primeira etapa. PDF do Contrato exibido inline. Footer: botão "Recusar" (danger, esquerda) → logout imediato. Botão "Aceitar" (success, direita) → avança para PDF de Regras. O popup não tem botão de fechar — aceite ou logout são as únicas opções.
<notification-popup/>
<contract-popup/>
<update-password-popup/>
Etapa 2 — Regras
Segunda e última etapa. Exibida após "Aceitar" na etapa do Contrato. Botão "Aceitar" chama signContractRule dispatch que fecha o popup definitivamente. Recusar ainda resulta em logout.
<!-- Fluxo interno sem props configuráveis: -->
<!-- 1. created(): busca contract/contractInfos -->
<!-- 2. Se não assinado → abre popup com PDF do Contrato -->
<!-- 3. Aceitar → muda para PDF de Regras -->
<!-- 4. Aceitar Regras → signContractRule → fecha popup -->
<!-- 5. Recusar → logout (limpa localStorage, redirect /login) -->
<contract-popup/>
Fluxo Completo
Sequência obrigatória — o usuário não pode fechar o popup sem aceitar ou fazer logout.
contract/contractInfos. Verifica contract_signed_at e contract_subscriber_ip.isPopupActive=true. pdfList preenchido com 2 PDFs. Tab ativo = "Contrato de Prestação de Serviços".tabActive para "Regras". PDF de Regras exibido.isPopupActive=false. Acesso liberado.accessToken, groupsSelectedFilter, userInfo). Dispatch auth/disconnected. Redirect /login. $acl.change('administrador'). $vs.notify warning.<!-- ContractPopup é singleton — registrado junto com os outros popups globais -->
<notification-popup/>
<contract-popup/>
<update-password-popup/>
API
<!-- Sem props — componente singleton auto-gerenciado via Vuex. -->
<!-- Abre quando contract_signed_at ou contract_subscriber_ip são nulos. -->
<!-- Sem botão de fechar — aceite ou logout obrigatório. -->
<contract-popup/>
contract da store.
Store — Módulo contract
| Action | Disparado quando |
|---|---|
contract/contractInfos |
created() — busca dados do contrato. Determina se popup deve abrir. |
contract/signContract |
Usuário aceita o Contrato de Serviços (etapa 1). |
auth/disconnected |
Usuário clica "Recusar" — desconecta e redireciona para /login. |
Dependências
Navegação de PDF (vue-pdf)
| Elemento | Descrição |
|---|---|
| Botões de seleção (topo) | Botões flat com ícone description/assignment para alternar entre os 2 PDFs (Contrato / Regras). |
| Paginação (acima + abaixo) | Página X / Total com botões Anterior/Próximo duplicados acima e abaixo do PDF. |
| PDF inline | Renderizado via componente <pdf> da lib vue-pdf. Recebe URL e número de página. |