zzw
2023-11-20 2c89ccdc9e008060f8cd6608c9fcb014616987a3
Merge remote-tracking branch 'origin/master'
9个文件已修改
15个文件已添加
1765 ■■■■ 已修改文件
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironAnalysisController.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironController.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironHardwareResourcesController.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironSoftwareResourcesController.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironAnalysisDao.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironHardwareResourcesDao.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironSoftwareResourcesDao.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/dto/SoftwareTestOrderDto.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/model/Environ.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironAnalysis.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironHardwareResources.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironSoftwareResources.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironAnalysisService.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironHardwareResourcesService.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironService.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironSoftwareResourcesService.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/project/EnvironAnalysisDao.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/project/EnvironDao.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/project/EnvironHardwareResourcesDao.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/project/EnvironSoftwareResourcesDao.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/sysBaseInfo/TestAgencyInfoDao.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/olderForm/confirmForm.vue 495 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/project/Environ-AddOrUpdate.vue 322 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/project/Environ.vue 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironAnalysisController.java
New file
@@ -0,0 +1,96 @@
package com.zt.life.modules.project.controller;
import com.zt.common.annotation.LogOperation;
import com.zt.common.constant.Constant;
import com.zt.common.annotation.QueryParam;
import com.zt.common.db.query.QueryFilter;
import com.zt.common.servlet.Result;
import com.zt.common.servlet.PageResult;
import com.zt.common.validator.AssertUtils;
import com.zt.common.validator.ValidatorUtils;
import com.zt.common.validator.group.AddGroup;
import com.zt.common.validator.group.DefaultGroup;
import com.zt.common.validator.group.UpdateGroup;
import com.zt.life.modules.project.model.EnvironAnalysis;
import com.zt.life.modules.project.service.EnvironAnalysisService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * environ_analysis
 *
 * @author zt generator
 * @since 1.0.0 2023-11-17
 */
