From dba5aebd872275244c3def4ce471274adf009f20 Mon Sep 17 00:00:00 2001 From: "34047007@qq.com" <34047007@qq.com> Date: Mon, 10 Aug 2026 23:36:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=A6=96=E9=A1=B5=E6=96=87=E7=8C=AE?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=8E=A5=E5=85=A5=E6=98=BE=E7=A4=BA=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=20=E2=80=94=20=E6=96=B0=E5=A2=9E=E5=85=B1=E4=BA=AB?= =?UTF-8?q?=E9=BD=BF=E8=BD=AE=E9=9D=A2=E6=9D=BF=E7=BB=84=E4=BB=B6=E5=B9=B6?= =?UTF-8?q?=E5=A4=8D=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 首页卡片原未传 displaySettings 导致除标题日期外全部字段隐藏; 新建 DisplaySettingsPopover 共享组件,首页列表顶部加「最新文献」行+齿轮按钮, 搜索页改用共享组件,两页显示设置全局同步(localStorage 持久化)。 --- frontend/src/components.d.ts | 1 + .../literature/DisplaySettingsPopover.vue | 29 +++++++++++++++++++ frontend/src/views/app/SearchView.vue | 25 +++------------- frontend/src/views/public/HomeView.vue | 9 ++++++ 4 files changed, 43 insertions(+), 21 deletions(-) create mode 100644 frontend/src/components/literature/DisplaySettingsPopover.vue diff --git a/frontend/src/components.d.ts b/frontend/src/components.d.ts index 4fb06c4..799b75b 100644 --- a/frontend/src/components.d.ts +++ b/frontend/src/components.d.ts @@ -8,6 +8,7 @@ export {} declare module 'vue' { export interface GlobalComponents { AdvancedSearchPanel: typeof import('./components/search/AdvancedSearchPanel.vue')['default'] + DisplaySettingsPopover: typeof import('./components/literature/DisplaySettingsPopover.vue')['default'] LiteratureCard: typeof import('./components/literature/LiteratureCard.vue')['default'] LiteraturePreviewDrawer: typeof import('./components/literature/LiteraturePreviewDrawer.vue')['default'] NDescriptionsItem: typeof import('naive-ui')['NDescriptionsItem'] diff --git a/frontend/src/components/literature/DisplaySettingsPopover.vue b/frontend/src/components/literature/DisplaySettingsPopover.vue new file mode 100644 index 0000000..7c71feb --- /dev/null +++ b/frontend/src/components/literature/DisplaySettingsPopover.vue @@ -0,0 +1,29 @@ + + + diff --git a/frontend/src/views/app/SearchView.vue b/frontend/src/views/app/SearchView.vue index 817c39f..4bbec39 100644 --- a/frontend/src/views/app/SearchView.vue +++ b/frontend/src/views/app/SearchView.vue @@ -2,8 +2,8 @@ import { ref, computed, onMounted, onUnmounted, watch } from 'vue' import { useRouter, useRoute, onBeforeRouteUpdate } from 'vue-router' import { useAuthStore } from '../../stores/auth' -import { NInput, NButton, NEmpty, NSelect, NCheckboxGroup, NCheckbox, NPagination, NIcon, NRadioGroup, NRadio, NSlider, NModal, NPopover } from 'naive-ui' -import { SearchOutline, FilterOutline, EyeOffOutline, SettingsOutline } from '@vicons/ionicons5' +import { NInput, NButton, NEmpty, NSelect, NCheckboxGroup, NCheckbox, NPagination, NIcon, NRadioGroup, NRadio, NSlider, NModal } from 'naive-ui' +import { SearchOutline, FilterOutline, EyeOffOutline } from '@vicons/ionicons5' import { api } from '../../api/client' import { useToast } from '../../composables/useToast' import { useLiteraturePreview } from '../../composables/useLiteraturePreview' @@ -13,6 +13,7 @@ import { trackAction } from '../../composables/useAnalytics' import PageSkeleton from '../../components/common/PageSkeleton.vue' import LiteratureCard from '../../components/literature/LiteratureCard.vue' import LiteraturePreviewDrawer from '../../components/literature/LiteraturePreviewDrawer.vue' +import DisplaySettingsPopover from '../../components/literature/DisplaySettingsPopover.vue' import type { LiteratureItem, TagOption, SearchRequestBody, SavedFilter } from '../../types' const router = useRouter(); const route = useRoute() @@ -903,25 +904,7 @@ const specialTags = computed(() => filterOptions.value?.special_tags || {}) {label:'20条/页',value:20}, {label:'50条/页',value:50}, ]" size="tiny" style="width:100px" /> - - -
显示设置
-
- 作者 - 机构 - 期刊+分区 - PMID - DOI - 研究类型+OA+NCT - MeSH 标签 - 被引次数 - AI 摘要 - 徽章 - 操作按钮 -
-
+ diff --git a/frontend/src/views/public/HomeView.vue b/frontend/src/views/public/HomeView.vue index d8fba97..2302966 100644 --- a/frontend/src/views/public/HomeView.vue +++ b/frontend/src/views/public/HomeView.vue @@ -8,13 +8,16 @@ import { useAuthStore } from '../../stores/auth' import { useToast } from '../../composables/useToast' import { trackAction } from '../../composables/useAnalytics' import { useLiteraturePreview } from '../../composables/useLiteraturePreview' +import { useDisplaySettings } from '../../composables/useDisplaySettings' import PageSkeleton from '../../components/common/PageSkeleton.vue' +import DisplaySettingsPopover from '../../components/literature/DisplaySettingsPopover.vue' import type { LiteratureItem, TagOption } from '../../types' const router = useRouter() const route = useRoute() const auth = useAuthStore() const toast = useToast() +const displaySettings = useDisplaySettings() // ── 搜索状态(统一数据源) ── const searchParams = ref({ @@ -502,6 +505,10 @@ onBeforeUnmount(() => {
+
+ 最新文献 + +
共 0 条结果
@@ -518,6 +525,7 @@ onBeforeUnmount(() => { :showSave="auth.isAuthenticated" :savedPmids="savedPmids" :searchQuery="searchParams.query" + :displaySettings="displaySettings" @detail="goDetail" @preview="openPreview" @save="saveLiterature" @@ -620,6 +628,7 @@ onBeforeUnmount(() => { .home { max-width: 1100px; margin: 0 auto; padding: 0 24px; color: var(--text-primary); } .section { padding: 3px 0; } .section-list { padding-bottom: 16px; } +.list-header { display: flex; align-items: center; justify-content: space-between; font-size: 14px; font-weight: 600; color: var(--text-primary); margin-bottom: 8px; } .section-cta { padding: 12px 0 24px; } /* 内容网格:文献列表 + 热榜侧栏 */