diff --git a/packages/canvas/DesignCanvas/src/api/useCanvas.js b/packages/canvas/DesignCanvas/src/api/useCanvas.js index 89e30a72c2..01adae4df4 100644 --- a/packages/canvas/DesignCanvas/src/api/useCanvas.js +++ b/packages/canvas/DesignCanvas/src/api/useCanvas.js @@ -356,6 +356,34 @@ const operationTypeMap = { previous: node } }, + /** + * move node in canvas + * @param {object} operation + * @param {string} operation.id - node id to move + * @param {string} operation.parentId - target parent node id + * @param {string} operation.referTargetNodeId - target parent node's child node id + * @param {string} operation.position - position to insert(before/after) + */ + move: (operation) => { + const { id, parentId, position, referTargetNodeId } = operation + const targetNode = getNode(id, true) + if (!targetNode) { + return + } + /** + * delete node from parent + */ + operationTypeMap.delete({ id }) + /** + * add node to new parent + */ + operationTypeMap.insert({ + parentId, + position, + referTargetNodeId, + newNodeData: targetNode.node + }) + }, changeProps: (operation) => { const { id, value, option: changeOption } = operation let { node } = getNode(id, true) || {} diff --git a/packages/canvas/container/src/components/CanvasAction.vue b/packages/canvas/container/src/components/CanvasAction.vue index 3b01e28549..56ecc2c989 100644 --- a/packages/canvas/container/src/components/CanvasAction.vue +++ b/packages/canvas/container/src/components/CanvasAction.vue @@ -128,6 +128,7 @@ import { selectNode, updateRect, copyNode, + moveChildNode, getRenderer, dragStart, getCurrentElement @@ -193,33 +194,14 @@ export default { removeNodeById(getCurrent().schema?.id) } - const moveChild = (list, selected, addend) => { - if (!list || list.length < 2) { - return - } - - const index = list.indexOf(selected) - - if (index > -1) { - const toIndex = index + addend - - if (toIndex > -1 && toIndex < list.length) { - // eslint-disable-next-line no-extra-semi - ;[list[index], list[toIndex]] = [list[toIndex], list[index]] - - updateRect() - } - } - } - const moveUp = () => { const { parent, schema } = getCurrent() - moveChild(parent?.children, schema, -1) + moveChildNode(parent, schema, -1) } const moveDown = () => { const { parent, schema } = getCurrent() - moveChild(parent?.children, schema, 1) + moveChildNode(parent, schema, 1) } const selectParent = () => { diff --git a/packages/canvas/container/src/components/CanvasDivider.vue b/packages/canvas/container/src/components/CanvasDivider.vue index 1fb5f11307..5d5703ee7c 100644 --- a/packages/canvas/container/src/components/CanvasDivider.vue +++ b/packages/canvas/container/src/components/CanvasDivider.vue @@ -24,7 +24,7 @@