diff --git a/fe/src/api/index.ts b/fe/src/api/index.ts index 7cd565af..5b6c355c 100644 --- a/fe/src/api/index.ts +++ b/fe/src/api/index.ts @@ -104,7 +104,10 @@ const useApiWithCursor = < QueryKey, Cursor >({ queryKey: [endpoint, queryParam], - queryFn: async () => queryFn(`/${endpoint}`, queryParam?.value), + queryFn: async ({ pageParam }) => queryFn( + `/${endpoint}`, + { ...queryParam?.value as TQueryParam, cursor: pageParam === '' ? undefined : pageParam } + ), initialPageParam: '', getNextPageParam: lastPage => lastPage.pages.nextCursor, enabled diff --git a/fe/src/components/Post/PostPage.vue b/fe/src/components/Post/PostPage.vue index e2f60fb1..2376bad0 100644 --- a/fe/src/components/Post/PostPage.vue +++ b/fe/src/components/Post/PostPage.vue @@ -2,25 +2,27 @@ - + + + diff --git a/fe/src/components/Post/renderers/list/ReplyItem.vue b/fe/src/components/Post/renderers/list/ReplyItem.vue index 3784960b..6e953914 100644 --- a/fe/src/components/Post/renderers/list/ReplyItem.vue +++ b/fe/src/components/Post/renderers/list/ReplyItem.vue @@ -2,7 +2,7 @@
-
+
{{ reply.floor }}楼 {{ reply.subReplyCount }}条 diff --git a/fe/src/components/paginations/PageCurrentButton.vue b/fe/src/components/paginations/PageCurrentButton.vue index e1731f66..24bcfd76 100644 --- a/fe/src/components/paginations/PageCurrentButton.vue +++ b/fe/src/components/paginations/PageCurrentButton.vue @@ -3,7 +3,7 @@

-

{{ cursorTemplate(currentCursor) }}

+

{{ cursorTemplate(currentCursor) }}


diff --git a/fe/src/components/paginations/PageNextButton.vue b/fe/src/components/paginations/PageNextButton.vue index 5e2e9135..0a305f8a 100644 --- a/fe/src/components/paginations/PageNextButton.vue +++ b/fe/src/components/paginations/PageNextButton.vue @@ -1,20 +1,13 @@ diff --git a/fe/src/views/Post.vue b/fe/src/views/Post.vue index 3a48f7e6..87e633ca 100644 --- a/fe/src/views/Post.vue +++ b/fe/src/views/Post.vue @@ -12,8 +12,8 @@
@@ -53,7 +53,7 @@ export type PostRenderer = 'list' | 'table'; const route = useRoute(); const queryParam = ref(); const shouldFetch = ref(false); -const { data, error, isPending, isRefetching, isFetching, isFetchedAfterMount, dataUpdatedAt, errorUpdatedAt } = +const { data, error, isPending, isRefetching, isFetching, isFetchedAfterMount, dataUpdatedAt, errorUpdatedAt, fetchNextPage, hasNextPage } = useApiPosts(queryParam, shouldFetch); const selectedRenderTypes = ref<[PostRenderer]>(['list']); const renderType = computed(() => selectedRenderTypes.value[0]); @@ -82,10 +82,7 @@ useHead({ const fetchPosts = (queryParams: ObjUnknown[], cursor: Cursor) => { const startTime = Date.now(); - queryParam.value = { - query: JSON.stringify(queryParams), - cursor: cursor === '' ? undefined : cursor - }; + queryParam.value = { query: JSON.stringify(queryParams) }; shouldFetch.value = true; watchOnce(isFetchedAfterMount, value => { if (value) @@ -120,28 +117,25 @@ watch(isFetchedAfterMount, async () => { } }); -const parseRouteThenFetch = async (newRoute: RouteLocationNormalized, cursor: Cursor) => { +const parseRouteThenFetch = async (newRoute: RouteLocationNormalized) => { if (queryFormRef.value === undefined) return; const flattenParams = await queryFormRef.value.parseRouteToGetFlattenParams(newRoute); if (flattenParams === false) return; lastFetchingRoute.value = newRoute; - fetchPosts(flattenParams, cursor); + fetchPosts(flattenParams, getRouteCursorParam(newRoute)); }; onBeforeRouteUpdate(async (to, from) => { const isNewQuery = useTriggerRouteUpdateStore() .isTriggeredBy('@submit', { ...to, force: true }) || compareRouteIsNewQuery(to, from); - const cursor = getRouteCursorParam(to); - if (isNewQuery || _.isEmpty(_.filter( - data.value?.pages, - i => i.pages.currentCursor === cursor - ))) - await parseRouteThenFetch(to, cursor); + if (isNewQuery) + window.scrollTo({ top: 0 }); + await parseRouteThenFetch(to); }); onMounted(async () => { - await parseRouteThenFetch(route, getRouteCursorParam(route)); + await parseRouteThenFetch(route); });