From ba679fc3ab7399f147674d551e922a35593d8945 Mon Sep 17 00:00:00 2001 From: STATICHIT <108850075+STATICHIT@users.noreply.github.com> Date: Thu, 26 Sep 2024 19:50:42 +0800 Subject: [PATCH] feat: Right Sidebar Menu and Layout Settings (#804) * feat: Right Sidebar Menu and Layout Settings * optimize: Deal with comments * optimize: Encapsulate RightMenu Component And Refactor Rendering Method --- packages/controller/src/useLayout.js | 30 +++- packages/design-core/config/plugin.js | 3 + packages/design-core/src/App.vue | 33 +++- packages/design-core/src/DesignPlugins.vue | 71 +++++++-- packages/design-core/src/DesignSettings.vue | 69 ++++++-- packages/design-core/src/RightMenu.vue | 167 ++++++++++++++++++++ packages/plugins/help/src/HelpIcon.vue | 3 + packages/toolbars/logo/src/Main.vue | 127 ++++++++++----- 8 files changed, 422 insertions(+), 81 deletions(-) create mode 100644 packages/design-core/src/RightMenu.vue diff --git a/packages/controller/src/useLayout.js b/packages/controller/src/useLayout.js index 841794b14..8c87566e8 100644 --- a/packages/controller/src/useLayout.js +++ b/packages/controller/src/useLayout.js @@ -62,6 +62,7 @@ const layoutState = reactive({ height: '100%' }, plugins: { + isShow: true, fixedPanels: [PLUGIN_NAME.Materials], render: null, api: {}, // 插件需要注册交互API到这里 @@ -69,6 +70,7 @@ const layoutState = reactive({ showDesignSettings: true }, settings: { + isShow: true, fixedPanels: [], render: null, api: null, @@ -80,6 +82,20 @@ const layoutState = reactive({ }, pageStatus: '' }) +const leftMenuShownStorage = useStorage('leftMenuShown', layoutState.plugins.isShow) +const rightMenuShownStorage = useStorage('rightMenuShown', layoutState.settings.isShow) +const changeMenuShown = (menuName) => { + switch (menuName) { + case 'left': { + leftMenuShownStorage.value = !leftMenuShownStorage.value + break + } + case 'right': { + rightMenuShownStorage.value = !rightMenuShownStorage.value + break + } + } +} const leftFixedPanelsStorage = useStorage('leftPanels', layoutState.plugins.fixedPanels) const rightFixedPanelsStorage = useStorage('rightPanels', layoutState.settings.fixedPanels) @@ -258,6 +274,13 @@ export default () => { return isLeft || isRight } + //获取插件显示状态 + const getPluginShown = (name) => pluginStorageReactive.value[name]?.isShow + + //修改插件显示状态 + const changePluginShown = (name) => { + pluginStorageReactive.value[name].isShow = !pluginStorageReactive.value[name].isShow + } return { PLUGIN_NAME, PLUGIN_POSITION, @@ -278,12 +301,17 @@ export default () => { changePluginWidth, leftFixedPanelsStorage, rightFixedPanelsStorage, + leftMenuShownStorage, + rightMenuShownStorage, changeLeftFixedPanels, changeRightFixedPanels, getPluginsByLayout, changePluginLayout, getPluginByLayout, dragPluginLayout, - isSameSide + isSameSide, + getPluginShown, + changePluginShown, + changeMenuShown } } diff --git a/packages/design-core/config/plugin.js b/packages/design-core/config/plugin.js index f1dfcc8a9..17a3a1c1b 100644 --- a/packages/design-core/config/plugin.js +++ b/packages/design-core/config/plugin.js @@ -8,3 +8,6 @@ addons.plugins.forEach((item) => { export const getPlugin = (pluginName) => { return plugin[pluginName] || null } +export const getPluginById = (pluginId) => { + return Object.values(plugin).find((item) => item.id === pluginId) || null +} diff --git a/packages/design-core/src/App.vue b/packages/design-core/src/App.vue index 1e29ecaff..219d2b265 100644 --- a/packages/design-core/src/App.vue +++ b/packages/design-core/src/App.vue @@ -5,16 +5,24 @@
- +
@@ -99,16 +107,25 @@ export default { plugin[item.id] = { width: item.options?.width || 300, align: align, - index: index + index: index, + isShow: true } } }) localStorage.setItem('plugin', JSON.stringify(plugin)) - const { layoutState } = useLayout() + const { layoutState, leftMenuShownStorage, rightMenuShownStorage } = useLayout() const { plugins, settings } = layoutState + const left = ref(null) const right = ref(null) + const changeLeftAlign = (pluginId) => { + right.value.changeAlign(pluginId) + } + const changeRightAlign = (pluginId) => { + left.value.changeAlign(pluginId) + } + // 此处接收画布内部的错误和警告提示 const { data } = useBroadcastChannel({ name: BROADCAST_CHANNEL.Notify }) @@ -170,16 +187,20 @@ export default { onUnmounted(() => { window.removeEventListener('popstate', handlePopStateEvent) }) - return { state, + left, right, plugins, settings, toggleNav, addons, layoutState, - designSmbConfig + designSmbConfig, + changeLeftAlign, + changeRightAlign, + leftMenuShownStorage, + rightMenuShownStorage } } } diff --git a/packages/design-core/src/DesignPlugins.vue b/packages/design-core/src/DesignPlugins.vue index 6787b6bcd..b209b65f2 100644 --- a/packages/design-core/src/DesignPlugins.vue +++ b/packages/design-core/src/DesignPlugins.vue @@ -22,8 +22,9 @@ }" :title="item.title" @click="clickMenu({ item, index })" + @contextmenu.prevent="showContextMenu($event, true, item, index, PLUGIN_POSITION.leftTop)" > -
+