atualizacao
This commit is contained in:
@@ -5,9 +5,9 @@
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="icon" href="{{asset('assets/images/logo3.png')}}" type="image/x-icon">
|
||||
<link rel="shortcut icon" href="{{asset('assets/images/favicon.jpg')}}" type="image/x-icon">
|
||||
<title>{{ env('APP_NAME') }} - @yield('title')</title>
|
||||
<link rel="icon" href="{{ asset('assets/images/logo3.png') }}" type="image/x-icon">
|
||||
<link rel="shortcut icon" href="{{ asset('assets/images/favicon.jpg') }}" type="image/x-icon">
|
||||
<title>@yield('title') - {{env('APP_NAME_SHORT')}}</title>
|
||||
<!-- Google font-->
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com">
|
||||
<link
|
||||
@@ -20,43 +20,35 @@
|
||||
href="https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,400;0,500;0,600;0,700;0,800;0,900;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap"
|
||||
rel="stylesheet">
|
||||
<!-- Font Awesome-->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/fontawesome.css')}}">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/fontawesome.css') }}">
|
||||
<!-- ico-font-->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/icofont.css')}}">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/icofont.css') }}">
|
||||
<!-- Themify icon-->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/themify.css')}}">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/themify.css') }}">
|
||||
<!-- Flag icon-->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/flag-icon.css')}}">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/flag-icon.css') }}">
|
||||
<!-- Feather icon-->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/feather-icon.css')}}">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/feather-icon.css') }}">
|
||||
<!-- Plugins css start-->
|
||||
<!-- Plugins css Ends-->
|
||||
<!-- Bootstrap css-->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/bootstrap.css')}}">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/bootstrap.css') }}">
|
||||
<!-- App css-->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/style.css')}}">
|
||||
<link id="color" rel="stylesheet" href="{{ asset('assets/css/color-1.css')}}" media="screen">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/style.css') }}">
|
||||
<link id="color" rel="stylesheet" href="{{ asset('assets/css/color-1.css') }}" media="screen">
|
||||
<!-- Responsive css-->
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/responsive.css')}}">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/responsive.css') }}">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css">
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/dropzone.css') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@php
|
||||
use App\Models\escolas;
|
||||
use App\Models\turmas;
|
||||
if (Auth::user()->id_escola == 0) {
|
||||
$escolas = escolas::all();
|
||||
} else {
|
||||
$escolas = escolas::where('id', Auth::user()->id_escola)->get();
|
||||
}
|
||||
use App\Models\Escola;
|
||||
use App\Models\Turma;
|
||||
|
||||
if (Auth::user()->id_escola == 0) {
|
||||
$turmas = turmas::all();
|
||||
} else {
|
||||
$turmas = turmas::where('id_escola', Auth::user()->id_escola)->get();
|
||||
}
|
||||
$escolas = Escola::all();
|
||||
$turmas = Turma::all();
|
||||
@endphp
|
||||
<!-- Loader starts-->
|
||||
<div class="loader-wrapper">
|
||||
@@ -89,26 +81,36 @@
|
||||
<ul class="nav-menus">
|
||||
<li><a class="text-dark" href="#!" onclick="javascript:toggleFullScreen()"><i
|
||||
data-feather="maximize"></i></a></li>
|
||||
<li>
|
||||
<div class="dropdown-basic">
|
||||
<div class="dropdown">
|
||||
<div class="btn-group mb-0">
|
||||
<button class="dropbtn btn-primary btn-round" type="button">
|
||||
Novo <span><i class="icofont icofont-arrow-down"></i></span>
|
||||
</button>
|
||||
|
||||
<div class="dropdown-content">
|
||||
<a href="#" data-bs-toggle="modal" data-bs-target="#modalEscola">Escola</a>
|
||||
<a href="#" data-bs-toggle="modal" data-bs-target="#modalTurma">Turma</a>
|
||||
<a href="#" data-bs-toggle="modal" data-bs-target="#modalAluno">Aluno</a>
|
||||
<a href="#" data-bs-toggle="modal" data-bs-target="#modalEnvio">Envio de
|
||||
Mensagem</a>
|
||||
<a href="#" data-bs-toggle="modal" data-bs-target="#modalEvento">Evento</a>
|
||||
@role('super_admin')
|
||||
<li>
|
||||
<div class="dropdown-basic">
|
||||
<div class="dropdown">
|
||||
<div class="btn-group mb-0">
|
||||
<button class="dropbtn btn-primary btn-round" type="button">
|
||||
Novo <span><i class="icofont icofont-arrow-down"></i></span>
|
||||
</button>
|
||||
<div class="dropdown-content">
|
||||
<a href="#" data-bs-toggle="modal"
|
||||
data-bs-target="#modalEscola">Escola</a>
|
||||
<a href="#" data-bs-toggle="modal"
|
||||
data-bs-target="#modalTurma">Turma</a>
|
||||
<a href="#" data-bs-toggle="modal"
|
||||
data-bs-target="#modalAluno">Aluno</a>
|
||||
<a href="#" data-bs-toggle="modal" data-bs-target="#modalEnvio">Envio
|
||||
de
|
||||
Mensagem</a>
|
||||
<a href="#" data-bs-toggle="modal"
|
||||
data-bs-target="#modalEvento">Evento</a>
|
||||
<a href="#" data-bs-toggle="modal"
|
||||
data-bs-target="#modalUsuario">Usuário</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</li>
|
||||
@endrole
|
||||
|
||||
|
||||
<li class="onhover-dropdown p-0">
|
||||
<form method="POST" action="{{ route('logout') }}">
|
||||
@csrf
|
||||
@@ -130,8 +132,8 @@
|
||||
<header class="main-nav">
|
||||
<div class="sidebar-user text-center"><a class="setting-primary" href="javascript:void(0)"><i
|
||||
data-feather="settings"></i></a><img class="img-90 rounded-circle"
|
||||
src="{{ asset('assets/images/logo3.png')}}" alt="">
|
||||
<div class="badge-bottom"><span class="badge badge-primary">Responsável</span></div><a
|
||||
src="{{ asset('assets/images/logo3.png') }}" alt="">
|
||||
<div class="badge-bottom"><span class="badge badge-primary">{{ Auth::user()->funcao() }}</span></div><a
|
||||
href="user-profile.html">
|
||||
<h6 class="mt-3 f-14 f-w-600">{{ Auth::user()->name }}</h6>
|
||||
</a>
|
||||
@@ -142,30 +144,41 @@
|
||||
<div id="mainnav">
|
||||
<ul class="nav-menu custom-scrollbar">
|
||||
<li class="back-btn">
|
||||
<div class="mobile-back text-end"><span>Back</span><i class="fa fa-angle-right ps-2"
|
||||
aria-hidden="true"></i></div>
|
||||
<div class="mobile-back text-end"><span>Back</span><i
|
||||
class="fa fa-angle-right ps-2" aria-hidden="true"></i></div>
|
||||
</li>
|
||||
<li class="sidebar-main-title">
|
||||
<div>
|
||||
<h6>Geral </h6>
|
||||
</div>
|
||||
</li>
|
||||
<li class="dropdown"><a class="nav-link menu-title link-nav" href=""><i
|
||||
<li class="dropdown"><a class="nav-link menu-title link-nav"
|
||||
href="{{ route('dashboard') }}"><i
|
||||
data-feather="git-pull-request"></i><span>Dashboard</span></a></li>
|
||||
<li class="sidebar-main-title">
|
||||
<div>
|
||||
<h6>Administração </h6>
|
||||
</div>
|
||||
</li>
|
||||
<li class="dropdown"><a class="nav-link menu-title link-nav"
|
||||
href="{{ route('escolas') }}"><i
|
||||
data-feather="award"></i><span>Escolas</span></a></li>
|
||||
<li class="dropdown"><a class="nav-link menu-title link-nav"
|
||||
href="{{ route('turmas') }}"><i data-feather="award"></i><span>Turmas</span></a>
|
||||
</li>
|
||||
<li class="dropdown"><a class="nav-link menu-title link-nav"
|
||||
href="{{ route('alunos') }}"><i data-feather="award"></i><span>Alunos</span></a>
|
||||
</li>
|
||||
|
||||
@role(['admin', 'super_admin'])
|
||||
<li class="sidebar-main-title">
|
||||
<div>
|
||||
<h6>Administração </h6>
|
||||
</div>
|
||||
</li>
|
||||
<li class="dropdown"><a class="nav-link menu-title link-nav"
|
||||
href="{{ route('escolas') }}"><i
|
||||
data-feather="award"></i><span>Escolas</span></a></li>
|
||||
<li class="dropdown"><a class="nav-link menu-title link-nav"
|
||||
href="{{ route('turmas') }}"><i
|
||||
data-feather="award"></i><span>Turmas</span></a>
|
||||
</li>
|
||||
<li class="dropdown"><a class="nav-link menu-title link-nav"
|
||||
href="{{ route('alunos') }}"><i
|
||||
data-feather="award"></i><span>Alunos</span></a>
|
||||
</li>
|
||||
<li class="dropdown"><a class="nav-link menu-title link-nav"
|
||||
href="{{ route('usuarios') }}"><i
|
||||
data-feather="award"></i><span>Usuários</span></a>
|
||||
</li>
|
||||
@endrole
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="right-arrow" id="right-arrow"><i data-feather="arrow-right"></i></div>
|
||||
@@ -213,6 +226,8 @@
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal Escola -->
|
||||
<div class="modal fade" id="modalEscola" tabindex="-1" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
@@ -234,7 +249,8 @@
|
||||
<div class="col-8">
|
||||
<div class="mb-3">
|
||||
<label class="form-label" for="razao_social">Razão Social</label>
|
||||
<input class="form-control" id="razao_social" name="razaosocial" type="text">
|
||||
<input class="form-control" id="razao_social" name="razaosocial"
|
||||
type="text">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -295,6 +311,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal Turma -->
|
||||
<div class="modal fade" id="modalTurma" tabindex="-1" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
@@ -322,7 +339,8 @@
|
||||
<div class="col">
|
||||
<div class="mb-3">
|
||||
<label class="form-label" for="turma_nome">Nome</label>
|
||||
<input class="form-control" id="turma_nome" name="turma_nome" type="text">
|
||||
<input class="form-control" id="turma_nome" name="turma_nome"
|
||||
type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
@@ -335,7 +353,8 @@
|
||||
<div class="col">
|
||||
<div class="mb-3">
|
||||
<label class="form-label" for="id_whatsapp">Whatsap Id</label>
|
||||
<input class="form-control" id="id_whatsapp" name="id_whatsapp" type="text">
|
||||
<input class="form-control" id="id_whatsapp" name="id_whatsapp"
|
||||
type="text">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -349,21 +368,241 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- MODAL NOVO ALUNO --}}
|
||||
<div class="modal fade" id="modalAluno" tabindex="-1" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Novo Aluno</h4>
|
||||
<button class="btn-close" data-bs-dismiss="modal"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<!-- formulário -->
|
||||
</div>
|
||||
|
||||
<form class="form theme-form" action="{{ route('alunos.add') }}" method="POST">
|
||||
@csrf
|
||||
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Novo Aluno</h4>
|
||||
<button class="btn-close" data-bs-dismiss="modal"></button>
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
<div class="row">
|
||||
|
||||
{{-- Escola --}}
|
||||
<div class="col-12">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Escola</label>
|
||||
<select class="form-select" name="id_escola" id="id_escola" required>
|
||||
<option value="">Selecione...</option>
|
||||
@foreach ($escolas as $escola)
|
||||
<option value="{{ $escola->id }}" @selected(auth()->user()?->current_escola_id == $escola->id)>
|
||||
{{ $escola->nome }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Turma --}}
|
||||
<div class="col-12">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Turma</label>
|
||||
<select class="form-select digits" name="id_turma" id="id_turma" required
|
||||
disabled>
|
||||
<option value="">Selecione uma escola primeiro...</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Nome --}}
|
||||
<div class="col-12 col-md-8">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Nome do aluno</label>
|
||||
<input type="text" name="nome" class="form-control" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- CPF --}}
|
||||
<div class="col-12 col-md-4">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">CPF</label>
|
||||
<input type="text" name="cpf" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Data de nascimento --}}
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Data de nascimento *</label>
|
||||
<input type="date" name="data_nascimento" class="form-control" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Data de inscrição --}}
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Data de inscrição *</label>
|
||||
<input type="date" name="data_inscricao" class="form-control"
|
||||
value="{{ now()->format('Y-m-d') }}" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Usuário do aluno --}}
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Usuário do aluno (opcional)</label>
|
||||
<select class="form-select" name="user_id">
|
||||
<option value="">Não vincular</option>
|
||||
@foreach ($users ?? [] as $u)
|
||||
<option value="{{ $u->id }}">
|
||||
{{ $u->name }} ({{ $u->email }})
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Usuário responsável --}}
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Usuário responsável (opcional)</label>
|
||||
<select class="form-select" name="responsavel_user_id">
|
||||
<option value="">Não vincular</option>
|
||||
@foreach ($users ?? [] as $u)
|
||||
<option value="{{ $u->id }}">
|
||||
{{ $u->name }} ({{ $u->email }})
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-secondary" data-bs-dismiss="modal">
|
||||
Cancelar
|
||||
</button>
|
||||
<button class="btn btn-primary" type="submit">
|
||||
Salvar Aluno
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- JS carregar turmas --}}
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
|
||||
const modalEl = document.getElementById('modalAluno');
|
||||
const escolaSelect = document.getElementById('id_escola');
|
||||
const turmaSelect = document.getElementById('id_turma');
|
||||
|
||||
if (!modalEl || !escolaSelect || !turmaSelect) return;
|
||||
|
||||
let controller = null; // abort fetch anterior
|
||||
|
||||
function setTurmaOptions({
|
||||
message = null,
|
||||
turmas = []
|
||||
} = {}) {
|
||||
turmaSelect.innerHTML = '';
|
||||
|
||||
if (message) {
|
||||
const opt = document.createElement('option');
|
||||
opt.value = '';
|
||||
opt.textContent = message;
|
||||
turmaSelect.appendChild(opt);
|
||||
turmaSelect.disabled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
const opt0 = document.createElement('option');
|
||||
opt0.value = '';
|
||||
opt0.textContent = 'Selecione...';
|
||||
turmaSelect.appendChild(opt0);
|
||||
|
||||
turmas.forEach(t => {
|
||||
const opt = document.createElement('option');
|
||||
opt.value = t.id;
|
||||
opt.textContent = t.nome;
|
||||
turmaSelect.appendChild(opt);
|
||||
});
|
||||
|
||||
turmaSelect.disabled = turmas.length === 0;
|
||||
if (turmas.length === 0) {
|
||||
setTurmaOptions({
|
||||
message: 'Nenhuma turma encontrada para esta escola.'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function loadTurmas(escolaId) {
|
||||
if (!escolaId) {
|
||||
setTurmaOptions({
|
||||
message: 'Selecione uma escola primeiro...'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// cancela requisição anterior
|
||||
if (controller) controller.abort();
|
||||
controller = new AbortController();
|
||||
|
||||
setTurmaOptions({
|
||||
message: 'Carregando turmas...'
|
||||
});
|
||||
|
||||
try {
|
||||
const resp = await fetch(`/api/escolas/${escolaId}/turmas`, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'X-Requested-With': 'XMLHttpRequest',
|
||||
},
|
||||
signal: controller.signal,
|
||||
});
|
||||
|
||||
// se deu redirect/403/500 etc, não tenta parsear json
|
||||
if (!resp.ok) {
|
||||
throw new Error(`HTTP ${resp.status}`);
|
||||
}
|
||||
|
||||
const turmas = await resp.json();
|
||||
setTurmaOptions({
|
||||
turmas
|
||||
});
|
||||
|
||||
} catch (err) {
|
||||
if (err.name === 'AbortError') return; // troca rápida de escola
|
||||
console.error('Erro ao carregar turmas:', err);
|
||||
setTurmaOptions({
|
||||
message: 'Erro ao carregar turmas.'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 1) carrega sempre ao abrir o modal (garante estabilidade)
|
||||
modalEl.addEventListener('shown.bs.modal', () => {
|
||||
loadTurmas(escolaSelect.value);
|
||||
});
|
||||
|
||||
// 2) recarrega ao trocar escola
|
||||
escolaSelect.addEventListener('change', () => {
|
||||
loadTurmas(escolaSelect.value);
|
||||
});
|
||||
|
||||
// 3) opcional: ao fechar modal, reseta turmas (evita “ficar antigo”)
|
||||
modalEl.addEventListener('hidden.bs.modal', () => {
|
||||
setTurmaOptions({
|
||||
message: 'Selecione uma escola primeiro...'
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<div class="modal fade" id="modalEnvio" tabindex="-1" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
@@ -454,21 +693,267 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="modalUsuario" tabindex="-1" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Novo Usuário</h4>
|
||||
<button class="btn-close" data-bs-dismiss="modal"></button>
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
<form action="{{ route('usuarios.add') }}" method="POST">
|
||||
@csrf
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Nome</label>
|
||||
<input class="form-control" name="name" required>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Email</label>
|
||||
<input class="form-control" type="email" name="email" required>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Senha</label>
|
||||
<input class="form-control" type="password" name="password" required>
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Confirmar senha</label>
|
||||
<input class="form-control" type="password" name="password_confirmation" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-check mb-3">
|
||||
<input class="form-check-input" type="checkbox" value="1" id="is_super_admin" name="is_super_admin">
|
||||
<label class="form-check-label" for="is_super_admin">Super Admin</label>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Escola</label>
|
||||
<select class="form-select" name="escola_id" id="escola_id_user">
|
||||
<option value="">Selecione...</option>
|
||||
@foreach($escolas as $escola)
|
||||
<option value="{{ $escola->id }}">{{ $escola->nome }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Cargo</label>
|
||||
<select class="form-select" name="role_name" id="role_name" disabled>
|
||||
<option value="">Selecione uma escola primeiro...</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- ✅ ALUNO: vínculo 1 aluno --}}
|
||||
<div class="mb-3 d-none" id="box_aluno_unico">
|
||||
<label class="form-label" id="label_aluno_unico">Qual aluno este usuário é?</label>
|
||||
<select class="form-select" name="aluno_id" id="aluno_id" disabled>
|
||||
<option value="">Selecione uma escola primeiro...</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{-- ✅ RESPONSÁVEL: vínculo múltiplos alunos --}}
|
||||
<div class="mb-3 d-none" id="box_alunos_responsavel">
|
||||
<label class="form-label">Quais alunos este responsável representa?</label>
|
||||
<select class="form-select" name="aluno_ids[]" id="aluno_ids" multiple disabled>
|
||||
<option value="">Selecione uma escola primeiro...</option>
|
||||
</select>
|
||||
<small class="text-muted">
|
||||
Segure <b>Ctrl</b> (Windows) ou <b>Cmd</b> (Mac) para selecionar mais de um.
|
||||
</small>
|
||||
</div>
|
||||
|
||||
<button class="btn btn-primary" type="submit">Criar usuário</button>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
|
||||
const escolaSelect = document.getElementById('escola_id_user');
|
||||
const roleSelect = document.getElementById('role_name');
|
||||
const superCheck = document.getElementById('is_super_admin');
|
||||
|
||||
const boxAlunoUnico = document.getElementById('box_aluno_unico');
|
||||
const alunoSelect = document.getElementById('aluno_id');
|
||||
const labelAlunoUnico = document.getElementById('label_aluno_unico');
|
||||
|
||||
const boxResp = document.getElementById('box_alunos_responsavel');
|
||||
const alunosMulti = document.getElementById('aluno_ids');
|
||||
|
||||
const roleLabel = {
|
||||
'coordenacao': 'Coordenação',
|
||||
'secretaria': 'Secretaria',
|
||||
'responsavel': 'Responsável',
|
||||
'aluno': 'Aluno',
|
||||
'representante_de_turma': 'Representante de Turma',
|
||||
};
|
||||
|
||||
function resetSelect(select, msg) {
|
||||
select.innerHTML = `<option value="">${msg}</option>`;
|
||||
select.disabled = true;
|
||||
}
|
||||
|
||||
function hideAllBindings() {
|
||||
boxAlunoUnico.classList.add('d-none');
|
||||
boxResp.classList.add('d-none');
|
||||
|
||||
alunoSelect.value = '';
|
||||
alunosMulti.value = '';
|
||||
|
||||
resetSelect(alunoSelect, 'Selecione uma escola primeiro...');
|
||||
resetSelect(alunosMulti, 'Selecione uma escola primeiro...');
|
||||
}
|
||||
|
||||
async function loadRoles(escolaId) {
|
||||
if (!escolaId) {
|
||||
resetSelect(roleSelect, 'Selecione uma escola primeiro...');
|
||||
return;
|
||||
}
|
||||
|
||||
resetSelect(roleSelect, 'Carregando cargos...');
|
||||
|
||||
const resp = await fetch(`/api/escolas/${escolaId}/roles`, {
|
||||
headers: { 'Accept': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }
|
||||
});
|
||||
|
||||
if (!resp.ok) {
|
||||
resetSelect(roleSelect, 'Erro ao carregar cargos');
|
||||
return;
|
||||
}
|
||||
|
||||
const roles = await resp.json();
|
||||
|
||||
roleSelect.innerHTML = `<option value="">Selecione...</option>`;
|
||||
roles.forEach(r => {
|
||||
const opt = document.createElement('option');
|
||||
opt.value = r.name;
|
||||
opt.textContent = roleLabel[r.name] ?? r.name;
|
||||
roleSelect.appendChild(opt);
|
||||
});
|
||||
|
||||
roleSelect.disabled = false;
|
||||
}
|
||||
|
||||
async function loadAlunos(escolaId, targetSelect, multiple = false) {
|
||||
if (!escolaId) {
|
||||
resetSelect(targetSelect, 'Selecione uma escola primeiro...');
|
||||
return;
|
||||
}
|
||||
|
||||
resetSelect(targetSelect, 'Carregando alunos...');
|
||||
|
||||
const resp = await fetch(`/api/escolas/${escolaId}/alunos`, {
|
||||
headers: { 'Accept': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }
|
||||
});
|
||||
|
||||
if (!resp.ok) {
|
||||
resetSelect(targetSelect, 'Erro ao carregar alunos');
|
||||
return;
|
||||
}
|
||||
|
||||
const alunos = await resp.json();
|
||||
|
||||
targetSelect.innerHTML = multiple
|
||||
? '' // multi select não precisa placeholder fixo
|
||||
: `<option value="">Selecione...</option>`;
|
||||
|
||||
alunos.forEach(a => {
|
||||
const opt = document.createElement('option');
|
||||
opt.value = a.id;
|
||||
opt.textContent = a.nome;
|
||||
targetSelect.appendChild(opt);
|
||||
});
|
||||
|
||||
targetSelect.disabled = alunos.length === 0;
|
||||
}
|
||||
|
||||
function toggleSuperAdmin(isSuper) {
|
||||
if (isSuper) {
|
||||
escolaSelect.value = '';
|
||||
roleSelect.value = '';
|
||||
resetSelect(roleSelect, 'Super Admin não usa cargo');
|
||||
escolaSelect.disabled = true;
|
||||
roleSelect.disabled = true;
|
||||
|
||||
hideAllBindings();
|
||||
alunoSelect.disabled = true;
|
||||
alunosMulti.disabled = true;
|
||||
} else {
|
||||
escolaSelect.disabled = false;
|
||||
resetSelect(roleSelect, 'Selecione uma escola primeiro...');
|
||||
roleSelect.disabled = true;
|
||||
hideAllBindings();
|
||||
}
|
||||
}
|
||||
|
||||
superCheck.addEventListener('change', () => toggleSuperAdmin(superCheck.checked));
|
||||
|
||||
escolaSelect.addEventListener('change', async () => {
|
||||
await loadRoles(escolaSelect.value);
|
||||
hideAllBindings();
|
||||
});
|
||||
|
||||
roleSelect.addEventListener('change', async () => {
|
||||
const role = roleSelect.value;
|
||||
|
||||
// sempre reseta
|
||||
hideAllBindings();
|
||||
|
||||
if (role === 'responsavel') {
|
||||
boxResp.classList.remove('d-none');
|
||||
await loadAlunos(escolaSelect.value, alunosMulti, true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (role === 'aluno') {
|
||||
labelAlunoUnico.textContent = 'Qual aluno este usuário é?';
|
||||
boxAlunoUnico.classList.remove('d-none');
|
||||
await loadAlunos(escolaSelect.value, alunoSelect, false);
|
||||
return;
|
||||
}
|
||||
|
||||
// (opcional) se representante também tiver vínculo com 1 aluno, habilite:
|
||||
// if (role === 'representante_de_turma') { ... }
|
||||
|
||||
});
|
||||
|
||||
// estado inicial
|
||||
toggleSuperAdmin(superCheck.checked);
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- latest jquery-->
|
||||
<script src="{{ asset('assets/js/jquery-3.5.1.min.js')}}"></script>
|
||||
<script src="{{ asset('assets/js/jquery-3.5.1.min.js') }}"></script>
|
||||
<!-- feather icon js-->
|
||||
<script src="{{ asset('assets/js/icons/feather-icon/feather.min.js')}}"></script>
|
||||
<script src="{{ asset('assets/js/icons/feather-icon/feather-icon.js')}}"></script>
|
||||
<script src="{{ asset('assets/js/icons/feather-icon/feather.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/icons/feather-icon/feather-icon.js') }}"></script>
|
||||
<!-- Sidebar jquery-->
|
||||
<script src="{{ asset('assets/js/sidebar-menu.js')}}"></script>
|
||||
<script src="{{ asset('assets/js/config.js')}}"></script>
|
||||
<script src="{{ asset('assets/js/sidebar-menu.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/config.js') }}"></script>
|
||||
<!-- Bootstrap js-->
|
||||
<script src="{{ asset('assets/js/bootstrap/popper.min.js')}}"></script>
|
||||
<script src="{{ asset('assets/js/bootstrap/bootstrap.min.js')}}"></script>
|
||||
<script src="{{ asset('assets/js/bootstrap/popper.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/bootstrap/bootstrap.min.js') }}"></script>
|
||||
<!-- Plugins JS start-->
|
||||
<!-- Plugins JS Ends-->
|
||||
<!-- Theme js-->
|
||||
<script src="{{ asset('assets/js/script.js')}}"></script>
|
||||
<script src="{{ asset('assets/js/script.js') }}"></script>
|
||||
<!-- login js-->
|
||||
<!-- Plugin used-->
|
||||
<script src="{{ asset('assets/js/icons/icons-notify.js') }}"></script>
|
||||
@@ -486,7 +971,7 @@
|
||||
let ultimoCNPJ = '';
|
||||
let timeout = null;
|
||||
|
||||
document.getElementById('cnpj').addEventListener('input', function () {
|
||||
document.getElementById('cnpj').addEventListener('input', function() {
|
||||
let cnpj = this.value.replace(/\D/g, '');
|
||||
|
||||
clearTimeout(timeout);
|
||||
@@ -550,7 +1035,7 @@
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
document.getElementById('tipo_envio').addEventListener('change', function () {
|
||||
document.getElementById('tipo_envio').addEventListener('change', function() {
|
||||
const campoImagem = document.getElementById('campoImagem');
|
||||
|
||||
if (this.value === 'imagem') {
|
||||
@@ -561,7 +1046,6 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user