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>
|
||||
<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">
|
||||
<title>Aguardando atendimento</title>
|
||||
<title>Tela de Atendimento</title>
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<script src="js/jquery/jquery.js"></script>
|
||||
</head>
|
||||
|
|
@ -31,7 +31,7 @@
|
|||
<div id="encaminhar-view" style="display: none;">
|
||||
<h1>Observações</h1>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
62
main.js
62
main.js
|
|
@ -49,7 +49,11 @@ async function readData() {
|
|||
// Função para buscar dados da API
|
||||
async function fetchDataFromAPI() {
|
||||
//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();
|
||||
},30000);
|
||||
}
|
||||
|
|
@ -235,7 +239,7 @@ function createFloatingWindow() {
|
|||
height: winHeight,
|
||||
icon: "icon.ico",
|
||||
x: screenWidth - winWidth + 0,
|
||||
y: screenHeight - winHeight - 60,
|
||||
y: screenHeight - winHeight - 180,
|
||||
frame: false,
|
||||
transparent: true,
|
||||
alwaysOnTop: true,
|
||||
|
|
@ -517,8 +521,10 @@ ipcMain.on('select-atend-id',(itemId)=>{
|
|||
});
|
||||
|
||||
// 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
|
||||
|
||||
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,
|
||||
headers: {
|
||||
'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"
|
||||
ipcMain.on('save-observation', (event, { itemId, observation }) => {
|
||||
ipcMain.on('save-observation', async (event, { itemId, observation }) => {
|
||||
|
||||
//TODO salva a observação e finaliza o atendimento
|
||||
|
||||
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
|
||||
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 logoutButton = document.getElementById('logout-button');
|
||||
const observationText = document.getElementById('observation-text');
|
||||
const encObservationText = document.getElementById('enc-observation-text');
|
||||
const saveButton = document.getElementById('save-button');
|
||||
const selectedItemNameSpan = document.getElementById('selected-item-name');
|
||||
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
|
||||
window.electronAPI.selectAtendID((data)=>{
|
||||
if(!data){
|
||||
queueNumber.innerHTML = 'Ninguem aguardando atendimento';
|
||||
window.close();
|
||||
queueNumber.innerHTML = 'Ninguem aguardando atendimento, fechando a janela em alguns segundos...';
|
||||
setTimeout(() => {
|
||||
window.close();
|
||||
},5000);
|
||||
return;
|
||||
}
|
||||
// Reseta a view para a lista sempre que os dados são carregados ao clicar no botão para abrir a janela
|
||||
populateList(data);
|
||||
showListView();
|
||||
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
|
||||
if (!proximos || proximos.length === 0 || !currentData) {
|
||||
itemList.innerHTML = '<li>Nenhum item encontrado.</li>';
|
||||
itemList.innerHTML = '<li>Fila vazia!</li>';
|
||||
nextButton.disabled = !currentData;
|
||||
return;
|
||||
}
|
||||
|
|
@ -59,13 +64,13 @@ function populateList(currentData) {
|
|||
selectedItemId = itemToProcess.id;
|
||||
selectedItemName = itemToProcess.clientName;
|
||||
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.classList.add('selected'); // Marca como selecionado visualmente (precisa de CSS)
|
||||
itemList.appendChild(li);
|
||||
nextButton.disabled = false;
|
||||
} else {
|
||||
itemList.innerHTML = '<li>Nenhum item para processar.</li>';
|
||||
itemList.innerHTML = '<li>Fila vazia!</li>';
|
||||
nextButton.disabled = !currentData;
|
||||
selectedItemId = null;
|
||||
selectedItemName = '';
|
||||
|
|
@ -96,9 +101,6 @@ showListView();
|
|||
//inicia o atendimento
|
||||
function showObservationView() {
|
||||
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';
|
||||
observationView.style.display = 'block';
|
||||
}
|
||||
|
|
@ -121,14 +123,14 @@ logoutButton.addEventListener('click',()=>{
|
|||
|
||||
//
|
||||
// // Evento do botão "Salvar"
|
||||
// saveButton.addEventListener('click', () => {
|
||||
// const observation = observationText.value.trim();
|
||||
// if (selectedItemId !== null) {
|
||||
// window.electronAPI.saveObservation({ itemId: selectedItemId, observation: observation });
|
||||
// window.location.reload();
|
||||
// // A janela será escondida pelo main process após salvar (conforme main.js)
|
||||
// // Se quiser resetar a view sem esconder, chame showListView() aqui.
|
||||
// }
|
||||
// });
|
||||
saveButton.addEventListener('click', () => {
|
||||
const observation = observationText.value;
|
||||
if (selectedItemId !== null) {
|
||||
window.electronAPI.saveObservation({ itemId: selectedItemId, observation: observation });
|
||||
window.location.reload();
|
||||
// A janela será escondida pelo main process após salvar (conforme main.js)
|
||||
// Se quiser resetar a view sem esconder, chame showListView() aqui.
|
||||
}
|
||||
});
|
||||
|
||||
// Inicialmente, mostra a view da lista (estará vazia até receber dados)
|
||||
|
|
|
|||
Loading…
Reference in New Issue