Files
FiDA_Front/src/components/Canvas/FlowCanvas/manager/StateManager.ts

78 lines
1.7 KiB
TypeScript
Raw Normal View History

2026-02-26 11:45:32 +08:00
import { ref, computed } from "vue";
2026-02-27 14:58:36 +08:00
import { NODE_TYPE } from '../tools/index.d'
2026-02-26 11:45:32 +08:00
2026-02-27 14:58:36 +08:00
export interface NodesItem {
id: string
type: string
class: string
position: { x: number, y: number }
data: { component: any, type: string }
}
2026-02-26 11:45:32 +08:00
export class StateManager {
vueFlow: any
nodes: any
2026-02-27 11:43:27 +08:00
nodes_: any
2026-02-26 11:45:32 +08:00
edges: any
zoom: any
2026-02-27 09:56:49 +08:00
// 管理器
eventManager: any
flowManager: any
nodeManager: any
// 设置管理器
setManager(options) {
options.eventManager && (this.eventManager = options.eventManager)
options.flowManager && (this.flowManager = options.flowManager)
options.nodeManager && (this.nodeManager = options.nodeManager)
}
2026-02-26 11:45:32 +08:00
constructor(options) {
this.vueFlow = options.vueFlow
2026-02-27 14:58:36 +08:00
this.nodes = ref<NodesItem[]>([]);
2026-02-27 11:43:27 +08:00
this.nodes_ = computed(() => {
return this.nodes.value.map((node, index) => {
const obj = {
...node,
}
if (index === 0) {
2026-02-27 14:58:36 +08:00
obj.type = NODE_TYPE.INPUT;
} else if (index === this.nodes.value.length - 1) {
obj.type = NODE_TYPE.OUTPUT;
2026-02-27 11:43:27 +08:00
} else {
2026-02-27 14:58:36 +08:00
obj.type = NODE_TYPE.SECONDARY;
2026-02-27 11:43:27 +08:00
}
return obj
})
})
2026-02-26 11:45:32 +08:00
this.edges = computed(() => {
const arr = []
this.nodes.value.forEach((node, index) => {
if (index < this.nodes.value.length - 1) {
const id = node.id
const target = this.nodes.value[index + 1].id
arr.push({
id: `el-${id}-${target}`,
source: id,
target: target,
2026-03-02 16:24:32 +08:00
selectable: false,
2026-03-02 13:51:14 +08:00
type: 'default'
2026-02-26 11:45:32 +08:00
})
}
})
return arr
})
this.zoom = ref(1)
}
2026-02-27 14:58:36 +08:00
/** 添加节点 */
addNode(node: NodesItem) {
this.nodes.value.push(node)
}
/** 删除节点 */
deleteNode(id: string) {
this.nodes.value = this.nodes.value.filter((node: NodesItem) => node.id !== id)
}
2026-02-27 11:43:27 +08:00
getLastNode() {
return this.nodes.value[this.nodes.value.length - 1]
}
2026-02-26 11:45:32 +08:00
}