wetrade-design
Version:
一款多语言支持Vue3的UI框架
675 lines (673 loc) • 23.1 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.stgyFlowProps = exports.default = void 0;
var _vue = require("vue");
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _type = require("../_util/type");
var _graph = _interopRequireDefault(require("./utils/graph"));
var _utils = require("./utils");
var _useConfigInject2 = _interopRequireDefault(require("../_util/hooks/useConfigInject"));
var _Node = _interopRequireDefault(require("./Node"));
var _Link = _interopRequireDefault(require("./Link"));
var _tool = require("./utils/tool");
var _classNames2 = _interopRequireDefault(require("../_util/classNames"));
var _scrollbar = _interopRequireDefault(require("../scrollbar"));
var _enum = require("../_util/enum");
var _raf = _interopRequireDefault(require("../_util/raf"));
// import { TreeNodeType } from './utils/types';
var stgyFlowProps = function stgyFlowProps() {
return {
relationMark: {
type: String,
default: 'id'
},
startMark: {
type: String,
default: 'startId'
},
endMark: {
type: String,
default: 'endId'
},
draggable: {
type: Boolean,
default: false
},
// linkAddable: {
// type: Boolean,
// default: true,
// },
linkEditable: {
type: Boolean,
default: true
},
// hasMarkLine: {
// type: Boolean,
// default: true,
// },
linkDesc: {
type: Object,
default: function _default() {}
},
linkStyle: {
type: Object,
default: function _default() {
return {
hover: '#FF0000',
color: '#666666',
textColor: '#666666',
textHover: '#FF0000',
font: '14px Arial',
dotted: false,
lineDash: [4, 4],
background: 'rgba(255,255,255,0.6)'
};
}
},
linkBaseStyle: {
type: Object,
default: function _default() {
return {};
}
},
markLineColor: {
type: String,
default: '#55abfc'
},
origin: {
type: Array,
default: function _default() {
return [0, 0];
}
},
nodeList: {
type: Array,
default: function _default() {
return [];
}
},
linkList: {
type: Array,
default: function _default() {
return [];
}
},
modelPathList: {
type: Array,
default: function _default() {
return [];
}
},
graphMenu: {
type: Array,
default: function _default() {
return [];
}
},
nodeMenu: {
type: Array,
default: function _default() {
return [];
}
},
linkMenu: {
type: Array,
default: function _default() {
return [];
}
},
selectedNodeId: {
type: Array,
default: function _default() {
return [];
}
},
selectedActiveId: {
type: Number,
default: -1
},
linkPadding: {
type: Number,
default: 50
},
enterIntercept: {
type: Function,
default: function _default() {
return true;
}
},
outputIntercept: {
type: Function,
default: function _default() {
return true;
}
},
merge: {
type: Boolean,
default: false
},
menus: {
type: Array,
default: function _default() {
return [];
}
},
readonly: {
type: Boolean,
default: false
},
quotationColor: {
type: Number,
default: _enum.QuotationColor.RED_UP_GREEN_DOWN
}
};
};
exports.stgyFlowProps = stgyFlowProps;
var StgyFlow = (0, _vue.defineComponent)({
compatConfig: {
MODE: 3
},
name: 'WdStgyFlow',
props: stgyFlowProps(),
emits: ['node-select', 'node-delete', 'node-insert', 'link-select', 'menu-click', 'node-append', 'node-append-before', 'node-click'],
slots: ['node-header', 'node-content'],
setup: function setup(props, _ref) {
var slots = _ref.slots,
emit = _ref.emit,
expose = _ref.expose;
var _useConfigInject = (0, _useConfigInject2.default)('stgy-flow', props),
prefixCls = _useConfigInject.prefixCls;
var _toRefs = (0, _vue.toRefs)(props),
relationMark = _toRefs.relationMark,
startMark = _toRefs.startMark,
endMark = _toRefs.endMark,
origin = _toRefs.origin,
outputIntercept = _toRefs.outputIntercept,
draggable = _toRefs.draggable,
linkEditable = _toRefs.linkEditable,
nodeList = _toRefs.nodeList,
linkList = _toRefs.linkList,
linkPadding = _toRefs.linkPadding,
linkBaseStyle = _toRefs.linkBaseStyle,
linkDesc = _toRefs.linkDesc,
linkStyle = _toRefs.linkStyle,
selectedNodeId = _toRefs.selectedNodeId,
selectedActiveId = _toRefs.selectedActiveId,
merge = _toRefs.merge,
modelPathList = _toRefs.modelPathList,
menus = _toRefs.menus,
readonly = _toRefs.readonly,
quotationColor = _toRefs.quotationColor;
var state = (0, _vue.reactive)({
graph: new _graph.default({
relationMark: relationMark.value,
startMark: startMark.value,
endMark: endMark.value,
origin: origin.value
}),
menuConf: {
visible: false,
position: [0, 0],
source: null,
list: []
},
moveNodeConf: {
isMove: false,
sourceNode: null,
offset: null,
verticalList: [],
horizontalList: [],
markLine: [],
startNode: null,
targetNode: null,
direction: null,
disabledDrag: false,
disabledDragging: false // 是否禁用拖动过程
},
moveAllConf: {
isMove: false,
downPosition: [0, 0],
origin: []
},
temEdgeConf: {
visible: false,
link: null
},
loaded: false,
clientWidth: 0,
clientHeight: 0,
flowRef: null,
scrollRef: null,
renderNodeList: []
});
var _toRefs2 = (0, _vue.toRefs)(state),
graph = _toRefs2.graph,
menuConf = _toRefs2.menuConf,
moveNodeConf = _toRefs2.moveNodeConf,
moveAllConf = _toRefs2.moveAllConf,
temEdgeConf = _toRefs2.temEdgeConf,
scrollRef = _toRefs2.scrollRef,
renderNodeList = _toRefs2.renderNodeList;
var flowRef = (0, _vue.ref)();
(0, _vue.onMounted)(function () {
document.addEventListener('mousedown', docMousedown);
document.addEventListener('mousemove', docMousemove);
(0, _vue.nextTick)(function () {
handlerShrinkNode();
});
});
(0, _vue.onBeforeUnmount)(function () {
document.removeEventListener('mousedown', docMousedown);
document.removeEventListener('mousemove', docMousemove);
});
(0, _vue.watch)(function () {
return graph.value.mouseOnLink;
}, function () {
if (readonly.value) return;
if (graph.value.mouseOnLink) {
document.body.style.cursor = 'pointer';
} else {
document.body.style.cursor = '';
}
});
(0, _vue.watch)(function () {
return origin.value;
}, function () {
graph.value.origin = origin.value;
});
(0, _vue.watch)(function () {
return nodeList.value;
}, function () {
handlerShrinkNode();
updateContainerRect();
}, {
deep: true
});
(0, _vue.watch)(function () {
return linkList.value;
}, function () {
graph.value.initLink(linkList.value);
}, {
deep: true
});
(0, _vue.watch)(function () {
return modelPathList.value;
}, function () {
handlerShrinkNode();
}, {
deep: true
});
var cacheWidth = 200;
var cacheHeight = 100;
var updateContainerRect = function updateContainerRect() {
var _renderNodeList$value;
var rect = (_renderNodeList$value = renderNodeList.value) === null || _renderNodeList$value === void 0 ? void 0 : _renderNodeList$value.reduce(function (prev, item) {
var _item$coordinate = item === null || item === void 0 ? void 0 : item.coordinate,
_item$coordinate2 = (0, _slicedToArray2.default)(_item$coordinate, 2),
x = _item$coordinate2[0],
y = _item$coordinate2[1];
var w = x + item.width || 0;
if (w > prev.width) {
prev.width = w;
}
var h = y + item.height || 0;
if (h > prev.height) {
prev.height = h;
}
return prev;
}, {
width: 0,
height: 0
});
var d = document.querySelector(".".concat(prefixCls.value));
if (d) {
d.style.width = "".concat(rect.width + cacheWidth, "px");
d.style.height = "".concat(rect.height + cacheHeight, "px");
}
};
var docMousedown = function docMousedown(evt) {
if (linkEditable.value) {
graph.value.dispatch({
type: 'mousedown',
evt: evt
}, true);
}
};
var offsetX = 0;
var offsetY = 0;
var offsetLeft = 0;
var offsetTop = 0;
var draggableEl = null;
var dragFlag = false;
var nodeMousedown = function nodeMousedown(evt, node) {
evt.preventDefault();
dragFlag = false;
var boxEl = evt.target.closest(".".concat(prefixCls.value, "-node"));
var el = boxEl.children[0];
offsetX = evt.clientX - el.getBoundingClientRect().left;
offsetY = evt.clientY - el.getBoundingClientRect().top;
moveNodeConf.value.disabledDrag = (0, _tool.disabledNodeDrag)({
sourceNode: node,
linkList: linkList.value,
nodeList: nodeList.value,
modelPathList: modelPathList.value,
draggable: draggable.value
});
if (!moveNodeConf.value.disabledDrag) {
draggableEl = el.cloneNode(true);
window.requestAnimationFrame(function () {
var _flowRef$value;
draggableEl.style.position = 'absolute';
draggableEl.style.zIndex = '10';
draggableEl.style.opacity = '0';
draggableEl.style.width = el.offsetWidth + 'px';
draggableEl.style.height = el.offsetHeight + 'px';
draggableEl && ((_flowRef$value = flowRef.value) === null || _flowRef$value === void 0 ? void 0 : _flowRef$value.appendChild(draggableEl));
});
}
moveNodeConf.value.sourceNode = node;
document.addEventListener('mousemove', docNodeMove);
document.addEventListener('mouseup', doceNodeUp);
};
var docMousemove = function docMousemove(evt) {
if (linkEditable.value) {
graph.value.dispatch({
type: 'mousemove',
evt: evt
}, true);
}
};
var docNodeMove = function docNodeMove(evt) {
evt.preventDefault();
evt.stopPropagation();
if (moveNodeConf.value.disabledDrag) return;
dragFlag = true;
var scrollWrap = scrollRef.value.wrapRef;
var boxLeft = scrollWrap.getBoundingClientRect().left;
var boxTop = scrollWrap.getBoundingClientRect().top;
offsetLeft = evt.clientX - offsetX - boxLeft + scrollWrap.scrollLeft;
offsetTop = evt.clientY - offsetY - boxTop + scrollWrap.scrollTop;
window.requestAnimationFrame(function () {
if (!draggableEl) return;
draggableEl.style.left = offsetLeft + 'px';
draggableEl.style.top = offsetTop + 'px';
draggableEl.style.opacity = '1';
onDrag({
// offset: [offsetLeft + offsetX, offsetTop + offsetY], // 鼠标位置
offset: [offsetLeft, offsetTop],
sourceNode: moveNodeConf.value.sourceNode
});
});
};
var doceNodeUp = function doceNodeUp(evt) {
var _flowRef$value2;
evt.preventDefault();
draggableEl && ((_flowRef$value2 = flowRef.value) === null || _flowRef$value2 === void 0 ? void 0 : _flowRef$value2.removeChild(draggableEl));
draggableEl = null;
dragFlag && onDragEnd();
document.removeEventListener('mousemove', docNodeMove);
document.removeEventListener('mouseup', doceNodeUp);
};
// 鼠标松开时添加连线
var nodeMouseup = function nodeMouseup() {
if (!merge.value && !dragFlag) {
emit('node-click', moveNodeConf.value.sourceNode);
}
};
var nodeIntercept = function nodeIntercept(node) {
return function () {
return outputIntercept.value(node, graph.value);
};
};
var menuItemSelect = function menuItemSelect() {
menuConf.value.visible = false;
};
var selectAllMaskMouseDown = function selectAllMaskMouseDown(evt) {
moveAllConf.value.isMove = true;
moveAllConf.value.origin = (0, _toConsumableArray2.default)(graph.value.origin);
moveAllConf.value.downPosition = [evt.clientX, evt.clientY];
};
var toJSON = function toJSON() {
return graph.value.toJSON();
};
var getMouseCoordinate = function getMouseCoordinate(clientX, clientY) {
var offset = (0, _utils.getOffset)({
clientX: clientX,
clientY: clientY
}, flowRef.value);
return (0, _utils.vector)(offset).minus(graph.value.origin).end;
};
var addNode = function addNode(options) {
return graph.value.addNode(options);
};
var nodeDelete = function nodeDelete(node) {
// deleteNode({
// nodeId: node.id,
// modelPathList: modelPathList.value,
// nodeList: nodeList.value,
// linkList: linkList.value,
// });
emit('node-delete', node);
};
var nodeShrink = function nodeShrink(node) {
(0, _tool.shrinkOrExpandNode)({
nodeId: node.id,
nodeList: nodeList.value,
modelPathList: modelPathList.value
});
handlerShrinkNode();
};
var handlerShrinkNode = function handlerShrinkNode() {
renderNodeList.value = (0, _tool.initShrinkNode)({
modelPathList: modelPathList.value,
nodeList: nodeList.value
});
graph.value.initNode(renderNodeList.value);
graph.value.initLink(linkList.value);
};
var nodeSelect = function nodeSelect(_ref2) {
var nodeId = _ref2.nodeId,
isLastNode = _ref2.isLastNode;
emit('node-select', {
nodeId: nodeId,
isLastNode: isLastNode
});
};
var linkSelect = function linkSelect(activeId) {
emit('link-select', activeId);
};
var menuClick = function menuClick(_ref3) {
var type = _ref3.type,
key = _ref3.key,
node = _ref3.node,
link = _ref3.link;
emit('menu-click', {
type: type,
key: key,
node: node,
link: link
});
};
var updateNodeData = function updateNodeData(node, newNode) {
(0, _extends2.default)(node, newNode);
};
var rafRef = (0, _vue.ref)(null);
var onDrag = function onDrag(_ref4) {
var sourceNode = _ref4.sourceNode,
offset = _ref4.offset;
_raf.default.cancel(rafRef.value);
rafRef.value = (0, _raf.default)(function () {
var _findNodeByCoordinate = (0, _tool.findNodeByCoordinate)({
nodeList: nodeList.value,
modelPathList: modelPathList.value,
offset: offset
}),
node = _findNodeByCoordinate.node,
direction = _findNodeByCoordinate.direction;
var _appendDragNode = (0, _tool.appendDragNode)({
sourceNode: sourceNode,
direction: direction,
targetNode: node,
nodeList: nodeList.value,
modelPathList: modelPathList.value,
linkList: linkList.value
}),
disabled = _appendDragNode.disabled,
startNode = _appendDragNode.startNode;
moveNodeConf.value.startNode = startNode;
moveNodeConf.value.targetNode = node;
moveNodeConf.value.direction = direction;
moveNodeConf.value.disabledDragging = disabled;
}, 5);
};
var onDragEnd = function onDragEnd() {
var _moveNodeConf$value;
_raf.default.cancel(rafRef.value);
rafRef.value = null;
(0, _tool.deleteDragNodeAndLink)({
nodeList: nodeList.value,
linkList: linkList.value,
modelPathList: modelPathList.value
});
(0, _tool.updateDragNode)({
sourceNode: moveNodeConf.value.sourceNode,
startNode: (_moveNodeConf$value = moveNodeConf.value) === null || _moveNodeConf$value === void 0 ? void 0 : _moveNodeConf$value.startNode,
targetNode: moveNodeConf.value.targetNode,
nodeList: nodeList.value,
linkList: linkList.value,
modelPathList: modelPathList.value,
direction: moveNodeConf.value.direction,
disabled: moveNodeConf.value.disabledDragging
});
moveNodeConf.value.sourceNode = null;
moveNodeConf.value.targetNode = null;
};
// 导出方法
expose({
menuItemSelect: menuItemSelect,
selectAllMaskMouseDown: selectAllMaskMouseDown,
toJSON: toJSON,
getMouseCoordinate: getMouseCoordinate,
addNode: addNode,
mergeNode: _tool.mergeNode,
cancelMerge: _tool.cancelMerge,
insertNode: _tool.insertNode,
deleteNode: _tool.deleteNode,
appendNode: _tool.appendNode,
shrinkOrExpandNode: _tool.shrinkOrExpandNode,
lightenPath: _tool.lightenPath,
changeNodeHeight: _tool.changeNodeHeight,
checkMergeNodeList: _tool.checkMergeNodeList,
editMerge: _tool.editMerge
});
return function () {
var _graph$value$linkList, _graph$value$nodeList, _classNames;
// 绘制连线
// const flowLine = () => {
// return line;
// };
var flowLine = [];
if (((_graph$value$linkList = graph.value.linkList) === null || _graph$value$linkList === void 0 ? void 0 : _graph$value$linkList.length) > 0) {
graph.value.linkList.forEach(function (link, idx) {
flowLine.push((0, _vue.createVNode)(_vue.Fragment, null, [(0, _vue.createVNode)(_Link.default, {
"index": idx,
"padding": linkPadding.value,
"graph": graph.value,
"link": link,
"merge": merge.value,
"key": link.key,
"selectedActiveId": selectedActiveId.value,
"link-base-style": linkBaseStyle.value,
"link-desc": linkDesc,
"link-style": linkStyle,
"linkSelect": linkSelect,
"menus": menus.value,
"menuClick": menuClick,
"readonly": readonly.value,
"getMenuPopupContainer": function getMenuPopupContainer() {
return flowRef.value;
},
"nodeList": nodeList.value,
"modelPathList": modelPathList.value
}, null)]));
});
}
// 获取节点
// const flowNode = () => {
// return node;
// };
var flowNode = [];
if (((_graph$value$nodeList = graph.value.nodeList) === null || _graph$value$nodeList === void 0 ? void 0 : _graph$value$nodeList.length) > 0) {
graph.value.nodeList.forEach(function (node, idx) {
var _node$meta, _node$meta2, _node$meta2$extParam;
flowNode.push((0, _vue.createVNode)(_vue.Fragment, null, [(0, _vue.createVNode)(_Node.default, {
"index": idx,
"node": node,
"link-list": linkList.value,
"graph": graph.value,
"key": node.id,
"is-move": node === moveNodeConf.value.sourceNode,
"is-tem-edge": temEdgeConf.value.visible,
"node-intercept": nodeIntercept(node),
"node-drop": draggable.value,
"class-name": (_node$meta = node.meta) === null || _node$meta === void 0 ? void 0 : _node$meta.className,
"merge": merge.value,
"selected-node-id": selectedNodeId.value,
"nodeList": nodeList.value,
"modelPathList": modelPathList.value,
"nodeMousedown": nodeMousedown,
"nodeMouseup": nodeMouseup,
"nodeSelect": nodeSelect,
"nodeShrink": nodeShrink,
"nodeDelete": nodeDelete,
"onDrag": onDrag,
"onDragEnd": onDragEnd,
"menuClick": menuClick,
"menus": menus.value,
"readonly": readonly.value,
"scrollRef": scrollRef.value,
"dragging": (_node$meta2 = node.meta) === null || _node$meta2 === void 0 ? void 0 : (_node$meta2$extParam = _node$meta2.extParam) === null || _node$meta2$extParam === void 0 ? void 0 : _node$meta2$extParam.isDragging,
"getMenuPopupContainer": function getMenuPopupContainer() {
return flowRef.value;
}
}, {
header: function header() {
var _slots$nodeHeader;
return slots === null || slots === void 0 ? void 0 : (_slots$nodeHeader = slots.nodeHeader) === null || _slots$nodeHeader === void 0 ? void 0 : _slots$nodeHeader.call(slots, node);
},
content: function content() {
var _slots$nodeContent;
return slots === null || slots === void 0 ? void 0 : (_slots$nodeContent = slots.nodeContent) === null || _slots$nodeContent === void 0 ? void 0 : _slots$nodeContent.call(slots, node);
},
tools: function tools() {
var _slots$nodeToolsProps;
return slots === null || slots === void 0 ? void 0 : (_slots$nodeToolsProps = slots.nodeToolsProps) === null || _slots$nodeToolsProps === void 0 ? void 0 : _slots$nodeToolsProps.call(slots, {
node: node,
updateNodeData: updateNodeData
});
}
})]));
});
}
return (0, _vue.createVNode)(_scrollbar.default, {
"ref": scrollRef,
"view-class": "".concat(prefixCls.value, "-view")
}, {
default: function _default() {
return [(0, _vue.createVNode)("div", {
"class": (0, _classNames2.default)((_classNames = {}, (0, _defineProperty2.default)(_classNames, "".concat(prefixCls.value), true), (0, _defineProperty2.default)(_classNames, "".concat(prefixCls.value, "-readonly"), readonly.value), (0, _defineProperty2.default)(_classNames, "".concat(prefixCls.value, "-gu"), quotationColor.value === _enum.QuotationColor.GREEN_UP_RED_DOWN), (0, _defineProperty2.default)(_classNames, "".concat(prefixCls.value, "-merge"), merge.value), _classNames)),
"ref": flowRef
}, [flowLine, flowNode])];
}
});
};
}
});
var _default2 = (0, _type.withInstall)(StgyFlow);
exports.default = _default2;