fix:当用户切换商店模式(星火、APM、混合)时,目前应用会通过 window.location.reload() 重新加载整个页面。这会导致性能损耗和重复的网络请求。本计划旨在取消页面重载,并实现模式数据的缓存。

This commit is contained in:
2026-03-11 08:45:28 +08:00
parent edd9368c56
commit 257065018b
2 changed files with 57 additions and 3 deletions

View File

@@ -235,6 +235,62 @@ const updateError = ref("");
const showUninstallModal = ref(false); const showUninstallModal = ref(false);
const uninstallTargetApp: Ref<App | null> = ref(null); const uninstallTargetApp: Ref<App | null> = ref(null);
// 缓存不同模式的数据
const storeCache = ref<Record<string, {
apps: App[];
categories: Record<string, any>;
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<void>((resolve) => {
loadApps(() => {
loading.value = false;
resolve();
});
}),
]);
}
});
// 计算属性 // 计算属性
const filteredApps = computed(() => { const filteredApps = computed(() => {
let result = [...apps.value]; let result = [...apps.value];
@@ -314,7 +370,7 @@ const selectCategory = (category: string) => {
activeCategory.value = category; activeCategory.value = category;
searchQuery.value = ""; searchQuery.value = "";
isSidebarOpen.value = false; isSidebarOpen.value = false;
if (category === "home") { if (category === "home" && homeLinks.value.length === 0 && homeLists.value.length === 0) {
loadHome(); loadHome();
} }
}; };

View File

@@ -32,7 +32,5 @@ const modes = [
const setMode = (mode: StoreMode) => { const setMode = (mode: StoreMode) => {
currentStoreMode.value = mode; currentStoreMode.value = mode;
localStorage.setItem("store_mode", mode); localStorage.setItem("store_mode", mode);
// Reload page to re-fetch data based on new mode
window.location.reload();
}; };
</script> </script>