import { ref, computed } from "vue"; import { NODE_TYPE } from '../tools/index.d' export interface NodesItem { id: string type: string class: string position: { x: number, y: number } data: { component: any, type: string, superiorID?: string } } export class StateManager { vueFlow: any nodes: any nodes_: any edges: any zoom: any // 管理器 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) } constructor(options) { this.vueFlow = options.vueFlow this.zoom = ref(1) this.nodes = ref([]); this.nodes_ = computed(() => { return this.nodes.value.map((node, index) => { const obj = node; // if (index === 0) { // obj.type = NODE_TYPE.INPUT; // } else if (index === this.nodes.value.length - 1) { // obj.type = NODE_TYPE.OUTPUT; // } else { // obj.type = NODE_TYPE.SECONDARY; // } const superiorID = node.data.superiorID; const isSuperior = this.nodes.value.some((v) => v.id === superiorID) const isSubord = this.nodes.value.some((v) => v.data.superiorID === node.id) if (!superiorID) {// 没有上级ID obj.type = NODE_TYPE.INPUT; } else if (isSuperior && isSubord) {// 有上级ID并找到下级 obj.type = NODE_TYPE.SECONDARY; } else if (isSuperior && !isSubord) {// 有上级ID但未找到下级 obj.type = NODE_TYPE.OUTPUT; } else {// 其他情况-有上级ID未找到上级 obj.type = NODE_TYPE.INPUT; } return obj }) }) this.edges = computed(() => { const arr = [] this.nodes.value.forEach((node, index) => { // if (index < this.nodes.value.length - 1) { // const source = node.id // const target = this.nodes.value[index + 1].id // arr.push({ // id: `el-${source}-${target}`, // source: source, // target: target, // selectable: false, // type: 'default' // }) // } const superiorID = node.data.superiorID; const isSuperior = this.nodes.value.some((v) => v.id === superiorID) if (superiorID && isSuperior) { const source = node.data.superiorID const target = node.id arr.push({ id: `el-${source}-${target}`, source: source, target: target, selectable: false, type: 'default' }) } }) return arr }) } /** 添加节点 */ addNode(node: NodesItem) { this.nodes.value.push(node) } /** 删除节点 */ deleteNode(id: string) { this.nodes.value = this.nodes.value.filter((node: NodesItem) => node.id !== id) } getLastNode() { return this.nodes.value[this.nodes.value.length - 1] } }