jinlin
2023-12-07 efc529af784bf35daf6e8d1d6108467cdcf8f663
修改
11个文件已修改
7个文件已添加
1189 ■■■■■ 已修改文件
modules/mainPart/src/main/java/com/zt/life/modules/configItemChange/controller/ConfigItemChangeController.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemChange/dao/ConfigItemChangeDao.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemChange/dto/ConfigItemChangeDto.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemChange/model/ConfigItemChange.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemChange/service/ConfigItemChangeService.java 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/controller/ConfigItemWarehouseController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/service/ConfigItemWarehouseService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/controller/ItemCirculatOrderController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/model/SoftwareTestOrder.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/testCheckOrder/controller/TestCheckOrderController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/testCheckOrder/service/TestCheckOrderService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/configItemChange/ConfigItemChange-AddOrUpdate.vue 507 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/configItemChange/ConfigItemChange.vue 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/configItemWarehouse/ConfigItemWarehouse-AddOrUpdate.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/sys/task/stay-task.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/testCheckOrder/TestCheckOrder-AddOrUpdate.vue 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/testCheckOrder/TestCheckOrder.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemChange/controller/ConfigItemChangeController.java
New file
@@ -0,0 +1,121 @@
package com.zt.life.modules.configItemChange.controller;
import com.zt.common.annotation.LogOperation;
import com.zt.common.annotation.QueryParam;
import com.zt.common.constant.Constant;
import com.zt.common.db.query.QueryFilter;
import com.zt.common.servlet.PageResult;
import com.zt.common.servlet.Result;
import com.zt.common.validator.AssertUtils;
import com.zt.common.validator.ValidatorUtils;
import com.zt.common.validator.group.AddGroup;
import com.zt.common.validator.group.DefaultGroup;
import com.zt.common.validator.group.UpdateGroup;
import com.zt.life.modules.configItemChange.dto.ConfigItemChangeDto;
import com.zt.life.modules.configItemChange.model.ConfigItemChange;
import com.zt.life.modules.configItemChange.service.ConfigItemChangeService;
import com.zt.life.modules.configItemWarehouse.model.WarehouseConfigItem;
import com.zt.life.sys.dto.OssDto;
import com.zt.life.sys.service.SysOssConfigService;
import com.zt.modules.coderule.service.SysCodeRuleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * config_item_warehouse
 *
 * @author zt generator
 * @since 1.0.0 2023-11-27
 */
@RestController
@RequestMapping("/configItemWarehouse/ConfigItemWarehouse/")
@Api(tags="config_item_warehouse")
public class ConfigItemChangeController {
    @Autowired
    private ConfigItemChangeService configItemChangeService;
    @Autowired
    private SysCodeRuleService sysCodeRuleService;
    @Autowired
    private SysOssConfigService sysOssConfigService;
    @GetMapping("page")
    @ApiOperation("分页")
    @ApiImplicitParams({
        @ApiImplicitParam(name = Constant.Q.PAGE, value = Constant.QV.PAGE, required = true, dataType = Constant.QT.INT),
        @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT),
        @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING),
        @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING),
        @ApiImplicitParam(name = "code", value = "配置项入库编号", dataType = Constant.QT.STRING, format = "a.code^LK"),
        @ApiImplicitParam(name = "projectCode", value = "项目编号", dataType = Constant.QT.STRING, format = "p.code^EQ"),
        @ApiImplicitParam(name = "softwareName", value = "项目名称", dataType = Constant.QT.STRING, format = "p.software_name^EQ"),
        @ApiImplicitParam(name = "libraryType", value = "库类型", dataType = Constant.QT.STRING, format = "a.library_type^EQ")    })
    public PageResult<ConfigItemChange> page(@ApiIgnore @QueryParam QueryFilter queryFilter){
        List<ConfigItemChange> configItemChange = configItemChangeService.page(queryFilter);
        return PageResult.ok(configItemChange);
    }
    @GetMapping("getDto")
    @ApiOperation("信息")
    public Result<ConfigItemChangeDto> getDto(Long projectId, Long warehouseId) {
        ConfigItemChangeDto data = configItemChangeService.getDto(projectId, warehouseId);
        if (warehouseId!=null) {
            for (WarehouseConfigItem configItem  : data.getConfigItemList()) {
                Long configItemId = configItem.getId();
                OssDto ossDto = sysOssConfigService.getOssByBusiType(configItemId, "config_item_warehouse");
                if (ossDto != null) {
                    configItem.setFiles(ossDto);
                }
            }
        }
        return Result.ok(data);
    }
    @PostMapping
    @ApiOperation("新增")
    @LogOperation("新增")
    public Result insert(@RequestBody ConfigItemChangeDto configItemDto){
        //效验数据
        ValidatorUtils.validateEntity(configItemDto, AddGroup.class, DefaultGroup.class);
        Map<String, String> map = new HashMap<>();
        map.put("funCode", "config_item_warehouse");
        map.put("projectId",configItemDto.getProjectId().toString());
        configItemDto.getConfigItemChange().setCode(sysCodeRuleService.getNewCode(map));
        Boolean result = configItemChangeService.save(configItemDto);
        return Result.ok();
    }
    @PutMapping
    @ApiOperation("修改")
    @LogOperation("修改")
    public Result update(@RequestBody ConfigItemChangeDto configItemDto){
        //效验数据
        ValidatorUtils.validateEntity(configItemDto, UpdateGroup.class, DefaultGroup.class);
        Boolean result = configItemChangeService.save(configItemDto);
        return Result.ok();
    }
    @DeleteMapping("deleteConfigItem")
    @ApiOperation("删除")
    @LogOperation("删除")
    public Result delete(@RequestBody Long[] ids){
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        configItemChangeService.delete(ids);
        return Result.ok();
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/configItemChange/dao/ConfigItemChangeDao.java
New file
@@ -0,0 +1,25 @@
package com.zt.life.modules.configItemChange.dao;
import com.zt.common.dao.BaseDao;
import com.zt.life.modules.configItemChange.model.ConfigItemChange;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
/**
 * config_item_warehouse
 *
 * @author zt generator
 * @since 1.0.0 2023-11-27
 */
@Mapper
public interface ConfigItemChangeDao extends BaseDao<ConfigItemChange> {
    List<ConfigItemChange> getList(Map<String, Object> params);
    List<WarehouseCmAudit> itemList(String dictType);
    String checkIdentify(String code,String projectCode);
}
modules/mainPart/src/main/java/com/zt/life/modules/configItemChange/dto/ConfigItemChangeDto.java
New file
@@ -0,0 +1,35 @@
package com.zt.life.modules.configItemChange.dto;
import com.zt.life.modules.configItemChange.model.ConfigItemChange;
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.project.model.Project;
import com.zt.modules.workflow.dto.FlowInfoDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class ConfigItemChangeDto {
    private Long id;
    private Long projectId;
    private Long warehouseId;
    @ApiModelProperty(value = "测试项目基本信息")
    private Project project;
    @ApiModelProperty(value = "配置项入库")
    private ConfigItemChange configItemChange;
    private FlowInfoDto flowInfoDto;
    @ApiModelProperty(value = "入库配置项")
    private List<WarehouseConfigItem> configItemList = new ArrayList<>();
    @ApiModelProperty(value = "CM审核")
    private List<WarehouseCmAudit> cmAuditList = new ArrayList<>();
    @ApiModelProperty(value = "QA审核")
    private List<WarehouseQaAudit> qaAuditList = new ArrayList<>();
}
modules/mainPart/src/main/java/com/zt/life/modules/configItemChange/model/ConfigItemChange.java
New file
@@ -0,0 +1,106 @@
package com.zt.life.modules.configItemChange.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zt.common.entity.BusiEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
 * config_item_warehouse
 *
 * @author zt generator
 * @since 1.0.0 2023-11-27
 */
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("config_item_warehouse")
public class ConfigItemChange extends BusiEntity {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "项目ID")
    private Long projectId;
    @ApiModelProperty(value = "配置项入库编号")
    private String code;
    @ApiModelProperty(value = "申请人")
    private String applicant;
    @ApiModelProperty(value = "申请日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date applyDate;
    @ApiModelProperty(value = "库类型")
    private String libraryType;
    @ApiModelProperty(value = "QA审核结果")
    private String qaAuditResults;
    @ApiModelProperty(value = "QA审核人")
    private String qaAuditor;
    @ApiModelProperty(value = "QA审核人ID")
    private String qaAuditorId;
    @ApiModelProperty(value = "QA审核日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date qaAuditDate;
    @ApiModelProperty(value = "CM审核结果")
    private String cmAuditResults;
    @ApiModelProperty(value = "CM审核人")
    private String cmAuditor;
    @ApiModelProperty(value = "CM审核人ID")
    private String cmAuditorId;
    @ApiModelProperty(value = "CM审核日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date cmAuditDate;
    @ApiModelProperty(value = "批准意见")
    private String approvalOpinions;
    @ApiModelProperty(value = "批准签字")
    private String approvalSign;
    @ApiModelProperty(value = "批准日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date approvalDate;
    @ApiModelProperty(value = "项目CM操作")
    private String projectCmOperations;
    @ApiModelProperty(value = "操作人")
    private String operator;
    @ApiModelProperty(value = "操作人ID")
    private String operatorId;
    @ApiModelProperty(value = "操作日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date operateDate;
    @ApiModelProperty(value = "备注")
    private String remark;
    @ApiModelProperty(value = "年份")
    private String year;
    @TableField(exist = false)
    @ApiModelProperty(value = "项目名称")
    private String softwareName;
    @TableField(exist = false)
    @ApiModelProperty(value = "项目编号")
    private String projectCode;
}
modules/mainPart/src/main/java/com/zt/life/modules/configItemChange/service/ConfigItemChangeService.java
New file
@@ -0,0 +1,203 @@
package com.zt.life.modules.configItemChange.service;
import com.zt.common.db.query.QueryFilter;
import com.zt.common.service.BaseService;
import com.zt.life.modules.configItemChange.dao.ConfigItemChangeDao;
import com.zt.life.modules.configItemChange.dto.ConfigItemChangeDto;
import com.zt.life.modules.configItemChange.model.ConfigItemChange;
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.WarehouseCmAuditService;
import com.zt.life.modules.configItemWarehouse.service.WarehouseConfigItemService;
import com.zt.life.modules.configItemWarehouse.service.WarehouseQaAuditService;
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.service.SysOssConfigService;
import com.zt.modules.coderule.service.SysCodeRuleService;
import com.zt.modules.oss.service.SysOssService;
import com.zt.modules.workflow.dto.FlowInfoDto;
import com.zt.modules.workflow.service.WorkflowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * config_item_warehouse
 *
 * @author zt generator
 * @since 1.0.0 2023-11-27
 */
@Service
public class ConfigItemChangeService extends BaseService<ConfigItemChangeDao, ConfigItemChange> {
    @Autowired
    private SysOssConfigService sysOssConfigService;
    @Autowired
    private SysOssService sysOssService;
    @Autowired
    private WorkflowService workflowService;
    @Autowired
    private SysCodeRuleService sysCodeRuleService;
    @Autowired
    private ProjectService projectService;
    @Autowired
    private WarehouseCmAuditService cmAuditService;
    @Autowired
    private WarehouseQaAuditService qaAuditService;
    @Autowired
    private WarehouseConfigItemService configItemService;
    @Autowired
    private TestCheckOrderService testCheckOrderService;
    /**
     * 分页查询
     *
     * @param queryFilter
     * @return
     */
    public List<ConfigItemChange> page(QueryFilter queryFilter) {
        return baseDao.getList(queryFilter.getQueryParams());
    }
    /**
     * 删除
     *
     * @param ids
     */
    public void delete(Long[] ids) {
        super.deleteLogic(ids);
    }
    public Boolean save(ConfigItemChangeDto configItemDto) {
        Long warehouseId = configItemDto.getConfigItemChange().getId();
        if (warehouseId != null)
            baseDao.updateById(configItemDto.getConfigItemChange());
        else {
            Map<String, String> map = new HashMap<>();
            map.put("funCode", "config_item_warehouse");
            map.put("projectId", configItemDto.getProjectId().toString());
            configItemDto.getConfigItemChange().setProjectId(configItemDto.getProjectId());
            configItemDto.getConfigItemChange().setCode(sysCodeRuleService.getNewCode(map));
            baseDao.insert(configItemDto.getConfigItemChange());
            warehouseId = configItemDto.getConfigItemChange().getId();
        }
        for (WarehouseConfigItem configItem : configItemDto.getConfigItemList()) {
            configItem.setWarehouseId(warehouseId);
            if (configItem.getId() != null) {
                if (configItem.getCheckId()!=null){
                    String code ="719CTC-09-ST";
                    String projectCode = configItemDto.getProject().getCode();
                    if (configItem.getItemName().equals("软件测试计划")){
                        code=code+"P";
                    }else if (configItem.getItemName().equals("软件测试说明")){
                        code=code+"D";
                    }else if (configItem.getItemName().equals("软件测试记录")){
                        code=code+"L";
                    }else if (configItem.getItemName().equals("软件测试报告")){
                        code=code+"R";
                    }
                    configItem.setItemIdentify(code+"-"+projectCode);
                }
                configItemService.update(configItem);
            } else {
                configItem.setWarehouseId(warehouseId);
                configItemService.insert(configItem);
            }
            Long checkId = configItem.getCheckId();
            if (checkId != null) {
                TestCheckOrder testCheckOrder = testCheckOrderService.get(checkId);
                if (testCheckOrder.getConfigItemId() == null) {
                    Long configItemId = configItem.getId();
                    testCheckOrder.setConfigItemId(configItemId);
                    testCheckOrderService.update(testCheckOrder);
                }
            }
            sysOssConfigService.updateOss(configItem.getId(), configItem.getFiles());// 保存附件
        }
        for (WarehouseCmAudit cmAudit : configItemDto.getCmAuditList()) {
            cmAudit.setWarehouseId(warehouseId);
            if (cmAudit.getId() != null) {
                cmAuditService.update(cmAudit);
            } else {
                cmAudit.setWarehouseId(warehouseId);
                cmAuditService.insert(cmAudit);
            }
        }
        for (WarehouseQaAudit qaAudit : configItemDto.getQaAuditList()) {
            qaAudit.setWarehouseId(warehouseId);
            if (qaAudit.getId() != null) {
                qaAuditService.update(qaAudit);
            } else {
                qaAudit.setWarehouseId(warehouseId);
                qaAuditService.insert(qaAudit);
            }
        }
        Long bizId = configItemDto.getConfigItemChange().getId();
        FlowInfoDto flowInfoDto = configItemDto.getFlowInfoDto();
        if (flowInfoDto != null && flowInfoDto.getSubmitType() != null && "tj,bl".contains(flowInfoDto.getSubmitType())) {
            if ("tj".equals(flowInfoDto.getSubmitType())) {
                workflowService.startFlow(flowInfoDto.getFlowCode(), bizId);
            }
            workflowService.approvePass(flowInfoDto.getFlowCode(), bizId, flowInfoDto.getStepIdMark());
        }
        return true;
    }
    public ConfigItemChangeDto getDto(Long projectId, Long warehouseId) {
        ConfigItemChangeDto data = new ConfigItemChangeDto();
        if (warehouseId != null) {
            data.setId(warehouseId);
            ConfigItemChange configItemChange = this.get(warehouseId);
            data.setConfigItemChange(configItemChange);
            if (projectId == null) {
                projectId = configItemChange.getProjectId();
            }
            List<WarehouseCmAudit> CmAuditList = cmAuditService.getList(warehouseId);
            data.setCmAuditList(CmAuditList);
            List<WarehouseQaAudit> QaAuditList = qaAuditService.getList(warehouseId);
            data.setQaAuditList(QaAuditList);
            List<WarehouseConfigItem> ConfigItemList = configItemService.getList(warehouseId);
            data.setConfigItemList(ConfigItemList);
        } else {
            ConfigItemChange configItemChange = new ConfigItemChange();
            data.setConfigItemChange(configItemChange);
            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<?> resultList = configItemService.ConfigItemList(projectId);
            List<?> ConfigItemList = resultList;
            data.setConfigItemList((List<WarehouseConfigItem>) ConfigItemList);
        }
        if (projectId != null) {
            data.setProjectId(projectId);
            data.setProject(projectService.get(projectId));
        }
        return data;
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/controller/ConfigItemWarehouseController.java
@@ -60,10 +60,10 @@
        @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT),
        @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING),
        @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING),
        @ApiImplicitParam(name = "code", value = "配置项入库编号", dataType = Constant.QT.STRING, format = "code^LK"),
        @ApiImplicitParam(name = "projectCode", value = "项目编号", dataType = Constant.QT.STRING, format = "code1^EQ"),
        @ApiImplicitParam(name = "softwareName", value = "项目名称", dataType = Constant.QT.STRING, format = "software_name^EQ"),
        @ApiImplicitParam(name = "libraryType", value = "库类型", dataType = Constant.QT.STRING, format = "library_type^EQ")    })
        @ApiImplicitParam(name = "code", value = "配置项入库编号", dataType = Constant.QT.STRING, format = "a.code^LK"),
        @ApiImplicitParam(name = "projectCode", value = "项目编号", dataType = Constant.QT.STRING, format = "p.code^EQ"),
        @ApiImplicitParam(name = "softwareName", value = "项目名称", dataType = Constant.QT.STRING, format = "p.software_name^EQ"),
        @ApiImplicitParam(name = "libraryType", value = "库类型", dataType = Constant.QT.STRING, format = "a.library_type^EQ")    })
    public PageResult<ConfigItemWarehouse> page(@ApiIgnore @QueryParam QueryFilter queryFilter){
        List<ConfigItemWarehouse> configItemWarehouse=configItemWarehouseService.page(queryFilter);
        return PageResult.ok(configItemWarehouse);
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/service/ConfigItemWarehouseService.java
@@ -103,6 +103,20 @@
        for (WarehouseConfigItem configItem : configItemDto.getConfigItemList()) {
            configItem.setWarehouseId(warehouseId);
            if (configItem.getId() != null) {
                if (configItem.getCheckId()!=null){
                    String code ="719CTC-09-ST";
                    String projectCode = configItemDto.getProject().getCode();
                    if (configItem.getItemName().equals("软件测试计划")){
                        code=code+"P";
                    }else if (configItem.getItemName().equals("软件测试说明")){
                        code=code+"D";
                    }else if (configItem.getItemName().equals("软件测试记录")){
                        code=code+"L";
                    }else if (configItem.getItemName().equals("软件测试报告")){
                        code=code+"R";
                    }
                    configItem.setItemIdentify(code+"-"+projectCode);
                }
                configItemService.update(configItem);
            } else {
                configItem.setWarehouseId(warehouseId);
modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/controller/ItemCirculatOrderController.java
@@ -65,9 +65,9 @@
        @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT),
        @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING),
        @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING),
        @ApiImplicitParam(name = "code", value = "物品流转单编号", dataType = Constant.QT.STRING, format = "code^LK"),
        @ApiImplicitParam(name = "softwareName", value = "物品名称", dataType = Constant.QT.STRING, format = "software_name^EQ"),
        @ApiImplicitParam(name = "softwareIdentity", value = "物品编号", dataType = Constant.QT.STRING, format = "software_identity^EQ")
        @ApiImplicitParam(name = "code", value = "物品流转单编号", dataType = Constant.QT.STRING, format = "a.code^LK"),
        @ApiImplicitParam(name = "softwareName", value = "物品名称", dataType = Constant.QT.STRING, format = "p.software_name^EQ"),
        @ApiImplicitParam(name = "softwareIdentity", value = "物品编号", dataType = Constant.QT.STRING, format = "p.software_identity^EQ")
    })
    public PageResult<ItemCirculatOrder> page(@ApiIgnore @QueryParam QueryFilter queryFilter){
modules/mainPart/src/main/java/com/zt/life/modules/project/model/SoftwareTestOrder.java
@@ -27,7 +27,6 @@
    @ApiModelProperty(value = "项目ID")
    private Long projectId;
    @ApiModelProperty(value = "委托单编号")
    private String code;
@@ -121,14 +120,14 @@
    @ApiModelProperty(value = "委托方签字日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private String entrustSignDate;
    private Date entrustSignDate;
    @ApiModelProperty(value = "承托方签字")
    private String contractSign;
    @ApiModelProperty(value = "承托方签字日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private String contractSignDate;
    private Date contractSignDate;
    @TableField(exist = false)
    @ApiModelProperty(value = "委托单位名称")
modules/mainPart/src/main/java/com/zt/life/modules/testCheckOrder/controller/TestCheckOrderController.java
@@ -56,11 +56,13 @@
            @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT),
            @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING),
            @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING),
            @ApiImplicitParam(name = "code", value = "编号", dataType = Constant.QT.STRING, format = "code^LK"),
            @ApiImplicitParam(name = "softwareidentity", value = "项目标识", dataType = Constant.QT.STRING, format = "softwareIdentity^LK"),
            @ApiImplicitParam(name = "softwarename", value = "项目名称", dataType = Constant.QT.STRING, format = "softwareName^LK")})
            @ApiImplicitParam(name = "code", value = "编号", dataType = Constant.QT.STRING, format = "a.code^LK"),
            @ApiImplicitParam(name = "softwareIdentity", value = "项目标识", dataType = Constant.QT.STRING, format = "p.software_identity^LK"),
            @ApiImplicitParam(name = "softwareName", value = "项目名称", dataType = Constant.QT.STRING, format = "p.software_name^LK"),
            @ApiImplicitParam(name = "pageCode", value = "配置项标识", dataType = Constant.QT.STRING, format = "a.page_code^LK")})
    public PageResult<TestCheckOrder> page(@ApiIgnore @QueryParam QueryFilter queryFilter) {
        return PageResult.ok(testCheckOrderService.page(queryFilter));
        List<TestCheckOrder> testCheckOrder =testCheckOrderService.page(queryFilter);
        return PageResult.ok(testCheckOrder);
    }
    @GetMapping("getDto")
modules/mainPart/src/main/java/com/zt/life/modules/testCheckOrder/service/TestCheckOrderService.java
@@ -80,7 +80,6 @@
            if (projectId == null) {
                projectId = checkOrder.getProjectId();
            }
            List<TestCheckOrderList> checkOrderList = checkOrderListService.getList(checkId);
            data.setCheckOrderList(checkOrderList);
web/src/views/modules/configItemChange/ConfigItemChange-AddOrUpdate.vue
New file
@@ -0,0 +1,507 @@
<template>
  <zt-dialog ref="dialog" column="3" :title="title" :stepMarker="stepMarker" @confirm="formSubmit">
    <el-form ref="dataForm" style="padding-top: 0" :inline="true" :disabled="dataForm.disabled" :model="dataForm"
             label-width="120px" class="warehouseFormAuto">
      <div>
        <el-form-item label-width="60px" label="编号:" style="width:100%;margin-bottom: -5px">
          <span>{{dataForm.configItemChange.code || '编号自动生成'}}</span>
        </el-form-item>
      </div>
      <div style="border: 1px solid rgba(0,0,0,.2);width: 99%">
        <div style="border-bottom: 1px solid rgba(0,0,0,.2);" class="warehouseContentWidth">
          <el-form-item class="marginTopAndMarginBottom" label="项目编号" style="width: 49%">
            <el-input v-model="dataForm.project.code" placeholder="请输入项目编号"></el-input>
          </el-form-item>
          <el-form-item class="marginTopAndMarginBottom" label="项目名称" style="width: 49%">
            <el-input v-model="dataForm.project.softwareName" placeholder="请输入项目名称"></el-input>
          </el-form-item>
          <el-form-item label="申请人" style="width: 49%">
            <el-input :disabled="stepMarker!=='pzxrk_first'" v-model="dataForm.configItemChange.applicant"
                      placeholder="请输入申请人"></el-input>
          </el-form-item>
          <el-form-item label="申请日期" style="width: 49%">
            <el-date-picker
              :disabled="stepMarker!=='pzxrk_first'"
              v-model="dataForm.configItemChange.applyDate"
              type="date"
              placeholder="请选择申请日期">
            </el-date-picker>
          </el-form-item>
          <el-form-item class="marginTopAndMarginBottom2" label="库类型" style="width: 99%">
            <zt-dict v-model="dataForm.configItemChange.libraryType" :radio="true" dict="library_type"></zt-dict>
          </el-form-item>
        </div>
        <div class="el-flexManageDialog el-border-bottom">
          <div class="DFormWidth DAlign DHold">
            入库配置项
          </div>
          <div class="el-border-left" style="width: calc(100% - 120px)">
            <div class="table-container">
              <el-table ref="tableConfigItemList" class="el-software el-margin-top-bot"
                        style="width: 99%;margin-left: 5px" border :data="dataForm.configItemList"
                        stripe>
                <el-table-column prop="no" align="center" width="60" label="序号">
                  <template slot-scope="scope">
                    <span v-html="indexFormat(scope.$index)"></span>
                  </template>
                </el-table-column>
                <el-table-column prop="itemName" width="200" label="配置项名称">
                  <template v-slot="{ row }">
                    <el-input v-if="showAddAndEdit" v-model="row.itemName" placeholder="配置项名称"></el-input>
                    <span v-else>{{row.itemName}}</span>
                  </template>
                </el-table-column>
                <el-table-column prop="itemDentify" align="center" min-width="290" label="配置项标识">
                  <template v-slot="{ row }">
                    <el-input  v-if="showAddAndEdit" v-model="row.itemIdentify" placeholder="配置项标识"></el-input>
                    <span v-else>{{row.itemIdentify}}</span>
                  </template>
                </el-table-column>
                <el-table-column prop="version" align="center" width="120" label="版本">
                  <template v-slot="{ row }">
                    <el-input  v-if="showAddAndEdit" v-model="row.version" placeholder="版本"></el-input>
                    <span v-else>{{row.version}}</span>
                  </template>
                </el-table-column>
                <el-table-column prop="retrospectVersion" label="上溯版" width="120" align="center">
                  <template v-slot="{ row }">
                    <el-input  v-if="showAddAndEdit" v-model="row.retrospectVersion" placeholder="上溯版"></el-input>
                    <span v-else>{{row.retrospectVersion}}</span>
                  </template>
                </el-table-column>
                <el-table-column prop="secretClass" label="密级" width="100" align="center">
                  <template v-slot="{ row }">
                    <zt-dict  :disabled="!showAddAndEdit" v-model="row.secretClass" placeholder="密级" dict="secret_class"
                             clearable></zt-dict>
                  </template>
                </el-table-column>
                <el-table-column v-if="showColumn" fixed="right" label="管理" width="100" align="center">
                  <template v-slot="{ row }">
                    <zt-table-button v-if="row.checkId"
                                     @click="openCheckOrderWin(row)">修改检查单
                    </zt-table-button>
                    <zt-table-button v-else-if="',软件测试计划,软件测试说明,软件测试记录,软件测试报告'.indexOf(row.itemName)>0"
                                     @click="openCheckOrderWin(row)">新增检查单
                    </zt-table-button>
                  </template>
                </el-table-column>
                <el-table-column fixed="right" prop="files" label="上传附件" width="240" align="center">
                  <template v-slot="{ row }">
                    <!--                    <zt-table-button @click="files(row.id)">上传附件</zt-table-button>-->
                    <table-uploader busi-type="config_item_warehouse" model-name="row" :dataForm="row"
                                    v-model="row.files"/>
                  </template>
                </el-table-column>
              </el-table>
              <div v-if="showAddAndEdit" class="icon-container">
                <el-dropdown @command="handleCommand">
                  <span class="el-dropdown-link">
                    <i class="el-icon-plus"></i>
                  </span>
                  <el-dropdown-menu slot="dropdown">
                    <el-dropdown-item v-for="item in menuOptions" :key="item.pageCode" :command="item.pageCode">
                      {{ item.name }}
                    </el-dropdown-item>
                  </el-dropdown-menu>
                </el-dropdown>
                <!-- 放置固定的图标 -->
                <!-- <i class="el-icon-plus"></i>-->
              </div>
            </div>
          </div>
        </div>
        <div class="el-flexManageDialog el-border-bottom">
          <div class="DFormWidth DAlign DHold">
            项目QA审核
          </div>
          <div class="el-border-left" style="width: calc(100% - 120px)">
            <el-table class="el-software el-margin-top-bot" style="width: 99%;margin-left: 5px" border
                      :data="dataForm.qaAuditList"
                      stripe>
              <el-table-column prop="no" align="center" width="80" label="序号"></el-table-column>
              <el-table-column prop="examineItem" min-width="300" label="检查项"></el-table-column>
              <el-table-column label="检查结果" width="250" align="center">
                <template slot-scope="scope">
                  <zt-dict :disabled="stepMarker!=='pzxrk_qash'" v-model="scope.row.examineResult" placeholder="检查结果"
                           dict="tristate2" :radio="true"
                           clearable></zt-dict>
                </template>
              </el-table-column>
              <el-table-column align="center" width="120" label="不适用说明">
                <template v-slot="{ row }">
                  <el-input v-if="stepMarker=='pzxrk_qash'" v-model="row.notApplyExplan" placeholder="不适用说明"></el-input>
                  <span v-else>{{row.notApplyExplan}}</span>
                </template>
              </el-table-column>
            </el-table>
            <div class="el-border-top">
              <el-form-item label="审核结果" style="width: 99%">
                <zt-dict :disabled="stepMarker!=='pzxrk_qash'" v-model="dataForm.configItemChange.qaAuditResults"
                         dict="is_pass" :radio="true"
                         clearable></zt-dict>
              </el-form-item>
              <el-form-item label="审核人:" style="width: 48%">
                <span>{{dataForm.configItemChange.qaAuditor}}</span>
              </el-form-item>
              <el-form-item label="审核日期:" style="width: 48%">
                <span>{{dataForm.configItemChange.qaAuditDate}}</span>
              </el-form-item>
            </div>
          </div>
        </div>
        <div class="el-flexManageDialog el-border-bottom">
          <div class="DFormWidth DAlign DHold">
            CM审核
          </div>
          <div class="el-border-left" style="width: calc(100% - 120px)">
            <el-table class="el-software el-margin-top-bot" style="width: 99%;margin-left: 5px" border
                      :data="dataForm.cmAuditList"
                      stripe>
              <el-table-column prop="no" align="center" width="80" label="序号"></el-table-column>
              <el-table-column prop="examineItem" min-width="300" label="检查项"></el-table-column>
              <el-table-column label="检查结果" width="250" align="center">
                <template slot-scope="scope">
                  <zt-dict :disabled="stepMarker!=='pzxrk_cmsh'" v-model="scope.row.examineResult" placeholder="检查结果"
                           dict="tristate2" :radio="true"
                           clearable></zt-dict>
                </template>
              </el-table-column>
              <el-table-column prop="notApplyExplan" align="center" width="120" label="不适用说明">
                <template v-slot="{ row }">
                  <el-input v-if="stepMarker=='pzxrk_cmsh'" v-model="row.notApplyExplan" placeholder="不适用说明"></el-input>
                  <span v-else>{{row.notApplyExplan}}</span>
                </template>
              </el-table-column>
            </el-table>
            <div class="el-border-top">
              <el-form-item label="审核结果" style="width: 99%">
                <zt-dict :disabled="stepMarker!=='pzxrk_cmsh'" v-model="dataForm.configItemChange.cmAuditResults"
                         placeholder="审核结果" dict="is_pass" :radio="true"
                         clearable></zt-dict>
              </el-form-item>
              <el-form-item label="审核人:" style="width: 48%">
                <span>{{dataForm.configItemChange.cmAuditor}}</span>
              </el-form-item>
              <el-form-item label="审核日期:" style="width: 48%">
                <span>{{dataForm.configItemChange.cmAuditDate}}</span>
              </el-form-item>
            </div>
          </div>
        </div>
        <div class="el-flexManageDialog el-border-bottom">
          <div class="DFormWidth DAlign DHold">
            批准意见
          </div>
          <div style="width: calc(100% - 120px)" class="el-border-left">
            <el-form-item class="el-wt-form-item-margin" label-width="20px" style="width: 85%">
              <zt-dict :disabled="stepMarker!=='pzxrk_bmsh'" v-model="dataForm.configItemChange.approvalOpinions"
                       dict="is_pass" :radio="true"
                       clearable></zt-dict>
            </el-form-item>
            <el-form-item label-width="80%" label="签字:" style="width: 65%">
              <span>{{dataForm.configItemChange.approvalSign}}</span>
            </el-form-item>
            <el-form-item label="日期:" style="width: 20%">
              <span>{{dataForm.configItemChange.approvalDate}}</span>
            </el-form-item>
          </div>
        </div>
        <div class="el-flexManageDialog el-border-bottom">
          <div class="DFormWidth DAlign DHold">
            项目CM操作
          </div>
          <div style="width: calc(100% - 120px)" class="el-border-left">
            <el-form-item class="el-CMTextarea" style="width: 100%;padding: 5px">
              <el-input v-if="stepMarker=='pzxrk_cmcz'" type="textarea" :rows="2" placeholder="请输入内容"
                        v-model="dataForm.configItemChange.projectCmOperations"></el-input>
              <span v-else>{{dataForm.configItemChange.projectCmOperations}}</span>
            </el-form-item>
            <el-form-item label-width="80%" label="操作人:" style="width: 65%">
              <span>{{dataForm.configItemChange.operator}}</span>
            </el-form-item>
            <el-form-item label="日期:" style="width: 20%">
              <span>{{dataForm.configItemChange.operateDate}}</span>
            </el-form-item>
          </div>
        </div>
        <div class="el-flexManageDialog">
          <div class="DFormWidth DAlign DHold">
            备注
          </div>
          <div style="width: calc(100% - 120px)" class="el-border-left">
            <el-form-item class="el-CMTextarea" style="width: 100%;padding: 5px">
              <el-input type="textarea" :rows="2" placeholder="请输入内容"
                        v-model="dataForm.configItemChange.remark"></el-input>
            </el-form-item>
          </div>
        </div>
      </div>
      <add-or-update-check ref="addOrUpdate" @recall="setCheckId"/>
    </el-form>
  </zt-dialog>
</template>
<script>
  import AddOrUpdateCheck from '../testCheckOrder/TestCheckOrder-AddOrUpdate'
  export default {
    data() {
      return {
        disabled: true,
        stepMarker: '',
        title: '查看',
        showColumn: false,
        showAddAndEdit:false,
        menuOptions: [
          {pageCode: 'plan', name: '软件测试计划',itemIdentify:''},
          {pageCode: 'explain', name: '软件测试说明'},
          {pageCode: 'record', name: '软件测试记录'},
          {pageCode: 'report', name: '软件测试报告'},
          {pageCode: 'other', name: '其他'}
        ],
        pageNameCode: {'软件测试计划': 'plan', '软件测试说明': 'explain', '软件测试记录': 'record', '软件测试报告': 'report'},
        dataForm: {
          id: '',
          configItemChange: {
            id: "",
            code: "",
            applicant: "",
            applyDate: "",
            libraryType: "",
            qaAuditResults: "",
            qaAuditor: "",
            qaAuditDate: "",
            cmAuditResults: "",
            cmAuditor: "",
            cmAuditDate: "",
            approvalOpinions: "",
            approvalSign: "",
            approvalDate: "",
            projectCmOperations: "",
            operator: "",
            operateDate: "",
            remark: "",
          },
          project: {
            code: '',
            softwareName: '',
          },
          cmAuditList: [],
          configItemList: [],
          qaAuditList: [],
          flowInfoDto: {}
        }
      }
    },
    created() {
      const roleName = localStorage.getItem('roleName')
      if (roleName && roleName.includes('QA')) {
        this.showColumn = true;
      }
      if (roleName && roleName.includes('测试员')) {
        this.showAddAndEdit = true;
      }
    },
    computed: {},
    components: {
      AddOrUpdateCheck
    },
    methods: {
      indexFormat(index) {
        return index += 1
      },
      init(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
        }
        this.getInfo()
        if (!this.dataForm.disabled) {
          if (!row.stepMarker) {
            this.stepMarker = 'pzxrk_first'
            this.title = '入库申请'
          } else {
            this.title = row.stepName
            this.stepMarker = row.stepMarker
          }
        }
        console.log(this.dataForm.id, this.dataForm.projectId, 'params params')
      },
      // addConfigItemWarehouseRow(){
      //   this.dataForm.configItemList.push({})
      //   this.$nextTick(()=>{
      //     const tableBody=this.$refs.tableConfigItemList.$el.querySelector('.el-table__body-wrapper')
      //     tableBody.scrollTop = tableBody.scrollHeight;
      //   })
      // },
      handleCommand(pageCode) {
        const selectedItem = this.menuOptions.find(item => item.pageCode === pageCode);
        console.log(selectedItem, "handleCommand(pageCode) selectedItem")
        if (selectedItem.pageCode === 'other') {
          this.dataForm.configItemList.push({})
        } else if (selectedItem) {
          this.dataForm.configItemList.push({itemName: selectedItem.name, pageCode: selectedItem.pageCode})
        }
        this.$nextTick(() => {
          const tableBody = this.$refs.tableConfigItemList.$el.querySelector('.el-table__body-wrapper')
          tableBody.scrollTop = tableBody.scrollHeight;
        })
      },
      openCheckOrderWin(row) {
        console.log(row, "openCheckOrderWin(row)")
        row.projectId = this.dataForm.projectId
        if (!row.pageCode) {
          if (!row.checkId) {
            row.checkId = -1
          }
          row.pageCode = this.pageNameCode[row.itemName]
          console.log(row.itemName, row.pageCode, "row.itemName,openCheckOrderWin(row) row.pageCode")
        }
        this.$refs.addOrUpdate.$refs.dialog.init(null, row)
      },
      setCheckId(checkId, row) {
        console.log(checkId, row, "setCheckId(checkId, row)")
        this.$set(row, 'checkId', checkId)
      },
      // 获取信息
      async getInfo() {
        let params = {
          warehouseId: this.dataForm.id,
          projectId: this.dataForm.projectId
        }
        let res = await this.$http.get(`/configItemChange/ConfigItemWarehouse/getDto`, {params: params})
        this.dataForm = {
          ...this.dataForm,
          ...res.data
        }
        if (this.dataForm.project === null) {
          this.dataForm.project = {}
        }
        if (this.dataForm.configItemChange === null) {
          this.dataForm.circulatOrder = {}
        }
        if (this.dataForm.flowInfoDto === null) {
          this.dataForm.flowInfoDto = {}
        }
        console.log(this.dataForm, "getInfo this.dataForm")
      },
      // 表单提交
      async formSubmit(submitType) {
        if (this.showColumn && submitType == 'bl') {
          for (let item of this.dataForm.configItemList) {
            if (item) {
              if (this.pageNameCode[item.itemName] && !item.checkId) {
                this.$alert("有未提交的检查单")
                return
              }
            }
          }
        }
        if (submitType == 'tj' || submitType == 'bl') {
          let flowInfo = {
            flowCode: 'pzxrk',
            stepIdMark: this.stepMarker,
            submitType: submitType
          }
          this.dataForm.flowInfoDto = flowInfo;
        }
        let res = await this.$http[!this.dataForm.id ? 'post' : 'put']('/configItemChange/ConfigItemWarehouse/', this.dataForm)
        if (res.success) {
          await this.$tip.success()
          this.$refs.dialog.close()
          this.$emit('refreshDataList')
        }
      }
    }
  }
</script>
<style>
  .ManageFormAuto {
    width: 70%;
    margin: 0 auto;
  }
  .confirmDAuto {
    border: 1px solid;
  }
  .el-flexManageDialog {
    display: flex;
    align-items: center;
  }
  .DFormWidth {
    width: 120px;
  }
  .DAlign {
    text-align: center;
  }
  .DManageForm {
    /*border-left: 1px solid;*/
    width: 100%;
  }
  .DManageForm > .el-form-item > .el-form-item__content {
    width: calc(100% - 120px);
  }
  .el-form-item.el-CMTextarea > .el-form-item__content {
    width: 100%;
  }
  .el-form .el-form-item.el-wt-form-item-margin {
    margin-left: 120px;
  }
  .el-form-border {
    border-top: 1px solid;
    border-bottom: 1px solid;
  }
  .el-margin-top-bot {
    margin-top: 5px;
    margin-bottom: 5px;
  }
  .zt .el-table.el-software th {
    background: transparent;
  }
  .zt .el-table.el-software th > .cell {
    font-weight: 500;
  }
  .DHold {
    font-weight: 600;
  }
  .zt .el-table.el-software {
    font-size: 14px;
  }
  .warehouseContentWidth > .el-form-item > .el-form-item__content {
    width: calc(100% - 120px);
  }
  .warehouseContentWidth > .el-form-item.lastChild > .el-form-item__content {
    width: calc(100% - 142px);
  }
  .warehouseFormAuto .marginTopAndMarginBottom {
    margin-top: 10px !important;
    margin-bottom: 0 !important;
  }
  .warehouseFormAuto .marginTopAndMarginBottom2 {
    margin-top: -10px !important;
    margin-bottom: 0 !important;
  }
</style>
web/src/views/modules/configItemChange/ConfigItemChange.vue
New file
@@ -0,0 +1,70 @@
<template>
  <div class="fa-card-a">
      <zt-table-wraper query-url="/configItemChange/ConfigItemWarehouse/page" delete-url="/configItemChange/ConfigItemWarehouse/deleteConfigItem" v-slot="{ table }">
        <el-form :inline="true" :model="dataForm" @keyup.enter.native="table.query()">
          <el-form-item>
            <el-input v-model="dataForm.code" placeholder="请输入配置项入库编号" clearable></el-input>
          </el-form-item>
          <el-form-item>
            <el-input v-model="dataForm.projectCode" placeholder="请输入项目编号" clearable></el-input>
          </el-form-item>
          <el-form-item>
            <el-input v-model="dataForm.softwareName" placeholder="请输入项目名称" clearable></el-input>
          </el-form-item>
          <el-form-item>
            <zt-dict v-model="dataForm.libraryType" dict="library_type" clearable></zt-dict>
          </el-form-item>
          <el-form-item>
            <zt-button type="query" @click="table.query()"/>
            <zt-button type="primary" class="el-icon-edit" perm="configItemChange:add" @click="add()">新增</zt-button>
            <zt-button type="delete" perm="configItemChange:delete" @click="table.deleteHandle()"/>
          </el-form-item>
        </el-form>
        <el-table v-loading="table.dataLoading" :data="table.dataList" height="100px" v-adaptive="{bottomOffset:70}" border @selection-change="table.selectionChangeHandle">
          <el-table-column align="center" type="selection" width="40"/>
            <el-table-column prop="code" label="配置项入库编号"/>
                <el-table-column prop="projectCode" label="项目编号"/>
                <el-table-column prop="softwareName" label="项目名称"/>
                <zt-table-column-dict prop="libraryType" label="库类型" dict="library_type"/>
              <zt-table-column-handle :table="table" edit-perm="configItemChange:update" delete-perm="configItemChange::delete"/>
        </el-table>
        <!-- 弹窗, 新增 / 修改 -->
        <add-or-update ref="addOrUpdate" @refreshDataList="table.query"/>
        <ProjectSelect ref="projectSelect"
                       @refreshDataList="table.query"
                       @setProjectInfo="openAddWin">
        </ProjectSelect>
      </zt-table-wraper>
  </div>
</template>
<script>
  import AddOrUpdate from './ConfigItemChange-AddOrUpdate'
  import ProjectSelect from "../project/Project-select";
  export default {
    data() {
      return {
        dataForm: {
          code: '',
          projectCode: '',
          softwareName: '',
          libraryType: ''
        }
      }
    },
    components: {
      AddOrUpdate,
      ProjectSelect
    },
    methods:{
      add() {
        this.$refs.projectSelect.$refs.dialog.init("config_item_warehouse")
      },
      openAddWin(row) {
        console.log(row.id, 'row.id')
        // this.$refs.addOrUpdate.$refs.dialog.init(null, {id: null, projectId: row.id})
        this.$refs.addOrUpdate.$refs.dialog.init(null, {id: null, projectId: row.id})
      },
    }
  }
</script>
web/src/views/modules/configItemWarehouse/ConfigItemWarehouse-AddOrUpdate.vue
@@ -250,7 +250,7 @@
        disabled: true,
        stepMarker: '',
        title: '查看',
        showColumn:false,
        showColumn: false,
        showAddAndEdit:false,
        menuOptions: [
          {pageCode: 'plan', name: '软件测试计划',itemIdentify:''},
@@ -259,7 +259,7 @@
          {pageCode: 'report', name: '软件测试报告'},
          {pageCode: 'other', name: '其他'}
        ],
        pageNameCode: {'软件测试计划':'plan', '软件测试说明': 'explain', '软件测试记录': 'record', '软件测试报告': 'report'},
        pageNameCode: {'软件测试计划': 'plan', '软件测试说明': 'explain', '软件测试记录': 'record', '软件测试报告': 'report'},
        dataForm: {
          id: '',
          configItemWarehouse: {
@@ -302,9 +302,7 @@
        this.showAddAndEdit = true;
      }
    },
    computed: {
    },
    computed: {},
    components: {
      AddOrUpdateCheck
    },
@@ -357,9 +355,12 @@
      openCheckOrderWin(row) {
        console.log(row, "openCheckOrderWin(row)")
        row.projectId = this.dataForm.projectId
        if (!row.pageCode){
        if (!row.pageCode) {
          if (!row.checkId) {
            row.checkId = -1
          }
          row.pageCode = this.pageNameCode[row.itemName]
          console.log(row.itemName,row.pageCode, "row.itemName,openCheckOrderWin(row) row.pageCode")
          console.log(row.itemName, row.pageCode, "row.itemName,openCheckOrderWin(row) row.pageCode")
        }
        this.$refs.addOrUpdate.$refs.dialog.init(null, row)
web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue
@@ -98,11 +98,11 @@
          <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">
                <el-input :disabled="stepMarker=='wplz_first'" v-model="dataForm.circulatOrder.itemOther"></el-input>
                <el-input :disabled="stepMarker!=='wplz_first'" v-model="dataForm.circulatOrder.itemOther"></el-input>
              </el-form-item>
            </div>
          </div>
@@ -129,10 +129,10 @@
          </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_first'" 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_first'" v-model="dataForm.circulatOrder.virusLibraryVersion"></el-input>
            </el-form-item>
          </div>
        </div>
@@ -185,7 +185,7 @@
          </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>
@@ -238,7 +238,7 @@
          </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>
web/src/views/modules/sys/task/stay-task.vue
@@ -219,7 +219,7 @@
        if (row.flowCode === 'wplz') {
          this.$refs.itemCirculatOrder.$refs.dialog.init(row.bizId, row)
        } else if (row.flowCode === 'pzxrk') {
          this.$refs.configItemWarehouse.$refs.dialog.init(row.bizId, row)
          this.$refs.configItemChange.$refs.dialog.init(row.bizId, row)
        }else if (row.flowCode === 'csjcd') {
          this.$refs.testCheckOrder.$refs.dialog.init(row.bizId, row)
        } else {
web/src/views/modules/testCheckOrder/TestCheckOrder-AddOrUpdate.vue
@@ -4,7 +4,7 @@
             label-width="120px" class="testCheckFormAuto">
      <div>
        <el-form-item label-width="60px" label="编号:" style="width:100%;margin-bottom: -5px">
          <span>{{dataForm.testCheckOrder.code || '编号自动生成'}}</span>
          <span>{{dataForm.checkOrder.code || '编号自动生成'}}</span>
        </el-form-item>
      </div>
      <div style="border: 1px solid rgba(0,0,0,.2);width: 99%">
@@ -16,12 +16,13 @@
            <el-input v-model="dataForm.project.softwareName" placeholder="项目名称"></el-input>
          </el-form-item>
          <el-form-item class="marginTopAndMarginBottom3" label="检查人" style="width: 49%">
            <el-input :disabled="stepMarker!=='csjcd_first'" v-model="dataForm.testCheckOrder.examiner" placeholder="检查人"></el-input>
            <el-input :disabled="stepMarker!=='csjcd_first'" v-model="dataForm.checkOrder.examiner"
                      placeholder="检查人"></el-input>
          </el-form-item>
          <el-form-item class="marginTopAndMarginBottom3" label="检查时间" style="width: 49%">
            <el-date-picker
              :disabled="stepMarker!=='csjcd_first'"
              v-model="dataForm.testCheckOrder.examDate"
              v-model="dataForm.checkOrder.examDate"
              type="date"
              placeholder="请选择检查时间">
            </el-date-picker>
@@ -40,9 +41,9 @@
                  </template>
                </el-table-column>
                <el-table-column prop="checkContent" min-width="180" label="主要检查内容">
<!--                  <template v-slot="{ row }">-->
<!--                    <el-input v-model="row.checkContent" placeholder="主要检查内容"></el-input>-->
<!--                  </template>-->
                  <!--                  <template v-slot="{ row }">-->
                  <!--                    <el-input v-model="row.checkContent" placeholder="主要检查内容"></el-input>-->
                  <!--                  </template>-->
                </el-table-column>
                <el-table-column prop="checkResult" align="center" width="180" label="检查结果">
                  <template v-slot="{ row }">
@@ -76,7 +77,7 @@
          <div class="el-border-left acceptDate" style="height: 80px;width: 80%;">
            <el-form-item style="width: 100%;padding-left:20px;margin:0;">
              <el-input type="textarea"
                        :rows="3" v-model="dataForm.testCheckOrder.problemDescription" placeholder="问题描述..."></el-input>
                        :rows="3" v-model="dataForm.checkOrder.problemDescription" placeholder="问题描述..."></el-input>
            </el-form-item>
          </div>
        </div>
@@ -87,7 +88,7 @@
          <div class="el-border-left acceptDate" style="height: 80px;width: 80%;">
            <el-form-item style="width: 100%;padding-left:20px;margin:0;">
              <el-input type="textarea"
                        :rows="3" v-model="dataForm.testCheckOrder.problemProcess" placeholder="问题处理..."></el-input>
                        :rows="3" v-model="dataForm.checkOrder.problemProcess" placeholder="问题处理..."></el-input>
            </el-form-item>
          </div>
        </div>
@@ -97,7 +98,7 @@
          </div>
          <div class="el-border-left-right acceptDate1" style="width: 40%;height: 40px;">
            <el-form-item style="width: 100%;padding-left:20px;margin:0;">
              <span>{{dataForm.testCheckOrder.processor}}</span>
              <span>{{dataForm.checkOrder.processor}}</span>
            </el-form-item>
          </div>
          <div style="width: 84px;text-align: center;font-weight: 600">
@@ -105,7 +106,7 @@
          </div>
          <div class="el-border-left acceptDate1" style="width: 40%;height: 40px;">
            <el-form-item label-width="150px" style="width: 100%;padding-left:20px;margin-bottom:0">
              <span>{{dataForm.testCheckOrder.verifier}}</span>
              <span>{{dataForm.checkOrder.verifier}}</span>
            </el-form-item>
          </div>
        </div>
@@ -132,7 +133,7 @@
            softwareIdentity: '',
            softwareName: '',
          },
          testCheckOrder: {
          checkOrder: {
            code: '',
            examiner: '',
            examDate: '',
@@ -149,7 +150,9 @@
      init(id, row) {
        this.configDetailRow = row
        if (row.checkId) {
          this.dataForm.id = row.checkId
          if (row.checkId != -1) {
            this.dataForm.id = row.checkId
          }
        } else if (id) {
          this.dataForm.id = id
        } else {
@@ -196,8 +199,8 @@
      },
      // 表单提交
      async formSubmit(submitType) {
        let isFlow = false
        if (submitType == 'tj') {
          let isFlow = false
          for (let item of this.dataForm.checkOrderList) {
            if (!item.checkResult) {
              this.$alert("有未填写的数据")
@@ -210,7 +213,7 @@
            submitType == ''
          }
        }
        if (submitType == 'tj' || submitType == 'bl' && isFlow) {
        if (submitType == 'tj' || submitType == 'bl') {
          let flowInfo = {
            flowCode: 'csjcd',
            stepIdMark: this.stepMarker,
@@ -218,7 +221,7 @@
          }
          this.dataForm.flowInfoDto = flowInfo;
        }
        console.log(this.dataForm, "this.dataForm formSubmit(submitType)")
        let res = await this.$http[!this.dataForm.id ? 'post' : 'put']('/testCheckOrder/TestCheckOrder/', this.dataForm)
        if (res.success) {
          await this.$tip.success()
web/src/views/modules/testCheckOrder/TestCheckOrder.vue
@@ -1,14 +1,14 @@
<template>
  <el-card shadow="never" class="aui-card--fill">
    <div class="mod-testCheckOrder-testCheckOrder}">
      <zt-table-wraper :query-url="QueryUrl" delete-url="/testCheckOrder/TestCheckOrder/deleteCheckOrder"
      <zt-table-wraper query-url="/testCheckOrder/TestCheckOrder/page" delete-url="/testCheckOrder/TestCheckOrder/deleteCheckOrder"
                       v-slot="{ table }">
        <el-form :inline="true" :model="dataForm" @keyup.enter.native="table.query()">
          <el-form-item>
            <el-input v-model="dataForm.code" placeholder="请输入编号" clearable></el-input>
          </el-form-item>
          <el-form-item>
            <el-input v-model="dataForm.softwarename" placeholder="请输入项目名称" clearable></el-input>
            <el-input v-model="dataForm.softwareName" placeholder="请输入项目名称" clearable></el-input>
          </el-form-item>
          <el-form-item>
            <zt-button type="query" @click="table.query()"/>
@@ -55,20 +55,16 @@
        QueryUrl:'',
        dataForm: {
          code: '',
          softwareidentity: '',
          softwarename: '',
          softwareIdentity: '',
          softwareName: '',
          pageCode:this.$route.query.pageCode
        }
      }
    },
    mounted() {
      this.pageCode = this.$route.query.pageCode
      this.dataForm.pageCode = this.$route.query.pageCode
      console.log(this.pageCode,'this.pageCode this.pageCode')
    },
    watch:{
      pageCode(){
        this.QueryUrl=`/testCheckOrder/TestCheckOrder/page?pageCode=${this.pageCode}`
        console.log(this.QueryUrl,'watch pageCode url')
      }
    },
    components: {
      AddOrUpdate,