feat: Add 'atas' (minutes/records) management feature, and implement various improvements across UI, backend logic, and authentication.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
<script lang="ts">
|
||||
import { useConvexClient } from 'convex-svelte';
|
||||
import { api } from '@sgse-app/backend/convex/_generated/api';
|
||||
import type { Id, Doc } from '@sgse-app/backend/convex/_generated/dataModel';
|
||||
import type { Doc, Id } from '@sgse-app/backend/convex/_generated/dataModel';
|
||||
import { useConvexClient } from 'convex-svelte';
|
||||
import ErrorModal from './ErrorModal.svelte';
|
||||
|
||||
type SolicitacaoAusencia = Doc<'solicitacoesAusencias'> & {
|
||||
@@ -17,11 +17,11 @@
|
||||
onCancelar?: () => void;
|
||||
}
|
||||
|
||||
let { solicitacao, gestorId, onSucesso, onCancelar }: Props = $props();
|
||||
const { solicitacao, gestorId, onSucesso, onCancelar }: Props = $props();
|
||||
|
||||
const client = useConvexClient();
|
||||
|
||||
let motivoReprovacao = $state('');
|
||||
const motivoReprovacao = $state('');
|
||||
let processando = $state(false);
|
||||
let erro = $state('');
|
||||
let mostrarModalErro = $state(false);
|
||||
@@ -138,12 +138,12 @@
|
||||
</div>
|
||||
|
||||
<!-- Card Principal -->
|
||||
<div class="card bg-base-100 border-t-4 border-primary shadow-2xl">
|
||||
<div class="card bg-base-100 border-primary border-t-4 shadow-2xl">
|
||||
<div class="card-body p-8">
|
||||
<!-- Informações do Funcionário -->
|
||||
<div class="mb-8">
|
||||
<h3 class="mb-5 flex items-center gap-3 text-xl font-bold text-primary">
|
||||
<div class="rounded-lg bg-primary/10 p-2">
|
||||
<h3 class="text-primary mb-5 flex items-center gap-3 text-xl font-bold">
|
||||
<div class="bg-primary/10 rounded-lg p-2">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="text-primary h-6 w-6"
|
||||
@@ -162,17 +162,17 @@
|
||||
Funcionário
|
||||
</h3>
|
||||
<div class="grid grid-cols-1 gap-5 md:grid-cols-2">
|
||||
<div class="rounded-xl bg-base-200/50 p-4 transition-all hover:bg-base-200">
|
||||
<p class="mb-2 text-sm font-semibold uppercase tracking-wide text-base-content/60">
|
||||
<div class="bg-base-200/50 hover:bg-base-200 rounded-xl p-4 transition-all">
|
||||
<p class="text-base-content/60 mb-2 text-sm font-semibold tracking-wide uppercase">
|
||||
Nome
|
||||
</p>
|
||||
<p class="text-lg font-bold text-base-content">
|
||||
<p class="text-base-content text-lg font-bold">
|
||||
{solicitacao.funcionario?.nome || 'N/A'}
|
||||
</p>
|
||||
</div>
|
||||
{#if solicitacao.time}
|
||||
<div class="rounded-xl bg-base-200/50 p-4 transition-all hover:bg-base-200">
|
||||
<p class="mb-2 text-sm font-semibold uppercase tracking-wide text-base-content/60">
|
||||
<div class="bg-base-200/50 hover:bg-base-200 rounded-xl p-4 transition-all">
|
||||
<p class="text-base-content/60 mb-2 text-sm font-semibold tracking-wide uppercase">
|
||||
Time
|
||||
</p>
|
||||
<div
|
||||
@@ -191,8 +191,8 @@
|
||||
|
||||
<!-- Período da Ausência -->
|
||||
<div class="mb-8">
|
||||
<h3 class="mb-5 flex items-center gap-3 text-xl font-bold text-primary">
|
||||
<div class="rounded-lg bg-primary/10 p-2">
|
||||
<h3 class="text-primary mb-5 flex items-center gap-3 text-xl font-bold">
|
||||
<div class="bg-primary/10 rounded-lg p-2">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="text-primary h-6 w-6"
|
||||
@@ -212,26 +212,26 @@
|
||||
</h3>
|
||||
<div class="grid grid-cols-1 gap-4 md:grid-cols-3">
|
||||
<div
|
||||
class="stat rounded-xl border-2 border-primary/20 bg-gradient-to-br from-primary/5 to-primary/10 shadow-md transition-all hover:border-primary/30 hover:shadow-lg"
|
||||
class="stat border-primary/20 from-primary/5 to-primary/10 hover:border-primary/30 rounded-xl border-2 bg-gradient-to-br shadow-md transition-all hover:shadow-lg"
|
||||
>
|
||||
<div class="stat-title text-base-content/70">Data Início</div>
|
||||
<div class="stat-value text-2xl text-primary">
|
||||
<div class="stat-value text-primary text-2xl">
|
||||
{new Date(solicitacao.dataInicio).toLocaleDateString('pt-BR')}
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="stat rounded-xl border-2 border-primary/20 bg-gradient-to-br from-primary/5 to-primary/10 shadow-md transition-all hover:border-primary/30 hover:shadow-lg"
|
||||
class="stat border-primary/20 from-primary/5 to-primary/10 hover:border-primary/30 rounded-xl border-2 bg-gradient-to-br shadow-md transition-all hover:shadow-lg"
|
||||
>
|
||||
<div class="stat-title text-base-content/70">Data Fim</div>
|
||||
<div class="stat-value text-2xl text-primary">
|
||||
<div class="stat-value text-primary text-2xl">
|
||||
{new Date(solicitacao.dataFim).toLocaleDateString('pt-BR')}
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="stat rounded-xl border-2 border-primary/30 bg-gradient-to-br from-primary/10 to-primary/15 shadow-md transition-all hover:border-primary/40 hover:shadow-lg"
|
||||
class="stat border-primary/30 from-primary/10 to-primary/15 hover:border-primary/40 rounded-xl border-2 bg-gradient-to-br shadow-md transition-all hover:shadow-lg"
|
||||
>
|
||||
<div class="stat-title text-base-content/70">Total de Dias</div>
|
||||
<div class="stat-value text-3xl font-bold text-primary">
|
||||
<div class="stat-value text-primary text-3xl font-bold">
|
||||
{totalDias}
|
||||
</div>
|
||||
<div class="stat-desc text-base-content/60">dias corridos</div>
|
||||
@@ -243,8 +243,8 @@
|
||||
|
||||
<!-- Motivo -->
|
||||
<div class="mb-8">
|
||||
<h3 class="mb-5 flex items-center gap-3 text-xl font-bold text-primary">
|
||||
<div class="rounded-lg bg-primary/10 p-2">
|
||||
<h3 class="text-primary mb-5 flex items-center gap-3 text-xl font-bold">
|
||||
<div class="bg-primary/10 rounded-lg p-2">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="text-primary h-6 w-6"
|
||||
@@ -262,9 +262,9 @@
|
||||
</div>
|
||||
Motivo da Ausência
|
||||
</h3>
|
||||
<div class="card rounded-xl border-2 border-primary/10 bg-base-200/50 shadow-sm">
|
||||
<div class="card border-primary/10 bg-base-200/50 rounded-xl border-2 shadow-sm">
|
||||
<div class="card-body p-5">
|
||||
<p class="whitespace-pre-wrap leading-relaxed text-base-content">
|
||||
<p class="text-base-content leading-relaxed whitespace-pre-wrap">
|
||||
{solicitacao.motivo}
|
||||
</p>
|
||||
</div>
|
||||
@@ -272,9 +272,9 @@
|
||||
</div>
|
||||
|
||||
<!-- Status Atual -->
|
||||
<div class="mb-8 rounded-xl bg-base-200/30 p-4">
|
||||
<div class="bg-base-200/30 mb-8 rounded-xl p-4">
|
||||
<div class="flex items-center gap-3">
|
||||
<span class="text-sm font-semibold uppercase tracking-wide text-base-content/70"
|
||||
<span class="text-base-content/70 text-sm font-semibold tracking-wide uppercase"
|
||||
>Status:</span
|
||||
>
|
||||
<div class={`badge badge-lg ${getStatusBadge(solicitacao.status)}`}>
|
||||
@@ -362,14 +362,14 @@
|
||||
|
||||
<!-- Modal de Reprovação -->
|
||||
{#if motivoReprovacao !== undefined}
|
||||
<div class="mt-6 rounded-xl border-2 border-error/20 bg-error/5 p-5">
|
||||
<div class="border-error/20 bg-error/5 mt-6 rounded-xl border-2 p-5">
|
||||
<div class="form-control">
|
||||
<label class="label" for="motivo-reprovacao">
|
||||
<span class="label-text font-bold text-error">Motivo da Reprovação</span>
|
||||
<span class="label-text text-error font-bold">Motivo da Reprovação</span>
|
||||
</label>
|
||||
<textarea
|
||||
id="motivo-reprovacao"
|
||||
class="textarea textarea-bordered h-24 focus:border-error focus:outline-error"
|
||||
class="textarea textarea-bordered focus:border-error focus:outline-error h-24"
|
||||
placeholder="Informe o motivo da reprovação..."
|
||||
bind:value={motivoReprovacao}
|
||||
></textarea>
|
||||
|
||||
Reference in New Issue
Block a user