From 257065018b1ff54bbe1e5d9b6d4873b82d3a9f31 Mon Sep 17 00:00:00 2001 From: momen Date: Wed, 11 Mar 2026 08:45:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=BD=93=E7=94=A8=E6=88=B7=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E5=95=86=E5=BA=97=E6=A8=A1=E5=BC=8F=EF=BC=88=E6=98=9F?= =?UTF-8?q?=E7=81=AB=E3=80=81APM=E3=80=81=E6=B7=B7=E5=90=88=EF=BC=89?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E7=9B=AE=E5=89=8D=E5=BA=94=E7=94=A8=E4=BC=9A?= =?UTF-8?q?=E9=80=9A=E8=BF=87=20window.location.reload()=20=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E5=8A=A0=E8=BD=BD=E6=95=B4=E4=B8=AA=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E3=80=82=E8=BF=99=E4=BC=9A=E5=AF=BC=E8=87=B4=E6=80=A7=E8=83=BD?= =?UTF-8?q?=E6=8D=9F=E8=80=97=E5=92=8C=E9=87=8D=E5=A4=8D=E7=9A=84=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E8=AF=B7=E6=B1=82=E3=80=82=E6=9C=AC=E8=AE=A1=E5=88=92?= =?UTF-8?q?=E6=97=A8=E5=9C=A8=E5=8F=96=E6=B6=88=E9=A1=B5=E9=9D=A2=E9=87=8D?= =?UTF-8?q?=E8=BD=BD=EF=BC=8C=E5=B9=B6=E5=AE=9E=E7=8E=B0=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=9A=84=E7=BC=93=E5=AD=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 58 +++++++++++++++++++++++++++- src/components/StoreModeSwitcher.vue | 2 - 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/src/App.vue b/src/App.vue index d894ca59..0396ea09 100644 --- a/src/App.vue +++ b/src/App.vue @@ -235,6 +235,62 @@ const updateError = ref(""); const showUninstallModal = ref(false); const uninstallTargetApp: Ref = ref(null); +// 缓存不同模式的数据 +const storeCache = ref; + homeLinks: any[]; + homeLists: any[]; +}>>({}); + +const saveToCache = (mode: string) => { + storeCache.value[mode] = { + apps: [...apps.value], + categories: { ...categories.value }, + homeLinks: [...homeLinks.value], + homeLists: [...homeLists.value], + }; +}; + +const restoreFromCache = (mode: string) => { + const cache = storeCache.value[mode]; + if (cache) { + apps.value = [...cache.apps]; + categories.value = { ...cache.categories }; + homeLinks.value = [...cache.homeLinks]; + homeLists.value = [...cache.homeLists]; + return true; + } + return false; +}; + +// 监听模式变化 +watch(currentStoreMode, async (newMode, oldMode) => { + if (oldMode) { + saveToCache(oldMode); + } + + if (!restoreFromCache(newMode)) { + // 如果没有缓存,清空当前状态并重新加载 + apps.value = []; + categories.value = {}; + homeLinks.value = []; + homeLists.value = []; + + loading.value = true; + await loadCategories(); + await Promise.all([ + loadHome(), + new Promise((resolve) => { + loadApps(() => { + loading.value = false; + resolve(); + }); + }), + ]); + } +}); + // 计算属性 const filteredApps = computed(() => { let result = [...apps.value]; @@ -314,7 +370,7 @@ const selectCategory = (category: string) => { activeCategory.value = category; searchQuery.value = ""; isSidebarOpen.value = false; - if (category === "home") { + if (category === "home" && homeLinks.value.length === 0 && homeLists.value.length === 0) { loadHome(); } }; diff --git a/src/components/StoreModeSwitcher.vue b/src/components/StoreModeSwitcher.vue index 5213fe5c..955822a5 100644 --- a/src/components/StoreModeSwitcher.vue +++ b/src/components/StoreModeSwitcher.vue @@ -32,7 +32,5 @@ const modes = [ const setMode = (mode: StoreMode) => { currentStoreMode.value = mode; localStorage.setItem("store_mode", mode); - // Reload page to re-fetch data based on new mode - window.location.reload(); };