NotificationPopup
Popup de notificações do sistema exibido na entrada do usuário quando há notificações não-lidas.
Usa Swiper (vue-awesome-swiper) para navegação entre notificações em slides.
Cada slide: título em primário + texto HTML + vídeo opcional (iframe YouTube).
Botões de navegação externos ao swiper (.button-next / .button-prev).
Último slide: botão "Marcar como lida(s)" que marca todas via loop.
v-if condicional — não renderiza se não há notificações.
Zero props, zero eventos — totalmente gerenciado pelo módulo Vuex userNotification.
1 Notificação
Com apenas 1 notificação: botão "Marcar como lida" visível imediatamente. Botão "Continuar" oculto.
Layout: vs-col=2 (chevron esq.) + vs-col=8 (card+swiper) + vs-col=2 (chevron dir.).
Estamos felizes em ter você aqui! Confira as novidades desta versão e aproveite todas as funcionalidades disponíveis no sistema.
Acesse o menu lateral para navegar entre os módulos.
<!-- Registrado em Main.vue junto com os outros popups de sistema -->
<notification-popup/>
<contract-popup/>
<update-password-popup/>
Múltiplas Notificações
Com N notificações: slides intermediários mostram "Continuar", último slide exibe "Marcar como lida(s)". Bullets de paginação abaixo do conteúdo indicam posição atual.
Agora você pode exportar relatórios de atendimento em PDF e Excel diretamente pela tela de análise.
Recomendamos trocar sua senha periodicamente. Acesse Meu Perfil → Segurança para atualizar.
<!-- Estados de botão são controlados internamente por índice de slide (Swiper) -->
<!-- Slide intermediário: isLast = false → v-show="!isLast" -->
<vs-button v-show="!isLast" @click="nextSlide">Continuar</vs-button>
<!-- Último slide: isLast = true → v-show="isLast" -->
<vs-button v-show="isLast" @click="readAllNotifications">
Marcar como lida(s)
</vs-button>
Slide com Vídeo
Quando notification.video_url está preenchido, o slide exibe um iframe YouTube de 300px de altura.
O iframe só é renderizado com v-if="openPopUp" — evita autoplay ao fechar o popup.
Este comportamento é determinado pelos dados da notificação no backend, não por props.
Assista ao vídeo abaixo para conhecer as principais funcionalidades.
<!-- iframe só existe quando o popup está aberto (openPopUp=true) -->
<!-- Isso evita que o YouTube faça autoplay quando o popup reabre -->
<iframe
v-if="openPopUp && notification.video_url"
:src="notification.video_url"
frameborder="0"
allowfullscreen
style="width:100%; height:300px;"
/>
Fluxo de Ciclo de Vida
O componente abre automaticamente via Vuex — sem interação do usuário necessária.
O módulo userNotification é registrado dinamicamente em mounted().
API
| Resumo | |
|---|---|
| Props | Nenhuma |
| Eventos emitidos | Nenhum |
| Padrão | Singleton Vuex — auto-gerenciado |
Estado interno (data)
| Propriedade | Tipo | Descrição |
|---|---|---|
openPopUp |
Boolean | Controla visibilidade do vs-popup. Setado true quando há notificações não-lidas. |
swiperOption |
Object | Config do Swiper: pagination clickable (bullets), navigation via botões externos (.button-next/.button-prev). |
isLast |
Boolean (computed) | True quando slide ativo é o último. Controla visibilidade de "Continuar" vs "Marcar como lida". |
Dependências
| Tipo | Dependência | Descrição |
|---|---|---|
| Vuesax | vs-popup, vs-row, vs-col, vs-button |
Layout e popup base |
| Custom | vx-card |
Wrapper do swiper com slot no-body |
| Externo | vue-awesome-swiper |
Componentes swiper e swiperSlide para navegação em slides |
| Store | userNotification (módulo dinâmico) |
Registrado via registerModule em mounted(). Actions: fetch, read. Getter: notificações do usuário. |
| Store | AppActiveUser.id |
ID do usuário ativo — passado ao fetch de notificações |
| HTTP | userNotification.fetch |
Busca notificações não-lidas do usuário via API |
CSS tokens internos
| Classe/Variável | Valor | Descrição |
|---|---|---|
.text-header | color: $PRIMARY_COLOR | Título de cada slide em cor primária |
.text-body | white-space: pre-line | Preserva quebras de linha no corpo HTML |
| altura do swiper | 420px | Altura fixa do container swiper |
| slide min-height | 70vh | Altura mínima de cada slide |
.button-prev / .button-next | — | Elementos externos ao swiper que controlam navegação |
Onde é usado
| Arquivo | Nota |
|---|---|
src/layouts/main/Main.vue:78 |
Único uso. Registrado no bloco de popups de sistema junto com ContractPopup e UpdatePasswordPopup. |