From ea1cae79684850f26703273d7df4a73829ffde4b Mon Sep 17 00:00:00 2001 From: roymondchen Date: Mon, 11 Sep 2023 15:57:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(editor):=20=E5=B7=B2=E9=80=89=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E6=96=B0=E5=A2=9E=E6=A0=B9=E8=8A=82=E7=82=B9=E5=8F=B3?= =?UTF-8?q?=E9=94=AE=E8=8F=9C=E5=8D=95=E9=A1=B9=EF=BC=9A=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E6=8A=98=E5=8F=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/editor/src/icons/FolderMinusIcon.vue | 22 +++++++++++++++++++ .../editor/src/layouts/sidebar/LayerMenu.vue | 16 ++++++++++++++ .../editor/src/layouts/sidebar/LayerPanel.vue | 12 +++++++++- 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 packages/editor/src/icons/FolderMinusIcon.vue diff --git a/packages/editor/src/icons/FolderMinusIcon.vue b/packages/editor/src/icons/FolderMinusIcon.vue new file mode 100644 index 00000000..1c694e17 --- /dev/null +++ b/packages/editor/src/icons/FolderMinusIcon.vue @@ -0,0 +1,22 @@ + + + diff --git a/packages/editor/src/layouts/sidebar/LayerMenu.vue b/packages/editor/src/layouts/sidebar/LayerMenu.vue index 0b8ba8bf..ca5b55fd 100644 --- a/packages/editor/src/layouts/sidebar/LayerMenu.vue +++ b/packages/editor/src/layouts/sidebar/LayerMenu.vue @@ -6,7 +6,10 @@ import { computed, inject, markRaw, ref } from 'vue'; import { Files, Plus } from '@element-plus/icons-vue'; +import { isPage } from '@tmagic/utils'; + import ContentMenu from '@editor/components/ContentMenu.vue'; +import FolderMinusIcon from '@editor/icons/FolderMinusIcon.vue'; import type { ComponentGroup, MenuButton, MenuComponent, Services } from '@editor/type'; import { useCopyMenu, useDeleteMenu, useMoveToMenu, usePasteMenu } from '@editor/utils/content-menu'; @@ -18,6 +21,10 @@ const props = defineProps<{ layerContentMenu: (MenuButton | MenuComponent)[]; }>(); +const emit = defineEmits<{ + 'collapse-all': []; +}>(); + const services = inject('services'); const menu = ref>(); const node = computed(() => services?.editorService.get('node')); @@ -76,6 +83,15 @@ const getSubMenuData = computed(() => { }); const menuData = computed<(MenuButton | MenuComponent)[]>(() => [ + { + type: 'button', + text: '全部折叠', + icon: FolderMinusIcon, + display: () => isPage(node.value), + handler: () => { + emit('collapse-all'); + }, + }, { type: 'button', text: '新增', diff --git a/packages/editor/src/layouts/sidebar/LayerPanel.vue b/packages/editor/src/layouts/sidebar/LayerPanel.vue index 23497986..2567ce78 100644 --- a/packages/editor/src/layouts/sidebar/LayerPanel.vue +++ b/packages/editor/src/layouts/sidebar/LayerPanel.vue @@ -42,7 +42,7 @@ - + @@ -356,4 +356,14 @@ const contextmenu = async (event: MouseEvent, data: MNode): Promise => { menu.value?.show(event); }; + +const collapseAllHandler = () => { + const page = editorService?.get('page'); + if (!tree.value || !page) return; + const rootNode = tree.value.getNode(page.id); + rootNode.childNodes.forEach((node: any) => { + node.collapse(); + handleCollapse(node.data); + }); +};