adicionado funcionalidade pra salvar as observações, algumas alterações no estilo de alguns elementos foram acrescentados
This commit is contained in:
parent
eb5f91b8c9
commit
063e336b80
|
|
@ -3,7 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; connect-src https://autoatend.linco.work">
|
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; connect-src https://autoatend.linco.work">
|
||||||
<title>Aguardando atendimento</title>
|
<title>Tela de Atendimento</title>
|
||||||
<link rel="stylesheet" href="style.css">
|
<link rel="stylesheet" href="style.css">
|
||||||
<script src="js/jquery/jquery.js"></script>
|
<script src="js/jquery/jquery.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
@ -31,7 +31,7 @@
|
||||||
<div id="encaminhar-view" style="display: none;">
|
<div id="encaminhar-view" style="display: none;">
|
||||||
<h1>Observações</h1>
|
<h1>Observações</h1>
|
||||||
<p>Atendendo: <span id="selected-item-name"></span></p>
|
<p>Atendendo: <span id="selected-item-name"></span></p>
|
||||||
<textarea id="observation-text" rows="10" cols="50" placeholder="Digite suas observações..."></textarea>
|
<textarea id="enc-observation-text" rows="10" cols="50" placeholder="Digite suas observações..."></textarea>
|
||||||
<button id="save-button">Salvar</button>
|
<button id="save-button">Salvar</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
62
main.js
62
main.js
|
|
@ -49,7 +49,11 @@ async function readData() {
|
||||||
// Função para buscar dados da API
|
// Função para buscar dados da API
|
||||||
async function fetchDataFromAPI() {
|
async function fetchDataFromAPI() {
|
||||||
//executa uma vez e a cada 30 segundos
|
//executa uma vez e a cada 30 segundos
|
||||||
getAndUpdateDataStorage(); setInterval(()=>{
|
|
||||||
|
//TODO propicio para fazer um webhook nessas funções que repetem a chamada de requisições em busca de alterações
|
||||||
|
getAndUpdateDataStorage();
|
||||||
|
|
||||||
|
const timer = setInterval(()=>{
|
||||||
getAndUpdateDataStorage();
|
getAndUpdateDataStorage();
|
||||||
},30000);
|
},30000);
|
||||||
}
|
}
|
||||||
|
|
@ -235,7 +239,7 @@ function createFloatingWindow() {
|
||||||
height: winHeight,
|
height: winHeight,
|
||||||
icon: "icon.ico",
|
icon: "icon.ico",
|
||||||
x: screenWidth - winWidth + 0,
|
x: screenWidth - winWidth + 0,
|
||||||
y: screenHeight - winHeight - 60,
|
y: screenHeight - winHeight - 180,
|
||||||
frame: false,
|
frame: false,
|
||||||
transparent: true,
|
transparent: true,
|
||||||
alwaysOnTop: true,
|
alwaysOnTop: true,
|
||||||
|
|
@ -517,8 +521,10 @@ ipcMain.on('select-atend-id',(itemId)=>{
|
||||||
});
|
});
|
||||||
|
|
||||||
// Ouvir clique no botão "Iniciar atendimento"
|
// Ouvir clique no botão "Iniciar atendimento"
|
||||||
ipcMain.on('iniciar-atendimento', (event, itemId) => {
|
ipcMain.on('iniciar-atendimento', async (event, itemId) => {
|
||||||
|
|
||||||
|
const token = await getAuthToken();
|
||||||
|
const colabId = await floatingWin.webContents.executeJavaScript("localStorage.getItem('idOperator')")
|
||||||
//TODO inicia o atendimento o id do atendimento deve ser requisitado do backend
|
//TODO inicia o atendimento o id do atendimento deve ser requisitado do backend
|
||||||
|
|
||||||
const url = apiUrl + 'iniciar-atendimento/'+itemId; // URL de exemplo para enviar a solicitação
|
const url = apiUrl + 'iniciar-atendimento/'+itemId; // URL de exemplo para enviar a solicitação
|
||||||
|
|
@ -529,7 +535,7 @@ ipcMain.on('iniciar-atendimento', (event, itemId) => {
|
||||||
url: url,
|
url: url,
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
'Authorization': 'Bearer ' + localStorage.getItem('token')
|
'Authorization': 'Bearer ' + token
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -559,19 +565,53 @@ ipcMain.on('iniciar-atendimento', (event, itemId) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Ouvir clique no botão "Salvar"
|
// Ouvir clique no botão "Salvar"
|
||||||
ipcMain.on('save-observation', (event, { itemId, observation }) => {
|
ipcMain.on('save-observation', async (event, { itemId, observation }) => {
|
||||||
|
|
||||||
//TODO salva a observação e finaliza o atendimento
|
//TODO salva a observação e finaliza o atendimento
|
||||||
|
|
||||||
console.log(`Salvando observação para item ${itemId}: ${observation}`);
|
console.log(`Salvando observação para item ${itemId}: ${observation}`);
|
||||||
|
|
||||||
console.log("Observação 'salva' (apenas log por enquanto).");
|
const token = await getAuthToken();
|
||||||
|
const colabId = await floatingWin.webContents.executeJavaScript("localStorage.getItem('idOperator')")
|
||||||
|
//TODO inicia o atendimento o id do atendimento deve ser requisitado do backend
|
||||||
|
|
||||||
|
const url = apiUrl + 'finalizar-atendimento/'+itemId; // URL de exemplo para enviar a solicitação
|
||||||
|
|
||||||
|
const fmData = JSON.stringify({
|
||||||
|
"colabId": colabId,
|
||||||
|
"obsAtendimento": observation
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// Simula o envio de uma solicitação POST com o ID do item
|
||||||
|
const request = net.request({
|
||||||
|
method: 'POST',
|
||||||
|
url: url,
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Authorization': 'Bearer ' + token
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
request.on('response', (response) => {
|
||||||
|
response.on('data', (chunk) => {
|
||||||
|
console.log(`BODY: ${chunk}`);
|
||||||
|
});
|
||||||
|
response.on('end', () => {
|
||||||
|
console.log('Solicitação concluída.');
|
||||||
|
// Avisa a janela principal que a solicitação foi feita (opcional)
|
||||||
|
// mainWin.webContents.send('request-done', itemId);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
request.on('error', (error) => {
|
||||||
|
console.error(`Erro na solicitação: ${error}`);
|
||||||
|
// Poderia notificar a UI sobre o erro
|
||||||
|
});
|
||||||
|
|
||||||
|
// Envia o ID como corpo da requisição (exemplo)
|
||||||
|
request.write(fmData);
|
||||||
|
request.end();
|
||||||
|
|
||||||
// Opcional: Ler dados novamente e atualizar contagem na janela flutuante
|
|
||||||
// const data = readData();
|
|
||||||
// if (floatingWin) {
|
|
||||||
// floatingWin.webContents.send('update-count', data.length);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Opcional: Fechar ou resetar a janela principal após salvar
|
// Opcional: Fechar ou resetar a janela principal após salvar
|
||||||
if (mainWin) {
|
if (mainWin) {
|
||||||
|
|
|
||||||
38
renderer.js
38
renderer.js
|
|
@ -5,6 +5,7 @@ const itemList = document.getElementById('item-list');
|
||||||
const nextButton = document.getElementById('next-button');
|
const nextButton = document.getElementById('next-button');
|
||||||
const logoutButton = document.getElementById('logout-button');
|
const logoutButton = document.getElementById('logout-button');
|
||||||
const observationText = document.getElementById('observation-text');
|
const observationText = document.getElementById('observation-text');
|
||||||
|
const encObservationText = document.getElementById('enc-observation-text');
|
||||||
const saveButton = document.getElementById('save-button');
|
const saveButton = document.getElementById('save-button');
|
||||||
const selectedItemNameSpan = document.getElementById('selected-item-name');
|
const selectedItemNameSpan = document.getElementById('selected-item-name');
|
||||||
const queueNumber = document.getElementById('queue-number');
|
const queueNumber = document.getElementById('queue-number');
|
||||||
|
|
@ -26,15 +27,19 @@ window.electronAPI.onLoadData((data) => {
|
||||||
//chama o proximo da fila ao abrir a janela de atendimentos
|
//chama o proximo da fila ao abrir a janela de atendimentos
|
||||||
window.electronAPI.selectAtendID((data)=>{
|
window.electronAPI.selectAtendID((data)=>{
|
||||||
if(!data){
|
if(!data){
|
||||||
queueNumber.innerHTML = 'Ninguem aguardando atendimento';
|
queueNumber.innerHTML = 'Ninguem aguardando atendimento, fechando a janela em alguns segundos...';
|
||||||
window.close();
|
setTimeout(() => {
|
||||||
|
window.close();
|
||||||
|
},5000);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Reseta a view para a lista sempre que os dados são carregados ao clicar no botão para abrir a janela
|
// Reseta a view para a lista sempre que os dados são carregados ao clicar no botão para abrir a janela
|
||||||
populateList(data);
|
populateList(data);
|
||||||
showListView();
|
showListView();
|
||||||
selectedItemId = data.id ?? null;
|
selectedItemId = data.id ?? null;
|
||||||
queueNumber.innerHTML = data ? 'NA VEZ: '+ /*data.senhaGen + ' - '+*/ data.clientName.toUpperCase() + ' - ' + data.descricaoServico.toUpperCase() : 'Ninguem aguardando atendimento';
|
//data.senhaGen
|
||||||
|
queueNumber.innerHTML = data ? `NA VEZ: <u style="color:orange;">${data.clientName.toUpperCase()}</u> - ${data.descricaoServico.toUpperCase()}` : 'Ninguem aguardando atendimento';
|
||||||
|
selectedItemNameSpan.innerHTML = data ? `<u> ${data.clientName.toUpperCase()} </u> <i style="float:right;">[ ${data.senhaGen} ]</i>` : 'Ninguem aguardando atendimento';
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -47,7 +52,7 @@ function populateList(currentData) {
|
||||||
|
|
||||||
itemList.innerHTML = ''; // Limpa a lista anterior
|
itemList.innerHTML = ''; // Limpa a lista anterior
|
||||||
if (!proximos || proximos.length === 0 || !currentData) {
|
if (!proximos || proximos.length === 0 || !currentData) {
|
||||||
itemList.innerHTML = '<li>Nenhum item encontrado.</li>';
|
itemList.innerHTML = '<li>Fila vazia!</li>';
|
||||||
nextButton.disabled = !currentData;
|
nextButton.disabled = !currentData;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -59,13 +64,13 @@ function populateList(currentData) {
|
||||||
selectedItemId = itemToProcess.id;
|
selectedItemId = itemToProcess.id;
|
||||||
selectedItemName = itemToProcess.clientName;
|
selectedItemName = itemToProcess.clientName;
|
||||||
const li = document.createElement('li');
|
const li = document.createElement('li');
|
||||||
li.textContent = /*${itemToProcess.senhaGen}: */ `${itemToProcess.clientName.toUpperCase()} - ${itemToProcess.attendanceType.toUpperCase()} - ${itemToProcess.descricaoServico.toUpperCase()}`;
|
li.innerHTML = /*${itemToProcess.senhaGen}: */ `<u>${itemToProcess.clientName.toUpperCase()}</u> - ${itemToProcess.attendanceType.toUpperCase()} - ${itemToProcess.descricaoServico.toUpperCase()}`;
|
||||||
li.dataset.id = itemToProcess.id; // Armazena o ID no elemento
|
li.dataset.id = itemToProcess.id; // Armazena o ID no elemento
|
||||||
li.classList.add('selected'); // Marca como selecionado visualmente (precisa de CSS)
|
li.classList.add('selected'); // Marca como selecionado visualmente (precisa de CSS)
|
||||||
itemList.appendChild(li);
|
itemList.appendChild(li);
|
||||||
nextButton.disabled = false;
|
nextButton.disabled = false;
|
||||||
} else {
|
} else {
|
||||||
itemList.innerHTML = '<li>Nenhum item para processar.</li>';
|
itemList.innerHTML = '<li>Fila vazia!</li>';
|
||||||
nextButton.disabled = !currentData;
|
nextButton.disabled = !currentData;
|
||||||
selectedItemId = null;
|
selectedItemId = null;
|
||||||
selectedItemName = '';
|
selectedItemName = '';
|
||||||
|
|
@ -96,9 +101,6 @@ showListView();
|
||||||
//inicia o atendimento
|
//inicia o atendimento
|
||||||
function showObservationView() {
|
function showObservationView() {
|
||||||
if (!selectedItemId) return; // Não muda se nada estiver selecionado
|
if (!selectedItemId) return; // Não muda se nada estiver selecionado
|
||||||
|
|
||||||
//obter o id do atendimento de modo asyncrono
|
|
||||||
selectedItemNameSpan.textContent = selectedItemName || `ID ${selectedItemId}`; // Mostra nome ou ID
|
|
||||||
listView.style.display = 'none';
|
listView.style.display = 'none';
|
||||||
observationView.style.display = 'block';
|
observationView.style.display = 'block';
|
||||||
}
|
}
|
||||||
|
|
@ -121,14 +123,14 @@ logoutButton.addEventListener('click',()=>{
|
||||||
|
|
||||||
//
|
//
|
||||||
// // Evento do botão "Salvar"
|
// // Evento do botão "Salvar"
|
||||||
// saveButton.addEventListener('click', () => {
|
saveButton.addEventListener('click', () => {
|
||||||
// const observation = observationText.value.trim();
|
const observation = observationText.value;
|
||||||
// if (selectedItemId !== null) {
|
if (selectedItemId !== null) {
|
||||||
// window.electronAPI.saveObservation({ itemId: selectedItemId, observation: observation });
|
window.electronAPI.saveObservation({ itemId: selectedItemId, observation: observation });
|
||||||
// window.location.reload();
|
window.location.reload();
|
||||||
// // A janela será escondida pelo main process após salvar (conforme main.js)
|
// A janela será escondida pelo main process após salvar (conforme main.js)
|
||||||
// // Se quiser resetar a view sem esconder, chame showListView() aqui.
|
// Se quiser resetar a view sem esconder, chame showListView() aqui.
|
||||||
// }
|
}
|
||||||
// });
|
});
|
||||||
|
|
||||||
// Inicialmente, mostra a view da lista (estará vazia até receber dados)
|
// Inicialmente, mostra a view da lista (estará vazia até receber dados)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue