From cff6e5aab93c4aed8e1fe57210728b0dcfa6e1cb Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 7 Dec 2022 15:52:43 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=B4=20=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D0=BC=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++++ .../SelectExtSearchDialog/SelectExtSearchDialog.vue | 6 ++++++ server/core/DbSearcher.js | 8 +++++--- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 316bff7..e78a872 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,11 @@ Options: // 0 - отключить таймаут, время доступа по паролю не ограничено "accessTimeout": 0, + // включить(true)/выключить(false) возможность расширенного поиска (раздел "") + // расширенный поиск не оптимизирован, поэтому может сильно нагружать сервер + // чтобы ускорить поиск, увеличьте параметр dbCacheSize + "extendedSearch": true, + // содержимое кнопки-ссылки "(читать)", если не задано - кнопка "(читать)" не показывается // пример: "https://omnireader.ru/#/reader?url=${DOWNLOAD_LINK}" // на место ${DOWNLOAD_LINK} будет подставлена ссылка на скачивание файла книги diff --git a/client/components/Search/SelectExtSearchDialog/SelectExtSearchDialog.vue b/client/components/Search/SelectExtSearchDialog/SelectExtSearchDialog.vue index 8f62229..7e263ee 100644 --- a/client/components/Search/SelectExtSearchDialog/SelectExtSearchDialog.vue +++ b/client/components/Search/SelectExtSearchDialog/SelectExtSearchDialog.vue @@ -17,6 +17,7 @@ class="q-mt-xs" style="width: 150px;" :label="`(${f.type}) ${f.field}`" :bg-color="bgColor[f.field] || 'white'" stack-label outlined dense clearable + @keypress="onKeyPress" > {{ search[f.field] }} @@ -125,6 +126,11 @@ class SelectExtSearchDialog { this.error = error.join('
'); } + onKeyPress(event) { + if (event.code == 'Enter') + this.apply(); + } + apply() { this.validate(); if (!this.error) { diff --git a/server/core/DbSearcher.js b/server/core/DbSearcher.js index 4e7b940..dc72b13 100644 --- a/server/core/DbSearcher.js +++ b/server/core/DbSearcher.js @@ -547,20 +547,22 @@ class DbSearcher { if (bookIds === null) { const db = this.db; const filterBySearch = (bookField, searchValue) => { + searchValue = searchValue.toLowerCase(); //особая обработка префиксов if (searchValue[0] == '=') { searchValue = searchValue.substring(1); - return `(row.${bookField}.localeCompare(${db.esc(searchValue)}) === 0)`; + return `(row.${bookField}.toLowerCase().localeCompare(${db.esc(searchValue)}) === 0)`; } else if (searchValue[0] == '*') { searchValue = searchValue.substring(1); - return `(row.${bookField} && row.${bookField}.indexOf(${db.esc(searchValue)}) >= 0)`; + return `(row.${bookField} && row.${bookField}.toLowerCase().indexOf(${db.esc(searchValue)}) >= 0)`; } else if (searchValue[0] == '#') { //searchValue = searchValue.substring(1); //return !bookValue || (bookValue !== emptyFieldValue && !enru.has(bookValue[0]) && bookValue.indexOf(searchValue) >= 0); return 'true'; } else { - return `(row.${bookField}.localeCompare(${db.esc(searchValue)}) >= 0 && row.${bookField}.localeCompare(${db.esc(searchValue)} + ${db.esc(maxUtf8Char)}) <= 0)`; + return `(row.${bookField}.toLowerCase().localeCompare(${db.esc(searchValue)}) >= 0 ` + + `&& row.${bookField}.toLowerCase().localeCompare(${db.esc(searchValue)} + ${db.esc(maxUtf8Char)}) <= 0)`; } };