From 23e557d792e2a1c7b7f6ff115300871eebe3c439 Mon Sep 17 00:00:00 2001 From: Mikhail Chusavitin Date: Thu, 22 Jan 2026 11:23:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=BB=D1=8C=D1=82=D1=80=20FK=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BB=D0=BE=D0=BD=D0=BE=D0=BA:=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=91=D0=BD=20dropdown=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B2=D0=B2=D0=BE=D0=B4=20=D1=81=20=D0=B0=D0=B2=D1=82=D0=BE?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA?= =?UTF-8?q?=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - autocomplete: true - показывает подсказки при вводе - freetext: true - разрешает свободный ввод - filterFunc - фильтрация по вхождению подстроки - clearable: true - кнопка очистки Co-Authored-By: Claude Opus 4.5 --- public/app.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/public/app.js b/public/app.js index f7a95cf..d2bb473 100644 --- a/public/app.js +++ b/public/app.js @@ -479,21 +479,26 @@ async function selectTable(schema, tableName) { // ✅ Проверяем - загружены ли все значения const allLoaded = values.length >= total; - // ✅ ФИЛЬТР В ЗАГОЛОВКЕ - выпадающий список для FK колонок + // ✅ ФИЛЬТР В ЗАГОЛОВКЕ - ввод с автоподстановкой для FK колонок if (allLoaded || total <= 1000) { - // Формируем список значений для фильтра с пустым значением - const filterValues = { "": "-- Все --" }; - values.forEach(v => { filterValues[v] = v; }); - colDef.headerFilter = "list"; colDef.headerFilterParams = { - values: filterValues, - clearable: false // Не показываем кнопку очистки, есть "Все" + values: values, + autocomplete: true, + clearable: true, + listOnEmpty: true, + freetext: true, // Разрешаем свободный ввод для поиска + placeholderEmpty: "Введите для поиска...", + filterFunc: function(term, label, value, item) { + // Фильтрация по вхождению подстроки + if (!term) return true; + return String(label).toLowerCase().includes(term.toLowerCase()); + } }; // Серверная фильтрация - пропускаем все на клиенте colDef.headerFilterFunc = function() { return true; }; } else { - // Много значений - оставляем текстовый поиск + // Много значений - текстовый поиск colDef.headerFilter = "input"; colDef.headerFilterPlaceholder = `Поиск (${total})...`; colDef.headerFilterFunc = function() { return true; };