From cdf29a8f6fb9990f82ccc1d3f47bfba48cfaf4fc Mon Sep 17 00:00:00 2001
From: jinlin <jinlin>
Date: 星期三, 10 一月 2024 17:24:53 +0800
Subject: [PATCH] 修改

---
 web/packages/components/zt-tree-dialog-selector/src/zt-tree-dialog-selector.vue                              |    2 
 zt/core/src/main/java/com/zt/modules/sys/controller/SysUserController.java                                   |    6 
 zt/core/src/main/java/com/zt/modules/sys/controller/SysRoleController.java                                   |   11 
 web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue                                    |   36 
 zt/core/src/main/resources/mapper/log/SysLogLoginDao.xml                                                     |   13 
 zt/core/src/main/java/com/zt/modules/sys/service/SysUserService.java                                         |    5 
 zt/core/src/main/java/com/zt/modules/workflow/dto/BizInfoDto.java                                            |    5 
 zt/core/src/main/resources/mapper/workflowconfig/WfDefStepDao.xml                                            |    1 
 core/src/main/java/com/zt/life/sys/controller/UserExtController.java                                         |    3 
 web/packages/views/modules/sys/role-user.vue                                                                 |    2 
 zt/core/src/main/java/com/zt/modules/workflow/service/WorkflowService.java                                   |   64 +
 web/public/index.html                                                                                        |    4 
 web/src/views/modules/riskTraceRecord/RiskTraceItem-AddOrUpdate.vue                                          |   69 +
 zt/core/src/main/resources/mapper/sys/SysUserDao.xml                                                         |   29 
 modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrder.java            |   26 
 zt/core/src/main/resources/mapper/workflow/WfRunTaskDao.xml                                                  |    4 
 modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportService.java           |    2 
 modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskTraceItemController.java   |  111 ++
 web/packages/views/modules/sys/role.vue                                                                      |    3 
 modules/mainPart/src/main/java/com/zt/life/modules/project/controller/ProjectController.java                 |   48 
 zt/core/src/main/java/com/zt/modules/sys/dao/SysUserDao.java                                                 |    2 
 modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskMeasureDao.java                   |   24 
 web/packages/views/modules/sys/role-user-deit.vue                                                            |    2 
 zt/core/src/main/java/com/zt/modules/sys/service/SysDeptService.java                                         |    8 
 modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskTraceRecordService.java       |   47 +
 zt/core/src/main/java/com/zt/modules/sys/controller/SysDeptController.java                                   |    9 
 zt/core/src/main/resources/mapper/log/SysLogOperationDao.xml                                                 |   33 
 modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskMeasureDao.xml                                |   33 
 modules/mainPart/src/main/java/com/zt/life/modules/project/model/Project.java                                |    6 
 modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskTraceRecordController.java |   96 ++
 modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskMeasure.java                    |  133 +++
 modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReport.java                    |    9 
 web/src/views/modules/project/SoftwareTestOrder-AddOrUpdate.vue                                              |   22 
 modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskTraceRecordDao.java               |   23 
 web/src/views/modules/qaAuditReport/QaAuditReport.vue                                                        |    8 
 web/src/views/modules/qaAuditReport/QaAuditReport-AddOrUpdate.vue                                            |  186 ++--
 web/src/views/modules/project/Project.vue                                                                    |  124 +-
 modules/mainPart/src/main/java/com/zt/life/modules/project/dto/ProjectUserDto.java                           |   20 
 modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportIncongruentDao.xml                     |    5 
 web/src/views/modules/configItemWarehouse/ConfigItemWarehouse-AddOrUpdate.vue                                |    4 
 modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskMeasureController.java     |   95 ++
 web/packages/components/zt-select/src/zt-select.vue                                                          |    2 
 modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dto/RiskTraceDto.java                     |   35 
 modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskMeasureService.java           |   41 +
 modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskTraceItemDao.xml                              |   20 
 web/src/views/modules/project/Project-AddOrUpdate.vue                                                        |  464 ++++++-----
 zt/common/src/main/java/com/zt/core/sys/model/SysDept.java                                                   |    2 
 web/src/views/modules/riskTraceRecord/RiskTraceItem.vue                                                      |   78 +
 web/src/views/modules/sys/task/stay-task.vue                                                                 |    5 
 zt/core/src/main/resources/mapper/sys/SysDeptDao.xml                                                         |   48 
 web/vue.config.js                                                                                            |    2 
 modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskTraceItem.java                  |   39 
 modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportController.java     |   21 
 web/packages/components/zt-dialog/src/zt-dialog.vue                                                          |    2 
 modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskTraceRecord.java                |   39 
 modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReportIncongruent.java         |    2 
 web/src/views/modules/sys/task/already-task.vue                                                              |    9 
 modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java   |   10 
 modules/mainPart/src/main/java/com/zt/life/modules/project/model/ProjectUserName.java                        |   28 
 web/src/views/modules/sys/workflowConfig/workflow-config-add-update.vue                                      |   13 
 web/packages/views/modules/sys/dict-type.vue                                                                 |    2 
 modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskTraceItemService.java         |  129 +++
 modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportDao.xml                                |    5 
 modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskTraceRecordDao.xml                            |   20 
 modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskTraceItemDao.java                 |   23 
 zt/core/src/main/java/com/zt/modules/workflow/dao/WfRunTaskDao.java                                          |    2 
 zt/core/src/main/java/com/zt/modules/sys/dao/SysDeptDao.java                                                 |    1 
 67 files changed, 1,861 insertions(+), 514 deletions(-)

diff --git a/core/src/main/java/com/zt/life/sys/controller/UserExtController.java b/core/src/main/java/com/zt/life/sys/controller/UserExtController.java
index 9ac7d2d..552e9b6 100644
--- a/core/src/main/java/com/zt/life/sys/controller/UserExtController.java
+++ b/core/src/main/java/com/zt/life/sys/controller/UserExtController.java
@@ -2,6 +2,7 @@
 
 import com.zt.life.sys.model.SysUserReg;
 import com.zt.life.sys.model.SysUserRegister;
+import com.zt.modules.sys.dto.UserDto;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -91,7 +92,7 @@
     @ApiOperation("杩斿洖鐢ㄦ埛鍒楄〃")
     @LogOperation("杩斿洖鐢ㄦ埛鍒楄〃")
     public Result<List<SysUser>> getUsersList() {
-         return Result.ok(sysUserService.getUsersList());
+         return Result.ok(sysUserService.getUsersList("",""));
     }
 
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrder.java b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrder.java
index 9c0c365..26d1835 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrder.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrder.java
@@ -51,6 +51,32 @@
 	@ApiModelProperty(value = "鐥呮瘨搴撶増鏈�")
 	private String virusLibraryVersion;
 
+	@ApiModelProperty(value = "妫�娴嬫帴鏀朵汉")
+	private String detectAcceptor;
+
+	@ApiModelProperty(value = "妫�娴嬫帴鏀朵汉ID")
+	private String detectAcceptorId;
+
+	@ApiModelProperty(value = "妫�娴嬫帴鏀舵椂闂�")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date detectAcceptDate;
+
+	@ApiModelProperty(value = "妫�娴嬫帴鏀舵儏鍐佃鏄�")
+	private String detectAcceptSituation;
+
+	@ApiModelProperty(value = "鍏ュ簱浜�")
+	private String depositor;
+
+	@ApiModelProperty(value = "鍏ュ簱浜篒D")
+	private String depositorId;
+
+	@ApiModelProperty(value = "鍏ュ簱鏃堕棿")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date depositDate;
+
+	@ApiModelProperty(value = "鍏ュ簱鎯呭喌璇存槑")
+	private String depositSituation;
+
 	@ApiModelProperty(value = "鏍″噯妫�娴嬩汉")
 	private String calibratDetector;
 
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java
index d00575c..c47c34d 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java
@@ -201,6 +201,10 @@
             dataObj.getCirculatOrder().setCalibratDetector(detectorPath);
             String issuerPath = "鏂囦欢鍥剧墖:" + getFilesPath.getSignPath(Convert.toLong(dataObj.getCirculatOrder().getItemIssuerId()));
             dataObj.getCirculatOrder().setItemIssuer(issuerPath);
+            String depositPath = "鏂囦欢鍥剧墖:" + getFilesPath.getSignPath(Convert.toLong(dataObj.getCirculatOrder().getDepositorId()));
+            dataObj.getCirculatOrder().setDepositor(depositPath);
+            String detectAcceptorPath = "鏂囦欢鍥剧墖:" + getFilesPath.getSignPath(Convert.toLong(dataObj.getCirculatOrder().getDetectAcceptorId()));
+            dataObj.getCirculatOrder().setDetectAcceptor(detectAcceptorPath);
             //閫氱敤瀛楀吀鍒楄〃瀛楃涓茬敓鎴�
             String itemRequireStr = getShowDictList.getShowDictList(dataObj.getCirculatOrder().getItemRequire(), "is_or_not", false);
             dataObj.getCirculatOrder().setItemRequireStr(itemRequireStr);
@@ -214,6 +218,12 @@
             String issueSituationStr = getShowDictList.getShowDictList(dataObj.getCirculatOrder().getIssueSituation(), "is_or_not", false);
             dataObj.getCirculatOrder().setIssueSituationStr(issueSituationStr);
 
+            String depositSituation = getShowDictList.getShowDictList(dataObj.getCirculatOrder().getDepositSituation(), "is_or_not", false);
+            dataObj.getCirculatOrder().setDepositSituation(depositSituation);
+
+            String detectAcceptSituation = getShowDictList.getShowDictList(dataObj.getCirculatOrder().getDetectAcceptSituation(), "is_or_not", false);
+            dataObj.getCirculatOrder().setDetectAcceptSituation(detectAcceptSituation);
+
             for (ItemCirculatOrderTechnical technical : dataObj.getTechnicalList()) {
                 String value = technical.getSecretClass();
                 String secretClassStr = getShowDictList.getShowDictList(value, "secret_class", false);
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/ProjectController.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/ProjectController.java
index ae3fd5c..ad1e21d 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/ProjectController.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/ProjectController.java
@@ -13,6 +13,9 @@
 import com.zt.common.validator.group.AddGroup;
 import com.zt.common.validator.group.DefaultGroup;
 import com.zt.common.validator.group.UpdateGroup;
+import com.zt.core.context.UserContext;
+import com.zt.core.sys.model.SysUser;
+import com.zt.life.modules.project.dto.ProjectUserDto;
 import com.zt.life.modules.project.model.Project;
 import com.zt.life.modules.project.service.ProjectService;
 import com.zt.modules.coderule.service.SysCodeRuleService;
@@ -67,10 +70,17 @@
             @ApiImplicitParam(name = "pageCode", value = "椤甸潰鏍囪瘑", dataType = Constant.QT.STRING),
     })
     public PageResult<Project> page(@ApiIgnore @QueryParam QueryFilter queryFilter) {
-        if (queryFilter.getParams().containsValue("baseline_release")||queryFilter.getParams().containsValue("config_item_warehouse")||queryFilter.getParams().containsValue("test_review_comment")){
-            queryFilter.getParams().replace("tableName","");
+        if (queryFilter.getParams().containsValue("baseline_release") || queryFilter.getParams().containsValue("config_item_warehouse") || queryFilter.getParams().containsValue("test_review_comment")) {
+            queryFilter.getParams().replace("tableName", "");
         }
-        List<Project> Project =projectService.page(queryFilter);
+        List<Project> Project = projectService.page(queryFilter);
+        for (Project project2 :Project){
+            String leaderName = project2.getProjectLeader();
+            if (leaderName.length()>10){
+                leaderName=sysUserService.getNames(leaderName);
+            }
+            project2.setProjectLeader(leaderName);
+        }
         return PageResult.ok(Project);
     }
 
@@ -78,6 +88,9 @@
     @ApiOperation("淇℃伅")
     public Result<Project> get(@PathVariable("id") Long id) {
         Project data = projectService.get(id);
+        if (data.getBizDeptId() == null) {
+            data.setBizDeptId(UserContext.getDeptId().toString());
+        }
         return Result.ok(data);
     }
 
@@ -94,8 +107,6 @@
         map.put("year", year);
         project.setYear(year);
         project.setCode(sysCodeRuleService.getNewCode(map));
-        String leaderName = sysUserService.getUsersName(project.getProjectLeader());
-        project.setProjectLeader(leaderName);
         projectService.insert(project);
         return Result.ok();
     }
@@ -106,21 +117,6 @@
     public Result update(@RequestBody Project project) {
         //鏁堥獙鏁版嵁
         ValidatorUtils.validateEntity(project, UpdateGroup.class, DefaultGroup.class);
-        String leaderName = project.getProjectLeader();
-        String projectTesters =project.getProjectTesters();
-        String projectReviewer =project.getProjectReviewer();
-        if (leaderName.length()>10){
-            leaderName=sysUserService.getNames(leaderName);
-        }
-        if (projectTesters.length()>10){
-            projectTesters=sysUserService.getNames(projectTesters);
-        }
-        if (projectReviewer.length()>10){
-            projectReviewer=sysUserService.getNames(projectReviewer);
-        }
-        project.setProjectLeader(leaderName);
-        project.setProjectTesters(projectTesters);
-        project.setProjectReviewer(projectReviewer);
         projectService.update(project);
         return Result.ok();
     }
@@ -136,4 +132,16 @@
         return Result.ok();
     }
 
+    @GetMapping("getUsersLists")
+    @ApiOperation("杩斿洖鐢ㄦ埛鍒楄〃")
+    @LogOperation("杩斿洖鐢ㄦ埛鍒楄〃")
+    public Result<ProjectUserDto> getUsersLists(String deptId) {
+        ProjectUserDto projectUserDto = new ProjectUserDto();
+        projectUserDto.setZrr(sysUserService.getUsersList("zrr", deptId));
+        projectUserDto.setCsry(sysUserService.getUsersList("csry", deptId));
+        projectUserDto.setShry(sysUserService.getUsersList("shry", deptId));
+        projectUserDto.setPzry(sysUserService.getUsersList("pzry", deptId));
+        return Result.ok(projectUserDto);
+    }
+
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/dto/ProjectUserDto.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/dto/ProjectUserDto.java
new file mode 100644
index 0000000..ac6a134
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/dto/ProjectUserDto.java
@@ -0,0 +1,20 @@
+package com.zt.life.modules.project.dto;
+
+import com.zt.core.sys.model.SysUser;
+import com.zt.life.modules.project.model.*;
+import com.zt.life.modules.sysBaseInfo.model.TestAgencyInfo;
+import com.zt.life.sys.dto.OssDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class ProjectUserDto {
+    private List<SysUser> zrr;
+    private List<SysUser> csry;
+    private List<SysUser> shry;
+    private List<SysUser> pzry;
+    }
+
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/model/Project.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/model/Project.java
index 788e9ac..720c0e4 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/project/model/Project.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/model/Project.java
@@ -75,6 +75,12 @@
 	@ApiModelProperty(value = "椤圭洰瀹℃牳浜哄憳")
 	private String projectReviewer;
 
+	@ApiModelProperty(value = "椤圭洰閰嶇疆浜哄憳")
+	private String projectConfiger;
+
+	@ApiModelProperty(value = "涓氬姟閮ㄩ棬ID")
+	private String bizDeptId;
+
 	@ApiModelProperty(value = "鏄惁绛剧讲鍚堝悓")
 	private Integer isContract;
 
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/model/ProjectUserName.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/model/ProjectUserName.java
new file mode 100644
index 0000000..f290382
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/model/ProjectUserName.java
@@ -0,0 +1,28 @@
+package com.zt.life.modules.project.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zt.common.entity.BusiEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * project
+ *
+ * @author zt generator 
+ * @since 1.0.0 2023-11-07
+ */
+@Data
+public class ProjectUserName {
+	@ApiModelProperty(value = "椤圭洰璐熻矗浜�")
+	private String projectLeaderName;
+
+	@ApiModelProperty(value = "椤圭洰娴嬭瘯浜哄憳")
+	private String projectTestersName;
+
+	@ApiModelProperty(value = "椤圭洰瀹℃牳浜哄憳")
+	private String projectReviewerName;
+
+	@ApiModelProperty(value = "椤圭洰閰嶇疆浜哄憳")
+	private String projectConfigerName;
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportController.java b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportController.java
index f03abe5..36d4063 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportController.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportController.java
@@ -13,12 +13,14 @@
 import com.zt.common.validator.group.DefaultGroup;
 import com.zt.common.validator.group.UpdateGroup;
 import com.zt.life.modules.configAuditReport.dto.ConfigAuditDto;
+import com.zt.life.modules.project.model.ProjectUserName;
 import com.zt.life.modules.qaAuditReport.dto.QaAuditReportDto;
 import com.zt.life.modules.qaAuditReport.model.QaAuditReport;
 import com.zt.life.modules.qaAuditReport.service.QaAuditReportService;
 import com.zt.life.sys.dto.OssDto;
 import com.zt.life.sys.service.SysOssConfigService;
 import com.zt.modules.coderule.service.SysCodeRuleService;
+import com.zt.modules.sys.service.SysUserService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -53,6 +55,9 @@
     @Autowired
     private SysOssConfigService sysOssConfigService;
 
+    @Autowired
+    private SysUserService sysUserService;
+
     @GetMapping("page")
     @ApiOperation("鍒嗛〉")
     @ApiImplicitParams({
@@ -60,7 +65,10 @@
         @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT),
         @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING),
         @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING),
-        @ApiImplicitParam(name = "code", value = "缂栧彿", dataType = Constant.QT.STRING, format = "code^LK")    })
+        @ApiImplicitParam(name = "code", value = "缂栧彿", dataType = Constant.QT.STRING, format = "a.code^LK"),
+        @ApiImplicitParam(name = "softwareName", value = "椤圭洰鍚嶇О", dataType = Constant.QT.STRING, format = "p.software_name^LK"),
+        @ApiImplicitParam(name = "softwareIdentity", value = "椤圭洰鏍囪瘑", dataType = Constant.QT.STRING, format = "p.software_identity^LK")
+    })
     public PageResult<QaAuditReport> page(@ApiIgnore @QueryParam QueryFilter queryFilter){
         return PageResult.ok(qaAuditReportService.page(queryFilter));
     }
@@ -120,4 +128,15 @@
         qaAuditReportService.exportQaReport(id, request, response);
     }
 
+    @GetMapping("getNameById")
+    @ApiOperation("鐢ㄦ埛鍚�")
+    public Result<ProjectUserName> getNameById(String projectLeaderId, String projectTestersId, String projectConfigerId) {
+        ProjectUserName name =new ProjectUserName();
+        if (projectLeaderId.length()>10||projectTestersId.length()>10||projectConfigerId.length()>10){
+            name.setProjectLeaderName(sysUserService.getNames(projectLeaderId));
+            name.setProjectTestersName(sysUserService.getNames(projectTestersId));
+            name.setProjectConfigerName(sysUserService.getNames(projectConfigerId));
+        }
+        return  Result.ok(name);
+    }
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReport.java b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReport.java
index 7c02232..7d11c60 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReport.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReport.java
@@ -1,5 +1,6 @@
 package com.zt.life.modules.qaAuditReport.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.zt.common.entity.BusiEntity;
@@ -60,4 +61,12 @@
 	@ApiModelProperty(value = "骞翠唤")
 	private String year;
 
