UNPKG

ingenious-flow-designer

Version:

[演示地址](http://antd-vben5-pro.madong.tech/)

119 lines (105 loc) 3.07 kB
import { GraphModel, h, CircleNode, CircleNodeModel, ConnectRule } from "@logicflow/core"; import { ColorEnum, NodeStateEnum } from "../types/enums"; class EndModel extends CircleNodeModel { constructor(data: any, graphModel: GraphModel) { super(data, graphModel); } setAttributes(): void { this.r = 20; if((this.text && this.text.value == "") || !this.text) { this.text.value = "结束"; } this.text.draggable = false; this.text.editable = false; if (this.properties._width) { this.r = this.properties._width / 2; } if (this.properties._stroke) { this.properties.stroke = this.properties._stroke; } if (this.properties._fill) { this.properties.fill = this.properties._fill; } if (this.properties._strokeWidth) { this.properties.strokeWidth = this.properties._strokeWidth; } if (this.properties._opacity) { this.properties.opacity = this.properties._opacity; } } getConnectedSourceRules(): ConnectRule[] { const rules = super.getConnectedSourceRules(); rules.push({ message: "结束节点不能是边的源节点", validate: () => false }); return rules; } getNodeStyle() { const style = super.getNodeStyle(); const state = this.properties.state; if(state === NodeStateEnum.history) { style.stroke = ColorEnum.historyColor; style.fill = `${ColorEnum.historyColor}10`; } else if(state === NodeStateEnum.active) { style.stroke = ColorEnum.activeColor; style.fill = `${ColorEnum.activeColor}10`; } else if(state === NodeStateEnum.error) { style.stroke = ColorEnum.errorColor; style.fill = `${ColorEnum.errorColor}10`; } else { style.stroke = ColorEnum.errorColor; style.fill = `${ColorEnum.errorColor}10`; } if (this.properties._stroke) { style.stroke = this.properties._stroke; } if (this.properties._fill) { style.fill = this.properties._fill; } if (this.properties._strokeWidth) { style.strokeWidth = this.properties._strokeWidth; } if (this.properties._opacity !== undefined) { style.opacity = this.properties._opacity; } return style; } } class EndView extends CircleNode { private getEndIcon() { const { model } = this.props; const { x, y } = model; const style = model.getNodeStyle(); const iconSize = 16; return h("circle", { cx: x, cy: y, r: iconSize / 2, fill: style.stroke, stroke: "none" }); } getResizeShape() { const { model } = this.props; const { x, y, r } = model; const style = model.getNodeStyle(); return h("g", {}, [ h("circle", { ...style, cx: x, cy: y, r }), this.getEndIcon() ]); } getShape() { return this.getResizeShape(); } } export default { type: "end", view: EndView, model: EndModel, };