gabrielb 5a7f4ba07a feat: scaffold inicial do portal público de autoatendimento fiscal
- Vue 3.5 + Vite 8 + PrimeVue 4 (Aura) + TailwindCSS 4 + DM Sans
- Sistema de tenant multi-prefeitura: bootstrap, prefeituraStore, getTenant
- Tema dinâmico por município via applyTemplate (9 paletas)
- Logo e foto de fundo resolvidos a partir do VITE_API_URL + path relativo
- HomeView: hero split com foto/gradiente, carousel de avisos, cards de serviços
- LoginView: fluxo 2 etapas (documento na home → senha em /login)
- Roteamento completo: público (/), serviços (/servicos/*), portal autenticado (/portal/*)
- authStore + authService estruturados para Keycloak PKCE (integração pendente)
- Placeholders para todas as telas da área logada

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 00:20:07 -03:00

70 lines
2.6 KiB
Vue

<script setup>
import { useAuthStore } from '@/stores/authStore'
import { authService } from '@/services/authService'
const auth = useAuthStore()
const navItems = [
{ name: 'painel', label: 'Painel' },
{ name: 'debitos', label: 'Débitos' },
{ name: 'certidoes-portal', label: 'Certidões' },
{ name: 'alvaras', label: 'Alvarás' },
{ name: 'pagamentos', label: 'Pagamentos' },
{ name: 'dados', label: 'Dados Cadastrais' },
]
function sair() {
auth.clearSession()
authService.logout()
}
</script>
<template>
<div class="min-h-screen flex flex-col bg-slate-50">
<header class="bg-white border-b border-slate-200 sticky top-0 z-40">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 h-16 flex items-center justify-between">
<RouterLink :to="{ name: 'painel' }" class="flex items-center gap-3">
<div class="w-8 h-8 bg-blue-700 rounded-lg flex items-center justify-center">
<i class="pi pi-building text-white text-sm" />
</div>
<span class="font-semibold text-slate-800">Portal do Contribuinte</span>
</RouterLink>
<nav class="hidden md:flex items-center gap-1">
<RouterLink
v-for="item in navItems"
:key="item.name"
:to="{ name: item.name }"
class="px-3 py-2 rounded-lg text-sm text-slate-600 hover:bg-slate-100 hover:text-slate-900 transition-colors"
active-class="bg-blue-50 text-blue-700 font-medium"
>
{{ item.label }}
</RouterLink>
</nav>
<div class="flex items-center gap-3">
<span class="hidden sm:block text-sm text-slate-600">{{ auth.nomeUsuario }}</span>
<Button
label="Sair"
severity="secondary"
size="small"
icon="pi pi-sign-out"
outlined
@click="sair"
/>
</div>
</div>
</header>
<main class="flex-1 max-w-7xl mx-auto w-full px-4 sm:px-6 lg:px-8 py-8">
<RouterView v-slot="{ Component }">
<Transition name="page" mode="out-in">
<component :is="Component" />
</Transition>
</RouterView>
</main>
<AppFooter />
</div>
</template>