Files
inpx-web/client/components/Search/Search.vue

164 lines
4.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="root column fit">
<div class="tool-panel bg-green-11">
<div class="header q-mx-md q-mt-xs row justify-between items-center">
<div class="row items-center">
<div class="q-mr-xs">
Коллекция:
</div>
<div class="clickable" @click="showCollectionInfo">
{{ collection }}
</div>
</div>
<div class="q-ml-md">
{{ projectName }}
</div>
</div>
<div class="row q-mx-md q-my-sm items-center">
<q-input ref="authorInput" v-model="author" maxlength="1000" class="bg-white" style="width: 300px;" label="Автор" stack-label outlined dense clearable />
<div class="q-mx-xs" />
<q-input v-model="series" maxlength="1000" class="bg-white" style="width: 200px;" label="Серия" stack-label outlined dense clearable />
<div class="q-mx-xs" />
<q-input v-model="title" maxlength="1000" class="bg-white" style="width: 200px;" label="Название" stack-label outlined dense clearable />
<div class="q-mx-xs" />
<q-input v-model="genre" maxlength="1000" class="bg-white" style="width: 200px;" label="Жанр" stack-label outlined dense clearable readonly />
<div class="q-mx-xs" />
<q-input v-model="lang" maxlength="1000" class="bg-white" style="width: 80px;" label="Язык" stack-label outlined dense clearable readonly />
<div class="q-mx-xs" />
<q-btn round dense style="height: 20px" color="info" icon="la la-question" @click="showSearchHelp" />
</div>
</div>
<div class="col fit" style="overflow: auto">
{{ config }}
</div>
</div>
</template>
<script>
//-----------------------------------------------------------------------------
import vueComponent from '../vueComponent.js';
//import _ from 'lodash';
const componentOptions = {
components: {
},
watch: {
config() {
this.makeTitle();
},
},
};
class Search {
_options = componentOptions;
collection = '';
projectName = '';
//search fields
author = '';
series = '';
title = '';
genre = '';
lang = '';
created() {
this.commit = this.$store.commit;
}
mounted() {
this.api = this.$root.api;
this.$refs.authorInput.focus();
this.refresh();//no await
}
get config() {
return this.$store.state.config;
}
makeTitle() {
const collection = this.config.dbConfig.inpxInfo.collection.split('\n');
this.collection = collection[0].trim();
this.projectName = `${this.config.name} v${this.config.version}`;
}
showSearchHelp() {
this.$root.stdDialog.alert(`
<p>
Здесь должна быть подсказка<br>
</p>
`, 'Подсказка', {iconName: 'la la-info-circle'});
}
showCollectionInfo() {
this.$root.stdDialog.alert(`
<p>
Здесь должна быть информация о коллекции<br>
</p>
`, 'Статистика по коллекции', {iconName: 'la la-info-circle'});
}
async updateTableData() {
}
async refresh() {
const newQuery = {
author: this.author,
series: this.series,
title: this.title,
genre: this.genre,
lang: this.lang,
};
this.queryExecute = newQuery;
if (this.refreshing)
return;
this.refreshing = true;
try {
while (this.queryExecute) {
const query = this.queryExecute;
this.queryExecute = null;
try {
this.searchResult = await this.api.search(query);
} catch (e) {
this.$root.stdDialog.alert(e.message, 'Ошибка');
return;
}
this.updateTableData();//no await
}
} finally {
this.refreshing = false;
}
}
}
export default vueComponent(Search);
//-----------------------------------------------------------------------------
</script>
<style scoped>
.root {
}
.tool-panel {
border-bottom: 1px solid black;
}
.header {
font-size: 150%;
height: 30px;
}
.clickable {
color: blue;
cursor: pointer;
}
</style>