From 75bf8f0942bee9652ed24b1c5abc72e267d23ea4 Mon Sep 17 00:00:00 2001 From: qinoy Date: Tue, 27 Jun 2023 18:01:32 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AB=AF=E5=88=B0=E7=AB=AF=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=20=E8=AE=BE=E8=AE=A1=E5=99=A8=E9=83=A8=E5=88=86=E8=8C=83?= =?UTF-8?q?=E5=9B=B4=E6=A1=86=E4=BC=98=E5=8C=96=20=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E4=BA=A4=E4=BA=92=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...oft.apps.coe.method.process.subprocess.jar | Bin 86116 -> 88227 bytes .../process.subprocess/diagram.attribute.xml | 1 + .../subprocess/constant/ElementType.java | 28 +++++++ .../constant/LinkerDefConstant.java | 5 ++ .../subprocess/constant/SubProcessConst.java | 2 + .../graph/GraphNodeCloseHandle.java | 4 + .../graph/GraphNodeExpandHandle.java | 16 ++++ .../process/subprocess/graph/GraphRender.java | 38 ++++++++- .../scripts/diagraming/designer.core.js | 71 ++++++++++++++++- .../diagraming/designer.method.subprocess.js | 73 +++++++++++++++++- 10 files changed, 229 insertions(+), 9 deletions(-) create mode 100644 com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/constant/ElementType.java diff --git a/com.actionsoft.apps.coe.method.process.subprocess/lib/com.actionsoft.apps.coe.method.process.subprocess.jar b/com.actionsoft.apps.coe.method.process.subprocess/lib/com.actionsoft.apps.coe.method.process.subprocess.jar index bcfd6f8b1897456439210755efc0d488828b4c26..3b6cf9827d46aa1562fab8eb7954203dec471dca 100644 GIT binary patch delta 32577 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 HMZx|bUwfYf delta 30562 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

