forked from felipe.fontana/simples-painel
Felipe Fontana
10 months ago
15 changed files with 820 additions and 110 deletions
@ -0,0 +1,88 @@
|
||||
function atualizaHorariosOptions(horario_option_id) { |
||||
$.ajax({ |
||||
type: "get", |
||||
url: `options/${horario_option_id}/edit`, |
||||
success: async function({ |
||||
data |
||||
}) { |
||||
const option_data = data.option_data; |
||||
const types = data.types; |
||||
const modal = document.querySelector('.modal-edit'); |
||||
modal.style.display = 'block'; |
||||
modal.querySelector("input[name='horario_inicio']").value = option_data.horario_inicio; |
||||
modal.querySelector("input[name='horario_fim']").value = option_data.horario_fim; |
||||
var selectSemana = document.getElementById("dias_semana2"); |
||||
var selectSemanaFim = document.getElementById("dias_semana_fim2"); |
||||
var selectMes = document.getElementById("meses2"); |
||||
var selectMesFim = document.getElementById("meses_fim2"); |
||||
var selectDia = document.getElementById("dias_mes2"); |
||||
var selectDiaFim = document.getElementById("dias_mes_fim2"); |
||||
modal.querySelector('form').action = `options/${horario_option_id}`; |
||||
|
||||
if (option_data.feriado) { |
||||
modal.querySelector("input[id='feriado_sim']").checked = true; |
||||
} else { |
||||
modal.querySelector("input[id='feriado_nao']").checked = true; |
||||
} |
||||
|
||||
if (option_data.todos_mes) { |
||||
modal.querySelector("input[id='todos_mes']").checked = true; |
||||
selectMes.disabled = true; |
||||
selectMesFim.disabled = true; |
||||
selectMes.selectedIndex = -1; |
||||
selectMesFim.selectedIndex = -1; |
||||
} else { |
||||
modal.querySelector("input[id='todos_mes_nao']").checked = true; |
||||
selectMes.selectedIndex = option_data.mes - 1; |
||||
selectMesFim.selectedIndex = option_data.mes_fim - 1; |
||||
} |
||||
|
||||
if (option_data.todos_dias_semana) { |
||||
modal.querySelector("input[id='todos_dias_semana']").checked = true; |
||||
selectSemana.disabled = true; |
||||
selectSemanaFim.disabled = true; |
||||
selectSemana.selectedIndex = -1; |
||||
selectSemanaFim.selectedIndex = -1; |
||||
} else { |
||||
modal.querySelector("input[id='todos_dias_semana_nao']").checked = true; |
||||
selectSemana.selectedIndex = option_data.semana - 1; |
||||
selectSemanaFim.selectedIndex = option_data.semana_fim - 1; |
||||
} |
||||
|
||||
if (option_data.todos_dias_mes) { |
||||
modal.querySelector("input[id='todos_dias_mes']").checked = true; |
||||
selectDia.disabled = true; |
||||
selectDiaFim.disabled = true; |
||||
selectDia.selectedIndex = -1; |
||||
selectDiaFim.selectedIndex = -1; |
||||
} else { |
||||
modal.querySelector("input[id='todos_dias_mes_nao']").checked = true; |
||||
selectDia.selectedIndex = option_data.dias_mes - 1; |
||||
selectDiaFim.selectedIndex = option_data.dias_mes_fim - 1; |
||||
} |
||||
|
||||
let containerTypes = ''; |
||||
types.forEach(type => { |
||||
if (option_data.opcao == type.id) { |
||||
containerTypes += |
||||
` <option value="${type.id}" selected>${type.name}</option>` |
||||
} else { |
||||
containerTypes += |
||||
` <option value="${type.id}">${type.name}</option>` |
||||
} |
||||
}); |
||||
modal.querySelector(".select-types").innerHTML = containerTypes; |
||||
|
||||
montaSelectDestino(option_data.opcao, modal, option_data.acao); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
document.querySelectorAll('.select-types').forEach(el => { |
||||
el.addEventListener('change', (e) => { |
||||
const select = e.target; |
||||
const modal = select.closest('.modal') ?? select.closest('.modal-edit'); |
||||
const id_redirect = select.value; |
||||
montaSelectDestino(id_redirect, modal); |
||||
}) |
||||
}) |
@ -0,0 +1,37 @@
|
||||
async function montaSelectDestino(id_type, modal, code_id=null) { |
||||
const data = await requestType(id_type); |
||||
const selectDestino = modal.querySelector(".select-destino"); |
||||
const inputDestino = modal.querySelector(".input-destino"); |
||||
if (!data) { |
||||
selectDestino.style.display = 'none'; |
||||
selectDestino.disabled = true; |
||||
inputDestino.disabled = false; |
||||
inputDestino.style.display = 'block'; |
||||
|
||||
return; |
||||
} |
||||
selectDestino.style.display = 'block'; |
||||
selectDestino.disabled = false; |
||||
inputDestino.disabled = true; |
||||
inputDestino.style.display = 'none'; |
||||
let selectElements = ""; |
||||
|
||||
if (code_id) { |
||||
data.forEach(element => { |
||||
let matriculaOrId = element.id; |
||||
if (matriculaOrId.toString() === code_id.toString()) { |
||||
selectElements += |
||||
` <option value="${element.id}" selected>${element.name ?? element.nome}</option>` |
||||
} else { |
||||
selectElements += |
||||
` <option value="${element.id}">${element.name ?? element.nome}</option>` |
||||
} |
||||
}) |
||||
} else { |
||||
data.forEach(element => { |
||||
selectElements += `<option value="${element.id}">${element.name ?? element.nome}</option>` |
||||
}); |
||||
} |
||||
|
||||
selectDestino.innerHTML = selectElements; |
||||
} |
@ -0,0 +1,13 @@
|
||||
function requestType(id_type) { |
||||
return new Promise(function(resolve, reject) { |
||||
$.ajax({ |
||||
type: "get", |
||||
dataType: 'json', |
||||
url: `options/${id_type}`, |
||||
success: function(response) { |
||||
const data = response.data.data; |
||||
resolve(data); |
||||
} |
||||
}); |
||||
}); |
||||
} |
@ -0,0 +1,264 @@
|
||||
<?php |
||||
$tipos = [ |
||||
1 => 'QUEUE', |
||||
2 => 'REDIRECT', |
||||
3 => 'AGENT', |
||||
4 => 'TEXT' |
||||
]; |
||||
|
||||
$semana = [ |
||||
'' => '', |
||||
1 => 'Domingo', |
||||
2 => 'Segunda', |
||||
3 => 'Terça', |
||||
4 => 'Quarta', |
||||
5 => 'Quinta', |
||||
6 => 'Sexta', |
||||
7 => 'Sábado' |
||||
]; |
||||
|
||||
$meses = ['' => '', 1 => 'Janeiro', 2 => 'Fevereiro', 3 => 'Março', 4 => 'Abril', 5 => 'Maio', 6 => 'Junho', 7 => 'Julho', 8 => 'Agosto', 9 => 'Setembro', 10 => 'Outubro', 11 => 'Novembro', 12 => 'Dezembro']; |
||||
?> |
||||
<style> |
||||
.custom-modal-width { |
||||
max-width: 60%; |
||||
top: 50%; |
||||
left: 40%; |
||||
transform: translate(-50%, -50%); |
||||
display: flex |
||||
} |
||||
</style> |
||||
|
||||
@props(['types']) |
||||
<!-- Main modal --> |
||||
<div class="fixed z-50 hidden p-4 bg-gray-900 bg-opacity-60 h-full w-full modal-edit"> |
||||
<div class="custom-modal-width absolute md:h-auto"> |
||||
<!-- Modal content --> |
||||
<form method="POST" action="" |
||||
class="relative bg-white rounded-lg shadow dark:bg-gray-700"> |
||||
@csrf |
||||
@method("PUT") |
||||
<!-- Modal header --> |
||||
<div class="flex items-start justify-between border-b rounded-t dark:border-gray-600 px-3 py-4"> |
||||
<h3 class="text-xl font-semibold text-gray-900 dark:text-white pl-3"> |
||||
Editar |
||||
</h3> |
||||
<button type="button" |
||||
class="text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-xl ml-auto inline-flex items-center dark:hover:bg-gray-600 dark:hover:text-white" |
||||
@click="modal = false" onclick="fecharModal()"> |
||||
<i class="fas fa-times"></i> |
||||
</button> |
||||
</div> |
||||
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0"> |
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0"> |
||||
<tr class="bg-white dark:bg-gray-700 dark:border-gray-900 border"> |
||||
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top"> |
||||
<fieldset> |
||||
<div class="flex flex-col gap-2"> |
||||
<label class="dark:text-gray-100">Selecione o tipo: </label> |
||||
<select class="w-48 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase select-types" name="type"> |
||||
</select> |
||||
</div> |
||||
<div class="flex flex-col gap-2"> |
||||
<label class="dark:text-gray-100">Selecione o destino: </label> |
||||
<select class="w-48 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase select-destino" name="destino"></select> |
||||
<input type="text" class="w-48 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 input-destino" placeholder="Digite o texto destino: " name="destino"> |
||||
</div> |
||||
</fieldset> |
||||
</td> |
||||
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top"> |
||||
<fieldset> |
||||
<legend class="dark:text-gray-100">Horário: </legend> |
||||
Início |
||||
<input class="dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 input-inicio" name="horario_inicio" type="text" id="horario_inicio" size="5" maxlength="5" value="08:00"/> |
||||
Fim |
||||
<input class="dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 input-fim" name="horario_fim" type="text" id="horario_fim" value="17:59" size="5" maxlength="5"/> |
||||
</fieldset> |
||||
</td> |
||||
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top"> |
||||
<fieldset> |
||||
<legend class="dark:text-gray-100">Feriado: </legend> |
||||
<span> |
||||
Sim<input name="feriado" type="radio" id="feriado_sim" value="Sim"/> |
||||
Não<input name="feriado" type="radio" id="feriado_nao" value="Nao"/> |
||||
</span> |
||||
</fieldset> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
<tr class="bg-white dark:bg-gray-700"> |
||||
<td class="p-3 text-sm text-gray-700 dark:text-gray-100"> |
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0"> |
||||
<tr class="bg-white dark:bg-gray-700 dark:border-gray-900 border"> |
||||
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top"> |
||||
<fieldset> |
||||
<label class="dark:text-gray-100">Dia da Semana: </label> |
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0"> |
||||
<tr class="bg-white dark:bg-gray-700"> |
||||
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" colspan="2"> |
||||
<input name="todos_dias_semana" type="radio" id="todos_dias_semana" value="Sim" onclick="desabilitaCombo('dias_semana2','dias_semana_fim2')"/> |
||||
Todos |
||||
<label><input name="todos_dias_semana" type="radio" id="todos_dias_semana_nao" value="Nao" onclick="habilitaCombo('dias_semana2','dias_semana_fim2')"/>Intervalo </label> |
||||
</td> |
||||
</tr> |
||||
<tr class="bg-white dark:bg-gray-700"> |
||||
<td class="p-3 text-sm text-gray-780 dark:text-gray-100"> |
||||
<fieldset> |
||||
<label class="dark:text-gray-100">Inicio: </label> |
||||
<select class="w-45 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="dias_semana" size="1" id="dias_semana2"> |
||||
@for ($i = 1; $i <= 7; $i++) |
||||
<option value="{{ $i }}">{{ $semana[$i] }}</option> |
||||
@endfor |
||||
</select> |
||||
</fieldset> |
||||
</td> |
||||
<td class="p-3 text-sm text-gray-700 dark:text-gray-100" width="50%"> |
||||
<fieldset> |
||||
<label class="dark:text-gray-100">Fim: </label> |
||||
<select class="w-45 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="dias_semana_fim" size="1" id="dias_semana_fim2"> |
||||
@for ($i = 1; $i <= 7; $i++) |
||||
<option value="{{ $i }}">{{ $semana[$i] }}</option> |
||||
@endfor |
||||
</select> |
||||
</fieldset> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</fieldset> |
||||
</td> |
||||
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top"> |
||||
<fieldset> |
||||
<label class="dark:text-gray-100">Meses: </label> |
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0"> |
||||
<tr class="bg-white dark:bg-gray-700"> |
||||
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" colspan="2"> |
||||
<input name="todos_meses" type="radio" id="todos_mes" value="Sim" onclick="desabilitaCombo('meses2','meses_fim2')"/> |
||||
Todos |
||||
<label><input name="todos_meses" type="radio" id="todos_mes_nao" value="Nao" onclick="habilitaCombo('meses2','meses_fim2')"/>Intervalo </label> |
||||
</td> |
||||
</tr> |
||||
<tr class="bg-white dark:bg-gray-700"> |
||||
<td class="p-3 text-sm text-gray-780 dark:text-gray-100"> |
||||
<fieldset> |
||||
<label class="dark:text-gray-100">Inicio: </label> |
||||
<select class="w-10 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="meses" size="1" id="meses2"> |
||||
@for ($i = 1; $i <= 12; $i++) |
||||
<option value="{{ $i }}">{{ $meses[$i] }}</option> |
||||
@endfor |
||||
</select> |
||||
</fieldset> |
||||
</td> |
||||
<td class="p-3 text-sm text-gray-700 dark:text-gray-100" width="50%"> |
||||
<fieldset> |
||||
<label class="dark:text-gray-100">Fim: </label> |
||||
<select class="w-10 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="meses_fim" size="1" id="meses_fim2"> |
||||
@for ($i = 1; $i <= 12; $i++) |
||||
<option value="{{ $i }}">{{ $meses[$i] }}</option> |
||||
@endfor |
||||
</select> |
||||
</fieldset> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</fieldset> |
||||
</td> |
||||
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top"> |
||||
<fieldset> |
||||
<label class="dark:text-gray-100">Dia do Mês: </label> |
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0"> |
||||
<tr class="bg-white dark:bg-gray-700"> |
||||
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" colspan="2"> |
||||
<input name="todos_dias_mes" type="radio" id="todos_dias_mes" value="Sim" onclick="desabilitaCombo('dias_mes2','dias_mes_fim2')"/> |
||||
Todos |
||||
<label><input id="todos_dias_mes_nao" name="todos_dias_mes" type="radio" value="Nao" onclick="habilitaCombo('dias_mes2','dias_mes_fim2')"/>Intervalo </label> |
||||
</td> |
||||
</tr> |
||||
<tr class="bg-white dark:bg-gray-700"> |
||||
<td class="p-3 text-sm text-gray-780 dark:text-gray-100"> |
||||
<fieldset> |
||||
<legend class="dark:text-gray-100">Inicio: </legend> |
||||
<select class="w-10 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="dias_mes" size="1" id="dias_mes2"> |
||||
@for ($i = 1; $i <= 31; $i++) |
||||
<option value="{{ $i }}">{{ $i }}</option> |
||||
@endfor |
||||
</select> |
||||
</fieldset> |
||||
</td> |
||||
<td class="p-3 text-sm text-gray-700 dark:text-gray-100"> |
||||
<fieldset> |
||||
<legend class="dark:text-gray-100">Fim: </legend> |
||||
<select class="w-10 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="dias_mes_fim" size="1" id="dias_mes_fim2"> |
||||
@for ($i = 1; $i <= 31; $i++) |
||||
<option value="{{ $i }}">{{ $i }}</option> |
||||
@endfor |
||||
</select> |
||||
</fieldset> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</fieldset> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
<!-- Modal footer --> |
||||
<div class="flex items-center p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600"> |
||||
<button type="submit" class="bg-blue-500 hover:bg-opacity-90 transition-all text-white py-2 px-6 rounded text-lg btn-sub"> |
||||
Editar |
||||
</button> |
||||
</div> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
|
||||
<script> |
||||
function fecharModal() { |
||||
$('.modal-edit').hide(); |
||||
$('.modal-edit').find('input.sequence').removeClass('border-red-500 border-2'); |
||||
$('.modal-edit').find('.text-problem').addClass('hidden'); |
||||
} |
||||
|
||||
function habilitaCombo(inicio, fim) { |
||||
var selectInicio = document.getElementById(inicio); |
||||
var selectFim = document.getElementById(fim); |
||||
|
||||
selectInicio.disabled = false; |
||||
selectFim.disabled = false; |
||||
} |
||||
|
||||
function desabilitaCombo(inicio, fim) { |
||||
var selectInicio = document.getElementById(inicio); |
||||
var selectFim = document.getElementById(fim); |
||||
|
||||
selectInicio.disabled = true; |
||||
selectFim.disabled = true; |
||||
} |
||||
|
||||
document.addEventListener("DOMContentLoaded", function () { |
||||
// Função para formatar os horários no formato hh:mm |
||||
function formatarHorario(input) { |
||||
// Remove caracteres não numéricos |
||||
var cleanedInput = input.replace(/[^\d]/g, ""); |
||||
|
||||
// Adiciona os dois pontos no formato hh:mm |
||||
var formattedInput = cleanedInput.replace(/(\d{2})(\d{2})/, "$1:$2"); |
||||
|
||||
return formattedInput; |
||||
} |
||||
|
||||
// Adiciona ouvinte de evento para os campos de início e fim |
||||
var inputInicio = document.getElementById("horario_inicio"); |
||||
var inputFim = document.getElementById("horario_fim"); |
||||
|
||||
inputInicio.addEventListener("input", function () { |
||||
inputInicio.value = formatarHorario(inputInicio.value); |
||||
}); |
||||
|
||||
inputFim.addEventListener("input", function () { |
||||
inputFim.value = formatarHorario(inputFim.value); |
||||
}); |
||||
}); |
||||
</script> |
Loading…
Reference in new issue