diff --git a/packages/plugins/page/src/composable/usePage.js b/packages/plugins/page/src/composable/usePage.js index 0023a616c7..44a42899ee 100644 --- a/packages/plugins/page/src/composable/usePage.js +++ b/packages/plugins/page/src/composable/usePage.js @@ -383,33 +383,53 @@ const switchPageWithConfirm = (pageId) => { }) } -const handlePageDetail = async (pages) => { - const ROOT_ID = '0' - - if (pages.length > 0) { - for (let i = 0; i < pages.length; i++) { - if (!pages[i].page_content) { - const pageDetail = await http.fetchPageDetail(pages[i].id) - pages[i].page_content = pageDetail.page_content - } +const updatePageContent = (page, currentPage) => { + if (currentPage.id && currentPage.pageInfo?.schema && page.id === currentPage.id) { + page.page_content = currentPage.pageInfo?.schema + } +} - if (pages[i].parentId !== ROOT_ID && !pages.find((item) => item.id === pages[i].parentId)) { - pages[i].parentId = pages[i - 1]?.id ? pages[i - 1].id : ROOT_ID - } +const fetchPageDetailIfNeeded = async (page) => { + if (!page.page_content) { + try { + const pageDetail = await http.fetchPageDetail(page.id) + page.page_content = pageDetail.page_content + } catch (error) { + page.page_content = {} } } } -const getFamily = async (id) => { +const updateParentId = (page, pages, index, ROOT_ID) => { + if (page.parentId !== ROOT_ID && !pages.find((item) => item.id === page.parentId)) { + page.parentId = pages[index - 1]?.id ? pages[index - 1].id : ROOT_ID + } +} + +const handlePageDetail = async (pages, currentPage) => { + const { ROOT_ID } = pageSettingState + + if (pages.length > 0) { + await Promise.all( + pages.map(async (page, index) => { + updatePageContent(page, currentPage) + await fetchPageDetailIfNeeded(page) + updateParentId(page, pages, index, ROOT_ID) + }) + ) + } +} + +const getFamily = async (previewParams) => { if (pageSettingState.pages.length === 0) { await getPageList() } - const familyPages = getAncestorsRecursively(id) + const familyPages = getAncestorsRecursively(previewParams.id) .filter((item) => item.isPage) .reverse() - await handlePageDetail(familyPages) + await handlePageDetail(familyPages, previewParams) return familyPages } diff --git a/packages/toolbars/preview/src/Main.vue b/packages/toolbars/preview/src/Main.vue index e8d5662c50..ca4672e5a1 100644 --- a/packages/toolbars/preview/src/Main.vue +++ b/packages/toolbars/preview/src/Main.vue @@ -90,7 +90,7 @@ export default { const theme = getMetaApi(META_SERVICE.ThemeSwitch)?.getThemeState()?.theme params.id = page?.id params.pageInfo.name = page?.name - params.ancestors = await getFamily(params.id) + params.ancestors = await getFamily(params) params.theme = theme previewPage(params) }