@RestController
@RequestMapping("/project/EnvironAnalysis/")
@Api(tags="environ_analysis")
public class EnvironAnalysisController {
    @Autowired
    private EnvironAnalysisService environAnalysisService;
    @GetMapping("page")
    @ApiOperation("分页")
    @ApiImplicitParams({
        @ApiImplicitParam(name = Constant.Q.PAGE, value = Constant.QV.PAGE, required = true, dataType = Constant.QT.INT),
        @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT),
        @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING),
        @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING),
    })
    public PageResult<EnvironAnalysis> page(@ApiIgnore @QueryParam QueryFilter queryFilter){
        return PageResult.ok(environAnalysisService.page(queryFilter));
    }
    @GetMapping("{id}")
    @ApiOperation("信息")
    public Result<EnvironAnalysis> get(@PathVariable("id") Long id){
        EnvironAnalysis data = environAnalysisService.get(id);
        return Result.ok(data);
    }
    @PostMapping
    @ApiOperation("新增")
    @LogOperation("新增")
    public Result insert(@RequestBody EnvironAnalysis environAnalysis){
        //效验数据
        ValidatorUtils.validateEntity(environAnalysis, AddGroup.class, DefaultGroup.class);
        environAnalysisService.insert(environAnalysis);
        return Result.ok();
    }
    @PutMapping
    @ApiOperation("修改")
    @LogOperation("修改")
    public Result update(@RequestBody EnvironAnalysis environAnalysis){
        //效验数据
        ValidatorUtils.validateEntity(environAnalysis, UpdateGroup.class, DefaultGroup.class);
        environAnalysisService.update(environAnalysis);
        return Result.ok();
    }
    @DeleteMapping
    @ApiOperation("删除")
    @LogOperation("删除")
    public Result delete(@RequestBody Long[] ids){
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        environAnalysisService.delete(ids);
        return Result.ok();
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironController.java
@@ -12,8 +12,12 @@
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.project.dto.SoftwareTestOrderDto;
import com.zt.life.modules.project.model.Environ;
import com.zt.life.modules.project.service.EnvironService;
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;
@@ -23,58 +27,76 @@
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * environ
 *
 * @author zt generator
 * @author zt generator
 * @since 1.0.0 2023-11-17
 */
@RestController
@RequestMapping("/project/Environ/")
@Api(tags="environ")
@Api(tags = "environ")
public class EnvironController {
    @Autowired
    private EnvironService environService;
    @Autowired
    private SysOssConfigService sysOssConfigService;
    @Autowired
    private SysCodeRuleService sysCodeRuleService;
    @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 = "CODE^LK")    })
    public PageResult<Environ> page(@ApiIgnore @QueryParam QueryFilter queryFilter){
            @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 = "CODE^LK")})
    public PageResult<Environ> page(@ApiIgnore @QueryParam QueryFilter queryFilter) {
        return PageResult.ok(environService.page(queryFilter));
    }
    @GetMapping("{id}")
    @GetMapping("getDto")
    @ApiOperation("信息")
    public Result<Environ> get(@PathVariable("id") Long id){
        Environ data = environService.get(id);
    public Result<SoftwareTestOrderDto> getDto(Long projectId, Long environId) {
        SoftwareTestOrderDto data = environService.getDto(environId, projectId);
        if (projectId != null) {
            OssDto ossDto = sysOssConfigService.getOssByBusiType(projectId, "environ");
            if (ossDto != null) {
                data.setFiles(ossDto);
            }
        }
        return Result.ok(data);
    }
    @PostMapping
    @ApiOperation("新增")
    @LogOperation("新增")
    public Result insert(@RequestBody Environ environ){
    public Result insert(@RequestBody SoftwareTestOrderDto softwareTestOrderDto) {
        //效验数据
        ValidatorUtils.validateEntity(environ, AddGroup.class, DefaultGroup.class);
        environService.insert(environ);
        ValidatorUtils.validateEntity(softwareTestOrderDto, AddGroup.class, DefaultGroup.class);
        Map<String,String> map = new HashMap<>();
        map.put("funCode","environ");
        softwareTestOrderDto.getEnviron().setCode(sysCodeRuleService.getNewCode(map));
        Boolean result = environService.save(softwareTestOrderDto);
        return Result.ok();
    }
    @PutMapping
    @ApiOperation("修改")
    @LogOperation("修改")
    public Result update(@RequestBody Environ environ){
    public Result update(@RequestBody Environ environ) {
        //效验数据
        ValidatorUtils.validateEntity(environ, UpdateGroup.class, DefaultGroup.class);
        environService.update(environ);
@@ -85,7 +107,7 @@
    @DeleteMapping
    @ApiOperation("删除")
    @LogOperation("删除")
    public Result delete(@RequestBody Long[] ids){
    public Result delete(@RequestBody Long[] ids) {
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        environService.delete(ids);
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironHardwareResourcesController.java
New file
@@ -0,0 +1,96 @@
package com.zt.life.modules.project.controller;
import com.zt.common.annotation.LogOperation;
import com.zt.common.constant.Constant;
import com.zt.common.annotation.QueryParam;
import com.zt.common.db.query.QueryFilter;
import com.zt.common.servlet.Result;
import com.zt.common.servlet.PageResult;
import com.zt.common.validator.AssertUtils;
import com.zt.common.validator.ValidatorUtils;
import com.zt.common.validator.group.AddGroup;
import com.zt.common.validator.group.DefaultGroup;
import com.zt.common.validator.group.UpdateGroup;
import com.zt.life.modules.project.model.EnvironHardwareResources;
import com.zt.life.modules.project.service.EnvironHardwareResourcesService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * environ_hardware_resources
 *
 * @author zt generator
 * @since 1.0.0 2023-11-17
 */
@RestController
@RequestMapping("/project/EnvironHardwareResources/")
@Api(tags="environ_hardware_resources")
public class EnvironHardwareResourcesController {
    @Autowired
    private EnvironHardwareResourcesService environHardwareResourcesService;
    @GetMapping("page")
    @ApiOperation("分页")
    @ApiImplicitParams({
        @ApiImplicitParam(name = Constant.Q.PAGE, value = Constant.QV.PAGE, required = true, dataType = Constant.QT.INT),
        @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT),
        @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING),
        @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING),
    })
    public PageResult<EnvironHardwareResources> page(@ApiIgnore @QueryParam QueryFilter queryFilter){
        return PageResult.ok(environHardwareResourcesService.page(queryFilter));
    }
    @GetMapping("{id}")
    @ApiOperation("信息")
    public Result<EnvironHardwareResources> get(@PathVariable("id") Long id){
        EnvironHardwareResources data = environHardwareResourcesService.get(id);
        return Result.ok(data);
    }
    @PostMapping
    @ApiOperation("新增")
    @LogOperation("新增")
    public Result insert(@RequestBody EnvironHardwareResources environHardwareResources){
        //效验数据
        ValidatorUtils.validateEntity(environHardwareResources, AddGroup.class, DefaultGroup.class);
        environHardwareResourcesService.insert(environHardwareResources);
        return Result.ok();
    }
    @PutMapping
    @ApiOperation("修改")
    @LogOperation("修改")
    public Result update(@RequestBody EnvironHardwareResources environHardwareResources){
        //效验数据
        ValidatorUtils.validateEntity(environHardwareResources, UpdateGroup.class, DefaultGroup.class);
        environHardwareResourcesService.update(environHardwareResources);
        return Result.ok();
    }
    @DeleteMapping
    @ApiOperation("删除")
    @LogOperation("删除")
    public Result delete(@RequestBody Long[] ids){
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        environHardwareResourcesService.delete(ids);
        return Result.ok();
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironSoftwareResourcesController.java
New file
@@ -0,0 +1,96 @@
package com.zt.life.modules.project.controller;
import com.zt.common.annotation.LogOperation;
import com.zt.common.constant.Constant;
import com.zt.common.annotation.QueryParam;
import com.zt.common.db.query.QueryFilter;
import com.zt.common.servlet.Result;
import com.zt.common.servlet.PageResult;
import com.zt.common.validator.AssertUtils;
import com.zt.common.validator.ValidatorUtils;
import com.zt.common.validator.group.AddGroup;
import com.zt.common.validator.group.DefaultGroup;
import com.zt.common.validator.group.UpdateGroup;
import com.zt.life.modules.project.model.EnvironSoftwareResources;
import com.zt.life.modules.project.service.EnvironSoftwareResourcesService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * environ_software_resources
 *
 * @author zt generator
 * @since 1.0.0 2023-11-17
 */
@RestController
@RequestMapping("/project/EnvironSoftwareResources/")
@Api(tags="environ_software_resources")
public class EnvironSoftwareResourcesController {
    @Autowired
    private EnvironSoftwareResourcesService environSoftwareResourcesService;
    @GetMapping("page")
    @ApiOperation("分页")
    @ApiImplicitParams({
        @ApiImplicitParam(name = Constant.Q.PAGE, value = Constant.QV.PAGE, required = true, dataType = Constant.QT.INT),
        @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT),
        @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING),
        @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING),
    })
    public PageResult<EnvironSoftwareResources> page(@ApiIgnore @QueryParam QueryFilter queryFilter){
        return PageResult.ok(environSoftwareResourcesService.page(queryFilter));
    }
    @GetMapping("{id}")
    @ApiOperation("信息")
    public Result<EnvironSoftwareResources> get(@PathVariable("id") Long id){
        EnvironSoftwareResources data = environSoftwareResourcesService.get(id);
        return Result.ok(data);
    }
    @PostMapping
    @ApiOperation("新增")
    @LogOperation("新增")
    public Result insert(@RequestBody EnvironSoftwareResources environSoftwareResources){
        //效验数据
        ValidatorUtils.validateEntity(environSoftwareResources, AddGroup.class, DefaultGroup.class);
        environSoftwareResourcesService.insert(environSoftwareResources);
        return Result.ok();
    }
    @PutMapping
    @ApiOperation("修改")
    @LogOperation("修改")
    public Result update(@RequestBody EnvironSoftwareResources environSoftwareResources){
        //效验数据
        ValidatorUtils.validateEntity(environSoftwareResources, UpdateGroup.class, DefaultGroup.class);
        environSoftwareResourcesService.update(environSoftwareResources);
        return Result.ok();
    }
    @DeleteMapping
    @ApiOperation("删除")
    @LogOperation("删除")
    public Result delete(@RequestBody Long[] ids){
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        environSoftwareResourcesService.delete(ids);
        return Result.ok();
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironAnalysisDao.java
New file
@@ -0,0 +1,23 @@
package com.zt.life.modules.project.dao;
import com.zt.common.dao.BaseDao;
import com.zt.life.modules.project.model.EnvironAnalysis;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
/**
 * environ_analysis
 *
 * @author zt generator
 * @since 1.0.0 2023-11-17
 */
@Mapper
public interface EnvironAnalysisDao extends BaseDao<EnvironAnalysis> {
    List<EnvironAnalysis> getList(Map<String, Object> params);
}
modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironHardwareResourcesDao.java
New file
@@ -0,0 +1,23 @@
package com.zt.life.modules.project.dao;
import com.zt.common.dao.BaseDao;
import com.zt.life.modules.project.model.EnvironHardwareResources;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
/**
 * environ_hardware_resources
 *
 * @author zt generator
 * @since 1.0.0 2023-11-17
 */
@Mapper
public interface EnvironHardwareResourcesDao extends BaseDao<EnvironHardwareResources> {
    List<EnvironHardwareResources> getList(Map<String, Object> params);
}
modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironSoftwareResourcesDao.java
New file
@@ -0,0 +1,23 @@
package com.zt.life.modules.project.dao;
import com.zt.common.dao.BaseDao;
import com.zt.life.modules.project.model.EnvironSoftwareResources;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
/**
 * environ_software_resources
 *
 * @author zt generator
 * @since 1.0.0 2023-11-17
 */
@Mapper
public interface EnvironSoftwareResourcesDao extends BaseDao<EnvironSoftwareResources> {
    List<EnvironSoftwareResources> getList(Map<String, Object> params);
}
modules/mainPart/src/main/java/com/zt/life/modules/project/dto/SoftwareTestOrderDto.java
@@ -1,9 +1,6 @@
package com.zt.life.modules.project.dto;
import com.zt.life.modules.project.model.Project;
import com.zt.life.modules.project.model.SoftwareTestOrder;
import com.zt.life.modules.project.model.SoftwareTestOrderDeliverable;
import com.zt.life.modules.project.model.SoftwareTestOrderMeasured;
import com.zt.life.modules.project.model.*;
import com.zt.life.modules.sysBaseInfo.model.TestAgencyInfo;
import com.zt.life.sys.dto.OssDto;
import io.swagger.annotations.ApiModelProperty;
@@ -16,11 +13,14 @@
public class SoftwareTestOrderDto {
    private Long id;
    private Long projectId;
    private Long orderId;
    @ApiModelProperty(value = "测试委托单记录")
    private SoftwareTestOrder softwareTestOrder;
    @ApiModelProperty(value = "测试项目基本信息")
    private Project project;
    @ApiModelProperty(value = "测试环境建立确认")
    private Environ environ;
    @ApiModelProperty(value = "测试机构信息")
    private TestAgencyInfo TestAgencyInfo;
    @ApiModelProperty(value = "测试委托单附件")
@@ -30,5 +30,12 @@
    private List<SoftwareTestOrderMeasured> measuredList = new ArrayList<>();
    @ApiModelProperty(value = "交付件")
    private List<SoftwareTestOrderDeliverable> deliverableList = new ArrayList<>();
    @ApiModelProperty(value = "软件资源")
    private List<EnvironSoftwareResources> softwareResourcesList = new ArrayList<>();
    @ApiModelProperty(value = "硬件资源")
    private List<EnvironHardwareResources> hardwareResourcesList = new ArrayList<>();
    @ApiModelProperty(value = "环境差异性分析")
    private List<EnvironAnalysis> environAnalysisList = new ArrayList<>();
}
modules/mainPart/src/main/java/com/zt/life/modules/project/model/Environ.java
@@ -1,5 +1,6 @@
package com.zt.life.modules.project.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;
@@ -24,6 +25,9 @@
    @ApiModelProperty(value = "编号")
    private String code;
    @ApiModelProperty(value = "项目ID")
    private Long projectId;
    @ApiModelProperty(value = "硬软件资源")
    private String hardSoftwareRes;
@@ -60,4 +64,20 @@
    @ApiModelProperty(value = "病毒库版本")
    private String virusDatabaseVersion;
    @TableField(exist = false)
    @ApiModelProperty(value = "专业实验室名称")
    private String agencyName;
    @TableField(exist = false)
    @ApiModelProperty(value = "测试地点")
    private String site;
    @TableField(exist = false)
    @ApiModelProperty(value = "被测软件")
    private String softwareName;
    @TableField(exist = false)
    @ApiModelProperty(value = "版本")
    private String softwareIdentity;
}
modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironAnalysis.java
New file
@@ -0,0 +1,45 @@
package com.zt.life.modules.project.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zt.common.entity.BusiEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
 * environ_analysis
 *
 * @author zt generator
 * @since 1.0.0 2023-11-17
 */
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("environ_analysis")
public class EnvironAnalysis extends BusiEntity {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "环境测试单ID")
    private Long environId;
    @ApiModelProperty(value = "序号")
    private Integer no;
    @ApiModelProperty(value = "真实环境")
    private String realEnviron;
    @ApiModelProperty(value = "测试环境")
    private String testEnviron;
    @ApiModelProperty(value = "环境差异")
    private String environDifference;
    @ApiModelProperty(value = "对测试结果影响")
    private String resultImpact;
    @ApiModelProperty(value = "措施")
    private String measure;
}
modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironHardwareResources.java
New file
@@ -0,0 +1,45 @@
package com.zt.life.modules.project.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zt.common.entity.BusiEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
 * environ_hardware_resources
 *
 * @author zt generator
 * @since 1.0.0 2023-11-17
 */
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("environ_hardware_resources")
public class EnvironHardwareResources extends BusiEntity {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "环境测试单ID")
    private Long environId;
    @ApiModelProperty(value = "序号")
    private Integer no;
    @ApiModelProperty(value = "硬件和固体项名称")
    private String itemName;
    @ApiModelProperty(value = "用途")
    private String usage;
    @ApiModelProperty(value = "状态")
    private String state;
    @ApiModelProperty(value = "数量")
    private Integer number;
    @ApiModelProperty(value = "提供单位")
    private String provideUnit;
}
modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironSoftwareResources.java
New file
@@ -0,0 +1,42 @@
package com.zt.life.modules.project.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zt.common.entity.BusiEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
 * environ_software_resources
 *
 * @author zt generator
 * @since 1.0.0 2023-11-17
 */
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("environ_software_resources")
public class EnvironSoftwareResources extends BusiEntity {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "环境测试单ID")
    private Long environId;
    @ApiModelProperty(value = "序号")
    private Integer no;
    @ApiModelProperty(value = "软件项名称")
    private String itemName;
    @ApiModelProperty(value = "版本")
    private String version;
    @ApiModelProperty(value = "用途")
    private String usage;
    @ApiModelProperty(value = "提供单位")
    private String provideUnit;
}
modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironAnalysisService.java
New file
@@ -0,0 +1,48 @@
package com.zt.life.modules.project.service;
import com.zt.common.service.BaseService;
import com.zt.life.modules.project.dao.EnvironAnalysisDao;
import com.zt.life.modules.project.model.EnvironAnalysis;
import com.zt.life.modules.project.model.EnvironHardwareResources;
import org.springframework.stereotype.Service;
import com.zt.common.db.query.QueryFilter;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * environ_analysis
 *
 * @author zt generator
 * @since 1.0.0 2023-11-17
 */
