From 42386da12627a94242ade6a423e1140f386e5d24 Mon Sep 17 00:00:00 2001 From: sswiki Date: Sun, 2 Mar 2025 20:03:46 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=8A=A0=E8=BD=BD=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zyplayer-doc-ui/wiki-ui/src/store/pageData.js | 38 +++++++++++++++++++ .../wiki-ui/src/views/view/PageLayout.vue | 2 +- .../wiki-ui/src/views/view/View.vue | 32 +++++++++------- .../src/views/view/aside/LeftAside.vue | 25 +++++++++--- .../src/views/view/aside/RightHeader.vue | 17 ++++++--- .../wiki-ui/src/views/view/show/Comment.vue | 2 +- 6 files changed, 89 insertions(+), 27 deletions(-) diff --git a/zyplayer-doc-ui/wiki-ui/src/store/pageData.js b/zyplayer-doc-ui/wiki-ui/src/store/pageData.js index 82401a38..c0d3a4e8 100644 --- a/zyplayer-doc-ui/wiki-ui/src/store/pageData.js +++ b/zyplayer-doc-ui/wiki-ui/src/store/pageData.js @@ -3,6 +3,8 @@ import {defineStore} from 'pinia'; export const useStorePageData = defineStore('pageData', { state: () => { return { + // 页面加载状态 -1=空间不存在 0=初始值 1=加载中 2=加载成功 3=加载失败 + pageLoadStatus: 0, pageInfo: {}, pageAuth: {}, fileList: [], @@ -15,4 +17,40 @@ export const useStorePageData = defineStore('pageData', { eventPageListUpdate: false, } }, + getters: { + getFirstViewPage: (state) => { + return () => { + let getPage = (dataList) => { + for (let i = 0; i < dataList.length; i++) { + let page = dataList[i]; + if (page.editorType !== 0) { + return page; + } else if (page.children) { + let find = getPage(page.children); + if (find) return find; + } + } + return null; + } + return getPage(state.pageList); + } + }, + getPageById: (state) => { + return (pageId) => { + let getPage = (dataList) => { + for (let i = 0; i < dataList.length; i++) { + let page = dataList[i]; + if (page.id === pageId) { + return page; + } else if (page.children) { + let find = getPage(page.children); + if (find) return find; + } + } + return null; + } + return getPage(state.pageList); + } + }, + } }); diff --git a/zyplayer-doc-ui/wiki-ui/src/views/view/PageLayout.vue b/zyplayer-doc-ui/wiki-ui/src/views/view/PageLayout.vue index b9c75b2c..de5ab7df 100644 --- a/zyplayer-doc-ui/wiki-ui/src/views/view/PageLayout.vue +++ b/zyplayer-doc-ui/wiki-ui/src/views/view/PageLayout.vue @@ -64,6 +64,6 @@ html, body { background-color: #fff !important; color: #333; height: 60px !important; - border-bottom: 1px solid #eee; + border-bottom: 1px solid #f0f0f0; } diff --git a/zyplayer-doc-ui/wiki-ui/src/views/view/View.vue b/zyplayer-doc-ui/wiki-ui/src/views/view/View.vue index c8230e24..1ac1614e 100644 --- a/zyplayer-doc-ui/wiki-ui/src/views/view/View.vue +++ b/zyplayer-doc-ui/wiki-ui/src/views/view/View.vue @@ -67,10 +67,10 @@ let emit = defineEmits(['switchSpace', 'changeExpandedKeys', 'loadPageList']); onMounted(() => { storeDisplay.currentPage = 'view'; storeDisplay.showHeader = true; - initQueryParam(route); + loadPageDetail(route.params); }); -onBeforeRouteUpdate((to) => { - initQueryParam(to); +onBeforeRouteUpdate((updateGuard) => { + loadPageDetail(updateGuard.params); }); // 页面展示相关 let wikiPage = ref({}); @@ -113,10 +113,17 @@ const afterLoadPage = () => { createNavigationHeading(); }, 500); } -const loadPageDetail = (pageId) => { - clearHistory(); +const loadPageDetail = (query) => { + clearPageData(); + let pageId = query.pageId; + let spaceId = query.spaceId; + if (!pageId || !spaceId) { + return; + } pageContent.value = ''; + storePage.pageLoadStatus = 1; pageApi.pageDetail({id: pageId}).then(async (json) => { + storePage.pageLoadStatus = 2; let result = json.data || {}; let wikiPageRes = result.wikiPage || {}; wikiPageRes.selfZan = result.selfZan || 0; @@ -150,6 +157,9 @@ const loadPageDetail = (pageId) => { storePage.pageInfo = wikiPageRes; storePage.pageAuth = wikiPageAuth.value; afterLoadPage(); + }).catch(e => { + console.log(e); + storePage.pageLoadStatus = 3; }); getPageHistory(pageId); } @@ -170,14 +180,6 @@ const createNavigationHeading = () => { let spaceId = ''; let pageId = ''; let pageContentRef = ref(); -const initQueryParam = (to) => { - spaceId = parseInt(to.params.spaceId); - pageId = parseInt(to.params.pageId); - clearPageData(); - if (!!pageId) { - loadPageDetail(pageId); - } -} const clearPageData = () => { wikiPage.value = {}; wikiPageAuth.value = {}; @@ -185,6 +187,8 @@ const clearPageData = () => { pageContentShow.value = ''; storePage.pageInfo = {}; storePage.pageAuth = {}; + storePage.fileList = []; + storePage.pageLoadStatus = 0; } @@ -202,7 +206,7 @@ const clearPageData = () => { overflow: auto; padding: 30px 20px; position: relative; - border-right: 1px solid #eee; + border-right: 1px solid #f0f0f0; .view-body-box { max-width: 840px; diff --git a/zyplayer-doc-ui/wiki-ui/src/views/view/aside/LeftAside.vue b/zyplayer-doc-ui/wiki-ui/src/views/view/aside/LeftAside.vue index e6ecb388..589196ff 100644 --- a/zyplayer-doc-ui/wiki-ui/src/views/view/aside/LeftAside.vue +++ b/zyplayer-doc-ui/wiki-ui/src/views/view/aside/LeftAside.vue @@ -42,7 +42,7 @@
- { // visibleMoveMenu.value = true; // moveToPageId.value = storePage.choosePageId // moveToSpaceId.value = storeSpace.chooseSpaceId - // moveToWikiPageList.value = storePage.wikiPageList + // moveToWikiPageList.value = storePage.pageList } const openTemplateCreate = (exsit) => { // TODO @@ -276,9 +276,24 @@ const doRename = (node, data) => { const doGetPageList = () => { storePage.pageList = []; storePage.favoritePageList = []; - let param = {spaceId: storeSpace.chooseSpaceId}; - pageApi.pageList(param).then((json) => { - storePage.wikiPageList = json.data || []; + let spaceId = storeSpace.chooseSpaceId; + pageApi.pageList({spaceId: spaceId}).then((json) => { + storePage.pageList = json.data || []; + // 查看页面 + if (storePage.pageList.length <= 0) { + router.push({path: `/view/${spaceId}`}); + } else { + let routePageId = parseInt(route.params.pageId); + let findPage = storePage.getPageById(routePageId); + if (findPage) { + router.replace({path: `/view/${spaceId}/${routePageId}`}); + } else { + let firstPage = storePage.getFirstViewPage(); + if (firstPage) { + router.replace({path: `/view/${spaceId}/${firstPage.id}`}); + } + } + } }); } const doSearchByKeywords = (queryString, callback) => { diff --git a/zyplayer-doc-ui/wiki-ui/src/views/view/aside/RightHeader.vue b/zyplayer-doc-ui/wiki-ui/src/views/view/aside/RightHeader.vue index 12981191..f3160b74 100644 --- a/zyplayer-doc-ui/wiki-ui/src/views/view/aside/RightHeader.vue +++ b/zyplayer-doc-ui/wiki-ui/src/views/view/aside/RightHeader.vue @@ -7,10 +7,15 @@
-
- {{storePage.pageInfo.name || ''}} -
-
最近修改:{{storePage.pageInfo.updateTime || ''}}
+ +
@@ -78,7 +83,7 @@ import { } from '@element-plus/icons-vue' import { UserOutlined, EditOutlined, MessageOutlined, CheckOutlined, EllipsisOutlined, - MenuFoldOutlined, MenuUnfoldOutlined + MenuFoldOutlined, MenuUnfoldOutlined, LoadingOutlined } from '@ant-design/icons-vue'; import {toRefs, ref, reactive, onMounted, watch, defineEmits, h, computed} from 'vue'; import {useRouter, useRoute} from "vue-router"; @@ -139,7 +144,7 @@ const deleteWikiPage = () => { }).then(() => { pageApi.pageDelete({pageId: storePage.pageInfo.id}).then(() => { pageApi.pageList({spaceId: storeSpace.chooseSpaceId}).then((json) => { - storePage.wikiPageList = json.data || []; + storePage.pageList = json.data || []; }).then(()=>{ router.push({path: '/home', query: {spaceId: storePage.pageInfo.spaceId}}); }); diff --git a/zyplayer-doc-ui/wiki-ui/src/views/view/show/Comment.vue b/zyplayer-doc-ui/wiki-ui/src/views/view/show/Comment.vue index cd04de5a..a5128fa0 100644 --- a/zyplayer-doc-ui/wiki-ui/src/views/view/show/Comment.vue +++ b/zyplayer-doc-ui/wiki-ui/src/views/view/show/Comment.vue @@ -136,7 +136,7 @@ const getUserHeadBgColor = (userId) => {