feat: Add "Reabrir" button for comandas in 'PAYING' status, adjust visibility of other action buttons, include opening date in PDV modal title, and update the default product image fallback.
This commit is contained in:
@@ -118,9 +118,11 @@ function renderComandasTable(data) {
|
|||||||
<div style="display:flex;gap:6px">
|
<div style="display:flex;gap:6px">
|
||||||
<button class="btn btn-secondary btn-sm btn-itens" data-id="${c.id}" title="Itens">🛒</button>
|
<button class="btn btn-secondary btn-sm btn-itens" data-id="${c.id}" title="Itens">🛒</button>
|
||||||
${ativa ? `<button class="btn btn-success btn-sm btn-receber" data-id="${c.id}" title="Receber">💰</button>` : ''}
|
${ativa ? `<button class="btn btn-success btn-sm btn-receber" data-id="${c.id}" title="Receber">💰</button>` : ''}
|
||||||
${ativa && c.status !== 'PAYING' ? `<button class="btn btn-warning btn-sm btn-pagar" data-id="${c.id}" title="Avisar Pagamento">⏳</button>` : ''}
|
${ativa && c.status === 'OPEN' ? `<button class="btn btn-warning btn-sm btn-pagar" data-id="${c.id}" title="Avisar Pagamento">⏳</button>` : ''}
|
||||||
${ativa ? `<button class="btn btn-danger btn-sm btn-excluir" data-id="${c.id}" title="Excluir">🗑️</button>` : ''}
|
${ativa && c.status === 'PAYING' ? `<button class="btn btn-warning btn-sm btn-reopen" data-id="${c.id}" title="Reabrir Comanda">Reabrir</button>` : ''}
|
||||||
</div>
|
|
||||||
|
|
||||||
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>`;
|
</tr>`;
|
||||||
}).join('')}
|
}).join('')}
|
||||||
@@ -146,6 +148,15 @@ function renderComandasTable(data) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Listener para botão "Reabrir" (muda p/ OPEN)
|
||||||
|
wrap.querySelectorAll('.btn-reopen').forEach(btn => {
|
||||||
|
btn.addEventListener('click', async () => {
|
||||||
|
const r = await window.electronAPI.patch(`/comandas/${btn.dataset.id}/`, { status: 'OPEN' });
|
||||||
|
if (r.ok) { showToast('Comanda reaberta!', 'info'); loadComandas(_mesasRef); }
|
||||||
|
else showToast(r.error, 'error');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// Listener para ver itens da comanda
|
// Listener para ver itens da comanda
|
||||||
wrap.querySelectorAll('.btn-itens').forEach(btn => {
|
wrap.querySelectorAll('.btn-itens').forEach(btn => {
|
||||||
btn.addEventListener('click', () => {
|
btn.addEventListener('click', () => {
|
||||||
@@ -263,7 +274,7 @@ async function abrirItensComanda(comandaIdOrObj) {
|
|||||||
|
|
||||||
openModal({
|
openModal({
|
||||||
full: true,
|
full: true,
|
||||||
title: `🛒 PDV: Comanda #${comanda.id} — ${comanda.name || ''} (${comanda.mesa_name || ''})`,
|
title: `🛒 #${comanda.id} — ${comanda.name || ''} (${comanda.mesa_name || ''}) — ${formatDate(comanda.dt_open)}`,
|
||||||
body: `
|
body: `
|
||||||
<div class="pdv-container">
|
<div class="pdv-container">
|
||||||
<!-- Lado Esquerdo: Itens da Comanda -->
|
<!-- Lado Esquerdo: Itens da Comanda -->
|
||||||
@@ -348,7 +359,7 @@ async function abrirItensComanda(comandaIdOrObj) {
|
|||||||
<div style="display:grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 10px;">
|
<div style="display:grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 10px;">
|
||||||
<button class="btn btn-success btn-lg" id="btn-pdv-receber">💰 Receber</button>
|
<button class="btn btn-success btn-lg" id="btn-pdv-receber">💰 Receber</button>
|
||||||
<button class="btn btn-danger btn-lg" id="btn-pdv-excluir">🗑️ Excluir</button>
|
<button class="btn btn-danger btn-lg" id="btn-pdv-excluir">🗑️ Excluir</button>
|
||||||
</div>
|
</div>
|
||||||
` : ''}
|
` : ''}
|
||||||
</div>`;
|
</div>`;
|
||||||
|
|
||||||
@@ -440,9 +451,9 @@ async function abrirItensComanda(comandaIdOrObj) {
|
|||||||
|
|
||||||
const filtrados = todosProdutos.filter(p => !filtro || p.name.toLowerCase().includes(filtro.toLowerCase())).slice(0, 20);
|
const filtrados = todosProdutos.filter(p => !filtro || p.name.toLowerCase().includes(filtro.toLowerCase())).slice(0, 20);
|
||||||
|
|
||||||
console.log('Produtos carregados no PDV:', todosProdutos);
|
// console.log('Produtos carregados no PDV:', todosProdutos);
|
||||||
container.innerHTML = filtrados.map(p => {
|
container.innerHTML = filtrados.map(p => {
|
||||||
const imgTarget = p.image ? `url('${p.image}')` : 'none';
|
const imgTarget = p.image ? `url('${p.image}')` : `url('https://wallpapers.com/images/featured/fundo-abstrato-escuro-27kvn4ewpldsngbu.jpg')`;
|
||||||
return `
|
return `
|
||||||
<div class="pdv-product-card" data-id="${p.id}">
|
<div class="pdv-product-card" data-id="${p.id}">
|
||||||
<div class="pdv-product-bg" style="background-image: ${imgTarget}"></div>
|
<div class="pdv-product-bg" style="background-image: ${imgTarget}"></div>
|
||||||
|
|||||||
@@ -755,7 +755,7 @@ select.form-control option {
|
|||||||
/* PDV Layout for Comanda Items */
|
/* PDV Layout for Comanda Items */
|
||||||
.pdv-container {
|
.pdv-container {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 380px 1fr;
|
grid-template-columns: 480px 1fr;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
gap: 1px;
|
gap: 1px;
|
||||||
background: var(--border);
|
background: var(--border);
|
||||||
@@ -783,7 +783,8 @@ select.form-control option {
|
|||||||
|
|
||||||
.pdv-products-grid {
|
.pdv-products-grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
|
||||||
|
grid-auto-rows: max-content;
|
||||||
gap: 12px;
|
gap: 12px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
padding-right: 8px;
|
padding-right: 8px;
|
||||||
|
|||||||
Reference in New Issue
Block a user