@Service
public class EnvironAnalysisService  extends BaseService<EnvironAnalysisDao, EnvironAnalysis> {
    /**
     * 分页查询
     *
     * @param queryFilter
     * @return
     */
    public List<EnvironAnalysis> page(QueryFilter queryFilter) {
        return baseDao.getList(queryFilter.getQueryParams());
    }
    /**
     * 删除
     *
     * @param ids
     */
    public void delete(Long[] ids) {
        super.deleteLogic(ids);
    }
    public List<EnvironAnalysis> getList(Long environId) {
        Map<String, Object> params = new HashMap<>();
        params.put("environId",environId);
        return baseDao.getList(params);
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironHardwareResourcesService.java
New file
@@ -0,0 +1,48 @@
package com.zt.life.modules.project.service;
import com.zt.common.service.BaseService;
import com.zt.life.modules.project.dao.EnvironHardwareResourcesDao;
import com.zt.life.modules.project.model.EnvironHardwareResources;
import com.zt.life.modules.project.model.EnvironSoftwareResources;
import org.springframework.stereotype.Service;
import com.zt.common.db.query.QueryFilter;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * environ_hardware_resources
 *
 * @author zt generator
 * @since 1.0.0 2023-11-17
 */
@Service
public class EnvironHardwareResourcesService  extends BaseService<EnvironHardwareResourcesDao, EnvironHardwareResources> {
    /**
     * 分页查询
     *
     * @param queryFilter
     * @return
     */
    public List<EnvironHardwareResources> page(QueryFilter queryFilter) {
        return baseDao.getList(queryFilter.getQueryParams());
    }
    /**
     * 删除
     *
     * @param ids
     */
    public void delete(Long[] ids) {
        super.deleteLogic(ids);
    }
    public List<EnvironHardwareResources> getList(Long environId) {
        Map<String, Object> params = new HashMap<>();
        params.put("environId",environId);
        return baseDao.getList(params);
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironService.java
@@ -2,21 +2,88 @@
import com.zt.common.service.BaseService;
import com.zt.life.modules.project.dao.EnvironDao;
import com.zt.life.modules.project.model.Environ;
import com.zt.life.modules.project.dto.SoftwareTestOrderDto;
import com.zt.life.modules.project.model.*;
import com.zt.life.modules.sysBaseInfo.model.TestAgencyInfo;
import com.zt.life.modules.sysBaseInfo.service.TestAgencyInfoService;
import com.zt.life.sys.service.SysOssConfigService;
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;
import java.util.Map;
/**
 * environ
 *
 * @author zt generator
 * @author zt generator
 * @since 1.0.0 2023-11-17
 */
@Service
public class EnvironService  extends BaseService<EnvironDao, Environ> {
public class EnvironService extends BaseService<EnvironDao, Environ> {
    @Autowired
    private EnvironSoftwareResourcesService environSoftwareResourcesService;
    @Autowired
    private EnvironHardwareResourcesService environHardwareResourcesService;
    @Autowired
    private SoftwareTestOrderService softwareTestOrderService;
    @Autowired
    private SysCodeRuleService sysCodeRuleService;
    @Autowired
    private SysOssConfigService sysOssConfigService;
    @Autowired
    private EnvironAnalysisService environAnalysisService;
    @Autowired
    private ProjectService projectService;
    @Autowired
    private TestAgencyInfoService testAgencyInfoService;
    public SoftwareTestOrderDto getDto(Long projectId, Long environId) {
        SoftwareTestOrderDto data = new SoftwareTestOrderDto();
        if (environId != null) {
            data.setId(environId);
            Environ environ = this.get(environId);
            data.setEnviron(environ);
            projectId = environ.getProjectId();
            List<EnvironSoftwareResources> softwareResourcesList = environSoftwareResourcesService.getList(environId);
            data.setSoftwareResourcesList(softwareResourcesList);
            List<EnvironHardwareResources> hardwareResourcesList = environHardwareResourcesService.getList(environId);
            data.setHardwareResourcesList(hardwareResourcesList);
            List<EnvironAnalysis> environAnalysesList = environAnalysisService.getList(environId);
            data.setEnvironAnalysisList(environAnalysesList);
        } else {
            Project project = projectService.get(projectId);
            data.getEnviron().setSoftwareName(project.getSoftwareName());
            data.getEnviron().setSoftwareIdentity(project.getSoftwareIdentity());
        }
        if (data.getTestAgencyInfo() == null)
           data.getEnviron().setAgencyName(testAgencyInfoService.get(10000L).getAgencyName());
           data.getEnviron().setSite(testAgencyInfoService.get(10000L).getSite());
        if (projectId != null) {
            data.setOrderId(projectId);
            data.setSoftwareTestOrder(softwareTestOrderService.get(projectId));
        }
        return data;
    }
    /**
     * 分页查询
@@ -37,4 +104,50 @@
        super.deleteLogic(ids);
    }
    public Boolean save(SoftwareTestOrderDto softwareTestOrderDto) {
        Long environId = softwareTestOrderDto.getEnviron().getId();
        if (environId != null)
            baseDao.updateById(softwareTestOrderDto.getEnviron());
        else {
            Map<String, String> map = new HashMap<>();
            map.put("funCode", "environ");
            softwareTestOrderDto.getEnviron().setProjectId(softwareTestOrderDto.getProjectId());
            softwareTestOrderDto.getEnviron().setCode(sysCodeRuleService.getNewCode(map));
            baseDao.insert(softwareTestOrderDto.getEnviron());
            environId = softwareTestOrderDto.getEnviron().getId();
        }
        for (EnvironSoftwareResources environSoftwareResources : softwareTestOrderDto.getSoftwareResourcesList()) {
            environSoftwareResources.setEnvironId(environId);
            if (environSoftwareResources.getId() != null) {
                environSoftwareResourcesService.update(environSoftwareResources);
            } else {
                environSoftwareResources.setEnvironId(environId);
                environSoftwareResourcesService.insert(environSoftwareResources);
            }
        }
        for (EnvironHardwareResources environHardwareResources : softwareTestOrderDto.getHardwareResourcesList()) {
            environHardwareResources.setEnvironId(environId);
            if (environHardwareResources.getId() != null) {
                environHardwareResourcesService.update(environHardwareResources);
            } else {
                environHardwareResources.setEnvironId(environId);
                environHardwareResourcesService.insert(environHardwareResources);
            }
        }
        for (EnvironAnalysis environAnalysis : softwareTestOrderDto.getEnvironAnalysisList()) {
            environAnalysis.setEnvironId(environId);
            if (environAnalysis.getId() != null) {
                environAnalysisService.update(environAnalysis);
            } else {
                environAnalysis.setEnvironId(environId);
                environAnalysisService.insert(environAnalysis);
            }
        }
        sysOssConfigService.updateOss(softwareTestOrderDto.getId(), softwareTestOrderDto.getFiles());// 保存附件
        return true;
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironSoftwareResourcesService.java
New file
@@ -0,0 +1,48 @@
package com.zt.life.modules.project.service;
import com.zt.common.service.BaseService;
import com.zt.life.modules.project.dao.EnvironSoftwareResourcesDao;
import com.zt.life.modules.project.model.EnvironSoftwareResources;
import com.zt.life.modules.project.model.SoftwareTestOrderMeasured;
import org.springframework.stereotype.Service;
import com.zt.common.db.query.QueryFilter;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * environ_software_resources
 *
 * @author zt generator
 * @since 1.0.0 2023-11-17
 */
@Service
public class EnvironSoftwareResourcesService  extends BaseService<EnvironSoftwareResourcesDao, EnvironSoftwareResources> {
    /**
     * 分页查询
     *
     * @param queryFilter
     * @return
     */
    public List<EnvironSoftwareResources> page(QueryFilter queryFilter) {
        return baseDao.getList(queryFilter.getQueryParams());
    }
    /**
     * 删除
     *
     * @param ids
     */
    public void delete(Long[] ids) {
        super.deleteLogic(ids);
    }
    public List<EnvironSoftwareResources> getList(Long environId) {
        Map<String, Object> params = new HashMap<>();
        params.put("environId",environId);
        return baseDao.getList(params);
    }
}
modules/mainPart/src/main/resources/mapper/project/EnvironAnalysisDao.xml
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zt.life.modules.project.dao.EnvironAnalysisDao">
    <select id="getList" resultType="com.zt.life.modules.project.model.EnvironAnalysis">
        select a.*
        from environ_analysis a
        <where>
            a.is_delete = 0
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
        </where>
        <if test="orderBySql!=null">
            ORDER BY ${orderBySql}
        </if>
    </select>
</mapper>
modules/mainPart/src/main/resources/mapper/project/EnvironDao.xml
@@ -4,10 +4,11 @@
<mapper namespace="com.zt.life.modules.project.dao.EnvironDao">
    <select id="getList" resultType="com.zt.life.modules.project.model.Environ">
        select a.*
        from environ a
        SELECT a.*, p.*
        FROM software_test_order a
        INNER JOIN  project p ON p.id = a.project_id
        <where>
            a.is_delete = 0
            a.is_delete = 0 and p.is_delete = 0
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
modules/mainPart/src/main/resources/mapper/project/EnvironHardwareResourcesDao.xml
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zt.life.modules.project.dao.EnvironHardwareResourcesDao">
    <select id="getList" resultType="com.zt.life.modules.project.model.EnvironHardwareResources">
        select a.*
        from environ_hardware_resources a
        <where>
            a.is_delete = 0
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
        </where>
        <if test="orderBySql!=null">
            ORDER BY ${orderBySql}
        </if>
    </select>
</mapper>
modules/mainPart/src/main/resources/mapper/project/EnvironSoftwareResourcesDao.xml
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zt.life.modules.project.dao.EnvironSoftwareResourcesDao">
    <select id="getList" resultType="com.zt.life.modules.project.model.EnvironSoftwareResources">
        select a.*
        from environ_software_resources a
        <where>
            a.is_delete = 0
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
        </where>
        <if test="orderBySql!=null">
            ORDER BY ${orderBySql}
        </if>
    </select>
</mapper>
modules/mainPart/src/main/resources/mapper/sysBaseInfo/TestAgencyInfoDao.xml
@@ -7,10 +7,7 @@
        select a.*
        from test_agency_info a
        <where>
            a.is_delete = 0
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
            a.is_delete = 0 and a.ID = 10000
        </where>
        <if test="orderBySql!=null">
            ORDER BY ${orderBySql}
web/src/views/modules/olderForm/confirmForm.vue
@@ -1,217 +1,294 @@
<!--<template>-->
<!--  <div class="fa-card-a" style="max-height: calc(100vh - 130px);overflow-y: auto">-->
<!--    <el-form ref="form" :inline="true" :model="form" label-width="120px" class="confirmFormAuto">-->
<!--      <div class="DConfirmForm">-->
<!--        <el-form-item label-width="60px" label="编号:" style="width: 99%">-->
<!--          <span>{{form.code}}</span>-->
<!--        </el-form-item>-->
<!--      </div>-->
<!--      <div class="confirmDAuto DConfirmForm">-->
<!--          <el-form-item label="专业实验室名称" style="width: 49%">-->
<!--            <el-input v-model="form.name" placeholder="请输入编号名称"></el-input>-->
<!--          </el-form-item>-->
<!--         <el-form-item label="测试地点" style="width: 49%">-->
<!--           <el-input v-model="form.place" placeholder="请输入编号名称"></el-input>-->
<!--         </el-form-item>-->
<!--          <el-form-item label="被测软件" style="width: 49%">-->
<!--            <el-input v-model="form.software" placeholder="请输入编号名称"></el-input>-->
<!--          </el-form-item>-->
<!--          <el-form-item label="版本" style="width: 49%">-->
<!--            <el-input v-model="form.versions" placeholder="请输入编号名称"></el-input>-->
<!--          </el-form-item>-->
<!--        <div class="el-flex el-form-border">-->
<!--          <div class="DFormWidth DAlign DHold">-->
<!--            硬软件资源-->
<!--          </div>-->
<!--          <div class="el-wt-border-left" style="padding-left:5px;width: calc(100% - 130px)">-->
<!--            <div style="padding: 5px">软件资源:</div>-->
<!--            <el-table class="el-software el-margin-top-bot" height="150" border :data="form.softwareData"-->
<!--                      stripe>-->
<!--              <el-table-column prop="code" align="center" width="80" label="序号"></el-table-column>-->
<!--              <el-table-column prop="name" min-width="300" label="软件项名称"></el-table-column>-->
<!--              <el-table-column prop="versions" align="center" width="180" label="版本"></el-table-column>-->
<!--              <el-table-column prop="use" align="center" width="180" label="用途"></el-table-column>-->
<!--              <el-table-column prop="unit" label="提供单位" width="180"  align="center"></el-table-column>-->
<!--            </el-table>-->
<!--            <div style="padding: 5px">硬件资源:</div>-->
<!--            <el-table class="el-software el-margin-top-bot" height="150" border :data="form.hardwareData"-->
<!--                      stripe>-->
<!--              <el-table-column prop="code" align="center" width="80" label="序号"></el-table-column>-->
<!--              <el-table-column prop="name" min-width="300" label="硬件和固件项目名称"></el-table-column>-->
<!--              <el-table-column prop="use" align="center" width="180" label="用途"></el-table-column>-->
<!--              <el-table-column prop="number" align="center" width="80" label="数量"></el-table-column>-->
<!--              <el-table-column prop="state" align="center" width="120" label="状态"></el-table-column>-->
<!--              <el-table-column prop="unit" align="center" width="180" label="提供单位"></el-table-column>-->
<!--            </el-table>-->
<!--          </div>-->
<!--        </div>-->
<!--        <div class="el-flex el-B-border">-->
<!--          <div class="DFormWidth DAlign DHold">-->
<!--            动态测试环境图-->
<!--          </div>-->
<!--          <div style="width: calc(100% - 120px);">-->
<!--           <div style="height:150px" class="el-wt-border-left">-->
<!--           </div>-->
<!--          </div>-->
<!--        </div>-->
<!--        <div class="el-flex el-B-border">-->
<!--          <div class="DFormWidth DAlign DHold">-->
<!--            环境差异性分析-->
<!--          </div>-->
<!--          <div class="el-wt-border-left" style="padding-left:5px;width: calc(100% - 130px)">-->
<!--            <el-table class="el-software el-margin-top-bot" height="150" border :data="form.analyzeData"-->
<!--                      stripe>-->
<!--              <el-table-column prop="code" align="center" width="80" label="序号"></el-table-column>-->
<!--              <el-table-column prop="realEnvironment" min-width="300" label="真实环境"></el-table-column>-->
<!--              <el-table-column prop="testEnvironment" align="center" width="100" label="测试环境"></el-table-column>-->
<!--              <el-table-column prop="environmentalDifference" align="center" width="100" label="环境差异"></el-table-column>-->
<!--              <el-table-column prop="influence" align="center" width="160" label="对测试结果影响"></el-table-column>-->
<!--              <el-table-column prop="measure" align="center" width="180" label="措施"></el-table-column>-->
<!--            </el-table>-->
<!--          </div>-->
<!--        </div>-->
<!--        <div class="el-flex el-B-border">-->
<!--          <div class="DFormWidth DAlign DHold">-->
<!--            环境建立-->
<!--          </div>-->
<!--          <div style="width: calc(100% - 120px)"  class="DConfirmForm el-wt-border-left">-->
<!--            <el-form-item label="人员" style="width: 49%">-->
<!--              <el-input v-model="form.buildPersonnel" placeholder="请输入单位名称"></el-input>-->
<!--            </el-form-item>-->
<!--            <el-form-item label="日期" style="width: 48%">-->
<!--              <el-input v-model="form.buildDate" placeholder="请输入联系人"></el-input>-->
<!--            </el-form-item>-->
<!--            <el-form-item label-width="160px" class="isKill" label="是否进行环境病毒查杀" style="width: 49%">-->
<!--              <el-radio-group v-model="form.isKill">-->
<!--                <el-radio :label="0">是</el-radio>-->
<!--                <el-radio :label="1">否</el-radio>-->
<!--              </el-radio-group>-->
<!--            </el-form-item>-->
<!--            <el-form-item label="病毒库版本" style="width: 48%">-->
<!--              <el-input v-model="form.VirusLibraryVersion" placeholder="请输入病毒库版本"></el-input>-->
<!--            </el-form-item>-->
<!--          </div>-->
<!--        </div>-->
<!--        <div class="el-flex">-->
<!--          <div class="DFormWidth DAlign DHold">-->
<!--            环境确认-->
<!--          </div>-->
<!--          <div style="width: calc(100% - 120px)" class="DConfirmForm el-wt-border-left">-->
<!--            &lt;!&ndash; 单位名称 &ndash;&gt;-->
<!--            <el-form-item label="人员" style="width: 49%">-->
<!--              <el-input v-model="form.verifyPersonnel" placeholder="请输入单位名称"></el-input>-->
<!--            </el-form-item>-->
<!--            &lt;!&ndash; 联系人 &ndash;&gt;-->
<!--            <el-form-item label="日期" style="width: 48%">-->
<!--              <el-input v-model="form.verifyDate" placeholder="请输入联系人"></el-input>-->
<!--            </el-form-item>-->
<!--          </div>-->
<!--        </div>-->
<!--      </div>-->
<!--    </el-form>-->
<!--  </div>-->
<!--</template>-->
<template>
  <div class="fa-card-a" style="max-height: calc(100vh - 130px);overflow-y: auto">
    <el-form ref="form" :inline="true" :model="form" label-width="120px" class="confirmFormAuto">
      <div class="DConfirmForm">
        <el-form-item label-width="60px" label="编号:" style="width: 99%">
          <span>{{ form.code }}</span>
        </el-form-item>
      </div>
      <div class="confirmDAuto DConfirmForm">
        <el-form-item label="专业实验室名称" style="width: 49%">
          <el-input v-model="form.name" placeholder="请输入编号名称"></el-input>
        </el-form-item>
        <el-form-item label="测试地点" style="width: 49%">
          <el-input v-model="form.place" placeholder="请输入编号名称"></el-input>
        </el-form-item>
        <el-form-item label="被测软件" style="width: 49%">
          <el-input v-model="form.software" placeholder="请输入编号名称"></el-input>
        </el-form-item>
        <el-form-item label="版本" style="width: 49%">
          <el-input v-model="form.versions" placeholder="请输入编号名称"></el-input>
        </el-form-item>
        <div class="el-flex el-form-border">
          <div class="DFormWidth DAlign DHold">
            硬软件资源
          </div>
          <div class="el-wt-border-left" style="padding-left:5px;width: calc(100% - 130px)">
            <div style="padding: 5px">软件资源:</div>
            <div class="table-container">
              <el-table style="position:relative;" class="el-software el-margin-top-bot" height="150" border
                        :data="form.softwareData"
                        stripe>
                <el-table-column prop="code" align="center" width="80" label="序号"></el-table-column>
                <el-table-column prop="name" min-width="300" label="软件项名称">
<!--<script>-->
<!--  export default {-->
<!--    name: 'confirmForm',-->
<!--    data() {-->
<!--      return {-->
<!--        form: {-->
<!--          code: '719G19804/P3A-09-20XX-00X',-->
<!--          name: '',-->
<!--          place: '',-->
<!--          software: '',-->
<!--          versions: '',-->
<!--          buildPersonnel: '',-->
<!--          buildDate: '',-->
<!--          isKill:1,-->
<!--          VirusLibraryVersion: '',-->
<!--          verifyPersonnel: '',-->
<!--          verifyDate: '',-->
<!--          checkList: [1, 0],-->
<!--          softwareData:[-->
<!--            {code:'1',name:'awdas',versions:'1.3.1',use:'奥迪',unit:'单位1'},-->
<!--            {code:'2',name:'阿尔法',versions:'1.3.1',use:'奥迪',unit:'单位2'},-->
<!--            {code:'3',name:'awed',versions:'1.3.1',use:'奥迪',unit:'单位3'},-->
<!--            {code:'4',name:'国土部',versions:'1.3.1',use:'奥迪',unit:'单位4'},-->
<!--          ],-->
<!--          hardwareData:[-->
<!--            {code:'1',name:'awdas',use:'车上',number:'2',state:'21',unit:'单位1'},-->
<!--            {code:'2',name:'qe',use:'515',number:'1',state:'21',unit:'单位2'},-->
<!--            {code:'3',name:'123',use:'1234',number:'42',state:'11',unit:'单位4'},-->
<!--            {code:'4',name:'1515',use:'123',number:'1',state:'21',unit:'单位51'},-->
<!--          ],-->
<!--          analyzeData:[-->
<!--            {code:'1',realEnvironment:'真实环境1',testEnvironment:'测试环境1',environmentalDifference:'123',influence:'wu',measure:'12'},-->
<!--            {code:'1',realEnvironment:'真实环境1',testEnvironment:'测试环境1',environmentalDifference:'123',influence:'wu',measure:'14'},-->
<!--            {code:'1',realEnvironment:'真实环境1',testEnvironment:'测试环境1',environmentalDifference:'123',influence:'wu',measure:'15'},-->
<!--            {code:'1',realEnvironment:'真实环境1',testEnvironment:'测试环境1',environmentalDifference:'123',influence:'wu',measure:'16'},-->
<!--          ],-->
<!--        },-->
<!--      }-->
<!--    },-->
<!--  }-->
<!--</script>-->
                </el-table-column>
                <el-table-column prop="versions" align="center" width="180" label="版本">
<!--<style>-->
<!--.confirmFormAuto {-->
<!--  width: 70%;-->
<!--  margin: 0 auto;-->
<!--}-->
<!--.confirmDAuto{-->
<!--  border: 1px solid;-->
<!--}-->
                </el-table-column>
                <el-table-column prop="use" align="center" width="180" label="用途">
<!--.el-flex {-->
<!--  display: flex;-->
<!--  align-items: center;-->
<!--}-->
                </el-table-column>
                <el-table-column prop="unit" label="提供单位" width="180" align="center">
<!--.DFormWidth {-->
<!--  width: 120px;-->
<!--}-->
                </el-table-column>
              </el-table>
              <div class="icon-container" @click="addRow()">
                <!-- 放置固定的图标 -->
                <i class="el-icon-plus"></i>
              </div>
            </div>
            <div style="padding: 5px">硬件资源:</div>
            <el-table class="el-software el-margin-top-bot" height="150" border :data="form.hardwareData"
                      stripe>
              <el-table-column prop="code" align="center" width="80" label="序号"></el-table-column>
              <el-table-column prop="name" min-width="300" label="硬件和固件项目名称"></el-table-column>
              <el-table-column prop="use" align="center" width="180" label="用途"></el-table-column>
              <el-table-column prop="number" align="center" width="80" label="数量"></el-table-column>
              <el-table-column prop="state" align="center" width="120" label="状态"></el-table-column>
              <el-table-column prop="unit" align="center" width="180" label="提供单位"></el-table-column>
            </el-table>
          </div>
        </div>
        <div class="el-flex el-B-border">
          <div class="DFormWidth DAlign DHold">
            动态测试环境图
          </div>
          <div style="width: calc(100% - 120px);">
            <div style="height:150px" class="el-wt-border-left">
            </div>
          </div>
        </div>
        <div class="el-flex el-B-border">
          <div class="DFormWidth DAlign DHold">
            环境差异性分析
          </div>
          <div class="el-wt-border-left" style="padding-left:5px;width: calc(100% - 130px)">
            <el-table class="el-software el-margin-top-bot" height="150" border :data="form.analyzeData"
                      stripe>
              <el-table-column prop="code" align="center" width="80" label="序号"></el-table-column>
              <el-table-column prop="realEnvironment" min-width="300" label="真实环境"></el-table-column>
              <el-table-column prop="testEnvironment" align="center" width="100" label="测试环境"></el-table-column>
              <el-table-column prop="environmentalDifference" align="center" width="100"
                               label="环境差异"></el-table-column>
              <el-table-column prop="influence" align="center" width="160" label="对测试结果影响"></el-table-column>
              <el-table-column prop="measure" align="center" width="180" label="措施"></el-table-column>
            </el-table>
          </div>
        </div>
        <div class="el-flex el-B-border">
          <div class="DFormWidth DAlign DHold">
            环境建立
          </div>
          <div style="width: calc(100% - 120px)" class="DConfirmForm el-wt-border-left">
            <el-form-item label="人员" style="width: 49%">
              <el-input v-model="form.buildPersonnel" placeholder="请输入单位名称"></el-input>
            </el-form-item>
            <el-form-item label="日期" style="width: 48%">
              <el-input v-model="form.buildDate" placeholder="请输入联系人"></el-input>
            </el-form-item>
            <el-form-item label-width="160px" class="isKill" label="是否进行环境病毒查杀" style="width: 49%">
              <el-radio-group v-model="form.isKill">
                <el-radio :label="0">是</el-radio>
                <el-radio :label="1">否</el-radio>
              </el-radio-group>
            </el-form-item>
            <el-form-item label="病毒库版本" style="width: 48%">
              <el-input v-model="form.VirusLibraryVersion" placeholder="请输入病毒库版本"></el-input>
            </el-form-item>
          </div>
        </div>
        <div class="el-flex">
          <div class="DFormWidth DAlign DHold">
            环境确认
          </div>
          <div style="width: calc(100% - 120px)" class="DConfirmForm el-wt-border-left">
            <!-- 单位名称 -->
            <el-form-item label="人员" style="width: 49%">
              <el-input v-model="form.verifyPersonnel" placeholder="请输入单位名称"></el-input>
            </el-form-item>
            <!-- 联系人 -->
            <el-form-item label="日期" style="width: 48%">
              <el-input v-model="form.verifyDate" placeholder="请输入联系人"></el-input>
            </el-form-item>
          </div>
        </div>
      </div>
    </el-form>
  </div>
</template>
<!--.DAlign {-->
<!--  text-align: center;-->
<!--}-->
<script>
export default {
  name: 'confirmForm',
  data() {
    return {
      form: {
        code: '719G19804/P3A-09-20XX-00X',
        name: '',
        place: '',
        software: '',
        versions: '',
        buildPersonnel: '',
        buildDate: '',
        isKill: 1,
        VirusLibraryVersion: '',
        verifyPersonnel: '',
        verifyDate: '',
        checkList: [1, 0],
        softwareData: [
          {code: '1', name: 'awdas', versions: '1.3.1', use: '奥迪', unit: '单位1'},
          {code: '2', name: '阿尔法', versions: '1.3.1', use: '奥迪', unit: '单位2'},
          {code: '3', name: 'awed', versions: '1.3.1', use: '奥迪', unit: '单位3'},
          {code: '4', name: '国土部', versions: '1.3.1', use: '奥迪', unit: '单位4'},
        ],
        hardwareData: [
          {code: '1', name: 'awdas', use: '车上', number: '2', state: '21', unit: '单位1'},
          {code: '2', name: 'qe', use: '515', number: '1', state: '21', unit: '单位2'},
          {code: '3', name: '123', use: '1234', number: '42', state: '11', unit: '单位4'},
          {code: '4', name: '1515', use: '123', number: '1', state: '21', unit: '单位51'},
        ],
        analyzeData: [
          {
            code: '1',
            realEnvironment: '真实环境1',
            testEnvironment: '测试环境1',
            environmentalDifference: '123',
            influence: 'wu',
            measure: '12'
          },
          {
            code: '1',
            realEnvironment: '真实环境1',
            testEnvironment: '测试环境1',
            environmentalDifference: '123',
            influence: 'wu',
            measure: '14'
          },
          {
            code: '1',
            realEnvironment: '真实环境1',
            testEnvironment: '测试环境1',
            environmentalDifference: '123',
            influence: 'wu',
            measure: '15'
          },
          {
            code: '1',
            realEnvironment: '真实环境1',
            testEnvironment: '测试环境1',
            environmentalDifference: '123',
            influence: 'wu',
            measure: '16'
          },
        ],
      },
    }
  },
  methods:{
    addRow(){
<!--.DConfirmForm {-->
<!--  /*border-left: 1px solid;*/-->
<!--  width: 100%;-->
<!--}-->
    }
  },
}
</script>
<!--.DConfirmForm > .el-form-item > .el-form-item__content {-->
<!--  width: calc(100% - 120px);-->
<!--}-->
<!--.DConfirmForm > .el-form-item.isKill > .el-form-item__content {-->
<!--  width: calc(100% - 160px);-->
<!--}-->
<!--.el-form-border{-->
<!--  border-top: 1px solid;-->
<!--  border-bottom: 1px solid;-->
<!--}-->
<!--.el-B-border{-->
<!--  border-bottom: 1px solid;-->
<!--}-->
<!--.el-margin-top-bot{-->
<!--  margin-top:5px;-->
<!--  margin-bottom:5px;-->
<!--}-->
<!--.el-wt-border-left{-->
<!--  border-left:1px solid;-->
<!--}-->
<!--.zt .el-table.el-software th {-->
<!--  background: transparent;-->
<!--}-->
<style>
.confirmFormAuto {
  width: 70%;
  margin: 0 auto;
}
<!--.zt .el-table.el-software th > .cell {-->
<!--  font-weight: 500;-->
<!--}-->
<!--.DHold{-->
<!--  font-weight: 600;-->
<!--}-->
<!--.zt .el-table.el-software{-->
<!--  font-size: 14px;-->
<!--}-->
<!--</style>-->
.confirmDAuto {
  border: 1px solid;
}
.el-flex {
  display: flex;
  align-items: center;
}
.DFormWidth {
  width: 120px;
}
.DAlign {
  text-align: center;
}
.DConfirmForm {
  /*border-left: 1px solid;*/
  width: 100%;
}
.DConfirmForm > .el-form-item > .el-form-item__content {
  width: calc(100% - 120px);
}
.DConfirmForm > .el-form-item.isKill > .el-form-item__content {
  width: calc(100% - 160px);
}
.el-form-border {
  border-top: 1px solid;
  border-bottom: 1px solid;
}
.el-B-border {
  border-bottom: 1px solid;
}
.el-margin-top-bot {
  margin-top: 5px;
  margin-bottom: 5px;
}
.el-wt-border-left {
  border-left: 1px solid;
}
.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;
}
.table-container {
  position: relative;
}
.icon-container {
  position: absolute;
  bottom: -30px;
  left: 50%;
  width: 40px;
  height: 30px;
  text-align: center;
  line-height: 30px;
  transform: translateX(-50%);
  border: 1px solid #EBEEF5;
  background-color: #fafafa;
  box-shadow: 0 3px 6px 0 rgba(72, 119, 232, 0.14);
  border-radius: 2px;
}
</style>
web/src/views/modules/project/Environ-AddOrUpdate.vue
@@ -1,43 +1,158 @@
<template>
  <zt-dialog ref="dialog" column="2" @confirm="formSubmit">
    <el-form :model="dataForm" ref="dataForm" :disabled="dataForm.disabled" label-width="120px">
      <zt-form-item label="编号" prop="code" rules="required">
                        <el-input v-model="dataForm.code"></el-input>
                </zt-form-item>
      <zt-form-item label="硬软件资源" prop="hardSoftwareRes" rules="required">
                        <el-input v-model="dataForm.hardSoftwareRes"></el-input>
                </zt-form-item>
      <zt-form-item label="动态测试环境图" prop="testEnvirontDiagram" rules="required">
                        <el-input v-model="dataForm.testEnvirontDiagram"></el-input>
                </zt-form-item>
      <zt-form-item label="环境差异性分析" prop="environAnalysis" rules="required">
                        <el-input v-model="dataForm.environAnalysis"></el-input>
                </zt-form-item>
      <zt-form-item label="环境建立" prop="environEstablish" rules="required">
                        <el-input v-model="dataForm.environEstablish"></el-input>
                </zt-form-item>
      <zt-form-item label="环境建立人员" prop="establishStaff" rules="required">
                        <el-input v-model="dataForm.establishStaff"></el-input>
                </zt-form-item>
      <zt-form-item label="环境建立日期" prop="establishDate" rules="required">
                        <el-input v-model="dataForm.establishDate"></el-input>
                </zt-form-item>
      <zt-form-item label="环境确认" prop="environConfirmat" rules="required">
                        <el-input v-model="dataForm.environConfirmat"></el-input>
                </zt-form-item>
      <zt-form-item label="环境确认人员" prop="confirmatStaff" rules="required">
                        <el-input v-model="dataForm.confirmatStaff"></el-input>
                </zt-form-item>
      <zt-form-item label="环境确认日期" prop="confirmatDate" rules="required">
                        <el-input v-model="dataForm.confirmatDate"></el-input>
                </zt-form-item>
      <zt-form-item label="是否进行环境病毒查杀" prop="isVirusScan" rules="required">
                        <el-input v-model="dataForm.isVirusScan"></el-input>
                </zt-form-item>
      <zt-form-item label="病毒库版本" prop="virusDatabaseVersion" rules="required">
                        <el-input v-model="dataForm.virusDatabaseVersion"></el-input>
                </zt-form-item>
    </el-form>
  <zt-dialog ref="dialog" column="2" @confirm="formSubmit" append-to-body title="测试环境建立确认表">
      <el-form :model="dataForm" style="padding: 0" :inline="true"  ref="dataForm" :disabled="dataForm.disabled" label-width="130px" class="confirmFormAuto">
        <div class="DConfirmForm">
          <el-form-item label-width="60px" label="编号:" style="width:100%;margin-bottom: 0">
            <span>{{dataForm.code}}</span>
          </el-form-item>
        </div>
        <div style="border: 1px solid rgba(0,0,0,.2);width: 99%" class="confirmDAuto DConfirmForm">
          <el-form-item class="marginTopAndMarginBottom" label="专业实验室名称" style="width: 49%">
            <el-input v-model="dataForm.agencyName" placeholder="专业实验室名称"></el-input>
          </el-form-item>
          <el-form-item class="marginTopAndMarginBottom" label="测试地点" style="width: 49%">
            <el-input v-model="dataForm.site" placeholder="测试地点"></el-input>
          </el-form-item>
          <el-form-item  label="被测软件" style="width: 49%">
            <el-input v-model="dataForm.softwareName" placeholder="被测软件"></el-input>
          </el-form-item>
          <el-form-item label="版本" style="width: 49%">
            <el-input v-model="dataForm.softwareIdentity" placeholder="版本"></el-input>
          </el-form-item>
          <div class="el-flexConfigDialog el-form-border">
            <div class="DFormWidth DAlign DHold">
              硬软件资源
            </div>
            <div class="el-wt-border-left" style="padding-left:5px;width: calc(100% - 130px)">
              <div style="padding: 5px">软件资源:</div>
              <div class="table-container">
              <el-table class="el-software el-margin-top-bot" height="150" border :data="dataForm.softwareResourcesList"
                        stripe>
                <el-table-column prop="code" align="center" width="80" label="序号">
                  <template slot-scope="scope">
                    <span v-html="indexFormat(scope.$index)"></span>
                  </template>
                </el-table-column>
                <el-table-column prop="name" min-width="300" label="软件项名称">
                  <template v-slot="{ row }">
                    <el-input v-model="row.itemName" placeholder="软件项名称/版本"></el-input>
                  </template>
                </el-table-column>
                <el-table-column prop="versions" align="center" width="180" label="版本">
                  <template v-slot="{ row }">
                    <el-input v-model="row.version" placeholder="版本"></el-input>
                  </template>
                </el-table-column>
                <el-table-column prop="use" align="center" width="180" label="用途">
                  <template v-slot="{ row }">
                    <el-input v-model="row.usage" placeholder="用途"></el-input>
                  </template>
                </el-table-column>
                <el-table-column prop="unit" label="提供单位" width="180"  align="center">
                  <template v-slot="{ row }">
                    <el-input v-model="row.provideUnit" placeholder="提供单位"></el-input>
                  </template>
                </el-table-column>
              </el-table>
                <div class="icon-container" @click="addSoftwareRow()">
                  <!-- 放置固定的图标 -->
                  <i class="el-icon-plus"></i>
                </div>
              </div>
              <div style="padding: 5px">硬件资源:</div>
              <div class="table-container">
              <el-table class="el-software el-margin-top-bot" height="150" border :data="dataForm.hardwareResourcesList"
                        stripe>
                <el-table-column prop="code" align="center" width="80" label="序号"></el-table-column>
                <el-table-column prop="itemName" min-width="300" label="硬件和固件项目名称"></el-table-column>
                <el-table-column prop="usage" align="center" width="180" label="用途"></el-table-column>
                <el-table-column prop="number" align="center" width="80" label="数量"></el-table-column>
                <el-table-column prop="state" align="center" width="120" label="状态"></el-table-column>
                <el-table-column prop="provideUnit" align="center" width="180" label="提供单位"></el-table-column>
              </el-table>
                <div class="icon-container" @click="addHardwareRow()">
                  <!-- 放置固定的图标 -->
                  <i class="el-icon-plus"></i>
                </div>
              </div>
            </div>
          </div>
          <div class="el-flexConfigDialog el-B-border">
            <div class="DFormWidth DAlign DHold">
              动态测试环境图
            </div>
            <div style="width: calc(100% - 120px);">
              <div style="height:150px" class="el-wt-border-left">
                <span>{{dataForm.testEnvirontDiagram}}</span>
              </div>
            </div>
          </div>
          <div class="el-flexConfigDialog el-B-border">
            <div class="DFormWidth DAlign DHold">
              环境差异性分析
            </div>
            <div class="el-wt-border-left" style="padding-left:5px;width: calc(100% - 130px)">
              <div class="table-container">
              <el-table class="el-software el-margin-top-bot" height="150" border :data="dataForm.environAnalysisList"
                        stripe>
                <el-table-column prop="code" align="center" width="80" label="序号"></el-table-column>
                <el-table-column prop="realEnviron" min-width="300" label="真实环境"></el-table-column>
                <el-table-column prop="testEnviron" align="center" width="100" label="测试环境"></el-table-column>
                <el-table-column prop="environDifference" align="center" width="100" label="环境差异"></el-table-column>
                <el-table-column prop="resultImpact" align="center" width="160" label="对测试结果影响"></el-table-column>
                <el-table-column prop="measure" align="center" width="180" label="措施"></el-table-column>
              </el-table>
                <div class="icon-container" @click="addDiscrepancyRow()">
                  <!-- 放置固定的图标 -->
                  <i class="el-icon-plus"></i>
                </div>
              </div>
            </div>
          </div>
          <div class="el-flexConfigDialog el-B-border">
            <div class="DFormWidth DAlign DHold">
              环境建立
            </div>
            <div style="width: calc(100% - 120px)"  class="DConfirmForm el-wt-border-left">
              <el-form-item class="marginTopAndMarginBottom" label="人员" style="width: 49%">
                <el-input v-model="dataForm.establishStaff" placeholder="人员"></el-input>
              </el-form-item>
              <el-form-item class="marginTopAndMarginBottom" label="日期" style="width: 48%">
                <el-date-picker
                  v-model="dataForm.establishDate"
                  type="date"
                  placeholder="日期">
                </el-date-picker>
              </el-form-item>
              <el-form-item label-width="180px" class="isKill" label="是否进行环境病毒查杀" style="width: 49%">
                <zt-dict v-model="dataForm.isVirusScan" dict="is_or_not" :radio="true"></zt-dict>
              </el-form-item>
              <el-form-item label="病毒库版本" style="width: 48%">
                <el-input v-model="dataForm.virusDatabaseVersion" placeholder="请输入病毒库版本"></el-input>
              </el-form-item>
            </div>
          </div>
          <div class="el-flexConfigDialog">
            <div class="DFormWidth DAlign DHold">
              环境确认
            </div>
            <div style="width: calc(100% - 120px)" class="DConfirmForm el-wt-border-left">
              <!-- 单位名称 -->
              <el-form-item class="marginTopAndMarginBottom" label="人员" style="width: 49%">
                <el-input v-model="dataForm.confirmatStaff" placeholder="人员"></el-input>
              </el-form-item>
              <!-- 联系人 -->
              <el-form-item class="marginTopAndMarginBottom" label="日期" style="width: 48%">
                <el-date-picker
                  v-model="dataForm.confirmatDate"
                  type="date"
                  placeholder="日期">
                </el-date-picker>
              </el-form-item>
            </div>
          </div>
        </div>
      </el-form>
  </zt-dialog>
</template>
@@ -48,29 +163,57 @@
        dataForm: {
          id: '',
          code: '',
          agencyName:'',
          site:'',
          softwareName:'',
          softwareIdentity:'',
          hardSoftwareRes: '',
          testEnvirontDiagram: '',
          softwareResourcesList:[],
          hardwareResourcesList:[],
          environAnalysisList:[],
          establishStaff:'',
          establishDate:'',
          environAnalysis: '',
          environEstablish: '',
          establishStaff: '',
          establishDate: '',
          environConfirmat: '',
          confirmatStaff: '',
          confirmatDate: '',
          isVirusScan: '',
          virusDatabaseVersion: ''
          virusDatabaseVersion: '',
          softwareData:[]
        }
      }
    },
    methods: {
      init(id,row){
        this.dataForm.id = row.id
        this.dataForm.projectId = row.projectId
        // this.dataForm.disabled
        this.getInfo()
        console.log(this.dataForm.id,this.dataForm.projectId,'params params')
      },
      // 获取信息
      async getInfo() {
        let res = await this.$http.get(`/project/Environ/${this.dataForm.id}`)
        let params = {
          orderId: this.dataForm.id,
          projectId: this.dataForm.projectId
        }
        let res = await this.$http.get(`/project/Environ/getDto`,{params: params})
        this.dataForm = {
          ...this.dataForm,
          ...res.data
        }
        console.log(this.dataForm,'this.dataForm')
      },
      indexFormat(index){
        return index += 1
      },
      addSoftwareRow(){
        this.dataForm.softwareData.push({})
      },
      addHardwareRow(){},
      addDiscrepancyRow(){},
      // 表单提交
      async formSubmit() {
        let res = await this.$http[!this.dataForm.id ? 'post' : 'put']('/project/Environ/', this.dataForm)
@@ -83,3 +226,96 @@
    }
  }
</script>
<style>
.confirmFormAuto {
  width: 70%;
  margin: 0 auto;
}
.confirmDAuto{
  border: 1px solid rgba(0,0,0,.2);
}
.el-flexConfigDialog {
  display: flex;
  align-items: center;
}
.DFormWidth {
  width: 120px;
}
.DAlign {
  text-align: center;
}
.DConfirmForm {
  /*border-left: 1px solid;*/
  width: 100%;
}
.DConfirmForm > .el-form-item > .el-form-item__content {
  width: calc(100% - 130px);
}
.DConfirmForm > .el-form-item.isKill > .el-form-item__content {
  width: calc(100% - 180px);
}
.el-form-border{
  border-top: 1px solid rgba(0,0,0,.2);
  border-bottom: 1px solid rgba(0,0,0,.2);
}
.el-B-border{
  border-bottom: 1px solid rgba(0,0,0,.2);
}
.el-margin-top-bot{
  margin-top:5px;
  margin-bottom:5px;
}
.el-wt-border-left{
  border-left:1px solid rgba(0,0,0,.2);
}
.zt .el-table.el-software th {
  background: transparent;
}
.zt .el-table.el-software th > .cell {
  font-weight: 500;
}
.DHold{
  font-weight: 600;
}
.zt .el-table.el-software{
  font-size: 14px;
}
.confirmFormAuto .marginTopAndMarginBottom {
  margin-top: 10px !important;
  margin-bottom: 0 !important;
}
.confirmFormAuto .marginTopAndMarginBottom2 {
  margin-top: -10px !important;
  margin-bottom: 10px !important;
}
.confirmFormAuto .marginTopAndMarginBottom3 {
  margin-top: 0 !important;
  margin-bottom: 10px !important;
}
.table-container {
  position: relative;
}
.icon-container {
  z-index: 1;
  position: absolute;
  bottom: -20px;
  left: 50%;
  width: 40px;
  height: 30px;
  text-align: center;
  line-height: 30px;
  transform: translateX(-50%);
  border: 1px solid #EBEEF5;
  background-color: #fafafa;
  box-shadow: 0 3px 6px 0 rgba(72, 119, 232, 0.14);
  border-radius: 2px;
}
</style>
web/src/views/modules/project/Environ.vue
@@ -1,25 +1,32 @@
<template>
  <el-card shadow="never" class="aui-card--fill">
    <div class="mod-project-environ}">
      <zt-table-wraper query-url="/project/Environ/page" delete-url="/project/Environ" v-slot="{ table }">
      <zt-table-wraper query-url="/project/Environ/page" delete-url="/project/Environ" v-slot="{ table }" @dataLoaded="dataLoaded">
        <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>
            <zt-button type="query" @click="table.query()"/>
<!--            <zt-button type="query" @click="table.query()"/>-->
            <zt-button type="primary" class="el-icon-edit" perm="project:add" @click="add()">新增</zt-button>
            <zt-button type="add" perm="project:add" @click="table.editHandle()"/>
            <zt-button type="delete" perm="project:delete" @click="table.deleteHandle()"/>
          </el-form-item>
        </el-form>
        <el-table v-loading="table.dataLoading" :data="table.dataList" height="100px" v-adaptive="{bottomOffset:70}" border @selection-change="table.selectionChangeHandle">
          <el-table-column type="selection" width="40"/>
          <el-table-column align="center" type="selection" width="40"/>
            <el-table-column prop="code" label="编号"/>
          <el-table-column prop="softwareName" label="软件名称"/>
          <el-table-column prop="softwareIdentity" label="标识"/>
              <zt-table-column-handle :table="table" edit-perm="project:update" delete-perm="project::delete"/>
        </el-table>
        <!-- 弹窗, 新增 / 修改 -->
        <add-or-update @refreshDataList="table.query"/>
        <add-or-update ref="addOrUpdate" @refreshDataList="table.query"/>
        <ProjectSelect ref="projectSelect"
                       @refreshDataList="table.query"
                       @setProjectInfo="openAddWin">
        </ProjectSelect>
      </zt-table-wraper>
    </div>
  </el-card>
@@ -27,6 +34,7 @@
<script>
  import AddOrUpdate from './Environ-AddOrUpdate'
  import ProjectSelect from "./Project-select.vue"
  export default {
    data() {
      return {
@@ -36,7 +44,20 @@
      }
    },
    components: {
      AddOrUpdate
      AddOrUpdate,
      ProjectSelect
    },
    methods:{
      dataLoaded(data){
        console.log(data,'data daraList')
      },
      add() {
        this.$refs.projectSelect.$refs.dialog.init("environ")
      },
      openAddWin(row) {
        console.log(row.id, 'row.id')
        this.$refs.addOrUpdate.$refs.dialog.init(null, {id: null, projectId: row.id})
      },
    }
  }
</script>