Работа над расширенным поиском

This commit is contained in:
Book Pauk
2022-12-07 18:02:34 +07:00
parent f132cdfbdf
commit 0867e4020f
2 changed files with 62 additions and 9 deletions

View File

@@ -57,7 +57,7 @@
</div> </div>
<div v-show="!isExtendedSearch" class="row q-mx-md q-mb-xs items-center"> <div v-show="!isExtendedSearch" class="row q-mx-md q-mb-xs items-center">
<DivBtn <DivBtn
class="text-grey-5 bg-yellow-1 q-mt-xs" :size="34" :icon-size="24" round class="text-grey-5 bg-yellow-1 q-mt-xs" :size="30" :icon-size="24" round
:icon="(extendedParams ? 'la la-angle-double-up' : 'la la-angle-double-down')" :icon="(extendedParams ? 'la la-angle-double-up' : 'la la-angle-double-down')"
@click.stop.prevent="extendedParams = !extendedParams" @click.stop.prevent="extendedParams = !extendedParams"
> >
@@ -110,7 +110,7 @@
</q-input> </q-input>
<div class="q-mx-xs" /> <div class="q-mx-xs" />
<DivBtn <DivBtn
class="text-grey-8 bg-yellow-1 q-mt-xs" :size="34" :icon-size="24" round class="text-grey-8 bg-yellow-1 q-mt-xs" :size="30" :icon-size="24" round
icon="la la-level-up-alt" icon="la la-level-up-alt"
@click.stop.prevent="cloneSearch" @click.stop.prevent="cloneSearch"
> >
@@ -122,7 +122,7 @@
</DivBtn> </DivBtn>
</div> </div>
<div v-show="!isExtendedSearch && extendedParams" class="row q-mx-md q-mb-xs items-center"> <div v-show="!isExtendedSearch && extendedParams" class="row q-mx-md q-mb-xs items-center">
<div style="width: 34px" /> <div style="width: 30px" />
<div class="q-mx-xs" /> <div class="q-mx-xs" />
<q-input <q-input
v-model="genreNames" :maxlength="inputMaxLength" :debounce="inputDebounce" v-model="genreNames" :maxlength="inputMaxLength" :debounce="inputDebounce"
@@ -192,7 +192,7 @@
<q-input <q-input
v-model="extSearchNames" v-model="extSearchNames"
class="col q-mt-xs" :bg-color="inputBgColor('extended')" input-style="cursor: pointer" class="col q-mt-xs" :bg-color="inputBgColor('extended')" input-style="cursor: pointer"
style="min-width: 200px; max-width: 756px;" label="Расширенный поиск" stack-label outlined dense clearable readonly style="min-width: 200px; max-width: 752px;" label="Расширенный поиск" stack-label outlined dense clearable readonly
@click.stop.prevent="selectExtSearch" @click.stop.prevent="selectExtSearch"
> >
<template v-if="extSearchNames" #append> <template v-if="extSearchNames" #append>
@@ -206,7 +206,7 @@
<div class="q-mx-xs" /> <div class="q-mx-xs" />
<DivBtn <DivBtn
class="text-grey-8 bg-yellow-1 q-mt-xs" :size="34" :icon-size="24" round class="text-grey-8 bg-yellow-1 q-mt-xs" :size="30" :icon-size="24" round
icon="la la-level-up-alt" icon="la la-level-up-alt"
@click.stop.prevent="cloneSearch" @click.stop.prevent="cloneSearch"
> >
@@ -693,8 +693,7 @@ class Search {
} }
showSearchHelp() { showSearchHelp() {
let info = ''; let info = `<div style="min-width: 250px" />`;
info += `<div style="min-width: 250px" />`;
info += ` info += `
<p> <p>
Для раздела <b>Авторы</b>, работу поискового движка можно описать простой фразой: найти авторов по указанным критериям. Для раздела <b>Авторы</b>, работу поискового движка можно описать простой фразой: найти авторов по указанным критериям.
@@ -733,7 +732,7 @@ class Search {
<br><br> <br><br>
Для разделов <b>Серии</b>, <b>Книги</b> все аналогично разделу <b>Авторы</b>. Для разделов <b>Серии</b>, <b>Книги</b> все аналогично разделу <b>Авторы</b>.
</p> </p>
`; `;
this.$root.stdDialog.alert(info, 'Памятка', {iconName: 'la la-info-circle'}); this.$root.stdDialog.alert(info, 'Памятка', {iconName: 'la la-info-circle'});
} }

View File

@@ -5,6 +5,14 @@
<div style="font-size: 110%"> <div style="font-size: 110%">
Расширенный поиск Расширенный поиск
</div> </div>
<DivBtn class="q-ml-md text-white bg-secondary" :size="30" :icon-size="24" icon="la la-question" round @click.stop.prevent="showSearchHelp">
<template #tooltip>
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%" max-width="400px">
Памятка
</q-tooltip>
</template>
</DivBtn>
</div> </div>
</template> </template>
@@ -41,11 +49,14 @@
import vueComponent from '../../vueComponent.js'; import vueComponent from '../../vueComponent.js';
import Dialog from '../../share/Dialog.vue'; import Dialog from '../../share/Dialog.vue';
import DivBtn from '../../share/DivBtn.vue';
import _ from 'lodash'; import _ from 'lodash';
const componentOptions = { const componentOptions = {
components: { components: {
Dialog Dialog,
DivBtn,
}, },
watch: { watch: {
modelValue(newValue) { modelValue(newValue) {
@@ -126,6 +137,49 @@ class SelectExtSearchDialog {
this.error = error.join('<br>'); this.error = error.join('<br>');
} }
showSearchHelp() {
let info = `<div style="min-width: 250px" />`;
info += `
<p>
Расширенный поиск ведется непосредственно по значениям атрибутов записей описания книг.
Атрибуты можно увидеть, если включить опцию "Показывать JSON".
Названия атрибутов соответствуют названиям полей струкутры записей из inpx-файла.
На поисковые значения действуют те же правила, что и для разделов "Авторы", "Серии", "Книги".
<br>
Для строковых значений (S):
<ul>
<li>
без префикса: значение трактуется, как "начинается с"
</li>
<br>
<li>
префикс "=": поиск по точному совпадению
</li>
<br>
<li>
префикс "*": поиск подстроки в строке
</li>
<br>
<li>
префикс "#": поиск подстроки в строке, но только среди начинающихся не с латинского или кириллического символа
</li>
</ul>
Для числовых значений (N):
<ul>
<li>
число N: поиск по точному совпадению
</li>
<li>
диапазон N..M: поиск по диапазону числовых значений, включая N и M. Например, поисковое значение 1024..2048 в поле "size"
найдет все ссылки на файлы размером от 1КБ до 2КБ.
</li>
</ul>
</p>
`;
this.$root.stdDialog.alert(info, 'Памятка', {iconName: 'la la-info-circle'});
}
onKeyPress(event) { onKeyPress(event) {
if (event.code == 'Enter') if (event.code == 'Enter')
this.apply(); this.apply();