From 34a4d5a681ac60c024a2fbc0b438a565af27e887 Mon Sep 17 00:00:00 2001 From: Eder Moraes <54563944+edermcastro@users.noreply.github.com> Date: Fri, 30 May 2025 18:19:03 -0300 Subject: [PATCH] =?UTF-8?q?corre=C3=A7=C3=B5es=20em=20todas=20as=20telas,?= =?UTF-8?q?=20precisa=20revisar=20a=20de=20salvar=20observa=C3=A7=C3=A3o?= =?UTF-8?q?=20e=20concluir=20o=20atendimento?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 44 +------------- main.js | 91 ++++++++++++++++++++-------- operator.html | 1 + operator.js | 7 +++ operator_preload.js | 3 +- package.json | 2 +- preload.js | 5 +- renderer.js | 140 +++++++++++++++++++++++++++++--------------- 8 files changed, 175 insertions(+), 118 deletions(-) diff --git a/index.html b/index.html index 864008c..55a2677 100644 --- a/index.html +++ b/index.html @@ -18,12 +18,14 @@

Fila

+

- + +
+ diff --git a/operator.js b/operator.js index 1088362..8f95d95 100644 --- a/operator.js +++ b/operator.js @@ -1,6 +1,7 @@ const operatorSelect = document.getElementById('operator-select'); const selectButton = document.getElementById('select-button'); const errorMessage = document.getElementById('error-message'); +const quitButton = document.getElementById('sair-button'); // Carrega a lista de operadores ao iniciar window.addEventListener('DOMContentLoaded', async () => { @@ -78,4 +79,10 @@ window.electronAPI.onOperatorResponse((response) => { selectButton.textContent = 'Continuar'; } // Se for bem-sucedido, o processo principal fechará esta janela +}); + + + +quitButton.addEventListener('click',()=>{ + window.electronAPI.quitApp(); }); \ No newline at end of file diff --git a/operator_preload.js b/operator_preload.js index 5a1e10a..8abe3df 100644 --- a/operator_preload.js +++ b/operator_preload.js @@ -3,5 +3,6 @@ const { contextBridge, ipcRenderer } = require('electron'); contextBridge.exposeInMainWorld('electronAPI', { getOperators: () => ipcRenderer.invoke('get-operators'), selectOperator: (operatorName) => ipcRenderer.send('select-operator', operatorName), - onOperatorResponse: (callback) => ipcRenderer.on('operator-response', (_event, response) => callback(response)) + onOperatorResponse: (callback) => ipcRenderer.on('operator-response', (_event, response) => callback(response)), + quitApp : () => ipcRenderer.send('sair'), }); \ No newline at end of file diff --git a/package.json b/package.json index 152c51e..34c7197 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "autoatendcolab", "version": "1.0.0", "main": "main.js", - "isBuildNow": false, + "isBuildNow": true, "scripts": { "start": "electron .", "nodemon": "nodemon --exec electron .", diff --git a/preload.js b/preload.js index 8d511f4..ab50445 100644 --- a/preload.js +++ b/preload.js @@ -2,9 +2,10 @@ const { app, contextBridge, ipcRenderer } = require('electron'); contextBridge.exposeInMainWorld('electronAPI', { onLoadData: (callback) => ipcRenderer.on('load-data', (_event, value) => callback(value)), - selectAtendID: (callback) => ipcRenderer.on('select-atend-id', (_event, value) => callback(value)), + selectAtendID: (callback) => ipcRenderer.on('select-atend-id', (_event, data) => callback(data)), iniciaAtendimento: (itemId) => ipcRenderer.send('iniciar-atendimento', itemId), - quitApp : () => ipcRenderer.send('sair'), + + logoutApp: () => ipcRenderer.send('logout'), saveObservation: (data) => ipcRenderer.send('save-observation', data), // data = { itemId, observation } updAvailable: () => ipcRenderer.on('update-available',(event,arg)=>{ diff --git a/renderer.js b/renderer.js index 310fc48..f531b04 100644 --- a/renderer.js +++ b/renderer.js @@ -3,74 +3,79 @@ const observationView = document.getElementById('obs-view'); const encaminharView = document.getElementById('encaminhar-view'); const itemList = document.getElementById('item-list'); const nextButton = document.getElementById('next-button'); -const quitButton = document.getElementById('sair-button'); +const logoutButton = document.getElementById('logout-button'); const observationText = document.getElementById('observation-text'); const saveButton = document.getElementById('save-button'); const selectedItemNameSpan = document.getElementById('selected-item-name'); +const queueNumber = document.getElementById('queue-number'); let currentData = []; let selectedItemId = null; let selectedItemName = ''; -window.electronAPI.onLoadData(() => { - populateList(); - // Reseta a view para a lista sempre que os dados são carregados - showListView(); +// window.electronAPI.onLoadData(() => { +// populateList(); +// // Reseta a view para a lista sempre que os dados são carregados +// showListView(); +// }); + +//chama o proximo da fila ao abrir a janela de atendimentos +window.electronAPI.selectAtendID((data)=>{ + selectedItemId = data.id; + queueNumber.innerHTML = data ? 'Chamando: '+data.senhaGen + ' - '+ data.clientName.toUpperCase() + ' - ' + data.descricaoServico.toUpperCase() : 'Ninguem aguardando atendimento'; }); // Função para popular a lista de itens function populateList() { - // let datastorage = localStorage.getItem('proximos'); - // - // // Adiciona os outros itens apenas para visualização (opcional) - // const proximos = JSON.parse(datastorage); - // - // itemList.innerHTML = ''; // Limpa a lista anterior - // if (!proximos || proximos.length === 0) { - // itemList.innerHTML = '
  • Nenhum item encontrado.
  • '; - // nextButton.disabled = true; - // return; - // } - // - // // Seleciona o primeiro item por padrão (ou o próximo disponível) - // // Aqui, vamos apenas pegar o primeiro da lista atual - // const itemToProcess = proximos[0]; // Pega o primeiro item - // if (itemToProcess) { - // 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.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 = '
  • Nenhum item para processar.
  • '; - // nextButton.disabled = true; - // selectedItemId = null; - // selectedItemName = ''; - // } - // - // // Adiciona os outros itens apenas para visualização (opcional) - // proximos.slice(1).forEach(item => { - // const li = document.createElement('li'); - // li.textContent = `${item.senhaGen}: ${item.clientName.toUpperCase()} - ${item.attendanceType.toUpperCase()} - ${item.descricaoServico.toUpperCase()}`; - // itemList.appendChild(li); - // }); + let datastorage = localStorage.getItem('proximos'); + + // Adiciona os outros itens apenas para visualização (opcional) + const proximos = JSON.parse(datastorage); + + itemList.innerHTML = ''; // Limpa a lista anterior + if (!proximos || proximos.length === 0) { + itemList.innerHTML = '
  • Nenhum item encontrado.
  • '; + nextButton.disabled = true; + return; + } + + // Seleciona o primeiro item por padrão (ou o próximo disponível) + // Aqui, vamos apenas pegar o primeiro da lista atual + const itemToProcess = proximos[0]; // Pega o primeiro item + if (itemToProcess) { + 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.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 = '
  • Nenhum item para processar.
  • '; + nextButton.disabled = true; + selectedItemId = null; + selectedItemName = ''; + } + + // Adiciona os outros itens apenas para visualização (opcional) + proximos.slice(1).forEach(item => { + const li = document.createElement('li'); + li.textContent = `${item.senhaGen}: ${item.clientName.toUpperCase()} - ${item.attendanceType.toUpperCase()} - ${item.descricaoServico.toUpperCase()}`; + itemList.appendChild(li); + }); } //mostra a tela de listagem e permite iniciar o atendimento function showListView() { - populateList(); + // populateList(); listView.style.display = 'block'; encaminharView.style.display = 'none'; observationView.style.display = 'none'; observationText.value = ''; // Limpa a textarea - window.electronAPI.currVersion(()=>{}); - // nextButton.disabled = !selectedItemId; // Habilita/desabilita baseado na seleção } @@ -99,8 +104,8 @@ nextButton.addEventListener('click', () => { -quitButton.addEventListener('click',()=>{ - window.electronAPI.quitApp(); +logoutButton.addEventListener('click',()=>{ + window.electronAPI.logoutApp(); }); // @@ -116,3 +121,44 @@ quitButton.addEventListener('click',()=>{ // }); // Inicialmente, mostra a view da lista (estará vazia até receber dados) + + + +//não vai ser usado timer pois é usado no floatbuttom, ele atualiza com timer +//essa função vai ser chamada apenas quando algum registro já estiver sido atendido +function updRemoteList() { + if (!token && !colabId) { + console.warn("Token or colabId not found in localStorage. API requests will not be made."); + return; // Stop the function if token or colabId is missing + } + + $.ajax(apiUrl + 'get-proximos/'+colabId, { + method: 'GET', + headers: { 'Authorization': 'Bearer '+token }, + processData: false, + contentType: false, + dataType: 'JSON', + success: function(response) { + console.log('Resposta:', response); + // Ensure the response is valid JSON before parsing + try { + localStorage.setItem('proximos', JSON.stringify(response)); + } catch (e) { + console.error("Error parsing JSON response:", e); + console.error("Response text:", response); // Log the raw response for debugging + } + }, + error: function(xhr, status, error) { + console.error('Erro na requisição:', status, error); + console.error('Response Text:', xhr.responseText); // Log the response text for debugging + // Optionally, handle different error codes: + if (xhr.status === 401) { + console.warn("Unauthorized. Token might be invalid."); + // You could redirect the user to a login page here. + } else if (xhr.status === 404) { + console.warn("Resource not found. Check the API endpoint."); + } + } + }); + +} \ No newline at end of file