diff --git a/miniapp/assets/clients.js b/miniapp/assets/clients.js
index 1e6d95d..acbaec6 100644
--- a/miniapp/assets/clients.js
+++ b/miniapp/assets/clients.js
@@ -1765,31 +1765,41 @@ const Clients = (function () {
return section;
}
+ async function _fetchWithTimeout(url, body, timeoutMs = 15000) {
+ const ctrl = new AbortController();
+ const timer = setTimeout(() => ctrl.abort(), timeoutMs);
+ try {
+ const res = await fetch(url, {
+ method: "POST",
+ signal: ctrl.signal,
+ body: JSON.stringify(body),
+ });
+ return await res.json();
+ } catch (e) {
+ if (e.name === "AbortError") throw new Error("Сервер не отвечает — попробуйте ещё раз");
+ throw e;
+ } finally {
+ clearTimeout(timer);
+ }
+ }
+
async function fetchClientNote(client) {
- const res = await fetch(`${BACKEND_URL}/api/client_note`, {
- method: "POST",
- body: JSON.stringify({
- initData: tg?.initData || "",
- initDataUnsafe: tg?.initDataUnsafe || null,
- client_name: client.client_name || "",
- client_phone: client.client_phone || "",
- }),
+ return _fetchWithTimeout(`${BACKEND_URL}/api/client_note`, {
+ initData: tg?.initData || "",
+ initDataUnsafe: tg?.initDataUnsafe || null,
+ client_name: client.client_name || "",
+ client_phone: client.client_phone || "",
});
- return await res.json();
}
async function saveClientNote(client, note) {
- const res = await fetch(`${BACKEND_URL}/api/client_note`, {
- method: "POST",
- body: JSON.stringify({
- initData: tg?.initData || "",
- initDataUnsafe: tg?.initDataUnsafe || null,
- client_name: client.client_name || "",
- client_phone: client.client_phone || "",
- note: note || "",
- }),
+ return _fetchWithTimeout(`${BACKEND_URL}/api/client_note`, {
+ initData: tg?.initData || "",
+ initDataUnsafe: tg?.initDataUnsafe || null,
+ client_name: client.client_name || "",
+ client_phone: client.client_phone || "",
+ note: note || "",
});
- return await res.json();
}
function setupVoiceInput(micBtn, textarea, status) {
@@ -1825,14 +1835,10 @@ const Clients = (function () {
async function fetchClients() {
if (!BACKEND_URL) throw new Error("BACKEND_URL не задан");
- const res = await fetch(`${BACKEND_URL}/api/clients`, {
- method: "POST",
- body: JSON.stringify({
- initData: tg?.initData || "",
- initDataUnsafe: tg?.initDataUnsafe || null,
- }),
+ return _fetchWithTimeout(`${BACKEND_URL}/api/clients`, {
+ initData: tg?.initData || "",
+ initDataUnsafe: tg?.initDataUnsafe || null,
});
- return await res.json();
}
async function fetchLead(leadId) {
@@ -1846,11 +1852,10 @@ const Clients = (function () {
async function fetchMeasurements(filters = {}) {
if (!BACKEND_URL) throw new Error("BACKEND_URL не задан");
- const res = await fetch(`${BACKEND_URL}/api/measurements`, {
- method: "POST",
- body: JSON.stringify({ initData: tg?.initData || "", ...filters }),
+ return _fetchWithTimeout(`${BACKEND_URL}/api/measurements`, {
+ initData: tg?.initData || "",
+ ...filters,
});
- return await res.json();
}
function initial(name) {
diff --git a/miniapp/index.html b/miniapp/index.html
index 3c2d319..8bfbc73 100644
--- a/miniapp/index.html
+++ b/miniapp/index.html
@@ -39,7 +39,7 @@
-
+