import BuscaApi from '../lib/BuscaApiG.js';
export default class GerenciadorPermissoes {
constructor() {
this.buscaApi = new BuscaApi(sessionStorage.getItem('token'));
this.addPerfilModal = null;
this.addPermissaoModal = null;
this.novoPerfilNome = null;
this.novaPermissaoNome = null;
this.addPerfilNovaBtn = null;
this.addPermissaoNovaBtn = null;
}
async init() {
await this.populatePerfis();
await this.populateDropdown();
this.bindEvents();
}
async addPerfil() {
const nome = this.novoPerfilNome.value;
if(nome ===''){
Swal.fire("Alerta!", "Digite o nome para o perfil.", "info");
return;
}
const data = await this.buscaApi.fetchApi('Perfil', 'POST', { nome: nome });
if (data.status) {
Swal.fire("Sucesso!", "Perfil adicionado com sucesso!", "sucess");
await this.populatePerfis();
this.addPerfilModal.style.display = 'none';
} else {
Swal.fire("Erro!", "Erro ao adicionar perfil!", "info");
}
}
async addPermissao() {
const nome = this.novaPermissaoNome.value;
if(nome ===''){
Swal.fire("Alerta!", "Digite o nome para a permissão.", "info");
return;
}
const data = await this.buscaApi.fetchApi('Permissoes', 'POST', { nome: nome });
if (data.status) {
Swal.fire("Sucesso!", "Permissão adicionada com sucesso!", "sucess");
await this.populateDropdown();
this.addPermissaoModal.style.display = 'none';
} else {
Swal.fire("Alerta!", "Erro ao adicionar permissão!", "info");
}
}
async getPerfis() {
return await this.buscaApi.fetchApi('Perfil', 'GET');
}
async getListaPermissoes() {
return await this.buscaApi.fetchApi('Permissoes', 'GET');
}
async getPermissoes(perfilId) {
return await this.buscaApi.fetchApi(`Associar/${perfilId}`, 'GET');
}
async addAssociarPermissao(perfilId, permissaoId) {
const result = await this.buscaApi.fetchApi('Associar', 'POST', { perfilId, permissao_id: permissaoId });
if (result.status) {
Swal.fire("Sucesso!", "Associação realizada com sucesso!", "sucess");
} else {
Swal.fire("Alerta!", "Erro ao associar permissão", "info");
}
return result;
}
async deleteAssociarPermissao(perfilId, permissaoId) {
return await this.buscaApi.fetchApi(`Associar/${perfilId}`, 'DELETE', { permissao_id: permissaoId });
}
async deletePerfil(perfilId) {
return await this.buscaApi.fetchApi(`Perfil/${perfilId}`, 'DELETE');
}
async deletePermissao(permissaoid) {
return await this.buscaApi.fetchApi(`Permissoes/${permissaoid}`, 'DELETE');
}
async populatePerfis() {
const perfis = await this.getPerfis();
const select = document.getElementById('perfilSelect');
const permissoesList = document.getElementById('permissoesList');
perfis.forEach(perfil => {
const option = document.createElement('option');
option.value = perfil.id;
option.textContent = perfil.nome;
select.appendChild(option);
});
select.addEventListener('change', async (event) => {
while (permissoesList.firstChild) {
permissoesList.removeChild(permissoesList.firstChild);
}
const perfilId = event.target.value;
if (perfilId) {
const permissoes = await this.getPermissoes(perfilId);
if (permissoes && permissoes.length) {
permissoes.forEach(permis => {
permis.forEach(permissao => {
const li = document.createElement('li');
const span = document.createElement('span');
span.textContent = permissao.nome + " ";
li.appendChild(span);
const removeBtn = document.createElement('button');
removeBtn.textContent = "Remover";
removeBtn.classList.add("w3-button", "w3-round", "w3-border");
removeBtn.addEventListener('click', async () => {
const result = await this.deleteAssociarPermissao(perfilId, permissao.id);
if (result.status) {
Swal.fire("Sucesso!", "Permissão removida com sucesso!", "sucess");
li.remove();
} else {
Swal.fire("Alerta!", "Erro ao remover permissão", "info");
}
});
li.appendChild(removeBtn);
permissoesList.appendChild(li);
});
});
} else {
const li = document.createElement('li');
li.textContent = "Sem permissões associadas";
permissoesList.appendChild(li);
}
}
});
}
async populateDropdown() {
const permissoes = await this.getListaPermissoes();
const selectElem = document.getElementById("permissaoSelect");
permissoes.forEach(permissao => {
const optionElem = document.createElement("option");
optionElem.value = permissao.id;
optionElem.textContent = permissao.nome;
selectElem.appendChild(optionElem);
});
}
bindEvents() {
this.addPerfilModal = document.getElementById('addPerfilModal');
this.addPermissaoModal = document.getElementById('addPermissaoModal');
this.novoPerfilNome = document.getElementById('novoPerfilNome');
this.novaPermissaoNome = document.getElementById('novaPermissaoNome');
const addPerfilBtn = document.getElementById('addPerfilNova');
const addPermissaoBtn = document.getElementById('addPermissaoNova');
const savePerfilBtn = document.getElementById('savePerfilBtn');
const savePermissaoBtn = document.getElementById('savePermissaoBtn');
const removePerfilBtn = document.getElementById('removeperfil');
const removePermissaoBtn = document.getElementById('removepermissao');
removePerfilBtn.addEventListener('click', async () => {
const perfilId = document.getElementById('perfilSelect').value;
if(perfilId ==='' ){
Swal.fire("Alerta!", "Selecione um perfil", "info");
return;
}
const result = await this.deletePerfil(perfilId);
if(result.status){
Swal.fire("Sucesso!", result.message, "sucess");
}
});
removePermissaoBtn.addEventListener('click', async () => {
const permissaoid = document.getElementById('permissaoSelect').value;
if(permissaoid ==='' ){
Swal.fire("Alerta!", "Selecione uma permissão", "info");
return;
}
const result = await this.deletePermissao(permissaoid);
if(result.status){
Swal.fire("Sucesso!", result.message, "sucess");
setInterval(this.atualizarPagina, 1500);
}
});
addPerfilBtn.addEventListener('click', () => {
this.addPerfilModal.style.display = 'block';
});
addPermissaoBtn.addEventListener('click', () => {
this.addPermissaoModal.style.display = 'block';
});
savePerfilBtn.addEventListener('click', async () => {
await this.addPerfil();
});
savePermissaoBtn.addEventListener('click', async () => {
await this.addPermissao();
});
document.getElementById('addPermissaoBtn').addEventListener('click', async () => {
const perfilId = document.getElementById('perfilSelect').value;
const permissaoId = document.getElementById('permissaoSelect').value;
if(perfilId ==='' || permissaoId===''){
Swal.fire("Alerta!", "Selecione um perfil e uma permissão!", "info");
return;
}
await this.addAssociarPermissao(perfilId, permissaoId);
});
document.getElementById('perfilSelect').addEventListener('change', async (event) => {
await this.populatePermissoesList(event.target.value);
});
}
atualizarPagina() {
location.reload();
}
showModal(modalId) {
const modal = document.getElementById(modalId);
if (modal) {
modal.style.display = 'block';
}
}
async populatePermissoesList(perfilId) {
}
render() {
document.getElementById('titulo').innerHTML='Gerir Permissões';
const mainDiv = document.createElement('div');
mainDiv.className = 'main';
const perfilCard = document.createElement('div');
perfilCard.className = 'w3-card-4';
const permissaoCard = document.createElement('div');
permissaoCard.className = 'w3-card-4';
permissaoCard.classList.add('w3-margin-bottom');
permissaoCard.innerHTML = `
<h2>Gerenciar Permissões</h2>
<label for="perfilSelect">Perfil:</label>
<select id="perfilSelect" class="w3-select" required>
<option value="">Selecione</option>
</select>
<button id="addPerfilNova" class="w3-btn w3-tiny w3-border w3-green" title="Novo perfil">+</button>
<button id="removeperfil" class="w3-btn w3-tiny w3-border w3-red" title="Remover perfil">-</button>
<br>
<label for="permissaoSelect">Permissão:</label>
<select id="permissaoSelect" class="w3-select" required>
<option value="">Selecione</option>
</select>
<button id="addPermissaoNova" class="w3-btn w3-tiny w3-border w3-green" title="Nova Permissão">+</button>
<button id="removepermissao" class="w3-btn w3-tiny w3-border w3-red" title="Remover Permissão">-</button>
<br>
<button id="addPermissaoBtn" class="w3-btn w3-tiny w3-border w3-green w3-block w3-hover-black",">Associar Permissão e Perfil</button>
`;
const ulx = document.createElement('ul');
ulx.id = 'permissoesList';
ulx.className = 'w3-ul';
mainDiv.appendChild(perfilCard);
permissaoCard.appendChild(ulx);
mainDiv.appendChild(permissaoCard);
mainDiv.innerHTML += `
<div id="addPerfilModal" class="w3-modal">
<div class="w3-modal-content w3-animate-zoom w3-card-4">
<header class="w3-container w3-teal">
<span onclick="document.getElementById('addPerfilModal').style.display='none'"
class="w3-button w3-display-topright">×</span>
<h4>System X</h4>
</header>
<div class="w3-container">
<label for="perfilSelect">Perfil:</label>
<input id="novoPerfilNome" type="text" class="w3-input" placeholder="Nome do Perfil">
<button id="savePerfilBtn" class="w3-button w3-block w3-green w3-hover-black">Salvar Perfil</button>
</div></div>
</div>
<div id="addPermissaoModal" class="w3-modal">
<div class="w3-modal-content w3-animate-zoom w3-card-4">
<header class="w3-container w3-teal">
<span onclick="document.getElementById('addPermissaoModal').style.display='none'"
class="w3-button w3-display-topright">×</span>
<h4>System X</h4>
</header>
<div class="w3-container">
<label for="perfilSelect">Permissão:</label>
<input id="novaPermissaoNome" type="text" class="w3-input" placeholder="Nome da Permissão">
<button id="savePermissaoBtn" class="w3-button w3-block w3-green w3-hover-black">Salvar Permissão</button>
</div></div>
</div>
`;
return {
element: mainDiv,
init: () => this.init()
};
}
}
|