From 4bff52e938ae2c260fe54d32ef680908868bb27e Mon Sep 17 00:00:00 2001
From: wente <329538422@qq.com>
Date: 星期五, 07 六月 2024 09:57:10 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 web/packages/components/zt-dict/src/zt-dict.vue                                                                         |   15 
 web/src/views/modules/taskReliability/SimulatData.vue                                                                   |  135 +++-
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/OperatConditModelController.java |   15 
 web/src/views/modules/taskReliability/OperatConditModel.vue                                                             |  154 ++++-
 web/src/views/modules/taskReliability/RBD-edit-img.vue                                                                  |  535 ++++++++++++++++--
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/OperatConditModelDao.java               |    8 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/OperatConditModelService.java       |   36 +
 modules/mainPart/src/main/resources/mapper/taskReliability/ModelRbdDao.xml                                              |    2 
 web/packages/components/zt-dict-tag/src/zt-dict-tag.vue                                                                 |   27 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/controller/XhProductModelController.java          |    2 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelRbdNode.java                     |   37 +
 web/packages/components/zt-table-column-dict/src/zt-table-column-dict.vue                                               |    8 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/sysPictureBase/controller/SysPictureBaseController.java     |   18 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelRbdNodeService.java            |   52 +
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/ModelRbdNodeDao.java                    |   16 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelNodes.java                       |   22 
 web/src/views/modules/taskReliability/ConfigNode/configNode.vue                                                         |  359 ++++++++++++
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/OperatConditModel.java                |    7 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/model/ProductImg.java                             |    4 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ModelLineController.java         |    7 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelRbd.java                         |    4 
 web/src/views/modules/taskReliability/TaskPhase-AddOrUpdate.vue                                                         |    4 
 web/src/views/modules/taskReliability/TaskPhase.vue                                                                     |    4 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/dao/XhProductModelDao.java                        |    2 
 modules/mainPart/src/main/resources/mapper/taskReliability/OperatConditModelDao.xml                                     |   26 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/service/XhProductModelService.java                |    4 
 web/src/views/modules/sysPictureBase/SysPictureBase.vue                                                                 |   18 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java               |    1 
 web/src/views/modules/taskReliability/ConfigEdge/configEdge.vue                                                         |    2 
 modules/mainPart/src/main/resources/mapper/sysPictureBase/SysPictureBaseDao.xml                                         |    6 
 web/src/views/modules/sysPictureBase/SysPictureBase-AddOrUpdate.vue                                                     |   40 
 modules/mainPart/src/main/resources/mapper/basicInfo/XhProductModelDao.xml                                              |   28 
 web/src/views/modules/taskReliability/SimulatAssess.vue                                                                 |   29 
 web/src/views/modules/taskReliability/SimulatCurve.vue                                                                  |   14 
 34 files changed, 1,415 insertions(+), 226 deletions(-)

diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/controller/XhProductModelController.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/controller/XhProductModelController.java
index 5f5a1ca..989116c 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/controller/XhProductModelController.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/controller/XhProductModelController.java
@@ -68,9 +68,7 @@
 
     @GetMapping("getProduct")
     public Result<List<ProductImg>> getProduct(Long productId) {
-
         List<ProductImg> list = xhProductModelService.getProduct(productId);
-
         return Result.ok(list);
     }
 
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/dao/XhProductModelDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/dao/XhProductModelDao.java
index 44c197e..7fa7505 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/dao/XhProductModelDao.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/dao/XhProductModelDao.java
@@ -26,7 +26,7 @@
 
     List<XhProductModel> getProductList();
 
-    List<ProductImg> getProduct(Long productId);
+    List<ProductImg> getProduct(Long productId, Long parentId);
 
     List<XhProductModel> getTaskProductList();
     XhProductModel getById(Long id);
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/model/ProductImg.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/model/ProductImg.java
index 5214b23..29b8691 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/model/ProductImg.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/model/ProductImg.java
@@ -43,7 +43,7 @@
 	private String productType;
 
 	@TableField(exist = false)
-	private Integer reliabDistribType;
+	private int reliabDistribType;
 	@TableField(exist = false)
 	private String taskMtbcf;
 	@TableField(exist = false)
@@ -55,7 +55,7 @@
 	@TableField(exist = false)
 	private Integer isRepair;
 	@TableField(exist = false)
-	private Integer repairDistribType;
+	private int repairDistribType;
 	@TableField(exist = false)
 	private String RepairMttcr;
 	@TableField(exist = false)
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/service/XhProductModelService.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/service/XhProductModelService.java
index 96dd7ce..5bb44b6 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/service/XhProductModelService.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/service/XhProductModelService.java
@@ -68,7 +68,9 @@
     }
 
     public List<ProductImg> getProduct(Long productId) {
-        return baseDao.getProduct(productId);
+        XhProductModel model =this.get(productId);
+        Long parentId = model.getPid();
+        return baseDao.getProduct(productId,parentId);
     }
 
     public List<XhProductModel> getTaskProductList() {
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/sysPictureBase/controller/SysPictureBaseController.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/sysPictureBase/controller/SysPictureBaseController.java
index 6bc2ac5..29551dc 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/sysPictureBase/controller/SysPictureBaseController.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/sysPictureBase/controller/SysPictureBaseController.java
@@ -73,16 +73,9 @@
         } else {
             sysPictureBaseService.insert(sysPictureBase);
         }
-        if (sysPictureBase.getIsDefault()==1){
-            if (sysPictureBase.getId()==null){
-                sysPictureBaseService.updateByDefault(sysPictureBase.getId(),sysPictureBase.getProductType());
-                sysPictureBaseService.updateProdeuctImg(sysPictureBase.getId(),sysPictureBase.getProductType(),null);
-            }else{
-                if (!sysPictureBase.getId().equals(sysPictureBase.getId())){
-                    sysPictureBaseService.updateByDefault(sysPictureBase.getId(),sysPictureBase.getProductType());
-                    sysPictureBaseService.updateProdeuctImg(sysPictureBase.getId(),sysPictureBase.getProductType(),sysPictureBase.getId());
-                }
-            }
+        if (sysPictureBase.getIsDefault() == 1) {
+            sysPictureBaseService.updateByDefault(sysPictureBase.getId(), sysPictureBase.getProductType());
+            sysPictureBaseService.updateProdeuctImg(sysPictureBase.getId(), sysPictureBase.getProductType(), null);
         }
         return Result.ok();
     }
@@ -111,7 +104,7 @@
             //鍏虫祦
             outputStream.close();
             in.close();
-        }  catch (IOException e) {
+        } catch (IOException e) {
             e.printStackTrace();
         }
     }
@@ -126,7 +119,7 @@
             response.getWriter().flush();
             response.getWriter().close();
 
-        }  catch (IOException e) {
+        } catch (IOException e) {
             e.printStackTrace();
         }
     }
@@ -136,6 +129,7 @@
         SysPictureBase data = sysPictureBaseService.getDefaultImg(productType);
         return Result.ok(data);
     }
+
     @DeleteMapping
     @ApiOperation("鍒犻櫎")
     @LogOperation("鍒犻櫎")
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ModelLineController.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ModelLineController.java
index f305c0a..9c43647 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ModelLineController.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ModelLineController.java
@@ -16,6 +16,7 @@
 import com.zt.life.modules.mainPart.taskReliability.model.ModelLine;
 import com.zt.life.modules.mainPart.taskReliability.model.ModelRbd;
 import com.zt.life.modules.mainPart.taskReliability.service.ModelLineService;
+import com.zt.life.modules.mainPart.taskReliability.service.ModelRbdNodeService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -42,6 +43,9 @@
 
     @Autowired
     private ModelLineService modelLineService;
+
+    @Autowired
+    private ModelRbdNodeService modelRbdNodeService;
 
     @Autowired
     private PythonLib pythonLib;
@@ -102,8 +106,8 @@
         ValidatorUtils.validateEntity(modelRbd, AddGroup.class, DefaultGroup.class);
         modelRbd.setContent(modelRbd.getContent().replace(modelRbd.getUrlPref(), URL_REPLACE_STR));
         modelRbd.setContent(modelRbd.getContent().replaceAll(TOKEN_REPLACE_REGEX, TOKEN_REPLACE_STR));
+        modelRbdNodeService.saveNodeArr(modelRbd);
         modelLineService.insert(modelRbd);
-
         return Result.ok();
     }
 
@@ -115,6 +119,7 @@
         ValidatorUtils.validateEntity(modelRbd, UpdateGroup.class, DefaultGroup.class);
         modelRbd.setContent(modelRbd.getContent().replace(modelRbd.getUrlPref(), URL_REPLACE_STR));
         modelRbd.setContent(modelRbd.getContent().replaceAll(TOKEN_REPLACE_REGEX, TOKEN_REPLACE_STR));
+        modelRbdNodeService.saveNodeArr(modelRbd);
         modelLineService.update(modelRbd);
 
         return Result.ok();
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/OperatConditModelController.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/OperatConditModelController.java
index 8db79eb..506f016 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/OperatConditModelController.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/OperatConditModelController.java
@@ -12,6 +12,7 @@
 import com.zt.common.validator.group.AddGroup;
 import com.zt.common.validator.group.DefaultGroup;
 import com.zt.common.validator.group.UpdateGroup;
+import com.zt.life.modules.mainPart.taskReliability.model.ModelNodes;
 import com.zt.life.modules.mainPart.taskReliability.model.OperatConditModel;
 import com.zt.life.modules.mainPart.taskReliability.service.OperatConditModelService;
 import io.swagger.annotations.Api;
@@ -24,6 +25,7 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -52,11 +54,17 @@
         return Result.ok(operatConditModelService.page(queryFilter));
     }
 
+    @GetMapping("getModelNodes")
+    @ApiOperation("妯″瀷")
+    public Result<Map> getModelNodes(Long shipId) {
+        Map data = operatConditModelService.getModelNodes(shipId);
+        return Result.ok(data);
+    }
+
     @GetMapping("{id}")
     @ApiOperation("淇℃伅")
     public Result<OperatConditModel> get(@PathVariable("id") Long id){
         OperatConditModel data = operatConditModelService.get(id);
-
         return Result.ok(data);
     }
 
