From 252a6c2258362e104fcaf364aa9cb3c3f191b1e0 Mon Sep 17 00:00:00 2001 From: gene9831 Date: Fri, 6 Dec 2024 17:27:32 +0800 Subject: [PATCH 1/6] feat: page support setting folder or page as parent --- packages/plugins/page/src/PageGeneral.vue | 120 +++++++++++++++------- 1 file changed, 84 insertions(+), 36 deletions(-) diff --git a/packages/plugins/page/src/PageGeneral.vue b/packages/plugins/page/src/PageGeneral.vue index c141518e1d..32e602a945 100644 --- a/packages/plugins/page/src/PageGeneral.vue +++ b/packages/plugins/page/src/PageGeneral.vue @@ -26,14 +26,18 @@ > - + @@ -154,39 +158,61 @@ export default { group: [{ required: true, message: '必须选择页面类型' }] } - const getFolders = (pages) => { - const list = [] + const pageToTreeData = (page) => { + const { id, name, isPage, children } = page - pages.forEach((page) => { - if (!page.isPage && page.id !== pageSettingState.currentPageData.id) { - list.push(page) - if (!page.children) { - page.children = [] - } - page.children = getFolders(page.children) - } - }) + if (!Array.isArray(children)) { + return { id, name, isPage } + } + + return { + id, + name, + isPage, + children: children + .filter((page) => page.id !== pageSettingState.currentPageData.id) + .map((page) => pageToTreeData(page)) + .map((page, index, arr) => { + if (index === 0) { + page.isFirst = true + } + if (index === arr.length - 1) { + page.isLast = true + } + return page + }) + } + } + + // TODO 遗留问题:无法收缩下拉面板的树目录。如果使用tree自带的icon,无法动态设置expandIcon和shrinkIcon + const getNodeIcon = (data) => { + if (data.id === ROOT_ID) { + return null + } + + if (data.isPage) { + return + } - return list + return } const treeFolderOp = computed(() => { - const expandIcon = - const shrinkIcon = const staticPages = pageSettingState.pages[STATIC_PAGE_GROUP_ID]?.data || [] - const data = [{ name: '无', id: ROOT_ID }, ...getFolders(JSON.parse(JSON.stringify(staticPages)))] + const dummyRoot = pageToTreeData({ children: [{ name: '无', id: ROOT_ID }].concat(staticPages) }) + const data = dummyRoot.children const options = { data: data, - shrinkIcon: shrinkIcon, - expandIcon: expandIcon, + shrinkIcon: null, + expandIcon: null, renderContent: (_h, { node, data }) => { + // TODO 1px #EBEBEB return ( - - {node.isLeaf && data.id !== ROOT_ID ? ( - - ) : null} - {node.label} - + <> + + {getNodeIcon(data)} + + ) } } @@ -277,22 +303,44 @@ export default { From afacbc948f56928b97ae82d28da8aadcee67f2fb Mon Sep 17 00:00:00 2001 From: gene9831 Date: Wed, 11 Dec 2024 09:39:40 +0800 Subject: [PATCH 2/6] remove css important syntax --- packages/plugins/page/src/PageGeneral.vue | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/plugins/page/src/PageGeneral.vue b/packages/plugins/page/src/PageGeneral.vue index 32e602a945..b295a8e157 100644 --- a/packages/plugins/page/src/PageGeneral.vue +++ b/packages/plugins/page/src/PageGeneral.vue @@ -206,10 +206,8 @@ export default { shrinkIcon: null, expandIcon: null, renderContent: (_h, { node, data }) => { - // TODO 1px #EBEBEB return ( <> - {getNodeIcon(data)} @@ -313,11 +311,12 @@ export default { &:hover { background-color: var(--te-common-bg-container); } - // 移除所有子节点以及子节点hover状态的背景 - * { - background: unset !important; + // 移除子节点的的背景色,才能保证鼠标hover到.tiny-tree-node__content节点任意位置时,整行都有hover状态的背景色 + .tiny-tree-node__content-left, + .tiny-tree-node__content-left .tiny-tree-node__content-box { + background-color: unset; &:hover { - background: unset !important; + background-color: unset; } } .tiny-tree-node__content-left { @@ -326,8 +325,7 @@ export default { margin: 0; } .tiny-tree-node__content-box { - padding: 0; - padding-right: 12px; + padding: 0 12px; svg { margin-right: 8px; } From fe465f820eaf0452faf59f08ca476d3ba319f6fe Mon Sep 17 00:00:00 2001 From: gene9831 Date: Wed, 11 Dec 2024 09:56:50 +0800 Subject: [PATCH 3/6] remove redundant code --- packages/plugins/page/src/PageGeneral.vue | 9 --------- 1 file changed, 9 deletions(-) diff --git a/packages/plugins/page/src/PageGeneral.vue b/packages/plugins/page/src/PageGeneral.vue index b295a8e157..8ac9e11fa9 100644 --- a/packages/plugins/page/src/PageGeneral.vue +++ b/packages/plugins/page/src/PageGeneral.vue @@ -172,15 +172,6 @@ export default { children: children .filter((page) => page.id !== pageSettingState.currentPageData.id) .map((page) => pageToTreeData(page)) - .map((page, index, arr) => { - if (index === 0) { - page.isFirst = true - } - if (index === arr.length - 1) { - page.isLast = true - } - return page - }) } } From 27461d145672bab53cbfa2fa4c7091f6d2444fbe Mon Sep 17 00:00:00 2001 From: gene9831 Date: Wed, 11 Dec 2024 17:16:35 +0800 Subject: [PATCH 4/6] add row actions --- packages/plugins/page/src/Main.vue | 18 +-- packages/plugins/page/src/PageHome.vue | 2 +- packages/plugins/page/src/PageTree.vue | 157 ++++++++++++++++++++++--- packages/plugins/page/src/Tree.vue | 133 +++++++++++++++++++++ 4 files changed, 283 insertions(+), 27 deletions(-) create mode 100644 packages/plugins/page/src/Tree.vue diff --git a/packages/plugins/page/src/Main.vue b/packages/plugins/page/src/Main.vue index 2101637cf0..aeb2217d76 100644 --- a/packages/plugins/page/src/Main.vue +++ b/packages/plugins/page/src/Main.vue @@ -23,6 +23,8 @@ :isFolder="state.isFolder" @add="createNewPage('publicPages')" @openSettingPanel="openSettingPanel" + @createPage="createNewPage" + @createFolder="createNewFolder" > @@ -79,12 +81,12 @@ export default { isFolder: false }) - const createNewPage = (group) => { + const createNewPage = (group, parentId = ROOT_ID) => { closeFolderSettingPanel() pageSettingState.isNew = true pageSettingState.currentPageData = { ...DEFAULT_PAGE, - parentId: ROOT_ID, + parentId, route: '', name: 'Untitled', page_content: { @@ -97,10 +99,10 @@ export default { openPageSettingPanel() } - const createNewFolder = () => { + const createNewFolder = (parentId = ROOT_ID) => { closePageSettingPanel() pageSettingState.isNew = true - pageSettingState.currentPageData = { parentId: ROOT_ID, route: '', name: 'untitled' } + pageSettingState.currentPageData = { parentId, route: '', name: 'untitled' } pageSettingState.currentPageDataCopy = extend(true, {}, pageSettingState.currentPageData) state.isFolder = true openFolderSettingPanel() @@ -112,11 +114,11 @@ export default { } }) - const openSettingPanel = async (node) => { - state.isFolder = !node.data.isPage + const openSettingPanel = async (pageData) => { + state.isFolder = !pageData.isPage pageSettingState.isNew = false - const isPageChange = node.data.id !== pageSettingState.currentPageData.id + const isPageChange = pageData.id !== pageSettingState.currentPageData.id if (state.isFolder) { isPageChange && closePageSettingPanel() @@ -125,7 +127,7 @@ export default { isPageChange && closeFolderSettingPanel() openPageSettingPanel() } - const pageDetail = await fetchPageDetail(node.data?.id) + const pageDetail = await fetchPageDetail(pageData?.id) initCurrentPageData(pageDetail) } diff --git a/packages/plugins/page/src/PageHome.vue b/packages/plugins/page/src/PageHome.vue index e431e54ec3..31311d4c99 100644 --- a/packages/plugins/page/src/PageHome.vue +++ b/packages/plugins/page/src/PageHome.vue @@ -67,7 +67,7 @@ export default { handleRouteHomeUpdate(id, params) .then(() => { pageSettingState.updateTreeData() - openSettingPanel({ data: pageSettingState.currentPageData }) + openSettingPanel(pageSettingState.currentPageData) pageSettingState.isNew = false if (isVsCodeEnv) { generateRouter({ diff --git a/packages/plugins/page/src/PageTree.vue b/packages/plugins/page/src/PageTree.vue index 6ac0762799..7483f4c341 100644 --- a/packages/plugins/page/src/PageTree.vue +++ b/packages/plugins/page/src/PageTree.vue @@ -28,6 +28,33 @@ :icon="nullIcon" node-key="id" > + + + @@ -35,7 +62,7 @@ + + From 2a04c585a4a3e4b1f91328142d480561980c0ecb Mon Sep 17 00:00:00 2001 From: gene9831 Date: Thu, 12 Dec 2024 14:18:02 +0800 Subject: [PATCH 5/6] add getPageNodeData api --- packages/plugins/page/src/Tree.vue | 7 +-- .../plugins/page/src/composable/usePage.js | 54 ++++++++++++++++++- 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/packages/plugins/page/src/Tree.vue b/packages/plugins/page/src/Tree.vue index 8da39bf8a6..ce5effb688 100644 --- a/packages/plugins/page/src/Tree.vue +++ b/packages/plugins/page/src/Tree.vue @@ -15,7 +15,7 @@