|
|
@@ -6,6 +6,7 @@ import ReferenceSearchBox from "./ReferenceSearchBox.vue";
|
|
|
import ReferenceSearchResultItem from "./ReferenceSearchResultItem.vue";
|
|
|
import type { ChapterSearchDocResponse, ChapterSearchRequest } from "@/types/search.types"
|
|
|
import * as chapterSearchService from "@/services/chapterSearch.service"
|
|
|
+import * as paperSectionService from "@/services/paperSection.service"
|
|
|
import { CompLog } from "@/libs/log.lib";
|
|
|
import SpinComponent from "@/components/SpinComponent.vue";
|
|
|
|
|
|
@@ -19,6 +20,7 @@ const props = defineProps({
|
|
|
const emits = defineEmits<{
|
|
|
(e: "insert", text: string): void;
|
|
|
(e: "close"): void;
|
|
|
+ (e: "recordUse", sectionId: number): void;
|
|
|
}>();
|
|
|
|
|
|
// 组件可见状态
|
|
|
@@ -27,6 +29,8 @@ const visible = ref<boolean>(false);
|
|
|
const total = ref(0)
|
|
|
// 章节搜索结果
|
|
|
const referenceSearchResult: Ref<ChapterSearchDocResponse[]> = ref([]);
|
|
|
+// 文献章节段落内容是否使用ref
|
|
|
+const paperSectionUsage = ref<Record<number, boolean>>({})
|
|
|
// 章节搜索状态
|
|
|
const loading = ref(false)
|
|
|
// 翻页
|
|
|
@@ -57,6 +61,12 @@ function getSearchRequest(): ChapterSearchRequest {
|
|
|
return request
|
|
|
}
|
|
|
|
|
|
+function querySectionUsage(sectionIds: number[]) {
|
|
|
+ paperSectionService.query(sectionIds).then((usages) => {
|
|
|
+ paperSectionUsage.value = usages
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
function search(request: ChapterSearchRequest) {
|
|
|
loading.value = true
|
|
|
referenceSearchResult.value = []
|
|
|
@@ -64,6 +74,8 @@ function search(request: ChapterSearchRequest) {
|
|
|
loading.value = false
|
|
|
total.value = resp.total
|
|
|
referenceSearchResult.value = resp.items
|
|
|
+
|
|
|
+ querySectionUsage(resp.items.map(item => item.id))
|
|
|
}).catch((err) => {
|
|
|
CompLog.logErr("ReferenceDraw")(err)
|
|
|
loading.value = false
|
|
|
@@ -88,6 +100,18 @@ function onReferenceSearchWithInSearch(queryWithInKeywordsIn: string[]) {
|
|
|
search(getSearchRequest())
|
|
|
}
|
|
|
|
|
|
+function onSectionRecordUse(sectionId: number) {
|
|
|
+ paperSectionService.record(sectionId).then(() => {
|
|
|
+ paperSectionUsage.value[`${sectionId}`] = true
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+function onSectionRecordCancel(sectionId: number) {
|
|
|
+ paperSectionService.cancel(sectionId).then(() => {
|
|
|
+ paperSectionUsage.value[`${sectionId}`] = false
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
const onClose = () => {
|
|
|
visible.value = false;
|
|
|
emits("close")
|
|
|
@@ -112,7 +136,6 @@ defineExpose({
|
|
|
title="检索参考文献"
|
|
|
placement="right"
|
|
|
:visible="visible"
|
|
|
- :destroyOnClose="true"
|
|
|
@close="onClose"
|
|
|
class="reference-drawer"
|
|
|
>
|
|
|
@@ -125,7 +148,13 @@ defineExpose({
|
|
|
</a-divider>
|
|
|
<SpinComponent :spinning="loading">
|
|
|
<div v-for="(item, index) in referenceSearchResult" :key="index">
|
|
|
- <ReferenceSearchResultItem :data="item" @insert="emits('insert', $event)" />
|
|
|
+ <ReferenceSearchResultItem
|
|
|
+ :data="item"
|
|
|
+ :used="paperSectionUsage[item.id] || false"
|
|
|
+ @insert="emits('insert', $event)"
|
|
|
+ @record-use="onSectionRecordUse"
|
|
|
+ @record-cancel="onSectionRecordCancel"
|
|
|
+ />
|
|
|
<a-divider class="result-item-divider" v-if="index < referenceSearchResult.length - 1" />
|
|
|
</div>
|
|
|
<div class="pigination-wrap">
|