@@ -65,9 +73,8 @@
     @LogOperation("鏂板")
     public Result insert(@RequestBody OperatConditModel operatConditModel){
         //鏁堥獙鏁版嵁
-        ValidatorUtils.validateEntity(operatConditModel, AddGroup.class, DefaultGroup.class);
-        operatConditModelService.insert(operatConditModel);
-
+        //ValidatorUtils.validateEntity(operatConditModel, AddGroup.class, DefaultGroup.class);
+        operatConditModelService.save(operatConditModel);
         return Result.ok();
     }
 
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/ModelRbdNodeDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/ModelRbdNodeDao.java
new file mode 100644
index 0000000..d7f6811
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/ModelRbdNodeDao.java
@@ -0,0 +1,16 @@
+package com.zt.life.modules.mainPart.taskReliability.dao;
+
+import com.zt.common.dao.BaseDao;
+import com.zt.life.modules.mainPart.taskReliability.model.ModelRbdNode;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * model_line
+ *
+ * @author zt generator 
+ * @since 1.0.0 2024-02-28
+ */
+@Mapper
+public interface ModelRbdNodeDao extends BaseDao<ModelRbdNode> {
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/OperatConditModelDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/OperatConditModelDao.java
index b335a79..0ccc3be 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/OperatConditModelDao.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/OperatConditModelDao.java
@@ -1,7 +1,10 @@
 package com.zt.life.modules.mainPart.taskReliability.dao;
 
 import com.zt.common.dao.BaseDao;
+import com.zt.life.modules.mainPart.taskReliability.model.ModelNodes;
+import com.zt.life.modules.mainPart.taskReliability.model.ModelRbd;
 import com.zt.life.modules.mainPart.taskReliability.model.OperatConditModel;
+import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Mapper;
 
 
@@ -20,4 +23,9 @@
 
     List<OperatConditModel> getList(Map<String, Object> params);
 
+    List<ModelRbd> getModelList(Long productId);
+
+    List<ModelNodes> getModelNodes(Long shipId);
+
+    void deleteByOperatConditId(Long operatConditId);
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelNodes.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelNodes.java
new file mode 100644
index 0000000..abaa620
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelNodes.java
@@ -0,0 +1,22 @@
+package com.zt.life.modules.mainPart.taskReliability.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zt.common.entity.BusiEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * model_rbd
+ *
+ * @author zt generator 
+ * @since 1.0.0 2024-03-10
+ */
+@Data
+public class ModelNodes extends BusiEntity {
+	@ApiModelProperty(value = "")
+	private Long modelId;
+
+	private String nodeIds;
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelRbd.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelRbd.java
index 65c489d..0d68d40 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelRbd.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelRbd.java
@@ -34,6 +34,10 @@
 	@ApiModelProperty(value = "")
 	private Long productId;
 
+	@TableField(exist = false)
+	@ApiModelProperty(value = "")
+	private Long[] nodeArr;
+
 	@ApiModelProperty(value = "")
 	private String content;
 
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelRbdNode.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelRbdNode.java
new file mode 100644
index 0000000..65d22ff
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ModelRbdNode.java
@@ -0,0 +1,37 @@
+package com.zt.life.modules.mainPart.taskReliability.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zt.common.entity.BusiEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * model_rbd
+ *
+ * @author zt generator 
+ * @since 1.0.0 2024-03-10
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("model_rbd_node")
+public class ModelRbdNode extends BusiEntity {
+	private static final long serialVersionUID = 1L;
+
+	@ApiModelProperty(value = "")
+	private Long pid;
+
+	@ApiModelProperty(value = "")
+	private Long productId;
+
+	@ApiModelProperty(value = "")
+	private Long modelId;
+
+	@ApiModelProperty(value = "")
+	private Long nodeId;
+
+	@ApiModelProperty(value = "澶囨敞")
+	private String remark;
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/OperatConditModel.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/OperatConditModel.java
index 9cf3d4e..1ff22cb 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/OperatConditModel.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/OperatConditModel.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.zt.common.constant.Constant;
 import com.zt.common.entity.BusiEntity;
 import com.zt.common.entity.TreeNode;
 import io.swagger.annotations.ApiModel;
@@ -50,6 +51,12 @@
 	@TableField(exist = false)
 	private List<OperatConditModel> children = new ArrayList<>();
 
+	@ApiModelProperty(value = "瀵瑰簲妯″瀷鍒楄〃")
+	@TableField(exist = false)
+	private List<ModelRbd> modelList = new ArrayList<>();
+
+	private Integer isDisabled;
+
 	@TableField(exist = false)
 	private Long pid;
 
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java
index 24ca30a..65cdecd 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java
@@ -89,6 +89,7 @@
         modelRbdDao.insert(modelRbd);
     }
 
+
     @Transactional(rollbackFor = Exception.class)
     public void update(ModelRbd modelRbd) {
         if (modelRbd==null) return;
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelRbdNodeService.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelRbdNodeService.java
new file mode 100644
index 0000000..52f4b0e
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelRbdNodeService.java
@@ -0,0 +1,52 @@
+package com.zt.life.modules.mainPart.taskReliability.service;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import com.zt.common.db.query.QueryFilter;
+import com.zt.common.service.BaseService;
+import com.zt.common.utils.JsonUtils2;
+import com.zt.common.utils.UUIDUtil;
+import com.zt.life.modules.mainPart.basicInfo.dao.ParamDataDao;
+import com.zt.life.modules.mainPart.basicInfo.dao.XhProductModelDao;
+import com.zt.life.modules.mainPart.basicInfo.model.ParamData;
+import com.zt.life.modules.mainPart.basicInfo.model.ProductImg;
+import com.zt.life.modules.mainPart.basicInfo.model.XhProductModel;
+import com.zt.life.modules.mainPart.taskReliability.dao.*;
+import com.zt.life.modules.mainPart.taskReliability.dto.ModelLinePair;
+import com.zt.life.modules.mainPart.taskReliability.model.*;
+import org.apache.commons.lang3.StringUtils;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.io.OutputFormat;
+import org.dom4j.io.XMLWriter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.StringWriter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * model_line
+ *
+ * @author zt generator 
+ * @since 1.0.0 2024-02-28
+ */
+@Service
+public class ModelRbdNodeService extends BaseService<ModelRbdNodeDao, ModelRbdNode> {
+    public void saveNodeArr(ModelRbd modelRbd) {
+//
+        ModelRbdNode node = new ModelRbdNode();
+        node.setProductId(modelRbd.getProductId());
+        node.setModelId(modelRbd.getId());
+        Long[] nodeArr = modelRbd.getNodeArr();
+        for(Long nodeId :nodeArr){
+            node.setId(UUIDUtil.generateId());
+            node.setNodeId(nodeId);
+            baseDao.insert(node);
+        }
+    }
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/OperatConditModelService.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/OperatConditModelService.java
index 4c96615..06eda77 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/OperatConditModelService.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/OperatConditModelService.java
@@ -1,23 +1,29 @@
 package com.zt.life.modules.mainPart.taskReliability.service;
 
+import com.alibaba.fastjson.JSON;
 import com.zt.common.service.BaseService;
 import com.zt.common.utils.TreeUtils;
 import com.zt.life.modules.mainPart.taskReliability.dao.OperatConditModelDao;
+import com.zt.life.modules.mainPart.taskReliability.model.ModelNodes;
+import com.zt.life.modules.mainPart.taskReliability.model.ModelRbd;
 import com.zt.life.modules.mainPart.taskReliability.model.OperatConditModel;
 import org.springframework.stereotype.Service;
 import com.zt.common.db.query.QueryFilter;
+
 import javax.annotation.Resource;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 
 /**
  * operat_condit_model
  *
- * @author zt generator 
+ * @author zt generator
  * @since 1.0.0 2024-03-29
  */
 @Service
-public class OperatConditModelService  extends BaseService<OperatConditModelDao, OperatConditModel> {
+public class OperatConditModelService extends BaseService<OperatConditModelDao, OperatConditModel> {
 
     /**
      * 鍒嗛〉鏌ヨ
@@ -27,7 +33,22 @@
      */
     public List<OperatConditModel> page(QueryFilter queryFilter) {
         List<OperatConditModel> list = baseDao.getList(queryFilter.getQueryParams());
+        for (OperatConditModel conditModel : list) {
+            List<ModelRbd> modelList = baseDao.getModelList(conditModel.getId());
+            conditModel.setModelList(modelList);
+        }
         return TreeUtils.build(list);
+    }
+
+
+    public Map getModelNodes(Long shipId) {
+        List<ModelNodes> list = baseDao.getModelNodes(shipId);
+        Map<String, String> map = new HashMap<>();
+        for (ModelNodes node : list) {
+            map.put(node.getModelId().toString(), node.getNodeIds());
+        }
+        //String json= JSON.toJSONString(map);
+        return map;
     }
 
     /**
@@ -39,4 +60,15 @@
         super.deleteLogic(ids);
     }
 
+    public void save(OperatConditModel parent) {
+        Long operatConditId = parent.getOperatConditId();
+        baseDao.deleteByOperatConditId(operatConditId);
+        this.saveIteration(parent);
+    }
+    public void saveIteration(OperatConditModel parent) {
+        baseDao.insert(parent);
+        for (OperatConditModel sub : parent.getChildren()) {
+            this.saveIteration(sub);
+        }
+    }
 }
diff --git a/modules/mainPart/src/main/resources/mapper/basicInfo/XhProductModelDao.xml b/modules/mainPart/src/main/resources/mapper/basicInfo/XhProductModelDao.xml
index 9dbaf1e..17a7338 100644
--- a/modules/mainPart/src/main/resources/mapper/basicInfo/XhProductModelDao.xml
+++ b/modules/mainPart/src/main/resources/mapper/basicInfo/XhProductModelDao.xml
@@ -32,7 +32,7 @@
             <if test="pid==null">
                 and pid is null
             </if>
-        and product_type =${productType}
+            and product_type =${productType}
         </where>
         Group by product_type
     </select>
@@ -68,6 +68,32 @@
           AND ((a.PID = ${productId})
             or (a.PID in (select pid from product_model where id = ${productId} and product_type = 10) and
                 a.product_type &lt;&gt; 10))
+          and a.id not in (
+            select node_id
+            from model_rbd_node
+            where product_id in (
+                select pid
+                from product_model
+                where id = ${productId}
+                  and is_delete = 0
+                union
+                select id
+                from product_model
+                where is_delete = 0
+                  and pid = ${parentId}
+                  and id &lt;&gt; ${productId}
+            )
+            union
+            select node_id
+            from model_rbd_node
+            where product_id in (
+                select id
+                from product_model
+                where is_delete = 0 and pid = ${productId}
+            )
+        )
+
+
 
     </select>
     <select id="getTaskProductList" resultType="com.zt.life.modules.mainPart.basicInfo.model.XhProductModel">
diff --git a/modules/mainPart/src/main/resources/mapper/sysPictureBase/SysPictureBaseDao.xml b/modules/mainPart/src/main/resources/mapper/sysPictureBase/SysPictureBaseDao.xml
index 84fa2fc..674c05e 100644
--- a/modules/mainPart/src/main/resources/mapper/sysPictureBase/SysPictureBaseDao.xml
+++ b/modules/mainPart/src/main/resources/mapper/sysPictureBase/SysPictureBaseDao.xml
@@ -5,7 +5,7 @@
     <update id="updateByDefault">
         update sys_picture_base
         set is_default=2
-        where id != ${id}
+        where id &lt;&gt; ${id}
           and product_type = ${productType}
           and is_delete = 0
     </update>
@@ -39,9 +39,7 @@
                 and ${whereSql}
             </if>
         </where>
-        <if test="orderBySql!=null">
-            ORDER BY ${orderBySql}
-        </if>
+            ORDER BY is_default,product_type,id
     </select>
     <select id="getDefaultImg" resultType="com.zt.life.modules.mainPart.sysPictureBase.model.SysPictureBase">
         select a.name, a.id
diff --git a/modules/mainPart/src/main/resources/mapper/taskReliability/ModelRbdDao.xml b/modules/mainPart/src/main/resources/mapper/taskReliability/ModelRbdDao.xml
index b8917aa..63fc4fa 100644
--- a/modules/mainPart/src/main/resources/mapper/taskReliability/ModelRbdDao.xml
+++ b/modules/mainPart/src/main/resources/mapper/taskReliability/ModelRbdDao.xml
@@ -13,7 +13,7 @@
         from model_rbd a
         left join (select model_id,1 as end from algorithm where model_type = 'end' and is_delete=0 ) b on b.model_id =
         a.id
-        left join (select model_id, count(1) as num from algorithm where is_delete=0 group by model_id ) c on c.model_id
+        left join (select id, count(1) as num from model_rbd where is_delete=0 group by id ) c on c.id
         = a.id
         left join (select model_id,count(1) as num from operat_condit_model where is_delete=0 group by model_id ) d on
         d.model_id = a.id
diff --git a/modules/mainPart/src/main/resources/mapper/taskReliability/OperatConditModelDao.xml b/modules/mainPart/src/main/resources/mapper/taskReliability/OperatConditModelDao.xml
index 670531e..e6bc4e2 100644
--- a/modules/mainPart/src/main/resources/mapper/taskReliability/OperatConditModelDao.xml
+++ b/modules/mainPart/src/main/resources/mapper/taskReliability/OperatConditModelDao.xml
@@ -2,14 +2,21 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
 <mapper namespace="com.zt.life.modules.mainPart.taskReliability.dao.OperatConditModelDao">
+    <delete id="deleteByOperatConditId">
+        delete
+        from operat_condit_model
+        where operat_condit_id = ${operatConditId}
+    </delete>
 
     <select id="getList" resultType="com.zt.life.modules.mainPart.taskReliability.model.OperatConditModel">
-        SELECT a.id ,
-               a.pid ,
-               a.`NAME` as product,
+        SELECT a.id,
+               a.pid,
+               a.`NAME`                                                               as product,
                c.model_name,
+               a.id                                                                   as product_id,
                b.model_id,
-               b.id as operatConditModelId
+               case when b.is_disabled is null or b.is_disabled = 1 then 1 else 0 end as is_disabled,
+               ${operatConditId}                                                      as operatConditId
         FROM product_model a
                  LEFT JOIN operat_condit_model b
                            ON b.product_id = a.id
@@ -32,5 +39,16 @@
           and a.product_type in (4, 3, 2, 10)
           AND a.is_delete = 0
     </select>
+    <select id="getModelList" resultType="com.zt.life.modules.mainPart.taskReliability.model.ModelRbd">
+        select *
+        from model_rbd
+        where product_id = ${productId}
+          and is_delete = 0
+    </select>
+    <select id="getModelNodes" resultType="com.zt.life.modules.mainPart.taskReliability.model.ModelNodes">
+        SELECT model_id, GROUP_CONCAT(node_id) as nodeIds
+        FROM `model_rbd_node`
+        group by model_id
+    </select>
 
 </mapper>
diff --git a/web/packages/components/zt-dict-tag/src/zt-dict-tag.vue b/web/packages/components/zt-dict-tag/src/zt-dict-tag.vue
index a294a2c..2515d69 100644
--- a/web/packages/components/zt-dict-tag/src/zt-dict-tag.vue
+++ b/web/packages/components/zt-dict-tag/src/zt-dict-tag.vue
@@ -1,5 +1,5 @@
 <template>
-  <el-tag :color="tagColor"  v-if="$store.getters.getDictLabel(dict, value)!=null" :type="tagType" :size="size" :effect="effect" :hit="hit">{{$store.getters.getDictLabel(dict, value)}}
+  <el-tag :color="tagColor" :type="tagType" :size="size" :effect="effect" :hit="hit">{{dictLabel}}
   </el-tag>
 </template>
 <script>
@@ -9,6 +9,12 @@
       dict: { // 瀛楀吀绫诲瀷
         type: String,
         required: true
+      },
+      additional: {// 娣诲姞鐨�
+        type: Array,
+        default: function () {
+          return []
+        }
       },
       value: [String, Number, Boolean],
       typeS: String,
@@ -33,11 +39,24 @@
       return {
         tagType: 'primary',
         tagColor: '',
-        colorArr:['primary','success','info','warning','danger']
+        colorArr: ['primary', 'success', 'info', 'warning', 'danger']
       }
     },
     mounted() {
       this.init()
+    },
+    computed: {
+      dictLabel() {
+        let result = this.$store.getters.getDictLabel(this.dict, this.value)
+        if ("" + result == "" + this.value) {
+          for (let item of this.additional) {
+            if (item.dictValue == "" + this.value) {
+              result = item.dictLabel
+            }
+          }
+        }
+        return result
+      }
     },
     methods: {
       async init() {
@@ -61,8 +80,8 @@
         if (!this.typeS && !this.typeI && !this.typeW && !this.typeD && !this.typeColor) { // 娌℃湁鎸囧畾棰滆壊
           if (this.value === false || this.value === 0 || this.value === '0' || this.value === 'false') {
             this.tagType = 'primary'
-          }else{
-            this.tagType = this.colorArr[this.value%5]
+          } else {
+            this.tagType = this.colorArr[this.value % 5]
           }
         }
       }
diff --git a/web/packages/components/zt-dict/src/zt-dict.vue b/web/packages/components/zt-dict/src/zt-dict.vue
index e943ef1..a9946bb 100644
--- a/web/packages/components/zt-dict/src/zt-dict.vue
+++ b/web/packages/components/zt-dict/src/zt-dict.vue
@@ -1,6 +1,6 @@
 <template>
     <div>
-      <el-select :value="dictValue" @change="changeProjectMajor" @input="$emit('input', $event)" :placeholder="placeholder" clearable style="width: 100%;" v-if="showType === 'select'" :disabled="disabled">
+      <el-select v-if="showType === 'select'" :value="dictValue" @change="changeProjectMajor" @input="$emit('input', $event)" :placeholder="placeholder" clearable style="width: 100%;"  :disabled="disabled">
           <el-option :label="data.dictLabel" v-for="data in dicts" :key="data.dictValue" :value ="data.dictValue">{{data.dictLabel}}</el-option>
       </el-select>
       <div v-if="showType === 'radio'">
@@ -9,7 +9,7 @@
           <el-input class="radio-input" v-if="isOtherOptionSelected" v-model="inputName"></el-input>
         </el-radio-group>
       </div>
-      <zt-combo-tree v-model="dictValue" :datas="dictTrees" :disabled-filter="disabledFilter" @input="$emit('input', $event)" v-if="showType === 'tree'" :placeholder="placeholder"/>
+      <zt-combo-tree  v-if="showType === 'tree'" v-model="dictValue" :datas="dictTrees" :disabled-filter="disabledFilter" @input="$emit('input', $event)" :placeholder="placeholder"/>
     </div>
 </template>
 <script>
@@ -26,6 +26,12 @@
         required: true
       },
       excluded: {// 鎺掗櫎鐨�
+        type: Array,
+        default: function () {
+          return []
+        }
+      },
+      additional: {// 娣诲姞鐨�
         type: Array,
         default: function () {
           return []
@@ -73,10 +79,9 @@
         if (this.excluded.length > 0) {
           let excludedArray = []
           this.excluded.forEach(value => excludedArray.push(value + ''))
-          return dicts.filter(option => excludedArray.indexOf(option.dictValue + '') < 0)
-        } else {
-          return dicts
+          dicts =  dicts.filter(option => excludedArray.indexOf(option.dictValue + '') < 0)
         }
+        return dicts.concat(this.additional);
       }
     },
     watch: {
diff --git a/web/packages/components/zt-table-column-dict/src/zt-table-column-dict.vue b/web/packages/components/zt-table-column-dict/src/zt-table-column-dict.vue
index a2f0baf..44ef798 100644
--- a/web/packages/components/zt-table-column-dict/src/zt-table-column-dict.vue
+++ b/web/packages/components/zt-table-column-dict/src/zt-table-column-dict.vue
@@ -1,6 +1,6 @@
 <template>
   <el-table-column :label="label" :key="keys" header-align="center" align="center" :width="width" v-slot="{ row }">
-    <zt-dict-tag :dict="dict" :value="row[prop]" :typeS="typeS" :typeI="typeI" :typeW="typeW" :typeD="typeD" :typeColor="typeColor" :size="size" :effect="effect" :hit="hit"/>
+    <zt-dict-tag :dict="dict" :additional=additional :value="row[prop]" :typeS="typeS" :typeI="typeI" :typeW="typeW" :typeD="typeD" :typeColor="typeColor" :size="size" :effect="effect" :hit="hit"/>
   </el-table-column>
 </template>
 <script>
@@ -10,6 +10,12 @@
       keys:{
         type:String
       },
+      additional: {// 娣诲姞鐨�
+        type: Array,
+        default: function () {
+          return []
+        }
+      },
       label: String,
       width: {
         type: String,
diff --git a/web/src/views/modules/sysPictureBase/SysPictureBase-AddOrUpdate.vue b/web/src/views/modules/sysPictureBase/SysPictureBase-AddOrUpdate.vue
index 671bf72..dbaf9aa 100644
--- a/web/src/views/modules/sysPictureBase/SysPictureBase-AddOrUpdate.vue
+++ b/web/src/views/modules/sysPictureBase/SysPictureBase-AddOrUpdate.vue
@@ -5,7 +5,7 @@
         <el-input v-model="dataForm.name"></el-input>
       </zt-form-item>
       <zt-form-item label="浜у搧绫诲瀷" prop="productType" rules="required">
-        <zt-dict v-model="dataForm.productType" dict="product"></zt-dict>
+        <zt-dict v-model="dataForm.productType" dict="product" :additional=additional></zt-dict>
       </zt-form-item>
       <zt-form-item label="鏄惁榛樿" prop="isDefault" rules="required">
         <zt-dict v-model="dataForm.isDefault" dict="is_or_not"></zt-dict>
@@ -17,14 +17,14 @@
         <el-input v-model="dataForm.remark"></el-input>
       </zt-form-item>
       <input type="hidden" id="svgContentId" :value="dataForm.svgContent"/>
-              <zt-form-item>
-<!--                <el-upload action="*" :on-change="uploadSvgContent">-->
-<!--                  <el-button slot="trigger" size="small" type="primary">閫夊彇鏂囦欢</el-button>-->
-<!--                </el-upload>-->
-                <label class="custom-file-upload">
-                <input type="file" @change="uploadSvgContent" />
-                </label>
-              </zt-form-item>
+      <zt-form-item>
+        <!--                <el-upload action="*" :on-change="uploadSvgContent">-->
+        <!--                  <el-button slot="trigger" size="small" type="primary">閫夊彇鏂囦欢</el-button>-->
+        <!--                </el-upload>-->
+        <label class="custom-file-upload">
+          <input type="file" @change="uploadSvgContent"/>
+        </label>
+      </zt-form-item>
     </el-form>
     <iframe :src='SVGEditorUrl' ref="myIframe" width="100%" id="iframe"
             style="height:calc(100vh - 300px)">
@@ -39,6 +39,7 @@
   export default {
     data() {
       return {
+        additional: [{dictValue: '20', dictLabel: '杩愮畻鍥惧厓', remark: ''}],
         SVGEditorUrl: `/SVGOrigin/Method-Draw-master/editor/index.html`,
         url: `${window.SITE_CONFIG['apiURL']}/sysPictureBase/getProductImg?token=${Cookies.get('token')}&id=`,
         fileList: [],
@@ -58,14 +59,14 @@
       }
     },
     methods: {
-      async init() {
-        if (this.dataForm.id) {
-          let res = await this.$http.get(`/sysPictureBase/${this.dataForm.id}`)
+      async init(id,row) {
+        if (id) {
+          //let res = await this.$http.get(`/sysPictureBase/${this.dataForm.id}`)
           this.dataForm = {
             ...this.dataForm,
-            ...res.data
+            ...row
           }
-          console.log(this.dataForm,'this.dataForm this.dataForm')
+          console.log(this.dataForm, 'this.dataForm this.dataForm')
         }
       },
       httpRequest(option) {
@@ -103,10 +104,10 @@
       async formSubmit() {
         const iframeWindow = this.$refs.myIframe.contentWindow;
         this.dataForm.svgContent = iframeWindow.getSVGContentTest()
-        console.log(this.dataForm.svgContent+'this.dataForm.svgContent')
+        console.log(this.dataForm.svgContent + 'this.dataForm.svgContent')
         this.$http.post('/sysPictureBase/save', this.dataForm).then(res => {
           if (res.success) {
-            console.log(this.dataForm,'this.dataForm')
+            console.log(this.dataForm, 'this.dataForm')
             this.$tip.success()
             this.$refs.dialog.close()
             this.$emit('refreshDataList')
@@ -117,9 +118,9 @@
       async uploadSvgContent(event) {
         const iframeWindow = this.$refs.myIframe.contentWindow
         const file = event.target.files[0];
-        console.log(file,'file file')
+        console.log(file, 'file file')
         // 鍙互鍦ㄨ繖閲岃繘琛岃繘涓�姝ョ殑鏂囦欢澶勭悊锛屾瘮濡傝鍙栨枃浠跺唴瀹圭瓑鎿嶄綔
-        if (file && file.type==='image/svg+xml') {
+        if (file && file.type === 'image/svg+xml') {
           const reader = new FileReader();
           reader.onload = (e) => {
             const fileContent = e.target.result;
@@ -127,7 +128,7 @@
             iframeWindow.setSvgContent(fileContent)
           }
           reader.readAsText(file); // 浠ユ枃鏈舰寮忚鍙栨枃浠跺唴瀹�
-        }else {
+        } else {
           this.$message({message: '璇烽�夋嫨SVG鍥剧墖', type: 'warning'})
           return false; // 鍙栨秷鎿嶄綔
         }
@@ -151,6 +152,7 @@
     cursor: pointer;
     background-color: #f9f9f9;
   }
+
   .img-sc > .el-form-item > .el-form-item__content {
     width: 100%;
   }
diff --git a/web/src/views/modules/sysPictureBase/SysPictureBase.vue b/web/src/views/modules/sysPictureBase/SysPictureBase.vue
index b40228d..7914db7 100644
--- a/web/src/views/modules/sysPictureBase/SysPictureBase.vue
+++ b/web/src/views/modules/sysPictureBase/SysPictureBase.vue
@@ -9,7 +9,7 @@
 
           </el-form-item>
           <el-form-item>
-            <zt-dict v-model="dataForm.productType" dict="product" placeholder="璇烽�夋嫨浜у搧绫诲瀷" clearable></zt-dict>
+            <zt-dict v-model="dataForm.productType" dict="product" :additional=additional placeholder="璇烽�夋嫨浜у搧绫诲瀷" clearable></zt-dict>
           </el-form-item>
           <el-form-item>
             <zt-button type="query" @click="table.query()"/>
@@ -29,10 +29,14 @@
             </template>
           </el-table-column>
           <el-table-column prop="contentType" label="妫�绱㈠叧閿瓧"/>
-          <el-table-column prop="remark" label="澶囨敞"/>
-          <zt-table-column-dict prop="productType" label="浜у搧绫诲瀷" dict="product"/>
-          <zt-table-column-handle :table="table"
-                                  delete-perm="sysPictureBase::delete"/>
+          <zt-table-column-dict prop="productType" label="浜у搧绫诲瀷" dict="product" :additional=additional />
+          <zt-table-column-handle :table="table"  edit-perm="sysPictureBase::delete"
+                                  delete-perm="sysPictureBase::delete">
+            <template slot-scope="scope">
+              <zt-table-button size="small" type="primary" @click="edit(scope.row)">淇敼
+              </zt-table-button>
+            </template>
+          </zt-table-column-handle>
         </el-table>
         <!-- 寮圭獥, 鏂板 / 淇敼 -->
         <add-or-update ref="addOrUpdate" @refreshDataList="table.query"/>
@@ -47,6 +51,7 @@
   export default {
     data() {
       return {
+        additional: [{dictValue: '20', dictLabel: '杩愮畻鍥惧厓', remark: ''}],
         url: `${window.SITE_CONFIG['apiURL']}/sysPictureBase/getProductImg?token=${Cookies.get('token')}&id=`,
         dataForm: {
           contentType: '',
@@ -72,6 +77,9 @@
           await this.$tip.success()
           this.$refs.tableObj.query()
         }
+      },
+      edit(row){
+        this.$refs.addOrUpdate.$refs.dialog.init(row.id,row)
       }
     }
   }
diff --git a/web/src/views/modules/taskReliability/ConfigEdge/index.vue b/web/src/views/modules/taskReliability/ConfigEdge/configEdge.vue
similarity index 99%
rename from web/src/views/modules/taskReliability/ConfigEdge/index.vue
rename to web/src/views/modules/taskReliability/ConfigEdge/configEdge.vue
index 4c43ef7..12d7c46 100644
--- a/web/src/views/modules/taskReliability/ConfigEdge/index.vue
+++ b/web/src/views/modules/taskReliability/ConfigEdge/configEdge.vue
@@ -60,7 +60,7 @@
 <script>
 import { Edge} from '@antv/x6';
 export default {
-  name: "index",
+  name: "configEdit",
   data(){
     return{
       left_p:document.documentElement.clientHeight*0.9,
diff --git a/web/src/views/modules/taskReliability/ConfigNode/configNode.vue b/web/src/views/modules/taskReliability/ConfigNode/configNode.vue
new file mode 100644
index 0000000..cbd1bcc
--- /dev/null
+++ b/web/src/views/modules/taskReliability/ConfigNode/configNode.vue
@@ -0,0 +1,359 @@
+<template>
+  <div ref="" style="position: absolute;top:0;right:0;background:#cccccc;width: 400px;"
+       :style="'height:'+ left_p + 'px'">
+    <el-card style="height: 100%">
+      <el-tabs v-model="activeName" id="tabPane">
+        <el-tab-pane label="灞炴��" name="first">
+          <el-form :model="globalGridAttr">
+            <el-form-item v-show="shape!=='custom-circle1'" label="鑺傜偣鍚嶇О" prop="nodeText" label-width="80px">
+              <el-input v-model="globalGridAttr.nodeText" style="width:100%" @change="onTextChange"></el-input>
+            </el-form-item>
+            <el-form-item v-show="nodeType=='vote' || (nodeType=='node' && showNumberInput)" label="琛ㄥ喅鏁伴噺" prop="voteNum"
+                          label-width="80px">
+              <el-input type="number" v-model="globalGridAttr.voteNum" @change="onNumberInputValue"
+                        placeholder="璇疯緭鍏ユ暟瀛�"></el-input>
+            </el-form-item>
+            <div v-show="globalGridAttr.productType!=='product_xdy'">
+              <el-form-item v-show="nodeType=='node'" label="鍙潬鎬у垎甯冪被鍨�" prop="reliabDistribType" label-width="125px">
+                <zt-dict style="width: 100%" v-model="globalGridAttr.reliabDistribType" @input="onReliabDistribType"
+                         dict="ReliabDistribType" placeholder="鍙潬鎬у垎甯冪被鍨�" clearable/>
+              </el-form-item>
+              <el-form-item v-show="nodeType=='node'" label="MTBCF" prop="taskMtbcf" label-width="80px">
+                <el-input v-model="globalGridAttr.taskMtbcf" @change="onTaskMtbcfChange"></el-input>
+              </el-form-item>
+              <el-form-item v-show="nodeType=='node'" label="鍙傛暟2" prop="taskMtbcfOther" label-width="80px">
+                <el-input v-model="globalGridAttr.taskMtbcfOther" @change="onTaskMtbcfOtherChange"></el-input>
+              </el-form-item>
+              <el-form-item v-show="nodeType=='node'" label="鏄惁鍙淮淇�" prop="isRepair" label-width="100px">
+                <el-select style="width: 100%" v-model="globalGridAttr.isRepair" @change="onIsRepairChange">
+                  <el-option
+                    v-for="item in isRepair"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <div v-show="nodeType=='node' && showRepairInput">
+                <el-form-item label="鍙淮淇�у垎甯冪被鍨�" prop="repairDistribType" label-width="140px">
+                  <zt-dict v-model="globalGridAttr.repairDistribType" dict="RepairDistribType"
+                           @input="onRepairDistribTypeChange" placeholder="缁翠慨鎬у垎甯冪被鍨�" clearable/>
+                </el-form-item>
+                <el-form-item label="MTTCR" prop="repairMttcr" label-width="80px">
+                  <el-input v-model="globalGridAttr.repairMttcr" @change="onRepairMttcrChange"></el-input>
+                </el-form-item>
+                <el-form-item label="鍙傛暟2" prop="repairMttcrOther" label-width="80px">
+                  <el-input v-model="globalGridAttr.repairMttcrOther" @change="onRepairMttcrOtherChange"></el-input>
+                </el-form-item>
+              </div>
+            </div>
+          </el-form>
+        </el-tab-pane>
+        <el-tab-pane label="鏍峰紡" name="second">
+          <el-row :gutter="5" align="middle" style="margin-top:20px">
+            <el-col :span=8 style="font-size: 16px;line-height: 38px">鏂囨湰澶у皬</el-col>
+            <el-col :span=16>
+              <el-slider :min=8 :max=20 :step=1 v-model="globalGridAttr.nodeFontSize"
+                         @change="onFontSizeChange"></el-slider>
+            </el-col>
+          </el-row>
+          <el-row :gutter="5" align="middle" style="margin-top:20px">
+            <el-col :span=8 style="font-size: 16px;line-height: 40px">瀛椾綋棰滆壊</el-col>
+            <el-col :span=16>
+              <el-color-picker v-model="globalGridAttr.nodeColor" style="width: 100%"
+                               @change="onColorChange"></el-color-picker>
+            </el-col>
+          </el-row>
+        </el-tab-pane>
+      </el-tabs>
+    </el-card>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: "configNode",
+    data() {
+      return {
+        globalGridAttr: {
+          nodeText: '',
+          nodeStroke: '',
+          nodeStrokeWidth: '',
+          nodeFill: '',
+          nodeFontSize: '',
+          nodeColor: '',
+          nodeUsers: '',
+          nodeDate: '',
+          dataId: '',
+          inspectName: '',
+          nodeTypeExt: '',
+          statusImg: '',
+          reliabDistribType: '',
+          repairDistribType: '',
+          repairMttcr: '',
+          repairMttcrOther: '',
+          taskMtbcf: '',
+          taskMtbcfOther: '',
+          isRepair: '',
+          voteNum: 0,
+          productType: ''
+        },
+        data: {
+          dataId: '',
+          finishDate: '',
+          inspectName: ''
+        },
+        showNumberInput: false,
+        showRepairInput: false,
+        isRepair: [
+          {
+            value: 0,
+            label: '鍚�'
+          }, {
+            value: 1,
+            label: '鏄�'
+          }
+        ],
+        text: '',
+        dialogVisible: false,
+        activeName: 'first',
+        curCel: null,
+        left_p: document.documentElement.clientHeight * 0.75,
+      }
+    },
+    components: {},
+    props: {
+    },
+    watch: {
+    },
+    mounted() {
+    },
+    methods: {
+      // 鏀瑰彉瀛椾綋澶у皬
+      onFontSizeChange(e) {
+        let val = e
+        this.globalGridAttr.nodeFontSize = val
+        this.curCel.attr('text/fontSize', val)
+        this.curCel.attr('title/fontSize', val)
+      },
+      // 鏀瑰彉瀛椾綋棰滆壊
+      onColorChange(e) {
+        let val = e
+        this.globalGridAttr.nodeColor = val
+        this.curCel.attr('text/fill', val)
+        this.curCel.attr('title/fill', val)
+        this.curCel.attr('text/style/color', val)
+        this.curCel.attr('title/style/color', val)
+      },
+      // 鏀瑰彉鏂囨湰
+      onTextChange(e) {
+        this.text = e
+        this.curCel.attr('text/text', this.text)
+      },
+      onNodeTypeExtChange(e) {
+        if (this.globalGridAttr.nodeTypeExt === 'vote') {
+          this.showNumberInput = true;
+        } else {
+          this.showNumberInput = false;
+          this.globalGridAttr.numberInputValue = '';
+        }
+        this.globalGridAttr.nodeTypeExt = e
+        let nodeTypeExt = {
+          nodeTypeExt: this.globalGridAttr.nodeTypeExt
+        }
+        this.curCel.setData(nodeTypeExt)
+      },
+      // 琛ㄥ喅鏁伴噺
+      onNumberInputValue(e) {
+        this.globalGridAttr.voteNum = e
+        let voteNum = {
+          voteNum: this.globalGridAttr.voteNum
+        }
+        this.curCel.setData(voteNum)
+      },
+      // 鍙潬鎬у垎甯冪被鍨�
+      onReliabDistribType(e) {
+        this.globalGridAttr.reliabDistribType = e
+        let reliabDistribType = {
+          reliabDistribType: this.globalGridAttr.reliabDistribType
+        }
+        this.curCel.setData(reliabDistribType)
+      },
+      // mtbf
+      onTaskMtbcfChange(e) {
+        const numberRegex = /^-?\d+(\.\d+)?$/
+        if (numberRegex.test(e)) {
+          this.globalGridAttr.taskMtbcf = e
+          let taskMtbcf = {
+            taskMtbcf: this.globalGridAttr.taskMtbcf
+          }
+          this.curCel.setData(taskMtbcf)
+        } else {
+          this.$message.error('杈撳叆鏍煎紡鏈夎锛岃杈撳叆瀹炴暟')
+        }
+      },
+      // 鍙傛暟2
+      onTaskMtbcfOtherChange(e) {
+        const numberRegex = /^-?\d+(\.\d+)?$/
+        console.log(e, 'eeeee')
+        if (numberRegex.test(e)) {
+          this.globalGridAttr.taskMtbcfOther = e
+          let taskMtbcfOther = {
+            taskMtbcfOther: this.globalGridAttr.taskMtbcfOther
+          }
+          this.curCel.setData(taskMtbcfOther)
+        } else {
+          this.$message.error('杈撳叆鏍煎紡鏈夎锛岃杈撳叆瀹炴暟')
+        }
+
+      },
+      // 鏄惁鍙淮淇�
+      onIsRepairChange(e) {
+        this.showRepairInput = this.globalGridAttr.isRepair === 1;
+        this.globalGridAttr.isRepair = e
+        let isRepair = {
+          isRepair: this.globalGridAttr.isRepair
+        }
+        this.curCel.setData(isRepair)
+      },
+      // 鍙淮淇�у垎甯冪被鍨�
+      onRepairDistribTypeChange(e) {
+        this.globalGridAttr.repairDistribType = e
+        let repairDistribType = {
+          repairDistribType: this.globalGridAttr.repairDistribType
+        }
+        this.curCel.setData(repairDistribType)
+      },
+      // Mttcr
+      onRepairMttcrChange(e) {
+        const numberRegex = /^-?\d+(\.\d+)?$/
+        if (numberRegex.test(e)) {
+          this.globalGridAttr.repairMttcr = e
+          let repairMttcr = {
+            repairMttcr: this.globalGridAttr.repairMttcr
+          }
+          this.curCel.setData(repairMttcr)
+        } else {
+          this.$message.error('杈撳叆鏍煎紡鏈夎锛岃杈撳叆瀹炴暟')
+        }
+
+      },
+      // 鍙淮淇�у垎甯冪被鍨� 鍙傛暟2
+      onRepairMttcrOtherChange(e) {
+        const numberRegex = /^-?\d+(\.\d+)?$/
+        if (numberRegex.test(e)) {
+          this.globalGridAttr.repairMttcrOther = e
+          let repairMttcrOther = {
+            repairMttcrOther: this.globalGridAttr.repairMttcrOther
+          }
+          this.curCel.setData(repairMttcrOther)
+        } else {
+          this.$message.error('杈撳叆鏍煎紡鏈夎锛岃杈撳叆瀹炴暟')
+        }
+      },
+      onStatusImgChange(e) {
+        this.globalGridAttr.statusImg = e
+        let statusImg = {
+          statusImg: this.globalGridAttr.statusImg
+        }
+        this.curCel.setData(statusImg)
+        console.log(this.globalGridAttr.statusImg, 'this.globalGridAttr.statusImg')
+        console.log(this.curCel, 'this.curCel')
+        console.log(this.curCel.attr, 'this.curCel.attr')
+        this.curCel.removeTools()
+        this.curCel.addTools([
+          {
+            name: 'button',
+            args: {
+              markup: [
+                {
+                  tagName: 'image',
+                  selector: 'icon',
+                  attrs: {
+                    // 'xlink:href': 'https://gw.alipayobjects.com/mdn/rms_43231b/afts/img/A*evDjT5vjkX0AAAAAAAAAAAAAARQnAQ',
+                    'xlink:href': statusImg.statusImg,
+                    width: 30,
+                    height: 30,
+                    x: 0,
+                    y: 0
+                  }
+                }
+              ]
+            }
+          }
+        ])
+      },
+      loadData(cell) {
+        this.curCel = cell
+        if (cell.id) {
+          this.nodeType = cell.getData().nodeType
+          this.showNumberInput = false
+          this.globalGridAttr.nodeStroke = cell.attr('body/stroke')
+          this.globalGridAttr.nodeStrokeWidth = cell.attr('body/strokeWidth')
+          this.globalGridAttr.nodeFill = cell.attr('body/fill')
+          // globalGridAttr.nodeFontSize = cell.attr('text/fontSize')
+          // globalGridAttr.nodeFontSize = cell.attr('title/fontSize')
+          this.globalGridAttr.nodeFontSize = cell.attr('text/fontSize') ? cell.attr('text/fontSize') : cell.attr('title/fontSize')
+          this.globalGridAttr.nodeColor = cell.attr('text/fill') ? cell.attr('text/fill') : cell.attr('title/fill') ? cell.attr('title/fill') : cell.attr('label/text/fill')
+          // globalGridAttr.nodeColor = cell.attr('text/fill')
+          // globalGridAttr.nodeColor = cell.attr('title/fill')
+          // globalGridAttr.nodeColor = cell.attr('text/style/color')
+          // globalGridAttr.nodeColor =  cell.attr('title/style/color')
+          this.globalGridAttr.nodeUsers = cell.attr('approve/users')
+          this.globalGridAttr.nodeText = cell.attr('text/text')
+          this.globalGridAttr.nodeDate = cell.attr('title/text')
+          this.globalGridAttr.dataId = cell.getData().dataId
+          this.globalGridAttr.inspectName = cell.getData().inspectName
+          this.globalGridAttr.nodeTypeExt = cell.getData().nodeTypeExt
+          this.globalGridAttr.statusImg = cell.getData().statusImg
+          this.globalGridAttr.reliabDistribType = cell.getData().reliabDistribType
+          this.globalGridAttr.repairDistribType = cell.getData().repairDistribType
+          this.globalGridAttr.repairMttcr = cell.getData().repairMttcr
+          this.globalGridAttr.repairMttcrOther = cell.getData().repairMttcrOther
+          this.globalGridAttr.taskMtbcf = cell.getData().taskMtbcf
+          this.globalGridAttr.taskMtbcfOther = cell.getData().taskMtbcfOther
+          this.globalGridAttr.isRepair = cell.getData().isRepair
+          this.globalGridAttr.voteNum = cell.getData().voteNum
+          this.globalGridAttr.productType = cell.getData().productType
+          if (this.nodeType === 'vote' || this.globalGridAttr.nodeTypeExt === 'vote' || (cell.getData().voteNum !== undefined && cell.getData().voteNum !== '')) {
+            console.log(cell.getData().voteNum, 'cell.getData().voteNum')
+            this.showNumberInput = true
+          }
+          this.showRepairInput = cell.getData().isRepair
+          cell.removeTools()
+          cell.addTools([
+            {
+              name: 'button',
+              args: {
+                markup: [
+                  {
+                    tagName: 'image',
+                    selector: 'icon',
+                    attrs: {
+                      // 'xlink:href': 'https://gw.alipayobjects.com/mdn/rms_43231b/afts/img/A*evDjT5vjkX0AAAAAAAAAAAAAARQnAQ',
+                      'xlink:href': this.globalGridAttr.statusImg,
+                      width: 30,
+                      height: 30,
+                      x: 0,
+                      y: 0
+                    }
+                  }
+                ]
+              }
+            }
+          ])
+        }
+      }
+    }
+  }
+</script>
+
+<style>
+  #tabPane .el-tabs__header.is-top .el-tabs__nav-scroll {
+    width: 100% !important;
+  }
+
+  #tabPane .el-color-picker__trigger {
+    width: 100%;
+  }
+</style>
diff --git a/web/src/views/modules/taskReliability/OperatConditModel.vue b/web/src/views/modules/taskReliability/OperatConditModel.vue
index a974bad..ef311e4 100644
--- a/web/src/views/modules/taskReliability/OperatConditModel.vue
+++ b/web/src/views/modules/taskReliability/OperatConditModel.vue
@@ -1,56 +1,142 @@
 <template>
-    <div class="mod-taskReliability-operatConditModel}">
-      <zt-table-wraper ref="tableObj" :paging='false' defaultNotQuery="true" query-url="/taskReliability/OperatConditModel/page" delete-url="/taskReliability/OperatConditModel/" v-slot="{ table }">
-        <el-form :inline="true" :model="dataForm" @keyup.enter.native="table.query()">
-          <el-form-item>
-          </el-form-item>
-        </el-form>
-        <el-table v-loading="table.dataLoading" :data="table.dataList" height="100px"
-                  v-adaptive="{bottomOffset:70}" border @selection-change="table.selectionChangeHandle"
-                  row-key="id"
-                  :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
-                  :default-expand-all="true">
-          <el-table-column prop="product" label="浜у搧鑺傜偣" width="160"/>
-          <el-table-column prop="modelName" label="浜у搧妯″瀷"/>
-          <zt-table-column-handle :table="table" edit-perm="taskReliability:update"
-                                  delete-perm="taskReliability::delete" :has-view="false">
-            <template v-slot="{ row }">
-              <zt-table-button @click="openSelectModel(row)">閫夋嫨妯″瀷</zt-table-button>
-            </template>
-          </zt-table-column-handle>
-        </el-table>
-        <select-model-rbd ref="SelectModelRbd" ></select-model-rbd>
-      </zt-table-wraper>
-    </div>
+  <div class="mod-taskReliability-operatConditModel}">
+    <zt-table-wraper @dataLoaded="dataLoaded" ref="tableObj" :paging='false' defaultNotQuery="true"
+                     query-url="/taskReliability/OperatConditModel/page"
+                     delete-url="/taskReliability/OperatConditModel/" v-slot="{ table }">
+      <el-form :inline="true" :model="dataForm" @keyup.enter.native="table.query()">
+        <el-form-item>
+          <el-button v-if="dataForm.productId" type="primary" @click="save()">淇濆瓨</el-button>
+        </el-form-item>
+      </el-form>
+      <el-table v-loading="table.dataLoading" :data="table.dataList" height="100px"
+                v-adaptive="{bottomOffset:70}" border @selection-change="table.selectionChangeHandle"
+                row-key="id"
+                :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
+                :default-expand-all="true">
+        <el-table-column prop="product" label="浜у搧鑺傜偣"/>
+        <el-table-column prop="modelId" label="浜у搧妯″瀷">
+          <template slot-scope="scope">
+            <el-select v-model="scope.row.modelId" :disabled="scope.row.isDisabled == 1" placeholder="璇烽�夋嫨"
+                       style="width:100%" @change="modelChanged(scope.row)">
+              <el-option on
+                         v-for="item in scope.row.modelList"
+                         :key="item.id"
+                         :label="item.modelName"
+                         :value="item.id"
+              />
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column label="鎿嶄綔" width="100px">
+          <template v-slot="{ row }">
+            <el-button v-if="row.modelId" type="primary" size="small" @click="drawRBD(row)">鏌ョ湅妯″瀷</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-dialog v-dialogDrag title="妯″瀷璁捐" top="1vh" width='95%' :visible.sync="dialogVisible2" v-if="dialogVisible2">
+        <RBDEditImg ref="rbdEditImg"></RBDEditImg>
+      </el-dialog>
+    </zt-table-wraper>
+  </div>
 </template>
 
 <script>
-  import SelectModelRbd from "./SelectModelRbd";
+  import RBDEditImg from './RBD-edit-img'
+
   export default {
     name: 'OperaConditModel',
     data() {
       return {
         dataForm: {
-          operatConditId:'',
-          productId:'',
-        }
+          operatConditId: '',
+          productId: '',
+        },
+        mapModelNodes: {},
+        dialogVisible2: false,
       }
     },
     components: {
-      SelectModelRbd
+      RBDEditImg
     },
-    methods:{
+    mounted() {
+      this.getModelNodes()
+    },
+    methods: {
       init(param) {
         console.log(param, '')
         this.dataForm.operatConditId = param.row.id
         this.dataForm.productId = param.productId
         this.$refs.tableObj.query()
       },
-      openSelectModel(row) {
-        console.log(row, 'selectModel');
-        if (!row.operatConditId)
-          row.operatConditId = this.dataForm.operatConditId
-        this.$refs.SelectModelRbd.$refs.dialog.init(row)
+      dataLoaded(dataList) {
+        dataList[0].isDisabled = 0
+        if (!dataList[0].modelId && dataList[0].modelList.length == 1) {
+          console.log(dataList[0].modelList[0].id, ' dataList[0].modelList[0].modelId')
+          dataList[0].modelId = dataList[0].modelList[0].id
+          console.log(dataList[0], 'dataLoaded(dataList)')
+          this.modelChanged(dataList[0])
+        }
+      },
+      async save() {
+        let res = await this.$http.post('/taskReliability/OperatConditModel/', this.$refs.tableObj.dataList[0])
+        if (res.success) {
+          this.$refs.tableObj.query()
+        }
+      },
+      async getModelNodes() {
+        let res = await this.$http.get(`/taskReliability/OperatConditModel/getModelNodes?shipId=0`)
+        console.log(res, 'res taskReliability')
+        console.log(res.data, 'res.data taskReliability')
+        if (res.data) {
+          this.mapModelNodes = res.data
+
+        }
+      },
+      modelChanged(row) {
+        let modelId = row.modelId
+        let modelNodes = this.mapModelNodes[modelId]
+        console.log(modelId, 'modelChanged modelId')
+        console.log(modelNodes, 'modelChanged modelNodes')
+
+        for (let subRow of row.children) {
+          if (modelNodes.indexOf(subRow.productId)) {
+            subRow.isDisabled = 0
+            if (subRow.modelList.length == 1) {
+              subRow.modelId = subRow.modelList[0].id
+            } else {
+              //subRow.modelId = null
+            }
+          } else {
+            subRow.isDisabled = 1
+            subRow.modelId = null
+          }
+          this.nodeIteration(subRow)
+        }
+      },
+      nodeIteration(parentRow) {
+        for (let subRow of parentRow.children) {
+          if (parentRow.modelId) {
+            subRow.isDisabled = 0
+            if (subRow.modelList.length == 1) {
+              subRow.modelId = subRow.modelList[0].id
+            }
+          } else {
+            subRow.isDisabled = 1
+            subRow.modelId = null
+          }
+          this.nodeIteration(subRow)
+        }
+      },
+      drawRBD(row) {
+        this.dialogVisible2 = true
+        let param = {
+          id: row.modelId,
+          model: row.modelName,
+          productId: row.productId
+        }
+        this.$nextTick(() => {
+          this.$refs.rbdEditImg.init(param)
+        })
       }
     }
   }
diff --git a/web/src/views/modules/taskReliability/RBD-edit-img.vue b/web/src/views/modules/taskReliability/RBD-edit-img.vue
index a236bc2..bc9afcc 100644
--- a/web/src/views/modules/taskReliability/RBD-edit-img.vue
+++ b/web/src/views/modules/taskReliability/RBD-edit-img.vue
@@ -48,12 +48,8 @@
           <div id="containerImg" style="border: 1px solid #EAEBEE;border-radius: 6px;
         box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);height: 100%">
           </div>
-          <config-node v-show="type === 'node'" :id="id" :diagramId="diagramId" :globalGridAttr="globalGridAttr"
-                       :graph="graph"
-                       :nodeType="nodeType"
-                       :projectId="projectId"
-                       :shape="shape"/>
-          <config-edge v-show="type === 'edge'" :id="id" :globalGridAttr="globalGridAttr" :graph="graph"/>
+          <config-node ref="configNode" v-show="type === 'node'"/>
+          <config-edge ref="configEdge" v-show="type === 'edge'"/>
         </div>
       </el-col>
     </el-row>
@@ -62,19 +58,15 @@
 
 <script>
   import {Graph, Shape, Addon, Cell} from '@antv/x6'
-  import ConfigNode from './ConfigNode/index.vue'
-  import ConfigEdge from './ConfigEdge/index.vue'
-  import {removeCurrentTabHandle} from '@/commonJS/common'
+  import ConfigNode from './ConfigNode/configNode.vue'
+  import ConfigEdge from './ConfigEdge/configEdge.vue'
   import {setHartBeat} from '@/commonJS/common';
   import Cookies from 'js-cookie'
   import {getUUID} from '../../../../packages/utils'
-  import RBDDefault from './RBD-default.json'
+  // import RBDDefault from './RBD-default.json'
 
   export default {
     name: 'RBD-edit-img',
-    /*props: {
-
-    },*/
     props: {
       projectId: {
         type: String
@@ -94,6 +86,425 @@
       ConfigNode,
       ConfigEdge
     },
+    computed: {
+      RBDDefault() {
+        let url = `${window.SITE_CONFIG['apiURL']}/sysPictureBase/getSvgImage?token=${Cookies.get('token')}&id=`
+        let result = `
+        {
+          "cells":
+          [
+            {
+              "position": {
+                "x": -600,
+                "y": 0
+              },
+              "size": {
+                "width": 60,
+                "height": 60
+              },
+              "attrs": {
+                "text": {
+                  "refY": "100%",
+                  "textVerticalAnchor": "top",
+                  "text": "start",
+                  "refY2": 4
+                },
+                "image": {
+                  "xlink:href": "${url}10011"
+                }
+              },
+              "visible": true,
+              "shape": "image",
+              "id": "10000",
+              "data": {
+                "type": "imageNodes",
+                "endNodeId": "20000",
+                "dataId": "",
+                "nodeType": "start",
+                "nodeTypeExt": "",
+                "voteNum": ""
+              },
+              "ports": {
+                "groups": {
+                  "top": {
+                    "position": {
+                      "name": "top"
+                    },
+                    "attrs": {
+                      "circle": {
+                        "r": 4,
+                        "magnet": true,
+                        "stroke": "#5F95FF",
+                        "strokeWidth": 1,
+                        "fill": "#fff",
+                        "style": {
+                          "visibility": "hidden"
+                        }
+                      }
+                    }
+                  },
+                  "right": {
+                    "position": {
+                      "name": "right"
+                    },
+                    "attrs": {
+                      "circle": {
+                        "r": 4,
+                        "magnet": true,
+                        "stroke": "#5F95FF",
+                        "strokeWidth": 1,
+                        "fill": "#fff",
+                        "style": {
+                          "visibility": "hidden"
+                        }
+                      }
+                    }
+                  },
+                  "bottom": {
+                    "position": {
+                      "name": "bottom"
+                    },
+                    "attrs": {
+                      "circle": {
+                        "r": 4,
+                        "magnet": true,
+                        "stroke": "#5F95FF",
+                        "strokeWidth": 1,
+                        "fill": "#fff",
+                        "style": {
+                          "visibility": "hidden"
+                        }
+                      }
+                    }
+                  },
+                  "left": {
+                    "position": {
+                      "name": "left"
+                    },
+                    "attrs": {
+                      "circle": {
+                        "r": 4,
+                        "magnet": true,
+                        "stroke": "#5F95FF",
+                        "strokeWidth": 1,
+                        "fill": "#fff",
+                        "style": {
+                          "visibility": "hidden"
+                        }
+                      }
+                    }
+                  }
+                },
+                "items": [
+                  {
+                    "id": "top1",
+                    "group": "top"
+                  },
+                  {
+                    "id": "right1",
+                    "group": "right"
+                  },
+                  {
+                    "id": "bottom1",
+                    "group": "bottom"
+                  },
+                  {
+                    "id": "left1",
+                    "group": "left"
+                  }
+                ]
+              },
+              "zIndex": 1
+            },
+            {
+              "position": {
+                "x": 0,
+                "y": 0
+              },
+              "size": {
+                "width": 100,
+                "height": 60
+              },
+              "attrs": {
+                "text": {
+                  "refY": "100%",
+                  "textVerticalAnchor": "top",
+                  "text": "dashedBox",
+                  "refY2": 4
+                },
+                "image": {
+                  "xlink:href": "${url}10015"
+                }
+              },
+              "visible": true,
+              "shape": "image",
+              "id": 15000,
+              "data": {
+                "type": "imageNodes",
+                "dataId": "",
+                "nodeType": "dashedBox",
+                "nodeTypeExt": "",
+                "voteNum": ""
+              },
+              "ports": {
+                "groups": {
+                  "top": {
+                    "position": {
+                      "name": "top"
+                    },
+                    "attrs": {
+                      "circle": {
+                        "r": 4,
+                        "magnet": true,
+                        "stroke": "#5F95FF",
+                        "strokeWidth": 1,
+                        "fill": "#fff",
+                        "style": {
+                          "visibility": "hidden"
+                        }
+                      }
+                    }
+                  },
+                  "right": {
+                    "position": {
+                      "name": "right"
+                    },
+                    "attrs": {
+                      "circle": {
+                        "r": 4,
+                        "magnet": true,
+                        "stroke": "#5F95FF",
+                        "strokeWidth": 1,
+                        "fill": "#fff",
+                        "style": {
+                          "visibility": "hidden"
+                        }
+                      }
+                    }
+                  },
+                  "bottom": {
+                    "position": {
+                      "name": "bottom"
+                    },
+                    "attrs": {
+                      "circle": {
+                        "r": 4,
+                        "magnet": true,
+                        "stroke": "#5F95FF",
+                        "strokeWidth": 1,
+                        "fill": "#fff",
+                        "style": {
+                          "visibility": "hidden"
+                        }
+                      }
+                    }
+                  },
+                  "left": {
+                    "position": {
+                      "name": "left"
+                    },
+                    "attrs": {
+                      "circle": {
+                        "r": 4,
+                        "magnet": true,
+                        "stroke": "#5F95FF",
+                        "strokeWidth": 1,
+                        "fill": "#fff",
+                        "style": {
+                          "visibility": "hidden"
+                        }
+                      }
+                    }
+                  }
+                },
+                "items": [
+                  {
+                    "id": "top1",
+                    "group": "top"
+                  },
+                  {
+                    "id": "right1",
+                    "group": "right"
+                  },
+                  {
+                    "id": "bottom1",
+                    "group": "bottom"
+                  },
+                  {
+                    "id": "left1",
+                    "group": "left"
+                  }
+                ]
+              },
+              "zIndex": 2
+            },
+            {
+              "position": {
+                "x": 600,
+                "y": 0
+              },
+              "size": {
+                "width": 60,
+                "height": 60
+              },
+              "attrs": {
+                "text": {
+                  "refY": "100%",
+                  "textVerticalAnchor": "top",
+                  "text": "end",
+                  "refY2": 4
+                },
+                "image": {
+                  "xlink:href": "${url}10012"
+                }
+              },
+              "visible": true,
+              "shape": "image",
+              "id": "20000",
+              "data": {
+                "type": "imageNodes",
+                "startNodeId": "10000",
+                "dataId": "",
+                "nodeType": "end",
+                "nodeTypeExt": "",
+                "voteNum": ""
+              },
+              "ports": {
+                "groups": {
+                  "top": {
+                    "position": {
+                      "name": "top"
+                    },
+                    "attrs": {
+                      "circle": {
+                        "r": 4,
+                        "magnet": true,
+                        "stroke": "#5F95FF",
+                        "strokeWidth": 1,
+                        "fill": "#fff",
+                        "style": {
+                          "visibility": "hidden"
+                        }
+                      }
+                    }
+                  },
+                  "right": {
+                    "position": {
+                      "name": "right"
+                    },
+                    "attrs": {
+                      "circle": {
+                        "r": 4,
+                        "magnet": true,
+                        "stroke": "#5F95FF",
+                        "strokeWidth": 1,
+                        "fill": "#fff",
+                        "style": {
+                          "visibility": "hidden"
+                        }
+                      }
+                    }
+                  },
+                  "bottom": {
+                    "position": {
+                      "name": "bottom"
+                    },
+                    "attrs": {
+                      "circle": {
+                        "r": 4,
+                        "magnet": true,
+                        "stroke": "#5F95FF",
+                        "strokeWidth": 1,
+                        "fill": "#fff",
+                        "style": {
+                          "visibility": "hidden"
+                        }
+                      }
+                    }
+                  },
+                  "left": {
+                    "position": {
+                      "name": "left"
+                    },
+                    "attrs": {
+                      "circle": {
+                        "r": 4,
+                        "magnet": true,
+                        "stroke": "#5F95FF",
+                        "strokeWidth": 1,
+                        "fill": "#fff",
+                        "style": {
+                          "visibility": "hidden"
+                        }
+                      }
+                    }
+                  }
+                },
+                "items": [
+                  {
+                    "id": "top1",
+                    "group": "top"
+                  },
+                  {
+                    "id": "right1",
+                    "group": "right"
+                  },
+                  {
+                    "id": "bottom1",
+                    "group": "bottom"
+                  },
+                  {
+                    "id": "left1",
+                    "group": "left"
+                  }
+                ]
+              },
+              "zIndex": 3
+            },
+            {
+              "shape": "edge",
+              "id": "66c81c68-0827-4a3c-8343-e2c453d3e9e7",
+              "router": {
+                "name": "manhattan"
+              },
+              "connector": {
+                "name": "rounded"
+              },
+              "source": {
+                "cell": "10000",
+                "port": "right1"
+              },
+              "target": {
+                "cell": 15000,
+                "port": "left1"
+              },
+              "zIndex": 4
+            },
+            {
+              "shape": "edge",
+              "id": "a0f3cf90-6d37-4ee0-a254-90b4ec2b6a7f",
+              "router": {
+                "name": "manhattan"
+              },
+              "connector": {
+                "name": "rounded"
+              },
+              "source": {
+                "cell": 15000,
+                "port": "right1"
+              },
+              "target": {
+                "cell": "20000",
+                "port": "left1"
+              },
+              "zIndex": 5
+            }
+          ]
+        }
+        `
+        return JSON.parse(result)
+      }
+    },
     data() {
       return {
         isFirstLoad: true,
@@ -106,26 +517,6 @@
         modelType: '',
         timer: null,
         imagesList: [
-          // {imgPath: 'start', imgName: 'start', nodeType: 'start', imgWidth: 60, imgHeight: 60, imgId: '1', data: {}},
-          // {imgPath: 'end', imgName: 'end', nodeType: 'end', imgWidth: 60, imgHeight: 60, imgId: '2', data: {}},
-          // {
-          //   imgPath: 'connect',
-          //   imgName: 'connect',
-          //   nodeType: 'connect',
-          //   imgWidth: 30,
-          //   imgHeight: 30,
-          //   imgId: '3',
-          //   data: {}
-          // },
-          // {
-          //   imgPath: 'connect',
-          //   imgName: 'bridge',
-          //   nodeType: 'bridge',
-          //   imgWidth: 50,
-          //   imgHeight: 50,
-          //   imgId: '12',
-          //   data: {}
-          // },
           {
             imgPath: 'parallel',
             imgName: 'parallel',
@@ -176,10 +567,15 @@
         diagramIdDisabled: false,
         dataForm: {
           id: null,
+          pid: null,
+          model_tag: '',
+          model_name: '',
+          product_id: null,
           content: null,
           publishContent: null,
           hasPublish: 0,
           urlPref: '',
+          nodeArr: []
         },
         type: '',
         id: '',
@@ -758,8 +1154,10 @@
           token: Cookies.get('token'),
         }
         let res = await this.$http.get(`/taskReliability/ModelLine/getDiagram`, {params: params})
-        if (res.data !== null && (res.data.content != null)) {
-          this.dataForm = res.data
+        this.dataForm = res.data
+        if (res.data.content != null) {
+          console.log(this.dataForm, 'getDiagram datafrom')
+          console.log(res.data, 'getDiagram res.data')
           this.diagramJson = JSON.parse(this.dataForm.content)
           this.graph.fromJSON(this.diagramJson)
           this.isFirstLoad = false;
@@ -769,14 +1167,14 @@
           // this.graph.centerContent()
           // this.graph.zoomToFit()
         } else {
-          this.graph.fromJSON(RBDDefault)
+          this.graph.fromJSON(this.RBDDefault)
           this.isFirstLoad = false
         }
       },
       async clearDiagram() {
-        this.dataForm.id = null
         // this.graph.fromJSON(this.emptyJson)
-        this.graph.fromJSON(RBDDefault)
+        console.log(this.RBDDefault, 'clearDiagram')
+        this.graph.fromJSON(this.RBDDefault)
         this.graph.positionContent('left')
         this.isFirstLoad = false;
         // this.graph.centerContent()
@@ -805,9 +1203,6 @@
               }
             },
           },
-          // panning: {
-          //   enabled: true,
-          // },
           scroller: {
             enabled: true,
             pageVisible: true,
@@ -828,9 +1223,6 @@
           connecting: {
             router: {
               name: 'manhattan',
-              // args: {
-              //   padding: 1,
-              // },
             },
             connector: {
               name: 'rounded',
@@ -997,9 +1389,10 @@
         }
         let res = await this.$http.get(`/basicInfo/XhProductModel/getProduct`, {params: params})
         this.imagesList2 = res.data
-        console.log(this.imagesList2, 'getProduct(productId)234567890')
-        let urlObject = window.URL || window.webkitURL || window;
+        /*for(let i =0;i<this.imagesList2.length;i++){
 
+        }*/
+        console.log(this.imagesList2, 'getProduct(productId)234567890')
         const imageNodes2 = this.imagesList2.map((item) =>
           this.graph.createNode({
             shape: 'image',
@@ -1009,18 +1402,21 @@
             id: item.dataId, // 鎵嬪姩璁剧疆鑺傜偣鐨� ID
             data: {
               type: 'imageNodes2',
-              isRepair: item.isRepair,
               dataId: item.dataId,
               nodeType: item.nodeType,
               nodeTypeExt: item.nodeTypeExt,
               productType: item.productType,
               statusImg: item.statusImg,
-              reliabDistribType: item.reliabDistribType,
-              repairDistribType: item.repairDistribType,
-              repairMttcr: item.repairMttcr,
-              repairMttcrOther: item.repairMttcrOther,
+
+              reliabDistribType: item.reliabDistribType ? item.reliabDistribType : 1,
               taskMtbcf: item.taskMtbcf,
               taskMtbcfOther: item.taskMtbcfOther,
+
+              isRepair: item.isRepair,
+              repairDistribType: item.repairDistribType ? item.repairDistribType : 1,
+              repairMttcr: item.repairMttcr,
+              repairMttcrOther: item.repairMttcrOther,
+
               imgHeight: item.imgHeight,
               imgWidth: item.imgWidth,
               voteNum: '',
@@ -1157,24 +1553,18 @@
             }
           }
           node.remove()
-
-          /*//濡傛灉鑺傜偣涓庤妭鐐圭浉浜�
-          console.log(node.position().x, node.position().x, 'node.position().x')
-          if (nodeType === 'bridgeConnection') {
-            this.getBridgeConnection()
-          }*/
         });
         this.graph.on('cell:contextmenu', ({cell}) => {
           // this.type.value = cell.isNode() ? "node" : "edge"
           this.type = cell.isNode() ? 'node' : 'edge'
-          this.shape = cell.shape
-          this.id = cell.id
+          /*          this.shape = cell.shape
+                    this.id = cell.id*/
           if (this.type === 'node') {
-            this.nodeType = cell.getData().nodeType
-            // console.log(this.nodeType, cell.id, 'this.nodeType')
+            //this.nodeType = cell.getData().nodeType
+            this.$refs.configNode.loadData(cell)
+          } else {
+            this.$refs.configNode.loadData(cell)
           }
-          // console.log(this.shape, 'this.shape')
-          // this.nodeOpt(this.id, this.globalGridAttr)
         })
         //鍗曞嚮杈硅妭鐐�
         this.graph.on('edge:click', ({edge}) => {
@@ -1422,6 +1812,16 @@
       },
       async saveDiagram() {
         console.log(JSON.stringify(this.graph.toJSON()), 'graph.toJSON()')
+        const nodes = this.graph.getNodes()
+        let nodeArr2 = []
+        // 妫�鏌ラ櫎褰撳墠鑺傜偣涔嬪鐨勬墍鏈夎妭鐐圭殑鍖呭洿妗嗘槸鍚︾浉浜�
+        for (const node of nodes) {
+          console.log(node, 'saveDiagram node')
+          if (node.getData().nodeType == 'node' && node.getData().productType != 'product_xdy' && node.getData().dataId) {
+            nodeArr2.push(node.getData().dataId)
+          }
+        }
+        this.dataForm.nodeArr = nodeArr2
         this.dataForm.content = JSON.stringify(this.graph.toJSON())
         this.dataForm.urlPref = window.SITE_CONFIG['apiURL']
         console.log(this.dataForm, 'dataFrom')
@@ -1435,6 +1835,15 @@
       },
       async analyzeDiagram() {
         console.log(JSON.stringify(this.graph.toJSON()), 'graph.toJSON()')
+        const nodes = this.graph.getNodes()
+        let nodeArr2 = []
+        // 妫�鏌ラ櫎褰撳墠鑺傜偣涔嬪鐨勬墍鏈夎妭鐐圭殑鍖呭洿妗嗘槸鍚︾浉浜�
+        for (const node of nodes) {
+          if (node.getData().nodeType === 'node' && node.getData().productType !== 'product_xdy' && node.getData().dataId) {
+            nodeArr2.push(node.getData().dataId)
+          }
+        }
+        this.dataForm.nodeArr = nodeArr2
         this.dataForm.content = JSON.stringify(this.graph.toJSON())
         this.dataForm.urlPref = window.SITE_CONFIG['apiURL']
         await this.$http['post'](`/taskReliability/ModelLine/analyze`, this.dataForm).then(async res => {
diff --git a/web/src/views/modules/taskReliability/SimulatAssess.vue b/web/src/views/modules/taskReliability/SimulatAssess.vue
index d87c221..071c3f7 100644
--- a/web/src/views/modules/taskReliability/SimulatAssess.vue
+++ b/web/src/views/modules/taskReliability/SimulatAssess.vue
@@ -11,6 +11,11 @@
               <zt-form-item label="鎬讳綋浠诲姟" prop="task">
                 <zt-select v-model="dataForm.task" :datas="taskList" @change="onTaskSelected"/>
               </zt-form-item>
+              <zt-form-item label="浠诲姟鏃堕暱" prop="simulatTime">
+                <el-input type="number" :min="1" v-model="dataForm.simulatTime">
+                  <template slot="append">灏忔椂</template>
+                </el-input>
+              </zt-form-item>
               <zt-form-item label="鏁版嵁绫诲瀷" prop="dataType">
                 <zt-dict v-model="dataForm.dataType" dict="dataType"></zt-dict>
               </zt-form-item>
@@ -22,11 +27,6 @@
                   <template slot="append">鍒嗛挓</template>
                 </el-input>
               </zt-form-item>
-              <zt-form-item label="浠跨湡鏃堕暱" prop="simulatTime">
-                <el-input type="number" :min="1" v-model="dataForm.simulatTime">
-                  <template slot="append">鍒嗛挓</template>
-                </el-input>
-              </zt-form-item>
               <zt-form-item label="浠跨湡娆℃暟" prop="simulatFrequency">
                 <el-input type="number" :min="1" v-model="dataForm.simulatFrequency">
                   <template slot="append">娆℃暟</template>
@@ -34,7 +34,7 @@
               </zt-form-item>
               <zt-form-item>
                 <zt-button @click="analyze()">浠跨湡鍒嗘瀽</zt-button>
-                <zt-button>鍒嗘瀽缁撴灉</zt-button>
+                <zt-button @click="getresult()">鍒嗘瀽缁撴灉</zt-button>
               </zt-form-item>
             </el-form>
           </div>
@@ -43,7 +43,7 @@
       <el-col :span="18">
         <div class="fa-card-a">
           <SimulatCurve ref="SimulatCurve"></SimulatCurve>
-          <SimulatData></SimulatData>
+          <SimulatData ref="SimulatData"></SimulatData>
         </div>
       </el-col>
     </el-row>
@@ -104,24 +104,25 @@
         console.log(res.data)
         this.taskList = res.data
       },
+      getresult(){
+        this.$refs.SimulatData.init();
+      },
       async analyze() {
-        let res = await this.$http.post('/taskReliability/SimulatAssess/analyze', this.dataForm)
+       /* let res = await this.$http.post('/taskReliability/SimulatAssess/analyze', this.dataForm)
         if (res.success) {
-          console.log(res.data, 'analyze')
           let stopPolling = false
           if (!stopPolling) {
             let timer = setInterval(async () => {
               let res2 = await this.$http.get(`/taskReliability/SimulatAssess/${res.data}`)
-              console.log(res2.data, 'setInterval')
               if (res2.data) {
                 if (res2.data.code === '0' || res2.data.errorMsg === '0') {
                   stopPolling = true
                   // 涓杞
                   clearInterval(timer)
-                  alert('宸茶幏鍙�')
-                  this.$refs.SimulatCurve.initEcharts(res2.data.curveData);
+                  alert('宸茶幏鍙�')*/
+                  this.$refs.SimulatCurve.initEcharts();
                   // 娓呴櫎瀹氭椂鍣�
-                } else {
+        /*        } else {
                   stopPolling = true
                   // 涓杞
                   clearInterval(timer)
@@ -131,7 +132,7 @@
             }, 400)
           }
 
-        }
+        }*/
       }
     }
   }
diff --git a/web/src/views/modules/taskReliability/SimulatCurve.vue b/web/src/views/modules/taskReliability/SimulatCurve.vue
index dbe4b67..75ea122 100644
--- a/web/src/views/modules/taskReliability/SimulatCurve.vue
+++ b/web/src/views/modules/taskReliability/SimulatCurve.vue
@@ -20,13 +20,23 @@
       initEcharts(CurveData) {
         console.log(eval(CurveData), 'initEcharts(CurveData)')
         const option = {
+          title:{
+            text:'浠跨湡鍙潬搴︽敹鏁涙洸绾垮浘',
+            textStyle: { // 涓绘爣棰樻枃鏈牱寮弡"fontSize": 18,"fontWeight": "bolder","color": "#333"}
+              fontFamily: 'Arial',
+              fontSize: 20,
+              fontStyle: 'normal',
+              fontWeight: 'normal',
+            }
+          },
           xAxis: {
-            data: eval(CurveData)[0]
+            data: [10, 30, 50, 70, 90, 110, 130,150,170],
+            name:'浠跨湡娆℃暟'
           },
           yAxis: {},
           series: [
             {
-              data: eval(CurveData)[1],
+              data: [15, 85, 75, 25, 65,35,55,45,50],
               type: 'line',
               smooth: true
             }
diff --git a/web/src/views/modules/taskReliability/SimulatData.vue b/web/src/views/modules/taskReliability/SimulatData.vue
index 9c22f5e..f7bb6f3 100644
--- a/web/src/views/modules/taskReliability/SimulatData.vue
+++ b/web/src/views/modules/taskReliability/SimulatData.vue
@@ -1,21 +1,21 @@
 <template>
-    <zt-table-wraper ref="tableObj" defaultNotQuery="true" query-url=""
-                     :paging='false'
-                     delete-url="" v-slot="{ table }">
-      <el-form :inline="true" :model="dataForm" @keyup.enter.native="table.query()">
-      </el-form>
-      <el-table v-loading="table.dataLoading" :data="table.dataList"
-                 @selection-change="table.selectionChangeHandle"
-                height="100px" v-adaptive="{bottomOffset:30}">
-        <el-table-column prop="name" label="鍚嶇О" />
-        <el-table-column prop="totalTime" label="鎬绘椂闂�"/>
-        <el-table-column prop="faultNum" label="鏁呴殰娆℃暟"/>
-        <el-table-column prop="repairTime" label="淇悊鏃堕棿"/>
-        <el-table-column prop="availability" label="鍙敤搴�"/>
-        <el-table-column prop="mtbcf" label="MTBCF"/>
-        <el-table-column prop="mttcr" label="MTTCR"/>
-      </el-table>
-    </zt-table-wraper>
+  <zt-table-wraper ref="tableObj" defaultNotQuery="true" query-url=""
+                   :paging='false'
+                   delete-url="" v-slot="{ table }">
+    <el-form :inline="true" :model="dataForm" @keyup.enter.native="table.query()">
+    </el-form>
+    <el-table v-loading="table.dataLoading" :data="dataList"
+              @selection-change="table.selectionChangeHandle"
+              height="100px" v-adaptive="{bottomOffset:30}">
+      <el-table-column prop="name" label="鍚嶇О"/>
+      <el-table-column prop="totalTime" label="鎬绘椂闂�(灏忔椂)" align="center"/>
+      <el-table-column prop="faultNum" label="鏁呴殰娆℃暟" align="center"/>
+      <el-table-column prop="repairTime" label="淇悊鏃堕棿(鍒嗛挓)" align="center"/>
+      <el-table-column prop="availability" label="鍙敤搴�(鐧惧垎姣�)" align="center"/>
+      <el-table-column prop="mtbcf" label="MTBCF" align="center"/>
+      <el-table-column prop="mttcr" label="MTTCR" align="center"/>
+    </el-table>
+  </zt-table-wraper>
 </template>
 
 <script>
@@ -28,35 +28,92 @@
         productList: [],
         dataForm: {
           productId: ''
-        }
+        },
+        dataList:[],
+        fzdataList: [
+          {
+            name: '鎬讳綋',
+            totalTime:'15000',
+            faultNum:'2',
+            repairTime:'20',
+            availability:'99.96',
+            mtbcf:'5000',
+            mttcr:'20'
+          },{
+            name: '銆�绯荤粺1',
+            totalTime:'15000',
+            faultNum:'0',
+            repairTime:'0',
+            availability:'100',
+            mtbcf:'15000',
+            mttcr:'0'
+          },{
+            name: '銆�銆�璁惧1-1',
+            totalTime:'9000',
+            faultNum:'2',
+            repairTime:'30',
+            availability:'99.98',
+            mtbcf:'3000',
+            mttcr:'15'
+          },{
+            name: '銆�銆�璁惧1-2',
+            totalTime:'15000',
+            faultNum:'4',
+            repairTime:'120',
+            availability:'98.79',
+            mtbcf:'5000',
+            mttcr:'30'
+          },{
+            name: '銆�銆�璁惧1-3',
+            totalTime:'12000',
+            faultNum:'3',
+            repairTime:'100',
+            availability:'98.88',
+            mtbcf:'3000',
+            mttcr:'33'
+          },
+          {
+            name: '銆�绯荤粺2',
+            totalTime:'10000',
+            faultNum:'2',
+            repairTime:'30',
+            availability:'99.75',
+            mtbcf:'5000',
+            mttcr:'15'
+          },{
+            name: '銆�銆�璁惧2-1',
+            totalTime:'7000',
+            faultNum:'5',
+            repairTime:'200',
+            availability:'88.84',
+            mtbcf:'1167',
+            mttcr:'40'
+          },{
+            name: '銆�銆�璁惧2-2',
+            totalTime:'5000',
+            faultNum:'3',
+            repairTime:'60',
+            availability:'98.78',
+            mtbcf:'1250',
+            mttcr:'30'
+          },{
+            name: '銆�銆�璁惧2-3',
+            totalTime:'10000',
+            faultNum:'1',
+            repairTime:'20',
+            availability:'99.97',
+            mtbcf:'5000',
+            mttcr:'20'
+          },]
       }
     },
-    components: {
-
-    },
+    components: {},
     mounted() {
-      this.getTaskProductList()
     },
     methods: {
       init() {
-
+       this.dataList =this.fzdataList
       },
-      add() {
-        this.$refs.AddOrUpdate.$refs.dialog.init(null,{productId: this.dataForm.productId})
-      },
-      selectTask(row){
-        this.$emit('onTaskSelected',row)
-      },
-      async getTaskProductList() {
-        let res = await this.$http.get('/basicInfo/XhProductModel/getTaskProductList')
-        this.productList = res.data
-        console.log(this.productList, ' async getTaskProductList()')
-      },
-      onProductSelected(data){
-        console.log(data, ' onProductSelected(data)')
-        this.dataForm.productId = data.id
-        this.$refs.tableObj.query()
-      }
     }
   }
 </script>
diff --git a/web/src/views/modules/taskReliability/TaskPhase-AddOrUpdate.vue b/web/src/views/modules/taskReliability/TaskPhase-AddOrUpdate.vue
index 3916e5b..ddcdc72 100644
--- a/web/src/views/modules/taskReliability/TaskPhase-AddOrUpdate.vue
+++ b/web/src/views/modules/taskReliability/TaskPhase-AddOrUpdate.vue
@@ -7,9 +7,9 @@
       <zt-form-item label="闃舵鏃堕暱姣�" prop="phaseDuration">
         <el-input v-model="dataForm.phaseDurationRate" @change="check"></el-input>
       </zt-form-item>
-      <zt-form-item label="闃舵鏃堕��" prop="phaseSpeed">
+<!--      <zt-form-item label="闃舵鏃堕��" prop="phaseSpeed">
         <el-input v-model="dataForm.phaseSpeed"></el-input>
-      </zt-form-item>
+      </zt-form-item>-->
       <!--      <zt-form-item label="闃舵椤哄簭" prop="phaseSort">
               <el-input v-model="dataForm.phaseSort"></el-input>
             </zt-form-item>-->
diff --git a/web/src/views/modules/taskReliability/TaskPhase.vue b/web/src/views/modules/taskReliability/TaskPhase.vue
index 9abdaaf..2b5692f 100644
--- a/web/src/views/modules/taskReliability/TaskPhase.vue
+++ b/web/src/views/modules/taskReliability/TaskPhase.vue
@@ -24,9 +24,9 @@
               <el-table-column type="selection" width="40" align="center"/>
               <el-table-column prop="phaseName" label="闃舵鍚嶇О" align="center"/>
               <el-table-column prop="phaseDurationRate" label="闃舵鏃堕暱姣�" align="right"/>
-              <el-table-column prop="phaseSpeed" label="闃舵鏃堕��" align="right"/>
+            <!--  <el-table-column prop="phaseSpeed" label="闃舵鏃堕��" align="right"/>-->
               <!--<el-table-column prop="phaseSort" label="闃舵椤哄簭" align="center"/>-->
-              <el-table-column prop="operatConditDuration" label="宸ュ喌鏃堕暱鍒嗛厤" align="center"/>
+              <!--<el-table-column prop="operatConditDuration" label="宸ュ喌鏃堕暱鍒嗛厤" align="center"/>-->
               <zt-table-column-handle :table="table" edit-perm="testReviewComment:update"
                                       delete-perm="taskReliability::delete">
                 <template v-slot="{row}">

--
Gitblit v1.9.1