diff --git a/packages/editor/src/Editor.vue b/packages/editor/src/Editor.vue index 8c6a8f07..95a1f5de 100644 --- a/packages/editor/src/Editor.vue +++ b/packages/editor/src/Editor.vue @@ -31,7 +31,7 @@ - diff --git a/packages/stage/src/StageDragResize.ts b/packages/stage/src/StageDragResize.ts index 67531c85..d135ded5 100644 --- a/packages/stage/src/StageDragResize.ts +++ b/packages/stage/src/StageDragResize.ts @@ -519,6 +519,7 @@ export default class StageDragResize extends EventEmitter { const isAbsolute = this.mode === Mode.ABSOLUTE; const isFixed = this.mode === Mode.FIXED; + const isSortable = this.mode === Mode.SORTABLE; let { moveableOptions = {} } = this.core.config; @@ -573,7 +574,7 @@ export default class StageDragResize extends EventEmitter { // 设置0的话无法移动到left为0,所以只能设置为-1 left: -1, right: this.container.clientWidth - 1, - bottom: this.container.clientHeight, + bottom: isSortable ? undefined : this.container.clientHeight, ...(moveableOptions.bounds || {}), }, ...options, diff --git a/packages/stage/src/style.css b/packages/stage/src/style.css index e381e107..e5d54a20 100644 --- a/packages/stage/src/style.css +++ b/packages/stage/src/style.css @@ -9,3 +9,7 @@ opacity: .1; pointer-events: none; } + +.magic-ui-container.magic-layout-relative { + min-height: 50px; +} diff --git a/packages/ui-react/src/container/Container.tsx b/packages/ui-react/src/container/Container.tsx index 9c2b86cb..dab1b071 100644 --- a/packages/ui-react/src/container/Container.tsx +++ b/packages/ui-react/src/container/Container.tsx @@ -37,7 +37,7 @@ const Container: React.FC = ({ config, id }) => { return (
{config.items?.map((item: MComponent | MContainer) => { diff --git a/packages/ui-react/src/container/formConfig.ts b/packages/ui-react/src/container/formConfig.ts index d9e97a47..20c71b84 100644 --- a/packages/ui-react/src/container/formConfig.ts +++ b/packages/ui-react/src/container/formConfig.ts @@ -26,5 +26,16 @@ export default [ { value: 'absolute', text: '绝对定位' }, { value: 'relative', text: '流式布局' }, ], + onChange: (formState: any, v: string, { model }: any) => { + if (!model.style) return v; + if (v === 'relative') { + model.style.height = 'auto'; + } else { + const el = formState.stage?.renderer?.contentWindow.document.getElementById(model.id); + if (el) { + model.style.height = el.getBoundingClientRect().height; + } + } + }, }, ]; diff --git a/packages/ui-react/src/page/Page.tsx b/packages/ui-react/src/page/Page.tsx index 1a8b3ac8..993effc0 100644 --- a/packages/ui-react/src/page/Page.tsx +++ b/packages/ui-react/src/page/Page.tsx @@ -39,7 +39,9 @@ const Page: React.FC = ({ config }) => { return (
{config.items?.map((item: MComponent | MContainer) => { diff --git a/packages/ui-react/src/page/formConfig.ts b/packages/ui-react/src/page/formConfig.ts index 54fd0012..d543b155 100644 --- a/packages/ui-react/src/page/formConfig.ts +++ b/packages/ui-react/src/page/formConfig.ts @@ -36,5 +36,16 @@ export default [ { value: 'absolute', text: '绝对定位' }, { value: 'relative', text: '流式布局' }, ], + onChange: (formState: any, v: string, { model }: any) => { + if (!model.style) return v; + if (v === 'relative') { + model.style.height = 'auto'; + } else { + const el = formState.stage?.renderer?.contentWindow.document.getElementById(model.id); + if (el) { + model.style.height = el.getBoundingClientRect().height; + } + } + }, }, ]; diff --git a/packages/ui-vue2/src/container/Container.vue b/packages/ui-vue2/src/container/Container.vue index e11cf880..4b6c372a 100644 --- a/packages/ui-vue2/src/container/Container.vue +++ b/packages/ui-vue2/src/container/Container.vue @@ -2,7 +2,7 @@
diff --git a/packages/ui-vue2/src/container/formConfig.ts b/packages/ui-vue2/src/container/formConfig.ts index d9e97a47..20c71b84 100644 --- a/packages/ui-vue2/src/container/formConfig.ts +++ b/packages/ui-vue2/src/container/formConfig.ts @@ -26,5 +26,16 @@ export default [ { value: 'absolute', text: '绝对定位' }, { value: 'relative', text: '流式布局' }, ], + onChange: (formState: any, v: string, { model }: any) => { + if (!model.style) return v; + if (v === 'relative') { + model.style.height = 'auto'; + } else { + const el = formState.stage?.renderer?.contentWindow.document.getElementById(model.id); + if (el) { + model.style.height = el.getBoundingClientRect().height; + } + } + }, }, ]; diff --git a/packages/ui-vue2/src/container/initValue.ts b/packages/ui-vue2/src/container/initValue.ts index 21dc884a..29663a51 100644 --- a/packages/ui-vue2/src/container/initValue.ts +++ b/packages/ui-vue2/src/container/initValue.ts @@ -16,4 +16,10 @@ * limitations under the License. */ -export default {}; +export default { + items: [], + style: { + width: '375', + height: '100', + }, +}; diff --git a/packages/ui-vue2/src/page/Page.vue b/packages/ui-vue2/src/page/Page.vue index 4896db85..d82c67d1 100644 --- a/packages/ui-vue2/src/page/Page.vue +++ b/packages/ui-vue2/src/page/Page.vue @@ -1,7 +1,9 @@