From 571a7d0e6759acdce9488673e85e7c3043da2e55 Mon Sep 17 00:00:00 2001 From: fontvielle Date: Tue, 20 Oct 2026 15:54:56 +0300 Subject: [PATCH] =?UTF-8?q?QUIK:=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B0=20?= =?UTF-8?q?=C2=AB=D0=9E=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=B8=D0=B7=20QUIK=C2=BB=20=E2=80=94=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=8B=D1=87=D0=BD=D0=B0=D1=8F=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA?= =?UTF-8?q?=D0=B0=20+=20fetch=20(submit=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D1=85=D0=B2=D0=B0=D1=82=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D0=BB=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Кнопка была submit внутри формы режима, у которой обработчик submit делает preventDefault — клик ничего не отправлял. Теперь type=button + fetch на /admin/setup/quik/detect-account (X-BJ-Ajax), результат в строке статуса, найденный счёт подставляется в поле. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn --- internal/lkgateway/quikdetect.go | 21 +++++++++++++------ .../lkgateway/web/templates/part_quik.html | 10 ++++++++- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/internal/lkgateway/quikdetect.go b/internal/lkgateway/quikdetect.go index a0ac52f..5e95192 100644 --- a/internal/lkgateway/quikdetect.go +++ b/internal/lkgateway/quikdetect.go @@ -56,28 +56,37 @@ func (h *setupHandlers) detectQuikAccount(w http.ResponseWriter, r *http.Request http.Error(w, "method", http.StatusMethodNotAllowed) return } + // ответ: для fetch (кнопка в форме режима) — текстом; иначе — флеш. + reply := func(msg string) { + if r.Header.Get("X-BJ-Ajax") != "" { + w.Header().Set("Content-Type", "text/plain; charset=utf-8") + _, _ = w.Write([]byte(msg)) + return + } + setupFlash(w, r, "QUIK: "+msg) + } s := h.rc.Snapshot().Quik if s.Server == "" || !s.Verified { - setupFlash(w, r, "QUIK: сначала подключитесь к БД МНП (Настройка → QUIK, «Проверить подключение»)") + reply("сначала подключитесь к БД МНП (Настройка → QUIK, «Проверить подключение»)") return } firm := quikFirmID() accs, err := quikDetectAccounts(r.Context(), s, firm) if err != nil { - setupFlash(w, r, "QUIK: определить счёт не удалось — "+quikErrorDetail(err)) + reply("определить счёт не удалось — " + quikErrorDetail(err)) return } switch len(accs) { case 0: - setupFlash(w, r, "QUIK: торговых счетов фирмы "+firm+" в истории поручений (Actions/Export) не найдено — введите счёт вручную") + reply("торговых счетов фирмы " + firm + " в истории поручений (Actions/Export) не найдено — введите счёт вручную") case 1: s.Account = accs[0] if err := h.rc.UpdateQuik(s); err != nil { - setupFlash(w, r, "QUIK: не сохранилось — "+err.Error()) + reply("не сохранилось — " + err.Error()) return } - setupFlash(w, r, "QUIK: торговый счёт подставлен из QUIK — "+accs[0]) + reply("торговый счёт подставлен из QUIK — " + accs[0]) default: - setupFlash(w, r, "QUIK: у фирмы "+firm+" несколько торговых счетов ("+strings.Join(accs, ", ")+") — впишите нужный вручную") + reply("у фирмы " + firm + " несколько торговых счетов (" + strings.Join(accs, ", ") + ") — впишите нужный вручную") } } diff --git a/internal/lkgateway/web/templates/part_quik.html b/internal/lkgateway/web/templates/part_quik.html index 352c477..f713f28 100644 --- a/internal/lkgateway/web/templates/part_quik.html +++ b/internal/lkgateway/web/templates/part_quik.html @@ -138,7 +138,7 @@
- +

bj возьмёт торговый счёт фирмы из истории поручений в БД QUIK (таблицы Actions/Export). Если счёт один — подставит сам.

@@ -158,6 +158,14 @@ .catch(function(){ st.textContent='✗ Не сохранилось — обновите страницу и выберите ещё раз.'; }); }); f.addEventListener('submit', function(e){ if(window.fetch) e.preventDefault(); }); + var db=document.getElementById('quik-acc-detect'); + if(db) db.addEventListener('click', function(){ + st.textContent='Определяю торговый счёт из QUIK…'; + fetch('/admin/setup/quik/detect-account',{method:'POST',headers:{'X-BJ-Ajax':'1'},cache:'no-store'}) + .then(function(r){ return r.text(); }) + .then(function(t){ st.textContent=t; var m=t.match(/—\s*(\S+)\s*$/); if(m){ f.account.value=m[1]; } }) + .catch(function(){ st.textContent='Не удалось определить — обновите страницу.'; }); + }); sync(); })(); {{end}}