端到端 新拖拽到画布中的元素 增加元素类型属性 elementType

This commit is contained in:
qinoy 2023-06-30 17:52:14 +08:00
parent 28ffdedb99
commit 391ec0256d
5 changed files with 61 additions and 32 deletions

View File

@ -262,21 +262,23 @@ class NodeCloseAdjMatrix extends AbstractAdjMatrix {
public void buildAdjMatrix(){
for (JSONObject node : nodeList) {
String currentNodeId = node.getString("id");
JSONObject extendAttr = node.getJSONObject(SubProcessConst.EXTEND_ATTR);
// 当前节点的前置节点
JSONArray leadNodeArr = extendAttr.getJSONArray("leadNodeArr");
if (leadNodeArr.size() > 0){
for (Object o : leadNodeArr) {
String leadNodeId = (String) o;
addEdge(nodeIds.indexOf(leadNodeId), nodeIds.indexOf(currentNodeId));
if (node.containsKey(SubProcessConst.EXTEND_ATTR)){ // 新拖拽到画布的节点 如果还未连线或者子流程节点还未指定关联文件信息 就不存在扩展属性 extendAttr
JSONObject extendAttr = node.getJSONObject(SubProcessConst.EXTEND_ATTR);
// 当前节点的前置节点
JSONArray leadNodeArr = extendAttr.getJSONArray("leadNodeArr");
if (leadNodeArr.size() > 0){
for (Object o : leadNodeArr) {
String leadNodeId = (String) o;
addEdge(nodeIds.indexOf(leadNodeId), nodeIds.indexOf(currentNodeId));
}
}
}
// 当前节点的后置节点
JSONArray rearNodeArr = extendAttr.getJSONArray("rearNodeArr");
if (rearNodeArr.size() > 0){
for (Object o : rearNodeArr) {
String rearNodeId = (String) o;
addEdge(nodeIds.indexOf(currentNodeId), nodeIds.indexOf(rearNodeId));
// 当前节点的后置节点
JSONArray rearNodeArr = extendAttr.getJSONArray("rearNodeArr");
if (rearNodeArr.size() > 0){
for (Object o : rearNodeArr) {
String rearNodeId = (String) o;
addEdge(nodeIds.indexOf(currentNodeId), nodeIds.indexOf(rearNodeId));
}
}
}
}

View File

@ -388,21 +388,23 @@ class NodeExpandAdjMatrix extends AbstractAdjMatrix {
public void buildAdjMatrix(){
for (JSONObject node : nodeList) {
String currentNodeId = node.getString("id");
JSONObject extendAttr = node.getJSONObject(SubProcessConst.EXTEND_ATTR);
// 当前节点的前置节点
JSONArray leadNodeArr = extendAttr.getJSONArray("leadNodeArr");
if (leadNodeArr.size() > 0){
for (Object o : leadNodeArr) {
String leadNodeId = (String) o;
addEdge(nodeIds.indexOf(leadNodeId), nodeIds.indexOf(currentNodeId));
if (node.containsKey(SubProcessConst.EXTEND_ATTR)){ // 新拖拽到画布的节点 如果还未连线或者子流程节点还未指定关联文件信息 就不存在扩展属性 extendAttr
JSONObject extendAttr = node.getJSONObject(SubProcessConst.EXTEND_ATTR);
// 当前节点的前置节点
JSONArray leadNodeArr = extendAttr.getJSONArray("leadNodeArr");
if (leadNodeArr.size() > 0){
for (Object o : leadNodeArr) {
String leadNodeId = (String) o;
addEdge(nodeIds.indexOf(leadNodeId), nodeIds.indexOf(currentNodeId));
}
}
}
// 当前节点的后置节点
JSONArray rearNodeArr = extendAttr.getJSONArray("rearNodeArr");
if (rearNodeArr.size() > 0){
for (Object o : rearNodeArr) {
String rearNodeId = (String) o;
addEdge(nodeIds.indexOf(currentNodeId), nodeIds.indexOf(rearNodeId));
// 当前节点的后置节点
JSONArray rearNodeArr = extendAttr.getJSONArray("rearNodeArr");
if (rearNodeArr.size() > 0){
for (Object o : rearNodeArr) {
String rearNodeId = (String) o;
addEdge(nodeIds.indexOf(currentNodeId), nodeIds.indexOf(rearNodeId));
}
}
}
}

View File

@ -371,6 +371,15 @@ var Designer = {
}
}
b.attr("class", "shape_box");
if (methodId == "process.subprocess") {
// 如果当前拖拽到画布的图形是子流程 则渲染节点展开图标
if (g.name == 'subProcess'){
window.subProcess.shapeOpenIconRender(g);
}
// 判断当前图形的元素类型 ElementType.INNER_NODE ElementType.OUTER_NODE
let elementType = window.subProcess.calculateShapeElementType(g);
g.elementType = elementType;
}
Designer.events.push("created", g);
Model.add(g);
var S = Utils.getShapeContext(g.id);
@ -458,10 +467,6 @@ var Designer = {
Model.update(M)
}
}
// 如果当前拖拽到画布的图形是子流程 则渲染节点展开图标
if (g.name == 'subProcess') {
window.subProcess.shapeOpenIconRender(g);
}
Utils.unselect();
Utils.selectShape(g.id);
MessageSource.commit();

View File

@ -340,5 +340,25 @@ class SubProcess {
}
return false
}
// 根据当前元素的坐标设置元素类型
calculateShapeElementType(shape){
let elementType = "OUTER_NODE"; // 默认指定外部节点
let props = shape.props;
let elements = Model.define.elements;
for (let key in elements) {
let ele = elements[key];
if (ele.elementType == "SCOPE_NODE"){ // 查找范围框元素
let scopeX = ele.props.x;
let scopeY = ele.props.y;
let scopeW = ele.props.w;
let scopeH = ele.props.h;
if (scopeX < props.x && props.x < scopeX + scopeW && scopeY < props.y && props.y < scopeY + scopeH){
elementType = "INNER_NODE";
}
}
}
return elementType;
}
}