Работа над расширенным поиском
This commit is contained in:
@@ -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'});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user