|
|
@@ -1,6 +1,7 @@
|
|
|
<script setup lang="ts">
|
|
|
-import { onUnmounted, ref, computed, type Ref, onMounted, reactive } from "vue";
|
|
|
+import { onUnmounted, ref, computed, type Ref, onMounted, reactive, h } from "vue";
|
|
|
import { useRoute } from "vue-router";
|
|
|
+import { LoadingOutlined } from '@ant-design/icons-vue';
|
|
|
import { useSideBarStore } from "@/stores/side-bar";
|
|
|
import SearchBox from "./components/SearchBox.vue";
|
|
|
import SearchResultToolbar from "./components/SearchResultToolbar.vue";
|
|
|
@@ -44,6 +45,9 @@ const resultMode: Ref<ResultMode> = ref('detail');
|
|
|
|
|
|
const query = ref('');
|
|
|
|
|
|
+// 加载状态
|
|
|
+const spinning = ref(true);
|
|
|
+
|
|
|
interface SearchParams {
|
|
|
query: string;
|
|
|
yearSelected?: string[];
|
|
|
@@ -58,6 +62,7 @@ interface SearchParams {
|
|
|
* @param searchParams 搜索状态数据
|
|
|
*/
|
|
|
function performSearch(searchParams: SearchParams) {
|
|
|
+ spinning.value = true;
|
|
|
let sortParam: Object = { "Relevance": "Relevance" };
|
|
|
if (searchParams.sort) {
|
|
|
const sort = searchParams.sort;
|
|
|
@@ -92,17 +97,18 @@ function performSearch(searchParams: SearchParams) {
|
|
|
from,
|
|
|
size,
|
|
|
sort: sortParam,
|
|
|
+ isSaveHis: true,
|
|
|
};
|
|
|
|
|
|
- searchStore.search(param);
|
|
|
+ searchStore.search(param).then(() => spinning.value = false).catch(() => spinning.value = false);
|
|
|
searchStore.aggYear({
|
|
|
...commonParams,
|
|
|
- aggs: { year: {} },
|
|
|
+ aggs: { year: { sort: "key/desc" } },
|
|
|
size: 0,
|
|
|
});
|
|
|
searchStore.aggAuthor({
|
|
|
...commonParams,
|
|
|
- aggs: { AU: {} },
|
|
|
+ aggs: { AU: { sort: "count/desc" } },
|
|
|
size: 0,
|
|
|
});
|
|
|
}
|
|
|
@@ -146,6 +152,11 @@ function onSimpleSearch() {
|
|
|
doSearch();
|
|
|
}
|
|
|
|
|
|
+function onAdvancedSearch() {
|
|
|
+ routeToSearch({ type: 'advanced', query: query.value })
|
|
|
+ doSearch();
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* 根据url包含的信息,初始化状态信息
|
|
|
*/
|
|
|
@@ -257,7 +268,7 @@ onUnmounted(() => {
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="search-box-wrap" v-if="searchType == 'advanced'">
|
|
|
- <AdvancedSearchBox :query="query" />
|
|
|
+ <AdvancedSearchBox v-model:query="query" @search="onAdvancedSearch" />
|
|
|
</div>
|
|
|
<a-row type="flex" class="search-result-main" :gutter="10">
|
|
|
<a-col :span="5">
|
|
|
@@ -289,6 +300,7 @@ onUnmounted(() => {
|
|
|
</a-space>
|
|
|
</a-col>
|
|
|
<a-col :span="19">
|
|
|
+ <a-spin :spinning="spinning" :indicator="h(LoadingOutlined, { style: { fontSize: '24px', }, spin: true, })">
|
|
|
<SearchResultToolbar
|
|
|
v-if="searchResult"
|
|
|
:data="searchResult"
|
|
|
@@ -299,6 +311,7 @@ onUnmounted(() => {
|
|
|
@modeChange="onModeChange"
|
|
|
/>
|
|
|
<SearchResultList :data="searchResult" :mode="resultMode" v-if="searchResult" />
|
|
|
+ </a-spin>
|
|
|
</a-col>
|
|
|
</a-row>
|
|
|
</div>
|