diff --git a/src/contentScripts/views/App.vue b/src/contentScripts/views/App.vue index 9eb3dd57..2e27484a 100644 --- a/src/contentScripts/views/App.vue +++ b/src/contentScripts/views/App.vue @@ -36,7 +36,7 @@ const pages = { Home, Search, Anime, History, WatchLater, Favorites, Video } const mainAppRef = ref() as Ref const mainAppOpacity = ref(0) const showTopbarMask = ref(false) -const dynamicComponentKey = ref(Number(new Date())) +const dynamicComponentKey = ref(`dynamicComponent${Number(new Date())}`) // const isVideoPage = ref(false) // const isBilibiliHomePage = ref(false) @@ -165,6 +165,15 @@ onMounted(() => { }) function changeActivatePage(pageName: AppPage) { + if (activatedPage.value === pageName) { + if (activatedPage.value !== AppPage.Search) { + if (mainAppRef.value.scrollTop === 0) + handleRefresh() + else + handleBackToTop() + } + return + } activatedPage.value = pageName } @@ -237,7 +246,9 @@ function setAppWallpaperMaskingOpacity() { } function handleRefresh() { - dynamicComponentKey.value = Number(new Date()) + emitter.emit('pageRefresh') + if (activatedPage.value === AppPage.Anime) + dynamicComponentKey.value = `dynamicComponent${Number(new Date())}` } function handleBackToTop() { diff --git a/src/contentScripts/views/Favorites/Favorites.vue b/src/contentScripts/views/Favorites/Favorites.vue index eba3e6fd..2fe9996a 100644 --- a/src/contentScripts/views/Favorites/Favorites.vue +++ b/src/contentScripts/views/Favorites/Favorites.vue @@ -32,10 +32,17 @@ onMounted(async () => { if (!noMoreContent.value) getFavoriteResources(selectedCategory.value!.id, ++currentPageNum.value, keyword.value) }) + + emitter.off('pageRefresh') + emitter.on('pageRefresh', async () => { + favoriteResources.length = 0 + handleSearch() + }) }) onUnmounted(() => { emitter.off('reachBottom') + emitter.off('pageRefresh') }) async function getFavoriteCategories() { diff --git a/src/contentScripts/views/History/History.vue b/src/contentScripts/views/History/History.vue index 2f6aaeb8..d77bedcc 100644 --- a/src/contentScripts/views/History/History.vue +++ b/src/contentScripts/views/History/History.vue @@ -19,6 +19,8 @@ const historyStatus = ref() watch( () => keyword.value, (newValue, oldValue) => { + if (newValue === oldValue) + return emitter.on('reachBottom', () => { if (isLoading.value) return @@ -47,10 +49,17 @@ onMounted(() => { else getHistoryList() } }) + + emitter.off('pageRefresh') + emitter.on('pageRefresh', async () => { + historyList.length = 0 + getHistoryList() + }) }) onUnmounted(() => { emitter.off('reachBottom') + emitter.off('pageRefresh') }) /** diff --git a/src/contentScripts/views/Home/Home.vue b/src/contentScripts/views/Home/Home.vue index 9120601f..6b96eecd 100644 --- a/src/contentScripts/views/Home/Home.vue +++ b/src/contentScripts/views/Home/Home.vue @@ -1,11 +1,25 @@ diff --git a/src/contentScripts/views/WatchLater/WatchLater.vue b/src/contentScripts/views/WatchLater/WatchLater.vue index 33867470..c003d148 100644 --- a/src/contentScripts/views/WatchLater/WatchLater.vue +++ b/src/contentScripts/views/WatchLater/WatchLater.vue @@ -4,6 +4,7 @@ import { useI18n } from 'vue-i18n' import type { WatchLaterModel } from './types' import { getCSRF, openLinkToNewTab, removeHttpFromUrl } from '~/utils/main' import { calcCurrentTime } from '~/utils/dataFormatter' +import emitter from '~/utils/mitt' const { t } = useI18n() @@ -13,6 +14,16 @@ const watchLaterList = reactive>([]) onMounted(() => { getAllWatchLaterList() + + emitter.off('pageRefresh') + emitter.on('pageRefresh', async () => { + watchLaterList.length = 0 + getAllWatchLaterList() + }) +}) + +onUnmounted(() => { + emitter.off('pageRefresh') }) /**