From 96d3426d0ca4ae93a30d5e587a708923ce40767a Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sun, 24 May 2026 20:28:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=B8=82=E5=9C=BA=E5=88=B7=E6=96=B0=E6=8C=89=E9=92=AE=E7=8A=B6?= =?UTF-8?q?=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/composables/useDynamicHeaderTab.ts | 1 + src/layouts/components/DefaultLayout.vue | 2 ++ src/views/plugin/PluginCardListView.vue | 14 ++++++-------- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/composables/useDynamicHeaderTab.ts b/src/composables/useDynamicHeaderTab.ts index fb1cdcc4..965b7f88 100644 --- a/src/composables/useDynamicHeaderTab.ts +++ b/src/composables/useDynamicHeaderTab.ts @@ -10,6 +10,7 @@ interface DynamicHeaderTabButton { class?: string action?: () => void show?: boolean | ComputedRef + loading?: boolean | ComputedRef dataAttr?: string // 用于VMenu定位的data属性 } diff --git a/src/layouts/components/DefaultLayout.vue b/src/layouts/components/DefaultLayout.vue index 4898045a..21204cd3 100644 --- a/src/layouts/components/DefaultLayout.vue +++ b/src/layouts/components/DefaultLayout.vue @@ -79,6 +79,7 @@ interface DynamicHeaderTab { class?: string action?: () => void show?: boolean | ComputedRef + loading?: boolean | ComputedRef dataAttr?: string }> routePath?: string // 用于标识哪个路由注册的 @@ -395,6 +396,7 @@ onMounted(async () => { :color="typeof button.color === 'string' ? button.color : (button.color as any)?.value || 'gray'" :size="button.size || 'default'" :class="button.class || 'settings-icon-button'" + :loading="typeof button.loading === 'boolean' ? button.loading : (button.loading as any)?.value || false" :data-menu-activator="button.dataAttr" @click="button.action" /> diff --git a/src/views/plugin/PluginCardListView.vue b/src/views/plugin/PluginCardListView.vue index 380637e4..f735dfe2 100644 --- a/src/views/plugin/PluginCardListView.vue +++ b/src/views/plugin/PluginCardListView.vue @@ -92,6 +92,7 @@ registerHeaderTab({ variant: 'text', color: 'gray', class: 'settings-icon-button', + loading: computed(() => isMarketRefreshing.value), action: () => { refreshMarket() }, @@ -879,19 +880,16 @@ function marketSettingDone() { // 手动刷新插件市场 async function refreshMarket() { - const showMarketLoading = !isAppMarketLoaded.value - if (showMarketLoading) { - isMarketRefreshing.value = true - } + if (isMarketRefreshing.value) return + + isMarketRefreshing.value = true try { - await fetchUninstalledPlugins(true, { silent: isAppMarketLoaded.value, source: 'manual' }) + await fetchUninstalledPlugins(true, { silent: false, source: 'manual' }) await getPluginStatistics() } catch (error) { console.error(error) } finally { - if (showMarketLoading) { - isMarketRefreshing.value = false - } + isMarketRefreshing.value = false } }