fix: When the loop node is closed, the loop body is not displayed (#4091)
parent
218cbf4ad9
commit
cc0cde929a
|
|
@ -52,11 +52,11 @@ const validate = () => {
|
||||||
const set_loop_body = () => {
|
const set_loop_body = () => {
|
||||||
const loop_node_id = props.nodeModel.properties.loop_node_id
|
const loop_node_id = props.nodeModel.properties.loop_node_id
|
||||||
const loop_node = props.nodeModel.graphModel.getNodeModelById(loop_node_id)
|
const loop_node = props.nodeModel.graphModel.getNodeModelById(loop_node_id)
|
||||||
loop_node.properties.node_data.loop_body = lf.value.getGraphData()
|
|
||||||
loop_node.properties.node_data.loop = {
|
loop_node.properties.node_data.loop = {
|
||||||
x: props.nodeModel.x,
|
x: props.nodeModel.x,
|
||||||
y: props.nodeModel.y,
|
y: props.nodeModel.y,
|
||||||
}
|
}
|
||||||
|
loop_node.properties.node_data.loop_body = lf.value.getGraphData()
|
||||||
}
|
}
|
||||||
|
|
||||||
const refresh_loop_fields = (fields: Array<any>) => {
|
const refresh_loop_fields = (fields: Array<any>) => {
|
||||||
|
|
|
||||||
|
|
@ -71,9 +71,9 @@
|
||||||
</NodeContainer>
|
</NodeContainer>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { set } from 'lodash'
|
import { set, throttle } from 'lodash'
|
||||||
import NodeContainer from '@/workflow/common/NodeContainer.vue'
|
import NodeContainer from '@/workflow/common/NodeContainer.vue'
|
||||||
import { ref, computed, onMounted } from 'vue'
|
import { ref, computed, onMounted, watch } from 'vue'
|
||||||
import { isLastNode } from '@/workflow/common/data'
|
import { isLastNode } from '@/workflow/common/data'
|
||||||
import { loopBodyNode, loopStartNode } from '@/workflow/common/data'
|
import { loopBodyNode, loopStartNode } from '@/workflow/common/data'
|
||||||
import NodeCascader from '@/workflow/common/NodeCascader.vue'
|
import NodeCascader from '@/workflow/common/NodeCascader.vue'
|
||||||
|
|
@ -98,7 +98,20 @@ const form_data = computed({
|
||||||
set(props.nodeModel.properties, 'node_data', value)
|
set(props.nodeModel.properties, 'node_data', value)
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
const showNode = computed(() => {
|
||||||
|
if (props.nodeModel.properties.showNode !== undefined) {
|
||||||
|
return props.nodeModel.properties.showNode
|
||||||
|
}
|
||||||
|
set(props.nodeModel.properties, 'showNode', true)
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
watch(showNode, () => {
|
||||||
|
if (showNode.value) {
|
||||||
|
throttle(mountLoopBodyNode, 1000)()
|
||||||
|
} else {
|
||||||
|
throttle(destroyLoopBodyNode, 1000)()
|
||||||
|
}
|
||||||
|
})
|
||||||
const replyNodeFormRef = ref()
|
const replyNodeFormRef = ref()
|
||||||
const nodeCascaderRef = ref()
|
const nodeCascaderRef = ref()
|
||||||
const validate = () => {
|
const validate = () => {
|
||||||
|
|
@ -109,14 +122,15 @@ const validate = () => {
|
||||||
return Promise.reject({ node: props.nodeModel, errMessage: err })
|
return Promise.reject({ node: props.nodeModel, errMessage: err })
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
const destroyLoopBodyNode = () => {
|
||||||
onMounted(() => {
|
const nodeOutgoingNode = props.nodeModel.graphModel.getNodeOutgoingNode(props.nodeModel.id)
|
||||||
if (typeof props.nodeModel.properties.node_data?.is_result === 'undefined') {
|
const loopBody = nodeOutgoingNode.find((item: any) => item.type == loopBodyNode.type)
|
||||||
if (isLastNode(props.nodeModel)) {
|
if (loopBody) {
|
||||||
set(props.nodeModel.properties.node_data, 'is_result', true)
|
loopBody.set_loop_body()
|
||||||
}
|
props.nodeModel.graphModel.deleteNode(loopBody.id)
|
||||||
}
|
}
|
||||||
set(props.nodeModel, 'validate', validate)
|
}
|
||||||
|
const mountLoopBodyNode = () => {
|
||||||
const nodeOutgoingNode = props.nodeModel.graphModel.getNodeOutgoingNode(props.nodeModel.id)
|
const nodeOutgoingNode = props.nodeModel.graphModel.getNodeOutgoingNode(props.nodeModel.id)
|
||||||
if (!nodeOutgoingNode.some((item: any) => item.type == loopBodyNode.type)) {
|
if (!nodeOutgoingNode.some((item: any) => item.type == loopBodyNode.type)) {
|
||||||
let workflow = { nodes: [loopStartNode], edges: [] }
|
let workflow = { nodes: [loopStartNode], edges: [] }
|
||||||
|
|
@ -127,7 +141,7 @@ onMounted(() => {
|
||||||
}
|
}
|
||||||
if (props.nodeModel.properties.node_data.loop) {
|
if (props.nodeModel.properties.node_data.loop) {
|
||||||
x = props.nodeModel.properties.node_data.loop.x
|
x = props.nodeModel.properties.node_data.loop.x
|
||||||
y = props.nodeModel.properties.node_data.loop.y
|
y = props.nodeModel.properties.node_data.loop.y - 330
|
||||||
}
|
}
|
||||||
const nodeModel = props.nodeModel.graphModel.addNode({
|
const nodeModel = props.nodeModel.graphModel.addNode({
|
||||||
type: loopBodyNode.type,
|
type: loopBodyNode.type,
|
||||||
|
|
@ -147,6 +161,16 @@ onMounted(() => {
|
||||||
virtual: true,
|
virtual: true,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
if (typeof props.nodeModel.properties.node_data?.is_result === 'undefined') {
|
||||||
|
if (isLastNode(props.nodeModel)) {
|
||||||
|
set(props.nodeModel.properties.node_data, 'is_result', true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set(props.nodeModel, 'validate', validate)
|
||||||
|
mountLoopBodyNode()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped></style>
|
<style lang="scss" scoped></style>
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ class LoopStartNode extends AppNode {
|
||||||
type: this.props.model.type,
|
type: this.props.model.type,
|
||||||
children: this.props.model.properties?.config?.fields || [],
|
children: this.props.model.properties?.config?.fields || [],
|
||||||
})
|
})
|
||||||
console.log(result)
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,6 @@ watch(loop_input_fields, () => {
|
||||||
const showicon = ref(false)
|
const showicon = ref(false)
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
console.log(cloneDeep(loop_input_fields.value))
|
|
||||||
props.nodeModel.graphModel.refresh_loop_fields(cloneDeep(loop_input_fields.value))
|
props.nodeModel.graphModel.refresh_loop_fields(cloneDeep(loop_input_fields.value))
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue