jinlin
2024-01-23 52a302b11c08cbc564ff3931038ae57a305a95d6
修改
51个文件已修改
2个文件已添加
922 ■■■■ 已修改文件
core/src/main/java/com/zt/life/sys/service/SysOssConfigService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/baselineRelease/service/BaselineReleaseService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/service/ConfigAuditReportService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemOutbound/service/ConfigItemOutboundService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/dao/ConfigItemWarehouseDao.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/model/WarehouseAudit.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/service/ConfigItemWarehouseService.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/contractReview/service/ContractReviewService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/controller/ItemCirculatOrderController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/ProjectController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/dao/ProjectDao.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/dto/MyProjectRoleDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/model/SoftwareTestOrder.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/service/ProjectService.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/service/SoftwareTestOrderService.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskMeasureService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/testCheckOrder/service/TestCheckOrderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/service/TestReviewCommentService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/baselineRelease/BaselineReleaseDao.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/configAuditReport/ConfigAuditReportDao.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/configItemOutbound/ConfigItemChangeDao.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/configItemWarehouse/ConfigItemWarehouseDao.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/configItemWarehouse/WarehouseConfigItemDao.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/contractReview/ContractReviewDao.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderDao.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/project/EnvironDao.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/project/ProjectDao.xml 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/project/SoftwareTestOrderDao.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportDao.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskMeasureDao.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/testCheckOrder/TestCheckOrderDao.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/testReviewComment/TestReviewCommentDao.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
starter/src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/.env.development 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/.env.production 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/.env.production.sit 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/.env.production.uat 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/packages/components/zt-uploader/src/zt-uploader.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/public/index.html 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/report.20220119.103056.5416.0.001.json 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/components/table-uploader/src/table-uploader.vue 186 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/configItemChange/ConfigItemChange-AddOrUpdate.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/configItemOutbound/ConfigItemOutbound-AddOrUpdate.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/configItemWarehouse/ConfigItemWarehouse-AddOrUpdate.vue 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/project/SoftwareTestOrder-AddOrUpdate.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/riskTraceRecord/RiskTraceItem-AddOrUpdate.vue 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/riskTraceRecord/RiskTraceItem.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/sys/development/generator.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/java/com/zt/modules/workflow/service/WorkflowService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
core/src/main/java/com/zt/life/sys/service/SysOssConfigService.java
@@ -160,6 +160,7 @@
        return null;
    }
    /**
     * 修改附件http
     *
modules/mainPart/src/main/java/com/zt/life/modules/baselineRelease/service/BaselineReleaseService.java
@@ -81,7 +81,9 @@
    public List<BaselineRelease> page(QueryFilter queryFilter) {
        User user = UserContext.getUser();
        Integer secretClass = user.getSecretClass();
        Long deptId = user.getDeptId();
        queryFilter.getQueryParams().put("secretClass",secretClass);
        queryFilter.getQueryParams().put("deptId",deptId);
        List<BaselineRelease> list = baseDao.getList(queryFilter.getQueryParams());
        if (list.size() > 0) {
            workflowService.getRunFlow(list, "jxfb");
modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/service/ConfigAuditReportService.java
@@ -93,7 +93,9 @@
    public List<ConfigAuditReport> page(QueryFilter queryFilter) {
        User user = UserContext.getUser();
        Integer secretClass = user.getSecretClass();
        Long deptId = user.getDeptId();
        queryFilter.getQueryParams().put("secretClass",secretClass);
        queryFilter.getQueryParams().put("deptId",deptId);
        List<ConfigAuditReport> list = baseDao.getList(queryFilter.getQueryParams());
        if (list != null && list.size() > 0) {
            sysOssService.setListOsses(list, "config_audit_report");
modules/mainPart/src/main/java/com/zt/life/modules/configItemOutbound/service/ConfigItemOutboundService.java
@@ -102,7 +102,9 @@
    public List<ConfigItemOutbound> page(QueryFilter queryFilter) {
        User user = UserContext.getUser();
        Integer secretClass = user.getSecretClass();
        Long deptId = user.getDeptId();
        queryFilter.getQueryParams().put("secretClass",secretClass);
        queryFilter.getQueryParams().put("deptId",deptId);
        List<ConfigItemOutbound> list = baseDao.getList(queryFilter.getQueryParams());
        if (list.size() > 0) {
            workflowService.getRunFlow(list, "pzxck");
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/dao/ConfigItemWarehouseDao.java
@@ -2,7 +2,9 @@
import com.zt.common.dao.BaseDao;
import com.zt.life.modules.configItemWarehouse.model.ConfigItemWarehouse;
import com.zt.life.modules.configItemWarehouse.model.WarehouseAudit;
import com.zt.life.modules.configItemWarehouse.model.WarehouseCmAudit;
import com.zt.life.modules.configItemWarehouse.model.WarehouseQaAudit;
import org.apache.ibatis.annotations.Mapper;
@@ -21,5 +23,6 @@
    List<ConfigItemWarehouse> getList(Map<String, Object> params);
    List<WarehouseCmAudit> itemList(String dictType);
    List<WarehouseCmAudit> itemCmList(String dictType);
    List<WarehouseQaAudit> itemQaList(String dictType);
}
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/model/WarehouseAudit.java
New file
@@ -0,0 +1,37 @@
package com.zt.life.modules.configItemWarehouse.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zt.common.entity.BusiEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * warehouse_cm_audit
 *
 * @author zt generator
 * @since 1.0.0 2023-11-27
 */
@Data
@EqualsAndHashCode(callSuper=false)
public class WarehouseAudit extends BusiEntity {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "入库ID")
    private Long warehouseId;
    @ApiModelProperty(value = "序号")
    private Integer no;
    @ApiModelProperty(value = "检查项")
    private String examineItem;
    @ApiModelProperty(value = "检查结果")
    private String examineResult;
    @ApiModelProperty(value = "不适用说明")
    private String notApplyExplan;
}
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/service/ConfigItemWarehouseService.java
@@ -7,6 +7,7 @@
import com.zt.core.context.UserContext;
import com.zt.life.export.dto.WordFile;
import com.zt.life.export.service.WordFileService;
import com.zt.life.modules.baselineRelease.model.BaselineReleaseRemark;
import com.zt.life.modules.configItemWarehouse.dao.ConfigItemWarehouseDao;
import com.zt.life.modules.configItemWarehouse.dto.ConfigItemWarehouseDto;
import com.zt.life.modules.configItemWarehouse.model.ConfigItemWarehouse;
@@ -19,6 +20,7 @@
import com.zt.life.modules.project.service.ProjectService;
import com.zt.life.modules.testCheckOrder.model.TestCheckOrder;
import com.zt.life.modules.testCheckOrder.service.TestCheckOrderService;
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.oss.service.SysOssService;
@@ -93,7 +95,9 @@
    public List<ConfigItemWarehouse> page(QueryFilter queryFilter) {
        User user = UserContext.getUser();
        Integer secretClass = user.getSecretClass();
        Long deptId = user.getDeptId();
        queryFilter.getQueryParams().put("secretClass",secretClass);
        queryFilter.getQueryParams().put("deptId",deptId);
        List<ConfigItemWarehouse> list = baseDao.getList(queryFilter.getQueryParams());
        if (list.size() > 0) {
            workflowService.getRunFlow(list, "pzxrk");
@@ -214,12 +218,10 @@
            ConfigItemWarehouse configItemWarehouse = new ConfigItemWarehouse();
            configItemWarehouse.setLibraryType(libraryType);
            data.setConfigItemWarehouse(configItemWarehouse);
            List<?> cmList = baseDao.itemList("warehouse_cm_audit");
            List<?> CmAuditList = cmList;
            data.setCmAuditList((List<WarehouseCmAudit>) CmAuditList);
            List<?> qaList = baseDao.itemList("warehouse_qa_audit");
            List<?> QaAuditList = qaList;
            data.setQaAuditList((List<WarehouseQaAudit>) QaAuditList);
            List<?> cmList = this.itemCmList("warehouse_cm_audit");
            data.setCmAuditList((List<WarehouseCmAudit>) cmList);
            List<?> qaList = this.itemQaList("warehouse_qa_audit");
            data.setQaAuditList((List<WarehouseQaAudit>) qaList);
            List<?> resultList = new ArrayList<>();
            if ("1".equals(libraryType)) {
                List<String> srcId = technicalService.getsrcId(projectId);
@@ -241,6 +243,13 @@
        return data;
    }
    public List<WarehouseCmAudit> itemCmList(String dictType) {
        return baseDao.itemCmList(dictType);
    }
    public List<WarehouseQaAudit> itemQaList(String dictType) {
        return baseDao.itemQaList(dictType);
    }
    public void exportWarehouseOrder(Long id, HttpServletRequest request, HttpServletResponse response, String libraryType) {
        try {
            ConfigItemWarehouseDto dataObj = this.getDto(null, id, libraryType);
modules/mainPart/src/main/java/com/zt/life/modules/contractReview/service/ContractReviewService.java
@@ -87,7 +87,9 @@
    public List<ContractReview> page(QueryFilter queryFilter) {
        User user = UserContext.getUser();
        Integer secretClass = user.getSecretClass();
        Long deptId = user.getDeptId();
        queryFilter.getQueryParams().put("secretClass",secretClass);
        queryFilter.getQueryParams().put("deptId",deptId);
        List<ContractReview> list = baseDao.getList(queryFilter.getQueryParams());
        if (list.size() > 0) {
            sysOssService.setListOsses(list, "contract_review");
modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/controller/ItemCirculatOrderController.java
@@ -91,7 +91,7 @@
        map.put("funCode", "item_circulat_order");
        map.put("projectId",itemCirculatOrderDto.getProjectId().toString());
        itemCirculatOrderDto.getCirculatOrder().setCode(sysCodeRuleService.getNewCode(map));
        Boolean result = itemCirculatOrderService.save(itemCirculatOrderDto);
        Long result = itemCirculatOrderService.save(itemCirculatOrderDto);
        return Result.ok(itemCirculatOrderDto.getCirculatOrder().getId());
    }
@@ -101,9 +101,9 @@
    public Result<Long> update(@RequestBody ItemCirculatOrderDto itemCirculatOrderDto){
        //效验数据
        ValidatorUtils.validateEntity(itemCirculatOrderDto.getCirculatOrder(), UpdateGroup.class, DefaultGroup.class);
        Boolean result = itemCirculatOrderService.save(itemCirculatOrderDto);
        return Result.ok(itemCirculatOrderDto.getCirculatOrder().getId());
        Long result = itemCirculatOrderService.save(itemCirculatOrderDto);
//返回的是项目入库的ID
        return Result.ok(result);
    }
    @DeleteMapping("deleteCirculat")
modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java
@@ -2,11 +2,19 @@
import cn.hutool.core.convert.Convert;
import com.zt.common.service.BaseService;
import com.zt.common.utils.UUIDUtil;
import com.zt.core.context.User;
import com.zt.core.context.UserContext;
import com.zt.life.export.dto.WordFile;
import com.zt.life.export.service.WordFileService;
import com.zt.life.modules.configItemWarehouse.model.ConfigItemWarehouse;
import com.zt.life.modules.configItemWarehouse.model.WarehouseCmAudit;
import com.zt.life.modules.configItemWarehouse.model.WarehouseConfigItem;
import com.zt.life.modules.configItemWarehouse.model.WarehouseQaAudit;
import com.zt.life.modules.configItemWarehouse.service.ConfigItemWarehouseService;
import com.zt.life.modules.configItemWarehouse.service.WarehouseCmAuditService;
import com.zt.life.modules.configItemWarehouse.service.WarehouseConfigItemService;
import com.zt.life.modules.configItemWarehouse.service.WarehouseQaAuditService;
import com.zt.life.modules.itemCirculatOrder.dao.ItemCirculatOrderDao;
import com.zt.life.modules.itemCirculatOrder.dto.ItemCirculatOrderDto;
import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrder;
@@ -19,6 +27,7 @@
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.oss.model.SysOss;
import com.zt.modules.oss.service.SysOssService;
import com.zt.modules.workflow.dto.FlowInfoDto;
import com.zt.modules.workflow.service.WorkflowService;
@@ -30,6 +39,7 @@
import javax.servlet.http.HttpServletResponse;
import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -73,6 +83,17 @@
    @Autowired
    private GetFilesPath getFilesPath;
    @Autowired
    private ConfigItemWarehouseService configItemWarehouseService;
    @Autowired
    private WarehouseCmAuditService cmAuditService;
    @Autowired
    private WarehouseQaAuditService qaAuditService;
    @Autowired
    private WarehouseConfigItemService configItemService;
    /**
     * 分页查询
@@ -83,7 +104,9 @@
    public List<ItemCirculatOrder> page(QueryFilter queryFilter) {
        User user = UserContext.getUser();
        Integer secretClass = user.getSecretClass();
        Long deptId = user.getDeptId();
        queryFilter.getQueryParams().put("secretClass",secretClass);
        queryFilter.getQueryParams().put("deptId",deptId);
        List<ItemCirculatOrder> list = baseDao.getList(queryFilter.getQueryParams());
        if (list.size() > 0) {
            workflowService.getRunFlow(list, "wplz");
@@ -101,7 +124,11 @@
        super.deleteLogic(ids);
    }
    public Boolean save(ItemCirculatOrderDto itemCirculatOrderDto) {
    public Long save(ItemCirculatOrderDto itemCirculatOrderDto) {
        User user = UserContext.getUser();
        String userName=user.getRealName();
        String userNameId=user.getId().toString();
        Long configItemWarehouseId = 0L;
        Long circulatOrderId = itemCirculatOrderDto.getCirculatOrder().getId();
        if (circulatOrderId != null)
            baseDao.updateById(itemCirculatOrderDto.getCirculatOrder());
@@ -141,10 +168,72 @@
        if (flowInfoDto != null && flowInfoDto.getSubmitType() != null && "tj,bl".contains(flowInfoDto.getSubmitType())) {
            if ("tj".equals(flowInfoDto.getSubmitType())) {
                workflowService.startFlow(flowInfoDto.getFlowCode(), bizId);
            } else {
                if ("wplz_wprk".equals(flowInfoDto.getStepIdMark()) && "bl".equals(flowInfoDto.getSubmitType())) {
                    String Code = itemCirculatOrderDto.getCirculatOrder().getCode();
                    configItemWarehouseId = UUIDUtil.generateId();
                    ConfigItemWarehouse configItemWarehouse = new ConfigItemWarehouse();
                    configItemWarehouse.setId(configItemWarehouseId);
                    configItemWarehouse.setProjectId(itemCirculatOrderDto.getProjectId());
                    configItemWarehouse.setLibraryType("1");
                    Map<String, String> map = new HashMap<>();
                    map.put("funCode", "config_item_warehouse");
                    map.put("projectId", itemCirculatOrderDto.getProjectId().toString());
                    configItemWarehouse.setCode(sysCodeRuleService.getNewCode(map));
                    // insert
                    configItemWarehouseService.insert(configItemWarehouse);
                    Long WarehouseConfigItemId = 0L;
                    for (int i = 0; i < itemCirculatOrderDto.getTechnicalList().size(); i++) {
                        ItemCirculatOrderTechnical circulatOrderTechnical = itemCirculatOrderDto.getTechnicalList().get(i);
                        Long circulatOrderTechnicalId = circulatOrderTechnical.getId();
                        WarehouseConfigItemId = UUIDUtil.generateId();
                        WarehouseConfigItem warehouseConfigItem = new WarehouseConfigItem();
                        warehouseConfigItem.setId(WarehouseConfigItemId);
                        warehouseConfigItem.setProjectId(itemCirculatOrderDto.getProjectId());
                        warehouseConfigItem.setLibraryType("1");
                        warehouseConfigItem.setSrcId(circulatOrderTechnicalId);
                        warehouseConfigItem.setWarehouseId(configItemWarehouseId);
                        warehouseConfigItem.setNo(circulatOrderTechnical.getNo());
                        String itemName = circulatOrderTechnical.getName();
                        itemName = itemName.replace(Code, "");
                        warehouseConfigItem.setItemName(itemName);
                        warehouseConfigItem.setItemIdentify(circulatOrderTechnical.getName());
                        warehouseConfigItem.setVersion(circulatOrderTechnical.getVersion());
                        warehouseConfigItem.setSecretClass(circulatOrderTechnical.getSecretClass());
                        // insert
                        configItemService.insert(warehouseConfigItem);
                        List<SysOss> sysOssList = sysOssService.getSysOssByBusiIdAnd(circulatOrderTechnicalId, "circulat_order");
                        for (SysOss sysOss : sysOssList) {
                            sysOss.setId(UUIDUtil.generateId());
                            sysOss.setBusiId(WarehouseConfigItemId);
                            sysOss.setBusiType("config_item_warehouse");
                            sysOss.setBusiTypeName("配置项入库");
                            sysOss.setBusiField("config_item_warehouse");
                            sysOss.setBusiFieldName("配置项入库");
                            sysOssService.insert(sysOss);
                        }
                    }
                    List<WarehouseCmAudit> cmList = configItemWarehouseService.itemCmList("warehouse_cm_audit");
                    for (WarehouseCmAudit cmAudit : cmList) {
                        cmAudit.setWarehouseId(configItemWarehouseId);
                        cmAuditService.insert(cmAudit);
                    }
                    List<WarehouseQaAudit> qaList = configItemWarehouseService.itemQaList("warehouse_qa_audit");
                    for (WarehouseQaAudit qaAudit : qaList) {
                        qaAudit.setWarehouseId(configItemWarehouseId);
                        qaAuditService.insert(qaAudit);
                    }
                }
            }
            if ("wplz_wprk".equals(flowInfoDto.getStepIdMark())){
                itemCirculatOrderDto.getCirculatOrder().setIssueSituation("1");
                baseDao.updateById(itemCirculatOrderDto.getCirculatOrder());
            }
            workflowService.approvePass(flowInfoDto.getFlowCode(), bizId, flowInfoDto.getStepIdMark());
        }
        return true;
        return configItemWarehouseId;
    }
    public ItemCirculatOrderDto getDto(Long projectId, Long circulatOrderId) {
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/ProjectController.java
@@ -16,6 +16,7 @@
import com.zt.core.context.User;
import com.zt.core.context.UserContext;
import com.zt.core.sys.model.SysUser;
import com.zt.life.modules.project.dto.MyProjectRoleDto;
import com.zt.life.modules.project.dto.ProjectUserDto;
import com.zt.life.modules.project.model.Project;
import com.zt.life.modules.project.service.ProjectService;
@@ -75,16 +76,23 @@
            queryFilter.getParams().replace("tableName", "");
        }
        List<Project> Project = projectService.page(queryFilter);
        for (Project project2 :Project){
        for (Project project2 : Project) {
            String leaderName = project2.getProjectLeader();
            if (leaderName.length()>10){
                leaderName=sysUserService.getNames(leaderName);
            if (leaderName.length() > 10) {
                leaderName = sysUserService.getNames(leaderName);
            }
            project2.setProjectLeader(leaderName);
        }
        return PageResult.ok(Project);
    }
    @GetMapping("myProjectRole/{projectId}")
    @ApiOperation("获取当前用户的项目角色")
    public Result<MyProjectRoleDto> myProjectRole(@PathVariable("projectId") Long projectId) {
        MyProjectRoleDto data = projectService.getMyProjectRole(projectId);
        return Result.ok(data);
    }
    @GetMapping("{id}")
    @ApiOperation("信息")
    public Result<Project> get(@PathVariable("id") Long id) {
modules/mainPart/src/main/java/com/zt/life/modules/project/dao/ProjectDao.java
@@ -1,6 +1,7 @@
package com.zt.life.modules.project.dao;
import com.zt.common.dao.BaseDao;
import com.zt.life.modules.project.dto.MyProjectRoleDto;
import com.zt.life.modules.project.model.Project;
import org.apache.ibatis.annotations.Mapper;
@@ -20,4 +21,5 @@
    List<Project> getList(Map<String, Object> params);
    MyProjectRoleDto getMyProjectRole(Long projectId, Long userId);
}
modules/mainPart/src/main/java/com/zt/life/modules/project/dto/MyProjectRoleDto.java
New file
@@ -0,0 +1,19 @@
package com.zt.life.modules.project.dto;
import com.zt.core.sys.model.SysUser;
import lombok.Data;
import java.util.List;
@Data
public class MyProjectRoleDto {
    private boolean isZrr;
    private boolean isCsry;
    private boolean isShry;
    private boolean isPzry;
    private boolean isBmld;
    private boolean isWpgly;
    private boolean isZljdy;
    }
modules/mainPart/src/main/java/com/zt/life/modules/project/model/SoftwareTestOrder.java
@@ -268,4 +268,8 @@
    @TableField(exist = false)
    @ApiModelProperty(value = "样品状态字符串")
    String sampleStatusStr;
    @TableField(exist = false)
    @ApiModelProperty(value = "密级字符串")
    String secretClassStr;
}
modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironService.java
@@ -134,7 +134,9 @@
    public List<Environ> page(QueryFilter queryFilter) {
        User user = UserContext.getUser();
        Integer secretClass = user.getSecretClass();
        Long deptId = user.getDeptId();
        queryFilter.getQueryParams().put("secretClass",secretClass);
        queryFilter.getQueryParams().put("deptId",deptId);
        List<Environ> list = baseDao.getList(queryFilter.getQueryParams());
        if (list.size() > 0) {
            sysOssService.setListOsses(list, "test_environ");
modules/mainPart/src/main/java/com/zt/life/modules/project/service/ProjectService.java
@@ -4,11 +4,13 @@
import com.zt.core.context.User;
import com.zt.core.context.UserContext;
import com.zt.life.modules.project.dao.ProjectDao;
import com.zt.life.modules.project.dto.MyProjectRoleDto;
import com.zt.life.modules.project.model.Project;
import com.zt.modules.coderule.service.SysCodeRuleService;
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.HashMap;
import java.util.List;
@@ -18,11 +20,11 @@
/**
 * project
 *
 * @author zt generator
 * @author zt generator
 * @since 1.0.0 2023-11-07
 */
@Service
public class ProjectService  extends BaseService<ProjectDao, Project> {
public class ProjectService extends BaseService<ProjectDao, Project> {
    /**
     * 分页查询
     *
@@ -32,7 +34,9 @@
    public List<Project> page(QueryFilter queryFilter) {
        User user = UserContext.getUser();
        Integer secretClass = user.getSecretClass();
        queryFilter.getQueryParams().put("secretClass",secretClass);
        Long deptId = user.getDeptId();
        queryFilter.getQueryParams().put("secretClass", secretClass);
        queryFilter.getQueryParams().put("deptId", deptId);
        return baseDao.getList(queryFilter.getQueryParams());
    }
@@ -46,4 +50,9 @@
    }
    public MyProjectRoleDto getMyProjectRole(Long projectId) {
        Long userId = UserContext.getUser().getId();
        MyProjectRoleDto data = baseDao.getMyProjectRole(projectId, userId);
        return data;
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/project/service/SoftwareTestOrderService.java
@@ -1,5 +1,6 @@
package com.zt.life.modules.project.service;
import cn.hutool.core.convert.Convert;
import com.zt.common.service.BaseService;
import com.zt.common.utils.CommonUtils;
import com.zt.core.context.User;
@@ -22,10 +23,12 @@
import com.zt.modules.coderule.service.SysCodeRuleService;
import com.zt.modules.oss.service.SysOssService;
import com.zt.modules.sys.service.SysDictTypeService;
import org.apache.tomcat.util.bcel.classfile.Constant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zt.common.db.query.QueryFilter;
import javax.naming.Context;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileNotFoundException;
@@ -77,7 +80,9 @@
    public List<SoftwareTestOrder> page(QueryFilter queryFilter) {
        User user = UserContext.getUser();
        Integer secretClass = user.getSecretClass();
        Long deptId = user.getDeptId();
        queryFilter.getQueryParams().put("secretClass",secretClass);
        queryFilter.getQueryParams().put("deptId",deptId);
        List<SoftwareTestOrder> list = baseDao.getList(queryFilter.getQueryParams());
        if (list != null && list.size() > 0) {
            sysOssService.setListOsses(list, "test_order");
@@ -169,12 +174,10 @@
            String projectCode = project.getCode();
            String softIdentity =project.getSoftwareIdentity();
            List<?> testItemResult = baseDao.dictList("testItem_type", projectCode,softIdentity);
            List<?> measuredList = testItemResult;
            data.setMeasuredList((List<SoftwareTestOrderMeasured>) measuredList);
            data.setMeasuredList((List<SoftwareTestOrderMeasured>) testItemResult);
            List<?> productLibraryResult = baseDao.dictList("product_library_file", projectCode,null);
            List<?> deliverableList = productLibraryResult;
            data.setDeliverableList((List<SoftwareTestOrderDeliverable>) deliverableList);
            data.setDeliverableList((List<SoftwareTestOrderDeliverable>) productLibraryResult);
        }
        if (projectId != null) {
@@ -246,6 +249,9 @@
                measured.setIsMeasuredStr(isMeasuredStr);
            }
            String secretClass = getShowDictList.getShowDictList(dataObj.getProject().getSecretClass(), "secret_class", false);
            dataObj.getSoftwareTestOrder().setSecretClassStr(secretClass);
            String sortwareTypeStr = getShowDictList.getShowDictList(dataObj.getProject().getSoftwareType(), "software_type", false);
            dataObj.getSoftwareTestOrder().setSortwareTypeStr(sortwareTypeStr);
modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportService.java
@@ -86,7 +86,9 @@
    public List<QaAuditReport> page(QueryFilter queryFilter) {
        User user = UserContext.getUser();
        Integer secretClass = user.getSecretClass();
        Long deptId = user.getDeptId();
        queryFilter.getQueryParams().put("secretClass",secretClass);
        queryFilter.getQueryParams().put("deptId",deptId);
        List<QaAuditReport> list = baseDao.getList(queryFilter.getQueryParams());
        if (list != null && list.size() > 0) {
            workflowService.getRunFlow(list, "qashbg");
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskMeasureService.java
@@ -32,7 +32,9 @@
    public List<RiskMeasure> page(QueryFilter queryFilter) {
        User user = UserContext.getUser();
        Integer secretClass = user.getSecretClass();
        Long deptId = user.getDeptId();
        queryFilter.getQueryParams().put("secretClass",secretClass);
        queryFilter.getQueryParams().put("deptId",deptId);
        List<RiskMeasure> list = baseDao.getList(queryFilter.getQueryParams());
        return list;
    }
modules/mainPart/src/main/java/com/zt/life/modules/testCheckOrder/service/TestCheckOrderService.java
@@ -79,7 +79,9 @@
    public List<TestCheckOrder> page(QueryFilter queryFilter) {
        User user = UserContext.getUser();
        Integer secretClass = user.getSecretClass();
        Long deptId = user.getDeptId();
        queryFilter.getQueryParams().put("secretClass",secretClass);
        queryFilter.getQueryParams().put("deptId",deptId);
        List<TestCheckOrder> list = baseDao.getList(queryFilter.getQueryParams());
        if (list.size() > 0) {
            workflowService.getRunFlow(list, "csjcd");
modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/service/TestReviewCommentService.java
@@ -71,7 +71,9 @@
        pageCode=pageCode.replace("%","");
        User user = UserContext.getUser();
        Integer secretClass = user.getSecretClass();
        Long deptId = user.getDeptId();
        queryFilter.getQueryParams().put("secretClass",secretClass);
        queryFilter.getQueryParams().put("deptId",deptId);
        List<TestReviewComment> list = baseDao.getList(queryFilter.getQueryParams());
        if (list.size() > 0) {
            sysOssService.setListOsses(list, "test_review_comment_" + pageCode);
modules/mainPart/src/main/resources/mapper/baselineRelease/BaselineReleaseDao.xml
@@ -12,6 +12,9 @@
            <if test="secretClass!=null">
                and p.secret_class &lt;= #{secretClass}
            </if>
            <if test="deptId!=null">
                and p.biz_dept_id = #{deptId}
            </if>
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
modules/mainPart/src/main/resources/mapper/configAuditReport/ConfigAuditReportDao.xml
@@ -12,6 +12,9 @@
            <if test="secretClass!=null">
                and p.secret_class &lt;= #{secretClass}
            </if>
            <if test="deptId!=null">
                and p.biz_dept_id = #{deptId}
            </if>
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
modules/mainPart/src/main/resources/mapper/configItemOutbound/ConfigItemChangeDao.xml
@@ -12,6 +12,9 @@
            <if test="secretClass!=null">
                and p.secret_class &lt;= #{secretClass}
            </if>
            <if test="deptId!=null">
                and p.biz_dept_id = #{deptId}
            </if>
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
modules/mainPart/src/main/resources/mapper/configItemWarehouse/ConfigItemWarehouseDao.xml
@@ -12,6 +12,9 @@
            <if test="secretClass!=null">
                and p.secret_class &lt;= #{secretClass}
            </if>
            <if test="deptId!=null">
                and p.biz_dept_id = #{deptId}
            </if>
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
@@ -20,7 +23,22 @@
            ORDER BY ${orderBySql}
        </if>
    </select>
    <select id="itemList" resultType="com.zt.life.modules.configItemWarehouse.model.WarehouseCmAudit">
    <select id="itemCmList" resultType="com.zt.life.modules.configItemWarehouse.model.WarehouseCmAudit">
        SET @row_number = 0;
        SELECT dd.dict_label AS examineItem,
        (@row_number := @row_number + 1) AS no
        FROM sys_dict_type dt
        JOIN sys_dict_data dd ON dt.id = dd.dict_type_id
        <where>
            dd.is_delete = 0
            <if test="dictType != null and dictType != ''">
                and dt.DICT_TYPE = #{dictType}
            </if>
        </where>
        ORDER BY dd.sort
    </select>
    <select id="itemQaList" resultType="com.zt.life.modules.configItemWarehouse.model.WarehouseQaAudit">
        SET @row_number = 0;
        SELECT dd.dict_label AS examineItem,
        (@row_number := @row_number + 1) AS no
modules/mainPart/src/main/resources/mapper/configItemWarehouse/WarehouseConfigItemDao.xml
@@ -12,9 +12,7 @@
                and warehouse_id = ${warehouseId}
            </if>
        </where>
        <if test="orderBySql!=null">
            ORDER BY ${orderBySql}
        </if>
        ORDER BY `no`
    </select>
    <select id="itemList" resultType="com.zt.life.modules.configItemWarehouse.model.WarehouseConfigItem">
        SET @row_number = 0;
@@ -34,12 +32,13 @@
        </if>
        UNION
        SELECT (@row_number := @row_number + 1) AS no,
        NULL AS secretClass,
        p.secret_class,
        '软件测试委托单' AS itemName,
        NULL AS version,
        s.code AS itemIdentify,
        s.id as src_id
        FROM software_test_order s
        JOIN project p ON p.id = ${projectId}
        WHERE s.is_delete = 0
        AND s.project_id = ${projectId}
        <if test="ids!=null and ids!=''">
@@ -47,12 +46,13 @@
        </if>
        UNION
        SELECT (@row_number := @row_number + 1) AS no,
        NULL AS secretClass,
        p.secret_class,
        '物品流转单' AS itemName,
        NULL AS version,
        i.code AS itemIdentify,
        i.id as src_id
        FROM item_circulat_order i
        JOIN project p ON p.id = ${projectId}
        WHERE i.is_delete = 0
        AND i.project_id = ${projectId}
        <if test="ids!=null and ids!=''">
modules/mainPart/src/main/resources/mapper/contractReview/ContractReviewDao.xml
@@ -13,6 +13,9 @@
            <if test="secretClass!=null">
                and p.secret_class &lt;= #{secretClass}
            </if>
            <if test="deptId!=null">
                and p.biz_dept_id = #{deptId}
            </if>
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderDao.xml
@@ -10,6 +10,9 @@
        <if test="secretClass!=null">
            and p.secret_class &lt;= #{secretClass}
        </if>
        <if test="deptId!=null">
            and p.biz_dept_id = #{deptId}
        </if>
        <where>
            a.is_delete = 0 and p.is_delete = 0
            <if test="whereSql!=null">
modules/mainPart/src/main/resources/mapper/project/EnvironDao.xml
@@ -11,6 +11,9 @@
            <if test="secretClass!=null">
                and p.secret_class &lt;= #{secretClass}
            </if>
            <if test="deptId!=null">
                and p.biz_dept_id = #{deptId}
            </if>
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
modules/mainPart/src/main/resources/mapper/project/ProjectDao.xml
@@ -14,6 +14,9 @@
            <if test="secretClass!=null">
                and secret_class &lt;= #{secretClass}
            </if>
            <if test="deptId!=null">
                and biz_dept_id = #{deptId}
            </if>
            <if test="tableName!=null and tableName!=''">
                and id not in (select project_id from ${tableName} where is_delete = 0
                <if test="pageCode !=null and pageCode !='' ">
@@ -29,4 +32,81 @@
            ORDER BY ${orderBySql}
        </if>
    </select>
    <select id="getMyProjectRole" resultType="com.zt.life.modules.project.dto.MyProjectRoleDto">
        SELECT CASE
                   WHEN
                       concat(',', a.project_leader, ',') LIKE concat('%,', #{userId}, ',%') THEN
                       TRUE
                   ELSE FALSE
                   END AS isZrr,
               CASE
                   WHEN concat(',', a.project_testers, ',') LIKE concat('%,', #{userId}, ',%') THEN
                       TRUE
                   ELSE FALSE
                   END AS isCsry,
               CASE
                   WHEN concat(',', a.project_reviewer, ',') LIKE concat('%,', #{userId}, ',%') THEN
                       TRUE
                   ELSE FALSE
                   END AS isShry,
               CASE
                   WHEN concat(',', a.project_configer, ',') LIKE concat('%,', #{userId}, ',%') THEN
                       TRUE
                   ELSE FALSE
                   END AS isPzry,
               CASE
                   WHEN EXISTS(SELECT 1
                               FROM sys_user u,
                                    sys_role_user ru,
                                    sys_role r
                               WHERE u.id = 0
                                 AND u.DEPT_ID = a.biz_dept_id
                                 AND r.id = ru.role_id
                                 and r.code = 'zr'
                                 AND ru.user_id = ${userId}
                                 AND u.IS_DELETE = 0
                                 AND ru.IS_DELETE = 0
                                 AND r.IS_DELETE = 0
                       ) THEN
                       TRUE
                   ELSE FALSE
                   END AS isBmld,
               CASE
                   WHEN EXISTS(SELECT 1
                               FROM sys_user u,
                                    sys_role_user ru,
                                    sys_role r
                               WHERE u.id = 0
                                 AND u.DEPT_ID = a.biz_dept_id
                                 AND r.id = ru.role_id
                                 and r.code = 'wpgly'
                                 AND ru.user_id = ${userId}
                                 AND u.IS_DELETE = 0
                                 AND ru.IS_DELETE = 0
                                 AND r.IS_DELETE = 0
                       ) THEN
                       TRUE
                   ELSE FALSE
                   END AS isWpgly,
               CASE
                   WHEN EXISTS(SELECT 1
                               FROM sys_user u,
                                    sys_role_user ru,
                                    sys_role r
                               WHERE u.id = 0
                                 AND u.DEPT_ID = a.biz_dept_id
                                 AND r.id = ru.role_id
                                 and r.code = 'zljd'
                                 AND ru.user_id = ${userId}
                                 AND u.IS_DELETE = 0
                                 AND ru.IS_DELETE = 0
                                 AND r.IS_DELETE = 0
                       ) THEN
                       TRUE
                   ELSE FALSE
                   END AS isZljdy
        FROM project a
        WHERE a.ID = ${projectId}
          AND a.is_delete = 0
    </select>
</mapper>
modules/mainPart/src/main/resources/mapper/project/SoftwareTestOrderDao.xml
@@ -12,6 +12,9 @@
            <if test="secretClass!=null">
                and p.secret_class &lt;= #{secretClass}
            </if>
            <if test="deptId!=null">
                and p.biz_dept_id = #{deptId}
            </if>
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportDao.xml
@@ -12,6 +12,9 @@
            <if test="secretClass!=null">
                and p.secret_class &lt;= #{secretClass}
            </if>
            <if test="deptId!=null">
                and p.biz_dept_id = #{deptId}
            </if>
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskMeasureDao.xml
@@ -12,6 +12,9 @@
            <if test="secretClass!=null">
                and p.secret_class &lt;= #{secretClass}
            </if>
            <if test="deptId!=null">
                and p.biz_dept_id = #{deptId}
            </if>
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
modules/mainPart/src/main/resources/mapper/testCheckOrder/TestCheckOrderDao.xml
@@ -12,6 +12,9 @@
            <if test="secretClass!=null">
                and p.secret_class &lt;= #{secretClass}
            </if>
            <if test="deptId!=null">
                and p.biz_dept_id = #{deptId}
            </if>
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
modules/mainPart/src/main/resources/mapper/testReviewComment/TestReviewCommentDao.xml
@@ -12,6 +12,9 @@
            <if test="secretClass!=null">
                and p.secret_class &lt;= #{secretClass}
            </if>
            <if test="deptId!=null">
                and p.biz_dept_id = #{deptId}
            </if>
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
starter/src/main/resources/application.yml
@@ -6,7 +6,7 @@
    min-spare-threads: 30
  port: 8050
  servlet:
    context-path: /life-protection
    context-path: /test-item
    session:
      cookie:
        http-only: true
@@ -120,7 +120,7 @@
zt:
  oss:
    type: local
    local-domain: http://127.0.0.1:8050/life-protection/
    local-domain: http://127.0.0.1:8050/test-item/
    local-path: D:/TestProjectFiles/ #附件存储目录
    local-qd-path: D:/TestProjectFiles/ #附件存储目录
    local-prefix: accessories #附件存储子目录
web/.env.development
@@ -1,4 +1,4 @@
NODE_ENV=development
VUE_APP_NODE_ENV=dev
VUE_APP_API_URL=http://localhost:8086/life-protection
VUE_APP_SOCKET_URL=ws://localhost:8086/life-protection/websocket
VUE_APP_API_URL=http://localhost:8050/test-item
VUE_APP_SOCKET_URL=ws://localhost:8050/test-item/websocket
web/.env.production
@@ -1,4 +1,4 @@
NODE_ENV=production
VUE_APP_NODE_ENV=prod
VUE_APP_API_URL=http://localhost:8086/life-protection
VUE_APP_SOCKET_URL=ws://localhost:8086/life-protection/websocket
VUE_APP_API_URL=http://localhost:8050/test-item
VUE_APP_SOCKET_URL=ws://localhost:8050/test-item/websocket
web/.env.production.sit
@@ -1,4 +1,4 @@
NODE_ENV=production
VUE_APP_NODE_ENV=prod:sit
VUE_APP_API_URL=http://localhost:8086/life-protection
VUE_APP_SOCKET_URL=ws://localhost:8086/life-protection/websocket
VUE_APP_API_URL=http://localhost:8050/test-item
VUE_APP_SOCKET_URL=ws://localhost:8050/test-item/websocket
web/.env.production.uat
@@ -1,4 +1,4 @@
NODE_ENV=production
VUE_APP_NODE_ENV=prod:uat
VUE_APP_API_URL=http://localhost:8086/life-protection
VUE_APP_SOCKET_URL=ws://localhost:8086/life-protection/websocket
VUE_APP_API_URL=http://localhost:8050/test-item
VUE_APP_SOCKET_URL=ws://localhost:8050/test-item/websocket
web/packages/components/zt-uploader/src/zt-uploader.vue
@@ -313,8 +313,7 @@
    inject: {
      elForm: {
        default: ''
      }
    },
      }},
    data() {
      return {
        isUpload: false,
@@ -376,7 +375,7 @@
              src: this.value.url,
              title: this.value.name
            })
          }
         }
        }
        return urls
      },
@@ -400,6 +399,7 @@
    watch: {
      // eslint-disable-next-line no-unused-vars
      value(val, oldval) {
        console.log(val,'zt-upload value(val')
        if (this.uploadList !== val) {
          this.uploadList = this.getUploadList(val)
          this.fileList = this.getUploadList(val)
@@ -950,6 +950,15 @@
      if (this.crop && this.$refs.cropper) {
        document.body.appendChild(this.$refs.cropper.$el)
      }
      if (this.value) {
        console.log(this.value,'zt-upload value(val')
        this.uploadList = this.getUploadList(this.value)
        this.fileList = this.getUploadList(this.value)
        if (this.fileList.length>0){
          console.log(this.fileList[0].status, 'val.files[0].status23')
          // alert('2222'+this.fileList[0].status)
        }
      }
    }
  }
</script>
web/public/index.html
@@ -219,8 +219,8 @@
    window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] = false; // 动态(菜单)路由是否已经添加的状态标示(用于判断是否需要重新拉取数据并进行动态添加操作)
    // 服务地址
    window.SITE_CONFIG['apiURL'] = 'http://' + location.hostname + ':8050/life-protection';
    window.SITE_CONFIG['apiURL2'] = 'http://' + location.hostname + ':8050/life-protection';
    window.SITE_CONFIG['apiURL'] = 'http://' + location.hostname + ':8050/test-item';
    window.SITE_CONFIG['apiURL2'] = 'http://' + location.hostname + ':8050/test-item';
    //window.SITE_CONFIG['apiURL2'] = 'http://'+location.hostname+':8066';
    //window.SITE_CONFIG['apiURL'] = '<%= process.env.VUE_APP_API_URL %>';
@@ -228,7 +228,7 @@
    // WebSocket地址
    window.SITE_CONFIG['socketURL'] = 'http://' + location.hostname + ':8050/life-protection';
    window.SITE_CONFIG['socketURL'] = 'http://' + location.hostname + ':8050/test-item';
    //window.SITE_CONFIG['socketURL'] ='<%= process.env.VUE_APP_SOCKET_URL %>';
  </script>
web/report.20220119.103056.5416.0.001.json
@@ -413,9 +413,9 @@
    "USERDOMAIN_ROAMINGPROFILE": "LAPTOP-FFJLI4DC",
    "USERNAME": "14539",
    "USERPROFILE": "C:\\Users\\14539",
    "VUE_APP_API_URL": "http://localhost:8086/life-protection",
    "VUE_APP_API_URL": "http://localhost:8050/test-item",
    "VUE_APP_NODE_ENV": "dev",
    "VUE_APP_SOCKET_URL": "ws://localhost:8086/life-protection/websocket",
    "VUE_APP_SOCKET_URL": "ws://localhost:8050/test-item/websocket",
    "VUE_CLI_ENTRY_FILES": "[\"D:\\\\zhpt\\\\web\\\\src\\\\main.js\"]",
    "WEBPACK_DEV_SERVER": "true",
    "windir": "C:\\Windows",
@@ -467,4 +467,4 @@
    "C:\\Windows\\SYSTEM32\\dhcpcsvc.DLL",
    "\\\\?\\D:\\zhpt\\web\\node_modules\\_node-sass@4.14.1@node-sass\\vendor\\win32-x64-72\\binding.node"
  ]
}
}
web/src/components/table-uploader/src/table-uploader.vue
@@ -2,11 +2,12 @@
  <div>
    <div class="config-uploader1" v-if="oss">
      <div v-for="group in (oss.groups || [])" :key="group.busiFieldGroup">
         <zt-form-item v-for="field in group.fields" :prop="field.busiField"
                       :key="field.busiField" :rules="field.isRequired ? 'required':''" style="width: 100%;margin-bottom: 0">
           <zt-uploader v-model="dataForm[field.busiField]" multiple :limit="field.fileLimit" :file-type="field.fileType"
                        :accept="field.accept" :file-size="field.fileSize" @input="change(field.busiField)"/>
         </zt-form-item>
        <zt-form-item v-for="field in group.fields" :prop="field.busiField"
                      :key="field.busiField" :rules="field.isRequired ? 'required':''"
                      style="width: 100%;margin-bottom: 0">
          <zt-uploader v-model="dataForm[field.busiField]" multiple :limit="field.fileLimit" :file-type="field.fileType"
                       :accept="field.accept" :file-size="field.fileSize" @input="change(field.busiField)"/>
        </zt-form-item>
      </div>
    </div>
  </div>
@@ -14,107 +15,96 @@
</template>
<script>
export default {
  name: 'TableUploader',
  components: {},
  props: {
    value: Object,
    dataForm: Object,
    image:false,
    busiType: String // 业务类型
  },
  data() {
    return {
      activeNames: ['1'],
      oss: null
    }
  },
  computed: {
    fields() {
      let arr = []
      if (this.dataForm.files && this.dataForm.files.groups) {
        this.dataForm.files.groups.forEach(group => {
          group.fields.forEach(field => arr.push(field))
        })
      }
      return arr
    }
  },
  watch: {
    value(val, oldval) {
      if (JSON.stringify(val) !== JSON.stringify(oldval)) {
        this.oss = {
          ...this.getOss(),
          ...(val || {})
        }
        console.log(this.oss,"this.oss")
        // this.dataForm.files = this.oss
        this.$set(this.dataForm, 'files', this.oss)
        // 分解到每个字段给dataForm赋值
        this.fields.forEach(field => {
          // this.dataForm[field.busiField] = field.files
          this.$set(this.dataForm, field.busiField, field.files)
        })
        console.log(this.dataForm,'this.dataForm')
      }
    }
  },
  mounted() {
  import cloneDeep from "lodash/cloneDeep";
    this.oss = this.getOss()
    if (this.oss) {
      this.oss.groups.forEach(group => {
        this.activeNames.push(group.busiFieldGroup)
      })
      // this.dataForm.files = this.oss
      this.$set(this.dataForm, 'files', this.oss)
    }
  },
  methods: {
    getOss() {
      let arr = (this.$store.state.oss.configs || []).filter(config => config.busiType === this.busiType)
      if (arr.length > 0) {
        return JSON.parse(JSON.stringify(arr[0]))
      }
      return null
  export default {
    name: 'TableUploader',
    components: {},
    props: {
      value: Object,
      dataForm: Object,
      image: false,
      busiType: String // 业务类型
    },
    change(busiField) {
      console.log(busiField,'busiField busiField')
      this.fields.forEach(field => {
        if (field.busiField === busiField) {
          field.files.length = 0
          this.dataForm[busiField].forEach(file => {
            console.log(file,"change file")
            field.files.push(file)
    data() {
      return {
        activeNames: ['1'],
        oss: null
      }
    },
    computed: {
      fields() {
        let arr = []
        if (this.dataForm.files && this.dataForm.files.groups) {
          this.dataForm.files.groups.forEach(group => {
            group.fields.forEach(field => arr.push(field))
          })
        }
      })
    },
    getUploaderImg(list){
      // this.imageList = list
      if(list[0].url){
        this.$emit('getImageUrl',list[0].url)
        return arr
      }
    },
    mounted() {
      if (this.value)
        this.oss = this.value
      else
        this.oss = this.getOss()
      if (this.oss) {
        this.oss.groups.forEach(group => {
          this.activeNames.push(group.busiFieldGroup)
        })
        // this.dataForm.files = this.oss
        this.$set(this.dataForm, 'files', this.oss)
         this.fields.forEach(field => {
           // this.dataForm[field.busiField] = field.files
           this.$set(this.dataForm, field.busiField, field.files)
         })
      }
    },
    methods: {
      getOss() {
        let arr = (this.$store.state.oss.configs || []).filter(config => config.busiType === this.busiType)
        if (arr.length > 0) {
          return JSON.parse(JSON.stringify(arr[0]))
        }
        return null
      },
      change(busiField) {
        this.fields.forEach(field => {
          if (field.busiField === busiField) {
            field.files.length = 0
            this.dataForm[busiField].forEach(file => {
              field.files.push(file)
            })
          }
        })
      },
      getUploaderImg(list) {
        // this.imageList = list
        if (list[0].url) {
          this.$emit('getImageUrl', list[0].url)
        }
      }
    }
  }
}
</script>
<style>
.config-uploader1 label {
  width: 30px !important;
}
.config-uploader1 a{
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  width: 180px;
}
.config-uploader1 .zt-upload {
  line-height: 0;
}
.zt .el-upload-list__item .el-progress{
  top:15px !important;
}
  .config-uploader1 label {
    width: 30px !important;
  }
  .config-uploader1 a {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    width: 180px;
  }
  .config-uploader1 .zt-upload {
    line-height: 0;
  }
  .zt .el-upload-list__item .el-progress {
    top: 15px !important;
  }
</style>
web/src/views/modules/configItemChange/ConfigItemChange-AddOrUpdate.vue
@@ -359,10 +359,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;
      }
    },
web/src/views/modules/configItemOutbound/ConfigItemOutbound-AddOrUpdate.vue
@@ -211,10 +211,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;
      }
    },
web/src/views/modules/configItemWarehouse/ConfigItemWarehouse-AddOrUpdate.vue
@@ -92,6 +92,11 @@
                                    v-model="row.files"/>
                  </template>
                </el-table-column>
                <el-table-column v-if="stepMarker=='pzxrk_first'" fixed="right" label="操作" align="center">
                  <template slot-scope="scope">
                    <zt-table-button @click="deleteRow(scope.$index,scope.row.id)">删除</zt-table-button>
                  </template>
                </el-table-column>
              </el-table>
              <div v-if="showAddAndEdit && !dataForm.disabled" class="icon-container">
                <el-dropdown @command="handleCommand">
@@ -248,6 +253,7 @@
  import AddOrUpdateCheck from '../testCheckOrder/TestCheckOrder-AddOrUpdate'
  import qs from "qs";
  import Cookies from "js-cookie";
  import cloneDeep from "lodash/cloneDeep";
  export default {
    data() {
@@ -329,7 +335,7 @@
          console.log(row.libraryType,"row.libraryType")
          this.dataForm.configItemWarehouse.libraryType = row.libraryType
        }
        this.getInfo()
        this.getInfo2()
        if (!this.dataForm.disabled) {
          if (!row.stepMarker) {
            this.stepMarker = 'pzxrk_first'
@@ -372,17 +378,13 @@
        this.$set(row, 'checkId', checkId)
      },
      // 获取信息
      async getInfo() {
      async getInfo2() {
        let params = {
          warehouseId: this.dataForm.id,
          projectId: this.dataForm.projectId,
          libraryType:this.dataForm.configItemWarehouse.libraryType
        }
        let res = await this.$http.get(`/configItemWarehouse/ConfigItemWarehouse/getDto`, {params: params})
        this.dataForm = {
          ...this.dataForm,
          ...res.data
        }
        if (this.dataForm.project === null) {
          this.dataForm.project = {}
        }
@@ -392,7 +394,21 @@
        if (this.dataForm.flowInfoDto === null) {
          this.dataForm.flowInfoDto = {}
        }
        setTimeout(()=>{
          this.dataForm = {
            ...this.dataForm,
            ...res.data
          }
        },100)
        console.log(this.dataForm, "getInfo this.dataForm")
      },
      async deleteRow(index, id){
          if (await this.$tip.confirm(this.$t('prompt.info', {'handle': this.$t('delete')}))) {
            if (id != null) {
            let res = await this.$http.delete('/configItemWarehouse/WarehouseConfigItem/', {data: [id]})
          }
            this.dataForm.configItemList.splice(index, 1)
        }
      },
      async print(){
        var params = qs.stringify({
@@ -404,6 +420,19 @@
      },
      // 表单提交
      async formSubmit(submitType) {
        let isFiles = true;
        this.dataForm.configItemList.forEach(item => {
          console.log(item, "his.dataForm.technicalList.forEach")
          item.files.groups.forEach(groups => {
            groups.fields.forEach(files => {
              if (files.files.length === 0) {
                this.$alert("当前存在未上传附件的技术资料,请重新上传")
                isFiles = false
                return isFiles
              }
            })
          })
        })
        if (this.showColumn && submitType == 'bl') {
          for (let item of this.dataForm.configItemList) {
            if (item) {
@@ -414,7 +443,10 @@
            }
          }
        }
        if (submitType == 'tj' || submitType == 'bl') {
        if (submitType === 'tj' || submitType === 'bl') {
          if (!isFiles){
            return
          }
          let flowInfo = {
            flowCode: 'pzxrk',
            stepIdMark: this.stepMarker,
web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue
@@ -43,44 +43,49 @@
                  </el-table-column>
                  <el-table-column prop="infoName" min-width="180" label="技术资料名称">
                    <template v-slot="{ row }">
                      <el-input v-model="row.name" placeholder="技术资料名称"></el-input>
                      <el-input :disabled="stepMarker!=='wplz_first'" v-model="row.name" placeholder="技术资料名称"></el-input>
                    </template>
                  </el-table-column>
                  <el-table-column prop="identify" align="center" width="150" label="标识">
                    <template v-slot="{ row }">
                      <el-input v-model="row.version" placeholder="标识"></el-input>
                      <el-input :disabled="stepMarker!=='wplz_first'" v-model="row.version" placeholder="标识"></el-input>
                    </template>
                  </el-table-column>
                  <el-table-column prop="version" align="center" width="120" label="版本">
                    <template v-slot="{ row }">
                      <el-input v-model="row.identify" placeholder="版本"></el-input>
                      <el-input :disabled="stepMarker!=='wplz_first'" v-model="row.identify" placeholder="版本"></el-input>
                    </template>
                  </el-table-column>
                  <el-table-column prop="secretClass" label="密级" width="100" align="center">
                    <template v-slot="{ row }">
                      <!--                    <el-input v-model="row.secretClass" placeholder="密级"></el-input>-->
                      <zt-dict v-model="row.secretClass" dict="secret_class"></zt-dict>
                      <zt-dict :disabled="stepMarker!=='wplz_first'" v-model="row.secretClass" dict="secret_class"></zt-dict>
                    </template>
                  </el-table-column>
                  <el-table-column prop="medium" label="介质" width="100" align="center">
                    <template v-slot="{ row }">
                      <el-input v-model="row.medium" placeholder="介质"></el-input>
                      <el-input :disabled="stepMarker!=='wplz_first'" v-model="row.medium" placeholder="介质"></el-input>
                    </template>
                  </el-table-column>
                  <el-table-column prop="amount" label="数量" width="80" align="center">
                    <template v-slot="{ row }">
                      <el-input v-model="row.amount" placeholder="数量"></el-input>
                      <el-input :disabled="stepMarker!=='wplz_first'" v-model="row.amount" placeholder="数量"></el-input>
                    </template>
                  </el-table-column>
                  <el-table-column prop="remark" label="备注" width="100" align="center">
                    <template v-slot="{ row }">
                      <el-input v-model="row.remark" placeholder="备注"></el-input>
                      <el-input  :disabled="stepMarker!=='wplz_first'" v-model="row.remark" placeholder="备注"></el-input>
                    </template>
                  </el-table-column>
                  <el-table-column fixed="right" prop="files" label="上传附件" width="300" align="center">
                  <el-table-column  fixed="right" prop="files" label="上传附件" width="300" align="center">
                    <template v-slot="{ row }">
                      <table-uploader busi-type="circulat_order" model-name="row" :dataForm="row"
                                      v-model="row.files"/>
                    </template>
                  </el-table-column>
                  <el-table-column v-if="stepMarker=='wplz_first'" fixed="right" label="操作" align="center">
                    <template slot-scope="scope">
                      <zt-table-button @click="deleteRow(scope.$index,scope.row.id)">删除</zt-table-button>
                    </template>
                  </el-table-column>
                </el-table>
@@ -98,7 +103,8 @@
            <div style="width: calc(100% - 120px);">
              <div class="el-border-left">
                <el-form-item label="物品是否需要返还" label-width="150px" style="width:100%;padding-left:20px;margin-bottom:0">
                  <zt-dict :disabled="stepMarker!=='wplz_first'" v-model="dataForm.circulatOrder.itemRequire" :radio="true"
                  <zt-dict :disabled="stepMarker!=='wplz_first'" v-model="dataForm.circulatOrder.itemRequire"
                           :radio="true"
                           dict="is_or_not"></zt-dict>
                </el-form-item>
                <el-form-item label="物品的其他要求:" label-width="150px" style="width:100%;padding-left:20px;margin-bottom:0">
@@ -129,10 +135,12 @@
            </div>
            <div class="el-border-left " style="width: 35%;height: 80px;">
              <el-form-item label="是否完成病毒查杀" label-width="150px" style="padding-left:20px;margin-bottom:0">
                <zt-dict :disabled="stepMarker!=='wplz_first'" v-model="dataForm.circulatOrder.acceptSituation" :radio="true" dict="is_or_not"></zt-dict>
                <zt-dict :disabled="stepMarker!=='wplz_wpjs'" v-model="dataForm.circulatOrder.acceptSituation"
                         :radio="true" dict="is_or_not"></zt-dict>
              </el-form-item>
              <el-form-item label="病毒库版本:" label-width="150px" style="width:100%;padding-left:20px;margin-bottom:0">
                <el-input :disabled="stepMarker!=='wplz_first'" v-model="dataForm.circulatOrder.virusLibraryVersion"></el-input>
                <el-input :disabled="stepMarker!=='wplz_wpjs'"
                          v-model="dataForm.circulatOrder.virusLibraryVersion"></el-input>
              </el-form-item>
            </div>
          </div>
@@ -158,7 +166,8 @@
            </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 :disabled="stepMarker!=='wplz_jcjs'" v-model="dataForm.circulatOrder.detectAcceptSituation" :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>
@@ -185,7 +194,8 @@
            </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 :disabled="stepMarker!=='wplz_xzjc'" v-model="dataForm.circulatOrder.detectSituation" :radio="true" dict="is_or_not"></zt-dict>
                <zt-dict :disabled="stepMarker!=='wplz_xzjc'" v-model="dataForm.circulatOrder.detectSituation"
                         :radio="true" dict="is_or_not"></zt-dict>
              </el-form-item>
            </div>
          </div>
@@ -211,7 +221,8 @@
            </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 :disabled="stepMarker!=='wplz_wprk'" v-model="dataForm.circulatOrder.depositSituation" :radio="true" dict="is_or_not"></zt-dict>
                <zt-dict :disabled="stepMarker!=='wplz_wprk'" v-model="dataForm.circulatOrder.depositSituation"
                         :radio="true" dict="is_or_not"></zt-dict>
              </el-form-item>
            </div>
          </div>
@@ -237,7 +248,8 @@
            </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 :disabled="stepMarker!=='wplz_wpff'"v-model="dataForm.circulatOrder.issueSituation" :radio="true" dict="is_or_not"></zt-dict>
                <zt-dict :disabled="stepMarker!=='wplz_wpff'" v-model="dataForm.circulatOrder.issueSituation"
                         :radio="true" dict="is_or_not"></zt-dict>
              </el-form-item>
            </div>
          </div>
@@ -262,7 +274,6 @@
</template>
<script>
  import qs from "qs";
  import Cookies from "js-cookie";
@@ -282,9 +293,9 @@
            itemOther: '',
            acceptSituation: '',
            acceptDate: '',
            detectAcceptor:'',
            detectAcceptDate:'',
            detectAcceptSituation:'',
            detectAcceptor: '',
            detectAcceptDate: '',
            detectAcceptSituation: '',
            calibratDetector: '',
            detectDate: '',
            detectSituation: '',
@@ -295,8 +306,8 @@
            issueDate: '',
            issueSituation: '',
            remark: '',
            virusLibraryVersion:'',
            itemAcceptor:''
            virusLibraryVersion: '',
            itemAcceptor: ''
          },
          project: {
            softwareIdentity: '',
@@ -313,9 +324,9 @@
    components: {
      AddOrUpdate
    },
    computed:{
      getRoleName(){
        console.log(this.$store.state.user.roleName,'this.$store.state.user.roleName')
    computed: {
      getRoleName() {
        console.log(this.$store.state.user.roleName, 'this.$store.state.user.roleName')
        return this.$store.state.user.roleName || ''
      },
    },
@@ -324,22 +335,21 @@
        return index += 1
      },
      init(id, row) {
        console.log(id,row,'流转单的')
        console.log(id, row, '流转单的')
        if (id) {
          this.dataForm.id = id
        } else {
          this.dataForm.id = row.id
        }
        if(row.projectId){
          this.dataForm.projectId =row.projectId
        if (row.projectId) {
          this.dataForm.projectId = row.projectId
        }
        this.getInfo2()
        // this.dataForm.disabled
        this.getInfo()
        if (!this.dataForm.disabled) {
          if (!row.stepMarker) {
            this.stepMarker = 'wplz_first'
            this.title = '物品接收'
            this.title = '流转申请'
          } else {
            this.title = row.stepName
            this.stepMarker = row.stepMarker
@@ -354,8 +364,16 @@
          tableBody.scrollTop = tableBody.scrollHeight;
        })
      },
      async deleteRow(index, id) {
        if (await this.$tip.confirm(this.$t('prompt.info', {'handle': this.$t('delete')}))) {
          if (id != null) {
            let res = await this.$http.delete('/itemCirculatOrder/ItemCirculatOrderTechnical/', {data: [id]})
          }
          this.dataForm.technicalList.splice(index, 1)
        }
      },
      // 获取信息
      async getInfo() {
      async getInfo2() {
        let params = {
          circulatOrderid: this.dataForm.id,
          projectId: this.dataForm.projectId
@@ -365,32 +383,49 @@
          ...this.dataForm,
          ...res.data
        }
        if(this.dataForm.project === null){
          this.dataForm.project={}
        if (this.dataForm.project === null) {
          this.dataForm.project = {}
        }
        if(this.dataForm.circulatOrder === null){
          this.dataForm.circulatOrder={}
        if (this.dataForm.circulatOrder === null) {
          this.dataForm.circulatOrder = {}
        }
        if(this.dataForm.testAgencyInfo === null){
          this.dataForm.testAgencyInfo={}
        if (this.dataForm.testAgencyInfo === null) {
          this.dataForm.testAgencyInfo = {}
        }
        if(this.dataForm.flowInfoDto === null){
          this.dataForm.flowInfoDto={}
        if (this.dataForm.flowInfoDto === null) {
          this.dataForm.flowInfoDto = {}
        }
        console.log(this.dataForm, "getInfo this.dataForm")
      },
      async print(){
      async print() {
        var params = qs.stringify({
          token: Cookies.get('token'),
          id:this.dataForm.id
          id: this.dataForm.id
        })
        let apiURL = `/itemCirculatOrder/ItemCirculatOrder/exportCirculatOrder/`
        window.location.href = `${window.SITE_CONFIG['apiURL']}${apiURL}?${params}`
      },
      // 表单提交
      async formSubmit(submitType) {
        let isFiles = true;
        this.dataForm.technicalList.forEach(item => {
          console.log(item, "his.dataForm.technicalList.forEach")
          item.files.groups.forEach(groups => {
            groups.fields.forEach(files => {
              if (files.files.length === 0) {
                this.$alert("当前存在未上传附件的技术资料,请重新上传")
                isFiles = false
                return isFiles
              }
            })
          })
        })
        console.log(this.dataForm, "this.dataForm11111")
        if (submitType == 'tj' || submitType == 'bl') {
          if (!isFiles){
            return
          }
          let flowInfo = {
            flowCode: 'wplz',
            stepIdMark: this.stepMarker,
@@ -399,13 +434,16 @@
          this.dataForm.flowInfoDto = flowInfo;
        }
        let res = await this.$http[!this.dataForm.id ? 'post' : 'put']('/itemCirculatOrder/ItemCirculatOrder/', this.dataForm)
        if(this.stepMarker==='wplz_wprk'){
/*          alert(this.dataForm.projectId)*/
          this.$nextTick(()=>{
            this.$refs.addOrUpdate.$refs.dialog.init(null, {id: null, projectId: this.dataForm.projectId, libraryType: '1'})
          })
        }
        if (res.success) {
          if (this.stepMarker === 'wplz_wprk' && submitType == 'bl') {
            this.$nextTick(() => {
              this.$refs.addOrUpdate.$refs.dialog.init(null, {
                id: res.data,
                projectId: this.dataForm.projectId,
                libraryType: '1'
              })
            })
          }
          /*      if (submitType == 'tj') {
                      console.log(res, 'bbbb')
                      let res2 = await this.$http.get('/wf/startFlow', submitForm)
web/src/views/modules/project/SoftwareTestOrder-AddOrUpdate.vue
@@ -623,12 +623,12 @@
        })
      },
      async deleteDeliverableRow(index,id) {
        if (id != null) {
          if (await this.$tip.confirm(this.$t('prompt.info', {'handle': this.$t('delete')}))) {
            if (id != null) {
            let res = await this.$http.delete('/project/SoftwareTestOrderDeliverable/', {data: [id]})
          }
          this.dataForm.deliverableList.splice(index, 1)
        }
        this.dataForm.deliverableList.splice(index, 1)
      },
      addMeasuredRow() {
        this.dataForm.measuredList.push({})
@@ -638,12 +638,12 @@
        })
      },
      async deleteMeasuredRow(index, id) {
        if (id != null) {
          if (await this.$tip.confirm(this.$t('prompt.info', {'handle': this.$t('delete')}))) {
            if (id != null) {
            let res = await this.$http.delete('/project/SoftwareTestOrderMeasured/', {data: [id]})
          }
            this.dataForm.measuredList.splice(index, 1)
        }
        this.dataForm.measuredList.splice(index, 1)
      },
      async print() {
        var params = qs.stringify({
web/src/views/modules/riskTraceRecord/RiskTraceItem-AddOrUpdate.vue
@@ -38,54 +38,66 @@
            </div>
            <div  class=" el-border-left" style="width: 20%">
              <el-form-item class="form-margin-top-bottom">
                <el-input v-model="dataForm.riskMeasure.requireRiskTrackers" class="risk-form-padding"></el-input>
                <el-input v-if="dataForm.isCsry" v-model="dataForm.riskMeasure.requireRiskTrackers" class="risk-form-padding"></el-input>
                <span v-else>{{dataForm.riskMeasure.requireRiskTrackers}}</span>
              </el-form-item>
              <el-form-item class="form-margin-top-bottom">
                <el-date-picker
                  v-if="dataForm.isCsry"
                  class="risk-form-padding"
                  v-model="dataForm.riskMeasure.requireRiskDate"
                  type="date"
                  placeholder="选择日期">
                </el-date-picker>
                <span v-else>{{dataForm.riskMeasure.requireRiskDate}}</span>
              </el-form-item>
            </div>
            <div  class=" el-border-left" style="width: 20%">
              <el-form-item class="form-margin-top-bottom">
                <el-input v-model="dataForm.riskMeasure.designRiskTrackers" class="risk-form-padding"></el-input>
                <el-input v-if="dataForm.isCsry" v-model="dataForm.riskMeasure.designRiskTrackers" class="risk-form-padding"></el-input>
                <span v-else>{{dataForm.riskMeasure.designRiskTrackers}}</span>
              </el-form-item>
              <el-form-item class="form-margin-top-bottom">
                <el-date-picker
                  v-if="dataForm.isCsry"
                  class="risk-form-padding"
                  v-model="dataForm.riskMeasure.designRiskDate"
                  type="date"
                  placeholder="选择日期">
                </el-date-picker>
                <span v-else>{{dataForm.riskMeasure.designRiskDate}}</span>
              </el-form-item>
            </div>
            <div class=" el-border-left" style="width: 20%">
              <el-form-item class="form-margin-top-bottom">
                <el-input v-model="dataForm.riskMeasure.executeRiskTrackers" class="risk-form-padding"></el-input>
                <el-input v-if="dataForm.isCsry" v-model="dataForm.riskMeasure.executeRiskTrackers" class="risk-form-padding"></el-input>
                <span v-else>{{dataForm.riskMeasure.executeRiskTrackers}}</span>
              </el-form-item>
              <el-form-item class="form-margin-top-bottom">
                <el-date-picker
                  v-if="dataForm.isCsry"
                  class="risk-form-padding"
                  v-model="dataForm.riskMeasure.executeRiskDate"
                  type="date"
                  placeholder="选择日期">
                </el-date-picker>
                <span v-else>{{dataForm.riskMeasure.executeRiskDate}}</span>
              </el-form-item>
            </div>
            <div class=" el-border-left" style="width: 20%">
              <el-form-item class="form-margin-top-bottom">
                <el-input v-model="dataForm.riskMeasure.summaryRiskTrackers" class="risk-form-padding"></el-input>
                <el-input v-if="dataForm.isCsry" v-model="dataForm.riskMeasure.summaryRiskTrackers" class="risk-form-padding"></el-input>
                <span v-else>{{dataForm.riskMeasure.summaryRiskTrackers}}</span>
              </el-form-item>
              <el-form-item class="form-margin-top-bottom">
                <el-date-picker
                  v-if="dataForm.isCsry"
                  class="risk-form-padding"
                  v-model="dataForm.riskMeasure.summaryRiskDate"
                  type="date"
                  placeholder="选择日期">
                </el-date-picker>
                <span v-else>{{dataForm.riskMeasure.summaryRiskDate}}</span>
              </el-form-item>
            </div>
          </div>
@@ -99,16 +111,20 @@
                  采取措施:
                </div>
                <el-form-item class="form-margin-top-bottom el-border-left" style="width:22.25%" >
                  <el-input v-model="dataForm.riskMeasure.requireMeasure" class="risk-form-padding"></el-input>
                  <el-input v-if="dataForm.isCsry" v-model="dataForm.riskMeasure.requireMeasure" class="risk-form-padding"></el-input>
                  <span v-else>{{dataForm.riskMeasure.requireMeasure}}</span>
                </el-form-item>
                <el-form-item class="form-margin-top-bottom el-border-left" style="width:22.25%">
                  <el-input v-model="dataForm.riskMeasure.designMeasure" class="risk-form-padding"></el-input>
                  <el-input v-if="dataForm.isCsry" v-model="dataForm.riskMeasure.designMeasure" class="risk-form-padding"></el-input>
                  <span v-else>{{dataForm.riskMeasure.designMeasure}}</span>
                </el-form-item>
                <el-form-item class="form-margin-top-bottom el-border-left" style="width:22.25%">
                  <el-input v-model="dataForm.riskMeasure.executeMeasure" class="risk-form-padding"></el-input>
                  <el-input v-if="dataForm.isCsry" v-model="dataForm.riskMeasure.executeMeasure" class="risk-form-padding"></el-input>
                  <span v-else>{{dataForm.riskMeasure.executeMeasure}}</span>
                </el-form-item>
                <el-form-item class="form-margin-top-bottom el-border-left" style="width:22.25%">
                  <el-input v-model="dataForm.riskMeasure.summaryMeasure" class="risk-form-padding"></el-input>
                  <el-input v-if="dataForm.isCsry" v-model="dataForm.riskMeasure.summaryMeasure" class="risk-form-padding"></el-input>
                  <span v-else>{{dataForm.riskMeasure.summaryMeasure}}</span>
                </el-form-item>
              </div>
              <div class="el-risk-flex el-border-bottom ">
@@ -117,54 +133,66 @@
                </div>
                <div class=" el-border-left" style="width:22.25%">
                  <el-form-item class="form-margin-top-bottom">
                    <el-input v-model="dataForm.riskMeasure.requireRecorder" class="risk-form-padding"></el-input>
                    <el-input v-if="dataForm.isCsry" v-model="dataForm.riskMeasure.requireRecorder" class="risk-form-padding"></el-input>
                    <span v-else>{{dataForm.riskMeasure.requireRecorder}}</span>
                  </el-form-item>
                  <el-form-item class="form-margin-top-bottom">
                    <el-date-picker
                      v-if="dataForm.isCsry"
                      class="risk-form-padding"
                      v-model="dataForm.riskMeasure.requireRecordDate"
                      type="date"
                      placeholder="选择日期">
                    </el-date-picker>
                    <span v-else>{{dataForm.riskMeasure.requireRecordDate}}</span>
                  </el-form-item>
                </div>
                <div class=" el-border-left" style="width:22.25%">
                  <el-form-item class="form-margin-top-bottom">
                    <el-input v-model="dataForm.riskMeasure.designRecorder" class="risk-form-padding"></el-input>
                    <el-input v-if="dataForm.isCsry" v-model="dataForm.riskMeasure.designRecorder" class="risk-form-padding"></el-input>
                    <span v-else>{{dataForm.riskMeasure.designRecorder}}</span>
                  </el-form-item>
                  <el-form-item class="form-margin-top-bottom">
                    <el-date-picker
                      v-if="dataForm.isCsry"
                      class="risk-form-padding"
                      v-model="dataForm.riskMeasure.designRecordDate"
                      type="date"
                      placeholder="选择日期">
                    </el-date-picker>
                    <span v-else>{{dataForm.riskMeasure.designRecordDate}}</span>
                  </el-form-item>
                </div>
                <div class=" el-border-left" style="width:22.25%">
                  <el-form-item class="form-margin-top-bottom">
                    <el-input v-model="dataForm.riskMeasure.executeRecorder" class="risk-form-padding"></el-input>
                    <el-input v-if="dataForm.isCsry" v-model="dataForm.riskMeasure.executeRecorder" class="risk-form-padding"></el-input>
                    <span v-else>{{dataForm.riskMeasure.executeRecorder}}</span>
                  </el-form-item>
                  <el-form-item class="form-margin-top-bottom">
                    <el-date-picker
                      v-if="dataForm.isCsry"
                      class="risk-form-padding"
                      v-model="dataForm.riskMeasure.executeRecordDate"
                      type="date"
                      placeholder="选择日期">
                    </el-date-picker>
                    <span v-else>{{dataForm.riskMeasure.executeRecordDate}}</span>
                  </el-form-item>
                </div>
                <div class=" el-border-left" style="width:22.25%">
                  <el-form-item class="form-margin-top-bottom">
                    <el-input v-model="dataForm.riskMeasure.summaryRecorder" class="risk-form-padding"></el-input>
                    <el-input v-if="dataForm.isCsry" v-model="dataForm.riskMeasure.summaryRecorder" class="risk-form-padding"></el-input>
                    <span v-else>{{dataForm.riskMeasure.summaryRecorder}}</span>
                  </el-form-item>
                  <el-form-item class="form-margin-top-bottom">
                    <el-date-picker
                      v-if="dataForm.isCsry"
                      class="risk-form-padding"
                      v-model="dataForm.riskMeasure.summaryRecordDate"
                      type="date"
                      placeholder="选择日期">
                    </el-date-picker>
                    <span v-else>{{dataForm.riskMeasure.summaryRecordDate}}</span>
                  </el-form-item>
                </div>
              </div>
@@ -173,16 +201,20 @@
                  措施有效性评估:
                </div>
                <el-form-item class="form-margin-top-bottom el-border-left" style="width:22.25%">
                  <el-input v-model="dataForm.riskMeasure.requireEvaluate" class="risk-form-padding"></el-input>
                  <el-input v-if="dataForm.isBmld" v-model="dataForm.riskMeasure.requireEvaluate" class="risk-form-padding"></el-input>
                  <span v-else>{{dataForm.riskMeasure.requireEvaluate}}</span>
                </el-form-item>
                <el-form-item class="form-margin-top-bottom el-border-left" style="width:22.25%">
                  <el-input v-model="dataForm.riskMeasure.designEvaluate" class="risk-form-padding"></el-input>
                  <el-input v-if="dataForm.isBmld" v-model="dataForm.riskMeasure.designEvaluate" class="risk-form-padding"></el-input>
                  <span v-else>{{dataForm.riskMeasure.designEvaluate}}</span>
                </el-form-item>
                <el-form-item class="form-margin-top-bottom el-border-left" style="width:22.25%">
                  <el-input v-model="dataForm.riskMeasure.executeEvaluate" class="risk-form-padding"></el-input>
                  <el-input v-if="dataForm.isBmld" v-model="dataForm.riskMeasure.executeEvaluate" class="risk-form-padding"></el-input>
                  <span v-else>{{dataForm.riskMeasure.executeEvaluate}}</span>
                </el-form-item>
                <el-form-item class="form-margin-top-bottom el-border-left" style="width:22.25%">
                  <el-input v-model="dataForm.riskMeasure.summaryEvaluate" class="risk-form-padding"></el-input>
                  <el-input v-if="dataForm.isBmld" v-model="dataForm.riskMeasure.summaryEvaluate" class="risk-form-padding"></el-input>
                  <span v-else>{{dataForm.riskMeasure.summaryEvaluate}}</span>
                </el-form-item>
              </div>
              <div class="el-risk-flex ">
@@ -191,54 +223,66 @@
                </div>
                <div class=" el-border-left" style="width:22.25%">
                  <el-form-item class="form-margin-top-bottom">
                    <el-input v-model="dataForm.riskMeasure.requireLeader" class="risk-form-padding"></el-input>
                    <el-input v-if="dataForm.isBmld" v-model="dataForm.riskMeasure.requireLeader" class="risk-form-padding"></el-input>
                    <span v-else>{{dataForm.riskMeasure.requireLeader}}</span>
                  </el-form-item>
                  <el-form-item class="form-margin-top-bottom">
                    <el-date-picker
                      v-if="dataForm.isBmld"
                      class="risk-form-padding"
                      v-model="dataForm.riskMeasure.requireLeadDate"
                      type="date"
                      placeholder="选择日期">
                    </el-date-picker>
                    <span v-else>{{dataForm.riskMeasure.requireLeadDate}}</span>
                  </el-form-item>
                </div>
                <div class=" el-border-left" style="width:22.25%">
                  <el-form-item class="form-margin-top-bottom">
                    <el-input v-model="dataForm.riskMeasure.designLeader" class="risk-form-padding"></el-input>
                    <el-input v-if="dataForm.isBmld" v-model="dataForm.riskMeasure.designLeader" class="risk-form-padding"></el-input>
                    <span v-else>{{dataForm.riskMeasure.designLeader}}</span>
                  </el-form-item>
                  <el-form-item class="form-margin-top-bottom">
                    <el-date-picker
                      v-if="dataForm.isBmld"
                      class="risk-form-padding"
                      v-model="dataForm.riskMeasure.designLeadDate"
                      type="date"
                      placeholder="选择日期">
                    </el-date-picker>
                    <span v-else>{{dataForm.riskMeasure.designLeadDate}}</span>
                  </el-form-item>
                </div>
                <div class=" el-border-left" style="width:22.25%">
                  <el-form-item class="form-margin-top-bottom">
                    <el-input v-model="dataForm.riskMeasure.executeLeader" class="risk-form-padding"></el-input>
                    <el-input v-if="dataForm.isBmld" v-model="dataForm.riskMeasure.executeLeader" class="risk-form-padding"></el-input>
                    <span v-else>{{dataForm.riskMeasure.executeLeader}}</span>
                  </el-form-item>
                  <el-form-item class="form-margin-top-bottom">
                    <el-date-picker
                      v-if="dataForm.isBmld"
                      class="risk-form-padding"
                      v-model="dataForm.riskMeasure.executeLeadDate"
                      type="date"
                      placeholder="选择日期">
                    </el-date-picker>
                    <span v-else>{{dataForm.riskMeasure.executeLeadDate}}</span>
                  </el-form-item>
                </div>
                <div class=" el-border-left" style="width:22.25%">
                  <el-form-item class="form-margin-top-bottom">
                    <el-input v-model="dataForm.riskMeasure.summaryLeader" class="risk-form-padding"></el-input>
                    <el-input v-if="dataForm.isBmld" v-model="dataForm.riskMeasure.summaryLeader" class="risk-form-padding"></el-input>
                    <span v-else>{{dataForm.riskMeasure.summaryLeader}}</span>
                  </el-form-item>
                  <el-form-item class="form-margin-top-bottom">
                    <el-date-picker
                      v-if="dataForm.isBmld"
                      class="risk-form-padding"
                      v-model="dataForm.riskMeasure.summaryLeadDate"
                      type="date"
                      placeholder="选择日期">
                    </el-date-picker>
                    <span v-else>{{dataForm.riskMeasure.summaryLeadDate}}</span>
                  </el-form-item>
                </div>
              </div>
@@ -319,7 +363,9 @@
            softwareName: ''
          },
          riskList:[],
          itemList:[]
          itemList:[],
          isCsry:'',
          isBmld:'',
        }
      }
    },
@@ -335,6 +381,7 @@
        }
        // this.dataForm.disabled
        this.getInfo()
        this.getMyProjectRole()
        },
      // 获取信息
      async getInfo() {
@@ -348,6 +395,12 @@
          ...res.data
        }
      },
      async getMyProjectRole() {
        let res = await this.$http.get(`/project/Project/myProjectRole/${this.dataForm.projectId}`)
        console.log(res.data,"getMyProjectRole")
        this.dataForm.isCsry = res.data.csry
        this.dataForm.isBmld = res.data.bmld
      },
      async print() {
        var params = qs.stringify({
          token: Cookies.get('token'),
web/src/views/modules/riskTraceRecord/RiskTraceItem.vue
@@ -18,7 +18,7 @@
        </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 type="selection" align="center" width="40"/>
          <el-table-column prop="softwareName" label="项目名称"/>
          <el-table-column prop="softwareIdentity" label="项目标识"/>
          <zt-table-column-handle :table="table" edit-perm="riskTraceRecord:update"
web/src/views/modules/sys/development/generator.vue
@@ -3,7 +3,7 @@
    <div class="mod-sys__generator">
      <div class="mod-sys__user">
        <el-form :model="dataForm" label-width="80px" @keyup.enter.native="getDataList()">
        <el-form :model="dataForm" label-width="80px" @keyup.enter.native="getTableInfo()">
          <el-form-item>
            <el-input style="width: 30%;margin-right: 20px;" v-model="dataForm.tableName" placeholder="请输入表名" clearable></el-input>
            <el-button @click="getTableInfo()">查询</el-button>
zt/core/src/main/java/com/zt/modules/workflow/service/WorkflowService.java
@@ -315,7 +315,7 @@
                    insertFlowTaskData(taskParamDto);
                }
            }
            else if (currentStep.getTaskGroup() !=null && "pall,zrr,csr,shr,pzr".contains(currentStep.getTaskGroup())) {
            else if (StringUtils.isNotBlank(currentStep.getTaskGroup()) && "pall,zrr,csr,shr,pzr".contains(currentStep.getTaskGroup())) {
                String userList = null;
                if ("zrr".equals(currentStep.getTaskGroup())) {
                    userList = bizInfoDto.getZrr();