Files
railwaysystem/RuoYi-Vue/ruoyi-ui/node_modules2/@antv/g6-element/lib/nodes/modelRect.js
T
2026-09-10 15:40:10 +08:00

524 lines
17 KiB
JavaScript

"use strict";
var _tslib = require("tslib");
var _util = require("@antv/util");
var _g6Core = require("@antv/g6-core");
(0, _g6Core.registerNode)('modelRect', {
// 自定义节点时的配置
options: {
size: [185, 70],
style: {
radius: 5,
stroke: '#69c0ff',
fill: '#ffffff',
lineWidth: _g6Core.BaseGlobal.defaultNode.style.lineWidth,
fillOpacity: 1
},
// 文本样式配置
labelCfg: {
style: {
fill: '#595959',
fontSize: 14,
fontFamily: _g6Core.BaseGlobal.windowFontFamily
},
offset: 30 // 距离左侧的 offset,没有设置 y 轴上移动的配置
},
descriptionCfg: {
style: {
fontSize: 12,
fill: '#bfbfbf',
fontFamily: _g6Core.BaseGlobal.windowFontFamily
},
paddingTop: 0
},
preRect: {
show: true,
width: 4,
fill: '#40a9ff',
radius: 2
},
// 节点上左右上下四个方向上的链接circle配置
linkPoints: {
top: false,
right: false,
bottom: false,
left: false,
// circle的大小
size: 10,
lineWidth: 1,
fill: '#72CC4A',
stroke: '#72CC4A'
},
// 节点中icon配置
logoIcon: {
// 是否显示icon,值为 false 则不渲染icon
show: true,
x: 0,
y: 0,
// icon的地址,字符串类型
img: 'https://gw.alipayobjects.com/zos/basement_prod/4f81893c-1806-4de4-aff3-9a6b266bc8a2.svg',
width: 16,
height: 16,
// 用于调整图标的左右位置
offset: 0
},
// 节点中表示状态的icon配置
stateIcon: {
// 是否显示icon,值为 false 则不渲染icon
show: true,
x: 0,
y: 0,
// icon的地址,字符串类型
img: 'https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg',
width: 16,
height: 16,
// 用于调整图标的左右位置
offset: -5
},
// 连接点,默认为左右
// anchorPoints: [{ x: 0, y: 0.5 }, { x: 1, y: 0.5 }]
anchorPoints: [[0, 0.5], [1, 0.5]]
},
shapeType: 'modelRect',
drawShape: function drawShape(cfg, group) {
var _a = (this.mergeStyle || this.getOptions(cfg)).preRect,
preRect = _a === void 0 ? {} : _a;
var style = this.getShapeStyle(cfg);
var size = this.getSize(cfg);
var width = size[0];
var height = size[1];
var keyShape = group.addShape('rect', {
attrs: style,
className: "".concat(this.type, "-keyShape"),
name: "".concat(this.type, "-keyShape"),
draggable: true
});
group['shapeMap']["".concat(this.type, "-keyShape")] = keyShape;
var preRectShow = preRect.show,
preRectStyle = (0, _tslib.__rest)(preRect, ["show"]);
if (preRectShow) {
group['shapeMap']['pre-rect'] = group.addShape('rect', {
attrs: (0, _tslib.__assign)({
x: -width / 2,
y: -height / 2,
height: height
}, preRectStyle),
className: 'pre-rect',
name: 'pre-rect',
draggable: true
});
}
this.drawLogoIcon(cfg, group);
this.drawStateIcon(cfg, group);
this.drawLinkPoints(cfg, group);
return keyShape;
},
/**
* 绘制模型矩形左边的logo图标
* @param {Object} cfg 数据配置项
* @param {Group} group Group实例
*/
drawLogoIcon: function drawLogoIcon(cfg, group) {
var _a = (this.mergeStyle || this.getOptions(cfg)).logoIcon,
logoIcon = _a === void 0 ? {} : _a;
var size = this.getSize(cfg);
var width = size[0];
if (logoIcon.show) {
var w = logoIcon.width,
h = logoIcon.height,
x = logoIcon.x,
y = logoIcon.y,
offset = logoIcon.offset,
text = logoIcon.text,
logoIconStyle = (0, _tslib.__rest)(logoIcon, ["width", "height", "x", "y", "offset", "text"]);
if (text) {
group['shapeMap']['rect-logo-icon'] = group.addShape('text', {
attrs: (0, _tslib.__assign)({
x: 0,
y: 0,
fontSize: 12,
fill: '#000',
stroke: '#000',
textBaseline: 'middle',
textAlign: 'center'
}, logoIconStyle),
className: 'rect-logo-icon',
name: 'rect-logo-icon',
draggable: true
});
} else {
group['shapeMap']['rect-logo-icon'] = group.addShape('image', {
attrs: (0, _tslib.__assign)((0, _tslib.__assign)({}, logoIconStyle), {
x: x || -width / 2 + w + offset,
y: y || -h / 2,
width: w,
height: h
}),
className: 'rect-logo-icon',
name: 'rect-logo-icon',
draggable: true
});
}
}
},
/**
* 绘制模型矩形右边的状态图标
* @param {Object} cfg 数据配置项
* @param {Group} group Group实例
*/
drawStateIcon: function drawStateIcon(cfg, group) {
var _a = (this.mergeStyle || this.getOptions(cfg)).stateIcon,
stateIcon = _a === void 0 ? {} : _a;
var size = this.getSize(cfg);
var width = size[0];
if (stateIcon.show) {
var w = stateIcon.width,
h = stateIcon.height,
x = stateIcon.x,
y = stateIcon.y,
offset = stateIcon.offset,
text = stateIcon.text,
iconStyle = (0, _tslib.__rest)(stateIcon, ["width", "height", "x", "y", "offset", "text"]);
if (text) {
group['shapeMap']['rect-state-icon'] = group.addShape('text', {
attrs: (0, _tslib.__assign)({
x: 0,
y: 0,
fontSize: 12,
fill: '#000',
stroke: '#000',
textBaseline: 'middle',
textAlign: 'center'
}, iconStyle),
className: 'rect-state-icon',
name: 'rect-state-icon',
draggable: true
});
} else {
group['shapeMap']['rect-state-icon'] = group.addShape('image', {
attrs: (0, _tslib.__assign)((0, _tslib.__assign)({}, iconStyle), {
x: x || width / 2 - w + offset,
y: y || -h / 2,
width: w,
height: h
}),
className: 'rect-state-icon',
name: 'rect-state-icon',
draggable: true
});
}
}
},
/**
* 绘制节点上的LinkPoints
* @param {Object} cfg data数据配置项
* @param {Group} group Group实例
*/
drawLinkPoints: function drawLinkPoints(cfg, group) {
var _a = (this.mergeStyle || this.getOptions(cfg)).linkPoints,
linkPoints = _a === void 0 ? {} : _a;
var top = linkPoints.top,
left = linkPoints.left,
right = linkPoints.right,
bottom = linkPoints.bottom,
markSize = linkPoints.size,
markR = linkPoints.r,
markStyle = (0, _tslib.__rest)(linkPoints, ["top", "left", "right", "bottom", "size", "r"]);
var size = this.getSize(cfg);
var width = size[0];
var height = size[1];
if (left) {
// left circle
group['shapeMap']['link-point-left'] = group.addShape('circle', {
attrs: (0, _tslib.__assign)((0, _tslib.__assign)({}, markStyle), {
x: -width / 2,
y: 0,
r: markSize / 2 || markR || 5
}),
className: 'link-point-left',
name: 'link-point-left',
isAnchorPoint: true
});
}
if (right) {
// right circle
group['shapeMap']['link-point-right'] = group.addShape('circle', {
attrs: (0, _tslib.__assign)((0, _tslib.__assign)({}, markStyle), {
x: width / 2,
y: 0,
r: markSize / 2 || markR || 5
}),
className: 'link-point-right',
name: 'link-point-right',
isAnchorPoint: true
});
}
if (top) {
// top circle
group['shapeMap']['link-point-top'] = group.addShape('circle', {
attrs: (0, _tslib.__assign)((0, _tslib.__assign)({}, markStyle), {
x: 0,
y: -height / 2,
r: markSize / 2 || markR || 5
}),
className: 'link-point-top',
name: 'link-point-top',
isAnchorPoint: true
});
}
if (bottom) {
// bottom circle
group['shapeMap']['link-point-bottom'] = group.addShape('circle', {
attrs: (0, _tslib.__assign)((0, _tslib.__assign)({}, markStyle), {
x: 0,
y: height / 2,
r: markSize / 2 || markR || 5
}),
className: 'link-point-bottom',
name: 'link-point-bottom',
isAnchorPoint: true
});
}
},
drawLabel: function drawLabel(cfg, group) {
var _a = this.getOptions(cfg),
_b = _a.labelCfg,
labelCfg = _b === void 0 ? {} : _b,
_c = _a.logoIcon,
logoIcon = _c === void 0 ? {} : _c,
_d = _a.descriptionCfg,
descriptionCfg = _d === void 0 ? {} : _d;
var size = this.getSize(cfg);
var width = size[0];
var label = null;
var show = logoIcon.show,
w = logoIcon.width;
var offsetX = -width / 2 + labelCfg.offset;
if (show) {
offsetX = -width / 2 + w + labelCfg.offset;
}
var fontStyle = labelCfg.style;
var descriptionStyle = descriptionCfg.style,
descriptionPaddingTop = descriptionCfg.paddingTop;
if ((0, _util.isString)(cfg.description)) {
label = group.addShape('text', {
attrs: (0, _tslib.__assign)((0, _tslib.__assign)({}, fontStyle), {
x: offsetX,
y: -5,
text: cfg.label
}),
className: 'text-shape',
name: 'text-shape',
draggable: true,
labelRelated: true
});
group['shapeMap']['text-shape'] = label;
group['shapeMap']['rect-description'] = group.addShape('text', {
attrs: (0, _tslib.__assign)((0, _tslib.__assign)({}, descriptionStyle), {
x: offsetX,
y: 17 + (descriptionPaddingTop || 0),
text: cfg.description
}),
className: 'rect-description',
name: 'rect-description',
draggable: true,
labelRelated: true
});
} else {
label = group.addShape('text', {
attrs: (0, _tslib.__assign)((0, _tslib.__assign)({}, fontStyle), {
x: offsetX,
y: 7,
text: cfg.label
}),
className: 'text-shape',
name: 'text-shape',
draggable: true,
labelRelated: true
});
group['shapeMap']['text-shape'] = label;
}
return label;
},
/**
* 获取节点的样式,供基于该节点自定义时使用
* @param {Object} cfg 节点数据模型
* @return {Object} 节点的样式
*/
getShapeStyle: function getShapeStyle(cfg) {
var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style;
var strokeStyle = {
stroke: cfg.color
};
// 如果设置了color,则覆盖默认的stroke属性
var style = (0, _util.mix)({}, defaultStyle, strokeStyle);
var size = this.getSize(cfg);
var width = style.width || size[0];
var height = style.height || size[1];
var styles = (0, _tslib.__assign)({
x: -width / 2,
y: -height / 2,
width: width,
height: height
}, style);
return styles;
},
update: function update(cfg, item) {
var _a = this.mergeStyle || this.getOptions(cfg),
_b = _a.style,
style = _b === void 0 ? {} : _b,
_c = _a.labelCfg,
labelCfg = _c === void 0 ? {} : _c,
_d = _a.descriptionCfg,
descriptionCfg = _d === void 0 ? {} : _d;
var size = this.getSize(cfg);
var width = size[0];
var height = size[1];
var keyShape = item.get('keyShape');
keyShape.attr((0, _tslib.__assign)((0, _tslib.__assign)({}, style), {
x: -width / 2,
y: -height / 2,
width: width,
height: height
}));
var group = item.getContainer();
var logoIconShape = group['shapeMap']['rect-logo-icon'] || group.find(function (element) {
return element.get('className') === 'rect-logo-icon';
});
var currentLogoIconAttr = logoIconShape ? logoIconShape.attr() : {};
var logoIcon = (0, _util.mix)({}, currentLogoIconAttr, cfg.logoIcon);
var w = logoIcon.width;
if (w === undefined) {
w = this.options.logoIcon.width;
}
var show = cfg.logoIcon ? cfg.logoIcon.show : undefined;
var offset = labelCfg.offset;
var offsetX = -width / 2 + w + offset;
if (!show && show !== undefined) {
offsetX = -width / 2 + offset;
}
var label = group['shapeMap']['node-label'] || group.find(function (element) {
return element.get('className') === 'node-label';
});
var description = group['shapeMap']['rect-description'] || group.find(function (element) {
return element.get('className') === 'rect-description';
});
if (cfg.label) {
if (!label) {
group['shapeMap']['node-label'] = group.addShape('text', {
attrs: (0, _tslib.__assign)((0, _tslib.__assign)({}, labelCfg.style), {
x: offsetX,
y: cfg.description ? -5 : 7,
text: cfg.label
}),
className: 'node-label',
name: 'node-label',
draggable: true,
labelRelated: true
});
} else {
var cfgStyle = cfg.labelCfg ? cfg.labelCfg.style : {};
var labelStyle = (0, _util.mix)({}, label.attr(), cfgStyle);
if (cfg.label) labelStyle.text = cfg.label;
labelStyle.x = offsetX;
if ((0, _util.isString)(cfg.description)) labelStyle.y = -5;
if (description) {
description.resetMatrix();
description.attr({
x: offsetX
});
}
label.resetMatrix();
label.attr(labelStyle);
}
}
if ((0, _util.isString)(cfg.description)) {
var paddingTop = descriptionCfg.paddingTop;
if (!description) {
group['shapeMap']['rect-description'] = group.addShape('text', {
attrs: (0, _tslib.__assign)((0, _tslib.__assign)({}, descriptionCfg.style), {
x: offsetX,
y: 17 + (paddingTop || 0),
text: cfg.description
}),
className: 'rect-description',
name: 'rect-description',
draggable: true,
labelRelated: true
});
} else {
var cfgStyle = cfg.descriptionCfg ? cfg.descriptionCfg.style : {};
var descriptionStyle = (0, _util.mix)({}, description.attr(), cfgStyle);
if ((0, _util.isString)(cfg.description)) descriptionStyle.text = cfg.description;
descriptionStyle.x = offsetX;
description.resetMatrix();
description.attr((0, _tslib.__assign)((0, _tslib.__assign)({}, descriptionStyle), {
y: 17 + (paddingTop || 0)
}));
}
}
var preRectShape = group['shapeMap']['pre-rect'] || group.find(function (element) {
return element.get('className') === 'pre-rect';
});
if (preRectShape && !preRectShape.destroyed) {
var preRect = (0, _util.mix)({}, preRectShape.attr(), cfg.preRect);
preRectShape.attr((0, _tslib.__assign)((0, _tslib.__assign)({}, preRect), {
x: -width / 2,
y: -height / 2,
height: height
}));
}
if (logoIconShape && !logoIconShape.destroyed) {
if (!show && show !== undefined) {
logoIconShape.remove();
delete group['shapeMap']['pre-rect'];
} else {
var logoW = logoIcon.width,
h = logoIcon.height,
x = logoIcon.x,
y = logoIcon.y,
logoOffset = logoIcon.offset,
logoIconStyle = (0, _tslib.__rest)(logoIcon, ["width", "height", "x", "y", "offset"]);
logoIconShape.attr((0, _tslib.__assign)((0, _tslib.__assign)({}, logoIconStyle), {
x: x || -width / 2 + logoW + logoOffset,
y: y || -h / 2,
width: logoW,
height: h
}));
}
} else if (show) {
this.drawLogoIcon(cfg, group);
}
var stateIconShape = group['shapeMap']['rect-state-icon'] || group.find(function (element) {
return element.get('className') === 'rect-state-icon';
});
var currentStateIconAttr = stateIconShape ? stateIconShape.attr() : {};
var stateIcon = (0, _util.mix)({}, currentStateIconAttr, cfg.stateIcon);
if (stateIconShape) {
if (!stateIcon.show && stateIcon.show !== undefined) {
stateIconShape.remove();
delete group['shapeMap']['rect-state-icon'];
}
var stateW = stateIcon.width,
h = stateIcon.height,
x = stateIcon.x,
y = stateIcon.y,
stateOffset = stateIcon.offset,
stateIconStyle = (0, _tslib.__rest)(stateIcon, ["width", "height", "x", "y", "offset"]);
stateIconShape.attr((0, _tslib.__assign)((0, _tslib.__assign)({}, stateIconStyle), {
x: x || width / 2 - stateW + stateOffset,
y: y || -h / 2,
width: stateW,
height: h
}));
} else if (stateIcon.show) {
this.drawStateIcon(cfg, group);
}
this.updateLinkPoints(cfg, group);
},
getOptions: function getOptions(cfg, updateType) {
if (updateType === 'move') return cfg;
// different from baseShape, the config should be mixed when the updateType is not 'move'
return (0, _util.deepMix)({}, this.options, this.getCustomConfig(cfg) || {}, cfg);
}
}, 'single-node');