import { HtmlNodeModel, RectNode, RectNodeModel, h } from "@logicflow/core"; import { CommonTheme } from "@logicflow/core/types/constant/DefaultTheme"; class AndNodeModel extends RectNodeModel { initNodeData(data: any) { super.initNodeData(data); this.sourceRules.push({ message: "只允许从右边的锚点连出", validate: (sourceNode, targetNode, sourceAnchor, targetAnchor) => { return sourceAnchor?.type === "right"; }, }); this.targetRules.push({ message: "只允许连到左边的锚点", validate: (sourceNode, targetNode, sourceAnchor, targetAnchor) => { return targetAnchor?.type === "left" } }) } setAttributes() { this.properties.name = this.properties.name || "common"; this.text.editable = false; // 禁止节点文本编辑 // 设置节点宽高和锚点 this.width = 72; this.height = 36; } getNodeStyle(): CommonTheme { const style = super.getNodeStyle(); style.fill = "#fff"; style.strokeWidth = 0 return style } getDefaultAnchor() { const { width, height, x, y, id } = this; return [ { x: x - width / 2, y: y + height / 4, type: "left", edgeAddable: false, // 控制锚点是否可以从此锚点手动创建连线。默认为true。 id: `${id}_0`, }, { x: x - width / 2, y: y - height / 4, type: "left", edgeAddable: false, // 控制锚点是否可以从此锚点手动创建连线。默认为true。 id: `${id}_1`, }, { x: x + width / 2, y, type: "right", id: `${id}_2`, }, ]; } } class AndNodeView extends RectNode { getShape(): h.JSX.Element { const { model } = this.props const { x, y, width, height } = model; const style = model.getNodeStyle(); const newWidth = width + 50 const newHeight = height + 50 return h("g", {}, [ h("rect", { ...style, x: x - width / 2, y: y - height / 2, width, height }), h( "svg", { x: x - newWidth / 2, y: y - newHeight / 2, width: newWidth, height: newHeight, viewBox: "0 0 1024 1024" }, [ h("path", { fill: style.stroke, d: "M941 503.3H805.2c-3-55.8-25.8-107.8-65.2-147.6-42.3-42.8-98.5-66.4-158.3-66.4H243.5c-6.9 0-12.5 5.6-12.5 12.5v94.5H95.6c-6.9 0-12.5 5.6-12.5 12.5s5.6 12.5 12.5 12.5H231v189H95.6c-6.9 0-12.5 5.6-12.5 12.5s5.6 12.5 12.5 12.5H231v94.5c0 6.9 5.6 12.5 12.5 12.5h338.2c59.8 0 116-23.6 158.3-66.4 39.3-39.8 62.2-91.8 65.2-147.6H941c6.9 0 12.5-5.6 12.5-12.5 0-7-5.6-12.5-12.5-12.5z m-359.3 214H256v-403h325.7c105.5 0 192.1 83.7 198.5 189 0.3 4.1 0.4 8.3 0.4 12.5s-0.1 8.4-0.4 12.5c-6.4 105.3-93 189-198.5 189z" }) ] ) ]) } } export default { type: "AND", view: AndNodeView, model: AndNodeModel };