feat: integrate point management features into the dashboard

- Added a new "Meu Ponto" section for users to register their work hours, breaks, and attendance.
- Introduced a "Controle de Ponto" category in the Recursos Humanos section for managing employee time records.
- Enhanced the backend schema to support point registration and configuration settings.
- Updated various components to improve UI consistency and user experience across the dashboard.
This commit is contained in:
2025-11-18 11:44:12 -03:00
parent 52123a33b3
commit f0c6e4468f
22 changed files with 3604 additions and 128 deletions

View File

@@ -0,0 +1,68 @@
<script lang="ts">
import { useQuery } from 'convex-svelte';
import { api } from '@sgse-app/backend/convex/_generated/api';
import { Clock, ArrowRight, CheckCircle2, XCircle } from 'lucide-svelte';
import { goto } from '$app/navigation';
import { resolve } from '$app/paths';
// Estatísticas do dia atual
const hoje = new Date().toISOString().split('T')[0]!;
const estatisticasQuery = useQuery(api.pontos.obterEstatisticas, {
dataInicio: hoje,
dataFim: hoje,
});
const estatisticas = $derived(estatisticasQuery?.data);
function abrirDashboard() {
goto(resolve('/(dashboard)/recursos-humanos/registro-pontos'));
}
</script>
<div class="card bg-gradient-to-br from-blue-500 to-cyan-600 text-white shadow-xl hover:shadow-2xl transition-all duration-300">
<div class="card-body">
<div class="flex items-center justify-between mb-4">
<div class="flex items-center gap-3">
<div class="p-3 bg-white/20 rounded-xl">
<Clock class="h-6 w-6" strokeWidth={2} />
</div>
<div>
<h3 class="card-title text-white">Gestão de Pontos</h3>
<p class="text-white/80 text-sm">Registros de ponto do dia</p>
</div>
</div>
</div>
{#if estatisticas}
<div class="grid grid-cols-2 gap-4 mb-4">
<div class="bg-white/10 rounded-lg p-3">
<div class="flex items-center gap-2 mb-1">
<CheckCircle2 class="h-4 w-4" />
<span class="text-sm text-white/80">Dentro do Prazo</span>
</div>
<div class="text-2xl font-bold">{estatisticas.dentroDoPrazo}</div>
</div>
<div class="bg-white/10 rounded-lg p-3">
<div class="flex items-center gap-2 mb-1">
<XCircle class="h-4 w-4" />
<span class="text-sm text-white/80">Fora do Prazo</span>
</div>
<div class="text-2xl font-bold">{estatisticas.foraDoPrazo}</div>
</div>
</div>
<div class="text-sm text-white/80 mb-4">
Total: {estatisticas.totalRegistros} registros de {estatisticas.totalFuncionarios} funcionários
</div>
{:else}
<div class="text-white/80 text-sm mb-4">Carregando estatísticas...</div>
{/if}
<button class="btn btn-white btn-sm w-full" onclick={abrirDashboard}>
Ver Dashboard Completo
<ArrowRight class="h-4 w-4" />
</button>
</div>
</div>