I 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 + diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/constant/ElementType.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/constant/ElementType.java new file mode 100644 index 00000000..f1402402 --- /dev/null +++ b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/constant/ElementType.java @@ -0,0 +1,28 @@ +package com.actionsoft.apps.coe.method.process.subprocess.constant; + +/** + * @author oYang + * @Description 端到端模型中 用来区分元素类别是外部元素还是内部元素 + * @createTime 2023年06月26日 14:36:00 + */ +public enum ElementType { + + SCOPE_NODE("scopeNode", "范围标识框节点"), + INNER_NODE("innerNode","内部节点"), + OUTER_NODE("outerNode","外部节点"), + INNER_LINKER("innerLinker","内部连线"), + OUTER_LINKER("outerLinker","外部连线"), + CROSS_LINKER("crossLinker","跨越范围标识框的连线"); + + private final String value; + private final String label; + + ElementType(String value, String label) { + this.value = value; + this.label = label; + } + + public String getValue() { + return value; + } +} diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/constant/LinkerDefConstant.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/constant/LinkerDefConstant.java index 302da2e3..05d0bc6c 100644 --- a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/constant/LinkerDefConstant.java +++ b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/constant/LinkerDefConstant.java @@ -10,4 +10,9 @@ public class LinkerDefConstant { public static final String linker = "{\"fontStyle\":{\"fontFamily\":\"Arial\",\"size\":13,\"color\":\"50,50,50\",\"underline\":false,\"textAlign\":\"center\",\"bold\":false,\"italic\":false},\"points\":[],\"dataAttributes\":[{\"shapeDesc\":\"\",\"name\":\"AWSProperties\",\"id\":\"AWSPropertiesID\",\"type\":\"string\",\"category\":\"default\",\"value\":\"\"}],\"props\":{\"zindex\":0},\"linkerType\":\"broken\",\"lineStyle\":{\"lineStyle\":\"solid\",\"lineColor\":\"50,50,50\",\"beginArrowStyle\":\"none\",\"endArrowStyle\":\"solidArrow\",\"lineWidth\":1},\"name\":\"linker\",\"orderIndex\":0,\"from\":{\"x\":0,\"y\":0,\"angle\":0,\"id\":\"\"},\"id\":\"\",\"text\":\"\",\"to\":{\"x\":0,\"y\":0,\"angle\":0,\"id\":\"\"},\"locked\":false,\"group\":\"\"}"; + + // 总图中节点展开后的连线分类标识 节点展开后的内部连线元素 + public static final String LINKER_CATEGORY_INNER = "inner"; + // 总图中节点展开后的连线分类标识 节点展开后的外部连线元素 + public static final String LINKER_CATEGORY_OUTER = "outer"; } diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/constant/SubProcessConst.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/constant/SubProcessConst.java index 0c773c73..b2d0510c 100644 --- a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/constant/SubProcessConst.java +++ b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/constant/SubProcessConst.java @@ -23,6 +23,8 @@ public interface SubProcessConst { // 形状属性 子流程模型节点 String CHILD_PROCESS = "child_process"; + // 形状属性 关联架构 + String RELATION_FRAMEWORK = "relation_framework"; // 子流程图形宽度 double SUB_PROCESS_SHAPE_W = 100.0; diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeCloseHandle.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeCloseHandle.java index 3230a2c3..60c07541 100644 --- a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeCloseHandle.java +++ b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeCloseHandle.java @@ -1,5 +1,6 @@ package com.actionsoft.apps.coe.method.process.subprocess.graph; +import com.actionsoft.apps.coe.method.process.subprocess.constant.ElementType; import com.actionsoft.apps.coe.method.process.subprocess.constant.LinkerDefConstant; import com.actionsoft.apps.coe.method.process.subprocess.constant.SubProcessConst; import com.actionsoft.apps.coe.method.process.subprocess.graph.component.AbstractAdjMatrix; @@ -111,6 +112,7 @@ public class GraphNodeCloseHandle { JSONArray linkers = linkerRender.toAssembleLinker(direction); for (Object o : linkers) { JSONObject linker = (JSONObject) o; + linker.put("elementType", ElementType.OUTER_LINKER.name()); definitionHandle.addEle(linker.getString("id"), linker); } @@ -299,6 +301,8 @@ public class GraphNodeCloseHandle { subProcessNodeProps.put("zindex", scopeLimitationShape.getJSONObject("props").getIntValue("zindex")); subProcessNode.put("text", PALRepositoryCache.getCache().get(relationFileId).getName()); + subProcessNode.put("elementType", ElementType.OUTER_NODE.name()); + subProcessNode.put("dataAttributes", scopeLimitationShape.getJSONArray("dataAttributes")); return subProcessNode; } diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeExpandHandle.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeExpandHandle.java index 06636587..7f04417a 100644 --- a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeExpandHandle.java +++ b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeExpandHandle.java @@ -1,5 +1,6 @@ package com.actionsoft.apps.coe.method.process.subprocess.graph; +import com.actionsoft.apps.coe.method.process.subprocess.constant.ElementType; import com.actionsoft.apps.coe.method.process.subprocess.constant.LinkerDefConstant; import com.actionsoft.apps.coe.method.process.subprocess.constant.SubProcessConst; import com.actionsoft.apps.coe.method.process.subprocess.graph.component.AbstractAdjMatrix; @@ -102,6 +103,16 @@ public class GraphNodeExpandHandle { scopeLimitationShape.put("relationFileName", PALRepositoryCache.getCache().get(relationFileId).getName()); + scopeLimitationShape.put("elementType", ElementType.SCOPE_NODE.name()); + + // 计算当前范围框的最小范围 方便在设计器画布中 针对范围框大小改变做判断 + JSONObject minRange = new JSONObject(); + minRange.put("x1", x); + minRange.put("y1", y); + minRange.put("x2", x + scope[2]); + minRange.put("y2", y + scope[3]); + scopeLimitationShape.put("minRange", minRange); + this.scopeLimitationShape = scopeLimitationShape; // 通知其它节点位置更新 @@ -165,6 +176,7 @@ public class GraphNodeExpandHandle { JSONArray linkers = linkerRender.toAssembleLinker(direction); for (Object o : linkers) { JSONObject linker = (JSONObject) o; + linker.put("elementType", ElementType.OUTER_LINKER.name()); definitionHandle.addEle(linker.getString("id"), linker); } @@ -209,10 +221,14 @@ public class GraphNodeExpandHandle { point.put("x", point.getDoubleValue("x") + distanceX); point.put("y", point.getDoubleValue("y") + distanceY); } + + ele.put("elementType", ElementType.INNER_LINKER.name()); }else { // 图形 JSONObject props = ele.getJSONObject("props"); props.put("x", distanceX + props.getDoubleValue("x")); props.put("y", distanceY + props.getDoubleValue("y")); + + ele.put("elementType", ElementType.INNER_NODE.name()); } definitionHandle.addEle(key, ele); diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphRender.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphRender.java index 7122ff6d..8ce372f3 100644 --- a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphRender.java +++ b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphRender.java @@ -1,5 +1,6 @@ package com.actionsoft.apps.coe.method.process.subprocess.graph; +import com.actionsoft.apps.coe.method.process.subprocess.constant.ElementType; import com.actionsoft.apps.coe.method.process.subprocess.constant.SubProcessConst; import com.actionsoft.apps.coe.method.process.subprocess.mode.Node; import com.actionsoft.apps.coe.pal.pal.method.PALMethodManager; @@ -76,6 +77,8 @@ public class GraphRender { subProcessNodeProps.put("y", position[i][1]); subProcessNodeProps.put("zindex", zIndex++); subProcessNode.put("text", repositoryModel.getName()); + // 增加元素类型属性 + subProcessNode.put("elementType", ElementType.OUTER_NODE.name()); // 处理子流程模型节点形状属性 JSONArray dataAttributes = subProcessNode.getJSONArray("dataAttributes"); @@ -86,7 +89,7 @@ public class GraphRender { List attributes = PALMethodCache.getPALMethodModelById(SubProcessConst.SUB_PROCESS_METHOD_ID).getAttributes(); Optional optional = attributes.stream().filter(attr -> attr.getKey().equals(SubProcessConst.CHILD_PROCESS)).findFirst(); if (!optional.isPresent()) - throw new AWSException("端到端总图中子流程节点上需配置子流程标识属性"); + throw new AWSException("端到端总图中子流程节点上需配置【子流程模型】形状属性"); PALMethodAttributeModel attributeModel = optional.get(); JSONObject data = new JSONObject(); data.put("isRequired", attributeModel.getIsRequired()); @@ -101,9 +104,33 @@ public class GraphRender { data.put("key", attributeModel.getKey()); data.put("desc", attributeModel.getDesc()); attributesJsonArr.add(data); + + PALMethodAttributeModel relaionFrameAttributeModel = attributes.stream().filter(attr -> attr.getKey().equals(SubProcessConst.RELATION_FRAMEWORK)).findFirst().orElse(null); + if (relaionFrameAttributeModel == null) + throw new AWSException("端到端总图中子流程节点上需配置【关联架构】形状属性"); + JSONObject dataFrame = new JSONObject(); + dataFrame.put("isRequired", relaionFrameAttributeModel.getIsRequired()); + dataFrame.put("ref", relaionFrameAttributeModel.getRef()); + dataFrame.put("readonly", relaionFrameAttributeModel.getReadonly()); + dataFrame.put("scope", relaionFrameAttributeModel.getScope()); + dataFrame.put("name", relaionFrameAttributeModel.getNewTitle()); + dataFrame.put("id", relaionFrameAttributeModel.getKey()); + dataFrame.put("type", relaionFrameAttributeModel.getType()); + dataFrame.put("value", ""); + dataFrame.put("groupPath", relaionFrameAttributeModel.getGroupPath()); + dataFrame.put("key", relaionFrameAttributeModel.getKey()); + dataFrame.put("desc", relaionFrameAttributeModel.getDesc()); + attributesJsonArr.add(dataFrame); } } - handleShapeAttrChildSubProcess(nodeId, repositoryModel.getName(), nodeList.get(i).getId()); + + // 处理总图中子流程节点的形状属性【子流程模型】 + handleShapeAttrChildSubProcess(nodeId, repositoryModel.getName(), nodeList.get(i).getId(), SubProcessConst.CHILD_PROCESS); + + // 处理总图中子流程节点的形状属性【关联架构】 + if (repositoryModel.getParentId().length() == 36){ + handleShapeAttrChildSubProcess(nodeId, repositoryModel.getName(), repositoryModel.getParentId(), SubProcessConst.RELATION_FRAMEWORK); + } elements.put(nodeId, subProcessNode); } @@ -112,14 +139,14 @@ public class GraphRender { CoeDesignerAPIManager.getInstance().storeDefinition(this.baseModel); } - private void handleShapeAttrChildSubProcess(String shapeId, String shapeText, String relationFileId){ + private void handleShapeAttrChildSubProcess(String shapeId, String shapeText, String relationFileId, String arrtId){ DesignerShapeRelationDao shapeRelationDao = new DesignerShapeRelationDao(); DesignerShapeRelationModel relationModel = new DesignerShapeRelationModel(); relationModel.setId(UUIDGener.getUUID()); relationModel.setFileId(repositoryModel.getId()); relationModel.setShapeId(shapeId); relationModel.setShapeText(shapeText); - relationModel.setAttrId(SubProcessConst.CHILD_PROCESS); + relationModel.setAttrId(arrtId); relationModel.setRelationFileId(relationFileId); shapeRelationDao.insert(relationModel); } @@ -143,6 +170,9 @@ public class GraphRender { String toId = idMap.get(toObj.getString("id")); toObj.put("id", toId); String linkerId = linker.getString("id"); + + linker.put("elementType", ElementType.OUTER_LINKER.name()); + elements.put(linkerId, linker); } diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.core.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.core.js index 7d1ba52f..7a09958e 100755 --- a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.core.js +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.core.js @@ -1407,11 +1407,39 @@ var Designer = { shapes: W, dir: N }); + // 端到端功能 start + let currentEleIsScope = false; // 当前元素是否为范围框 + let eleInRange = []; // 存储当前范围框内部元素 + let currentScopeRange = {}; + if (methodId == 'process.subprocess'){ // 当前建模类型为端到端 + let index = W.findIndex(ele => ele.elementType == "SCOPE_NODE"); + if (index != -1){ + currentEleIsScope = true; + let scopeShape = W[index]; + currentScopeRange = { // 获取范围框初始范围大小 + x: scopeShape.minRange.x1, + y: scopeShape.minRange.y1, + w: scopeShape.minRange.x2 - scopeShape.minRange.x1, + h: scopeShape.minRange.y2 - scopeShape.minRange.y1 + }; + eleInRange = Utils.getShapesByRange(currentScopeRange); + eleInRange = eleInRange.filter(id => id != scopeShape.id); // 过滤掉范围框本身 + } + } + // 端到端功能 end S.bind("mousemove.resize", function (a) { F = []; var t = Utils.getRelativePos(a.pageX, a.pageY, Y); t = Utils.restoreScale(t); + // 端到端功能 start + if (methodId == 'process.subprocess' && currentScopeRange){ // 如果是端到端建模方法 并且选中的是范围框 + if ((currentScopeRange.x < t.x && t.x < currentScopeRange.x + currentScopeRange.w) || (currentScopeRange.y < t.y && t.y < currentScopeRange.y + currentScopeRange.h)){ + $.simpleAlert("当前范围标识框已是最小范围!"); + return; + } + } + // 端到端功能 end var k = Utils.getRotated(E, t, -M.angle); var w = Utils.copy(M); if (N.indexOf("r") >= 0) { @@ -1500,6 +1528,14 @@ var Designer = { Utils.removeAnchors(); for (var e = 0; e < W.length; e++) { var u = W[e]; + // 端到端功能 start + if (currentEleIsScope){ // 如果当前元素为范围框的话 + // 找到范围框内部元素 跳过不处理 + if (eleInRange.indexOf(u.id) != -1){ + continue; + } + } + // 端到端功能 end var j = ac[u.id]; if (u.name == "linker") { if (j.from.type == "box") { @@ -1846,8 +1882,23 @@ var Designer = { var k = Utils.getSelectedIds(); Utils.mergeArray(e, k) } + let flag = false; + if (methodId == "process.subprocess" && e.length > 0){ + let scopeIndex = e.findIndex(shapeId => Model.getShapeById(shapeId).elementType == "SCOPE_NODE"); + let innerNodeIndex = e.findIndex(shapeId => Model.getShapeById(shapeId).elementType == "INNER_NODE"); + let innerLinkerIndex = e.findIndex(shapeId => Model.getShapeById(shapeId).elementType == "INNER_LINKER"); + let outerNodeIndex = e.findIndex(shapeId => Model.getShapeById(shapeId).elementType == "OUTER_NODE"); + let outerLinkerIndex = e.findIndex(shapeId => Model.getShapeById(shapeId).elementType == "OUTER_LINKER"); + // 选中的元素中 同时出现范围框或者其内部元素以及外部元素 + if ((scopeIndex != -1 || innerNodeIndex != -1 || innerLinkerIndex != -1) && (outerNodeIndex != -1 || outerLinkerIndex != -1)){ + flag = true; + $.simpleAlert("范围框以及其内部元素不能与范围框外部元素同时被选中!"); + } + } Utils.unselect(); - Utils.selectShape(e); + if (!flag){ + Utils.selectShape(e); + } b.remove() } Designer.op.resetState(); @@ -2113,6 +2164,24 @@ var Designer = { Designer.op.resetState(); if (methodId == 'process.subprocess') { // 如果建模为端到端 连线样式调整 防止因层级原因 子流程展开或者关闭按钮 点击不到 window.subProcess.linkerBoxPointerEvent(); + // 判断新建的连线是什么类型 INNER_LINKER OUTER_LINKER CROSS_LINKER + if (d != null){ + let from = d.from; + let to = d.to; + if (from.id != null && to.id != null){ + let fromObj = Model.getShapeById(from.id); + let toObj = Model.getShapeById(to.id); + if (fromObj.elementType == "OUTER_NODE" && toObj.elementType == "OUTER_NODE"){ + d.elementType = "OUTER_LINKER"; + }else if (fromObj.elementType == "INNER_NODE" && toObj.elementType == "INNER_NODE"){ + d.elementType = "INNER_LINKER"; + }else { + d.elementType = "CROSS_LINKER"; + } + }else { + $.simpleAlert("当前创建的连线缺少连接点,请谨慎操作!"); + } + } } f.unbind("mousedown.link"); f.unbind("mousemove.link"); diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.method.subprocess.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.method.subprocess.js index d0be9366..d1fa97b9 100644 --- a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.method.subprocess.js +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.method.subprocess.js @@ -28,6 +28,7 @@ class SubProcess { this.shapeIconRender(); this.handleScopeShapeEvent(); this.linkerBoxPointerEvent(); + this.scopeShapeRenderTitle(this.Model.define.elements) } linkerBoxPointerEvent(){ @@ -75,7 +76,7 @@ class SubProcess { let b = Utils.getRelativePos(a.pageX, a.pageY, c); // 实时获取鼠标移动的坐标 let j = Utils.getShapeByPosition(b.x, b.y); // 根据鼠标当前移动的位置获取当前图形 如果有的话 // console.log("当前图形", j); - if (j != null && j.shape.name != 'subProcess') { // 当前鼠标所在位置为范围选择框范围内 + if (j != null) { if (j.shape.name == 'scopeLimitation'){ let range = { x: j.shape.props.x, @@ -84,19 +85,20 @@ class SubProcess { h: j.shape.props.h }; let e = Utils.getShapesByRange(range); + e = e.filter(id => Model.getShapeById(id).elementType !== "OUTER_NODE").filter(id => Model.getShapeById(id).elementType !== "OUTER_LINKER"); // 因为范围框人工改变大小后 可能包含外部元素 // 将当前范围选择框元素以及范围内的元素 存储到subProcess中 方便后续 范围框内的元素移动时做范围框限制 window.subProcess.scopeEle[j.shape.id] = e; $('#'+j.shape.id).off("mousedown").on("mousedown", function (f) { Utils.unselect(); Utils.selectShape(e); }); - }else { // 范围选择框内的元素 - Utils.unselect(); + }else { // console.log('范围标注框的图形是否存了下来', window.subProcess.scopeEle); let scopeEle = window.subProcess.scopeEle; for (const scopeShapeId in scopeEle) { let inRangeEles = scopeEle[scopeShapeId]; - if (inRangeEles.indexOf(j.shape.id) != -1){ + if (inRangeEles.indexOf(j.shape.id) != -1){ // 当前鼠标所在位置为范围选择框范围内 + Utils.unselect(); let currentScopeEle = Model.getShapeById(scopeShapeId); // 获取当前范围选择框 let bound = { x: currentScopeEle.props.x, @@ -137,6 +139,9 @@ class SubProcess { shapeText = shape.text; } } + if (window.subProcess.checkLayoutIsReasonable()){ + return; + } // 2、传递当前模型文件ID、子流程节点ID awsui.ajax.request({ url: './jd', @@ -180,6 +185,9 @@ class SubProcess { // 节点关闭事件 shapeClose(event){ // console.log('sss'); + if (window.subProcess.checkLayoutIsReasonable()){ + return; + } let param = event.data; awsui.ajax.request({ url: './jd', @@ -210,6 +218,9 @@ class SubProcess { // 一键展开或闭合 oneClickOperate(action){ + if (window.subProcess.checkLayoutIsReasonable()){ + return; + } // console.log('oneClickExpand',this); awsui.ajax.request({ url: './jd', @@ -275,5 +286,59 @@ class SubProcess { $("#saving_tip").text("文件已修改,未保存"); } } + + // 节点展开或者闭合前 检查布局是否合理 + checkLayoutIsReasonable(){ + let result = false; + let elements = Model.define.elements; + for (let key in elements) { + let ele = elements[key]; + if (ele.elementType == "SCOPE_NODE"){ // 如果存在范围框 + let eleInRange = this.getShapesByRange(ele.props); // 获取此时范围框内部元素 + if (eleInRange.length > 0){ + let outerNodeIndex = eleInRange.findIndex(id => Model.getShapeById(id).elementType == "OUTER_NODE"); + let outerLinerIndex = eleInRange.findIndex(id => Model.getShapeById(id).elementType == "OUTER_LINKER"); + if (outerLinerIndex != -1 || outerNodeIndex != -1){ + $.simpleAlert("当前布局不合理,范围框内包含了外部元素!"); + result = true; + break; + } + } + } + } + return result; + } + + // 获取范围内元素 只要部分包含也算在内 + getShapesByRange(range, elements){ + let g = []; + for (let h in Model.define.elements) { + let f = Model.getShapeById(h); + let i = []; + if (f.name == "linker") { + i = [...f.points]; + i.push({x: f.from.x, y: f.from.y}); + i.push({x: f.to.x, y: f.to.y}); + } else { + i.push({x: f.props.x, y: f.props.y}); + i.push({x: f.props.x + f.props.w, y: f.props.y}); + i.push({x: f.props.x + f.props.w, y: f.props.y + f.props.h}); + i.push({x: f.props.x, y: f.props.y + f.props.h}); + } + if (this.pointInRect(i, range)) { + g.push(f.id) + } + } + return g + } + + pointInRect(points, range){ + for (let point of points) { + if (range.x < point.x && point.x < range.x + range.w && range.y < point.y && point.y < range.y + range.h) { + return true + } + } + return false + } }