From 8118ea9687683a0ef25d851a9d2df4e0d2d65425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=A3=E4=BA=9B=E8=8A=B1=E5=84=BF?= <1156921458@qq.com> Date: Thu, 31 Jul 2025 10:36:02 +0800 Subject: [PATCH] .. --- .../flow/controller/FlowCommonController.java | 14 + .../flow/controller/FlowDefineController.java | 3 +- .../flow/controller/FlowDesignController.java | 4 +- .../app/flow/engine/model/ProcessModel.java | 46 +- .../flow/engine/model/logicflow/LfModel.java | 1 + .../app/flow/engine/parser/ModelParser.java | 28 +- .../budwk/app/flow/entity/ProcessDefine.java | 7 +- .../budwk/app/flow/entity/ProcessDesign.java | 7 +- .../flow/service/ProcessInstanceService.java | 6 - .../impl/ProcessDefineServiceImpl.java | 1 + .../service/impl/ProcessTaskServiceImpl.java | 12 +- .../com/budwk/app/flow/vo/ProcessTaskVO.java | 3 + .../plugins/snaker/SnakerflowDesigner.umd.js | 8 +- .../components/plugins/snaker/snakerFlow.vue | 49 +-- .../views/platform/flow/approval.html | 45 -- .../views/platform/flow/define/index.html | 26 +- .../views/platform/flow/define/preview.html | 402 +++++++++++++++--- .../views/platform/flow/design/index.html | 7 +- .../views/platform/flow/designer.html | 80 ---- .../views/platform/flow/diagram.html | 54 --- .../suggestionBox/view/index.html | 2 +- 21 files changed, 472 insertions(+), 333 deletions(-) delete mode 100644 src/main/resources/views/platform/flow/approval.html delete mode 100644 src/main/resources/views/platform/flow/designer.html delete mode 100644 src/main/resources/views/platform/flow/diagram.html diff --git a/src/main/java/com/budwk/app/flow/controller/FlowCommonController.java b/src/main/java/com/budwk/app/flow/controller/FlowCommonController.java index 6f921475..44464eff 100644 --- a/src/main/java/com/budwk/app/flow/controller/FlowCommonController.java +++ b/src/main/java/com/budwk/app/flow/controller/FlowCommonController.java @@ -20,6 +20,7 @@ import com.budwk.app.flow.entity.ProcessTask; import com.budwk.app.flow.enums.ProcessEventTypeEnum; import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.flow.vo.HighLightVO; import com.budwk.app.flow.vo.ProcessInstanceVO; import com.budwk.app.flow.vo.ProcessTaskVO; import com.budwk.app.web.commons.auth.utils.SecurityUtil; @@ -137,11 +138,23 @@ public class FlowCommonController { List res = new ArrayList<>(); processTaskList.forEach(processTask -> { ProcessTaskVO vo = BeanUtil.toBean(processTask, ProcessTaskVO.class); + if (vo.getTaskState().equals(ProcessTaskStateEnum.FINISHED.getCode()) && StrUtil.isNotBlank(vo.getOperator())) { + + } + res.add(vo); }); return Result.success(res); } + @At + @SaCheckLogin + @ApiOperation("流程图高亮") + public Result instanceHighLight(@Param("instanceId") Long instanceId) { + HighLightVO highLightVO = flowEngine.processInstanceService().highLight(instanceId); + return Result.success(highLightVO); + } + @At @SaCheckLogin @Aop(TransAop.READ_COMMITTED) @@ -209,6 +222,7 @@ public class FlowCommonController { @At("/executeTask") @SaCheckLogin @ApiOperation("执行任务") + @Aop(TransAop.READ_COMMITTED) public Result executeTask(@Param("data") String param) { Dict args = Json.fromJson(Dict.class, param); Long processTaskId = args.getLong(FlowConst.PROCESS_TASK_ID_KEY); diff --git a/src/main/java/com/budwk/app/flow/controller/FlowDefineController.java b/src/main/java/com/budwk/app/flow/controller/FlowDefineController.java index 6b619028..2ec8651e 100644 --- a/src/main/java/com/budwk/app/flow/controller/FlowDefineController.java +++ b/src/main/java/com/budwk/app/flow/controller/FlowDefineController.java @@ -43,7 +43,8 @@ public class FlowDefineController { @Ok("beetl:/platform/flow/define/preview.html") @SaCheckLogin public void preview(HttpServletRequest request) { - request.setAttribute("id", request.getParameter("id")); + request.setAttribute("defineId", request.getParameter("defineId")); + request.setAttribute("instanceId", request.getParameter("instanceId")); } diff --git a/src/main/java/com/budwk/app/flow/controller/FlowDesignController.java b/src/main/java/com/budwk/app/flow/controller/FlowDesignController.java index ad890f7a..98cb4473 100644 --- a/src/main/java/com/budwk/app/flow/controller/FlowDesignController.java +++ b/src/main/java/com/budwk/app/flow/controller/FlowDesignController.java @@ -125,6 +125,7 @@ public class FlowDesignController { jsonObject.set("instanceViewUrl", processDesign.getInstanceViewUrl()); jsonObject.set("h5InstanceViewUrl", processDesign.getH5InstanceViewUrl()); jsonObject.set("icon", processDesign.getIcon()); + jsonObject.set("description", processDesign.getDescription()); processDesign.setContent(jsonObject); dao.insert(processDesign); return Result.success(); @@ -143,6 +144,7 @@ public class FlowDesignController { jsonObject.set("instanceViewUrl", processDesign.getInstanceViewUrl()); jsonObject.set("h5InstanceViewUrl", processDesign.getH5InstanceViewUrl()); jsonObject.set("icon", processDesign.getIcon()); + jsonObject.set("description", processDesign.getDescription()); processDesign.setContent(jsonObject); processDesignService.update(processDesign); return Result.success(); @@ -161,12 +163,12 @@ public class FlowDesignController { jsonObject.set("instanceViewUrl", processDesign.getInstanceViewUrl()); jsonObject.set("h5InstanceViewUrl", processDesign.getH5InstanceViewUrl()); jsonObject.set("icon", processDesign.getIcon()); + jsonObject.set("description", processDesign.getDescription()); processDesign.setContent(jsonObject); processDesignService.update(processDesign); return Result.success(); } - @At @SaCheckLogin @ApiOperation("删除流程设计") diff --git a/src/main/java/com/budwk/app/flow/engine/model/ProcessModel.java b/src/main/java/com/budwk/app/flow/engine/model/ProcessModel.java index 9ca10142..e74c388b 100644 --- a/src/main/java/com/budwk/app/flow/engine/model/ProcessModel.java +++ b/src/main/java/com/budwk/app/flow/engine/model/ProcessModel.java @@ -13,8 +13,8 @@ import java.util.List; import java.util.stream.Collectors; /** - * * 流程模型 + * * @author mldong * @date 2023/4/25 */ @@ -24,6 +24,8 @@ public class ProcessModel extends BaseModel { private String type; // 流程定义分类 private String icon; // 流程定义图标 private String category; // 流程定义分类 + private String remark; // 流程备注 + private String description; // 流程说明 private String instanceUrl; // 启动实例要填写的表单key private String h5InstanceUrl; // 启动实例要填写的手机端表单key private String instanceViewUrl; @@ -39,13 +41,14 @@ public class ProcessModel extends BaseModel { /** * 获取开始节点 + * * @return */ public StartModel getStart() { StartModel startModel = null; for (int i = 0; i < nodes.size(); i++) { NodeModel nodeModel = nodes.get(i); - if(nodeModel instanceof StartModel) { + if (nodeModel instanceof StartModel) { startModel = (StartModel) nodeModel; break; } @@ -55,12 +58,13 @@ public class ProcessModel extends BaseModel { /** * 获取process定义的指定节点名称的节点模型 + * * @param nodeName 节点名称 * @return */ public NodeModel getNode(String nodeName) { - for(NodeModel node : nodes) { - if(node.getName().equals(nodeName)) { + for (NodeModel node : nodes) { + if (node.getName().equals(nodeName)) { return node; } } @@ -69,23 +73,24 @@ public class ProcessModel extends BaseModel { /** * 获取下一个任务节点模型集合 + * * @param nodeName * @return */ public List getNextTaskModels(String nodeName) { List res = new ArrayList<>(); NodeModel nodeModel = getNode(nodeName); - if(nodeModel == null) return res; + if (nodeModel == null) return res; // 获取所有输出边的目标节点 List nextNodeModelList = nodeModel.getOutputs().stream().map(TransitionModel::getTarget).toList(); - nextNodeModelList.forEach(item->{ - if(item instanceof TaskModel) { + nextNodeModelList.forEach(item -> { + if (item instanceof TaskModel) { res.add((TaskModel) item); } }); - if(res.isEmpty()) { + if (res.isEmpty()) { // 如果下一个节点不存在任务节点,递归往下找 - nextNodeModelList.forEach(item->{ + nextNodeModelList.forEach(item -> { List taskModelList = getNextTaskModels(item.getName()); res.addAll(taskModelList); }); @@ -95,19 +100,22 @@ public class ProcessModel extends BaseModel { /** * 获取下一个任务节点的候选人 + * * @param nodeName * @return */ public List getNextTaskModelCandidates(String nodeName) { List res = new ArrayList<>(); List nextTaskModels = getNextTaskModels(nodeName); - nextTaskModels.forEach(item->{ + nextTaskModels.forEach(item -> { res.addAll(getCandidates(item)); }); return res; } + /** * 根据任务模型获取候选人 + * * @param taskModel * @return */ @@ -115,29 +123,31 @@ public class ProcessModel extends BaseModel { List res = new ArrayList<>(); // 从上下文中查找候选人处理人 List handlerList = ServiceContext.findList(CandidateHandler.class); - handlerList.forEach(handler->{ + handlerList.forEach(handler -> { // 通过候选从处理类获取候选人集合 List candidateList = handler.handle(taskModel); - if(candidateList!=null) { + if (candidateList != null) { res.addAll(candidateList); } }); // 通过候选人处理类获取修选人 String candidateHandler = taskModel.getCandidateHandler(); - if(StrUtil.isNotEmpty(candidateHandler)) { + if (StrUtil.isNotEmpty(candidateHandler)) { CandidateHandler candidateHandlerClass = ReflectUtil.newInstance(candidateHandler); List candidateList = candidateHandlerClass.handle(taskModel); - if(candidateList!=null) { + if (candidateList != null) { res.addAll(candidateList); } } // 去重 return res.stream().distinct().collect(Collectors.toList()); } + /** * 根据指定的节点类型返回流程定义中所有模型对象 + * * @param clazz 节点类型 - * @param 泛型 + * @param 泛型 * @return 节点列表 */ public List getModels(Class clazz) { @@ -147,10 +157,10 @@ public class ProcessModel extends BaseModel { } private void buildModels(List models, List nextModels, Class clazz) { - for(T nextModel : nextModels) { - if(!models.contains(nextModel)) { + for (T nextModel : nextModels) { + if (!models.contains(nextModel)) { models.add(nextModel); - buildModels(models, ((NodeModel)nextModel).getNextModels(clazz), clazz); + buildModels(models, ((NodeModel) nextModel).getNextModels(clazz), clazz); } } } diff --git a/src/main/java/com/budwk/app/flow/engine/model/logicflow/LfModel.java b/src/main/java/com/budwk/app/flow/engine/model/logicflow/LfModel.java index e93273f9..3db58ae4 100644 --- a/src/main/java/com/budwk/app/flow/engine/model/logicflow/LfModel.java +++ b/src/main/java/com/budwk/app/flow/engine/model/logicflow/LfModel.java @@ -15,6 +15,7 @@ import java.util.List; public class LfModel extends BaseModel { private String type; // 流程定义分类 private String category; + private String description; // 流程描述 private String expireTime;// 过期时间(常量或变量) private String instanceUrl; // 启动实例的url,前后端分离后,定义为路由名或或路由地址 private String h5InstanceUrl; diff --git a/src/main/java/com/budwk/app/flow/engine/parser/ModelParser.java b/src/main/java/com/budwk/app/flow/engine/parser/ModelParser.java index ef7a7f4f..492fd070 100644 --- a/src/main/java/com/budwk/app/flow/engine/parser/ModelParser.java +++ b/src/main/java/com/budwk/app/flow/engine/parser/ModelParser.java @@ -1,20 +1,21 @@ package com.budwk.app.flow.engine.parser; import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.io.IoUtil; import cn.hutool.json.JSONUtil; import com.budwk.app.flow.engine.core.ServiceContext; import com.budwk.app.flow.engine.model.NodeModel; import com.budwk.app.flow.engine.model.ProcessModel; import com.budwk.app.flow.engine.model.TaskModel; import com.budwk.app.flow.engine.model.TransitionModel; -import com.budwk.app.flow.engine.model.logicflow.*; +import com.budwk.app.flow.engine.model.logicflow.LfEdge; +import com.budwk.app.flow.engine.model.logicflow.LfModel; +import com.budwk.app.flow.engine.model.logicflow.LfNode; -import java.io.ByteArrayInputStream; import java.util.List; public class ModelParser { - private ModelParser(){} + private ModelParser() { + } // /** // * 将json定义文件解析成流程模型对象 @@ -71,7 +72,7 @@ public class ModelParser { ProcessModel processModel = new ProcessModel(); List nodes = lfModel.getNodes(); List edges = lfModel.getEdges(); - if(CollectionUtil.isEmpty(nodes) || CollectionUtil.isEmpty(edges) ) { + if (CollectionUtil.isEmpty(nodes) || CollectionUtil.isEmpty(edges)) { return processModel; } // 流程定义基本信息 @@ -79,6 +80,7 @@ public class ModelParser { processModel.setDisplayName(lfModel.getDisplayName()); processModel.setType(lfModel.getType()); processModel.setCategory(lfModel.getCategory()); + processModel.setDescription(lfModel.getDescription()); processModel.setInstanceUrl(lfModel.getInstanceUrl()); processModel.setH5InstanceUrl(lfModel.getH5InstanceUrl()); processModel.setInstanceViewUrl(lfModel.getInstanceViewUrl()); @@ -87,10 +89,10 @@ public class ModelParser { processModel.setPostInterceptors(lfModel.getPostInterceptors()); processModel.setPreInterceptors(lfModel.getPreInterceptors()); // 流程节点信息 - nodes.forEach(node->{ - String type = node.getType().replace(NodeParser.NODE_NAME_PREFIX,""); - NodeParser nodeParser = ServiceContext.findByName(type,NodeParser.class); - if(nodeParser!=null) { + nodes.forEach(node -> { + String type = node.getType().replace(NodeParser.NODE_NAME_PREFIX, ""); + NodeParser nodeParser = ServiceContext.findByName(type, NodeParser.class); + if (nodeParser != null) { nodeParser.parse(node, edges); NodeModel nodeModel = nodeParser.getModel(); processModel.getNodes().add(nodeParser.getModel()); @@ -100,11 +102,11 @@ public class ModelParser { } }); // 循环节点模型,构造输入边、输出边的source、target - for(NodeModel node : processModel.getNodes()) { - for(TransitionModel transition : node.getOutputs()) { + for (NodeModel node : processModel.getNodes()) { + for (TransitionModel transition : node.getOutputs()) { String to = transition.getTo(); - for(NodeModel node2 : processModel.getNodes()) { - if(to.equalsIgnoreCase(node2.getName())) { + for (NodeModel node2 : processModel.getNodes()) { + if (to.equalsIgnoreCase(node2.getName())) { node2.getInputs().add(transition); transition.setTarget(node2); } diff --git a/src/main/java/com/budwk/app/flow/entity/ProcessDefine.java b/src/main/java/com/budwk/app/flow/entity/ProcessDefine.java index 33798565..bdc830f9 100644 --- a/src/main/java/com/budwk/app/flow/entity/ProcessDefine.java +++ b/src/main/java/com/budwk/app/flow/entity/ProcessDefine.java @@ -73,9 +73,14 @@ public class ProcessDefine extends BaseModel { @Column private Integer version; - @Comment + @Comment("首字母") @Column @ColDefine(type = ColType.CHAR) private Character pinyinName; + @Comment("流程描述") + @Column + @ColDefine(type = ColType.TEXT) + private String description; + } diff --git a/src/main/java/com/budwk/app/flow/entity/ProcessDesign.java b/src/main/java/com/budwk/app/flow/entity/ProcessDesign.java index bbcd5497..90f4cf41 100644 --- a/src/main/java/com/budwk/app/flow/entity/ProcessDesign.java +++ b/src/main/java/com/budwk/app/flow/entity/ProcessDesign.java @@ -20,8 +20,6 @@ import org.nutz.dao.entity.annotation.*; @Comment("流程设计") public class ProcessDesign extends BaseModel { - private static final long serialVersionUID = 1L; - @Comment("主键") @Id private Long id; @@ -70,6 +68,11 @@ public class ProcessDesign extends BaseModel { @Column private String remark; + @Comment("流程描述") + @Column + @ColDefine(type = ColType.TEXT) + private String description; + @Comment("流程定义") @Column @ColDefine(type = ColType.MYSQL_JSON) diff --git a/src/main/java/com/budwk/app/flow/service/ProcessInstanceService.java b/src/main/java/com/budwk/app/flow/service/ProcessInstanceService.java index 07b51c6c..f92e552e 100644 --- a/src/main/java/com/budwk/app/flow/service/ProcessInstanceService.java +++ b/src/main/java/com/budwk/app/flow/service/ProcessInstanceService.java @@ -219,12 +219,6 @@ public interface ProcessInstanceService extends BaseService { * @param actorId */ void updateCCStatus(Long processInstanceId, String actorId); - /** - * 自定义分页查询我的抄送 - * @param param - * @return - */ -// CommonPage ccInstancePage(ProcessInstancePageParam param); /** * 获取流程参与人回显文本数据 diff --git a/src/main/java/com/budwk/app/flow/service/impl/ProcessDefineServiceImpl.java b/src/main/java/com/budwk/app/flow/service/impl/ProcessDefineServiceImpl.java index 86b52043..829c0c63 100644 --- a/src/main/java/com/budwk/app/flow/service/impl/ProcessDefineServiceImpl.java +++ b/src/main/java/com/budwk/app/flow/service/impl/ProcessDefineServiceImpl.java @@ -117,6 +117,7 @@ public class ProcessDefineServiceImpl extends BaseServiceImpl imp define.setH5InstanceViewUrl(processModel.getH5InstanceViewUrl()); define.setIcon(processModel.getIcon()); define.setPinyinName(PinyinUtil.getFirstLetter(define.getDisplayName().charAt(0))); + define.setDescription(processModel.getDescription()); define.setState(1); define.setContent(JSONUtil.parseObj(defineJsonStr)); diff --git a/src/main/java/com/budwk/app/flow/service/impl/ProcessTaskServiceImpl.java b/src/main/java/com/budwk/app/flow/service/impl/ProcessTaskServiceImpl.java index 4ea2e00d..036b9807 100644 --- a/src/main/java/com/budwk/app/flow/service/impl/ProcessTaskServiceImpl.java +++ b/src/main/java/com/budwk/app/flow/service/impl/ProcessTaskServiceImpl.java @@ -175,8 +175,18 @@ public class ProcessTaskServiceImpl extends BaseServiceImpl impleme processTask.setTaskType(taskModel.getTaskType().getCode()); processTask.setFormKey(taskModel.getForm()); processTask.setProcessInstanceId(execution.getProcessInstanceId()); - execution.getArgs().put(FlowConst.IS_FIRST_TASK_NODE, FlowUtil.isFistTaskName(execution.getProcessModel(), taskModel.getName())); + // 增加是否为第一个任务节点标识 + execution.getArgs().put(FlowConst.IS_FIRST_TASK_NODE, FlowUtil.isFistTaskName(execution.getProcessModel(), taskModel.getName())); + //过滤上个任务的表单数据 避免造成污染 每个任务只保存自己的表单数据 + Dict cleanArgs = Dict.create(); + execution.getArgs().forEach((k, v) -> { + if (!k.startsWith(FlowConst.TASK_FORM_DATA_PREFIX)) { + cleanArgs.set(k, v); + } + }); + execution.setArgs(cleanArgs); + processTask.setVariable(JSONUtil.toJsonStr(execution.getArgs())); processTask.setCreatedAt(now); processTask.setUpdatedAt(now); diff --git a/src/main/java/com/budwk/app/flow/vo/ProcessTaskVO.java b/src/main/java/com/budwk/app/flow/vo/ProcessTaskVO.java index 34fa7550..5accdfbc 100644 --- a/src/main/java/com/budwk/app/flow/vo/ProcessTaskVO.java +++ b/src/main/java/com/budwk/app/flow/vo/ProcessTaskVO.java @@ -44,6 +44,9 @@ public class ProcessTaskVO extends ProcessTask { private List taskActorList; + // 任务参与者 + private List taskOperatorList; + // @Schema(description = "当前用户是否可执行") private boolean executable; // @Schema(description = "节点定义信息") diff --git a/src/main/resources/static/assets/platform/plugins/snaker/SnakerflowDesigner.umd.js b/src/main/resources/static/assets/platform/plugins/snaker/SnakerflowDesigner.umd.js index c0649e35..a5ee85ce 100644 --- a/src/main/resources/static/assets/platform/plugins/snaker/SnakerflowDesigner.umd.js +++ b/src/main/resources/static/assets/platform/plugins/snaker/SnakerflowDesigner.umd.js @@ -2220,7 +2220,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _logicflow_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @logicflow/core */ \"./node_modules/@logicflow/core/dist/logic-flow.js\");\n/* harmony import */ var _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_logicflow_core__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _task__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./task */ \"./packages/SnakerFlowDesigner/src/snakerflow/task/index.js\");\n/* harmony import */ var _transition__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./transition */ \"./packages/SnakerFlowDesigner/src/snakerflow/transition/index.js\");\n/* harmony import */ var _custom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./custom */ \"./packages/SnakerFlowDesigner/src/snakerflow/custom/index.js\");\n/* harmony import */ var _start__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./start */ \"./packages/SnakerFlowDesigner/src/snakerflow/start/index.js\");\n/* harmony import */ var _end__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./end */ \"./packages/SnakerFlowDesigner/src/snakerflow/end/index.js\");\n/* harmony import */ var _decision__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./decision */ \"./packages/SnakerFlowDesigner/src/snakerflow/decision/index.js\");\n/* harmony import */ var _join__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./join */ \"./packages/SnakerFlowDesigner/src/snakerflow/join/index.js\");\n/* harmony import */ var _fork__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./fork */ \"./packages/SnakerFlowDesigner/src/snakerflow/fork/index.js\");\n/* harmony import */ var _subProcess__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./subProcess */ \"./packages/SnakerFlowDesigner/src/snakerflow/subProcess/index.js\");\n/* harmony import */ var _PropertySetting_index_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../PropertySetting/index.vue */ \"./packages/SnakerFlowDesigner/src/PropertySetting/index.vue\");\n/* harmony import */ var _control_DataDetail_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./control/DataDetail.vue */ \"./packages/SnakerFlowDesigner/src/snakerflow/control/DataDetail.vue\");\n/* harmony import */ var _control_ImportData_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./control/ImportData.vue */ \"./packages/SnakerFlowDesigner/src/snakerflow/control/ImportData.vue\");\n/* harmony import */ var _control_HighLightData_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./control/HighLightData.vue */ \"./packages/SnakerFlowDesigner/src/snakerflow/control/HighLightData.vue\");\n/* harmony import */ var _logicflow_extension__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @logicflow/extension */ \"./node_modules/@logicflow/extension/es/index.js\");\n/* harmony import */ var _logicflow_core_dist_style_index_css__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @logicflow/core/dist/style/index.css */ \"./node_modules/@logicflow/core/dist/style/index.css\");\n/* harmony import */ var _logicflow_core_dist_style_index_css__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(_logicflow_core_dist_style_index_css__WEBPACK_IMPORTED_MODULE_18__);\n/* harmony import */ var _logicflow_extension_lib_style_index_css__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @logicflow/extension/lib/style/index.css */ \"./node_modules/@logicflow/extension/lib/style/index.css\");\n/* harmony import */ var _logicflow_extension_lib_style_index_css__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(_logicflow_extension_lib_style_index_css__WEBPACK_IMPORTED_MODULE_19__);\n/* harmony import */ var _tool__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./tool */ \"./packages/SnakerFlowDesigner/src/snakerflow/tool.js\");\n/* harmony import */ var clipboard__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! clipboard */ \"./node_modules/clipboard/dist/clipboard.js\");\n/* harmony import */ var clipboard__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(clipboard__WEBPACK_IMPORTED_MODULE_21__);\n/* harmony import */ var element_ui__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! element-ui */ \"./node_modules/element-ui/lib/element-ui.common.js\");\n/* harmony import */ var element_ui__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(element_ui__WEBPACK_IMPORTED_MODULE_22__);\n/* harmony import */ var _wfSubProcess__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./wfSubProcess */ \"./packages/SnakerFlowDesigner/src/snakerflow/wfSubProcess/index.js\");\n\n\n\n// @ is an alias to /src\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'SnakerFlowDesigner',\n components: {\n PropertySetting: _PropertySetting_index_vue__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n DataDetail: _control_DataDetail_vue__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n ImportData: _control_ImportData_vue__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n HighLightData: _control_HighLightData_vue__WEBPACK_IMPORTED_MODULE_16__[\"default\"]\n },\n props: {\n value: {\n type: [String, Object],\n default() {\n return undefined;\n }\n },\n config: {\n type: Object,\n default() {\n return {\n grid: true\n };\n }\n },\n viewer: {\n // 预览模式\n type: Boolean,\n default: false\n },\n showDoc: {\n // 是否显示文档\n type: Boolean,\n default: true\n },\n highLight: {\n // 高亮数据\n type: Object,\n default() {\n return {};\n }\n },\n extendAttrConfig: {\n // 扩展属性配置\n type: Object\n },\n // 扩展的属性key\n extendPropertyKeys: {\n type: Array\n },\n // 禁止点击的节点\n disabledClickNodes: {\n type: Array\n }\n },\n data() {\n return {\n lf: null,\n nodeClick: null,\n dialogTitle: '',\n dialogVisible: false,\n dialogType: 'DataDetail',\n graphData: {},\n clipboard: null,\n processForm: {},\n refreshLfData: 1\n };\n },\n watch: {\n value: {\n handler(n) {\n if (n && this.lf) {\n // this.init()\n const value = this.tranData(n);\n this.initProcessForm(value);\n if (value.nodes) {\n this.lf.render(value);\n }\n }\n },\n deep: true\n },\n processForm: {\n handler(n) {\n if (n) {\n console.log(n);\n delete n.type;\n this.$emit('input', n);\n }\n },\n deep: true\n },\n highLight: {\n handler(n) {\n this.setHighLight(n);\n },\n deep: true\n }\n },\n computed: {\n copyJsonContent() {\n if (this.dialogType === 'DataDetail' && this.lf) {\n return JSON.stringify({\n ...this.tranData(this.value),\n ...this.lf.getGraphData()\n }, null, 2);\n }\n return '';\n },\n copyXmlContent() {\n if (this.dialogType === 'DataDetail' && this.lf) {\n return Object(_tool__WEBPACK_IMPORTED_MODULE_20__[\"logicFlowJsonToSnakerXml\"])({\n ...this.tranData(this.value),\n ...this.lf.getGraphData()\n });\n }\n return '';\n },\n localStorageLfData() {\n const res = [];\n if (this.dialogType === 'ImportData' && [1, 2].includes(this.refreshLfData)) {\n Object.keys(window.localStorage).forEach(key => {\n if (key.startsWith('LFDATA###')) {\n const arr = key.split('###');\n res.push({\n value: key,\n label: arr[2]\n });\n }\n });\n }\n return res;\n }\n },\n mounted() {\n this.init();\n if (this.tranData(this.value)) {\n this.initProcessForm(this.tranData(this.value));\n this.lf.render(this.tranData(this.value));\n this.setHighLight(this.highLight);\n }\n },\n methods: {\n tranData(n) {\n if (typeof n === 'string') {\n return Object(_tool__WEBPACK_IMPORTED_MODULE_20__[\"snakerXml2LogicFlowJson\"])(n);\n }\n return n;\n },\n /**\r\n * 初始化流程定义表单信息\r\n */\n initProcessForm(data) {\n console.log(data);\n this.$set(this.processForm, 'type', 'snaker:process');\n this.$set(this.processForm, 'name', data.name);\n this.$set(this.processForm, 'category', data.category);\n this.$set(this.processForm, 'displayName', data.displayName);\n this.$set(this.processForm, 'expireTime', data.expireTime);\n this.$set(this.processForm, 'instanceUrl', data.instanceUrl);\n this.$set(this.processForm, 'h5InstanceUrl', data.h5InstanceUrl);\n this.$set(this.processForm, 'instanceNoClass', data.instanceNoClass);\n this.$set(this.processForm, 'preInterceptors', data.preInterceptors);\n this.$set(this.processForm, 'postInterceptors', data.postInterceptors);\n },\n init() {\n // 画布配置\n _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default.a.use(_logicflow_extension__WEBPACK_IMPORTED_MODULE_17__[\"Snapshot\"]);\n _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default.a.use(_logicflow_extension__WEBPACK_IMPORTED_MODULE_17__[\"DndPanel\"]);\n _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default.a.use(_logicflow_extension__WEBPACK_IMPORTED_MODULE_17__[\"SelectionSelect\"]);\n _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default.a.use(_logicflow_extension__WEBPACK_IMPORTED_MODULE_17__[\"Menu\"]);\n _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default.a.use(_logicflow_extension__WEBPACK_IMPORTED_MODULE_17__[\"Control\"]);\n _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default.a.use(_logicflow_extension__WEBPACK_IMPORTED_MODULE_17__[\"Group\"]);\n const defaultConfig = {};\n if (this.viewer) {\n defaultConfig.isSilentMode = true;\n }\n const lf = new _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default.a({\n ...this.config,\n ...defaultConfig,\n container: document.querySelector('#LF-view')\n });\n this.lf = lf;\n // 注册自定义元素\n this.lf.register(_task__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\n this.lf.register(_transition__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n this.lf.register(_custom__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n this.lf.register(_start__WEBPACK_IMPORTED_MODULE_7__[\"default\"]);\n this.lf.register(_end__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n this.lf.register(_decision__WEBPACK_IMPORTED_MODULE_9__[\"default\"]);\n this.lf.register(_join__WEBPACK_IMPORTED_MODULE_10__[\"default\"]);\n this.lf.register(_fork__WEBPACK_IMPORTED_MODULE_11__[\"default\"]);\n this.lf.register(_subProcess__WEBPACK_IMPORTED_MODULE_12__[\"default\"]);\n this.lf.register(_wfSubProcess__WEBPACK_IMPORTED_MODULE_23__[\"default\"]);\n // 初始化操作栏\n this.initOp(this.lf);\n // 初始化事件\n this.initEvent(lf);\n },\n initOp(lf) {\n if (this.viewer) {\n // 预览模式时\n this.lf.extension.menu.setMenuConfig({\n nodeMenu: [],\n edgeMenu: []\n });\n this.initDoc();\n return;\n }\n // 设置拖拽面板\n this.lf.extension.dndPanel.setPatternItems([{\n type: 'snaker:start',\n text: '开始',\n label: '开始节点',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAAnBJREFUOBGdVL1rU1EcPfdGBddmaZLiEhdx1MHZQXApraCzQ7GKLgoRBxMfcRELuihWKcXFRcEWF8HBf0DdDCKYRZpnl7p0svLe9Zzbd29eQhTbC8nv+9zf130AT63jvooOGS8Vf9Nt5zxba7sXQwODfkWpkbjTQfCGUd9gIp3uuPP8bZ946g56dYQvnBg+b1HB8VIQmMFrazKcKSvFW2dQTxJnJdQ77urmXWOMBCmXM2Rke4S7UAW+/8ywwFoewmBps2tu7mbTdp8VMOkIRAkKfrVawalJTtIliclFbaOBqa0M2xImHeVIfd/nKAfVq/LGnPss5Kh00VEdSzfwnBXPUpmykNss4lUI9C1ga+8PNrBD5YeqRY2Zz8PhjooIbfJXjowvQJBqkmEkVnktWhwu2SM7SMx7Cj0N9IC0oQXRo8xwAGzQms+xrB/nNSUWVveI48ayrFGyC2+E2C+aWrZHXvOuz+CiV6iycWe1Rd1Q6+QUG07nb5SbPrL4426d+9E1axKjY3AoRrlEeSQo2Eu0T6BWAAr6COhTcWjRaYfKG5csnvytvUr/WY4rrPMB53Uo7jZRjXaG6/CFfNMaXEu75nG47X+oepU7PKJvvzGDY1YLSKHJrK7vFUwXKkaxwhCW3u+sDFMVrIju54RYYbFKpALZAo7sB6wcKyyrd+aBMryMT2gPyD6GsQoRFkGHr14TthZni9ck0z+Pnmee460mHXbRAypKNy3nuMdrWgVKj8YVV8E7PSzp1BZ9SJnJAsXdryw/h5ctboUVi4AFiCd+lQaYMw5z3LGTBKjLQOeUF35k89f58Vv/tGh+l+PE/wG0rgfIUbZK5AAAAABJRU5ErkJggg=='\n }, {\n type: 'snaker:task',\n text: '用户任务',\n label: '用户任务',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAEFVwZaAAAABGdBTUEAALGPC/xhBQAAAqlJREFUOBF9VM9rE0EUfrMJNUKLihGbpLGtaCOIR8VjQMGDePCgCCIiCNqzCAp2MyYUCXhUtF5E0D+g1t48qAd7CCLqQUQKEWkStcEfVGlLdp/fm3aW2QQdyLzf33zz5m2IsAZ9XhDpyaaIZkTS4ASzK41TFao88GuJ3hsr2pAbipHxuSYyKRugagICGANkfFnNh3HeE2N0b3nN2cgnpcictw5veJIzxmDamSlxxQZicq/mflxhbaH8BLRbuRwNtZp0JAhoplVRUdzmCe/vO27wFuuA3S5qXruGdboy5/PRGFsbFGKo/haRtQHIrM83bVeTrOgNhZReWaYGnE4aUQgTJNvijJFF4jQ8BxJE5xfKatZWmZcTQ+BVgh7s8SgPlCkcec4mGTmieTP4xd7PcpIEg1TX6gdeLW8rTVMVLVvb7ctXoH0Cydl2QOPJBG21STE5OsnbweVYzAnD3A7PVILuY0yiiyDwSm2g441r6rMSgp6iK42yqroI2QoXeJVeA+YeZSa47gZdXaZWQKTrG93rukk/l2Al6Kzh5AZEl7dDQy+JjgFahQjRopSxPbrbvK7GRe9ePWBo1wcU7sYrFZtavXALwGw/7Dnc50urrHJuTPSoO2IMV3gUQGNg87IbSOIY9BpiT9HV7FCZ94nPXb3MSnwHn/FFFE1vG6DTby+r31KAkUktB3Qf6ikUPWxW1BkXSPQeMHHiW0+HAd2GelJsZz1OJegCxqzl+CLVHa/IibuHeJ1HAKzhuDR+ymNaRFM+4jU6UWKXorRmbyqkq/D76FffevwdCp+jN3UAN/C9JRVTDuOxC/oh+EdMnqIOrlYteKSfadVRGLJFJPSB/ti/6K8f0CNymg/iH2gO/f0DwE0yjAFO6l8JaR5j0VPwPwfaYHqOqrCI319WzwhwzNW/aQAAAABJRU5ErkJggg==',\n className: 'important-node'\n }, {\n type: 'snaker:custom',\n text: '自定义任务',\n label: '自定义任务',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAAOVJREFUOBGtVMENwzAIjKP++2026ETdpv10iy7WFbqFyyW6GBywLCv5gI+Dw2Bluj1znuSjhb99Gkn6QILDY2imo60p8nsnc9bEo3+QJ+AKHfMdZHnl78wyTnyHZD53Zzx73MRSgYvnqgCUHj6gwdck7Zsp1VOrz0Uz8NbKunzAW+Gu4fYW28bUYutYlzSa7B84Fh7d1kjLwhcSdYAYrdkMQVpsBr5XgDGuXwQfQr0y9zwLda+DUYXLaGKdd2ZTtvbolaO87pdo24hP7ov16N0zArH1ur3iwJpXxm+v7oAJNR4JEP8DoAuSFEkYH7cAAAAASUVORK5CYII=',\n className: 'import_icon'\n }, {\n type: 'snaker:decision',\n label: '条件判断',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAAHeEJUAAAAABGdBTUEAALGPC/xhBQAAAvVJREFUOBGNVEFrE0EU/mY3bQoiFlOkaUJrQUQoWMGePLX24EH0IIoHKQiCV0G8iE1covgLiqA/QTzVm1JPogc9tIJYFaQtlhQxqYjSpunu+L7JvmUTU3AgmTfvffPNN++9WSA1DO182f6xwILzD5btfAoQmwL5KJEwiQyVbSVZ0IgRyV6PTpIJ81E5ZvqfHQR0HUOBHW4L5Et2kQ6Zf7iAOhTFAA8s0pEP7AXO1uAA52SbqGk6h/6J45LaLhO64ByfcUzM39V7ZiAdS2yCePPEIQYvTUHqM/n7dgQNfBKWPjpF4ISk8q3J4nB11qw6X8l+FsF3EhlkEMfrjIer3wJTLwS2aCNcj4DbGxXTw00JmAuO+Ni6bBxVUCvS5d9aa04+so4pHW5jLTywuXAL7jJ+D06sl82Sgl2JuVBQn498zkc2bGKxULHjCnSMadBKYDYYHAtsby1EQ5lNGrQd4Y3v4Zo0XdGEmDno46yCM9Tk+RiJmUYHS/aXHPNTcjxcbTFna000PFJHIVZ5lFRqRpJWk9/+QtlOUYJj9HG5pVFEU7zqIYDVsw2s+AJaD8wTd2umgSCCyUxgGsS1Y6TBwXQQTFuZaHcd8gAGioE90hlsY+wMcs30RduYtxanjMGal8H5dMW67dmT1JFtYUEe8LiQLRsPZ6IIc7A4J5tqco3T0pnv/4u0kyzrYUq7gASuEyI8VXKvB9Odytv6jS/PNaZBln0nioJG/AVQRZvApOdhjj3Jt8QC8Im09SafwdBdvIpztpxWxpeKCC+EsFdS8DCyuCn2munFpL7ctHKp+Xc5cMybeIyMAN33SPL3ZR9QV1XVwLyzHm6Iv0/yeUuUb7PPlZC4D4HZkeu6dpF4v9j9MreGtMbxMMRLIcjJic9yHi7WQ3yVKzZVWUr5UrViJvn1FfUlwe/KYVfYyWRLSGNu16hR01U9IacajXPei0wx/5BqgInvJN+MMNtNme7ReU9SBbgntovn0kKHpFg7UogZvaZiOue/q1SBo9ktHzQAAAAASUVORK5CYII='\n }, {\n type: 'snaker:fork',\n label: '分支',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAASlJREFUOE+tlL9Lw1AQx78X/GuSzJ2zugqddNPBwS3BJqWCmwnq5lKcXAVHN0EFJ0EQ2pfZ3U1FKohfeaWRYl/zniZvu+P43H3vxxO0/KQJz895+D7B3tO+TCpOI2CQkwAu6WFQ7sqjhjoB/YLrQmwZ1ERTH/EGYkf15cwKDAuukbiwtUaA4TiVbSswyHkNIFKpLMTOJL8ASFQqp06SLcArj+iNMnlYGIqfcxWCjveF23EmN1VAHdDUhqmMsOA5ie5PwAoClUip7T8DgyP6+IT6lU3bz3M+Yw+NFbYObF1yVXarQ6lb2n+vzTKow2K/AoidFzs8YESBvpba53x6s6FtkthY+jkAHySSMpMT6y1b+qu/rzsK4rIn9063bAEeq1Ti+ZhGFZqSfQNEXZkVkDFbFAAAAABJRU5ErkJggg=='\n }, {\n type: 'snaker:join',\n label: '合并',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAOVJREFUOE/lkkESgjAMRZPxIrhz1EPAUTiFZQWu0FPITeQQlnFnbxINU5iQmVKZYQc72v6X5P8grPzhyjzYKvBQU7JD+Cg/HSE03QWvS3zuPfTAUglT/keC/FVgq6Gs4bN3gU7eBUMRXTtrcK+Bpxs9ASDRBWdTPt6pRILqJ2yswVxCZUEJnQV60YM7Cfg4nLsBGt1DPxr7OfHKFxgLWYM966+RCaHSaZ9rSgmBfeTgsiG4IFAIWmswC4SSStikQx+A9IrH5BTH6joUvTIjMLDYQAR5V2CzeLGXCGJvoynHAPp+g8AvqvthFal5qd4AAAAASUVORK5CYII='\n }, {\n type: 'snaker:end',\n text: '结束',\n label: '结束节点',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAA1BJREFUOBFtVE1IVUEYPXOf+tq40Y3vPcmFIdSjIorWoRG0ERWUgnb5FwVhYQSl72oUoZAboxKNFtWiwKRN0M+jpfSzqJAQclHo001tKkjl3emc8V69igP3znzfnO/M9zcDcKT67azmjYWTwl9Vn7Vumeqzj1DVb6cleQY4oAVnIOPb+mKAGxQmKI5CWNJ2aLPatxWa3aB9K7/fB+/Z0jUF6TmMlFLQqrkECWQzOZxYGjTlOl8eeKaIY5yHnFn486xBustDjWT6dG7pmjHOJd+33t0iitTPkK6tEvjxq4h2MozQ6WFSX/LkDUGfFwfhEZj1Auz/U4pyAi5Sznd7uKzznXeVHlI/Aywmk6j7fsUsEuCGADrWARXXwjxWQsUbIupDHJI7kF5dRktg0eN81IbiZXiTESic50iwS+t1oJgL83jAiBupLDCQqwziaWSoAFSeIR3P5Xv5az00wyIn35QRYTwdSYbz8pH8fxUUAtxnFvYmEmgI0wYXUXcCCSpeEVpXlsRhBnCEATxWylL9+EKCAYhe1NGstUa6356kS9NVvt3DU2fd+Wtbm/+lSbylJqsqkSm9CRhvoJVlvKPvF1RKY/FcPn5j4UfIMLn8D4UYb54BNsilTDXKnF4CfTobA0FpoW/LSp306wkXM+XaOJhZaFkcNM82ASNAWMrhrUbRfmyeI1FvRBTpN06WKxa9BK0o2E4Pd3zfBBEwPsv9sQBnmLVbLEIZ/Xe9LYwJu/Er17W6HYVBc7vmuk0xUQ+pqxdom5Fnp55SiytXLPYoMXNM4u4SNSCFWnrVIzKG3EGyMXo6n/BQOe+bX3FClY4PwydVhthOZ9NnS+ntiLh0fxtlUJHAuGaFoVmttpVMeum0p3WEXbcll94l1wM/gZ0Ccczop77VvN2I7TlsZCsuXf1WHvWEhjO8DPtyOVg2/mvK9QqboEth+7pD6NUQC1HN/TwvydGBARi9MZSzLE4b8Ru3XhX2PBxf8E1er2A6516o0w4sIA+lwURhAON82Kwe2iDAC1Watq4XHaGQ7skLcFOtI5lDxuM2gZe6WFIotPAhbaeYlU4to5cuarF1QrcZ/lwrLaCJl66JBocYZnrNlvm2+MBCTmUymPrYZVbjdlr/BxlMjmNmNI3SAAAAAElFTkSuQmCC'\n }, {\n type: 'snaker:wfSubProcess',\n text: 'snaker子流程',\n label: 'snaker子流程',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAiFJREFUOE+1lD9oU1EUxn/nviRVB0Hwz1SwJn0WXRylGbSTboJTKwgFwTrqoJK8lKQ0LxUEBR2UolRcDKJQVFxbFx10cNL2JSFFdHARN8Um92jSpqY2bUipdzz3vN/53vu+d4QtPrLFPNoC3XHNYDhXH2y5H4xKZiMRGwIP+vpMhZ+qvBSIqDAkymzgydh60HWB0ax2O8InNZwpJORRDeBmdQJhMPCkp2Ogm9EDhClZ4XAxKR/qwKXXPxl4crRj4LKiPMJHByYrcEIgrXCj4MntTQGj13Wv84s7wOk6QLkWpCSxaVMaD/bmdEaqvGrncK1/lSmxcT3earo4pGtAC7Ot7oujslJfAzSGmY7CbhlrVt4SGHiyql5zVx2OFZIy0Dys1af4v0A3q2cRHholPpeS1w01DYUVZbDsyddavcfXfSEh/69ZKwp7c3rTKFErlES5CAwFnuRdX98ovBfYBgzbEN2hH4SqEaaM8hboA3bPe9K/ymU3p1+MEJ9LyILr6xRKl6mQtBGmg6QcqQfd17IoVxR2APEgJef7JnS/tZRrg4pX5fOKQtfXd1hemBAPqpa7As/DizxdDDNvLaccYY8Kj61lwAi7VBhxDBdshWEM6YaRf4FL/+klYCcwXTVcLiWk6Gb1HrK8vmAy8GQkNq5RY3gC1JXTFJ012yaW00ONZdAwJXZLuyrf2L6Qke/NsenLqTuXlKC51nbBdhTyP82/ASr35RWxFgVJAAAAAElFTkSuQmCC',\n className: 'import_icon'\n }, {\n type: 'snaker:subProcess',\n text: '',\n label: '子流程',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAiFJREFUOE+1lD9oU1EUxn/nviRVB0Hwz1SwJn0WXRylGbSTboJTKwgFwTrqoJK8lKQ0LxUEBR2UolRcDKJQVFxbFx10cNL2JSFFdHARN8Um92jSpqY2bUipdzz3vN/53vu+d4QtPrLFPNoC3XHNYDhXH2y5H4xKZiMRGwIP+vpMhZ+qvBSIqDAkymzgydh60HWB0ax2O8InNZwpJORRDeBmdQJhMPCkp2Ogm9EDhClZ4XAxKR/qwKXXPxl4crRj4LKiPMJHByYrcEIgrXCj4MntTQGj13Wv84s7wOk6QLkWpCSxaVMaD/bmdEaqvGrncK1/lSmxcT3earo4pGtAC7Ot7oujslJfAzSGmY7CbhlrVt4SGHiyql5zVx2OFZIy0Dys1af4v0A3q2cRHholPpeS1w01DYUVZbDsyddavcfXfSEh/69ZKwp7c3rTKFErlES5CAwFnuRdX98ovBfYBgzbEN2hH4SqEaaM8hboA3bPe9K/ymU3p1+MEJ9LyILr6xRKl6mQtBGmg6QcqQfd17IoVxR2APEgJef7JnS/tZRrg4pX5fOKQtfXd1hemBAPqpa7As/DizxdDDNvLaccYY8Kj61lwAi7VBhxDBdshWEM6YaRf4FL/+klYCcwXTVcLiWk6Gb1HrK8vmAy8GQkNq5RY3gC1JXTFJ012yaW00ONZdAwJXZLuyrf2L6Qke/NsenLqTuXlKC51nbBdhTyP82/ASr35RWxFgVJAAAAAElFTkSuQmCC',\n className: 'import_icon'\n }]);\n // 设置右键菜单\n this.lf.extension.menu.setMenuConfig({\n nodeMenu: [{\n text: '删除',\n callback(node) {\n // node为该节点数据\n lf.deleteNode(node.id);\n }\n }]\n });\n // 控制面板-清空画布\n this.lf.extension.control.addItem({\n iconClass: 'lf-control-clear',\n title: 'clear',\n text: '清空',\n onClick: (lf, ev) => {\n lf.clearData();\n }\n });\n // 控制面板-添加查看按钮\n this.lf.extension.control.addItem({\n iconClass: 'lf-control-see',\n title: '',\n text: '查看',\n onClick: (lf, ev) => {\n this.graphData = {\n ...this.tranData(this.value),\n ...lf.getGraphData()\n };\n this.$nextTick(() => {\n this.dialogTitle = '查看流程数据';\n this.dialogVisible = true;\n this.dialogType = 'DataDetail';\n });\n }\n });\n // 控制面板-添加导入按钮\n this.lf.extension.control.addItem({\n iconClass: 'lf-control-import',\n title: '',\n text: '导入',\n onClick: (lf, ev) => {\n this.dialogTitle = '导入流程数据(同时支持xml/json)';\n this.dialogVisible = true;\n this.dialogType = 'ImportData';\n }\n });\n // 控制面板-设置高亮数据\n this.lf.extension.control.addItem({\n iconClass: 'lf-control-setting',\n title: '',\n text: '设置高亮',\n onClick: (lf, ev) => {\n this.dialogTitle = '导入高亮数据(json)';\n this.dialogVisible = true;\n this.dialogType = 'HighLightData';\n }\n });\n // 控制面板-清空画布\n this.lf.extension.control.addItem({\n iconClass: 'lf-control-save',\n title: '',\n text: '保存',\n onClick: (lf, ev) => {\n this.graphData = lf.getGraphData();\n this.$nextTick(() => {\n const res = {\n ...this.tranData(this.value),\n ...this.graphData\n };\n this.$emit('on-save', {\n json: res,\n xml: Object(_tool__WEBPACK_IMPORTED_MODULE_20__[\"logicFlowJsonToSnakerXml\"])(res)\n });\n });\n }\n });\n this.initDoc();\n },\n initDoc() {\n if (this.showDoc) {\n // 控制面板-码云\n this.lf.extension.control.addItem({\n iconClass: 'lf-control-mayu',\n title: '',\n text: '码云',\n onClick: (lf, ev) => {\n window.location.href = 'https://gitee.com/mldong/snakerflow-designer-vue';\n }\n });\n }\n },\n initEvent(lf) {\n if (this.viewer) return;\n const {\n eventCenter\n } = this.lf.graphModel;\n eventCenter.on('node:click', args => {\n if ((this.disabledClickNodes || []).includes(args.data.type)) {\n return;\n }\n this.nodeClick = args.data;\n this.$nextTick(() => {\n this.$refs.propertySetting.show();\n });\n });\n eventCenter.on('edge:click', args => {\n this.nodeClick = args.data;\n this.$nextTick(() => {\n this.$refs.propertySetting.show();\n });\n });\n eventCenter.on('edge:add', args => {\n // 修改边类型\n lf.changeEdgeType(args.data.id, 'snaker:transition');\n });\n eventCenter.on('blank:contextmenu', args => {\n this.nodeClick = {\n name: this.processForm.name,\n displayName: this.processForm.displayName,\n category: this.processForm.category,\n expireTime: this.processForm.expireTime,\n instanceUrl: this.processForm.instanceUrl,\n h5InstanceUrl: this.processForm.h5InstanceUrl,\n instanceNoClass: this.processForm.instanceNoClass,\n preInterceptors: this.processForm.preInterceptors,\n postInterceptors: this.processForm.postInterceptors,\n type: 'snaker:process'\n };\n this.$nextTick(() => {\n this.$refs.propertySetting.show();\n });\n });\n },\n handleOpened() {\n if (this.dialogType === 'DataDetail') {\n const copyEl = document.querySelectorAll('.m-btn-copy');\n this.clipboard = new clipboard__WEBPACK_IMPORTED_MODULE_21___default.a(copyEl, {\n container: document.querySelector('.m-dialog-data-detail')\n });\n this.clipboard.on('success', function (e) {\n element_ui__WEBPACK_IMPORTED_MODULE_22__[\"Message\"].success('复制成功');\n e.clearSelection();\n });\n this.clipboard.on('error', function (e) {\n element_ui__WEBPACK_IMPORTED_MODULE_22__[\"Message\"].error('复制失败');\n });\n }\n },\n handleClose() {\n this.dialogVisible = false;\n this.$refs.dialogComponent.handleClose();\n if (this.dialogType === 'DataDetail' && this.clipboard) {\n this.clipboard.destroy();\n }\n },\n handleSubmit() {\n if (this.dialogType === 'ImportData') {\n this.lf.clearData();\n try {\n this.importJson(this.$refs.dialogComponent.graphJsonStr);\n } catch {\n this.importXml(this.$refs.dialogComponent.graphJsonStr);\n }\n } else if (this.dialogType === 'HighLightData') {\n this.setHighLight(JSON.parse(this.$refs.dialogComponent.highLightJsonStr));\n }\n this.dialogVisible = false;\n },\n /**\r\n * 导入snakerxml\r\n */\n importXml(xml) {\n if (!xml) return;\n const data = Object(_tool__WEBPACK_IMPORTED_MODULE_20__[\"snakerXml2LogicFlowJson\"])(xml);\n this.initProcessForm(data);\n this.lf.render(data);\n },\n /**\r\n * 导入jsonstr\r\n */\n importJson(jsonStr) {\n if (!jsonStr) return;\n let data = jsonStr;\n if (typeof jsonStr === 'string') {\n data = JSON.parse(jsonStr);\n }\n this.initProcessForm(data);\n this.lf.render(data);\n },\n /**\r\n * 设置高亮数据\r\n * @param data { \"historyNodeNames\": [], \"historyEdgeNames\": [], \"activeNodeNames\": []}\r\n */\n setHighLight(data) {\n if (!this.lf || !data) return;\n // 设置历史节点\n if (data && data.historyNodeNames) {\n data.historyNodeNames.forEach(nodeName => {\n this.lf.setProperties(nodeName, {\n state: 'history'\n });\n });\n }\n // 设置当前节点\n if (data && data.activeNodeNames) {\n data.activeNodeNames.forEach(nodeName => {\n this.lf.setProperties(nodeName, {\n state: 'active'\n });\n });\n }\n // 设置历史边\n if (data && data.historyEdgeNames) {\n data.historyEdgeNames.forEach(edgeName => {\n const edgeModel = this.lf.getEdgeModelById(edgeName);\n if (edgeModel) {\n edgeModel.setProperties({\n state: 'history'\n });\n }\n });\n }\n },\n handleCommand(key) {\n this.$refs.dialogComponent.graphJsonStr = window.localStorage.getItem(key);\n },\n handleRemove(key) {\n window.localStorage.removeItem(key);\n if (this.refreshLfData === 1) {\n this.refreshLfData = 2;\n } else {\n this.refreshLfData = 1;\n }\n }\n }\n});\n\n//# sourceURL=webpack://SnakerflowDesigner/./packages/SnakerFlowDesigner/src/snakerflow/index.vue?./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _logicflow_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @logicflow/core */ \"./node_modules/@logicflow/core/dist/logic-flow.js\");\n/* harmony import */ var _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_logicflow_core__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _task__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./task */ \"./packages/SnakerFlowDesigner/src/snakerflow/task/index.js\");\n/* harmony import */ var _transition__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./transition */ \"./packages/SnakerFlowDesigner/src/snakerflow/transition/index.js\");\n/* harmony import */ var _custom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./custom */ \"./packages/SnakerFlowDesigner/src/snakerflow/custom/index.js\");\n/* harmony import */ var _start__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./start */ \"./packages/SnakerFlowDesigner/src/snakerflow/start/index.js\");\n/* harmony import */ var _end__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./end */ \"./packages/SnakerFlowDesigner/src/snakerflow/end/index.js\");\n/* harmony import */ var _decision__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./decision */ \"./packages/SnakerFlowDesigner/src/snakerflow/decision/index.js\");\n/* harmony import */ var _join__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./join */ \"./packages/SnakerFlowDesigner/src/snakerflow/join/index.js\");\n/* harmony import */ var _fork__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./fork */ \"./packages/SnakerFlowDesigner/src/snakerflow/fork/index.js\");\n/* harmony import */ var _subProcess__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./subProcess */ \"./packages/SnakerFlowDesigner/src/snakerflow/subProcess/index.js\");\n/* harmony import */ var _PropertySetting_index_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../PropertySetting/index.vue */ \"./packages/SnakerFlowDesigner/src/PropertySetting/index.vue\");\n/* harmony import */ var _control_DataDetail_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./control/DataDetail.vue */ \"./packages/SnakerFlowDesigner/src/snakerflow/control/DataDetail.vue\");\n/* harmony import */ var _control_ImportData_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./control/ImportData.vue */ \"./packages/SnakerFlowDesigner/src/snakerflow/control/ImportData.vue\");\n/* harmony import */ var _control_HighLightData_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./control/HighLightData.vue */ \"./packages/SnakerFlowDesigner/src/snakerflow/control/HighLightData.vue\");\n/* harmony import */ var _logicflow_extension__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @logicflow/extension */ \"./node_modules/@logicflow/extension/es/index.js\");\n/* harmony import */ var _logicflow_core_dist_style_index_css__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @logicflow/core/dist/style/index.css */ \"./node_modules/@logicflow/core/dist/style/index.css\");\n/* harmony import */ var _logicflow_core_dist_style_index_css__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(_logicflow_core_dist_style_index_css__WEBPACK_IMPORTED_MODULE_18__);\n/* harmony import */ var _logicflow_extension_lib_style_index_css__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @logicflow/extension/lib/style/index.css */ \"./node_modules/@logicflow/extension/lib/style/index.css\");\n/* harmony import */ var _logicflow_extension_lib_style_index_css__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(_logicflow_extension_lib_style_index_css__WEBPACK_IMPORTED_MODULE_19__);\n/* harmony import */ var _tool__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./tool */ \"./packages/SnakerFlowDesigner/src/snakerflow/tool.js\");\n/* harmony import */ var clipboard__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! clipboard */ \"./node_modules/clipboard/dist/clipboard.js\");\n/* harmony import */ var clipboard__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(clipboard__WEBPACK_IMPORTED_MODULE_21__);\n/* harmony import */ var element_ui__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! element-ui */ \"./node_modules/element-ui/lib/element-ui.common.js\");\n/* harmony import */ var element_ui__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(element_ui__WEBPACK_IMPORTED_MODULE_22__);\n/* harmony import */ var _wfSubProcess__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./wfSubProcess */ \"./packages/SnakerFlowDesigner/src/snakerflow/wfSubProcess/index.js\");\n\n\n\n// @ is an alias to /src\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'SnakerFlowDesigner',\n components: {\n PropertySetting: _PropertySetting_index_vue__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n DataDetail: _control_DataDetail_vue__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n ImportData: _control_ImportData_vue__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n HighLightData: _control_HighLightData_vue__WEBPACK_IMPORTED_MODULE_16__[\"default\"]\n },\n props: {\n value: {\n type: [String, Object],\n default() {\n return undefined;\n }\n },\n config: {\n type: Object,\n default() {\n return {\n grid: true\n };\n }\n },\n viewer: {\n // 预览模式\n type: Boolean,\n default: false\n },\n showDoc: {\n // 是否显示文档\n type: Boolean,\n default: true\n },\n highLight: {\n // 高亮数据\n type: Object,\n default() {\n return {};\n }\n },\n extendAttrConfig: {\n // 扩展属性配置\n type: Object\n },\n // 扩展的属性key\n extendPropertyKeys: {\n type: Array\n },\n // 禁止点击的节点\n disabledClickNodes: {\n type: Array\n }\n },\n data() {\n return {\n lf: null,\n nodeClick: null,\n dialogTitle: '',\n dialogVisible: false,\n dialogType: 'DataDetail',\n graphData: {},\n clipboard: null,\n processForm: {},\n refreshLfData: 1\n };\n },\n watch: {\n value: {\n handler(n) {\n if (n && this.lf) {\n // this.init()\n const value = this.tranData(n);\n this.initProcessForm(value);\n if (value.nodes) {\n this.lf.render(value);\n }\n }\n },\n deep: true\n },\n processForm: {\n handler(n) {\n if (n) {\n console.log(n);\n delete n.type;\n this.$emit('input', n);\n }\n },\n deep: true\n },\n highLight: {\n handler(n) {\n this.setHighLight(n);\n },\n deep: true\n }\n },\n computed: {\n copyJsonContent() {\n if (this.dialogType === 'DataDetail' && this.lf) {\n return JSON.stringify({\n ...this.tranData(this.value),\n ...this.lf.getGraphData()\n }, null, 2);\n }\n return '';\n },\n copyXmlContent() {\n if (this.dialogType === 'DataDetail' && this.lf) {\n return Object(_tool__WEBPACK_IMPORTED_MODULE_20__[\"logicFlowJsonToSnakerXml\"])({\n ...this.tranData(this.value),\n ...this.lf.getGraphData()\n });\n }\n return '';\n },\n localStorageLfData() {\n const res = [];\n if (this.dialogType === 'ImportData' && [1, 2].includes(this.refreshLfData)) {\n Object.keys(window.localStorage).forEach(key => {\n if (key.startsWith('LFDATA###')) {\n const arr = key.split('###');\n res.push({\n value: key,\n label: arr[2]\n });\n }\n });\n }\n return res;\n }\n },\n mounted() {\n this.init();\n if (this.tranData(this.value)) {\n this.initProcessForm(this.tranData(this.value));\n this.lf.render(this.tranData(this.value));\n this.setHighLight(this.highLight);\n }\n },\n methods: {\n tranData(n) {\n if (typeof n === 'string') {\n return Object(_tool__WEBPACK_IMPORTED_MODULE_20__[\"snakerXml2LogicFlowJson\"])(n);\n }\n return n;\n },\n /**\r\n * 初始化流程定义表单信息\r\n */\n initProcessForm(data) {\n console.log(data);\n this.$set(this.processForm, 'type', 'snaker:process');\n this.$set(this.processForm, 'name', data.name);\n this.$set(this.processForm, 'category', data.category);\n this.$set(this.processForm, 'displayName', data.displayName);\n this.$set(this.processForm, 'expireTime', data.expireTime);\n this.$set(this.processForm, 'instanceUrl', data.instanceUrl);\n this.$set(this.processForm, 'h5InstanceUrl', data.h5InstanceUrl);\n this.$set(this.processForm, 'instanceNoClass', data.instanceNoClass);\n this.$set(this.processForm, 'preInterceptors', data.preInterceptors);\n this.$set(this.processForm, 'postInterceptors', data.postInterceptors);\n },\n init() {\n // 画布配置\n _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default.a.use(_logicflow_extension__WEBPACK_IMPORTED_MODULE_17__[\"Snapshot\"]);\n _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default.a.use(_logicflow_extension__WEBPACK_IMPORTED_MODULE_17__[\"DndPanel\"]);\n _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default.a.use(_logicflow_extension__WEBPACK_IMPORTED_MODULE_17__[\"SelectionSelect\"]);\n _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default.a.use(_logicflow_extension__WEBPACK_IMPORTED_MODULE_17__[\"Menu\"]);\n _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default.a.use(_logicflow_extension__WEBPACK_IMPORTED_MODULE_17__[\"Control\"]);\n _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default.a.use(_logicflow_extension__WEBPACK_IMPORTED_MODULE_17__[\"Group\"]);\n const defaultConfig = {};\n if (this.viewer) {\n defaultConfig.isSilentMode = true;\n }\n const lf = new _logicflow_core__WEBPACK_IMPORTED_MODULE_3___default.a({\n ...this.config,\n ...defaultConfig,\n container: document.querySelector('#LF-view')\n });\n this.lf = lf;\n // 注册自定义元素\n this.lf.register(_task__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\n this.lf.register(_transition__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n this.lf.register(_custom__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n this.lf.register(_start__WEBPACK_IMPORTED_MODULE_7__[\"default\"]);\n this.lf.register(_end__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n this.lf.register(_decision__WEBPACK_IMPORTED_MODULE_9__[\"default\"]);\n this.lf.register(_join__WEBPACK_IMPORTED_MODULE_10__[\"default\"]);\n this.lf.register(_fork__WEBPACK_IMPORTED_MODULE_11__[\"default\"]);\n this.lf.register(_subProcess__WEBPACK_IMPORTED_MODULE_12__[\"default\"]);\n this.lf.register(_wfSubProcess__WEBPACK_IMPORTED_MODULE_23__[\"default\"]);\n // 初始化操作栏\n this.initOp(this.lf);\n // 初始化事件\n this.initEvent(lf);\n },\n initOp(lf) {\n if (this.viewer) {\n // eslint-disable-next-line no-debugger\n // 预览模式时\n console.log(this.lf);\n console.log(this.lf.extension.menu.setMenuConfig);\n // this.lf.extension.menu.setMenuConfig({\n // nodeMenu: [],\n // edgeMenu: []\n // })\n this.initDoc();\n return;\n }\n // 设置拖拽面板\n this.lf.extension.dndPanel.setPatternItems([{\n type: 'snaker:start',\n text: '开始',\n label: '开始节点',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAAnBJREFUOBGdVL1rU1EcPfdGBddmaZLiEhdx1MHZQXApraCzQ7GKLgoRBxMfcRELuihWKcXFRcEWF8HBf0DdDCKYRZpnl7p0svLe9Zzbd29eQhTbC8nv+9zf130AT63jvooOGS8Vf9Nt5zxba7sXQwODfkWpkbjTQfCGUd9gIp3uuPP8bZ946g56dYQvnBg+b1HB8VIQmMFrazKcKSvFW2dQTxJnJdQ77urmXWOMBCmXM2Rke4S7UAW+/8ywwFoewmBps2tu7mbTdp8VMOkIRAkKfrVawalJTtIliclFbaOBqa0M2xImHeVIfd/nKAfVq/LGnPss5Kh00VEdSzfwnBXPUpmykNss4lUI9C1ga+8PNrBD5YeqRY2Zz8PhjooIbfJXjowvQJBqkmEkVnktWhwu2SM7SMx7Cj0N9IC0oQXRo8xwAGzQms+xrB/nNSUWVveI48ayrFGyC2+E2C+aWrZHXvOuz+CiV6iycWe1Rd1Q6+QUG07nb5SbPrL4426d+9E1axKjY3AoRrlEeSQo2Eu0T6BWAAr6COhTcWjRaYfKG5csnvytvUr/WY4rrPMB53Uo7jZRjXaG6/CFfNMaXEu75nG47X+oepU7PKJvvzGDY1YLSKHJrK7vFUwXKkaxwhCW3u+sDFMVrIju54RYYbFKpALZAo7sB6wcKyyrd+aBMryMT2gPyD6GsQoRFkGHr14TthZni9ck0z+Pnmee460mHXbRAypKNy3nuMdrWgVKj8YVV8E7PSzp1BZ9SJnJAsXdryw/h5ctboUVi4AFiCd+lQaYMw5z3LGTBKjLQOeUF35k89f58Vv/tGh+l+PE/wG0rgfIUbZK5AAAAABJRU5ErkJggg=='\n }, {\n type: 'snaker:task',\n text: '用户任务',\n label: '用户任务',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAEFVwZaAAAABGdBTUEAALGPC/xhBQAAAqlJREFUOBF9VM9rE0EUfrMJNUKLihGbpLGtaCOIR8VjQMGDePCgCCIiCNqzCAp2MyYUCXhUtF5E0D+g1t48qAd7CCLqQUQKEWkStcEfVGlLdp/fm3aW2QQdyLzf33zz5m2IsAZ9XhDpyaaIZkTS4ASzK41TFao88GuJ3hsr2pAbipHxuSYyKRugagICGANkfFnNh3HeE2N0b3nN2cgnpcictw5veJIzxmDamSlxxQZicq/mflxhbaH8BLRbuRwNtZp0JAhoplVRUdzmCe/vO27wFuuA3S5qXruGdboy5/PRGFsbFGKo/haRtQHIrM83bVeTrOgNhZReWaYGnE4aUQgTJNvijJFF4jQ8BxJE5xfKatZWmZcTQ+BVgh7s8SgPlCkcec4mGTmieTP4xd7PcpIEg1TX6gdeLW8rTVMVLVvb7ctXoH0Cydl2QOPJBG21STE5OsnbweVYzAnD3A7PVILuY0yiiyDwSm2g441r6rMSgp6iK42yqroI2QoXeJVeA+YeZSa47gZdXaZWQKTrG93rukk/l2Al6Kzh5AZEl7dDQy+JjgFahQjRopSxPbrbvK7GRe9ePWBo1wcU7sYrFZtavXALwGw/7Dnc50urrHJuTPSoO2IMV3gUQGNg87IbSOIY9BpiT9HV7FCZ94nPXb3MSnwHn/FFFE1vG6DTby+r31KAkUktB3Qf6ikUPWxW1BkXSPQeMHHiW0+HAd2GelJsZz1OJegCxqzl+CLVHa/IibuHeJ1HAKzhuDR+ymNaRFM+4jU6UWKXorRmbyqkq/D76FffevwdCp+jN3UAN/C9JRVTDuOxC/oh+EdMnqIOrlYteKSfadVRGLJFJPSB/ti/6K8f0CNymg/iH2gO/f0DwE0yjAFO6l8JaR5j0VPwPwfaYHqOqrCI319WzwhwzNW/aQAAAABJRU5ErkJggg==',\n className: 'important-node'\n }, {\n type: 'snaker:custom',\n text: '自定义任务',\n label: '自定义任务',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAAOVJREFUOBGtVMENwzAIjKP++2026ETdpv10iy7WFbqFyyW6GBywLCv5gI+Dw2Bluj1znuSjhb99Gkn6QILDY2imo60p8nsnc9bEo3+QJ+AKHfMdZHnl78wyTnyHZD53Zzx73MRSgYvnqgCUHj6gwdck7Zsp1VOrz0Uz8NbKunzAW+Gu4fYW28bUYutYlzSa7B84Fh7d1kjLwhcSdYAYrdkMQVpsBr5XgDGuXwQfQr0y9zwLda+DUYXLaGKdd2ZTtvbolaO87pdo24hP7ov16N0zArH1ur3iwJpXxm+v7oAJNR4JEP8DoAuSFEkYH7cAAAAASUVORK5CYII=',\n className: 'import_icon'\n }, {\n type: 'snaker:decision',\n label: '条件判断',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAAHeEJUAAAAABGdBTUEAALGPC/xhBQAAAvVJREFUOBGNVEFrE0EU/mY3bQoiFlOkaUJrQUQoWMGePLX24EH0IIoHKQiCV0G8iE1covgLiqA/QTzVm1JPogc9tIJYFaQtlhQxqYjSpunu+L7JvmUTU3AgmTfvffPNN++9WSA1DO182f6xwILzD5btfAoQmwL5KJEwiQyVbSVZ0IgRyV6PTpIJ81E5ZvqfHQR0HUOBHW4L5Et2kQ6Zf7iAOhTFAA8s0pEP7AXO1uAA52SbqGk6h/6J45LaLhO64ByfcUzM39V7ZiAdS2yCePPEIQYvTUHqM/n7dgQNfBKWPjpF4ISk8q3J4nB11qw6X8l+FsF3EhlkEMfrjIer3wJTLwS2aCNcj4DbGxXTw00JmAuO+Ni6bBxVUCvS5d9aa04+so4pHW5jLTywuXAL7jJ+D06sl82Sgl2JuVBQn498zkc2bGKxULHjCnSMadBKYDYYHAtsby1EQ5lNGrQd4Y3v4Zo0XdGEmDno46yCM9Tk+RiJmUYHS/aXHPNTcjxcbTFna000PFJHIVZ5lFRqRpJWk9/+QtlOUYJj9HG5pVFEU7zqIYDVsw2s+AJaD8wTd2umgSCCyUxgGsS1Y6TBwXQQTFuZaHcd8gAGioE90hlsY+wMcs30RduYtxanjMGal8H5dMW67dmT1JFtYUEe8LiQLRsPZ6IIc7A4J5tqco3T0pnv/4u0kyzrYUq7gASuEyI8VXKvB9Odytv6jS/PNaZBln0nioJG/AVQRZvApOdhjj3Jt8QC8Im09SafwdBdvIpztpxWxpeKCC+EsFdS8DCyuCn2munFpL7ctHKp+Xc5cMybeIyMAN33SPL3ZR9QV1XVwLyzHm6Iv0/yeUuUb7PPlZC4D4HZkeu6dpF4v9j9MreGtMbxMMRLIcjJic9yHi7WQ3yVKzZVWUr5UrViJvn1FfUlwe/KYVfYyWRLSGNu16hR01U9IacajXPei0wx/5BqgInvJN+MMNtNme7ReU9SBbgntovn0kKHpFg7UogZvaZiOue/q1SBo9ktHzQAAAAASUVORK5CYII='\n }, {\n type: 'snaker:fork',\n label: '分支',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAASlJREFUOE+tlL9Lw1AQx78X/GuSzJ2zugqddNPBwS3BJqWCmwnq5lKcXAVHN0EFJ0EQ2pfZ3U1FKohfeaWRYl/zniZvu+P43H3vxxO0/KQJz895+D7B3tO+TCpOI2CQkwAu6WFQ7sqjhjoB/YLrQmwZ1ERTH/EGYkf15cwKDAuukbiwtUaA4TiVbSswyHkNIFKpLMTOJL8ASFQqp06SLcArj+iNMnlYGIqfcxWCjveF23EmN1VAHdDUhqmMsOA5ie5PwAoClUip7T8DgyP6+IT6lU3bz3M+Yw+NFbYObF1yVXarQ6lb2n+vzTKow2K/AoidFzs8YESBvpba53x6s6FtkthY+jkAHySSMpMT6y1b+qu/rzsK4rIn9063bAEeq1Ti+ZhGFZqSfQNEXZkVkDFbFAAAAABJRU5ErkJggg=='\n }, {\n type: 'snaker:join',\n label: '合并',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAOVJREFUOE/lkkESgjAMRZPxIrhz1EPAUTiFZQWu0FPITeQQlnFnbxINU5iQmVKZYQc72v6X5P8grPzhyjzYKvBQU7JD+Cg/HSE03QWvS3zuPfTAUglT/keC/FVgq6Gs4bN3gU7eBUMRXTtrcK+Bpxs9ASDRBWdTPt6pRILqJ2yswVxCZUEJnQV60YM7Cfg4nLsBGt1DPxr7OfHKFxgLWYM966+RCaHSaZ9rSgmBfeTgsiG4IFAIWmswC4SSStikQx+A9IrH5BTH6joUvTIjMLDYQAR5V2CzeLGXCGJvoynHAPp+g8AvqvthFal5qd4AAAAASUVORK5CYII='\n }, {\n type: 'snaker:end',\n text: '结束',\n label: '结束节点',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAA1BJREFUOBFtVE1IVUEYPXOf+tq40Y3vPcmFIdSjIorWoRG0ERWUgnb5FwVhYQSl72oUoZAboxKNFtWiwKRN0M+jpfSzqJAQclHo001tKkjl3emc8V69igP3znzfnO/M9zcDcKT67azmjYWTwl9Vn7Vumeqzj1DVb6cleQY4oAVnIOPb+mKAGxQmKI5CWNJ2aLPatxWa3aB9K7/fB+/Z0jUF6TmMlFLQqrkECWQzOZxYGjTlOl8eeKaIY5yHnFn486xBustDjWT6dG7pmjHOJd+33t0iitTPkK6tEvjxq4h2MozQ6WFSX/LkDUGfFwfhEZj1Auz/U4pyAi5Sznd7uKzznXeVHlI/Aywmk6j7fsUsEuCGADrWARXXwjxWQsUbIupDHJI7kF5dRktg0eN81IbiZXiTESic50iwS+t1oJgL83jAiBupLDCQqwziaWSoAFSeIR3P5Xv5az00wyIn35QRYTwdSYbz8pH8fxUUAtxnFvYmEmgI0wYXUXcCCSpeEVpXlsRhBnCEATxWylL9+EKCAYhe1NGstUa6356kS9NVvt3DU2fd+Wtbm/+lSbylJqsqkSm9CRhvoJVlvKPvF1RKY/FcPn5j4UfIMLn8D4UYb54BNsilTDXKnF4CfTobA0FpoW/LSp306wkXM+XaOJhZaFkcNM82ASNAWMrhrUbRfmyeI1FvRBTpN06WKxa9BK0o2E4Pd3zfBBEwPsv9sQBnmLVbLEIZ/Xe9LYwJu/Er17W6HYVBc7vmuk0xUQ+pqxdom5Fnp55SiytXLPYoMXNM4u4SNSCFWnrVIzKG3EGyMXo6n/BQOe+bX3FClY4PwydVhthOZ9NnS+ntiLh0fxtlUJHAuGaFoVmttpVMeum0p3WEXbcll94l1wM/gZ0Ccczop77VvN2I7TlsZCsuXf1WHvWEhjO8DPtyOVg2/mvK9QqboEth+7pD6NUQC1HN/TwvydGBARi9MZSzLE4b8Ru3XhX2PBxf8E1er2A6516o0w4sIA+lwURhAON82Kwe2iDAC1Watq4XHaGQ7skLcFOtI5lDxuM2gZe6WFIotPAhbaeYlU4to5cuarF1QrcZ/lwrLaCJl66JBocYZnrNlvm2+MBCTmUymPrYZVbjdlr/BxlMjmNmNI3SAAAAAElFTkSuQmCC'\n }, {\n type: 'snaker:wfSubProcess',\n text: 'snaker子流程',\n label: 'snaker子流程',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAiFJREFUOE+1lD9oU1EUxn/nviRVB0Hwz1SwJn0WXRylGbSTboJTKwgFwTrqoJK8lKQ0LxUEBR2UolRcDKJQVFxbFx10cNL2JSFFdHARN8Um92jSpqY2bUipdzz3vN/53vu+d4QtPrLFPNoC3XHNYDhXH2y5H4xKZiMRGwIP+vpMhZ+qvBSIqDAkymzgydh60HWB0ax2O8InNZwpJORRDeBmdQJhMPCkp2Ogm9EDhClZ4XAxKR/qwKXXPxl4crRj4LKiPMJHByYrcEIgrXCj4MntTQGj13Wv84s7wOk6QLkWpCSxaVMaD/bmdEaqvGrncK1/lSmxcT3earo4pGtAC7Ot7oujslJfAzSGmY7CbhlrVt4SGHiyql5zVx2OFZIy0Dys1af4v0A3q2cRHholPpeS1w01DYUVZbDsyddavcfXfSEh/69ZKwp7c3rTKFErlES5CAwFnuRdX98ovBfYBgzbEN2hH4SqEaaM8hboA3bPe9K/ymU3p1+MEJ9LyILr6xRKl6mQtBGmg6QcqQfd17IoVxR2APEgJef7JnS/tZRrg4pX5fOKQtfXd1hemBAPqpa7As/DizxdDDNvLaccYY8Kj61lwAi7VBhxDBdshWEM6YaRf4FL/+klYCcwXTVcLiWk6Gb1HrK8vmAy8GQkNq5RY3gC1JXTFJ012yaW00ONZdAwJXZLuyrf2L6Qke/NsenLqTuXlKC51nbBdhTyP82/ASr35RWxFgVJAAAAAElFTkSuQmCC',\n className: 'import_icon'\n }, {\n type: 'snaker:subProcess',\n text: '',\n label: '子流程',\n properties: {},\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAiFJREFUOE+1lD9oU1EUxn/nviRVB0Hwz1SwJn0WXRylGbSTboJTKwgFwTrqoJK8lKQ0LxUEBR2UolRcDKJQVFxbFx10cNL2JSFFdHARN8Um92jSpqY2bUipdzz3vN/53vu+d4QtPrLFPNoC3XHNYDhXH2y5H4xKZiMRGwIP+vpMhZ+qvBSIqDAkymzgydh60HWB0ax2O8InNZwpJORRDeBmdQJhMPCkp2Ogm9EDhClZ4XAxKR/qwKXXPxl4crRj4LKiPMJHByYrcEIgrXCj4MntTQGj13Wv84s7wOk6QLkWpCSxaVMaD/bmdEaqvGrncK1/lSmxcT3earo4pGtAC7Ot7oujslJfAzSGmY7CbhlrVt4SGHiyql5zVx2OFZIy0Dys1af4v0A3q2cRHholPpeS1w01DYUVZbDsyddavcfXfSEh/69ZKwp7c3rTKFErlES5CAwFnuRdX98ovBfYBgzbEN2hH4SqEaaM8hboA3bPe9K/ymU3p1+MEJ9LyILr6xRKl6mQtBGmg6QcqQfd17IoVxR2APEgJef7JnS/tZRrg4pX5fOKQtfXd1hemBAPqpa7As/DizxdDDNvLaccYY8Kj61lwAi7VBhxDBdshWEM6YaRf4FL/+klYCcwXTVcLiWk6Gb1HrK8vmAy8GQkNq5RY3gC1JXTFJ012yaW00ONZdAwJXZLuyrf2L6Qke/NsenLqTuXlKC51nbBdhTyP82/ASr35RWxFgVJAAAAAElFTkSuQmCC',\n className: 'import_icon'\n }]);\n // 设置右键菜单\n this.lf.extension.menu.setMenuConfig({\n nodeMenu: [{\n text: '删除',\n callback(node) {\n // node为该节点数据\n lf.deleteNode(node.id);\n }\n }]\n });\n // 控制面板-清空画布\n this.lf.extension.control.addItem({\n iconClass: 'lf-control-clear',\n title: 'clear',\n text: '清空',\n onClick: (lf, ev) => {\n lf.clearData();\n }\n });\n // 控制面板-添加查看按钮\n this.lf.extension.control.addItem({\n iconClass: 'lf-control-see',\n title: '',\n text: '查看',\n onClick: (lf, ev) => {\n this.graphData = {\n ...this.tranData(this.value),\n ...lf.getGraphData()\n };\n this.$nextTick(() => {\n this.dialogTitle = '查看流程数据';\n this.dialogVisible = true;\n this.dialogType = 'DataDetail';\n });\n }\n });\n // 控制面板-添加导入按钮\n this.lf.extension.control.addItem({\n iconClass: 'lf-control-import',\n title: '',\n text: '导入',\n onClick: (lf, ev) => {\n this.dialogTitle = '导入流程数据(同时支持xml/json)';\n this.dialogVisible = true;\n this.dialogType = 'ImportData';\n }\n });\n // 控制面板-设置高亮数据\n this.lf.extension.control.addItem({\n iconClass: 'lf-control-setting',\n title: '',\n text: '设置高亮',\n onClick: (lf, ev) => {\n this.dialogTitle = '导入高亮数据(json)';\n this.dialogVisible = true;\n this.dialogType = 'HighLightData';\n }\n });\n // 控制面板-清空画布\n this.lf.extension.control.addItem({\n iconClass: 'lf-control-save',\n title: '',\n text: '保存',\n onClick: (lf, ev) => {\n this.graphData = lf.getGraphData();\n this.$nextTick(() => {\n const res = {\n ...this.tranData(this.value),\n ...this.graphData\n };\n this.$emit('on-save', {\n json: res,\n xml: Object(_tool__WEBPACK_IMPORTED_MODULE_20__[\"logicFlowJsonToSnakerXml\"])(res)\n });\n });\n }\n });\n this.initDoc();\n },\n initDoc() {\n // if (this.showDoc) {\n // // 控制面板-码云\n // this.lf.extension.control.addItem({\n // iconClass: 'lf-control-mayu',\n // title: '',\n // text: '码云',\n // onClick: (lf, ev) => {\n // window.location.href = 'https://gitee.com/mldong/snakerflow-designer-vue'\n // }\n // })\n // }\n },\n initEvent(lf) {\n if (this.viewer) return;\n const {\n eventCenter\n } = this.lf.graphModel;\n eventCenter.on('node:click', args => {\n if ((this.disabledClickNodes || []).includes(args.data.type)) {\n return;\n }\n this.nodeClick = args.data;\n this.$nextTick(() => {\n this.$refs.propertySetting.show();\n });\n });\n eventCenter.on('edge:click', args => {\n this.nodeClick = args.data;\n this.$nextTick(() => {\n this.$refs.propertySetting.show();\n });\n });\n eventCenter.on('edge:add', args => {\n // 修改边类型\n lf.changeEdgeType(args.data.id, 'snaker:transition');\n });\n eventCenter.on('blank:contextmenu', args => {\n this.nodeClick = {\n name: this.processForm.name,\n displayName: this.processForm.displayName,\n category: this.processForm.category,\n expireTime: this.processForm.expireTime,\n instanceUrl: this.processForm.instanceUrl,\n h5InstanceUrl: this.processForm.h5InstanceUrl,\n instanceNoClass: this.processForm.instanceNoClass,\n preInterceptors: this.processForm.preInterceptors,\n postInterceptors: this.processForm.postInterceptors,\n type: 'snaker:process'\n };\n this.$nextTick(() => {\n this.$refs.propertySetting.show();\n });\n });\n },\n handleOpened() {\n if (this.dialogType === 'DataDetail') {\n const copyEl = document.querySelectorAll('.m-btn-copy');\n this.clipboard = new clipboard__WEBPACK_IMPORTED_MODULE_21___default.a(copyEl, {\n container: document.querySelector('.m-dialog-data-detail')\n });\n this.clipboard.on('success', function (e) {\n element_ui__WEBPACK_IMPORTED_MODULE_22__[\"Message\"].success('复制成功');\n e.clearSelection();\n });\n this.clipboard.on('error', function (e) {\n element_ui__WEBPACK_IMPORTED_MODULE_22__[\"Message\"].error('复制失败');\n });\n }\n },\n handleClose() {\n this.dialogVisible = false;\n this.$refs.dialogComponent.handleClose();\n if (this.dialogType === 'DataDetail' && this.clipboard) {\n this.clipboard.destroy();\n }\n },\n handleSubmit() {\n if (this.dialogType === 'ImportData') {\n this.lf.clearData();\n try {\n this.importJson(this.$refs.dialogComponent.graphJsonStr);\n } catch {\n this.importXml(this.$refs.dialogComponent.graphJsonStr);\n }\n } else if (this.dialogType === 'HighLightData') {\n this.setHighLight(JSON.parse(this.$refs.dialogComponent.highLightJsonStr));\n }\n this.dialogVisible = false;\n },\n /**\r\n * 导入snakerxml\r\n */\n importXml(xml) {\n if (!xml) return;\n const data = Object(_tool__WEBPACK_IMPORTED_MODULE_20__[\"snakerXml2LogicFlowJson\"])(xml);\n this.initProcessForm(data);\n this.lf.render(data);\n },\n /**\r\n * 导入jsonstr\r\n */\n importJson(jsonStr) {\n if (!jsonStr) return;\n let data = jsonStr;\n if (typeof jsonStr === 'string') {\n data = JSON.parse(jsonStr);\n }\n this.initProcessForm(data);\n this.lf.render(data);\n },\n /**\r\n * 设置高亮数据\r\n * @param data { \"historyNodeNames\": [], \"historyEdgeNames\": [], \"activeNodeNames\": []}\r\n */\n setHighLight(data) {\n if (!this.lf || !data) return;\n console.log(data);\n // 设置历史节点\n if (data && data.historyNodeNames) {\n data.historyNodeNames.forEach(nodeName => {\n this.lf.setProperties(nodeName, {\n state: 'history'\n });\n });\n }\n // 设置当前节点\n if (data && data.activeNodeNames) {\n data.activeNodeNames.forEach(nodeName => {\n this.lf.setProperties(nodeName, {\n state: 'active'\n });\n });\n }\n // 设置历史边\n if (data && data.historyEdgeNames) {\n data.historyEdgeNames.forEach(edgeName => {\n const edgeModel = this.lf.getEdgeModelById(edgeName);\n if (edgeModel) {\n edgeModel.setProperties({\n state: 'history'\n });\n }\n });\n }\n },\n handleCommand(key) {\n this.$refs.dialogComponent.graphJsonStr = window.localStorage.getItem(key);\n },\n handleRemove(key) {\n window.localStorage.removeItem(key);\n if (this.refreshLfData === 1) {\n this.refreshLfData = 2;\n } else {\n this.refreshLfData = 1;\n }\n }\n }\n});\n\n//# sourceURL=webpack://SnakerflowDesigner/./packages/SnakerFlowDesigner/src/snakerflow/index.vue?./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options"); /***/ }), @@ -12899,7 +12899,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TaskView\", function() { return TaskView; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TaskModel\", function() { return TaskModel; });\n/* harmony import */ var E_project_snakerflow_designer_vue_node_modules_babel_runtime_helpers_esm_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/defineProperty.js */ \"./node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _logicflow_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @logicflow/core */ \"./node_modules/@logicflow/core/dist/logic-flow.js\");\n/* harmony import */ var _logicflow_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_logicflow_core__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _tool__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../tool */ \"./packages/SnakerFlowDesigner/src/snakerflow/tool.js\");\n\n\n\nclass TaskModel extends _logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"RectNodeModel\"] {\n constructor(data, graphModel) {\n super(data, graphModel);\n this.width = data.properties.width ? data.properties.width : 120;\n this.height = data.properties.height ? data.properties.height : 80;\n }\n getNodeStyle() {\n const style = super.getNodeStyle();\n return Object(_tool__WEBPACK_IMPORTED_MODULE_2__[\"nodeStyleHandle\"])(this, style);\n }\n}\nObject(E_project_snakerflow_designer_vue_node_modules_babel_runtime_helpers_esm_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(TaskModel, \"extendKey\", 'TaskModel');\nclass TaskView extends _logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"RectNode\"] {\n getLabelShape() {\n const {\n model\n } = this.props;\n const {\n x,\n y,\n width,\n height\n } = model;\n const style = model.getNodeStyle();\n return Object(_logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"h\"])('svg', {\n x: x - width / 2 + 5,\n y: y - height / 2 + 5,\n width: 25,\n height: 25,\n viewBox: '0 0 1274 1024'\n }, Object(_logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"h\"])('path', {\n fill: style.stroke,\n d: 'M655.807326 287.35973m-223.989415 0a218.879 218.879 0 1 0 447.978829 0 218.879 218.879 0 1 0-447.978829 0ZM1039.955839 895.482975c-0.490184-212.177424-172.287821-384.030443-384.148513-384.030443-211.862739 0-383.660376 171.85302-384.15056 384.030443L1039.955839 895.482975z'\n }));\n }\n getShape() {\n const {\n model\n } = this.props;\n const {\n x,\n y,\n width,\n height,\n radius\n } = model;\n const style = model.getNodeStyle();\n // todo: 将basic-shape对外暴露,在这里可以直接用。现在纯手写有点麻烦。\n return Object(_logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"h\"])('g', {}, [Object(_logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"h\"])('rect', {\n ...style,\n x: x - width / 2,\n y: y - height / 2,\n rx: radius,\n ry: radius,\n width,\n height\n }), this.getLabelShape()]);\n }\n}\nObject(E_project_snakerflow_designer_vue_node_modules_babel_runtime_helpers_esm_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(TaskView, \"extendKey\", 'TaskNode');\nconst Task = {\n type: 'snaker:task',\n view: TaskView,\n model: TaskModel\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Task);\n\n//# sourceURL=webpack://SnakerflowDesigner/./packages/SnakerFlowDesigner/src/snakerflow/task/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TaskView\", function() { return TaskView; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TaskModel\", function() { return TaskModel; });\n/* harmony import */ var E_project_snakerflow_designer_vue_node_modules_babel_runtime_helpers_esm_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/defineProperty.js */ \"./node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _logicflow_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @logicflow/core */ \"./node_modules/@logicflow/core/dist/logic-flow.js\");\n/* harmony import */ var _logicflow_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_logicflow_core__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _tool__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../tool */ \"./packages/SnakerFlowDesigner/src/snakerflow/tool.js\");\n\n\n\nclass TaskModel extends _logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"RectNodeModel\"] {\n constructor(data, graphModel) {\n super(data, graphModel);\n this.width = data.properties.width ? data.properties.width : 120;\n this.height = data.properties.height ? data.properties.height : 80;\n this.radius = data.properties.radius ? data.properties.radius : 10;\n }\n getNodeStyle() {\n const style = super.getNodeStyle();\n return Object(_tool__WEBPACK_IMPORTED_MODULE_2__[\"nodeStyleHandle\"])(this, style);\n }\n}\nObject(E_project_snakerflow_designer_vue_node_modules_babel_runtime_helpers_esm_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(TaskModel, \"extendKey\", 'TaskModel');\nclass TaskView extends _logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"RectNode\"] {\n getLabelShape() {\n const {\n model\n } = this.props;\n const {\n x,\n y,\n width,\n height\n } = model;\n const style = model.getNodeStyle();\n return Object(_logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"h\"])('svg', {\n x: x - width / 2 + 5,\n y: y - height / 2 + 5,\n width: 30,\n height: 25,\n viewBox: '0 0 1274 1024'\n }, Object(_logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"h\"])('path', {\n fill: style.stroke,\n d: 'M655.807326 287.35973m-223.989415 0a218.879 218.879 0 1 0 447.978829 0 218.879 218.879 0 1 0-447.978829 0ZM1039.955839 895.482975c-0.490184-212.177424-172.287821-384.030443-384.148513-384.030443-211.862739 0-383.660376 171.85302-384.15056 384.030443L1039.955839 895.482975z'\n }));\n }\n getShape() {\n const {\n model\n } = this.props;\n const {\n x,\n y,\n width,\n height,\n radius\n } = model;\n const style = model.getNodeStyle();\n // todo: 将basic-shape对外暴露,在这里可以直接用。现在纯手写有点麻烦。\n return Object(_logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"h\"])('g', {}, [Object(_logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"h\"])('rect', {\n ...style,\n x: x - width / 2,\n y: y - height / 2,\n rx: radius,\n ry: radius,\n width,\n height\n }), this.getLabelShape()]);\n }\n}\nObject(E_project_snakerflow_designer_vue_node_modules_babel_runtime_helpers_esm_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(TaskView, \"extendKey\", 'TaskNode');\nconst Task = {\n type: 'snaker:task',\n view: TaskView,\n model: TaskModel\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Task);\n\n//# sourceURL=webpack://SnakerflowDesigner/./packages/SnakerFlowDesigner/src/snakerflow/task/index.js?"); /***/ }), @@ -12911,7 +12911,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"nodeStyleHandle\", function() { return nodeStyleHandle; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"edgeStyleHandle\", function() { return edgeStyleHandle; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseXml2Dom\", function() { return parseXml2Dom; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"snakerXml2LogicFlowJson\", function() { return snakerXml2LogicFlowJson; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"logicFlowJsonToSnakerXml\", function() { return logicFlowJsonToSnakerXml; });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.filter.js */ \"./node_modules/core-js/modules/es.iterator.filter.js\");\n/* harmony import */ var core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.find.js */ \"./node_modules/core-js/modules/es.iterator.find.js\");\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\n\n\n\n\n\n\n/**\r\n * 节点样式处理方法\r\n * @param {*}} _this\r\n * @param {*} style\r\n * @returns\r\n */\nconst nodeStyleHandle = (_this, style) => {\n if (_this.properties.state === 'active') {\n style.stroke = '#00ff00';\n } else if (_this.properties.state === 'history') {\n style.stroke = '#ff0000';\n }\n return style;\n};\n/**\r\n * 边样式处理方法\r\n * @param {*}} _this\r\n * @param {*} style\r\n * @returns\r\n */\nconst edgeStyleHandle = (_this, style) => {\n if (_this.properties.state === 'active') {\n style.stroke = '#00ff00';\n } else if (_this.properties.state === 'history') {\n style.stroke = '#ff0000';\n }\n return style;\n};\n/**\r\n * 解析xml成Dom对象\r\n * @param {} xml\r\n * @returns\r\n */\nconst parseXml2Dom = xml => {\n let xmlDoc = null;\n if (window.DOMParser) {\n const parser = new DOMParser();\n xmlDoc = parser.parseFromString(xml, 'text/xml');\n } else {\n // Internet Explorer\n // eslint-disable-next-line no-undef\n xmlDoc = new ActiveXObject('Microsoft.XMLDOM');\n xmlDoc.async = false;\n xmlDoc.loadXML(xml);\n }\n return xmlDoc;\n};\n// 节点标签\nconst NODE_NAMES = ['start', 'task', 'decision', 'end', 'custom', 'join', 'fork', 'subProcess', 'wfSubProcess'];\n// 流程节点属性\nconst PROCESS_ATTR_KEYS = ['name', 'displayName', 'category', 'instanceUrl', 'h5InstanceUrl', 'expireTime', 'instanceNoClass', 'preInterceptors', 'postInterceptors'];\n// 节点属性\nconst NODE_ATTR_KEYS = ['name', 'displayName', 'form', 'assignee', 'assignmentHandler', 'taskType', 'performType', 'preInterceptors', 'postInterceptors', 'reminderTime', 'reminderRepeat', 'expireTime', 'autoExecute', 'callback', 'expr', 'handleClass', 'clazz', 'methodName', 'args', 'layout', 'g', 'form', 'version'];\n// 变迁节点属性\nconst TRANSITION_ATTR_KEYS = ['name', 'displayName', 'to', 'expr', 'g'];\n\n/**\r\n * 将snaker的定义文件转成LogicFlow支持的数据格式\r\n * @param {*} xml\r\n * @returns\r\n */\nconst snakerXml2LogicFlowJson = xml => {\n const graphData = {\n nodes: [],\n edges: []\n };\n const xmlDoc = parseXml2Dom(xml);\n const processDom = xmlDoc.getElementsByTagName('process');\n if (!processDom.length) {\n return graphData;\n }\n let value = null;\n // 解析process属性\n PROCESS_ATTR_KEYS.forEach(key => {\n value = processDom[0].getAttribute(key);\n if (value) {\n graphData[key] = value;\n }\n });\n let nodeEles = null;\n let node = null;\n let lfNode = {};\n // 解析节点\n NODE_NAMES.forEach(key => {\n nodeEles = processDom[0].getElementsByTagName(key);\n if (nodeEles.length) {\n for (var i = 0, len = nodeEles.length; i < len; i++) {\n node = nodeEles[i];\n lfNode = {\n type: 'snaker:' + (key === 'subProcess' ? 'wfSubProcess' : key),\n properties: {}\n };\n // 处理节点\n NODE_ATTR_KEYS.forEach(attrKey => {\n value = node.getAttribute(attrKey);\n if (value) {\n if (attrKey === 'name') {\n lfNode.id = value;\n } else if (attrKey === 'layout') {\n const attr = value.split(',');\n if (attr.length === 4) {\n lfNode.x = attr[0];\n lfNode.y = attr[1];\n lfNode.properties.width = attr[2] <= 0 ? 100 : attr[2];\n lfNode.properties.height = attr[3] <= 0 ? 50 : attr[3];\n }\n } else if (attrKey === 'displayName') {\n lfNode.text = value;\n } else {\n lfNode.properties[attrKey] = value;\n }\n }\n });\n // 处理扩展属性\n if (key === 'task') {\n const fieldEles = node.getElementsByTagName('field');\n if (fieldEles.length) {\n const fieldEle = fieldEles[0];\n const field = {};\n const attr = fieldEle.getElementsByTagName('attr');\n for (var iii = 0; iii < attr.length; iii++) {\n field[attr[iii].getAttribute('name')] = attr[iii].getAttribute('value');\n }\n lfNode.properties.field = field;\n }\n }\n graphData.nodes.push(lfNode);\n // 处理边\n let transitionEles = null;\n let transitionEle = null;\n let edge = {};\n if (key !== 'end') {\n transitionEles = node.getElementsByTagName('transition');\n for (var j = 0, lenn = transitionEles.length; j < lenn; j++) {\n transitionEle = transitionEles[j];\n edge = {};\n edge.id = transitionEle.getAttribute('name');\n edge.type = 'snaker:transition';\n edge.sourceNodeId = lfNode.id;\n edge.targetNodeId = transitionEle.getAttribute('to');\n edge.text = {\n value: transitionEle.getAttribute('displayName') ? transitionEle.getAttribute('displayName') : ''\n };\n edge.properties = {};\n const expr = transitionEle.getAttribute('expr');\n if (expr) {\n edge.properties.expr = expr;\n }\n const g = transitionEle.getAttribute('g');\n if (g) {\n const points = g.split(';');\n if (points.length >= 2) {\n edge.pointsList = [];\n points.forEach(item => {\n const pointArr = item.split(',');\n edge.pointsList.push({\n x: Number(pointArr[0]),\n y: Number(pointArr[1])\n });\n });\n edge.startPoint = edge.pointsList[0];\n edge.endPoint = edge.pointsList[edge.pointsList.length - 1];\n }\n }\n graphData.edges.push(edge);\n }\n }\n }\n }\n });\n return graphData;\n};\n/**\r\n * 将LogicFlow的数据转成snaker的定义文件\r\n * @param {*} data(...processInfo,nodes,edges)\r\n * @returns\r\n */\nconst logicFlowJsonToSnakerXml = data => {\n let xml = '';\n // data的数据由流程定义文件信息+logicFlow数据构成\n // 先构建成流程对象\n const processObj = {\n name: data.name,\n // 流程定义名称\n displayName: data.displayName,\n // 流程定义显示名称\n category: data.category,\n // 流程定义分类\n instanceUrl: data.instanceUrl,\n // 实例启动Url\n h5InstanceUrl: data.h5InstanceUrl,\n // H5实例启动Url\n expireTime: data.expireTime,\n // 期望完成时间\n instanceNoClass: data.instanceNoClass,\n // 实例编号生成类\n preInterceptors: data.preInterceptors,\n // 节点前置拦截器\n postInterceptors: data.postInterceptors // 节点后置拦截器\n };\n /**\r\n * 获取所有子流程\r\n */\n const getSubProcessNodes = () => {\n return data.nodes.filter(node => {\n return node.type === 'snaker:subProcess';\n });\n };\n /**\r\n * 获取开始节点\r\n * @returns\r\n */\n const getStartNode = () => {\n return data.nodes.find(node => {\n return node.type === 'snaker:start';\n });\n };\n /**\r\n * 获取当前节点的所有下一个节点集合\r\n * @param {*} id 当前节点名称\r\n * @returns\r\n */\n const getNextNodes = id => {\n return data.edges.filter(edge => {\n return edge.sourceNodeId === id;\n }).map(edge => {\n return data.nodes.find(node => {\n return node.id === edge.targetNodeId;\n });\n });\n };\n /**\r\n * 获取节点所有输出边\r\n * @param {*} id\r\n * @returns\r\n */\n const getTransitions = id => {\n return data.edges.filter(edge => {\n return edge.sourceNodeId === id;\n }).map(edge => {\n return {\n name: edge.id,\n displayName: edge.text instanceof String || edge.text === undefined ? edge.text : edge.text.value,\n to: edge.targetNodeId,\n // 目地节点id\n expr: edge.properties.expr,\n // 表达式\n g: edge.pointsList.map(point => {\n // 转换点集合\n return point.x + ',' + point.y;\n }).join(';')\n };\n });\n };\n /**\r\n * 构建节点属性\r\n * @param {}} node\r\n * @returns\r\n */\n const buildNode = node => {\n let field;\n if (node.properties.field && Object.keys(node.properties.field).length) {\n field = {\n name: 'ext',\n displayName: '扩展属性',\n attr: Object.keys(node.properties.field).map(key => {\n return {\n name: key,\n value: node.properties.field[key]\n };\n })\n };\n }\n return {\n name: node.id,\n displayName: node.text instanceof String || node.text === undefined ? node.text : node.text.value,\n layout: node.x + ',' + node.y + ',' + (node.properties.width ? node.properties.width : '120') + ',' + (node.properties.height ? node.properties.height : '80'),\n ...node.properties,\n transition: getTransitions(node.id),\n field\n };\n };\n /**\r\n * 特殊字符转义\r\n * @param {*} text\r\n * @returns\r\n */\n const textEncode = text => {\n text = text.replace(/&/g, '&').replace(/\"/g, '"').replace(//g, '>');\n return text;\n };\n /**\r\n * 递归构建节点属性\r\n * @param {} node\r\n */\n const recursionBuildNode = node => {\n const nodeName = node.type.replace('snaker:', '');\n if (!processObj[nodeName + '_' + node.id]) {\n processObj[nodeName + '_' + node.id] = buildNode(node);\n const nextNodes = getNextNodes(node.id);\n nextNodes.forEach(nextNode => {\n recursionBuildNode(nextNode);\n });\n }\n };\n const startNode = getStartNode();\n if (!startNode) {\n // 开始节点不存在,xml不合法\n return '';\n }\n recursionBuildNode(startNode);\n xml = '\\n';\n xml += ' {\n const value = processObj[key];\n if (PROCESS_ATTR_KEYS.includes(key) && value) {\n xml += ' ' + key + '=' + '\"' + textEncode(value) + '\"';\n }\n });\n xml += '>\\n';\n // 生成节点xml\n Object.keys(processObj).forEach(key => {\n const value = processObj[key];\n let nodeName = key.split('_')[0];\n if (NODE_NAMES.includes(nodeName)) {\n if (nodeName === 'wfSubProcess') {\n nodeName = 'subProcess';\n }\n xml += '\\t<' + nodeName;\n // 构造属性\n Object.keys(value).forEach(nodeAttrKey => {\n if (NODE_ATTR_KEYS.includes(nodeAttrKey) && value[nodeAttrKey]) {\n xml += ' ' + nodeAttrKey + '=' + '\"' + textEncode(value[nodeAttrKey]) + '\"';\n }\n });\n xml += '>\\n\\t';\n // 构建transition\n if (value.transition) {\n value.transition.forEach(tran => {\n xml += '\\t {\n if (TRANSITION_ATTR_KEYS.includes(tranAttrKey) && tran[tranAttrKey]) {\n xml += ' ' + tranAttrKey + '=' + '\"' + textEncode(tran[tranAttrKey]) + '\"';\n }\n });\n xml += '>';\n xml += '\\n';\n });\n }\n if (value.field && nodeName === 'task') {\n xml += '\\t\\n';\n value.field.attr.forEach(attrItem => {\n xml += '\\t\\t\\n';\n });\n xml += '\\t\\n';\n }\n xml += '\\t\\n';\n }\n });\n xml += '';\n // 构建子流程模型数据\n const buildSubProcessList = () => {\n const subProcessNodes = getSubProcessNodes();\n const subProcessModel = subProcessNodes.map(n => {\n const subModel = {\n name: n.id,\n // 流程定义名称\n displayName: n.properties.displayName,\n // 流程定义显示名称\n category: n.properties.category,\n // 流程定义分类\n instanceUrl: n.properties.instanceUrl,\n // 实例启动Url\n h5InstanceUrl: n.properties.h5InstanceUrl,\n // H5实例启动Url\n expireTime: n.properties.expireTime,\n // 期望完成时间\n instanceNoClass: n.properties.instanceNoClass,\n // 实例编号生成类\n preInterceptors: n.properties.preInterceptors,\n // 节点前置拦截器\n postInterceptors: n.properties.postInterceptors,\n // 节点后置拦截器\n nodes: data.nodes.filter(item => n.children.includes(item.id)),\n edges: data.edges.filter(item => n.children.includes(item.id))\n };\n subModel.nodes.forEach(item => {\n data.edges.forEach(edge => {\n if (edge.sourceNodeId === item.id) {\n subModel.edges.push(edge);\n }\n });\n });\n return subModel;\n });\n return subProcessModel;\n };\n const subProcessList = buildSubProcessList();\n subProcessList.forEach(processModel => {\n xml += logicFlowJsonToSnakerXml(processModel).replace('', '');\n });\n return xml;\n};\n\n//# sourceURL=webpack://SnakerflowDesigner/./packages/SnakerFlowDesigner/src/snakerflow/tool.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"nodeStyleHandle\", function() { return nodeStyleHandle; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"edgeStyleHandle\", function() { return edgeStyleHandle; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseXml2Dom\", function() { return parseXml2Dom; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"snakerXml2LogicFlowJson\", function() { return snakerXml2LogicFlowJson; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"logicFlowJsonToSnakerXml\", function() { return logicFlowJsonToSnakerXml; });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.filter.js */ \"./node_modules/core-js/modules/es.iterator.filter.js\");\n/* harmony import */ var core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.find.js */ \"./node_modules/core-js/modules/es.iterator.find.js\");\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\n\n\n\n\n\n\n/**\r\n * 节点样式处理方法\r\n * @param {*}} _this\r\n * @param {*} style\r\n * @returns\r\n */\nconst nodeStyleHandle = (_this, style) => {\n if (_this.properties.state === 'active') {\n style.stroke = '#ffa500';\n } else if (_this.properties.state === 'history') {\n style.stroke = '#008000';\n style.fill = '#e6f7ff';\n }\n return style;\n};\n/**\r\n * 边样式处理方法\r\n * @param {*}} _this\r\n * @param {*} style\r\n * @returns\r\n */\nconst edgeStyleHandle = (_this, style) => {\n if (_this.properties.state === 'active') {\n style.stroke = '#ffa500';\n } else if (_this.properties.state === 'history') {\n style.stroke = '#008000';\n }\n return style;\n};\n/**\r\n * 解析xml成Dom对象\r\n * @param {} xml\r\n * @returns\r\n */\nconst parseXml2Dom = xml => {\n let xmlDoc = null;\n if (window.DOMParser) {\n const parser = new DOMParser();\n xmlDoc = parser.parseFromString(xml, 'text/xml');\n } else {\n // Internet Explorer\n // eslint-disable-next-line no-undef\n xmlDoc = new ActiveXObject('Microsoft.XMLDOM');\n xmlDoc.async = false;\n xmlDoc.loadXML(xml);\n }\n return xmlDoc;\n};\n// 节点标签\nconst NODE_NAMES = ['start', 'task', 'decision', 'end', 'custom', 'join', 'fork', 'subProcess', 'wfSubProcess'];\n// 流程节点属性\nconst PROCESS_ATTR_KEYS = ['name', 'displayName', 'category', 'instanceUrl', 'h5InstanceUrl', 'expireTime', 'instanceNoClass', 'preInterceptors', 'postInterceptors'];\n// 节点属性\nconst NODE_ATTR_KEYS = ['name', 'displayName', 'form', 'assignee', 'assignmentHandler', 'taskType', 'performType', 'preInterceptors', 'postInterceptors', 'reminderTime', 'reminderRepeat', 'expireTime', 'autoExecute', 'callback', 'expr', 'handleClass', 'clazz', 'methodName', 'args', 'layout', 'g', 'form', 'version'];\n// 变迁节点属性\nconst TRANSITION_ATTR_KEYS = ['name', 'displayName', 'to', 'expr', 'g'];\n\n/**\r\n * 将snaker的定义文件转成LogicFlow支持的数据格式\r\n * @param {*} xml\r\n * @returns\r\n */\nconst snakerXml2LogicFlowJson = xml => {\n const graphData = {\n nodes: [],\n edges: []\n };\n const xmlDoc = parseXml2Dom(xml);\n const processDom = xmlDoc.getElementsByTagName('process');\n if (!processDom.length) {\n return graphData;\n }\n let value = null;\n // 解析process属性\n PROCESS_ATTR_KEYS.forEach(key => {\n value = processDom[0].getAttribute(key);\n if (value) {\n graphData[key] = value;\n }\n });\n let nodeEles = null;\n let node = null;\n let lfNode = {};\n // 解析节点\n NODE_NAMES.forEach(key => {\n nodeEles = processDom[0].getElementsByTagName(key);\n if (nodeEles.length) {\n for (var i = 0, len = nodeEles.length; i < len; i++) {\n node = nodeEles[i];\n lfNode = {\n type: 'snaker:' + (key === 'subProcess' ? 'wfSubProcess' : key),\n properties: {}\n };\n // 处理节点\n NODE_ATTR_KEYS.forEach(attrKey => {\n value = node.getAttribute(attrKey);\n if (value) {\n if (attrKey === 'name') {\n lfNode.id = value;\n } else if (attrKey === 'layout') {\n const attr = value.split(',');\n if (attr.length === 4) {\n lfNode.x = attr[0];\n lfNode.y = attr[1];\n lfNode.properties.width = attr[2] <= 0 ? 100 : attr[2];\n lfNode.properties.height = attr[3] <= 0 ? 50 : attr[3];\n }\n } else if (attrKey === 'displayName') {\n lfNode.text = value;\n } else {\n lfNode.properties[attrKey] = value;\n }\n }\n });\n // 处理扩展属性\n if (key === 'task') {\n const fieldEles = node.getElementsByTagName('field');\n if (fieldEles.length) {\n const fieldEle = fieldEles[0];\n const field = {};\n const attr = fieldEle.getElementsByTagName('attr');\n for (var iii = 0; iii < attr.length; iii++) {\n field[attr[iii].getAttribute('name')] = attr[iii].getAttribute('value');\n }\n lfNode.properties.field = field;\n }\n }\n graphData.nodes.push(lfNode);\n // 处理边\n let transitionEles = null;\n let transitionEle = null;\n let edge = {};\n if (key !== 'end') {\n transitionEles = node.getElementsByTagName('transition');\n for (var j = 0, lenn = transitionEles.length; j < lenn; j++) {\n transitionEle = transitionEles[j];\n edge = {};\n edge.id = transitionEle.getAttribute('name');\n edge.type = 'snaker:transition';\n edge.sourceNodeId = lfNode.id;\n edge.targetNodeId = transitionEle.getAttribute('to');\n edge.text = {\n value: transitionEle.getAttribute('displayName') ? transitionEle.getAttribute('displayName') : ''\n };\n edge.properties = {};\n const expr = transitionEle.getAttribute('expr');\n if (expr) {\n edge.properties.expr = expr;\n }\n const g = transitionEle.getAttribute('g');\n if (g) {\n const points = g.split(';');\n if (points.length >= 2) {\n edge.pointsList = [];\n points.forEach(item => {\n const pointArr = item.split(',');\n edge.pointsList.push({\n x: Number(pointArr[0]),\n y: Number(pointArr[1])\n });\n });\n edge.startPoint = edge.pointsList[0];\n edge.endPoint = edge.pointsList[edge.pointsList.length - 1];\n }\n }\n graphData.edges.push(edge);\n }\n }\n }\n }\n });\n return graphData;\n};\n/**\r\n * 将LogicFlow的数据转成snaker的定义文件\r\n * @param {*} data(...processInfo,nodes,edges)\r\n * @returns\r\n */\nconst logicFlowJsonToSnakerXml = data => {\n let xml = '';\n // data的数据由流程定义文件信息+logicFlow数据构成\n // 先构建成流程对象\n const processObj = {\n name: data.name,\n // 流程定义名称\n displayName: data.displayName,\n // 流程定义显示名称\n category: data.category,\n // 流程定义分类\n instanceUrl: data.instanceUrl,\n // 实例启动Url\n h5InstanceUrl: data.h5InstanceUrl,\n // H5实例启动Url\n expireTime: data.expireTime,\n // 期望完成时间\n instanceNoClass: data.instanceNoClass,\n // 实例编号生成类\n preInterceptors: data.preInterceptors,\n // 节点前置拦截器\n postInterceptors: data.postInterceptors // 节点后置拦截器\n };\n /**\r\n * 获取所有子流程\r\n */\n const getSubProcessNodes = () => {\n return data.nodes.filter(node => {\n return node.type === 'snaker:subProcess';\n });\n };\n /**\r\n * 获取开始节点\r\n * @returns\r\n */\n const getStartNode = () => {\n return data.nodes.find(node => {\n return node.type === 'snaker:start';\n });\n };\n /**\r\n * 获取当前节点的所有下一个节点集合\r\n * @param {*} id 当前节点名称\r\n * @returns\r\n */\n const getNextNodes = id => {\n return data.edges.filter(edge => {\n return edge.sourceNodeId === id;\n }).map(edge => {\n return data.nodes.find(node => {\n return node.id === edge.targetNodeId;\n });\n });\n };\n /**\r\n * 获取节点所有输出边\r\n * @param {*} id\r\n * @returns\r\n */\n const getTransitions = id => {\n return data.edges.filter(edge => {\n return edge.sourceNodeId === id;\n }).map(edge => {\n return {\n name: edge.id,\n displayName: edge.text instanceof String || edge.text === undefined ? edge.text : edge.text.value,\n to: edge.targetNodeId,\n // 目地节点id\n expr: edge.properties.expr,\n // 表达式\n g: edge.pointsList.map(point => {\n // 转换点集合\n return point.x + ',' + point.y;\n }).join(';')\n };\n });\n };\n /**\r\n * 构建节点属性\r\n * @param {}} node\r\n * @returns\r\n */\n const buildNode = node => {\n let field;\n if (node.properties.field && Object.keys(node.properties.field).length) {\n field = {\n name: 'ext',\n displayName: '扩展属性',\n attr: Object.keys(node.properties.field).map(key => {\n return {\n name: key,\n value: node.properties.field[key]\n };\n })\n };\n }\n return {\n name: node.id,\n displayName: node.text instanceof String || node.text === undefined ? node.text : node.text.value,\n layout: node.x + ',' + node.y + ',' + (node.properties.width ? node.properties.width : '120') + ',' + (node.properties.height ? node.properties.height : '80'),\n ...node.properties,\n transition: getTransitions(node.id),\n field\n };\n };\n /**\r\n * 特殊字符转义\r\n * @param {*} text\r\n * @returns\r\n */\n const textEncode = text => {\n text = text.replace(/&/g, '&').replace(/\"/g, '"').replace(//g, '>');\n return text;\n };\n /**\r\n * 递归构建节点属性\r\n * @param {} node\r\n */\n const recursionBuildNode = node => {\n const nodeName = node.type.replace('snaker:', '');\n if (!processObj[nodeName + '_' + node.id]) {\n processObj[nodeName + '_' + node.id] = buildNode(node);\n const nextNodes = getNextNodes(node.id);\n nextNodes.forEach(nextNode => {\n recursionBuildNode(nextNode);\n });\n }\n };\n const startNode = getStartNode();\n if (!startNode) {\n // 开始节点不存在,xml不合法\n return '';\n }\n recursionBuildNode(startNode);\n xml = '\\n';\n xml += ' {\n const value = processObj[key];\n if (PROCESS_ATTR_KEYS.includes(key) && value) {\n xml += ' ' + key + '=' + '\"' + textEncode(value) + '\"';\n }\n });\n xml += '>\\n';\n // 生成节点xml\n Object.keys(processObj).forEach(key => {\n const value = processObj[key];\n let nodeName = key.split('_')[0];\n if (NODE_NAMES.includes(nodeName)) {\n if (nodeName === 'wfSubProcess') {\n nodeName = 'subProcess';\n }\n xml += '\\t<' + nodeName;\n // 构造属性\n Object.keys(value).forEach(nodeAttrKey => {\n if (NODE_ATTR_KEYS.includes(nodeAttrKey) && value[nodeAttrKey]) {\n xml += ' ' + nodeAttrKey + '=' + '\"' + textEncode(value[nodeAttrKey]) + '\"';\n }\n });\n xml += '>\\n\\t';\n // 构建transition\n if (value.transition) {\n value.transition.forEach(tran => {\n xml += '\\t {\n if (TRANSITION_ATTR_KEYS.includes(tranAttrKey) && tran[tranAttrKey]) {\n xml += ' ' + tranAttrKey + '=' + '\"' + textEncode(tran[tranAttrKey]) + '\"';\n }\n });\n xml += '>';\n xml += '\\n';\n });\n }\n if (value.field && nodeName === 'task') {\n xml += '\\t\\n';\n value.field.attr.forEach(attrItem => {\n xml += '\\t\\t\\n';\n });\n xml += '\\t\\n';\n }\n xml += '\\t\\n';\n }\n });\n xml += '';\n // 构建子流程模型数据\n const buildSubProcessList = () => {\n const subProcessNodes = getSubProcessNodes();\n const subProcessModel = subProcessNodes.map(n => {\n const subModel = {\n name: n.id,\n // 流程定义名称\n displayName: n.properties.displayName,\n // 流程定义显示名称\n category: n.properties.category,\n // 流程定义分类\n instanceUrl: n.properties.instanceUrl,\n // 实例启动Url\n h5InstanceUrl: n.properties.h5InstanceUrl,\n // H5实例启动Url\n expireTime: n.properties.expireTime,\n // 期望完成时间\n instanceNoClass: n.properties.instanceNoClass,\n // 实例编号生成类\n preInterceptors: n.properties.preInterceptors,\n // 节点前置拦截器\n postInterceptors: n.properties.postInterceptors,\n // 节点后置拦截器\n nodes: data.nodes.filter(item => n.children.includes(item.id)),\n edges: data.edges.filter(item => n.children.includes(item.id))\n };\n subModel.nodes.forEach(item => {\n data.edges.forEach(edge => {\n if (edge.sourceNodeId === item.id) {\n subModel.edges.push(edge);\n }\n });\n });\n return subModel;\n });\n return subProcessModel;\n };\n const subProcessList = buildSubProcessList();\n subProcessList.forEach(processModel => {\n xml += logicFlowJsonToSnakerXml(processModel).replace('', '');\n });\n return xml;\n};\n\n//# sourceURL=webpack://SnakerflowDesigner/./packages/SnakerFlowDesigner/src/snakerflow/tool.js?"); /***/ }), @@ -12923,7 +12923,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TransitionView\", function() { return TransitionView; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TransitionModel\", function() { return TransitionModel; });\n/* harmony import */ var E_project_snakerflow_designer_vue_node_modules_babel_runtime_helpers_esm_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/defineProperty.js */ \"./node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _logicflow_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @logicflow/core */ \"./node_modules/@logicflow/core/dist/logic-flow.js\");\n/* harmony import */ var _logicflow_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_logicflow_core__WEBPACK_IMPORTED_MODULE_1__);\n\n\nclass TransitionModel extends _logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"PolylineEdgeModel\"] {\n getEdgeStyle() {\n const style = super.getEdgeStyle();\n if (this.properties.state === 'active') {\n style.stroke = '#00ff00';\n } else if (this.properties.state === 'history') {\n style.stroke = '#ff0000';\n }\n return style;\n }\n}\nObject(E_project_snakerflow_designer_vue_node_modules_babel_runtime_helpers_esm_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(TransitionModel, \"extendKey\", 'TransitionModel');\nclass TransitionView extends _logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"PolylineEdge\"] {}\nObject(E_project_snakerflow_designer_vue_node_modules_babel_runtime_helpers_esm_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(TransitionView, \"extendKey\", 'TransitionEdge');\nconst Transition = {\n type: 'snaker:transition',\n view: TransitionView,\n model: TransitionModel\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Transition);\n\n//# sourceURL=webpack://SnakerflowDesigner/./packages/SnakerFlowDesigner/src/snakerflow/transition/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TransitionView\", function() { return TransitionView; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TransitionModel\", function() { return TransitionModel; });\n/* harmony import */ var E_project_snakerflow_designer_vue_node_modules_babel_runtime_helpers_esm_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/defineProperty.js */ \"./node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _logicflow_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @logicflow/core */ \"./node_modules/@logicflow/core/dist/logic-flow.js\");\n/* harmony import */ var _logicflow_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_logicflow_core__WEBPACK_IMPORTED_MODULE_1__);\n\n\nclass TransitionModel extends _logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"PolylineEdgeModel\"] {\n getEdgeStyle() {\n const style = super.getEdgeStyle();\n if (this.properties.state === 'active') {\n style.stroke = '#ffa500';\n } else if (this.properties.state === 'history') {\n style.stroke = '#008000';\n }\n return style;\n }\n}\nObject(E_project_snakerflow_designer_vue_node_modules_babel_runtime_helpers_esm_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(TransitionModel, \"extendKey\", 'TransitionModel');\nclass TransitionView extends _logicflow_core__WEBPACK_IMPORTED_MODULE_1__[\"PolylineEdge\"] {}\nObject(E_project_snakerflow_designer_vue_node_modules_babel_runtime_helpers_esm_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(TransitionView, \"extendKey\", 'TransitionEdge');\nconst Transition = {\n type: 'snaker:transition',\n view: TransitionView,\n model: TransitionModel\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Transition);\n\n//# sourceURL=webpack://SnakerflowDesigner/./packages/SnakerFlowDesigner/src/snakerflow/transition/index.js?"); /***/ }), diff --git a/src/main/resources/static/components/plugins/snaker/snakerFlow.vue b/src/main/resources/static/components/plugins/snaker/snakerFlow.vue index 1a633f7e..18c28d56 100644 --- a/src/main/resources/static/components/plugins/snaker/snakerFlow.vue +++ b/src/main/resources/static/components/plugins/snaker/snakerFlow.vue @@ -6,8 +6,6 @@

{{ pageTitle }}

@@ -27,7 +25,7 @@

流程信息

- + 查看流程图 @@ -36,14 +34,16 @@
-
@@ -82,20 +88,13 @@
-
+

{{ formPanelTitle }}

-
+
正在加载申请表单... @@ -191,6 +190,7 @@ class PjaxSync { } } } + // 创建全局实例 const pjaxSync = new PjaxSync() @@ -289,7 +289,7 @@ module.exports = { // 表单面板标题 formPanelTitle() { if (this.isNewApplication) { - return "申请表单" + return "填写申请" } else if (this.shouldShowTaskForm) { return this.currentTask.displayName || "任务表单" } else if (this.shouldShowHistoryProcess) { @@ -301,9 +301,7 @@ module.exports = { // 是否显示历史办理过程 shouldShowHistoryProcess() { - // debugger - // return this.businessId && this.isTaskInProgress && !this.isFirstTaskNode - return true + return this.instanceId !== null }, // 是否显示任务表单 @@ -311,11 +309,6 @@ module.exports = { return this.taskId != null }, - // 是否可以显示流程图 - canShowDiagram() { - return (this.isNewApplication && this.processDefinition.id) || (this.isExistingProcess && this.processInstance.processId) - }, - // 判断是否为新申请 isNewApplication() { return !this.taskId && !this.instanceId && this.defineKey @@ -338,10 +331,11 @@ module.exports = { // 流程图预览URL processDesignUrl() { + debugger if (this.isNewApplication && this.processDefinition.id) { - return `/flow/define/preview?id=${this.processDefinition.id}` - } else if (this.isExistingProcess && this.processInstance.processId) { - return `/flow/define/preview?id=${this.processInstance.processId}` + return `/flow/define/preview?defineId=${this.processDefinition.id}` + } else if (this.isExistingProcess && this.processInstance.processDefineId) { + return `/flow/define/preview?defineId=${this.processInstance.processDefineId}&instanceId=${this.instanceId}` } return "" } @@ -474,6 +468,7 @@ module.exports = { // 显示流程图 showProcessDiagram() { + debugger if (this.processDesignUrl) { this.designUrl = this.processDesignUrl this.designVisible = true diff --git a/src/main/resources/views/platform/flow/approval.html b/src/main/resources/views/platform/flow/approval.html deleted file mode 100644 index d348f2d2..00000000 --- a/src/main/resources/views/platform/flow/approval.html +++ /dev/null @@ -1,45 +0,0 @@ - - -
- -
- - - - diff --git a/src/main/resources/views/platform/flow/define/index.html b/src/main/resources/views/platform/flow/define/index.html index ae2f6fc9..00fe6008 100644 --- a/src/main/resources/views/platform/flow/define/index.html +++ b/src/main/resources/views/platform/flow/define/index.html @@ -22,16 +22,13 @@ layout("/layouts/platform.html"){ - - + - + @@ -44,12 +41,9 @@ layout("/layouts/platform.html"){ @@ -59,11 +53,9 @@ layout("/layouts/platform.html"){
- +
-
- - - - - - - - - - - - -
- -
- - + + + + + + + + + + + + +
+ + +
+
+

详情

+ +
+ +
+
+
+ 记录{{index + 1}} +
+
+
+ +
+
+
+ 节点类型: + {{approvalInfo.displayName}} +
+
+ 审批人: + + {{approvalInfo.ext?.initiatorName}}({{approvalInfo.ext?.initiatorAccount}}) + + {{approvalInfo.taskFormData.userName}}({{approvalInfo.taskFormData?.loginName}}) +
+
+ 审核状态: + {{getTaskStateText(approvalInfo.taskState)}} +
+
+ 提交结果: + {{getSubmitTypeText(approvalInfo.ext.submitType)}} +
+
+ 提交意见: + {{approvalInfo.taskFormData.opinion}} +
+ +
+ 提交时间: + {{approvalInfo.finishTime}} +
+
+
+
+
+ + + }) + diff --git a/src/main/resources/views/platform/flow/design/index.html b/src/main/resources/views/platform/flow/design/index.html index 8d22fc9b..1fd26fdf 100644 --- a/src/main/resources/views/platform/flow/design/index.html +++ b/src/main/resources/views/platform/flow/design/index.html @@ -41,7 +41,7 @@ layout("/layouts/platform.html"){ 设计 编辑 - + 部署 删除 @@ -53,7 +53,7 @@ layout("/layouts/platform.html"){ - + @@ -87,6 +87,9 @@ layout("/layouts/platform.html"){ + + +