From 2c89ccdc9e008060f8cd6608c9fcb014616987a3 Mon Sep 17 00:00:00 2001
From: zzw <wander.zheng@qq.com>
Date: 星期一, 20 十一月 2023 10:27:45 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironHardwareResourcesController.java |   96 +++
 web/src/views/modules/olderForm/confirmForm.vue                                                               |  495 +++++++++------
 modules/mainPart/src/main/java/com/zt/life/modules/project/model/Environ.java                                 |   20 
 modules/mainPart/src/main/resources/mapper/project/EnvironAnalysisDao.xml                                     |   20 
 modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironHardwareResourcesDao.java               |   23 
 modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironAnalysisService.java                |   48 +
 modules/mainPart/src/main/java/com/zt/life/modules/project/dto/SoftwareTestOrderDto.java                      |   15 
 modules/mainPart/src/main/resources/mapper/project/EnvironDao.xml                                             |    7 
 modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironSoftwareResourcesController.java |   96 +++
 modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironService.java                        |  119 +++
 modules/mainPart/src/main/resources/mapper/project/EnvironHardwareResourcesDao.xml                            |   20 
 modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironAnalysisController.java          |   96 +++
 modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironSoftwareResources.java                |   42 +
 modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironAnalysisDao.java                        |   23 
 web/src/views/modules/project/Environ.vue                                                                     |   33 
 modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironHardwareResourcesService.java       |   48 +
 modules/mainPart/src/main/resources/mapper/sysBaseInfo/TestAgencyInfoDao.xml                                  |    5 
 modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironSoftwareResourcesDao.java               |   23 
 modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironController.java                  |   56 +
 web/src/views/modules/project/Environ-AddOrUpdate.vue                                                         |  322 +++++++++-
 modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironHardwareResources.java                |   45 +
 modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironSoftwareResourcesService.java       |   48 +
 modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironAnalysis.java                         |   45 +
 modules/mainPart/src/main/resources/mapper/project/EnvironSoftwareResourcesDao.xml                            |   20 
 24 files changed, 1,476 insertions(+), 289 deletions(-)

diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironAnalysisController.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironAnalysisController.java
new file mode 100644
index 0000000..e145ae0
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironAnalysisController.java
@@ -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();
+    }
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironController.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironController.java
index 4e3d86a..b696495 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironController.java
+++ b/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);
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironHardwareResourcesController.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironHardwareResourcesController.java
new file mode 100644
index 0000000..fe758bb
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironHardwareResourcesController.java
@@ -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();
+    }
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironSoftwareResourcesController.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironSoftwareResourcesController.java
new file mode 100644
index 0000000..ae91210
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironSoftwareResourcesController.java
@@ -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();
+    }
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironAnalysisDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironAnalysisDao.java
new file mode 100644
index 0000000..bfc96d8
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironAnalysisDao.java
@@ -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);
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironHardwareResourcesDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironHardwareResourcesDao.java
new file mode 100644
index 0000000..baffcd6
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironHardwareResourcesDao.java
@@ -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);
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironSoftwareResourcesDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironSoftwareResourcesDao.java
new file mode 100644
index 0000000..afc215a
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/dao/EnvironSoftwareResourcesDao.java
@@ -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);
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/dto/SoftwareTestOrderDto.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/dto/SoftwareTestOrderDto.java
index 466f9b8..527ef61 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/project/dto/SoftwareTestOrderDto.java
+++ b/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<>();
+
 }
 
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/model/Environ.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/model/Environ.java
index 1c8f2e8..2e55186 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/project/model/Environ.java
+++ b/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;
+
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironAnalysis.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironAnalysis.java
new file mode 100644
index 0000000..666826f
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironAnalysis.java
@@ -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 = "鐜娴嬭瘯鍗旾D")
+	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;
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironHardwareResources.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironHardwareResources.java
new file mode 100644
index 0000000..26f6414
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironHardwareResources.java
@@ -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 = "鐜娴嬭瘯鍗旾D")
+	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;
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironSoftwareResources.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironSoftwareResources.java
new file mode 100644
index 0000000..d8dcfcb
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/model/EnvironSoftwareResources.java
@@ -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 = "鐜娴嬭瘯鍗旾D")
+	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;
+
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironAnalysisService.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironAnalysisService.java
new file mode 100644
index 0000000..04fed58
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironAnalysisService.java
@@ -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);
+    }
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironHardwareResourcesService.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironHardwareResourcesService.java
new file mode 100644
index 0000000..47e2a76
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironHardwareResourcesService.java
@@ -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);
+    }
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironService.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironService.java
index d030877..556abeb 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironService.java
+++ b/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;
+    }
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironSoftwareResourcesService.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironSoftwareResourcesService.java
new file mode 100644
index 0000000..4d6d48e
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironSoftwareResourcesService.java
@@ -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);
+    }
+}
diff --git a/modules/mainPart/src/main/resources/mapper/project/EnvironAnalysisDao.xml b/modules/mainPart/src/main/resources/mapper/project/EnvironAnalysisDao.xml
new file mode 100644
index 0000000..7c61953
--- /dev/null
+++ b/modules/mainPart/src/main/resources/mapper/project/EnvironAnalysisDao.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.zt.life.modules.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>
diff --git a/modules/mainPart/src/main/resources/mapper/project/EnvironDao.xml b/modules/mainPart/src/main/resources/mapper/project/EnvironDao.xml
index 42eb2ff..dc5a2f0 100644
--- a/modules/mainPart/src/main/resources/mapper/project/EnvironDao.xml
+++ b/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>
diff --git a/modules/mainPart/src/main/resources/mapper/project/EnvironHardwareResourcesDao.xml b/modules/mainPart/src/main/resources/mapper/project/EnvironHardwareResourcesDao.xml
new file mode 100644
index 0000000..db884be
--- /dev/null
+++ b/modules/mainPart/src/main/resources/mapper/project/EnvironHardwareResourcesDao.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.zt.life.modules.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>
diff --git a/modules/mainPart/src/main/resources/mapper/project/EnvironSoftwareResourcesDao.xml b/modules/mainPart/src/main/resources/mapper/project/EnvironSoftwareResourcesDao.xml
new file mode 100644
index 0000000..d55ed3e
--- /dev/null
+++ b/modules/mainPart/src/main/resources/mapper/project/EnvironSoftwareResourcesDao.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.zt.life.modules.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>
diff --git a/modules/mainPart/src/main/resources/mapper/sysBaseInfo/TestAgencyInfoDao.xml b/modules/mainPart/src/main/resources/mapper/sysBaseInfo/TestAgencyInfoDao.xml
index b1f1e5e..725551c 100644
--- a/modules/mainPart/src/main/resources/mapper/sysBaseInfo/TestAgencyInfoDao.xml
+++ b/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}
diff --git a/web/src/views/modules/olderForm/confirmForm.vue b/web/src/views/modules/olderForm/confirmForm.vue
index 52439b8..5b52112 100644
--- a/web/src/views/modules/olderForm/confirmForm.vue
+++ b/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>
diff --git a/web/src/views/modules/project/Environ-AddOrUpdate.vue b/web/src/views/modules/project/Environ-AddOrUpdate.vue
index 367bcd1..0d3e81c 100644
--- a/web/src/views/modules/project/Environ-AddOrUpdate.vue
+++ b/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>
diff --git a/web/src/views/modules/project/Environ.vue b/web/src/views/modules/project/Environ.vue
index ae2bfb1..31489a1 100644
--- a/web/src/views/modules/project/Environ.vue
+++ b/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>

--
Gitblit v1.9.1