From 2af320d6462aa749d0449166603ae9473e399254 Mon Sep 17 00:00:00 2001 From: SonyLeo <746591437@qq.com> Date: Mon, 10 Feb 2025 00:25:19 -0800 Subject: [PATCH 01/25] feat: panel drag and drop capability implementation --- packages/common/component/PluginPanel.vue | 154 +++++++++++++++- packages/design-core/config/addons.js | 33 ++++ packages/design-core/config/plugin.js | 13 ++ packages/design-core/index.js | 2 + packages/layout/src/Main.vue | 32 ++++ packages/layout/src/composable/useLayout.js | 190 +++++++++++++++++++- 6 files changed, 419 insertions(+), 5 deletions(-) create mode 100644 packages/design-core/config/addons.js create mode 100644 packages/design-core/config/plugin.js diff --git a/packages/common/component/PluginPanel.vue b/packages/common/component/PluginPanel.vue index 35da8bfbf6..d5a2996c15 100644 --- a/packages/common/component/PluginPanel.vue +++ b/packages/common/component/PluginPanel.vue @@ -1,5 +1,5 @@ diff --git a/packages/layout/src/DesignPlugins.vue b/packages/layout/src/DesignPlugins.vue index c2f2914f20..7c8e3147cb 100644 --- a/packages/layout/src/DesignPlugins.vue +++ b/packages/layout/src/DesignPlugins.vue @@ -52,21 +52,24 @@ -
-
- - - +
+ +
+
+ + + +
@@ -104,6 +107,8 @@ export default { const { message } = useModal() const pluginState = useLayout().getPluginState() + const { getMoveDragBarState } = useLayout() + props.plugins.forEach(({ id, entry, icon }) => { components[id] = entry iconComponents[id] = icon @@ -190,6 +195,7 @@ export default { fixPanel, pluginState, components, + getMoveDragBarState, iconComponents } } @@ -198,7 +204,7 @@ export default { diff --git a/packages/layout/src/composable/useLayout.js b/packages/layout/src/composable/useLayout.js index c6c1207f7b..547c84a3d9 100644 --- a/packages/layout/src/composable/useLayout.js +++ b/packages/layout/src/composable/useLayout.js @@ -31,6 +31,7 @@ const pluginState = reactive({ }) const layoutState = reactive({ + isMoveDragBar: false, dimension: { deviceType: 'desktop', width: '', From 61fa4ee9803bf8c161182f6f9cfb54c9096f6cf2 Mon Sep 17 00:00:00 2001 From: SonyLeo <746591437@qq.com> Date: Tue, 11 Feb 2025 19:45:16 -0800 Subject: [PATCH 06/25] fix: fix partial plugin fixed canvas scaling --- packages/plugins/schema/src/Main.vue | 8 +------- packages/plugins/script/src/Main.vue | 9 +-------- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/packages/plugins/schema/src/Main.vue b/packages/plugins/schema/src/Main.vue index d9726ca6b2..1e56d2c3a8 100644 --- a/packages/plugins/schema/src/Main.vue +++ b/packages/plugins/schema/src/Main.vue @@ -185,13 +185,7 @@ export default { diff --git a/packages/layout/src/Main.vue b/packages/layout/src/Main.vue index ee8bb3ce3b..62f205e1f7 100644 --- a/packages/layout/src/Main.vue +++ b/packages/layout/src/Main.vue @@ -16,6 +16,7 @@
@@ -31,7 +32,6 @@ import DesignToolbars from './DesignToolbars.vue' import DesignPlugins from './DesignPlugins.vue' import DesignSettings from './DesignSettings.vue' import meta from '../meta' -import { META_APP as PLUGIN_NAME } from '@opentiny/tiny-engine-meta-register' export default { name: 'TinyLowCode', @@ -50,18 +50,26 @@ export default { type: Object } }, - setup() { + setup(props) { const layoutRegistry = getMergeRegistry(meta.type) const configProvider = layoutRegistry.options.configProvider const configProviderDesign = layoutRegistry.options.configProviderDesign - // Step 1: 收集插件的 align 信息 + const { layoutState } = useLayout() + const { plugins, settings } = layoutState + + const toggleNav = ({ item }) => { + if (!item.id) return + plugins.render = plugins.render === item.id ? null : item.id + } + + // 收集插件的 align 信息 const alignGroups = {} - const pluginIDList = Object.values(PLUGIN_NAME) - .filter((item) => item.includes('plugins')) - .map((value) => ({ id: value })) - pluginIDList.forEach((item) => { + // 合并插件和设置列表 + const pluginList = [...props.registry.plugins, ...props.registry.settings] + + pluginList.forEach((item) => { if (item.id) { const align = item.options?.align || 'leftTop' if (!alignGroups[align]) { @@ -73,7 +81,7 @@ export default { // Step 2: 为每个插件分配 index 值 const plugin = {} - pluginIDList.forEach((item) => { + pluginList.forEach((item) => { if (item.id) { const align = item.options?.align || 'leftTop' const index = alignGroups[align].indexOf(item.id) @@ -88,19 +96,12 @@ export default { }) localStorage.setItem('plugin', JSON.stringify(plugin)) - const { layoutState } = useLayout() - const { plugins } = layoutState - - const toggleNav = ({ item }) => { - if (!item.id) return - plugins.render = plugins.render === item.id ? null : item.id - } - return { layoutRegistry, configProvider, configProviderDesign, plugins, + settings, toggleNav, layoutState } @@ -132,7 +133,8 @@ export default { } } .tiny-engine-right-wrap { - position: relative; + display: flex; + flex-flow: row nowrap; z-index: 4; } :deep(.monaco-editor .suggest-widget) { diff --git a/packages/layout/src/composable/useLayout.js b/packages/layout/src/composable/useLayout.js index 085c512184..bf8b193fbf 100644 --- a/packages/layout/src/composable/useLayout.js +++ b/packages/layout/src/composable/useLayout.js @@ -52,7 +52,7 @@ const layoutState = reactive({ settings: { isShow: true, fixedPanels: [], - render: 'props', + render: 'engine.setting.props', api: null, activating: false, // 右侧面版激活提示状态 showDesignSettings: true @@ -96,6 +96,26 @@ const changeRightFixedPanels = (pluginName) => { : [...rightFixedPanelsStorage.value, pluginName] } +const registerPluginApi = (api) => { + Object.assign(layoutState.plugins.api, api) +} + +const getPluginApi = (pluginName) => { + const { plugins } = layoutState + + return plugins.api[pluginName] || plugins.api +} + +export const getPlugin = (pluginName) => { + // TODO: 暂时先这样,明天优化 + return pluginName +} + +export const getPluginById = (pluginId) => { + // TODO: 暂时先这样,明天优化 + return pluginId +} + const getScale = () => layoutState.dimension.scale const getPluginState = () => layoutState.plugins @@ -120,6 +140,13 @@ const activeSetting = (name) => { }) } +const closeSetting = (forceClose) => { + const { settings } = layoutState + if (!settings.fixedPanels.includes(settings.render) || forceClose) { + settings.render = null + } +} + // 激活plugin面板并返回当前插件注册的Api const activePlugin = (name, noActiveRender) => { const { plugins } = layoutState @@ -273,12 +300,17 @@ export default () => { PLUGIN_NAME, PLUGIN_POSITION, activeSetting, + closeSetting, activePlugin, closePlugin, layoutState, getScale, setDimension, getDimension, + registerPluginApi, + getPlugin, + getPluginById, + getPluginApi, pluginState, getPluginState, isEmptyPage, diff --git a/packages/settings/events/index.js b/packages/settings/events/index.js index 785a2a2c7b..a088702aee 100644 --- a/packages/settings/events/index.js +++ b/packages/settings/events/index.js @@ -20,9 +20,7 @@ import './src/styles/vars.less' export default { ...metaData, entry, - options: { - commonEvents - }, + options: Object.assign({}, commonEvents, metaData.options), components: { BindEventsDialogSidebar, BindEventsDialogContent diff --git a/packages/settings/events/meta.js b/packages/settings/events/meta.js index 4f3b9bd69a..9f871ecb30 100644 --- a/packages/settings/events/meta.js +++ b/packages/settings/events/meta.js @@ -4,5 +4,8 @@ export default { type: 'setting', align: 'left', name: 'event', - icon: '' + icon: 'target', + options: { + align: 'rightTop' + } } diff --git a/packages/settings/events/src/Main.vue b/packages/settings/events/src/Main.vue index 4ed763bcb2..12d3dd81f9 100644 --- a/packages/settings/events/src/Main.vue +++ b/packages/settings/events/src/Main.vue @@ -1,19 +1,38 @@ diff --git a/packages/settings/props/meta.js b/packages/settings/props/meta.js index 4ea095d2ea..bb9b62f6cf 100644 --- a/packages/settings/props/meta.js +++ b/packages/settings/props/meta.js @@ -4,5 +4,8 @@ export default { type: 'setting', align: 'left', name: 'props', - icon: '' + icon: 'form', + options: { + align: 'rightTop' + } } diff --git a/packages/settings/props/src/Main.vue b/packages/settings/props/src/Main.vue index 3b64f75aa9..4f80031e70 100644 --- a/packages/settings/props/src/Main.vue +++ b/packages/settings/props/src/Main.vue @@ -1,17 +1,21 @@