From 2c2b792b4af75aa3ec34aff35c04f03330840525 Mon Sep 17 00:00:00 2001 From: deyvisonwanderley Date: Sun, 26 Oct 2025 22:21:53 -0300 Subject: [PATCH] feat: enhance employee and symbol management with new features, improved UI components, and backend schema updates --- apps/web/src/app.css | 18 + apps/web/src/hooks.server.ts | 9 + .../src/lib/components/MenuProtection.svelte | 154 +++ .../src/lib/components/ProtectedRoute.svelte | 74 ++ apps/web/src/lib/components/Sidebar.svelte | 409 +++++++- apps/web/src/lib/stores/auth.svelte.ts | 112 ++ apps/web/src/lib/stores/loginModal.svelte.ts | 22 + .../web/src/routes/(dashboard)/+layout.svelte | 94 +- apps/web/src/routes/(dashboard)/+page.svelte | 586 ++++++++++- .../(dashboard)/alterar-senha/+page.svelte | 371 +++++++ .../routes/(dashboard)/compras/+page.svelte | 48 + .../(dashboard)/comunicacao/+page.svelte | 48 + .../(dashboard)/controladoria/+page.svelte | 99 ++ .../(dashboard)/esqueci-senha/+page.svelte | 264 +++++ .../(dashboard)/financeiro/+page.svelte | 99 ++ .../(dashboard)/gestao-pessoas/+page.svelte | 48 + .../routes/(dashboard)/juridico/+page.svelte | 48 + .../(dashboard)/licitacoes/+page.svelte | 99 ++ .../routes/(dashboard)/perfil/+page.svelte | 174 ++++ .../programas-esportivos/+page.svelte | 48 + .../(dashboard)/recursos-humanos/+page.svelte | 286 ++++- .../funcionarios/+page.svelte | 177 +++- .../[funcionarioId]/editar/+page.svelte | 176 +++- .../funcionarios/cadastro/+page.svelte | 179 +++- .../funcionarios/excluir/+page.svelte | 369 +++++-- .../funcionarios/relatorios/+page.svelte | 242 +++-- .../recursos-humanos/simbolos/+page.svelte | 237 +++-- .../simbolos/cadastro/+page.svelte | 650 +++++++----- .../secretaria-executiva/+page.svelte | 48 + .../(dashboard)/solicitar-acesso/+page.svelte | 259 +++++ .../src/routes/(dashboard)/ti/+page.svelte | 197 ++++ .../ti/painel-administrativo/+page.svelte | 977 ++++++++++++++++++ .../ti/painel-permissoes/+page.svelte | 331 ++++++ .../ti/personalizar-permissoes/+page.svelte | 383 +++++++ packages/backend/convex/_generated/api.d.ts | 22 + packages/backend/convex/autenticacao.ts | 381 +++++++ packages/backend/convex/auth/utils.ts | 132 +++ packages/backend/convex/dashboard.ts | 178 ++++ .../backend/convex/inicializarPermissoes.ts | 76 ++ packages/backend/convex/logsAcesso.ts | 227 ++++ packages/backend/convex/menuPermissoes.ts | 525 ++++++++++ packages/backend/convex/monitoramento.ts | 146 +++ packages/backend/convex/roles.ts | 44 + packages/backend/convex/schema.ts | 128 +++ packages/backend/convex/seed.ts | 425 ++++++++ packages/backend/convex/solicitacoesAcesso.ts | 234 +++++ packages/backend/convex/usuarios.ts | 320 ++++++ packages/backend/start-local.ps1 | 12 + 48 files changed, 9513 insertions(+), 672 deletions(-) create mode 100644 apps/web/src/hooks.server.ts create mode 100644 apps/web/src/lib/components/MenuProtection.svelte create mode 100644 apps/web/src/lib/components/ProtectedRoute.svelte create mode 100644 apps/web/src/lib/stores/auth.svelte.ts create mode 100644 apps/web/src/lib/stores/loginModal.svelte.ts create mode 100644 apps/web/src/routes/(dashboard)/alterar-senha/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/compras/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/comunicacao/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/controladoria/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/esqueci-senha/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/financeiro/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/gestao-pessoas/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/juridico/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/licitacoes/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/perfil/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/programas-esportivos/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/secretaria-executiva/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/solicitar-acesso/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/ti/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/ti/painel-administrativo/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/ti/painel-permissoes/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/ti/personalizar-permissoes/+page.svelte create mode 100644 packages/backend/convex/autenticacao.ts create mode 100644 packages/backend/convex/auth/utils.ts create mode 100644 packages/backend/convex/dashboard.ts create mode 100644 packages/backend/convex/inicializarPermissoes.ts create mode 100644 packages/backend/convex/logsAcesso.ts create mode 100644 packages/backend/convex/menuPermissoes.ts create mode 100644 packages/backend/convex/monitoramento.ts create mode 100644 packages/backend/convex/roles.ts create mode 100644 packages/backend/convex/seed.ts create mode 100644 packages/backend/convex/solicitacoesAcesso.ts create mode 100644 packages/backend/convex/usuarios.ts create mode 100644 packages/backend/start-local.ps1 diff --git a/apps/web/src/app.css b/apps/web/src/app.css index 4c1b0c2..5e25b7b 100644 --- a/apps/web/src/app.css +++ b/apps/web/src/app.css @@ -1,2 +1,20 @@ @import "tailwindcss"; @plugin "daisyui"; + +/* Estilo padrão dos botões - mesmo estilo do sidebar */ +.btn-standard { + @apply font-medium flex items-center justify-center gap-2 text-center p-3 rounded-xl border border-base-300 bg-base-100 hover:bg-primary/60 active:bg-primary text-base-content hover:text-white active:text-white transition-colors; +} + +/* Sobrescrever estilos DaisyUI para seguir o padrão */ +.btn-primary { + @apply font-medium flex items-center justify-center gap-2 text-center px-4 py-2 rounded-xl border border-base-300 bg-base-100 hover:bg-primary/60 active:bg-primary text-base-content hover:text-white active:text-white transition-colors; +} + +.btn-ghost { + @apply font-medium flex items-center justify-center gap-2 text-center px-4 py-2 rounded-xl border border-base-300 bg-base-100 hover:bg-base-200 active:bg-base-300 text-base-content transition-colors; +} + +.btn-error { + @apply font-medium flex items-center justify-center gap-2 text-center px-4 py-2 rounded-xl border border-error bg-base-100 hover:bg-error/60 active:bg-error text-error hover:text-white active:text-white transition-colors; +} \ No newline at end of file diff --git a/apps/web/src/hooks.server.ts b/apps/web/src/hooks.server.ts new file mode 100644 index 0000000..de58268 --- /dev/null +++ b/apps/web/src/hooks.server.ts @@ -0,0 +1,9 @@ +import type { Handle } from "@sveltejs/kit"; + +// Middleware desabilitado - proteção de rotas feita no lado do cliente +// para compatibilidade com localStorage do authStore + +export const handle: Handle = async ({ event, resolve }) => { + return resolve(event); +}; + diff --git a/apps/web/src/lib/components/MenuProtection.svelte b/apps/web/src/lib/components/MenuProtection.svelte new file mode 100644 index 0000000..bc2159c --- /dev/null +++ b/apps/web/src/lib/components/MenuProtection.svelte @@ -0,0 +1,154 @@ + + +{#if verificando} +
+
+ {#if motivoNegacao === "auth_required"} +
+ + + +
+

Acesso Restrito

+

+ Esta área requer autenticação.
+ Por favor, faça login para continuar. +

+ {:else} + +

Verificando permissões...

+ {/if} +
+
+{:else if temPermissao} + {@render children?.()} +{:else} +
+
+
+ + + +
+

Acesso Negado

+

Você não tem permissão para acessar esta página.

+ +
+
+{/if} + diff --git a/apps/web/src/lib/components/ProtectedRoute.svelte b/apps/web/src/lib/components/ProtectedRoute.svelte new file mode 100644 index 0000000..3162bf7 --- /dev/null +++ b/apps/web/src/lib/components/ProtectedRoute.svelte @@ -0,0 +1,74 @@ + + +{#if isChecking} +
+
+ +

Verificando permissões...

+
+
+{:else if hasAccess} + {@render children()} +{/if} + diff --git a/apps/web/src/lib/components/Sidebar.svelte b/apps/web/src/lib/components/Sidebar.svelte index b756b49..a995514 100644 --- a/apps/web/src/lib/components/Sidebar.svelte +++ b/apps/web/src/lib/components/Sidebar.svelte @@ -1,10 +1,17 @@ -