From 2facc3d0d2dd12ad82766ac671deb0563afeb7f0 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 14 May 2026 10:26:58 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BB=D0=B8=D0=B5=D0=BD=D1=82:=20=D1=83?= =?UTF-8?q?=D1=81=D1=82=D0=BE=D0=B9=D1=87=D0=B8=D0=B2=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BA=20=D0=BE=D1=82=D1=81=D1=83=D1=82=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D0=B8=D1=8E=20POST=20/read,=20=D0=BE=D0=BF=D1=82=D0=B8?= =?UTF-8?q?=D0=BC=D0=B8=D1=81=D1=82=D0=B8=D1=87=D0=BD=D0=BE=D0=B5=20=D1=81?= =?UTF-8?q?=D0=BD=D1=8F=D1=82=D0=B8=D0=B5=20=D0=BD=D0=B5=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=87=D0=B8=D1=82=D0=B0=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/main.js | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/js/main.js b/js/main.js index 8db71c9..cad1a71 100644 --- a/js/main.js +++ b/js/main.js @@ -51,6 +51,9 @@ setTimeout(() => URL.revokeObjectURL(url), 120000); } + /** Сервер без маршрута `POST .../read` (404) — не дёргать повторно, меньше шума в консоли. */ + let skipClientReadReceiptPost = false; + const state = { tickets: [], currentTicket: null, @@ -261,14 +264,31 @@ } async function markClientTicketRead(ticketNumber) { - const res = await fetch(`${apiBase}/api/client/tickets/${encodeURIComponent(ticketNumber)}/read`, { - method: "POST", - headers: clientIdentityHeaders(), - }); + if (skipClientReadReceiptPost || !ticketNumber) return; + let res; + try { + res = await fetch(`${apiBase}/api/client/tickets/${encodeURIComponent(ticketNumber)}/read`, { + method: "POST", + headers: clientIdentityHeaders(), + }); + } catch { + return; + } + if (res.status === 404) { + skipClientReadReceiptPost = true; + return; + } if (!res.ok) return; const row = state.tickets.find((x) => x.ticket_number === ticketNumber); if (row) row.has_unread = false; renderTickets(); + reapplyActiveTicketCard(ticketNumber); + } + + function reapplyActiveTicketCard(ticketNumber) { + const tnSel = String(ticketNumber).replace(/\\/g, "\\\\").replace(/"/g, '\\"'); + const card = document.querySelector(`.f7-ticket-card[data-ticket-number="${tnSel}"]`); + if (card) card.classList.add("f7-ticket-card--active"); } root.innerHTML = ` @@ -825,7 +845,11 @@ openChatModal(ticket); try { await fetchMessages(); - await markClientTicketRead(ticket.ticket_number); + const row = state.tickets.find((x) => x.ticket_number === ticketNumber); + if (row) row.has_unread = false; + renderTickets(); + reapplyActiveTicketCard(ticketNumber); + void markClientTicketRead(ticket.ticket_number); connectTicketSocket(ticket.ticket_number); } catch (e) { showError(e.message || "Не удалось загрузить сообщения");