+	@TableField(exist = false)
+	@ApiModelProperty(value = "椤圭洰鏍囪瘑")
+	private String softwareName;
+
+	@TableField(exist = false)
+	@ApiModelProperty(value = "椤圭洰鍚嶇О")
+	private String softwareIdentity;
+
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReportIncongruent.java b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReportIncongruent.java
index 3a0fe9b..6f31a0b 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReportIncongruent.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReportIncongruent.java
@@ -34,7 +34,7 @@
 	private String oddNum;
 
 	@ApiModelProperty(value = "涓嶇鍚堥」鎻忚堪")
-	private String describe;
+	private String notTrueDescribe;
 
 	@ApiModelProperty(value = "鎵�灞炲伐浣滀骇鍝�/杩囩▼")
 	private String workProcess;
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportService.java b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportService.java
index b617d53..adcec6a 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportService.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportService.java
@@ -81,7 +81,7 @@
     public List<QaAuditReport> page(QueryFilter queryFilter) {
         List<QaAuditReport> list = baseDao.getList(queryFilter.getQueryParams());
         if (list != null && list.size() > 0) {
-            workflowService.getRunFlow(list, "pzbgsh");
+            workflowService.getRunFlow(list, "qashbg");
             sysOssService.setListOsses(list, "qa_audit_report");
         }
         return list;
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskMeasureController.java b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskMeasureController.java
new file mode 100644
index 0000000..ab22dcc
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskMeasureController.java
@@ -0,0 +1,95 @@
+package com.zt.life.modules.riskTraceRecord.controller;
+
+
+import com.zt.common.annotation.LogOperation;
+import com.zt.common.constant.Constant;
+import com.zt.common.annotation.QueryParam;
+import com.zt.common.db.query.QueryFilter;
+import com.zt.common.servlet.Result;
+import com.zt.common.servlet.PageResult;
+import com.zt.common.validator.AssertUtils;
+import com.zt.common.validator.ValidatorUtils;
+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.riskTraceRecord.model.RiskMeasure;
+import com.zt.life.modules.riskTraceRecord.service.RiskMeasureService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+
+/**
+ * risk_measure
+ *
+ * @author zt generator 
+ * @since 1.0.0 2024-01-09
+ */
+@RestController
+@RequestMapping("/riskTraceRecord/RiskMeasure/")
+@Api(tags="risk_measure")
+public class RiskMeasureController {
+    @Autowired
+    private RiskMeasureService riskMeasureService;
+
+    @GetMapping("page")
+    @ApiOperation("鍒嗛〉")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = Constant.Q.PAGE, value = Constant.QV.PAGE, required = true, dataType = Constant.QT.INT),
+        @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT),
+        @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING),
+        @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING),
+    })
+    public PageResult<RiskMeasure> page(@ApiIgnore @QueryParam QueryFilter queryFilter){
+
+        return PageResult.ok(riskMeasureService.page(queryFilter));
+    }
+
+    @GetMapping("{id}")
+    @ApiOperation("淇℃伅")
+    public Result<RiskMeasure> get(@PathVariable("id") Long id){
+        RiskMeasure data = riskMeasureService.get(id);
+        return Result.ok(data);
+    }
+
+    @PostMapping
+    @ApiOperation("鏂板")
+    @LogOperation("鏂板")
+    public Result insert(@RequestBody RiskMeasure riskMeasure){
+        //鏁堥獙鏁版嵁
+        ValidatorUtils.validateEntity(riskMeasure, AddGroup.class, DefaultGroup.class);
+        riskMeasureService.insert(riskMeasure);
+
+        return Result.ok();
+    }
+
+    @PutMapping
+    @ApiOperation("淇敼")
+    @LogOperation("淇敼")
+    public Result update(@RequestBody RiskMeasure riskMeasure){
+        //鏁堥獙鏁版嵁
+        ValidatorUtils.validateEntity(riskMeasure, UpdateGroup.class, DefaultGroup.class);
+        riskMeasureService.update(riskMeasure);
+
+        return Result.ok();
+    }
+
+    @DeleteMapping
+    @ApiOperation("鍒犻櫎")
+    @LogOperation("鍒犻櫎")
+    public Result delete(@RequestBody Long[] ids){
+        //鏁堥獙鏁版嵁
+        AssertUtils.isArrayEmpty(ids, "id");
+        riskMeasureService.delete(ids);
+
+        return Result.ok();
+    }
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskTraceItemController.java b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskTraceItemController.java
new file mode 100644
index 0000000..19f664c
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskTraceItemController.java
@@ -0,0 +1,111 @@
+package com.zt.life.modules.riskTraceRecord.controller;
+
+
+import com.zt.common.annotation.LogOperation;
+import com.zt.common.constant.Constant;
+import com.zt.common.annotation.QueryParam;
+import com.zt.common.db.query.QueryFilter;
+import com.zt.common.servlet.Result;
+import com.zt.common.servlet.PageResult;
+import com.zt.common.validator.AssertUtils;
+import com.zt.common.validator.ValidatorUtils;
+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.qaAuditReport.dto.QaAuditReportDto;
+import com.zt.life.modules.riskTraceRecord.dto.RiskTraceDto;
+import com.zt.life.modules.riskTraceRecord.model.RiskTraceItem;
+import com.zt.life.modules.riskTraceRecord.service.RiskTraceItemService;
+import com.zt.life.sys.dto.OssDto;
+import com.zt.life.sys.service.SysOssConfigService;
+import com.zt.modules.coderule.service.SysCodeRuleService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * risk_trace_item
+ *
+ * @author zt generator
+ * @since 1.0.0 2024-01-09
+ */
+@RestController
+@RequestMapping("/riskTraceRecord/RiskTraceItem/")
+@Api(tags = "risk_trace_item")
+public class RiskTraceItemController {
+    @Autowired
+    private RiskTraceItemService riskTraceItemService;
+    @Autowired
+    private SysCodeRuleService sysCodeRuleService;
+
+    @Autowired
+    private SysOssConfigService sysOssConfigService;
+
+    @GetMapping("page")
+    @ApiOperation("鍒嗛〉")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = Constant.Q.PAGE, value = Constant.QV.PAGE, required = true, dataType = Constant.QT.INT),
+            @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT),
+            @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING),
+            @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING),
+            @ApiImplicitParam(name = "riskDesc", value = "椋庨櫓鎻忚堪", dataType = Constant.QT.STRING, format = "risk_desc^LK")})
+    public PageResult<RiskTraceItem> page(@ApiIgnore @QueryParam QueryFilter queryFilter) {
+
+        return PageResult.ok(riskTraceItemService.page(queryFilter));
+    }
+
+    @GetMapping("getDto")
+    @ApiOperation("淇℃伅")
+    public Result<RiskTraceDto> getDto(Long projectId, Long riskId) {
+        RiskTraceDto data = riskTraceItemService.getDto(projectId, riskId);
+        if (riskId != null) {
+            OssDto ossDto = sysOssConfigService.getOssByBusiType(riskId, "risk_trace_item");
+            if (ossDto != null) {
+                data.setFiles(ossDto);
+            }
+        }
+        return Result.ok(data);
+    }
+
+    @PostMapping
+    @ApiOperation("鏂板")
+    @LogOperation("鏂板")
+    public Result insert(@RequestBody RiskTraceDto riskTraceDto) {
+        //鏁堥獙鏁版嵁
+        ValidatorUtils.validateEntity(riskTraceDto, AddGroup.class, DefaultGroup.class);
+        Boolean result = riskTraceItemService.save(riskTraceDto);
+        return Result.ok();
+    }
+
+    @PutMapping
+    @ApiOperation("淇敼")
+    @LogOperation("淇敼")
+    public Result update(@RequestBody RiskTraceDto riskTraceDto) {
+        //鏁堥獙鏁版嵁
+        ValidatorUtils.validateEntity(riskTraceDto, AddGroup.class, DefaultGroup.class);
+        Boolean result = riskTraceItemService.save(riskTraceDto);
+        return Result.ok();
+    }
+
+    @DeleteMapping("deleteRisk")
+    @ApiOperation("鍒犻櫎")
+    @LogOperation("鍒犻櫎")
+    public Result delete(@RequestBody Long[] ids) {
+        //鏁堥獙鏁版嵁
+        AssertUtils.isArrayEmpty(ids, "id");
+        riskTraceItemService.delete(ids);
+
+        return Result.ok();
+    }
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskTraceRecordController.java b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskTraceRecordController.java
new file mode 100644
index 0000000..9554d63
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskTraceRecordController.java
@@ -0,0 +1,96 @@
+package com.zt.life.modules.riskTraceRecord.controller;
+
+
+import com.zt.common.annotation.LogOperation;
+import com.zt.common.constant.Constant;
+import com.zt.common.annotation.QueryParam;
+import com.zt.common.db.query.QueryFilter;
+import com.zt.common.servlet.Result;
+import com.zt.common.servlet.PageResult;
+import com.zt.common.validator.AssertUtils;
+import com.zt.common.validator.ValidatorUtils;
+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.riskTraceRecord.model.RiskTraceRecord;
+import com.zt.life.modules.riskTraceRecord.service.RiskTraceRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+
+/**
+ * risk_trace_record
+ *
+ * @author zt generator 
+ * @since 1.0.0 2024-01-09
+ */
+@RestController
+@RequestMapping("/riskTraceRecord/RiskTraceRecord/")
+@Api(tags="risk_trace_record")
+public class RiskTraceRecordController {
+    @Autowired
+    private RiskTraceRecordService riskTraceRecordService;
+
+    @GetMapping("page")
+    @ApiOperation("鍒嗛〉")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = Constant.Q.PAGE, value = Constant.QV.PAGE, required = true, dataType = Constant.QT.INT),
+        @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT),
+        @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING),
+        @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING),
+    })
+    public PageResult<RiskTraceRecord> page(@ApiIgnore @QueryParam QueryFilter queryFilter){
+
+        return PageResult.ok(riskTraceRecordService.page(queryFilter));
+    }
+
+    @GetMapping("{id}")
+    @ApiOperation("淇℃伅")
+    public Result<RiskTraceRecord> get(@PathVariable("id") Long id){
+        RiskTraceRecord data = riskTraceRecordService.get(id);
+
+        return Result.ok(data);
+    }
+
+    @PostMapping
+    @ApiOperation("鏂板")
+    @LogOperation("鏂板")
+    public Result insert(@RequestBody RiskTraceRecord riskTraceRecord){
+        //鏁堥獙鏁版嵁
+        ValidatorUtils.validateEntity(riskTraceRecord, AddGroup.class, DefaultGroup.class);
+        riskTraceRecordService.insert(riskTraceRecord);
+
+        return Result.ok();
+    }
+
+    @PutMapping
+    @ApiOperation("淇敼")
+    @LogOperation("淇敼")
+    public Result update(@RequestBody RiskTraceRecord riskTraceRecord){
+        //鏁堥獙鏁版嵁
+        ValidatorUtils.validateEntity(riskTraceRecord, UpdateGroup.class, DefaultGroup.class);
+        riskTraceRecordService.update(riskTraceRecord);
+
+        return Result.ok();
+    }
+
+    @DeleteMapping
+    @ApiOperation("鍒犻櫎")
+    @LogOperation("鍒犻櫎")
+    public Result delete(@RequestBody Long[] ids){
+        //鏁堥獙鏁版嵁
+        AssertUtils.isArrayEmpty(ids, "id");
+        riskTraceRecordService.delete(ids);
+
+        return Result.ok();
+    }
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskMeasureDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskMeasureDao.java
new file mode 100644
index 0000000..dc9e4be
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskMeasureDao.java
@@ -0,0 +1,24 @@
+package com.zt.life.modules.riskTraceRecord.dao;
+
+import com.zt.common.dao.BaseDao;
+import com.zt.life.modules.riskTraceRecord.model.RiskMeasure;
+import org.apache.ibatis.annotations.Mapper;
+
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * risk_measure
+ *
+ * @author zt generator 
+ * @since 1.0.0 2024-01-09
+ */
+@Mapper
+public interface RiskMeasureDao extends BaseDao<RiskMeasure> {
+
+    List<RiskMeasure> getList(Map<String, Object> params);
+
+    RiskMeasure getByRiskId(Map<String, Object> params);
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskTraceItemDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskTraceItemDao.java
new file mode 100644
index 0000000..2fbd2f1
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskTraceItemDao.java
@@ -0,0 +1,23 @@
+package com.zt.life.modules.riskTraceRecord.dao;
+
+import com.zt.common.dao.BaseDao;
+import com.zt.life.modules.riskTraceRecord.model.RiskTraceItem;
+import org.apache.ibatis.annotations.Mapper;
+
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * risk_trace_item
+ *
+ * @author zt generator 
+ * @since 1.0.0 2024-01-09
+ */
+@Mapper
+public interface RiskTraceItemDao extends BaseDao<RiskTraceItem> {
+
+    List<RiskTraceItem> getList(Map<String, Object> params);
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskTraceRecordDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskTraceRecordDao.java
new file mode 100644
index 0000000..11c556c
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskTraceRecordDao.java
@@ -0,0 +1,23 @@
+package com.zt.life.modules.riskTraceRecord.dao;
+
+import com.zt.common.dao.BaseDao;
+import com.zt.life.modules.riskTraceRecord.model.RiskTraceRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * risk_trace_record
+ *
+ * @author zt generator 
+ * @since 1.0.0 2024-01-09
+ */
+@Mapper
+public interface RiskTraceRecordDao extends BaseDao<RiskTraceRecord> {
+
+    List<RiskTraceRecord> getList(Map<String, Object> params);
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dto/RiskTraceDto.java b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dto/RiskTraceDto.java
new file mode 100644
index 0000000..df04c08
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dto/RiskTraceDto.java
@@ -0,0 +1,35 @@
+package com.zt.life.modules.riskTraceRecord.dto;
+
+import com.zt.life.modules.project.model.Project;
+import com.zt.life.modules.qaAuditReport.model.QaAuditReport;
+import com.zt.life.modules.qaAuditReport.model.QaAuditReportIncongruent;
+import com.zt.life.modules.riskTraceRecord.model.RiskMeasure;
+import com.zt.life.modules.riskTraceRecord.model.RiskTraceItem;
+import com.zt.life.modules.riskTraceRecord.model.RiskTraceRecord;
+import com.zt.life.sys.dto.OssDto;
+import com.zt.modules.workflow.dto.FlowInfoDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class RiskTraceDto {
+    private Long id;
+    private Long projectId;
+    private Long riskId;
+
+    @ApiModelProperty(value = "椋庨櫓鎺柦")
+    private RiskMeasure riskMeasure;
+    @ApiModelProperty(value = "娴嬭瘯椤圭洰鍩烘湰淇℃伅")
+    private Project project;
+
+    @ApiModelProperty(value = "闄勪欢")
+    private OssDto files;
+
+    @ApiModelProperty(value = "椋庨櫓璺熻釜椤�")
+    private List<RiskTraceItem> itemList = new ArrayList<>();
+    @ApiModelProperty(value = "涓嶇鍚堥」鍒楄〃")
+    private List<RiskTraceRecord> recordList = new ArrayList<>();
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskMeasure.java b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskMeasure.java
new file mode 100644
index 0000000..edbcb14
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskMeasure.java
@@ -0,0 +1,133 @@
+package com.zt.life.modules.riskTraceRecord.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zt.common.entity.BusiEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * risk_measure
+ *
+ * @author zt generator 
+ * @since 1.0.0 2024-01-09
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("risk_measure")
+public class RiskMeasure extends BusiEntity {
+	private static final long serialVersionUID = 1L;
+
+	@ApiModelProperty(value = "闇�姹傞闄╄窡韪汉鍛�")
+	private String requireRiskTrackers;
+
+	@ApiModelProperty(value = "闇�姹傞闄╄窡韪棩鏈�")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date requireRiskDate;
+
+	@ApiModelProperty(value = "璁捐椋庨櫓璺熻釜浜哄憳")
+	private String designRiskTrackers;
+
+	@ApiModelProperty(value = "璁捐椋庨櫓璺熻釜鏃ユ湡")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date designRiskDate;
+
+	@ApiModelProperty(value = "鎵ц椋庨櫓璺熻釜浜哄憳")
+	private String executeRiskTrackers;
+
+	@ApiModelProperty(value = "鎵ц椋庨櫓璺熻釜鏃ユ湡")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date executeRiskDate;
+
+	@ApiModelProperty(value = "鎬荤粨椋庨櫓璺熻釜浜哄憳")
+	private String summaryRiskTrackers;
+
+	@ApiModelProperty(value = "鎬荤粨椋庨櫓璺熻釜鏃ユ湡")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date summaryRiskDate;
+
+	@ApiModelProperty(value = "闇�姹傛帾鏂�")
+	private String requireMeasure;
+
+	@ApiModelProperty(value = "璁捐鎺柦")
+	private String designMeasure;
+
+	@ApiModelProperty(value = "鎵ц鎺柦")
+	private String executeMeasure;
+
+	@ApiModelProperty(value = "鎬荤粨鎺柦")
+	private String summaryMeasure;
+
+	@ApiModelProperty(value = "闇�姹傝褰曚汉鍛�")
+	private String requireRecorder;
+
+	@ApiModelProperty(value = "闇�姹傝褰曟棩鏈�")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date requireRecordDate;
+
+	@ApiModelProperty(value = "璁捐璁板綍浜哄憳")
+	private String designRecorder;
+
+	@ApiModelProperty(value = "璁捐璁板綍鏃堕棿")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date designRecordDate;
+
+	@ApiModelProperty(value = "鎵ц璁板綍浜哄憳")
+	private String executeRecorder;
+
+	@ApiModelProperty(value = "鎵ц璁板綍鏃ユ湡")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date executeRecordDate;
+
+	@ApiModelProperty(value = "鎬荤粨璁板綍浜哄憳")
+	private String summaryRecorder;
+
+	@ApiModelProperty(value = "鎬荤粨璁板綍鏃ユ湡")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date summaryRecordDate;
+
+	@ApiModelProperty(value = "闇�姹傝瘎浼�")
+	private String requireEvaluate;
+
+	@ApiModelProperty(value = "璁捐璇勪及")
+	private String designEvaluate;
+
+	@ApiModelProperty(value = "鎵ц璇勪及")
+	private String executeEvaluate;
+
+	@ApiModelProperty(value = "鎬荤粨璇勪及")
+	private String summaryEvaluate;
+
+	@ApiModelProperty(value = "闇�姹傞儴闂ㄨ礋璐d汉")
+	private String requireLeader;
+
+	@ApiModelProperty(value = "闇�姹傞儴闂ㄨ礋璐f棩鏈�")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date requireLeadDate;
+
+	@ApiModelProperty(value = "璁捐閮ㄩ棬璐熻矗浜�")
+	private String designLeader;
+
+	@ApiModelProperty(value = "璁捐閮ㄩ棬璐熻矗鏃ユ湡")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date designLeadDate;
+
+	@ApiModelProperty(value = "鎵ц閮ㄩ棬璐熻矗浜�")
+	private String executeLeader;
+
+	@ApiModelProperty(value = "鎵ц閮ㄩ棬璐熻矗鏃ユ湡")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date executeLeadDate;
+
+	@ApiModelProperty(value = "鎬荤粨閮ㄩ棬璐熻矗浜�")
+	private String summaryLeader;
+
+	@ApiModelProperty(value = "鎬荤粨閮ㄩ棬璐熻矗鏃ユ湡")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date summaryLeadDate;
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskTraceItem.java b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskTraceItem.java
new file mode 100644
index 0000000..cf47c08
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskTraceItem.java
@@ -0,0 +1,39 @@
+package com.zt.life.modules.riskTraceRecord.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zt.common.entity.BusiEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * risk_trace_item
+ *
+ * @author zt generator 
+ * @since 1.0.0 2024-01-09
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("risk_trace_item")
+public class RiskTraceItem extends BusiEntity {
+	private static final long serialVersionUID = 1L;
+
+	@ApiModelProperty(value = "椋庨櫓ID")
+	private Long riskId;
+
+	@ApiModelProperty(value = "鎺掑簭")
+	private Integer sort;
+
+	@ApiModelProperty(value = "椋庨櫓鍚嶇О")
+	private String riskName;
+
+	@ApiModelProperty(value = "椋庨櫓鎻忚堪")
+	private String riskDesc;
+
+	@ApiModelProperty(value = "椋庨櫓绛夌骇")
+	private String riskLevel;
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskTraceRecord.java b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskTraceRecord.java
new file mode 100644
index 0000000..5a6df65
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskTraceRecord.java
@@ -0,0 +1,39 @@
+package com.zt.life.modules.riskTraceRecord.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zt.common.entity.BusiEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * risk_trace_record
+ *
+ * @author zt generator 
+ * @since 1.0.0 2024-01-09
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("risk_trace_record")
+public class RiskTraceRecord extends BusiEntity {
+	private static final long serialVersionUID = 1L;
+
+	@ApiModelProperty(value = "椋庨櫓ID")
+	private Long riskId;
+
+	@ApiModelProperty(value = "娴嬭瘯闇�姹�")
+	private String testRequire;
+
+	@ApiModelProperty(value = "娴嬭瘯璁捐")
+	private String testDesign;
+
+	@ApiModelProperty(value = "娴嬭瘯鎵ц")
+	private String testExecute;
+
+	@ApiModelProperty(value = "娴嬭瘯鎬荤粨")
+	private String testSummary;
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskMeasureService.java b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskMeasureService.java
new file mode 100644
index 0000000..13459f1
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskMeasureService.java
@@ -0,0 +1,41 @@
+package com.zt.life.modules.riskTraceRecord.service;
+
+import com.zt.common.service.BaseService;
+import com.zt.life.modules.riskTraceRecord.dao.RiskMeasureDao;
+import com.zt.life.modules.riskTraceRecord.model.RiskMeasure;
+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;
+
+
+/**
+ * risk_measure
+ *
+ * @author zt generator 
+ * @since 1.0.0 2024-01-09
+ */
+@Service
+public class RiskMeasureService  extends BaseService<RiskMeasureDao, RiskMeasure> {
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param queryFilter
+     * @return
+     */
+    public List<RiskMeasure> page(QueryFilter queryFilter) {
+        return baseDao.getList(queryFilter.getQueryParams());
+    }
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param ids
+     */
+    public void delete(Long[] ids) {
+        super.deleteLogic(ids);
+    }
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskTraceItemService.java b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskTraceItemService.java
new file mode 100644
index 0000000..420a064
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskTraceItemService.java
@@ -0,0 +1,129 @@
+package com.zt.life.modules.riskTraceRecord.service;
+
+import com.zt.common.service.BaseService;
+import com.zt.common.utils.CommonUtils;
+import com.zt.life.modules.project.service.ProjectService;
+import com.zt.life.modules.qaAuditReport.dto.QaAuditReportDto;
+import com.zt.life.modules.qaAuditReport.model.QaAuditReport;
+import com.zt.life.modules.qaAuditReport.model.QaAuditReportIncongruent;
+import com.zt.life.modules.riskTraceRecord.dao.RiskTraceItemDao;
+import com.zt.life.modules.riskTraceRecord.dto.RiskTraceDto;
+import com.zt.life.modules.riskTraceRecord.model.RiskMeasure;
+import com.zt.life.modules.riskTraceRecord.model.RiskTraceItem;
+import com.zt.life.modules.riskTraceRecord.model.RiskTraceRecord;
+import com.zt.life.sys.service.SysOssConfigService;
+import com.zt.modules.workflow.dto.FlowInfoDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.zt.common.db.query.QueryFilter;
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * risk_trace_item
+ *
+ * @author zt generator 
+ * @since 1.0.0 2024-01-09
+ */
+@Service
+public class RiskTraceItemService  extends BaseService<RiskTraceItemDao, RiskTraceItem> {
+    @Autowired
+    private RiskMeasureService measureService;
+
+    @Autowired
+    private RiskTraceRecordService recordService;
+
+    @Autowired
+    private ProjectService projectService;
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param queryFilter
+     * @return
+     */
+    public List<RiskTraceItem> page(QueryFilter queryFilter) {
+        return baseDao.getList(queryFilter.getQueryParams());
+    }
+
+    private List<RiskTraceItem> getList(Long riskId) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("riskId",riskId);
+        return baseDao.getList(params);
+    }
+    /**
+     * 鍒犻櫎
+     *
+     * @param ids
+     */
+    public void delete(Long[] ids) {
+        super.deleteLogic(ids);
+    }
+
+    public RiskTraceDto getDto(Long projectId, Long riskId){
+        RiskTraceDto data = new RiskTraceDto();
+        if (riskId != null) {
+            data.setId(riskId);
+            RiskMeasure riskMeasure = measureService.get(riskId);
+            data.setRiskMeasure(riskMeasure);
+            if (riskMeasure != null && projectId == null) {
+                projectId = data.getProjectId();
+            }
+            List<RiskTraceItem> itemList = this.getList(riskId);
+            data.setItemList(itemList);
+            List<RiskTraceRecord> recordList = recordService.getList(riskId);
+            data.setRecordList(recordList);
+        } else {
+            RiskMeasure riskMeasure = new RiskMeasure();
+            data.setRiskMeasure(riskMeasure);
+            List<RiskTraceItem> itemList = this.getList(null);
+            data.setItemList(itemList);
+            List<RiskTraceRecord> recordList = new ArrayList<>();
+            data.setRecordList(recordList);
+        }
+        if (projectId != null) {
+            data.setProjectId(projectId);
+            data.setProject(projectService.get(projectId));
+        }
+        return data;
+    }
+
+
+    public Boolean save(RiskTraceDto riskTraceDto) {
+        Long riskId = riskTraceDto.getRiskMeasure().getId();
+        if (riskId != null)
+            measureService.update(riskTraceDto.getRiskMeasure());
+        else {
+            measureService.insert(riskTraceDto.getRiskMeasure());
+            riskId = riskTraceDto.getRiskMeasure().getId();
+        }
+
+        for (RiskTraceRecord record : riskTraceDto.getRecordList()) {
+            record.setRiskId(riskId);
+            if (record.getId() != null) {
+                RiskTraceRecord record2 = recordService.get(record.getId());
+                if (CommonUtils.isActureChangeData(record,record2)) {
+                    recordService.update(record2);
+                }
+            } else {
+                recordService.insert(record);
+            }
+        }
+        for (RiskTraceItem item : riskTraceDto.getItemList()) {
+            item.setRiskId(riskId);
+            if (item.getId() != null) {
+                RiskTraceItem item2 = this.get(item.getId());
+                if (CommonUtils.isActureChangeData(item,item2)) {
+                    baseDao.updateById(item2);
+                }
+            } else {
+                baseDao.insert(item);
+            }
+        }
+        return true;
+    }
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskTraceRecordService.java b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskTraceRecordService.java
new file mode 100644
index 0000000..46bdd79
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskTraceRecordService.java
@@ -0,0 +1,47 @@
+package com.zt.life.modules.riskTraceRecord.service;
+
+import com.zt.common.service.BaseService;
+import com.zt.life.modules.riskTraceRecord.dao.RiskTraceRecordDao;
+import com.zt.life.modules.riskTraceRecord.model.RiskTraceRecord;
+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;
+
+
+/**
+ * risk_trace_record
+ *
+ * @author zt generator 
+ * @since 1.0.0 2024-01-09
+ */
+@Service
+public class RiskTraceRecordService  extends BaseService<RiskTraceRecordDao, RiskTraceRecord> {
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param queryFilter
+     * @return
+     */
+    public List<RiskTraceRecord> page(QueryFilter queryFilter) {
+        return baseDao.getList(queryFilter.getQueryParams());
+    }
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param ids
+     */
+    public void delete(Long[] ids) {
+        super.deleteLogic(ids);
+    }
+
+    public List<RiskTraceRecord> getList(Long riskId) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("riskId",riskId);
+        return baseDao.getList(params);
+    }
+}
diff --git a/modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportDao.xml b/modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportDao.xml
index 85dc710..c8844c2 100644
--- a/modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportDao.xml
+++ b/modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportDao.xml
@@ -4,10 +4,11 @@
 <mapper namespace="com.zt.life.modules.qaAuditReport.dao.QaAuditReportDao">
 
     <select id="getList" resultType="com.zt.life.modules.qaAuditReport.model.QaAuditReport">
-        select a.*
+        select a.*,p.software_name,p.software_identity
         from qa_audit_report a
+            INNER JOIN  project p ON p.id = a.project_id
         <where>
-            a.is_delete = 0
+            a.is_delete = 0 and p.is_delete = 0
             <if test="whereSql!=null">
                 and ${whereSql}
             </if>
diff --git a/modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportIncongruentDao.xml b/modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportIncongruentDao.xml
index c8c70c6..832ea45 100644
--- a/modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportIncongruentDao.xml
+++ b/modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportIncongruentDao.xml
@@ -17,7 +17,8 @@
         </if>
     </select>
     <select id="createList" resultType="com.zt.life.modules.qaAuditReport.model.QaAuditReportIncongruent">
-        select b.code as oddNum,a.check_content as 'describe',b.page_code as discoveryPhase,b.processor as chargePerson,
+        SET @row_number = 0;
+        select (@row_number := @row_number + 1) AS no,b.code as oddNum,a.check_content as notTrueDescribe,b.page_code as discoveryPhase,b.processor as chargePerson,
                case when b.processor is null then '鏈鐞�'
                     else '宸查棴鐜�' end as status,
                a.id as src_id
@@ -26,7 +27,7 @@
         where b.project_id = ${projectId} and b.id =a.check_order_id
           and a.is_delete = 0 and b.is_delete = 0
           and a.check_result = 2
-          and b.page_code in ('','','','')
+          and b.page_code in ('contract','require','execute','summary')
         order by code,no
     </select>
 
diff --git a/modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskMeasureDao.xml b/modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskMeasureDao.xml
new file mode 100644
index 0000000..a0a4483
--- /dev/null
+++ b/modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskMeasureDao.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.zt.life.modules.riskTraceRecord.dao.RiskMeasureDao">
+
+    <select id="getList" resultType="com.zt.life.modules.riskTraceRecord.model.RiskMeasure">
+        select a.*
+        from risk_measure a
+        <where>
+            a.is_delete = 0
+            <if test="whereSql!=null">
+                and ${whereSql}
+            </if>
+        </where>
+        <if test="orderBySql!=null">
+            ORDER BY ${orderBySql}
+        </if>
+    </select>
+    <select id="getByRiskId" resultType="com.zt.life.modules.riskTraceRecord.model.RiskMeasure">
+        select a.*
+        from risk_measure a
+        <where>
+            a.is_delete = 0
+            <if test="riskId!=null">
+                and a.risk_id = ${riskId}
+            </if>
+        </where>
+        <if test="orderBySql!=null">
+            ORDER BY ${orderBySql}
+        </if>
+    </select>
+
+</mapper>
diff --git a/modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskTraceItemDao.xml b/modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskTraceItemDao.xml
new file mode 100644
index 0000000..527be6a
--- /dev/null
+++ b/modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskTraceItemDao.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.zt.life.modules.riskTraceRecord.dao.RiskTraceItemDao">
+
+    <select id="getList" resultType="com.zt.life.modules.riskTraceRecord.model.RiskTraceItem">
+        select a.*
+        from risk_trace_item a
+        <where>
+            a.is_delete = 0
+            <if test="riskId!=null">
+                and a.id = ${riskId}
+            </if>
+        </where>
+        <if test="orderBySql!=null">
+            ORDER BY ${orderBySql}
+        </if>
+    </select>
+
+</mapper>
diff --git a/modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskTraceRecordDao.xml b/modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskTraceRecordDao.xml
new file mode 100644
index 0000000..0168a9f
--- /dev/null
+++ b/modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskTraceRecordDao.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.zt.life.modules.riskTraceRecord.dao.RiskTraceRecordDao">
+
+    <select id="getList" resultType="com.zt.life.modules.riskTraceRecord.model.RiskTraceRecord">
+        select a.*
+        from risk_trace_record a
+        <where>
+            a.is_delete = 0
+            <if test="riskId!=null">
+                and a.risk_id = ${riskId}
+            </if>
+        </where>
+        <if test="orderBySql!=null">
+            ORDER BY ${orderBySql}
+        </if>
+    </select>
+
+</mapper>
diff --git a/web/packages/components/zt-dialog/src/zt-dialog.vue b/web/packages/components/zt-dialog/src/zt-dialog.vue
index d160bcb..1ad99f7 100644
--- a/web/packages/components/zt-dialog/src/zt-dialog.vue
+++ b/web/packages/components/zt-dialog/src/zt-dialog.vue
@@ -25,7 +25,7 @@
           <el-button type="warning" @click="formSubmit('zc')">鏆傚瓨</el-button>
           <el-button type="warning" @click="formSubmit('bl')">鍔炵悊</el-button>
         </template>
-        <el-button v-else-if="editAble && hasConfirm" type="primary" @click="formSubmit('qd')" v-preventReClick>{{
+        <el-button v-else-if="hasConfirm" type="primary" @click="formSubmit('qd')" v-preventReClick>{{
           $t('confirm') }}
         </el-button>
         <el-button v-else-if="editAble" type="warning" @click="formSubmit('bc')">淇濆瓨
diff --git a/web/packages/components/zt-select/src/zt-select.vue b/web/packages/components/zt-select/src/zt-select.vue
index f18d708..a0b7d61 100644
--- a/web/packages/components/zt-select/src/zt-select.vue
+++ b/web/packages/components/zt-select/src/zt-select.vue
@@ -55,7 +55,6 @@
     mounted() {
       // console.log(this.datas, 'this.datas in zt-select')
       if (this.datas !== undefined && this.datas.length > 0) {
-        // console.log('use datas')
         this.setDataList(this.datas)
       } else if (this.url !== undefined) { // 鎸囧畾浜唘rl
         // console.log('use url')
@@ -81,6 +80,7 @@
       setDataList(data) { // 璁剧疆鏍戠殑鍊�
         if (Array.isArray(data)) {
           this.dataList = data
+          console.log(this.dataList,"setDataList")
         } else {
           this.dataList = data.rows
         }
diff --git a/web/packages/components/zt-tree-dialog-selector/src/zt-tree-dialog-selector.vue b/web/packages/components/zt-tree-dialog-selector/src/zt-tree-dialog-selector.vue
index d2f28f3..c6e1e00 100644
--- a/web/packages/components/zt-tree-dialog-selector/src/zt-tree-dialog-selector.vue
+++ b/web/packages/components/zt-tree-dialog-selector/src/zt-tree-dialog-selector.vue
@@ -1,7 +1,7 @@
 <template>
   <div>
     <el-input v-model="text" @click.native="open()" suffix-icon="el-icon-arrow-down" slot="reference" :placeholder="placeholder"/>
-    <zt-dialog ref="dialog" :append-to-body="true" :title="title" @confirm="confirm">
+    <zt-dialog ref="dialog" :append-to-body="true" :title="title" :hasConfirm="true" @confirm="confirm">
       <el-row>
         <el-col class="tree" :span="14">
           <el-container>
diff --git a/web/packages/views/modules/sys/dict-type.vue b/web/packages/views/modules/sys/dict-type.vue
index f289078..ecb2ade 100644
--- a/web/packages/views/modules/sys/dict-type.vue
+++ b/web/packages/views/modules/sys/dict-type.vue
@@ -102,7 +102,7 @@
         token: Cookies.get('token'),
         progressId:this.progress.id
       })
-      this.apiURL = `http://localhost:8058/maintain/lifeManagement/importDataDictExcel?${params}`
+      this.apiURL = `http://localhost:8050/maintain/lifeManagement/importDataDictExcel?${params}`
     },
     DictImport() {
       this.$refs.dictListImport.$refs.dialog.init()
diff --git a/web/packages/views/modules/sys/role-user-deit.vue b/web/packages/views/modules/sys/role-user-deit.vue
index 3ded183..78763a4 100644
--- a/web/packages/views/modules/sys/role-user-deit.vue
+++ b/web/packages/views/modules/sys/role-user-deit.vue
@@ -1,7 +1,7 @@
 <template>
   <zt-dialog ref="dialog" @confirm="formSubmit"  append-to-body>
     <el-form :model="dataForm" ref="dataForm" :disabled="dataForm.disabled" label-width="120px">
-        <zt-form-item label="閫夋嫨鐢ㄦ埛" prop="menuIdList" rules="required">
+        <zt-form-item label="閫夋嫨鐢ㄦ埛" prop="menuIdList">
             <zt-user-selector v-model="dataForm.menuIdList" multiple/>
         </zt-form-item>
     </el-form>
diff --git a/web/packages/views/modules/sys/role-user.vue b/web/packages/views/modules/sys/role-user.vue
index 36d8417..c56015a 100644
--- a/web/packages/views/modules/sys/role-user.vue
+++ b/web/packages/views/modules/sys/role-user.vue
@@ -57,7 +57,7 @@
         if (res.success) {
           await this.$tip.success()
           this.$refs.examineObj.query()
-          this.$emit('refresh')
+          this.$refs.dialog.close()
         }
       }
     },
diff --git a/web/packages/views/modules/sys/role.vue b/web/packages/views/modules/sys/role.vue
index b970dbd..fbce26d 100644
--- a/web/packages/views/modules/sys/role.vue
+++ b/web/packages/views/modules/sys/role.vue
@@ -17,7 +17,8 @@
                   </el-form-item>
                   <el-form-item class="message-btn">
                     <zt-button type="query" @click="table.query()"/>
-                    <zt-button v-show="selectCompanyFlag" perm="sys:role" type="add" @click="table.editHandle()"/>
+                    <!--v-show="selectCompanyFlag"-->
+                    <zt-button perm="sys:role" type="add" @click="table.editHandle()"/>
                     <zt-button perm="sys:role:delete" type="delete" @click="table.deleteHandle()"/>
                   </el-form-item>
                 </el-form>
diff --git a/web/public/index.html b/web/public/index.html
index a98fc71..8057bbc 100644
--- a/web/public/index.html
+++ b/web/public/index.html
@@ -219,8 +219,8 @@
     window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] = false; // 鍔ㄦ��(鑿滃崟)璺敱鏄惁宸茬粡娣诲姞鐨勭姸鎬佹爣绀猴紙鐢ㄤ簬鍒ゆ柇鏄惁闇�瑕侀噸鏂版媺鍙栨暟鎹苟杩涜鍔ㄦ�佹坊鍔犳搷浣滐級
 
     // 鏈嶅姟鍦板潃
-    window.SITE_CONFIG['apiURL'] = 'http://' + location.hostname + ':8058/life-protection';
-    window.SITE_CONFIG['apiURL2'] = 'http://' + location.hostname + ':8058/life-protection';
+    window.SITE_CONFIG['apiURL'] = 'http://' + location.hostname + ':8050/life-protection';
+    window.SITE_CONFIG['apiURL2'] = 'http://' + location.hostname + ':8050/life-protection';
     //window.SITE_CONFIG['apiURL2'] = 'http://'+location.hostname+':8066';
 
     //window.SITE_CONFIG['apiURL'] = '<%= process.env.VUE_APP_API_URL %>';
diff --git a/web/src/views/modules/configItemWarehouse/ConfigItemWarehouse-AddOrUpdate.vue b/web/src/views/modules/configItemWarehouse/ConfigItemWarehouse-AddOrUpdate.vue
index 235983c..daa8cb2 100644
--- a/web/src/views/modules/configItemWarehouse/ConfigItemWarehouse-AddOrUpdate.vue
+++ b/web/src/views/modules/configItemWarehouse/ConfigItemWarehouse-AddOrUpdate.vue
@@ -300,10 +300,10 @@
     },
     created() {
       const roleName = localStorage.getItem('roleName')
-      if (roleName && roleName.includes('QA')) {
+      if (roleName && roleName.includes('瀹℃牳浜哄憳')) {
         this.showColumn = true;
       }
-      if (roleName && roleName.includes('娴嬭瘯鍛�')) {
+      if (roleName && roleName.includes('妫�娴嬩汉鍛�')) {
         this.showAddAndEdit = true;
       }
     },
diff --git a/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue b/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue
index 1f4403c..61b4afb 100644
--- a/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue
+++ b/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue
@@ -135,13 +135,13 @@
             </el-form-item>
           </div>
         </div>
-        <!--<div class="el-flexCirculationDialog el-border-bottom">
+        <div class="el-flexCirculationDialog el-border-bottom">
           <div style="width: 112px;text-align: center;font-weight: 600">
-            鏍″噯/妫�娴嬫帴鏀朵汉
+            妫�娴嬫帴鏀朵汉
           </div>
           <div class="el-border-left-right" style="width: 20%;height: 40px;">
             <el-form-item style="width: 100%;padding-left:20px;margin:0;">
-              {{dataForm.circulatOrder.itemAccept}}
+              {{dataForm.circulatOrder.detectAcceptor}}
             </el-form-item>
           </div>
           <div style="width: 52px;text-align: center;font-weight: 600">
@@ -149,7 +149,7 @@
           </div>
           <div class="el-border-left-right" style="width: 20%;height: 40px;">
             <el-form-item style="width: 100%;padding-left:20px;margin:0;">
-              {{dataForm.circulatOrder.acceptDate}}
+              {{dataForm.circulatOrder.detectAcceptDate| filterTime('YYYY骞碝M鏈圖D鏃�')}}
             </el-form-item>
           </div>
           <div style="width: 84px;text-align: center;font-weight: 600">
@@ -157,13 +157,13 @@
           </div>
           <div class="el-border-left " style="width: 35%;height: 40px;">
             <el-form-item label="鏄惁婊¤冻娴嬭瘯瑕佹眰" label-width="150px" style="padding-left:20px;margin-bottom:0">
-              <zt-dict v-model="dataForm.circulatOrder.cscs" :radio="true" dict="is_or_not"></zt-dict>
+              <zt-dict :disabled="stepMarker!=='wplz_jcjs'" v-model="dataForm.circulatOrder.detectAcceptSituation" :radio="true" dict="is_or_not"></zt-dict>
             </el-form-item>
           </div>
-        </div>-->
+        </div>
         <div class="el-flexCirculationDialog el-border-bottom">
           <div style="width: 112px;text-align: center;font-weight: 600">
-            鏍″噯妫�娴嬩汉
+            妫�娴嬩汉
           </div>
           <div class="el-border-left-right" style="width: 20%;height: 40px;">
             <el-form-item style="width: 100%;padding-left:20px;margin:0;">
@@ -188,13 +188,13 @@
             </el-form-item>
           </div>
         </div>
-       <!-- <div class="el-flexCirculationDialog el-border-bottom">
+        <div class="el-flexCirculationDialog el-border-bottom">
           <div style="width: 112px;text-align: center;font-weight: 600">
             鐗╁搧鍏ュ簱浜�
           </div>
           <div class="el-border-left-right" style="width: 20%;height: 40px;">
             <el-form-item style="width: 100%;padding-left:20px;margin:0;">
-              {{dataForm.circulatOrder.warehouse}}
+              {{dataForm.circulatOrder.depositor}}
             </el-form-item>
           </div>
           <div style="width: 52px;text-align: center;font-weight: 600">
@@ -202,18 +202,18 @@
           </div>
           <div class="el-border-left-right" style="width: 20%;height: 40px;">
             <el-form-item style="width: 100%;padding-left:20px;margin:0;">
-              {{dataForm.circulatOrder.warehouseDate}}
+              {{dataForm.circulatOrder.depositDate| filterTime('YYYY骞碝M鏈圖D鏃�')}}
             </el-form-item>
           </div>
           <div style="width: 84px;text-align: center;font-weight: 600">
             鎯呭喌璇存槑
           </div>
           <div class="el-border-left " style="width: 35%;height: 40px;">
-            <el-form-item label="鏄惁婊¤冻娴嬭瘯瑕佹眰" label-width="150px" style="padding-left:20px;margin-bottom:0">
-              <zt-dict v-model="dataForm.circulatOrder.warehouseSituation" :radio="true" dict="is_or_not"></zt-dict>
+            <el-form-item label="鏄惁宸插叆鏍峰搧搴�" label-width="150px" style="padding-left:20px;margin-bottom:0">
+              <zt-dict :disabled="stepMarker!=='wplz_wprk'" v-model="dataForm.circulatOrder.depositSituation" :radio="true" dict="is_or_not"></zt-dict>
             </el-form-item>
           </div>
-        </div>-->
+        </div>
         <div class="el-flexCirculationDialog el-border-bottom">
           <div style="width: 112px;text-align: center;font-weight: 600">
             鐗╁搧鍙戞斁浜�
@@ -228,7 +228,6 @@
           </div>
           <div class="el-border-left-right " style="width: 20%;height: 40px;">
             <el-form-item style="width: 100%;padding-left:20px;margin:0;">
-<!--              {{dataForm.circulatOrder.issueDate}}-->
               {{ dataForm.circulatOrder.issueDate | filterTime('YYYY骞碝M鏈圖D鏃�') }}
             </el-form-item>
           </div>
@@ -277,12 +276,15 @@
             itemOther: '',
             acceptSituation: '',
             acceptDate: '',
+            detectAcceptor:'',
+            detectAcceptDate:'',
+            detectAcceptSituation:'',
             calibratDetector: '',
             detectDate: '',
             detectSituation: '',
-            warehouse: '',
-            warehouseDate: '',
-            warehouseSituation: '',
+            depositor: '',
+            depositDate: '',
+            depositSituation: '',
             itemIssuer: '',
             issueDate: '',
             issueSituation: '',
diff --git a/web/src/views/modules/project/Project-AddOrUpdate.vue b/web/src/views/modules/project/Project-AddOrUpdate.vue
index 0376700..687ccc8 100644
--- a/web/src/views/modules/project/Project-AddOrUpdate.vue
+++ b/web/src/views/modules/project/Project-AddOrUpdate.vue
@@ -1,130 +1,142 @@
 <template>
   <zt-dialog ref="dialog" column="2" @confirm="formSubmit">
-<!--    <div class="fa-card-a fa-box-a" style="height: calc(100vh - 130px)">-->
-      <el-form ref="dataForm" style="padding: 0" :inline="true" :disabled="dataForm.disabled" :model="dataForm" label-width="120px"
-               class="projectAuto">
-        <div class="DManageForm">
-          <el-form-item label-width="80px" label="椤圭洰缂栧彿" prop="code" style="width: 99%;margin-bottom:-5px" readonly>
-            <span>{{dataForm.code}}</span>
-          </el-form-item>
-        </div>
-        <div style="border: 1px solid rgba(0,0,0,.2)">
-          <div class="el-flex el-border-bottom">
-            <div class="DWidth DAlign DHold">
-              濮旀墭鍗曚綅
-            </div>
-            <div class="DSTOld-1-Form">
-              <!-- 鍗曚綅鍚嶇О -->
-              <zt-form-item class="marginTopAndMarginBottom" label="鍗曚綅鍚嶇О" prop="entrustUnitName" style="width: 49%" rules="required">
-                <el-input v-model="dataForm.entrustUnitName" placeholder="璇疯緭鍏ュ崟浣嶅悕绉�"></el-input>
-              </zt-form-item>
-              <!-- 鑱旂郴浜� -->
-              <zt-form-item class="marginTopAndMarginBottom" label="鑱旂郴浜�" prop="entrustUnitContact" style="width: 49%" rules="required">
-                <el-input v-model="dataForm.entrustUnitContact" placeholder="璇疯緭鍏ヨ仈绯讳汉"></el-input>
-              </zt-form-item>
+    <!--    <div class="fa-card-a fa-box-a" style="height: calc(100vh - 130px)">-->
+    <el-form ref="dataForm" style="padding: 0" :inline="true" :disabled="dataForm.disabled" :model="dataForm"
+             label-width="120px"
+             class="projectAuto">
+      <div class="DManageForm">
+        <el-form-item label-width="80px" label="椤圭洰缂栧彿" prop="code" style="width: 99%;margin-bottom:-5px" readonly>
+          <span>{{dataForm.code}}</span>
+        </el-form-item>
+      </div>
+      <div style="border: 1px solid rgba(0,0,0,.2)">
+        <div class="el-flex el-border-bottom">
+          <div class="DWidth DAlign DHold">
+            濮旀墭鍗曚綅
+          </div>
+          <div class="DSTOld-1-Form">
+            <!-- 鍗曚綅鍚嶇О -->
+            <zt-form-item class="marginTopAndMarginBottom" label="鍗曚綅鍚嶇О" prop="entrustUnitName" style="width: 49%"
+                          rules="required">
+              <el-input v-model="dataForm.entrustUnitName" placeholder="璇疯緭鍏ュ崟浣嶅悕绉�"></el-input>
+            </zt-form-item>
+            <!-- 鑱旂郴浜� -->
+            <zt-form-item class="marginTopAndMarginBottom" label="鑱旂郴浜�" prop="entrustUnitContact" style="width: 49%"
+                          rules="required">
+              <el-input v-model="dataForm.entrustUnitContact" placeholder="璇疯緭鍏ヨ仈绯讳汉"></el-input>
+            </zt-form-item>
 
-              <!-- 璇︾粏鍦板潃 -->
-              <zt-form-item label="璇︾粏鍦板潃" prop="entrustUnitAddress" style="width: 49%" rules="required">
-                <el-input v-model="dataForm.entrustUnitAddress" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"></el-input>
-              </zt-form-item>
-              <!-- 鑱旂郴鏂瑰紡 -->
-              <zt-form-item label="鑱旂郴鏂瑰紡" prop="entrustUnitContWay" style="width: 49%" rules="required">
-                <el-input v-model="dataForm.entrustUnitContWay" placeholder="璇疯緭鍏ヨ仈绯绘柟寮�"></el-input>
-              </zt-form-item>
-            </div>
+            <!-- 璇︾粏鍦板潃 -->
+            <zt-form-item label="璇︾粏鍦板潃" prop="entrustUnitAddress" style="width: 49%" rules="required">
+              <el-input v-model="dataForm.entrustUnitAddress" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"></el-input>
+            </zt-form-item>
+            <!-- 鑱旂郴鏂瑰紡 -->
+            <zt-form-item label="鑱旂郴鏂瑰紡" prop="entrustUnitContWay" style="width: 49%" rules="required">
+              <el-input v-model="dataForm.entrustUnitContWay" placeholder="璇疯緭鍏ヨ仈绯绘柟寮�"></el-input>
+            </zt-form-item>
           </div>
-          <div class="el-flex el-border-bottom">
-            <div class="DWidth DAlign DHold">
-              寮�鍙戝崟浣�
-            </div>
-            <div class="DSTOld-1-Form">
-              <!-- 鍗曚綅鍚嶇О -->
-              <zt-form-item class="marginTopAndMarginBottom" label="鍗曚綅鍚嶇О" prop="developUnitName" style="width: 49%" rules="required">
-                <el-input v-model="dataForm.developUnitName" placeholder="璇疯緭鍏ュ崟浣嶅悕绉�"></el-input>
-              </zt-form-item>
-              <!-- 鑱旂郴浜� -->
-              <zt-form-item class="marginTopAndMarginBottom" label="鑱旂郴浜�" prop="developUnitContact" style="width: 49%" rules="required">
-                <el-input v-model="dataForm.developUnitContact" placeholder="璇疯緭鍏ヨ仈绯讳汉"></el-input>
-              </zt-form-item>
-              <!-- 璇︾粏鍦板潃 -->
-              <zt-form-item label="璇︾粏鍦板潃" prop="developUnitAddress" style="width: 49%" rules="required">
-                <el-input v-model="dataForm.developUnitAddress" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"></el-input>
-              </zt-form-item>
-              <!-- 鑱旂郴鏂瑰紡 -->
-              <zt-form-item label="鑱旂郴鏂瑰紡" prop="developUnitContWay" style="width: 49%" rules="required">
-                <el-input v-model="dataForm.developUnitContWay" placeholder="璇疯緭鍏ヨ仈绯绘柟寮�"></el-input>
-              </zt-form-item>
-            </div>
+        </div>
+        <div class="el-flex el-border-bottom">
+          <div class="DWidth DAlign DHold">
+            寮�鍙戝崟浣�
           </div>
-          <div class="el-flex el-border-bottom">
-            <div class="DWidth-Unt DAlign DHold">
-              琚祴浠朵俊鎭�
-            </div>
-            <div class="DSTOld-1-Form">
-              <!-- 鍗曚綅鍚嶇О -->
-              <zt-form-item class="marginTopAndMarginBottom" label="杞欢鍚嶇О" prop="softwareName" style="width: 49%" rules="required">
-                <el-input v-model="dataForm.softwareName" placeholder="璇疯緭鍏ヨ蒋浠跺悕绉�"></el-input>
-              </zt-form-item>
-              <!-- 鑱旂郴浜� -->
-              <zt-form-item class="marginTopAndMarginBottom" label="杞欢鏍囪瘑" prop="softwareIdentity" style="width: 49%" rules="required">
-                <el-input v-model="dataForm.softwareIdentity" placeholder="璇疯緭鍏ヨ蒋浠舵爣璇�"></el-input>
-              </zt-form-item>
-              <!-- 璇︾粏鍦板潃 -->
-              <zt-form-item label="瀵嗙骇" prop="secretClass" style="width: 49%" rules="required">
-                <zt-dict v-model="dataForm.secretClass" dict="secret_class"></zt-dict>
-              </zt-form-item>
-              <!--          <zt-form-item label="淇濆瘑绾у埆" prop="secretClass"  style="width: 25%">-->
-              <!--            <zt-dict v-model="dataForm.secretClass" dict="secret_class" placeholder="淇濆瘑绾у埆" style="width:200px"></zt-dict>-->
-              <!--          </zt-form-item>-->
-              <!-- 鑱旂郴鏂瑰紡 -->
-              <zt-form-item label="鍏抽敭绛夌骇" prop="criticalLevel" style="width: 49%" rules="required">
-                <zt-dict v-model="dataForm.criticalLevel" dict="critical_level"></zt-dict>
-              </zt-form-item>
-              <div class="el-flex" style="height: 40px;border-top:1px solid rgba(0,0,0,.2)">
-                <div class="DWidth DAlign DHold">
-                  杞欢绫诲瀷
-                </div>
-                <div style="width: calc(100% - 120px);">
-                  <zt-dict v-model="dataForm.softwareType" :radio="true"  dict="software_type" clearable></zt-dict>
-                </div>
+          <div class="DSTOld-1-Form">
+            <!-- 鍗曚綅鍚嶇О -->
+            <zt-form-item class="marginTopAndMarginBottom" label="鍗曚綅鍚嶇О" prop="developUnitName" style="width: 49%"
+                          rules="required">
+              <el-input v-model="dataForm.developUnitName" placeholder="璇疯緭鍏ュ崟浣嶅悕绉�"></el-input>
+            </zt-form-item>
+            <!-- 鑱旂郴浜� -->
+            <zt-form-item class="marginTopAndMarginBottom" label="鑱旂郴浜�" prop="developUnitContact" style="width: 49%"
+                          rules="required">
+              <el-input v-model="dataForm.developUnitContact" placeholder="璇疯緭鍏ヨ仈绯讳汉"></el-input>
+            </zt-form-item>
+            <!-- 璇︾粏鍦板潃 -->
+            <zt-form-item label="璇︾粏鍦板潃" prop="developUnitAddress" style="width: 49%" rules="required">
+              <el-input v-model="dataForm.developUnitAddress" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"></el-input>
+            </zt-form-item>
+            <!-- 鑱旂郴鏂瑰紡 -->
+            <zt-form-item label="鑱旂郴鏂瑰紡" prop="developUnitContWay" style="width: 49%" rules="required">
+              <el-input v-model="dataForm.developUnitContWay" placeholder="璇疯緭鍏ヨ仈绯绘柟寮�"></el-input>
+            </zt-form-item>
+          </div>
+        </div>
+        <div class="el-flex el-border-bottom">
+          <div class="DWidth-Unt DAlign DHold">
+            琚祴浠朵俊鎭�
+          </div>
+          <div class="DSTOld-1-Form">
+            <!-- 鍗曚綅鍚嶇О -->
+            <zt-form-item class="marginTopAndMarginBottom" label="杞欢鍚嶇О" prop="softwareName" style="width: 49%"
+                          rules="required">
+              <el-input v-model="dataForm.softwareName" placeholder="璇疯緭鍏ヨ蒋浠跺悕绉�"></el-input>
+            </zt-form-item>
+            <!-- 鑱旂郴浜� -->
+            <zt-form-item class="marginTopAndMarginBottom" label="杞欢鏍囪瘑" prop="softwareIdentity" style="width: 49%"
+                          rules="required">
+              <el-input v-model="dataForm.softwareIdentity" placeholder="璇疯緭鍏ヨ蒋浠舵爣璇�"></el-input>
+            </zt-form-item>
+            <!-- 璇︾粏鍦板潃 -->
+            <zt-form-item label="瀵嗙骇" prop="secretClass" style="width: 49%" rules="required">
+              <zt-dict v-model="dataForm.secretClass" dict="secret_class"></zt-dict>
+            </zt-form-item>
+            <!--          <zt-form-item label="淇濆瘑绾у埆" prop="secretClass"  style="width: 25%">-->
+            <!--            <zt-dict v-model="dataForm.secretClass" dict="secret_class" placeholder="淇濆瘑绾у埆" style="width:200px"></zt-dict>-->
+            <!--          </zt-form-item>-->
+            <!-- 鑱旂郴鏂瑰紡 -->
+            <zt-form-item label="鍏抽敭绛夌骇" prop="criticalLevel" style="width: 49%" rules="required">
+              <zt-dict v-model="dataForm.criticalLevel" dict="critical_level"></zt-dict>
+            </zt-form-item>
+            <div class="el-flex" style="height: 40px;border-top:1px solid rgba(0,0,0,.2)">
+              <div class="DWidth DAlign DHold">
+                杞欢绫诲瀷
+              </div>
+              <div style="width: calc(100% - 120px);">
+                <zt-dict v-model="dataForm.softwareType" :radio="true" dict="software_type" clearable></zt-dict>
               </div>
             </div>
           </div>
-          <div class="el-flex ">
-            <div class="DWidth DAlign DHold">
-              椤圭洰璐d换浜�
-            </div>
-            <div class="DSTOld-1-Form">
-              <!-- 椤圭洰璐熻矗浜� -->
-              <zt-form-item class="marginTopAndMarginBottom" label-width="120px" label="椤圭洰璐熻矗浜�" prop="projectLeader" style="width: 48%" rules="required">
-                <zt-select v-model="dataForm.projectLeader" url="/sys/userEx/getUsersList" placeholder="椤圭洰璐熻矗浜�"/>
-<!--                <el-input v-model="dataForm.projectLeader" placeholder="璇疯緭鍏ラ」鐩礋璐d汉"></el-input>-->
-<!--                <el-select  v-model="dataForm.projectLeader"   placeholder="椤圭洰璐熻矗浜�" style="width: 100%">-->
-<!--                  <el-option v-for="data in dataList"></el-option>-->
-<!--                </el-select>-->
-<!--                <el-select v-model="dataForm.projectLeader" clearable placeholder="椤圭洰璐熻矗浜�">-->
-<!--                  <el-option v-for="item in dataList" :key="item.value" :label="item.label"-->
-<!--                             :value="item.value"/>-->
-<!--                </el-select>-->
-              </zt-form-item>
-              <!-- 椤圭洰娴嬭瘯浜哄憳 -->
-              <zt-form-item class="marginTopAndMarginBottom" label-width="120px" label="椤圭洰娴嬭瘯浜哄憳" prop="projectTesters" style="width: 48%" rules="required">
-<!--                <el-input v-model="dataForm.projectTesters" placeholder="璇疯緭鍏ラ」鐩祴璇曚汉鍛�"></el-input>-->
-                <zt-select v-model="dataForm.projectTesters" url="/sys/userEx/getUsersList" :multiple="true" :clearable="true" placeholder="椤圭洰娴嬭瘯浜哄憳"/>
-              </zt-form-item>
-              <!-- 椤圭洰瀹℃牳浜� -->
-              <zt-form-item label-width="120px" label="椤圭洰瀹℃牳浜�" prop="projectReviewer" style="width: 48%" rules="required">
-<!--                <el-input v-model="dataForm.projectReviewer" placeholder="璇疯緭鍏ラ」鐩鏍镐汉"></el-input>-->
-                <zt-select v-model="dataForm.projectReviewer" url="/sys/userEx/getUsersList" :multiple="true" :clearable="true" placeholder="椤圭洰瀹℃牳浜�"/>
-              </zt-form-item>
-              <!-- 鏄惁绛剧讲鍚堝悓 -->
-              <zt-form-item label-width="120px" label="鏄惁绛剧讲鍚堝悓" prop="isContract" style="width: 48%" rules="required">
-                <zt-dict v-model="dataForm.isContract" dict="is_or_not"></zt-dict>
-              </zt-form-item>
-            </div>
+        </div>
+        <div class="el-flex ">
+          <div class="DWidth DAlign DHold">
+            椤圭洰璐d换浜�
+          </div>
+          <div class="DSTOld-1-Form">
+            <zt-form-item class="marginTopAndMarginBottom" label-width="120px" label="鎵�灞為儴闂�" prop="bizDeptId"
+                          style="width: 48%">
+              <zt-select v-model="dataForm.bizDeptId" :datas="bizDeptList" onchange="getUserList()" placeholder="鎵�灞為儴闂�"/>
+            </zt-form-item>
+            <!-- 鏄惁绛剧讲鍚堝悓 -->
+            <zt-form-item label-width="120px" label="鏄惁绛剧讲鍚堝悓" prop="isContract" style="width: 48%">
+              <zt-dict v-model="dataForm.isContract" dict="is_or_not"></zt-dict>
+            </zt-form-item>
+            <!-- 椤圭洰璐熻矗浜� -->
+            <zt-form-item class="marginTopAndMarginBottom" label-width="120px" label="椤圭洰璐熻矗浜�" prop="projectLeader"
+                          style="width: 48%">
+              <zt-select v-model="dataForm.projectLeader" :datas="projectLeaderList" placeholder="椤圭洰璐熻矗浜�"/>
+            </zt-form-item>
+            <!-- 椤圭洰娴嬭瘯浜哄憳 -->
+            <zt-form-item class="marginTopAndMarginBottom" label-width="120px" label="椤圭洰娴嬭瘯浜哄憳" prop="projectTesters"
+                          style="width: 48%">
+              <!--                <el-input v-model="dataForm.projectTesters" placeholder="璇疯緭鍏ラ」鐩祴璇曚汉鍛�"></el-input>-->
+              <zt-select v-model="dataForm.projectTesters" :datas="projectTestersList" :multiple="true"
+                         :clearable="true" placeholder="椤圭洰娴嬭瘯浜哄憳"/>
+            </zt-form-item>
+            <!-- 椤圭洰瀹℃牳浜� -->
+            <zt-form-item label-width="120px" label="椤圭洰瀹℃牳浜�" prop="projectReviewer" style="width: 48%">
+              <!--                <el-input v-model="dataForm.projectReviewer" placeholder="璇疯緭鍏ラ」鐩鏍镐汉"></el-input>-->
+              <zt-select v-model="dataForm.projectReviewer" :datas="projectReviewerList" :multiple="true"
+                         :clearable="true" placeholder="椤圭洰瀹℃牳浜�"/>
+            </zt-form-item>
+            <zt-form-item label-width="120px" label="椤圭洰閰嶇疆浜�" prop="projectConfiger" style="width: 48%">
+              <!--                <el-input v-model="dataForm.projectReviewer" placeholder="璇疯緭鍏ラ」鐩鏍镐汉"></el-input>-->
+              <zt-select v-model="dataForm.projectConfiger" :datas="projectConfigerList" :multiple="true"
+                         :clearable="true" placeholder="椤圭洰閰嶇疆浜�"/>
+            </zt-form-item>
           </div>
         </div>
-      </el-form>
+      </div>
+    </el-form>
   </zt-dialog>
 </template>
 
@@ -152,53 +164,92 @@
           projectLeader: '',
           projectTesters: '',
           projectReviewer: '',
+          projectConfiger: '',
+          bizDeptId: '',
           isContract: '',
-        }
+        },
+        projectLeaderList: [],
+        projectTestersList: [],
+        projectReviewerList: [],
+        projectConfigerList: [],
+        bizDeptList: [],
+        bizDeptIdList: [],
       }
     },
+    watch: {
+      /*      bizDeptId(val, oldval) {
+              alert(1)
+              this.getUserList()
+            },*/
+    },
     methods: {
+      init() {
+        this.getInfo()
+        this.getbizDept()
+      },
       // 鑾峰彇淇℃伅
       async getInfo() {
-        let res = await this.$http.get(`/project/Project//${this.dataForm.id}`)
+        console.log(this.dataForm.id, "async getInfo()")
+        if (this.dataForm.id == undefined) {
+          return
+        }
+        let res = await this.$http.get(`/project/Project/${this.dataForm.id}`)
         if (res.success) {
           this.dataForm = {
             ...this.dataForm,
             ...res.data
           }
+          await this.getUserList()
         }
-        if(this.dataForm && this.dataForm.projectTesters){
-            this.dataForm.projectTesters=this.dataForm.projectTesters.split(',')
-            console.log(this.dataForm.projectTesters)
-          }
-          if(this.dataForm && this.dataForm.projectReviewer){
-            this.dataForm.projectReviewer=this.dataForm.projectReviewer.split(',')
-            console.log(this.dataForm.projectReviewer)
-          }
-        console.log(this.dataForm,'this.dataForm')
+      },
+      async getUserList() {
+        let res = await this.$http.get(`/project/Project/getUsersLists?deptId=${this.dataForm.bizDeptId}`)
+        if (res.success) {
+          this.projectLeaderList = res.data.zrr
+          this.projectTestersList = res.data.csry
+          this.projectReviewerList = res.data.shry
+          this.projectConfigerList = res.data.pzry
+        }
+        console.log(this.dataForm, 'this.dataForm')
+      },
+      async getbizDept() {
+        let res = await this.$http.get(`/sys/dept/getList`)
+        if (res.success) {
+          this.bizDeptList = res.data;
+        }
+        console.log(this.bizDeptList, "getbizDept")
       },
       // 琛ㄥ崟鎻愪氦
       async formSubmit() {
-        if(this.dataForm && this.dataForm.projectTesters){
-          this.dataForm.projectTesters=this.dataForm.projectTesters.join(',')
+        if (this.dataForm && this.dataForm.projectTesters instanceof Array) {
+          this.dataForm.projectTesters = this.dataForm.projectTesters.join(',')
           console.log(this.dataForm.projectTesters)
         }
-        if(this.dataForm && this.dataForm.projectReviewer){
-          this.dataForm.projectReviewer=this.dataForm.projectReviewer.join(',')
+        if (this.dataForm && this.dataForm.projectReviewer instanceof Array) {
+          this.dataForm.projectReviewer = this.dataForm.projectReviewer.join(',')
           console.log(this.dataForm.projectReviewer)
         }
-        let res = await this.$http[!this.dataForm.id ? 'post' : 'put']('/project/Project//', this.dataForm)
+        if (this.dataForm && this.dataForm.projectConfiger instanceof Array) {
+          this.dataForm.projectConfiger = this.dataForm.projectConfiger.join(',')
+          console.log(this.dataForm.projectConfiger)
+        }
+        let res = await this.$http[!this.dataForm.id ? 'post' : 'put']('/project/Project/', this.dataForm)
         if (res.success) {
           await this.$tip.success()
           this.$refs.dialog.close()
           this.$emit('refreshDataList')
-        }else {
-          if(this.dataForm && this.dataForm.projectTesters){
-            this.dataForm.projectTesters=this.dataForm.projectTesters.split(',')
+        } else {
+          if (this.dataForm && this.dataForm.projectTesters instanceof Array) {
+            this.dataForm.projectTesters = this.dataForm.projectTesters.split(',')
             console.log(this.dataForm.projectTesters)
           }
-          if(this.dataForm && this.dataForm.projectReviewer){
-            this.dataForm.projectReviewer=this.dataForm.projectReviewer.split(',')
+          if (this.dataForm && this.dataForm.projectReviewer instanceof Array) {
+            this.dataForm.projectReviewer = this.dataForm.projectReviewer.split(',')
             console.log(this.dataForm.projectReviewer)
+          }
+          if (this.dataForm && this.dataForm.projectConfiger instanceof Array) {
+            this.dataForm.projectConfiger = this.dataForm.projectConfiger.split(',')
+            console.log(this.dataForm.projectConfiger)
           }
         }
       }
@@ -206,77 +257,86 @@
   }
 </script>
 <style>
-.projectAuto {
-  width: 70%;
-}
+  .projectAuto {
+    width: 70%;
+  }
 
-.el-flex {
-  display: flex;
-  align-items: center;
-}
+  .el-flex {
+    display: flex;
+    align-items: center;
+  }
 
-.DWidth {
-  width: 100px;
-}
+  .DWidth {
+    width: 100px;
+  }
 
-.DWidth-Unt {
-  width: 100px;
-}
+  .DWidth-Unt {
+    width: 100px;
+  }
 
-.DAlign {
-  text-align: center;
-}
+  .DAlign {
+    text-align: center;
+  }
 
-.DSTOld-1-Form,
-.DSTOld-1-Form{
-  border-left: 1px solid rgba(0,0,0,.2);
-  width: 100%;
-}
-.el-border-left{
-  border-left: 1px solid rgba(0,0,0,.2);
-}
-.DOldForm {
-  width: 100%;
-}
-.el-border-top-and-bottom{
-  border-top: 1px solid rgba(0,0,0,.2);
-  border-bottom: 1px solid rgba(0,0,0,.2);
-}
-.DSTOld-1-Form {
-  border-left: 1px solid rgba(0,0,0,.2);
-  width: 100%;
-}
+  .DSTOld-1-Form,
+  .DSTOld-1-Form {
+    border-left: 1px solid rgba(0, 0, 0, .2);
+    width: 100%;
+  }
 
-.DSTOld-1-Form > .el-form-item>.el-form-item__content {
-  width: calc(100% - 120px);
-}
-.DManageForm > .el-form-item>.el-form-item__content {
-  width: calc(100% - 120px);
-}
-.el-border-bottom {
-  border-bottom: 1px solid rgba(0,0,0,.2);
-}
+  .el-border-left {
+    border-left: 1px solid rgba(0, 0, 0, .2);
+  }
 
-.zt .el-table.el-software th {
-  background: transparent;
-}
+  .DOldForm {
+    width: 100%;
+  }
 
-.zt .el-table.el-software th > .cell {
-  font-weight: 500;
-}
-.DHold{
-  font-weight: 600;
-}
-.zt .el-table.el-software{
-  font-size: 14px;
-}
-.projectAuto .marginTopAndMarginBottom {
-  margin-top: 10px !important;
-  margin-bottom: 0 !important;
-}
+  .el-border-top-and-bottom {
+    border-top: 1px solid rgba(0, 0, 0, .2);
+    border-bottom: 1px solid rgba(0, 0, 0, .2);
+  }
 
-.projectAuto .marginTopAndMarginBottom2 {
-  margin-top: -10px !important;
-  margin-bottom: 10px !important;
-}
+  .DSTOld-1-Form {
+    border-left: 1px solid rgba(0, 0, 0, .2);
+    width: 100%;
+  }
+
+  .DSTOld-1-Form > .el-form-item > .el-form-item__content {
+    width: calc(100% - 120px);
+  }
+
+  .DManageForm > .el-form-item > .el-form-item__content {
+    width: calc(100% - 120px);
+  }
+
+  .el-border-bottom {
+    border-bottom: 1px solid rgba(0, 0, 0, .2);
+  }
+
+  .zt .el-table.el-software th {
+    background: transparent;
+  }
+
+  .zt .el-table.el-software th > .cell {
+    font-weight: 500;
+  }
+
+  .DHold {
+    font-weight: 600;
+  }
+
+  .zt .el-table.el-software {
+    font-size: 14px;
+  }
+
+  .projectAuto .marginTopAndMarginBottom {
+    margin-top: 10px !important;
+    margin-bottom: 0 !important;
+  }
+
+  .projectAuto .marginTopAndMarginBottom2 {
+    margin-top: -10px !important;
+    margin-bottom: 10px !important;
+  }
 </style>
diff --git a/web/src/views/modules/project/Project.vue b/web/src/views/modules/project/Project.vue
index 3ffdb1b..2226682 100644
--- a/web/src/views/modules/project/Project.vue
+++ b/web/src/views/modules/project/Project.vue
@@ -1,76 +1,78 @@
 <template>
-    <div class="fa-card-a">
-      <zt-table-wraper query-url="/project/Project/page" delete-url="/project/Project/deleteProject" v-slot="{ table }">
-        <el-form :inline="true" class="form-input-width-1"  :model="dataForm" @keyup.enter.native="table.query()">
-          <el-form-item>
-            <el-input v-model="dataForm.softwareName" placeholder="璇疯緭鍏ヨ蒋浠跺悕绉�" clearable></el-input>
+  <div class="fa-card-a">
+    <zt-table-wraper query-url="/project/Project/page" delete-url="/project/Project/deleteProject" v-slot="{ table }">
+      <el-form :inline="true" class="form-input-width-1" :model="dataForm" @keyup.enter.native="table.query()">
+        <el-form-item>
+          <el-input v-model="dataForm.softwareName" placeholder="璇疯緭鍏ヨ蒋浠跺悕绉�" clearable></el-input>
 
-          </el-form-item>
-          <el-form-item >
-            <zt-dict v-model="dataForm.secretClass" placeholder="瀵嗙骇" dict="secret_class" clearable></zt-dict>
+        </el-form-item>
+        <el-form-item>
+          <zt-dict v-model="dataForm.secretClass" placeholder="瀵嗙骇" dict="secret_class" clearable></zt-dict>
 
-          </el-form-item>
-          <el-form-item >
-            <zt-dict v-model="dataForm.criticalLevel" placeholder="鍏抽敭绛夌骇" dict="critical_level" clearable></zt-dict>
+        </el-form-item>
+        <el-form-item>
+          <zt-dict v-model="dataForm.criticalLevel" placeholder="鍏抽敭绛夌骇" dict="critical_level" clearable></zt-dict>
 
-          </el-form-item>
-          <el-form-item >
-            <zt-dict v-model="dataForm.softwareType" placeholder="杞欢绫诲瀷" dict="software_type" clearable></zt-dict>
+        </el-form-item>
+        <el-form-item>
+          <zt-dict v-model="dataForm.softwareType" placeholder="杞欢绫诲瀷" dict="software_type" clearable></zt-dict>
 
-          </el-form-item>
-          <el-form-item >
-            <zt-dict v-model="dataForm.isContract" placeholder="鏄惁绛剧讲鍚堝悓" dict="is_or_not" clearable></zt-dict>
+        </el-form-item>
+        <el-form-item>
+          <zt-dict v-model="dataForm.isContract" placeholder="鏄惁绛剧讲鍚堝悓" dict="is_or_not" clearable></zt-dict>
 
-          </el-form-item>
-          <el-form-item>
-            <zt-button type="query" @click="table.query()"/>
-            <zt-button type="add" perm="project:add" @click="table.editHandle()"/>
-            <zt-button type="delete" perm="project:delete" @click="table.deleteHandle()"/>
-          </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">
-          <el-table-column type="selection" align="center" width="40"/>
-          <el-table-column prop="softwareName" label="杞欢鍚嶇О"/>
-          <el-table-column prop="code" label="椤圭洰缂栧彿"/>
-          <el-table-column prop="softwareIdentity" label="椤圭洰鏍囪瘑"/>
-          <el-table-column prop="entrustUnitName" label="濮旀墭鍗曚綅鍚嶇О"/>
-          <el-table-column prop="developUnitName" label="寮�鍙戝崟浣嶅悕绉�"/>
-          <zt-table-column-dict prop="secretClass" label="瀵嗙骇" dict="secret_class"/>
-          <zt-table-column-dict prop="criticalLevel" label="鍏抽敭绛夌骇" dict="critical_level"/>
-         <!-- <zt-table-column-dict prop="testLevel" label="娴嬭瘯绾у埆" dict="test_level"/>-->
-          <zt-table-column-dict prop="softwareType" label="杞欢绫诲瀷" dict="software_type"/>
-          <el-table-column prop="projectLeader" label="椤圭洰璐熻矗浜�"/>
-          <zt-table-column-dict prop="isContract" label="鏄惁绛剧讲鍚堝悓" dict="is_or_not"/>
-          <zt-table-column-handle :table="table" edit-perm="project:update" delete-perm="project::delete"/>
-        </el-table>
-        <!-- 寮圭獥, 鏂板 / 淇敼 -->
-        <add-or-update @refreshDataList="table.query"/>
-      </zt-table-wraper>
-    </div>
+        </el-form-item>
+        <el-form-item>
+          <zt-button type="query" @click="table.query()"/>
+          <zt-button type="add" perm="project:add" @click="table.editHandle()"/>
+          <zt-button type="delete" perm="project:delete" @click="table.deleteHandle()"/>
+        </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">
+        <el-table-column type="selection" align="center" width="40"/>
+        <el-table-column prop="softwareName" label="杞欢鍚嶇О"/>
+        <el-table-column prop="code" label="椤圭洰缂栧彿"/>
+        <el-table-column prop="softwareIdentity" label="椤圭洰鏍囪瘑"/>
+        <el-table-column prop="entrustUnitName" label="濮旀墭鍗曚綅鍚嶇О"/>
+        <el-table-column prop="developUnitName" label="寮�鍙戝崟浣嶅悕绉�"/>
+        <zt-table-column-dict prop="secretClass" label="瀵嗙骇" dict="secret_class"/>
+        <zt-table-column-dict prop="criticalLevel" label="鍏抽敭绛夌骇" dict="critical_level"/>
+        <!-- <zt-table-column-dict prop="testLevel" label="娴嬭瘯绾у埆" dict="test_level"/>-->
+        <zt-table-column-dict prop="softwareType" label="杞欢绫诲瀷" dict="software_type"/>
+        <el-table-column prop="projectLeader" label="椤圭洰璐熻矗浜�"/>
+        <zt-table-column-dict prop="isContract" label="鏄惁绛剧讲鍚堝悓" dict="is_or_not"/>
+        <zt-table-column-handle :table="table" edit-perm="project:update" delete-perm="project::delete"/>
+      </el-table>
+      <!-- 寮圭獥, 鏂板 / 淇敼 -->
+      <add-or-update @refreshDataList="table.query"/>
+    </zt-table-wraper>
+  </div>
 </template>
 
 <script>
-import AddOrUpdate from './Project-AddOrUpdate'
-export default {
-  data() {
-    return {
-      dataForm: {
-        softwareName: '',
-        secretClass: '',
-        criticalLevel: '',
-        testLevel: '',
-        softwareType: '',
-        isContract: '',
+  import AddOrUpdate from './Project-AddOrUpdate'
+
+  export default {
+    data() {
+      return {
+        dataForm: {
+          softwareName: '',
+          secretClass: '',
+          criticalLevel: '',
+          testLevel: '',
+          softwareType: '',
+          isContract: '',
+        }
       }
+    },
+    components: {
+      AddOrUpdate
     }
-  },
-  components: {
-    AddOrUpdate
   }
-}
 </script>
 <style>
-.form-input-width-1 .el-form-item>.el-form-item__content .el-input{
-  width: 150px;
-}
+  .form-input-width-1 .el-form-item > .el-form-item__content .el-input {
+    width: 150px;
+  }
 </style>
diff --git a/web/src/views/modules/project/SoftwareTestOrder-AddOrUpdate.vue b/web/src/views/modules/project/SoftwareTestOrder-AddOrUpdate.vue
index 2c277af..35d15e1 100644
--- a/web/src/views/modules/project/SoftwareTestOrder-AddOrUpdate.vue
+++ b/web/src/views/modules/project/SoftwareTestOrder-AddOrUpdate.vue
@@ -107,6 +107,10 @@
                       </el-table-column>
                     </el-table>
                   </div>
+                  <div v-if="!dataForm.disabled" class="icon-container" @click="addMeasuredRow()">
+                    <!-- 鏀剧疆鍥哄畾鐨勫浘鏍� -->
+                    <i class="el-icon-plus"></i>
+                  </div>
                 </div>
                 <div class="el-flex" style="height: 40px;">
                   <div class="DWidth DAlign DHold">
@@ -325,6 +329,10 @@
                       <el-table-column prop="name" min-width="300" label="鍚嶇О"></el-table-column>
                       <el-table-column prop="identify" align="center" width="380" label="鏍囪瘑/鐗堟湰"></el-table-column>
                     </el-table>
+                    <div v-if="!dataForm.disabled" class="icon-container" @click="addDeliverableRow()">
+                      <!-- 鏀剧疆鍥哄畾鐨勫浘鏍� -->
+                      <i class="el-icon-plus"></i>
+                    </div>
                   </div>
                 </div>
               </div>
@@ -567,6 +575,20 @@
       // console.log(this.dataForm, "this.dataForm")
       console.log(this.dataForm,"getInfo this.dataForm")
     },
+    addDeliverableRow() {
+      this.dataForm.deliverableList.push({})
+      this.$nextTick(() => {
+        const tableBody = this.$refs.tableDeliverableList.$el.querySelector('.el-table__body-wrapper')
+        tableBody.scrollTop = tableBody.scrollHeight
+      })
+    },
+    addMeasuredRow() {
+      this.dataForm.measuredList.push({})
+      this.$nextTick(() => {
+        const tableBody = this.$refs.tableMeasuredList.$el.querySelector('.el-table__body-wrapper')
+        tableBody.scrollTop = tableBody.scrollHeight
+      })
+    },
     async print(){
       var params = qs.stringify({
         token: Cookies.get('token'),
diff --git a/web/src/views/modules/qaAuditReport/QaAuditReport-AddOrUpdate.vue b/web/src/views/modules/qaAuditReport/QaAuditReport-AddOrUpdate.vue
index 0396dac..c02c7c0 100644
--- a/web/src/views/modules/qaAuditReport/QaAuditReport-AddOrUpdate.vue
+++ b/web/src/views/modules/qaAuditReport/QaAuditReport-AddOrUpdate.vue
@@ -10,10 +10,10 @@
       <div style="border: 1px solid rgba(0,0,0,.2);width: 99%">
         <div style="border-bottom: 1px solid rgba(0,0,0,.2);" class="QaAuditContentWidth">
           <el-form-item class="marginTopAndMarginBottom" label="椤圭洰鍚嶇О" style="width: 49%">
-            <el-input v-model="dataForm.testAgencyInfo.agencyName" placeholder="璇疯緭鍏ラ」鐩悕绉�"></el-input>
+            <el-input v-model="dataForm.project.softwareName" placeholder="璇疯緭鍏ラ」鐩悕绉�"></el-input>
           </el-form-item>
           <el-form-item class="marginTopAndMarginBottom" label="椤圭洰鏍囪瘑" style="width: 49%">
-            <el-input v-model="dataForm.testAgencyInfo.labContactNum" placeholder="璇疯緭鍏ラ」鐩爣璇�"></el-input>
+            <el-input v-model="dataForm.project.softwareIdentity" placeholder="璇疯緭鍏ラ」鐩爣璇�"></el-input>
           </el-form-item>
         </div>
         <div class="el-flexQaAuditDialog el-border-bottom">
@@ -22,13 +22,13 @@
           </div>
           <div class="el-border-left" style="width: calc(100% - 120px);min-height: 40px">
             <el-form-item style="width: 50%;padding: 0 5px">
-              <span>椤圭洰璐熻矗浜猴細{{dataForm.contractReview.technicalDirector || '椤圭洰璐熻矗浜�'}} </span>
+              <span>椤圭洰璐熻矗浜猴細{{dataForm.project.projectLeader || '椤圭洰璐熻矗浜�'}} </span>
             </el-form-item>
             <el-form-item style="width: 40%;padding: 0 5px">
-              <span>娴嬭瘯浜哄憳锛歿{dataForm.contractReview.technicalDirector || '娴嬭瘯浜哄憳'}} </span>
+              <span>娴嬭瘯浜哄憳锛歿{dataForm.project.projectTesters || '娴嬭瘯浜哄憳'}} </span>
             </el-form-item>
-            <el-form-item style="width: 100%;padding: 0 5px">
-              <span>閰嶇疆绠$悊鍛橈細{{dataForm.contractReview.technicalDirector || '閰嶇疆绠$悊鍛�'}} </span>
+            <el-form-item style="width: 40%;padding: 0 5px">
+              <span>閰嶇疆浜哄憳锛歿{dataForm.project.projectConfiger || '閰嶇疆浜哄憳'}} </span>
             </el-form-item>
           </div>
         </div>
@@ -37,6 +37,10 @@
             宸插畬鎴愮殑妫�鏌�
           </div>
           <div class="el-border-left" style="width: calc(100% - 120px);min-height: 40px">
+            <el-form-item class="el-QaTextarea" label-width="20px" style="width: 100%;padding: 5px">
+              <el-input type="textarea" :rows="2" placeholder="璇疯緭鍏ュ唴瀹�"
+                        v-model="dataForm.auditReport.completedCheck"></el-input>
+            </el-form-item>
           </div>
         </div>
         <div class=" el-border-bottom">
@@ -46,22 +50,46 @@
           <div>
             <div class="table-container">
               <el-table ref="tableConfigItemList" class="el-software el-margin-top-bot"
-                        style="width: 99%;margin-left: 5px" border :data="dataForm.reviewItemList"
+                        style="width: 99%;margin-left: 5px" border :data="dataForm.incongruentList"
                         stripe>
                 <el-table-column prop="no" align="center" width="60" label="搴忓彿">
                   <template slot-scope="scope">
                     <span v-html="indexFormat(scope.$index)"></span>
                   </template>
                 </el-table-column>
-                <el-table-column prop="item" min-width="400" label="璇勫椤�">
+                <el-table-column prop="oddNum" min-width="350" label="涓嶇鍚堥」鍗曞彿">
                   <template v-slot="{ row }">
-                    <el-input v-model="row.item" placeholder="璇勫椤�"></el-input>
+                    <el-input v-model="row.oddNum" placeholder="涓嶇鍚堥」鍗曞彿"></el-input>
                   </template>
                 </el-table-column>
-                <el-table-column prop="result" width="220" align="center" label="璇勫缁撴灉">
+                <el-table-column prop="notTrueDescribe" width="220" align="center" label="涓嶇鍚堥」鎻忚堪">
                   <template v-slot="{ row }">
-                    <zt-dict v-model="row.result" placeholder="璇勫缁撴灉" dict="tristate1" :radio="true"
-                             clearable></zt-dict>
+                    <el-input v-model="row.notTrueDescribe" placeholder="涓嶇鍚堥」鎻忚堪"></el-input>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="workProcess" width="100" align="center" label="鎵�灞炲伐浣滀骇鍝�/杩囩▼">
+                  <template v-slot="{ row }">
+                    <el-input v-model="row.workProcess" placeholder="鎵�灞炲伐浣滀骇鍝�/杩囩▼"></el-input>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="discoveryPhase" width="80" align="center" label="鍙戠幇闃舵">
+                  <template v-slot="{ row }">
+                    <el-input v-model="row.discoveryPhase" placeholder="鍙戠幇闃舵"></el-input>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="chargePerson" width="80" align="center" label="璐d换浜�">
+                  <template v-slot="{ row }">
+                    <el-input v-model="row.chargePerson" placeholder="璐d换浜�"></el-input>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="status" width="80" align="center" label="鐘舵��">
+                  <template v-slot="{ row }">
+                    <el-input v-model="row.status" placeholder="鐘舵��"></el-input>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="remark" width="100" align="center" label="澶囨敞">
+                  <template v-slot="{ row }">
+                    <el-input v-model="row.remark" placeholder="澶囨敞"></el-input>
                   </template>
                 </el-table-column>
               </el-table>
@@ -73,32 +101,34 @@
             QA鎬荤粨
           </div>
           <div class="el-border-bottom">
-              <el-form-item class="el-QaTextarea" label-width="20px" style="width: 100%;padding: 5px">
-                <el-input type="textarea" :rows="2" placeholder="璇疯緭鍏ュ唴瀹�"
-                          v-model="dataForm.contractReview.reviewRecord"></el-input>
-              </el-form-item>
-              <el-form-item label="妫�鏌ヤ汉(绛惧瓧)锛�" label-width="160px" style="width: 48%;padding: 5px;">
-                <el-input v-model="dataForm.contractReview.technicalDirector"></el-input>
-              </el-form-item>
-              <el-form-item  style="width: 48%;padding: 5px;">
-                {{ dataForm.contractReview.reviewDate | filterTime('YYYY骞碝M鏈圖D鏃�') }}
-              </el-form-item>
+            <el-form-item class="el-QaTextarea" label-width="20px" style="width: 100%;padding: 5px">
+              <el-input v-if="stepMarker=='qashbg_first'" type="textarea" :rows="2" placeholder="璇疯緭鍏ュ唴瀹�"
+                        v-model="dataForm.auditReport.qaSummary"></el-input>
+              <span v-else>{{ dataForm.auditReport.qaSummary}}</span>
+            </el-form-item>
+            <el-form-item label="妫�鏌ヤ汉(绛惧瓧)锛�" label-width="160px" style="width: 48%;padding: 5px;">
+              {{ dataForm.auditReport.checker }}
+            </el-form-item>
+            <el-form-item style="width: 48%;padding: 5px;">
+              {{ dataForm.auditReport.checkDate | filterTime('YYYY骞碝M鏈圖D鏃�') }}
+            </el-form-item>
           </div>
           <div>
             <el-form-item label="璐ㄩ噺鐩戠潱鍛樻剰瑙侊細" class="el-QaTextarea1" label-width="160px" style="width: 100%;padding: 5px">
-              <el-input type="textarea" :rows="2" placeholder="璇疯緭鍏ュ唴瀹�"
-                        v-model="dataForm.contractReview.technicalDirector"></el-input>
+              <el-input v-if="stepMarker=='qashbg_zljd'" type="textarea" :rows="2" placeholder="璇疯緭鍏ュ唴瀹�"
+                        v-model="dataForm.auditReport.supervisorOpinion"></el-input>
+              <span v-else>{{ dataForm.auditReport.supervisorOpinion}}</span>
             </el-form-item>
             <el-form-item label="璐ㄩ噺鐩戠潱鍛�(绛惧瓧)锛�" label-width="160px" style="width: 48%;padding: 5px;">
-              <el-input v-model="dataForm.contractReview.technicalDirector"></el-input>
+              {{ dataForm.auditReport.supervisorSign }}
             </el-form-item>
-            <el-form-item  style="width: 48%;padding: 5px;">
-              {{ dataForm.contractReview.reviewDate | filterTime('YYYY骞碝M鏈圖D鏃�') }}
+            <el-form-item style="width: 48%;padding: 5px;">
+              {{ dataForm.auditReport.superviseDate | filterTime('YYYY骞碝M鏈圖D鏃�') }}
             </el-form-item>
           </div>
         </div>
       </div>
-      <div class="el-flex review-sc" style="height: 60px">
+      <div class="el-flex qa-sc" style="height: 60px">
         <el-form-item class="marginTopAndMarginBottom" style="width: 100%">
           <config-uploader :lineHeight="true" busi-type="qa_audit_report" model-name="dataForm" :dataForm="dataForm"
                            v-model="dataForm.files"/>
@@ -133,49 +163,13 @@
           id: '',
           project: {
             softwareIdentity: '',
-            softwarName: '',
+            softwareName: '',
             projectLeader: '',
-            projectTesters: ''
+            projectTesters: '',
+            projectConfiger: ''
           },
-          contractReview: {
-            code: '',
-            orderCode: '',
-            reviewType: '',
-            reviewRecord: '',
-            specialRequire: '',
-            subcontract: '',
-            reviewConclusion: '',
-            technicalDirector: '',
-            reviewDate: '',
-            reviewPanelMember: '',
-          },
-          incongruentList: [],
-          testAgencyInfo: {
-            agencyName: '',
-            labContactNum: ''
-          },
+          incongruentList: []
         }
-        // dataForm: {
-        //   id: '',
-        //   files:'',
-        //   contractReview: {
-        //     code: '',
-        //     orderCode: '',
-        //     reviewType: '',
-        //     reviewRecord: '',
-        //     specialRequire: '',
-        //     subcontract: '',
-        //     reviewConclusion: '',
-        //     technicalDirector: '',
-        //     reviewDate: '',
-        //     reviewPanelMember: '',
-        //   },
-        //   testAgencyInfo: {
-        //     agencyName: '',
-        //     labContactNum: ''
-        //   },
-        //   reviewItemList: []
-        // }
       }
     },
     methods: {
@@ -204,7 +198,19 @@
       indexFormat(index) {
         return index += 1
       },
-
+      async getNameById() {
+        let params = {
+          projectLeaderId: this.dataForm.project.projectLeader,
+          projectTestersId: this.dataForm.project.projectTesters,
+          projectConfigerId: this.dataForm.project.projectConfiger
+        }
+        let res = await this.$http.get(`/qaAuditReport/QaAuditReport/getNameById`, {params: params})
+        if (res.success) {
+          this.dataForm.project.projectLeader = res.data.projectLeaderName
+          this.dataForm.project.projectTesters = res.data.projectTestersName
+          this.dataForm.project.projectConfiger = res.data.projectConfigerName
+        }
+      },
       addCirculatRow() {
         this.dataForm.technicalList.push({})
         this.$nextTick(() => {
@@ -223,6 +229,7 @@
           ...this.dataForm,
           ...res.data
         }
+        this.getNameById()
         if (this.dataForm.project === null) {
           this.dataForm.project = {}
         }
@@ -261,20 +268,29 @@
   }
 </script>
 <style>
-.el-flexQaAuditDialog{
-  display: flex;
-  align-items: center;
-}
-.QaFormWidth{
-  width: 120px;
-}
-.QaAuditContentWidth > .el-form-item > .el-form-item__content {
-  width: calc(100% - 120px);
-}
-.el-form-item.el-QaTextarea > .el-form-item__content {
-  width: 100%;
-}
-.el-form-item.el-QaTextarea1 > .el-form-item__content {
-  width: calc(100% - 160px);
-}
+  .el-flexQaAuditDialog {
+    display: flex;
+    align-items: center;
+  }
+
+  .QaFormWidth {
+    width: 120px;
+  }
+
+  .QaAuditContentWidth > .el-form-item > .el-form-item__content {
+    width: calc(100% - 120px);
+  }
+
+  .el-form-item.el-QaTextarea > .el-form-item__content {
+    width: 100%;
+  }
+
+  .el-form-item.el-QaTextarea1 > .el-form-item__content {
+    width: calc(100% - 160px);
+  }
+</style>
+<style>
+  .qa-sc > .el-form-item > .el-form-item__content {
+    width: 100%;
+  }
 </style>
diff --git a/web/src/views/modules/qaAuditReport/QaAuditReport.vue b/web/src/views/modules/qaAuditReport/QaAuditReport.vue
index e3c983b..cfb72ad 100644
--- a/web/src/views/modules/qaAuditReport/QaAuditReport.vue
+++ b/web/src/views/modules/qaAuditReport/QaAuditReport.vue
@@ -14,15 +14,15 @@
           </el-form-item>
           <el-form-item>
             <zt-button type="query" @click="table.query()"/>
-            <zt-button type="primary" class="el-icon-edit"  @click="add()">鏂板</zt-button>
-            <zt-button type="delete"  @click="table.deleteHandle()"/>
+            <zt-button type="primary" class="el-icon-edit" perm="qaAuditReport:add" @click="add()">鏂板</zt-button>
+            <zt-button type="delete" perm="qaAuditReport:delete" @click="table.deleteHandle()"/>
           </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">
           <el-table-column type="selection" align="center" width="40"/>
             <el-table-column prop="code" label="缂栧彿"/>
-          <el-table-column prop="softwareName" label="椤圭洰鍚嶇О"/>
-          <el-table-column prop="softwareIdentity" label="椤圭洰鏍囪瘑"/>
+            <el-table-column prop="softwareName" label="椤圭洰鍚嶇О"/>
+            <el-table-column prop="softwareIdentity" label="椤圭洰鏍囪瘑"/>
               <zt-table-column-handle :table="table" edit-perm="qaAuditReport:update" delete-perm="qaAuditReport::delete">
                 <template v-slot="{ row }">
                   <zt-table-button size="small" v-show = "row.accessoryMap" type="primary"
diff --git a/web/src/views/modules/riskTraceRecord/RiskTraceItem-AddOrUpdate.vue b/web/src/views/modules/riskTraceRecord/RiskTraceItem-AddOrUpdate.vue
new file mode 100644
index 0000000..e4f9eb3
--- /dev/null
+++ b/web/src/views/modules/riskTraceRecord/RiskTraceItem-AddOrUpdate.vue
@@ -0,0 +1,69 @@
+<template>
+  <zt-dialog ref="dialog"  @confirm="formSubmit">
+    <el-form :model="dataForm" ref="dataForm" :disabled="dataForm.disabled" label-width="120px">
+      <zt-form-item label="鎺掑簭" prop="sort" rules="required">
+                        <el-input v-model="dataForm.sort"></el-input>
+                </zt-form-item>
+      <zt-form-item label="椋庨櫓鍚嶇О" prop="riskName" rules="required">
+                        <el-input v-model="dataForm.riskName"></el-input>
+                </zt-form-item>
+      <zt-form-item label="椋庨櫓鎻忚堪" prop="riskDesc" rules="required">
+                        <el-input v-model="dataForm.riskDesc"></el-input>
+                </zt-form-item>
+      <zt-form-item label="椋庨櫓绛夌骇" prop="riskLevel" rules="required">
+                        <el-input v-model="dataForm.riskLevel"></el-input>
+                </zt-form-item>
+    </el-form>
+  </zt-dialog>
+</template>
+
+<script>
+  export default {
+    data() {
+      return {
+        dataForm: {
+          id: '',
+          sort: '',
+          riskName: '',
+          riskDesc: '',
+          riskLevel: ''
+        }
+      }
+    },
+    methods: {
+      init(id, row) {
+        if (id) {
+          this.dataForm.id = id
+        } else {
+          this.dataForm.id = row.id
+        }
+        if (row.projectId) {
+          this.dataForm.projectId = row.projectId
+        }
+        // this.dataForm.disabled
+        this.getInfo()
+        },
+      // 鑾峰彇淇℃伅
+      async getInfo() {
+        let params = {
+          riskId: this.dataForm.id,
+          projectId: this.dataForm.projectId
+        }
+        let res = await this.$http.get(`/riskTraceRecord/RiskTraceItem/`,{params:params})
+        this.dataForm = {
+          ...this.dataForm,
+          ...res.data
+        }
+      },
+      // 琛ㄥ崟鎻愪氦
+      async formSubmit() {
+        let res = await this.$http[!this.dataForm.id ? 'post' : 'put']('/riskTraceRecord/RiskTraceItem/', this.dataForm)
+        if (res.success) {
+          await this.$tip.success()
+          this.$refs.dialog.close()
+          this.$emit('refreshDataList')
+        }
+      }
+    }
+  }
+</script>
diff --git a/web/src/views/modules/riskTraceRecord/RiskTraceItem.vue b/web/src/views/modules/riskTraceRecord/RiskTraceItem.vue
new file mode 100644
index 0000000..c3e3388
--- /dev/null
+++ b/web/src/views/modules/riskTraceRecord/RiskTraceItem.vue
@@ -0,0 +1,78 @@
+<template>
+  <el-card shadow="never" class="aui-card--fill">
+    <div class="mod-riskTraceRecord-riskTraceItem}">
+      <zt-table-wraper query-url="/riskTraceRecord/RiskTraceItem/page" delete-url="/riskTraceRecord/RiskTraceItem/deleteRisk"
+                       v-slot="{ table }">
+        <el-form :inline="true" :model="dataForm" @keyup.enter.native="table.query()">
+          <el-form-item>
+            <el-input v-model="dataForm.softwareName" placeholder="璇疯緭鍏ラ」鐩悕绉�" clearable></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-input v-model="dataForm.softwareIdentity" placeholder="璇疯緭鍏ラ」鐩爣璇�" clearable></el-input>
+          </el-form-item>
+          <el-form-item>
+            <zt-button type="query" @click="table.query()"/>
+            <zt-button type="primary" class="el-icon-edit" perm="riskTraceRecord:add" @click="add()">鏂板</zt-button>
+            <zt-button type="delete" perm="riskTraceRecord:delete" @click="table.deleteHandle()"/>
+          </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">
+          <el-table-column type="selection" width="40"/>
+          <el-table-column prop="softwareName" label="椤圭洰鍚嶇О"/>
+          <el-table-column prop="softwareIdentity" label="椤圭洰鏍囪瘑"/>
+          <zt-table-column-handle :table="table" edit-perm="riskTraceRecord:update"
+                                  delete-perm="riskTraceRecord::delete">
+            <template v-slot="{ row }">
+              <zt-table-button size="small" v-show="row.accessoryMap" type="primary"
+                               @click="preview(row)">棰勮
+              </zt-table-button>
+            </template>
+          </zt-table-column-handle>
+        </el-table>
+        <!-- 寮圭獥, 鏂板 / 淇敼 -->
+        <add-or-update ref="addOrUpdate" @refreshDataList="table.query"/>
+        <ProjectSelect ref="projectSelect"
+                       @refreshDataList="table.query"
+                       @setProjectInfo="openAddWin">
+        </ProjectSelect>
+        <Preview ref="view" :pageMarkerfun="RiskTrace"></Preview>
+      </zt-table-wraper>
+    </div>
+  </el-card>
+</template>
+
+<script>
+  import AddOrUpdate from './RiskTraceItem-AddOrUpdate'
+  import Preview from '@/views/pages/view'
+  import ProjectSelect from "../project/Project-select";
+
+  export default {
+    data() {
+      return {
+        RiskTrace:'RiskTrace',
+        dataForm: {
+          softwareName: '',
+          softwareIdentity: ''
+        }
+      }
+    },
+    components: {
+      AddOrUpdate,
+      ProjectSelect,
+      Preview
+    },
+    methods:{
+      add() {
+        this.$refs.projectSelect.$refs.dialog.init("risk_measure")
+      },
+      openAddWin(row) {
+        console.log(row.id, 'row.id')
+        this.$refs.addOrUpdate.$refs.dialog.init(null, {id: null, projectId: row.id})
+      },
+      preview(row){
+        this.$refs.view.openAccessoryFormatSingle(row)
+      }
+    }
+  }
+</script>
diff --git a/web/src/views/modules/sys/task/already-task.vue b/web/src/views/modules/sys/task/already-task.vue
index 1176f51..afdd1e0 100644
--- a/web/src/views/modules/sys/task/already-task.vue
+++ b/web/src/views/modules/sys/task/already-task.vue
@@ -54,6 +54,7 @@
     <ConfigItemOutbound ref="configItemOutbound" @refreshDataList="getQuery()"></ConfigItemOutbound>
     <TestCheckOrder ref="testCheckOrder" @refreshDataList="getQuery()"></TestCheckOrder>
     <BaselineRelease ref="baselineRelease" @refreshDataList="getQuery()"></BaselineRelease>
+    <QaAuditReport ref="qaAuditReport" @refreshDataList="getQuery()"></QaAuditReport>
     <!--    </zt-table-wraper>-->
   </div>
 </template>
@@ -68,6 +69,7 @@
   import ConfigItemChange from "@/views/modules/configItemChange/ConfigItemChange-AddOrUpdate.vue";
   import ConfigItemOutbound from "@/views/modules/configItemOutbound/ConfigItemOutbound-AddOrUpdate.vue";
   import BaselineRelease from "@/views/modules/baselineRelease/BaselineRelease-AddOrUpdate.vue";
+  import QaAuditReport from '@/views/modules/qaAuditReport/QaAuditReport-AddOrUpdate'
 
   export default {
     data() {
@@ -97,7 +99,8 @@
       ConfigItemWarehouse,
       ConfigItemChange,
       ConfigItemOutbound,
-      BaselineRelease
+      BaselineRelease,
+      QaAuditReport
     },
     watch:{
     },
@@ -222,6 +225,10 @@
           this.$nextTick(()=>{
             this.$refs.baselineRelease.$refs.dialog.init(row.bizId,row, true)
           })
+        }else if (row.flowCode === 'qashbg') {
+          this.$nextTick(()=>{
+            this.$refs.qaAuditReport.$refs.dialog.init(row.bizId,row, true)
+          })
         }
         else {
           if (row.stepReadRouterId === null){
diff --git a/web/src/views/modules/sys/task/stay-task.vue b/web/src/views/modules/sys/task/stay-task.vue
index 8765baf..1dd29cd 100644
--- a/web/src/views/modules/sys/task/stay-task.vue
+++ b/web/src/views/modules/sys/task/stay-task.vue
@@ -61,6 +61,7 @@
     <ConfigItemOutbound ref="configItemOutbound" @refreshDataList="getQuery()"></ConfigItemOutbound>
     <TestCheckOrder ref="testCheckOrder" @refreshDataList="getQuery()"></TestCheckOrder>
     <BaselineRelease ref="baselineRelease" @refreshDataList="getQuery()"></BaselineRelease>
+    <QaAuditReport ref="qaAuditReport" @refreshDataList="getQuery()"></QaAuditReport>
     <!--    </zt-table-wraper>-->
   </div>
 </template>
@@ -74,6 +75,7 @@
   import ConfigItemChange from '@/views/modules/configItemChange/ConfigItemChange-AddOrUpdate'
   import ConfigItemOutbound from '@/views/modules/configItemOutbound/ConfigItemOutbound-AddOrUpdate'
   import BaselineRelease from '@/views/modules/baselineRelease/BaselineRelease-AddOrUpdate'
+  import QaAuditReport from '@/views/modules/qaAuditReport/QaAuditReport-AddOrUpdate'
 
   export default {
     data() {
@@ -118,6 +120,7 @@
       ConfigItemChange,
       ConfigItemOutbound,
       BaselineRelease,
+      QaAuditReport
     },
     created() {
       if (this.$route.path.indexOf('taskCenter') > 0 || this.system == 'smj') {
@@ -237,6 +240,8 @@
           this.$refs.configItemOutbound.$refs.dialog.init(row.bizId, row)
         }else if (row.flowCode === 'jxfb') {
           this.$refs.baselineRelease.$refs.dialog.init(row.bizId, row)
+        }else if (row.flowCode === 'qashbg') {
+          this.$refs.qaAuditReport.$refs.dialog.init(row.bizId, row)
         }else {
           if (row.stepRouterId === null) {
             this.$tip.alert("娌℃湁閰嶇疆鑿滃崟id")
diff --git a/web/src/views/modules/sys/workflowConfig/workflow-config-add-update.vue b/web/src/views/modules/sys/workflowConfig/workflow-config-add-update.vue
index 967b453..8e37f29 100644
--- a/web/src/views/modules/sys/workflowConfig/workflow-config-add-update.vue
+++ b/web/src/views/modules/sys/workflowConfig/workflow-config-add-update.vue
@@ -66,7 +66,7 @@
 
       <zt-form-item label="浠诲姟鍒嗙粍" prop="taskGroup" >
         <el-select v-model="dataForm.taskGroup" value-key="value" style="width: 100%">
-          <el-option v-for="item in taskGrouList" :key="item.id" :label="item.name" :value="item.value"></el-option>
+          <el-option v-for="item in taskGroupList" :key="item.id" :label="item.name" :value="item.value"></el-option>
         </el-select>
       </zt-form-item>
 
@@ -129,12 +129,15 @@
           stepRouterId:'',
           stepReadRouterId:''
         },
-        taskGrouList:[{id:'0',value:'',name:'鏃�'},
-          {id:'1',value:'cj',name:'鍘傚'},
-          {id:'2',value:'zy',name:'涓撲笟'},
+        taskGroupList:[{id:'0',value:'',name:'鏃�'},
           {id:'3',value:'sqr',name:'鐢宠浜�'},
           {id:'4',value:'br',name:'鎸囧畾浜�'},
-          {id:'5',value:'js',name:'鐢ㄦ埛瑙掕壊'}
+          {id:'5',value:'js',name:'鐢ㄦ埛瑙掕壊'},
+          {id:'10',value:'pall',name:'椤圭洰鎵�鏈変汉鍛�'},
+          {id:'11',value:'zrr',name:'椤圭洰璐d换浜�'},
+          {id:'12',value:'csr',name:'椤圭洰娴嬭瘯鍛�'},
+          {id:'13',value:'shr',name:'椤圭洰瀹℃牳鍛�'},
+          {id:'14',value:'pzr',name:'椤圭洰閰嶇疆鍛�'}
           ],
          menuIdList1:[],
         menuIdListChild:[]
diff --git a/web/vue.config.js b/web/vue.config.js
index 3e541e3..1bb34dc 100644
--- a/web/vue.config.js
+++ b/web/vue.config.js
@@ -19,7 +19,7 @@
   productionSourceMap: false,
   devServer: {
     open: true,
-    port: 8008,
+    port: 8020,
     overlay: {
       errors: true,
       warnings: true
diff --git a/zt/common/src/main/java/com/zt/core/sys/model/SysDept.java b/zt/common/src/main/java/com/zt/core/sys/model/SysDept.java
index 3155b95..4ee2523 100644
--- a/zt/common/src/main/java/com/zt/core/sys/model/SysDept.java
+++ b/zt/common/src/main/java/com/zt/core/sys/model/SysDept.java
@@ -37,7 +37,7 @@
 @TableName("SYS_DEPT")
 public class SysDept extends CompanyEntity implements TreeNode<SysDept>, Cloneable {
     private static final long serialVersionUID = 1L;
-
+    private Long id;
     @ApiModelProperty(value = "涓婄骇ID")
     @NotNull(message = "涓婄骇ID锛屼笉鑳戒负绌�", groups = DefaultGroup.class)
     private Long pid;
diff --git a/zt/core/src/main/java/com/zt/modules/sys/controller/SysDeptController.java b/zt/core/src/main/java/com/zt/modules/sys/controller/SysDeptController.java
index 867a5e1..0b35876 100644
--- a/zt/core/src/main/java/com/zt/modules/sys/controller/SysDeptController.java
+++ b/zt/core/src/main/java/com/zt/modules/sys/controller/SysDeptController.java
@@ -42,7 +42,14 @@
     @RequiresPermissions("sys:dept:list")
     public Result<List<SysDept>> pageList(@RequestParam Long companyId) {
         List<SysDept> list = sysDeptService.getDeptList(companyId);
+        return Result.ok(list);
+    }
 
+    @GetMapping("getList")
+    @ApiOperation("閮ㄩ棬鍒楄〃")
+    // @RequiresPermissions("sys:dept:list")
+    public Result<List<SysDept>> getlist() {
+        List<SysDept> list = sysDeptService.getDeptList3();
         return Result.ok(list);
     }
 
@@ -51,7 +58,6 @@
     // @RequiresPermissions("sys:dept:list")
     public Result<List<SysDept>> list() {
         List<SysDept> list = sysDeptService.getDeptTree();
-
         return Result.ok(list);
     }
 
@@ -60,7 +66,6 @@
     // @RequiresPermissions("sys:dept:list")
     public Result<List<SysDept>> list2() {
         List<SysDept> list = sysDeptService.getDeptTreeRegister();
-
         return Result.ok(list);
     }
 
diff --git a/zt/core/src/main/java/com/zt/modules/sys/controller/SysRoleController.java b/zt/core/src/main/java/com/zt/modules/sys/controller/SysRoleController.java
index 15bf68f..e7717c3 100644
--- a/zt/core/src/main/java/com/zt/modules/sys/controller/SysRoleController.java
+++ b/zt/core/src/main/java/com/zt/modules/sys/controller/SysRoleController.java
@@ -103,7 +103,7 @@
 
     @PostMapping
     @ApiOperation("鏂板")
-    @LogOperation("瑙掕壊绠$悊--->鏂板")
+    @LogOperation("鏉冮檺绠$悊--->鏂板")
     @RequiresPermissions("sys:role")
     public Result insert(@RequestBody SysRole entity) {
         // 鏁堥獙鏁版嵁
@@ -116,7 +116,7 @@
 
     @PutMapping
     @ApiOperation("淇敼")
-    @LogOperation("瑙掕壊绠$悊--->淇敼")
+    @LogOperation("鏉冮檺绠$悊--->淇敼")
     @RequiresPermissions("sys:role:update")
     public Result update(@RequestBody SysRole entity) {
         // 鏁堥獙鏁版嵁
@@ -129,7 +129,7 @@
 
     @DeleteMapping
     @ApiOperation("鍒犻櫎")
-    @LogOperation("瑙掕壊绠$悊--->鍒犻櫎")
+    @LogOperation("鏉冮檺绠$悊--->鍒犻櫎")
     @RequiresPermissions("sys:role:delete")
     public Result delete(@RequestBody Long[] ids) {
         // 鏁堥獙鏁版嵁
@@ -150,6 +150,7 @@
 
     @PostMapping("menu")
     @ApiOperation("閰嶇疆鑿滃崟鏉冮檺")
+    @LogOperation("鏉冮檺绠$悊--->閰嶇疆鑿滃崟鏉冮檺")
     @RequiresPermissions("sys:role:menu")
     public Result setRoleMenu(@RequestBody RoleMenuDto entity) {
 
@@ -190,7 +191,7 @@
 
     @PostMapping("addroleuser")
     @ApiOperation("娣诲姞瑙掕壊浜哄憳")
-    @LogOperation("瑙掕壊绠$悊--->娣诲姞瑙掕壊浜哄憳")
+    @LogOperation("鏉冮檺绠$悊--->娣诲姞瑙掕壊浜哄憳")
     @RequiresPermissions("sys:role:update")
     public Result addRoleUser(@RequestBody RoleMenuDto model) {
 
@@ -201,7 +202,7 @@
 
     @PostMapping("deleteRoleUsers")
     @ApiOperation("鍒犻櫎瑙掕壊鐢ㄦ埛")
-    @LogOperation("瑙掕壊绠$悊--->鍒犻櫎瑙掕壊鐢ㄦ埛")
+    @LogOperation("鏉冮檺绠$悊--->鍒犻櫎瑙掕壊鐢ㄦ埛")
     public Result deleteRoleUsers(@RequestBody SysRoleUser model) {
         List<SysRoleUser> list = sysRoleUserService.getSingleRoleUsers(model.getRoleId(), model.getUserId());
         sysRoleUserService.deleteLogic(list);
diff --git a/zt/core/src/main/java/com/zt/modules/sys/controller/SysUserController.java b/zt/core/src/main/java/com/zt/modules/sys/controller/SysUserController.java
index 0077479..5b7a323 100644
--- a/zt/core/src/main/java/com/zt/modules/sys/controller/SysUserController.java
+++ b/zt/core/src/main/java/com/zt/modules/sys/controller/SysUserController.java
@@ -231,4 +231,10 @@
         sysRoleUserService.saveOrUpdate(dto.getUserId(), dto.getRoleIdList());
         return Result.ok();
     }
+    @PostMapping("getNameById")
+    @ApiOperation("鐢ㄦ埛鍚�")
+    public Result getNameById(@RequestBody String ids) {
+        sysUserService.getNames(ids);
+        return Result.ok();
+    }
 }
diff --git a/zt/core/src/main/java/com/zt/modules/sys/dao/SysDeptDao.java b/zt/core/src/main/java/com/zt/modules/sys/dao/SysDeptDao.java
index 4974d4f..676e78f 100644
--- a/zt/core/src/main/java/com/zt/modules/sys/dao/SysDeptDao.java
+++ b/zt/core/src/main/java/com/zt/modules/sys/dao/SysDeptDao.java
@@ -32,4 +32,5 @@
     List<SysDept> getListByParent(Map<String, Object> params);
 
 
+    List<SysDept> getDeptList3();
 }
diff --git a/zt/core/src/main/java/com/zt/modules/sys/dao/SysUserDao.java b/zt/core/src/main/java/com/zt/modules/sys/dao/SysUserDao.java
index 57d0482..521eda6 100644
--- a/zt/core/src/main/java/com/zt/modules/sys/dao/SysUserDao.java
+++ b/zt/core/src/main/java/com/zt/modules/sys/dao/SysUserDao.java
@@ -54,7 +54,7 @@
     void updatePassword(SysUser entity);
 
     Integer checkTestHome(String systemId, Long userId);
-    List<SysUser> getUsersList();
+    List<SysUser> getUsersList(String type, String deptId);
 
     String getUsersName(String id);
 }
diff --git a/zt/core/src/main/java/com/zt/modules/sys/service/SysDeptService.java b/zt/core/src/main/java/com/zt/modules/sys/service/SysDeptService.java
index 42e57af..ed2a188 100644
--- a/zt/core/src/main/java/com/zt/modules/sys/service/SysDeptService.java
+++ b/zt/core/src/main/java/com/zt/modules/sys/service/SysDeptService.java
@@ -126,9 +126,9 @@
         QueryFilter queryFilter = new QueryFilter();
         // 鏅�氱鐞嗗憳锛屽彧鑳芥煡璇㈡墍灞為儴闂ㄥ強瀛愰儴闂ㄧ殑鏁版嵁
         User user = UserContext.getUser();
-        if (!user.isSuperAdmin()) {
+/*        if (!user.isSuperAdmin()) {
             queryFilter.addParam("deptIds", this.getWithDescendantIds(user.getDeptId()));
-        }
+        }*/
         // 鏌ヨ鍏徃涓嬮儴闂ㄥ垪琛�
         queryFilter.addParam("isCompany", Constant.Bool.NO);
         queryFilter.addParam("companyId", companyId);
@@ -432,4 +432,8 @@
         }
         return result;
     }
+
+    public List<SysDept> getDeptList3() {
+        return baseDao.getDeptList3();
+    }
 }
diff --git a/zt/core/src/main/java/com/zt/modules/sys/service/SysUserService.java b/zt/core/src/main/java/com/zt/modules/sys/service/SysUserService.java
index ae65be8..43ee2fc 100644
--- a/zt/core/src/main/java/com/zt/modules/sys/service/SysUserService.java
+++ b/zt/core/src/main/java/com/zt/modules/sys/service/SysUserService.java
@@ -331,8 +331,9 @@
         return num;
     }
 
-    public List<SysUser> getUsersList() {
-        return baseDao.getUsersList();
+    public List<SysUser> getUsersList(String type, String deptId) {
+        List<SysUser> list = baseDao.getUsersList(type,deptId);
+        return list;
     }
 
     public String getUsersName(String id) {
diff --git a/zt/core/src/main/java/com/zt/modules/workflow/dao/WfRunTaskDao.java b/zt/core/src/main/java/com/zt/modules/workflow/dao/WfRunTaskDao.java
index 7353343..708621a 100644
--- a/zt/core/src/main/java/com/zt/modules/workflow/dao/WfRunTaskDao.java
+++ b/zt/core/src/main/java/com/zt/modules/workflow/dao/WfRunTaskDao.java
@@ -29,7 +29,7 @@
 @Mapper
 public interface WfRunTaskDao extends BaseDao<WfRunTask> {
 
-    List<SysUser> getTaskUser(@Param("roleId") String roleId, @Param("deptIds") String deptIds, @Param("zyIds") String zyIds);
+    List<SysUser> getTaskUser(@Param("roleId") String roleId, @Param("deptIds") String deptIds);
     List<SysUser> getAssignUser(String code, String stepMarker, Long bizId);
     SysUser getUserById(Long userId);
 
diff --git a/zt/core/src/main/java/com/zt/modules/workflow/dto/BizInfoDto.java b/zt/core/src/main/java/com/zt/modules/workflow/dto/BizInfoDto.java
index 1818e90..a59fdef 100644
--- a/zt/core/src/main/java/com/zt/modules/workflow/dto/BizInfoDto.java
+++ b/zt/core/src/main/java/com/zt/modules/workflow/dto/BizInfoDto.java
@@ -14,4 +14,9 @@
     String applyUser;
     Date applyTime;
     String param;
+    String zrr;
+    String csr;
+    String shr;
+    String pzr;
+    String pall;
 }
diff --git a/zt/core/src/main/java/com/zt/modules/workflow/service/WorkflowService.java b/zt/core/src/main/java/com/zt/modules/workflow/service/WorkflowService.java
index 6b570d6..852f7ef 100644
--- a/zt/core/src/main/java/com/zt/modules/workflow/service/WorkflowService.java
+++ b/zt/core/src/main/java/com/zt/modules/workflow/service/WorkflowService.java
@@ -294,36 +294,15 @@
         taskParamDto.setBizInfoDto(bizInfoDto);
 
         if (finallyStep.getStepNo() > currentStep.getStepNo()) {
-            String roleIds = currentStep.getApproverRoleIds();
-            if (!StringUtils.isBlank(roleIds)) {
-                roleIds = roleIds.replace(",,", ",");
-                roleIds = roleIds.replace(",,", ",");
-            }
-            if (StringUtils.isBlank(roleIds)) {
-                throw new RuntimeException("娌℃湁璁剧疆涓嬩竴姝ユ祦绋嬭鑹诧紒");
-            }
 
             Integer isSelfDept = currentStep.getIsSelfDept();
-            String[] roleIdArr = roleIds.split(",");
-            if (isSelfDept > 0 && bizInfoList.size() > 0) {
-                deptIds = bizInfoList.get(0).getDeptIds();
+            if (isSelfDept > 0 && bizInfoDto!=null) {
+                deptIds = bizInfoDto.getDeptIds();
             }
             if (isSelfDept == 0)
                 deptIds = null;
 
-            String zyIds = null;
             String bizGroupId = bizInfoList.get(0).getBizId();
-            if (!StringUtils.isBlank(currentStep.getTaskGroup())
-                    && !StringUtils.isBlank(currentStep.getTaskGroupSql())) {
-                sqlStr = currentStep.getTaskGroupSql();
-                sqlStr = sqlStr.replace("${bizId}", bizId.toString());
-                sqlStr = sqlStr.replace("${bizGroupId}", bizGroupId);
-                List<BizInfoDto> bizInfoList2 = baseDao.getSqlResult(sqlStr);
-                if ("cj".equals(currentStep.getTaskGroup()))
-                    deptIds = bizInfoList2.get(0).getId();
-                if ("zy".equals(currentStep.getTaskGroup()))
-                    zyIds = bizInfoList2.get(0).getId();
-            }
             if ("br".equals(currentStep.getTaskGroup())) {
                 List<SysUser> listUser = baseDao.getAssignUser(wfDef.getCode(), currentStep.getStepMarker(), bizId);
                 for (SysUser user : listUser) {
@@ -335,6 +314,36 @@
                     taskParamDto.setGroupId2(user.getId());
                     insertFlowTaskData(taskParamDto);
                 }
+            }
+            else if (currentStep.getTaskGroup() !=null && "pall,zrr,csr,shr,pzr".contains(currentStep.getTaskGroup())) {
+                String userList = null;
+                if ("zrr".equals(currentStep.getTaskGroup())){
+                    userList = bizInfoDto.getZrr();
+                }
+                if ("csr".equals(currentStep.getTaskGroup())){
+                    userList = bizInfoDto.getCsr();
+                }
+                if ("shr".equals(currentStep.getTaskGroup())){
+                    userList = bizInfoDto.getShr();
+                }
+                if ("pzr".equals(currentStep.getTaskGroup())){
+                    userList = bizInfoDto.getPzr();
+                }
+                if ("pall".equals(currentStep.getTaskGroup())){
+                    userList = bizInfoDto.getPall();
+                }
+                if (userList != null) {
+                    String[] userArr = userList.split(",");
+                    Long groupId2 = UUIDUtil.generateId();
+                    for (String userStr : userArr) {
+                        Long userId = Convert.toLong(userStr);
+                        SysUser user = baseDao.getUserById(userId);
+                        existsUsers.put(userId, "");
+                        taskParamDto.setUser(user);
+                        taskParamDto.setGroupId2(groupId2);
+                        insertFlowTaskData(taskParamDto);
+                    }
+                }
             } else if ("sqr".equals(currentStep.getTaskGroup())) {
                 SysUser user = baseDao.getUserById(bizInfoList.get(0).getApplyUserId());
                 existsUsers.put(user.getId(), "");
@@ -342,8 +351,15 @@
                 taskParamDto.setGroupId2(user.getId());
                 insertFlowTaskData(taskParamDto);
             } else {
+                String roleIds = currentStep.getApproverRoleIds();
+                if (StringUtils.isBlank(roleIds)) {
+                    throw new RuntimeException("娌℃湁璁剧疆涓嬩竴姝ユ祦绋嬭鑹诧紒");
+                }
+                String[] roleIdArr = roleIds.split(",");
                 for (String roleId : roleIdArr) {
-                    List<SysUser> listUser = baseDao.getTaskUser(roleId, deptIds, zyIds);
+                    if (StringUtils.isBlank(roleId))
+                        continue;
+                    List<SysUser> listUser = baseDao.getTaskUser(roleId, deptIds);
                     for (SysUser user : listUser) {
                         if (existsUsers.containsKey(user.getId())) {
                             continue;
diff --git a/zt/core/src/main/resources/mapper/log/SysLogLoginDao.xml b/zt/core/src/main/resources/mapper/log/SysLogLoginDao.xml
index ed03cd0..35ec730 100644
--- a/zt/core/src/main/resources/mapper/log/SysLogLoginDao.xml
+++ b/zt/core/src/main/resources/mapper/log/SysLogLoginDao.xml
@@ -3,11 +3,7 @@
 
 <mapper namespace="com.zt.modules.log.dao.SysLogLoginDao">
     <select id="getList" resultType="com.zt.modules.log.model.SysLogLogin">
-        select * from (
-            select a.*
-                ,(SELECT replace(GROUP_CONCAT(aa.name),',',';') FROM sys_role aa,sys_role_user bb WHERE aa.id=bb.role_id AND bb.user_id = a.creator) AS role_names
-            from sys_log_login a
-        ) a
+            select a.* from sys_log_login a
         <where>
             <if test="status!=null">
               and  status=#{status}
@@ -19,10 +15,12 @@
                 and 1 = 1
             </if>
             <if test="action == 'xtbmybm'">
-                and role_names NOT LIKE '%xtgly%'  OR role_names NOT LIKE '%xtsjy%'
+                and a.creator not in (select user_id from sys_role_user
+                where role_id in (select id from sys_role where code in ('xtglybm','xtbmybm','xtsjybm')))
             </if>
             <if test="action == 'xtsjybm'">
-                and role_names LIKE '%xtgly%'  OR role_names LIKE '%xtsjy%'
+                and a.creator in (select user_id from sys_role_user
+                where role_id in (select id from sys_role where code in ('xtglybm','xtbmybm')))
             </if>
             <if test="action == 'other'">
                 and a.CREATOR = ${currentUserId}
@@ -30,7 +28,6 @@
             <if test="order!=null and order!=''">
                 order by a.CREATE_DATE  ${order}
             </if>
-
             <if test="order==null">
                 order by a.CREATE_DATE
             </if>
diff --git a/zt/core/src/main/resources/mapper/log/SysLogOperationDao.xml b/zt/core/src/main/resources/mapper/log/SysLogOperationDao.xml
index 7e3d590..e536fb2 100644
--- a/zt/core/src/main/resources/mapper/log/SysLogOperationDao.xml
+++ b/zt/core/src/main/resources/mapper/log/SysLogOperationDao.xml
@@ -20,11 +20,8 @@
     </sql>
 
     <select id="getList" resultType="com.zt.modules.log.model.SysLogOperation">
-        select * from (
         select a.*
-        ,(SELECT replace(GROUP_CONCAT(aa.name),',',';') FROM sys_role aa,sys_role_user bb WHERE aa.id=bb.role_id AND bb.user_id = a.creator) AS role_names
-        from sys_log_operation a
-        ) a
+            from sys_log_operation a
         <where>
             <if test="whereSql!=null">
                 ${whereSql}
@@ -33,32 +30,12 @@
                 and 1 = 1
             </if>
             <if test="action == 'xtbmybm'">
-                and role_names NOT LIKE '%xtgly%'  OR role_names NOT LIKE '%xtsjy%'
-                and request_uri not IN (
-                SELECT
-                a.dict_label AS urlLabel
-                FROM
-                sys_dict_data a,
-                sys_dict_type b
-                WHERE 1=1
-                AND b.dict_type = 'adminURL'
-                AND b.id = a.dict_type_id
-                AND b.is_delete = 0
-                )
+                and a.creator not in (select user_id from sys_role_user
+                where role_id in (select id from sys_role where code in ('xtglybm','xtbmybm','xtsjybm')))
             </if>
             <if test="action == 'xtsjybm'">
-                and role_names LIKE '%xtgly%'  OR role_names LIKE '%xtsjy%'
-                and request_uri IN (
-                SELECT
-                a.dict_label AS urlLabel
-                FROM
-                sys_dict_data a,
-                sys_dict_type b
-                WHERE 1=1
-                AND b.dict_type = 'adminURL'
-                AND b.id = a.dict_type_id
-                AND b.is_delete = 0
-                )
+                and a.creator in (select user_id from sys_role_user
+                where role_id in (select id from sys_role where code in ('xtglybm','xtbmybm')))
             </if>
             <if test="action == 'other'">
                 and a.creator = ${currentUserId}
diff --git a/zt/core/src/main/resources/mapper/sys/SysDeptDao.xml b/zt/core/src/main/resources/mapper/sys/SysDeptDao.xml
index 0137dac..d83fd79 100644
--- a/zt/core/src/main/resources/mapper/sys/SysDeptDao.xml
+++ b/zt/core/src/main/resources/mapper/sys/SysDeptDao.xml
@@ -4,16 +4,16 @@
 <mapper namespace="com.zt.modules.sys.dao.SysDeptDao">
 
     <select id="getAll" resultType="com.zt.core.sys.model.SysDept">
-        select a.id as id
-             ,a.name as name
-             ,a.pid as pid
-             ,a.code as code
-             ,a.pids as pids
-             ,a.IS_COMPANY
-             ,a.nature as nature
-             ,a.sort as sort
-             ,(select t2.name from SYS_DEPT t2 where t2.id=a.pid) parentName
-             ,(select t2.name from SYS_DEPT t2 where t2.id = a.pid) companyName
+        select a.id     as                                           id
+             , a.name   as                                           name
+             , a.pid    as                                           pid
+             , a.code   as                                           code
+             , a.pids   as                                           pids
+             , a.IS_COMPANY
+             , a.nature as                                           nature
+             , a.sort   as                                           sort
+             , (select t2.name from SYS_DEPT t2 where t2.id = a.pid) parentName
+             , (select t2.name from SYS_DEPT t2 where t2.id = a.pid) companyName
         from SYS_DEPT a
         where a.is_delete = 0
         order by a.nature, a.sort asc
@@ -50,16 +50,16 @@
 
     <select id="getById" resultType="com.zt.core.sys.model.SysDept">
         select a.id
-             ,a.name
-             ,a.code
-             ,a.pid
-             ,a.pids
-             ,a.nature
-             ,a.sort
-             ,(select t2.name from SYS_DEPT t2 where t2.id=a.pid) parentName
+             , a.name
+             , a.code
+             , a.pid
+             , a.pids
+             , a.nature
+             , a.sort
+             , (select t2.name from SYS_DEPT t2 where t2.id = a.pid) parentName
         from SYS_DEPT a
-        where a.is_delete=0
-            and a.id = #{value}
+        where a.is_delete = 0
+          and a.id = #{value}
     </select>
 
     <select id="getListByParent" resultType="com.zt.core.sys.model.SysDept">
@@ -74,13 +74,19 @@
         from SYS_DEPT a
         where a.is_delete=0
         <if test="pCode != null">
-            and pid in (select id from SYS_DEPT where  code= #{pCode})
+            and pid in (select id from SYS_DEPT where code= #{pCode})
         </if>
         <if test="code != null">
-            and  code= #{code}
+            and code= #{code}
         </if>
         <if test="pId != null">
             and pid = #{pId}
         </if>
     </select>
+    <select id="getDeptList3" resultType="com.zt.core.sys.model.SysDept">
+        select id, name
+        from sys_dept
+        where IS_COMPANY = 0
+        order by sort
+    </select>
 </mapper>
diff --git a/zt/core/src/main/resources/mapper/sys/SysUserDao.xml b/zt/core/src/main/resources/mapper/sys/SysUserDao.xml
index c26633b..33f2116 100644
--- a/zt/core/src/main/resources/mapper/sys/SysUserDao.xml
+++ b/zt/core/src/main/resources/mapper/sys/SysUserDao.xml
@@ -239,6 +239,35 @@
     </select>
     <select id="getUsersList" resultType="com.zt.core.sys.model.SysUser">
         select real_name as name,id as id from sys_user
+        where is_delete = 0
+        <if test="type == null or type == ''">
+            and id not in (
+            select user_id from sys_role_user where role_id
+            in (select id from sys_role where code in ('xtglybm','xtbmybm','xtsjybm','rx')))
+        </if>
+        <if test="deptId != null and deptId != ''">
+            and dept_id = #{deptId}
+        </if>
+        <if test="type == 'zrr'">
+            and id in (
+            select user_id from sys_role_user where role_id
+            in (select id from sys_role where code in ('jcry')))
+        </if>
+        <if test="type == 'csry'">
+            and id in (
+            select user_id from sys_role_user where role_id
+            in (select id from sys_role where code in ('jcry')))
+        </if>
+        <if test="type == 'shry'">
+            and id in (
+            select user_id from sys_role_user where role_id
+            in (select id from sys_role where code in ('jcry','zljdy','shry')))
+        </if>
+        <if test="type == 'pzry'">
+            and id in (
+            select user_id from sys_role_user where role_id
+            in (select id from sys_role where code in ('jcry','shry')))
+        </if>
     </select>
     <select id="getUsersName" resultType="java.lang.String">
         select real_name from sys_user WHERE id=${id}
diff --git a/zt/core/src/main/resources/mapper/workflow/WfRunTaskDao.xml b/zt/core/src/main/resources/mapper/workflow/WfRunTaskDao.xml
index c968d35..51bc5a8 100644
--- a/zt/core/src/main/resources/mapper/workflow/WfRunTaskDao.xml
+++ b/zt/core/src/main/resources/mapper/workflow/WfRunTaskDao.xml
@@ -41,10 +41,6 @@
             CONCAT( ',', #{deptIds}, ',' ) LIKE CONCAT( '%,', id, ',%' )
             )
         </if>
-
-        <if test="zyIds!=null and zyIds!=''">
-            AND CONCAT( ',', #{zyIds}, ',' ) LIKE CONCAT( '%,', teamgroup, ',%' )
-        </if>
     </select>
 
     <select id="getAssignUser" resultType="com.zt.core.sys.model.SysUser">
diff --git a/zt/core/src/main/resources/mapper/workflowconfig/WfDefStepDao.xml b/zt/core/src/main/resources/mapper/workflowconfig/WfDefStepDao.xml
index 308008c..29ada3b 100644
--- a/zt/core/src/main/resources/mapper/workflowconfig/WfDefStepDao.xml
+++ b/zt/core/src/main/resources/mapper/workflowconfig/WfDefStepDao.xml
@@ -139,6 +139,7 @@
 
         ) a
         LEFT JOIN sys_dept d ON a.company_id = d.id
+        WHERE a.id not in (select id from sys_role where code in ('xtglybm','xtbmybm','xtsjybm','rx'))
         ORDER BY d.name, a.sort
     </select>
 

--
Gitblit v1.9.1