diff --git a/apps/web/src/routes/(dashboard)/ti/usuarios/+page.svelte b/apps/web/src/routes/(dashboard)/ti/usuarios/+page.svelte index 4c467d2..133e4dc 100644 --- a/apps/web/src/routes/(dashboard)/ti/usuarios/+page.svelte +++ b/apps/web/src/routes/(dashboard)/ti/usuarios/+page.svelte @@ -1,184 +1,31 @@
- -
-
-
- - - -
-
-

Gestão de Usuários

-

Administre os usuários do sistema

-
-
- -
+
- {#if !carregandoUsuarios && usuariosComProblemas.length > 0} + {#if !loading && usuariosComProblemas.length > 0}
    - {#each usuariosComProblemas.slice(0, 3) as usuario} + {#each usuariosComProblemas.slice(0, 3) as usuario (usuario._id)}
  • {usuario.nome} ({usuario.matricula}) {#if usuario.avisos && usuario.avisos.length > 0} @@ -612,693 +232,65 @@
  • {/if}
-

- Por favor, corrija os perfis desses usuários para garantir acesso adequado ao sistema. -

{/if} - + {#if mensagem} -
- {#if mensagem.tipo === 'success'} - - - - {:else if mensagem.tipo === 'error'} - - - - {:else} - - - - {/if} - {mensagem.texto} -
- {/if} - - - {#if !carregandoUsuarios && usuarios.length > 0} -
-
-
-

Filtros de Busca

- -
- -
- -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
-
- -
- Mostrando {usuariosFiltrados.length} de {usuarios.length} usuário(s) -
-
-
- {/if} - - - {#if carregandoUsuarios} -
- -

Carregando usuários...

-
- {:else if erroUsuarios} -
- +
- - -
-

Erro ao carregar usuários

-
{erroUsuarios}
-
- Por favor, recarregue a página ou entre em contato com o suporte técnico se o problema - persistir. -
-
-
- {:else if usuarios.length === 0} -
- - - -

Nenhum usuário encontrado

-

- Cadastre um usuário para começar a gestão de acessos. -

-
- {:else} -
-
-

Usuários ({usuarios.length})

- -
- - - - - - - - - - - - - - - - - - {#each usuariosFiltrados as usuario} - - - - - - - - - - - - - - {/each} - -
MatrículaNomeEmailRole/PerfilSetorFuncionário VinculadoStatusPrimeiro AcessoÚltimo AcessoData de CriaçãoAções
{usuario.matricula}{usuario.nome}{usuario.email} -
- {#if usuario.role.erro} -
- - - - {usuario.role.descricao} -
- {#if usuario.avisos && usuario.avisos.length > 0} -
- -
- {/if} - {:else} -
- {usuario.role.nome} -
- {/if} -
-
{usuario.role.setor || '-'} - {#if usuario.funcionario} -
-
- - - - Associado -
-
- {usuario.funcionario.nome} -
- {#if usuario.funcionario.matricula} -
- Mat: {usuario.funcionario.matricula} -
- {/if} -
- {:else} -
- - - - Não associado -
- {/if} -
- - - {#if usuario.primeiroAcesso} -
Sim
- {:else} -
Não
- {/if} -
- {formatarData(usuario.ultimoAcesso)} - - {formatarData(usuario.criadoEm)} - - -
-
+ {mensagem.texto}
{/if} + + + + + + (isEditRoleOpen = false)} + onsuccess={onRoleSuccess} + /> + + (isAssociateOpen = false)} + onsuccess={onAssociateSuccess} + /> + + (isBlockOpen = false)} + onsuccess={onBlockSuccess} + />
- - - {#if modalAssociarAberto && usuarioSelecionado} - - {/if} - - - {#if modalExcluirAberto && usuarioSelecionado} - - {/if}
diff --git a/apps/web/src/routes/(dashboard)/ti/usuarios/components/AssociateEmployeeModal.svelte b/apps/web/src/routes/(dashboard)/ti/usuarios/components/AssociateEmployeeModal.svelte new file mode 100644 index 0000000..e0c36a5 --- /dev/null +++ b/apps/web/src/routes/(dashboard)/ti/usuarios/components/AssociateEmployeeModal.svelte @@ -0,0 +1,177 @@ + + +{#if open} + +{/if} diff --git a/apps/web/src/routes/(dashboard)/ti/usuarios/components/BlockUserModal.svelte b/apps/web/src/routes/(dashboard)/ti/usuarios/components/BlockUserModal.svelte new file mode 100644 index 0000000..76dcafb --- /dev/null +++ b/apps/web/src/routes/(dashboard)/ti/usuarios/components/BlockUserModal.svelte @@ -0,0 +1,111 @@ + + +{#if open} + +{/if} diff --git a/apps/web/src/routes/(dashboard)/ti/usuarios/components/EditRoleModal.svelte b/apps/web/src/routes/(dashboard)/ti/usuarios/components/EditRoleModal.svelte new file mode 100644 index 0000000..273f816 --- /dev/null +++ b/apps/web/src/routes/(dashboard)/ti/usuarios/components/EditRoleModal.svelte @@ -0,0 +1,118 @@ + + +{#if open} + +{/if} diff --git a/apps/web/src/routes/(dashboard)/ti/usuarios/components/Header.svelte b/apps/web/src/routes/(dashboard)/ti/usuarios/components/Header.svelte new file mode 100644 index 0000000..df02ecf --- /dev/null +++ b/apps/web/src/routes/(dashboard)/ti/usuarios/components/Header.svelte @@ -0,0 +1,42 @@ + + +
+
+
+ + + +
+
+

Gestão de Usuários

+

Administre os usuários do sistema

+
+
+
+ + + + + Criar Usuário + +
+
diff --git a/apps/web/src/routes/(dashboard)/ti/usuarios/components/UserActions.svelte b/apps/web/src/routes/(dashboard)/ti/usuarios/components/UserActions.svelte new file mode 100644 index 0000000..6e35038 --- /dev/null +++ b/apps/web/src/routes/(dashboard)/ti/usuarios/components/UserActions.svelte @@ -0,0 +1,65 @@ + + + diff --git a/apps/web/src/routes/(dashboard)/ti/usuarios/components/UserFilters.svelte b/apps/web/src/routes/(dashboard)/ti/usuarios/components/UserFilters.svelte new file mode 100644 index 0000000..d661387 --- /dev/null +++ b/apps/web/src/routes/(dashboard)/ti/usuarios/components/UserFilters.svelte @@ -0,0 +1,173 @@ + + +
+
+
+

Filtros de Busca

+ +
+ +
+ +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+
+
+
diff --git a/apps/web/src/routes/(dashboard)/ti/usuarios/components/UserList.svelte b/apps/web/src/routes/(dashboard)/ti/usuarios/components/UserList.svelte new file mode 100644 index 0000000..cfcc201 --- /dev/null +++ b/apps/web/src/routes/(dashboard)/ti/usuarios/components/UserList.svelte @@ -0,0 +1,138 @@ + + +{#if loading} +
+ +
+{:else if usuarios.length === 0} +
+ + + + Nenhum usuário encontrado com os filtros atuais. +
+{:else} +
+ + + + + + + + + + + + + + {#each usuarios as usuario (usuario._id)} + + + + + + + + + + {/each} + +
UsuárioRoleFuncionário AssociadoStatusCriado emÚltimo AcessoAções
+
+
+
+ {usuario.nome.slice(0, 2)} +
+
+
+
{usuario.nome}
+
{usuario.email}
+
+
+
+
+ + {usuario.role.nome} + {#if usuario.role.admin} + + {/if} + + {#if usuario.role.erro} + Perfil inválido/apagado + {/if} +
+
+ {#if usuario.funcionario} +
+ {usuario.funcionario.nome} + + {usuario.funcionario.descricaoCargo || 'Sem cargo'} + +
+ {:else} + Não associado + {/if} +
+ + + {formatarData(usuario.criadoEm)} + + {formatarData(usuario.ultimoAcesso)} + + +
+
+
+ Exibindo {usuarios.length} usuário(s) +
+{/if} diff --git a/apps/web/src/routes/(dashboard)/ti/usuarios/components/types.ts b/apps/web/src/routes/(dashboard)/ti/usuarios/components/types.ts new file mode 100644 index 0000000..80fed8c --- /dev/null +++ b/apps/web/src/routes/(dashboard)/ti/usuarios/components/types.ts @@ -0,0 +1,50 @@ +import type { Id } from '@sgse-app/backend/convex/_generated/dataModel'; + +export type AvisoUsuario = { + tipo: 'erro' | 'aviso' | 'info'; + mensagem: string; +}; + +export type RoleUsuario = { + _id: Id<'roles'>; + nome: string; + admin?: boolean; + descricao: string; + erro?: boolean; + setor?: string; +}; + +export type Usuario = { + _id: Id<'usuarios'>; + matricula: string; + nome: string; + email: string; + ativo: boolean; + bloqueado?: boolean; + motivoBloqueio?: string; + primeiroAcesso: boolean; + ultimoAcesso?: number; + criadoEm: number; + role: RoleUsuario; + funcionario?: { + _id: Id<'funcionarios'>; + nome: string; + matricula?: string; + descricaoCargo?: string; + simboloTipo: 'cargo_comissionado' | 'funcao_gratificada'; + }; + avisos?: AvisoUsuario[]; +}; + +export type Funcionario = { + _id: Id<'funcionarios'>; + nome: string; + matricula?: string; + cpf?: string; + descricaoCargo?: string; +}; + +export type Mensagem = { + tipo: 'success' | 'error' | 'info'; + texto: string; +};