Browse Source

pssr 报警联锁确认
仪表测试
锁开锁关驳回
检修项目驳回
机泵
安全设施

jiangbiao 7 months ago
parent
commit
0966b481b3
66 changed files with 3694 additions and 1936 deletions
  1. 5 5
      master/src/main/java/com/ruoyi/project/pssr/controller/TPssrAboveallController.java
  2. 30 8
      master/src/main/java/com/ruoyi/project/pssr/controller/TPssrAlarmController.java
  3. 247 0
      master/src/main/java/com/ruoyi/project/pssr/controller/TPssrApproveController.java
  4. 29 8
      master/src/main/java/com/ruoyi/project/pssr/controller/TPssrInstrumentTestController.java
  5. 83 2
      master/src/main/java/com/ruoyi/project/pssr/controller/TPssrLockController.java
  6. 87 6
      master/src/main/java/com/ruoyi/project/pssr/controller/TPssrOverhaulExchangerController.java
  7. 90 2
      master/src/main/java/com/ruoyi/project/pssr/controller/TPssrOverhaulFilterController.java
  8. 88 2
      master/src/main/java/com/ruoyi/project/pssr/controller/TPssrOverhaulPipeController.java
  9. 90 2
      master/src/main/java/com/ruoyi/project/pssr/controller/TPssrOverhaulPumpController.java
  10. 89 2
      master/src/main/java/com/ruoyi/project/pssr/controller/TPssrOverhaulTowerController.java
  11. 89 2
      master/src/main/java/com/ruoyi/project/pssr/controller/TPssrOverhaulValveController.java
  12. 199 29
      master/src/main/java/com/ruoyi/project/pssr/controller/TPssrPumpCleaningController.java
  13. 197 29
      master/src/main/java/com/ruoyi/project/pssr/controller/TPssrPumpFillController.java
  14. 202 29
      master/src/main/java/com/ruoyi/project/pssr/controller/TPssrPumpOverhaulController.java
  15. 105 61
      master/src/main/java/com/ruoyi/project/pssr/controller/TPssrSafetyController.java
  16. 19 0
      master/src/main/java/com/ruoyi/project/pssr/domain/TPssrPumpCleaning.java
  17. 19 0
      master/src/main/java/com/ruoyi/project/pssr/domain/TPssrPumpFill.java
  18. 19 0
      master/src/main/java/com/ruoyi/project/pssr/domain/TPssrPumpOverhaul.java
  19. 10 10
      master/src/main/java/com/ruoyi/project/pssr/mapper/TPssrMaterialMapper.java
  20. 7 7
      master/src/main/java/com/ruoyi/project/pssr/mapper/TPssrMaterialRawMapper.java
  21. 1 0
      master/src/main/java/com/ruoyi/project/pssr/mapper/TPssrPumpCleaningMapper.java
  22. 3 0
      master/src/main/java/com/ruoyi/project/pssr/mapper/TPssrPumpFillMapper.java
  23. 1 0
      master/src/main/java/com/ruoyi/project/pssr/mapper/TPssrPumpOverhaulMapper.java
  24. 1 0
      master/src/main/java/com/ruoyi/project/pssr/service/ITPssrMaterialRawService.java
  25. 1 0
      master/src/main/java/com/ruoyi/project/pssr/service/ITPssrMaterialService.java
  26. 1 0
      master/src/main/java/com/ruoyi/project/pssr/service/ITPssrPumpCleaningService.java
  27. 2 0
      master/src/main/java/com/ruoyi/project/pssr/service/ITPssrPumpFillService.java
  28. 1 0
      master/src/main/java/com/ruoyi/project/pssr/service/ITPssrPumpOverhaulService.java
  29. 5 0
      master/src/main/java/com/ruoyi/project/pssr/service/impl/TPssrMaterialRawServiceImpl.java
  30. 5 0
      master/src/main/java/com/ruoyi/project/pssr/service/impl/TPssrMaterialServiceImpl.java
  31. 5 0
      master/src/main/java/com/ruoyi/project/pssr/service/impl/TPssrPumpCleaningServiceImpl.java
  32. 10 0
      master/src/main/java/com/ruoyi/project/pssr/service/impl/TPssrPumpFillServiceImpl.java
  33. 5 0
      master/src/main/java/com/ruoyi/project/pssr/service/impl/TPssrPumpOverhaulServiceImpl.java
  34. 10 0
      master/src/main/resources/mybatis/pssr/TPssrMaterialMapper.xml
  35. 11 1
      master/src/main/resources/mybatis/pssr/TPssrMaterialRawMapper.xml
  36. 10 0
      master/src/main/resources/mybatis/pssr/TPssrPumpCleaningMapper.xml
  37. 31 0
      master/src/main/resources/mybatis/pssr/TPssrPumpFillMapper.xml
  38. 10 0
      master/src/main/resources/mybatis/pssr/TPssrPumpOverhaulMapper.xml
  39. 9 0
      ui/src/api/pssr/lock.js
  40. 9 0
      ui/src/api/pssr/overhaulExchanger.js
  41. 7 0
      ui/src/api/pssr/overhaulFilter.js
  42. 7 0
      ui/src/api/pssr/overhaulPipe.js
  43. 7 0
      ui/src/api/pssr/overhaulPump.js
  44. 7 0
      ui/src/api/pssr/overhaulTower.js
  45. 7 0
      ui/src/api/pssr/overhaulValve.js
  46. 20 1
      ui/src/api/pssr/pumpCleaning.js
  47. 20 1
      ui/src/api/pssr/pumpFill.js
  48. 20 1
      ui/src/api/pssr/pumpOverhaul.js
  49. 152 84
      ui/src/router/index.js
  50. 8 7
      ui/src/views/approve/approveDetail/pssrApprove-detail.vue
  51. 35 30
      ui/src/views/pssr/aboveall/index.vue
  52. 233 297
      ui/src/views/pssr/alarm/index.vue
  53. 1 1
      ui/src/views/pssr/approve/index.vue
  54. 235 291
      ui/src/views/pssr/instrumentTest/index.vue
  55. 35 2
      ui/src/views/pssr/lock/index.vue
  56. 4 4
      ui/src/views/pssr/material/index.vue
  57. 4 14
      ui/src/views/pssr/materialRaw/index.vue
  58. 37 3
      ui/src/views/pssr/overhaulExchanger/index.vue
  59. 35 3
      ui/src/views/pssr/overhaulFilter/index.vue
  60. 35 3
      ui/src/views/pssr/overhaulPipe/index.vue
  61. 35 3
      ui/src/views/pssr/overhaulPump/index.vue
  62. 35 3
      ui/src/views/pssr/overhaulTower/index.vue
  63. 35 3
      ui/src/views/pssr/overhaulValve/index.vue
  64. 283 328
      ui/src/views/pssr/pumpCleaning/index.vue
  65. 282 337
      ui/src/views/pssr/pumpFill/index.vue
  66. 280 315
      ui/src/views/pssr/pumpOverhaul/index.vue

+ 5 - 5
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrAboveallController.java

@@ -80,11 +80,11 @@ public class TPssrAboveallController extends BaseController {
     @Log(title = "PSSR", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody TPssrAboveall tPssrAboveall) {
-        if (StringUtils.isNotEmpty(tPssrAboveall.getUnit())) {
-            String unit = tPssrAboveall.getUnit();
-            tPssrAboveall.setUnit(unit.substring(0, unit.indexOf("_")));
-            tPssrAboveall.setUnitDes(unit.substring(unit.indexOf("_") + 1));
-        }
+//        if (StringUtils.isNotEmpty(tPssrAboveall.getUnit())) {
+//            String unit = tPssrAboveall.getUnit();
+//            tPssrAboveall.setUnit(unit.substring(0, unit.indexOf("_")));
+//            tPssrAboveall.setUnitDes(unit.substring(unit.indexOf("_") + 1));
+//        }
         tPssrAboveallService.insertTPssrAboveall(tPssrAboveall);//新增主表数据
         //新增子表数据
         for (TPssrSubcontent subcontent : tPssrAboveall.getSubcontents()) {

+ 30 - 8
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrAlarmController.java

@@ -1,16 +1,15 @@
 package com.ruoyi.project.pssr.controller;
 
+import java.io.IOException;
+import java.util.Date;
 import java.util.List;
+
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.framework.config.RuoYiConfig;
+import com.ruoyi.project.pssr.domain.TPssrAlarm;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.project.pssr.domain.TPssrAlarm;
@@ -19,6 +18,7 @@ import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 报警联锁值确认Controller
@@ -100,4 +100,26 @@ public class TPssrAlarmController extends BaseController
     {
         return toAjax(tPssrAlarmService.deleteTPssrAlarmByIds(ids));
     }
+
+
+
+    @Log(title = "报警联锁值确认附件上传", businessType = BusinessType.UPDATE)
+    @PostMapping("/uploadFile")
+    public AjaxResult uploadFile(@RequestParam("file") MultipartFile file, Long subId) throws IOException
+    {
+        if (!file.isEmpty())
+        {
+            String url = FileUploadUtils.upload(RuoYiConfig.getFilePath("/pssr/bjlszqr"), file);
+            TPssrAlarm test = new TPssrAlarm();
+            test.setSubId(subId);
+            test.setFileUrl(url);
+            test.setFileName(file.getOriginalFilename());
+            test.setApproveStatus(0L);
+            test.setCreatedate(new Date());
+            test.setCreaterCode(getUserId().toString());
+            tPssrAlarmService.insertTPssrAlarm(test);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error("上传失败,请联系管理员");
+    }
 }

+ 247 - 0
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrApproveController.java

@@ -157,6 +157,27 @@ public class TPssrApproveController extends BaseController {
     @Autowired
     private ITPssrLightingService tPssrLightingService;
 
+    @Autowired
+    private ITPssrMaterialService tPssrMaterialService;
+
+    @Autowired
+    private ITPssrMaterialRawService tPssrMaterialRawService;
+
+    @Autowired
+    private ITPssrPumpFillService tPssrPumpFillService;
+
+    @Autowired
+    private ITPssrPumpCleaningService tPssrPumpCleaningService;
+
+    @Autowired
+    private ITPssrPumpOverhaulService tPssrPumpOverhaulService;
+
+    @Autowired
+    private ITPssrInstrumentTestService tPssrInstrumentTestService;
+
+    @Autowired
+    private ITPssrAlarmService tPssrAlarmService;
+
     /**
      * 查询pssr审批管理列表
      */
@@ -283,6 +304,7 @@ public class TPssrApproveController extends BaseController {
                 doYflApprove(tPssrSubcontent);
                 break;
             case "jb"://机泵
+                doJbApprove(tPssrSubcontent);
                 break;
             case "zdj"://支吊架
                 doZdjApprove(tPssrSubcontent);
@@ -294,8 +316,10 @@ public class TPssrApproveController extends BaseController {
                 doYbjyApprove(tPssrSubcontent);
                 break;
             case "yblscs"://仪表联锁测试
+                doYblscsApprove(tPssrSubcontent);
                 break;
             case "bjlszqr"://报警联锁值确认
+                doBjlszqrApprove(tPssrSubcontent);
                 break;
             case "lsdy"://临时电源
                 doLsdyApprove(tPssrSubcontent);
@@ -1849,6 +1873,7 @@ public class TPssrApproveController extends BaseController {
 
     /**
      * 人身防护审批流程发起申请
+     *
      * @param sub 子表对象
      */
     private void doRsfhApprove(TPssrSubcontent sub) {
@@ -1923,8 +1948,230 @@ public class TPssrApproveController extends BaseController {
         }
     }
 
+    /**
+     * 原辅料审批发起申请
+     */
     private void doYflApprove(TPssrSubcontent sub) {
         String userId = getUserId().toString();
+
+        //修改各表状态
+        TPssrMaterial material = new TPssrMaterial();
+        material.setSubId(sub.getId());
+        material.setApproveStatus(1L);
+        material.setUpdatedate(new Date());
+        material.setUpdaterCode(userId);
+        tPssrMaterialService.updateAllBySubId(material);
+        TPssrMaterialRaw materialRaw = new TPssrMaterialRaw();
+        materialRaw.setSubId(sub.getId());
+        materialRaw.setApproveStatus(1L);
+        materialRaw.setUpdatedate(new Date());
+        materialRaw.setUpdaterCode(userId);
+        tPssrMaterialRawService.updateAllBySubId(materialRaw);
+
+        // 查询确认人
+        TPssrMaterial entity = new TPssrMaterial();
+        entity.setSubId(sub.getId());
+        entity.setApproveStatus(1L);
+        TPssrMaterial tPssrMaterial = tPssrMaterialService.selectAllConfirmedPersonBySubId(entity);
+        String confirmer1s = null;
+        String confirmer2s = null;
+        if (tPssrMaterial != null) {
+            confirmer1s = tPssrMaterial.getConfirm1();
+            confirmer2s = tPssrMaterial.getConfirm2();
+        }
+        logger.info("=======================confirmer1s:{}", confirmer1s);
+        logger.info("=======================confirmer2s:{}", confirmer2s);
+
+        Set<String> confirmerUsers1 = new HashSet<>();
+        Set<String> confirmerUsers2 = new HashSet<>();
+        if (StringUtils.isNotEmpty(confirmer1s)) {
+            confirmerUsers1.addAll(Arrays.asList(confirmer1s.split(",")));
+        }
+        if (StringUtils.isNotEmpty(confirmer2s)) {
+            confirmerUsers2.addAll(Arrays.asList(confirmer2s.split(",")));
+        }
+        //查询是否已存在审批流程
+        TPssrApprove tPssrApprove = tPssrApproveService.selectTPssrApproveBySubId(sub.getId());
+        if (tPssrApprove == null) {
+            TPssrApprove approve = new TPssrApprove();
+            approve.setSubId(sub.getId());
+            approve.setApNo(DateUtils.dateTimeNow() + userId);
+            approve.setApproveStatus(1L);
+            approve.setSubCharge(sub.getConfirm());
+            approve.setCreaterCode(userId);
+            approve.setCreatedate(new Date());
+            tPssrApproveService.insertTPssrApprove(approve);
+
+            pssr2confirm(approve, new ArrayList<>(confirmerUsers1), new ArrayList<>(confirmerUsers2), sub.getConfirm());
+        } else {
+            delProcess(tPssrApprove.getProcessId(), "pssr2confirm");
+            entity.setSubId(sub.getId());
+            entity.setApproveStatus(3L);
+            tPssrMaterial = tPssrMaterialService.selectAllConfirmedPersonBySubId(entity);
+            if (tPssrMaterial != null) {
+                confirmer1s = tPssrMaterial.getConfirm1();
+                confirmer2s = tPssrMaterial.getConfirm2();
+            }
+
+            if (StringUtils.isNotEmpty(confirmer1s)) {
+                confirmerUsers1.addAll(Arrays.asList(confirmer1s.split(",")));
+            }
+            if (StringUtils.isNotEmpty(confirmer2s)) {
+                confirmerUsers2.addAll(Arrays.asList(confirmer2s.split(",")));
+            }
+            pssr2confirm(tPssrApprove, new ArrayList<>(confirmerUsers1), new ArrayList<>(confirmerUsers2), sub.getConfirm());
+        }
+    }
+
+    /**
+     * 机泵审批发起申请
+     */
+    private void doJbApprove(TPssrSubcontent sub) {
+        String userId = getUserId().toString();
+
+        //修改各表状态
+        TPssrPumpCleaning cleaning = new TPssrPumpCleaning();
+        cleaning.setSubId(sub.getId());
+        cleaning.setApproveStatus(1L);
+        cleaning.setUpdatedate(new Date());
+        cleaning.setUpdaterCode(userId);
+        tPssrPumpCleaningService.updateAllBySubId(cleaning);
+        TPssrPumpFill fill = new TPssrPumpFill();
+        fill.setSubId(sub.getId());
+        fill.setApproveStatus(1L);
+        fill.setUpdatedate(new Date());
+        fill.setUpdaterCode(userId);
+        tPssrPumpFillService.updateAllBySubId(fill);
+        TPssrPumpOverhaul overhaul = new TPssrPumpOverhaul();
+        overhaul.setSubId(sub.getId());
+        overhaul.setApproveStatus(1L);
+        overhaul.setUpdatedate(new Date());
+        overhaul.setUpdaterCode(userId);
+        tPssrPumpOverhaulService.updateAllBySubId(overhaul);
+
+        // 查询确认人
+        TPssrPumpFill entity = new TPssrPumpFill();
+        entity.setSubId(sub.getId());
+        entity.setApproveStatus(1L);
+        TPssrPumpFill queryData = tPssrPumpFillService.selectAllConfirmedPersonBySubId(entity);
+        String confirmer1s = null;
+        String confirmer2s = null;
+        if (queryData != null) {
+            confirmer1s = queryData.getConfirmer1();
+            confirmer2s = queryData.getConfirmer2();
+        }
+        logger.info("=======================confirmer1s:{}", confirmer1s);
+        logger.info("=======================confirmer2s:{}", confirmer2s);
+
+        Set<String> confirmerUsers1 = new HashSet<>();
+        Set<String> confirmerUsers2 = new HashSet<>();
+        if (StringUtils.isNotEmpty(confirmer1s)) {
+            confirmerUsers1.addAll(Arrays.asList(confirmer1s.split(",")));
+        }
+        if (StringUtils.isNotEmpty(confirmer2s)) {
+            confirmerUsers2.addAll(Arrays.asList(confirmer2s.split(",")));
+        }
+        //查询是否已存在审批流程
+        TPssrApprove tPssrApprove = tPssrApproveService.selectTPssrApproveBySubId(sub.getId());
+        if (tPssrApprove == null) {
+            TPssrApprove approve = new TPssrApprove();
+            approve.setSubId(sub.getId());
+            approve.setApNo(DateUtils.dateTimeNow() + userId);
+            approve.setApproveStatus(1L);
+            approve.setSubCharge(sub.getConfirm());
+            approve.setCreaterCode(userId);
+            approve.setCreatedate(new Date());
+            tPssrApproveService.insertTPssrApprove(approve);
+
+            pssr2confirm(approve, new ArrayList<>(confirmerUsers1), new ArrayList<>(confirmerUsers2), sub.getConfirm());
+        } else {
+            delProcess(tPssrApprove.getProcessId(), "pssr2confirm");
+            entity.setSubId(sub.getId());
+            entity.setApproveStatus(3L);
+            queryData = tPssrPumpFillService.selectAllConfirmedPersonBySubId(entity);
+            if (queryData != null) {
+                confirmer1s = queryData.getConfirmer1();
+                confirmer2s = queryData.getConfirmer2();
+            }
+
+            if (StringUtils.isNotEmpty(confirmer1s)) {
+                confirmerUsers1.addAll(Arrays.asList(confirmer1s.split(",")));
+            }
+            if (StringUtils.isNotEmpty(confirmer2s)) {
+                confirmerUsers2.addAll(Arrays.asList(confirmer2s.split(",")));
+            }
+            pssr2confirm(tPssrApprove, new ArrayList<>(confirmerUsers1), new ArrayList<>(confirmerUsers2), sub.getConfirm());
+        }
+    }
+
+    /**
+     * 仪表联锁测试审批发起申请
+     */
+    private void doYblscsApprove(TPssrSubcontent sub) {
+        String userId = getUserId().toString();
+
+        //修改表状态
+        TPssrInstrumentTest instrumentTest = new TPssrInstrumentTest();
+        instrumentTest.setSubId(sub.getId());
+        for (TPssrInstrumentTest test : tPssrInstrumentTestService.selectTPssrInstrumentTestList(instrumentTest)) {
+            test.setApproveStatus(2L);
+            test.setUpdatedate(new Date());
+            test.setUpdaterCode(userId);
+            tPssrInstrumentTestService.updateTPssrInstrumentTest(test);
+        }
+        //查询是否已存在审批流程
+        TPssrApprove tPssrApprove = tPssrApproveService.selectTPssrApproveBySubId(sub.getId());
+        if (tPssrApprove == null) {
+            TPssrApprove approve = new TPssrApprove();
+            approve.setSubId(sub.getId());
+            approve.setApNo(DateUtils.dateTimeNow() + userId);
+            approve.setApproveStatus(1L);
+            approve.setSubCharge(sub.getConfirm());
+            approve.setCreaterCode(userId);
+            approve.setCreatedate(new Date());
+            tPssrApproveService.insertTPssrApprove(approve);
+
+            pssr1confirm(approve, new ArrayList<>(), sub.getConfirm());
+        } else {
+            delProcess(tPssrApprove.getProcessId(), "pssr1confirm");
+            pssr1confirm(tPssrApprove, new ArrayList<>(), sub.getConfirm());
+        }
+
+    }
+
+    /**
+     * 仪表联锁测试审批发起申请
+     */
+    private void doBjlszqrApprove(TPssrSubcontent sub) {
+        String userId = getUserId().toString();
+
+        //修改表状态
+        TPssrAlarm alarm = new TPssrAlarm();
+        alarm.setSubId(sub.getId());
+        for (TPssrAlarm test : tPssrAlarmService.selectTPssrAlarmList(alarm)) {
+            test.setApproveStatus(2L);
+            test.setUpdatedate(new Date());
+            test.setUpdaterCode(userId);
+            tPssrAlarmService.updateTPssrAlarm(test);
+        }
+        //查询是否已存在审批流程
+        TPssrApprove tPssrApprove = tPssrApproveService.selectTPssrApproveBySubId(sub.getId());
+        if (tPssrApprove == null) {
+            TPssrApprove approve = new TPssrApprove();
+            approve.setSubId(sub.getId());
+            approve.setApNo(DateUtils.dateTimeNow() + userId);
+            approve.setApproveStatus(1L);
+            approve.setSubCharge(sub.getConfirm());
+            approve.setCreaterCode(userId);
+            approve.setCreatedate(new Date());
+            tPssrApproveService.insertTPssrApprove(approve);
+
+            pssr1confirm(approve, new ArrayList<>(), sub.getConfirm());
+        } else {
+            delProcess(tPssrApprove.getProcessId(), "pssr1confirm");
+            pssr1confirm(tPssrApprove, new ArrayList<>(), sub.getConfirm());
+        }
+
     }
 
     /**

+ 29 - 8
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrInstrumentTestController.java

@@ -1,16 +1,16 @@
 package com.ruoyi.project.pssr.controller;
 
+import java.io.IOException;
+import java.util.Date;
 import java.util.List;
+
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.framework.config.RuoYiConfig;
+import com.ruoyi.project.ehs.domain.TRcfile;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.project.pssr.domain.TPssrInstrumentTest;
@@ -19,6 +19,7 @@ import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 仪联锁测试Controller
@@ -100,4 +101,24 @@ public class TPssrInstrumentTestController extends BaseController
     {
         return toAjax(tPssrInstrumentTestService.deleteTPssrInstrumentTestByIds(ids));
     }
+
+    @Log(title = "仪联锁测试附件上传", businessType = BusinessType.UPDATE)
+    @PostMapping("/uploadFile")
+    public AjaxResult uploadFile(@RequestParam("file") MultipartFile file,Long subId) throws IOException
+    {
+        if (!file.isEmpty())
+        {
+            String url = FileUploadUtils.upload(RuoYiConfig.getFilePath("/pssr/yblscs"), file);
+            TPssrInstrumentTest test = new TPssrInstrumentTest();
+            test.setSubId(subId);
+            test.setFileUrl(url);
+            test.setFileName(file.getOriginalFilename());
+            test.setApproveStatus(0L);
+            test.setCreatedate(new Date());
+            test.setCreaterCode(getUserId().toString());
+            tPssrInstrumentTestService.insertTPssrInstrumentTest(test);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error("上传失败,请联系管理员");
+    }
 }

+ 83 - 2
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrLockController.java

@@ -8,14 +8,20 @@ import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.framework.web.page.TableDataInfo;
 import com.ruoyi.project.pssr.domain.TPssrApprove;
 import com.ruoyi.project.pssr.domain.TPssrLock;
+import com.ruoyi.project.pssr.domain.TPssrMoc;
+import com.ruoyi.project.pssr.domain.TPssrSubcontent;
 import com.ruoyi.project.pssr.service.ITPssrApproveService;
 import com.ruoyi.project.pssr.service.ITPssrLockService;
+import com.ruoyi.project.pssr.service.ITPssrSubcontentService;
+import org.activiti.engine.ProcessEngine;
+import org.activiti.engine.ProcessEngines;
+import org.activiti.engine.TaskService;
+import org.activiti.engine.task.Task;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * 锁开锁关阀门状态Controller
@@ -32,6 +38,9 @@ public class TPssrLockController extends BaseController {
     @Autowired
     private ITPssrApproveService tPssrApproveService;
 
+    @Autowired
+    private ITPssrSubcontentService tPssrSubcontentService;
+
     /**
      * 查询锁开锁关阀门状态列表
      */
@@ -155,6 +164,78 @@ public class TPssrLockController extends BaseController {
 
     }
 
+
+
+    /**
+     * 驳回设计变更
+     */
+    @PutMapping("/turnDownLock")
+    public AjaxResult turnDownLock(@RequestBody TPssrLock tPssrLock) {
+        if (tPssrLock.getIds() != null) {
+            String userId = getUserId().toString();
+            // 修改已选择数据的状态
+            for (Long id : tPssrLock.getIds()) {
+                TPssrLock blind = new TPssrLock();
+                blind.setId(id);
+                blind.setApproveStatus(1L);
+                blind.setUpdatedate(new Date());
+                blind.setUpdaterCode(getUserId().toString());
+                tPssrLockService.updateTPssrLock(blind);
+            }
+            // 查询当前流程
+            TPssrApprove approve = tPssrApproveService.selectTPssrApproveBySubId(tPssrLock.getSubId());
+
+            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
+            TaskService taskService = processEngine.getTaskService();
+            Task task = processEngine.getTaskService()//获取任务service
+                    .createTaskQuery()//创建查询对象
+                    .taskAssignee(userId)
+                    .processInstanceId(approve.getProcessId()).singleResult();
+            String taskId = task.getId();
+
+            // 驳回 查询所有待审批的人员
+            TPssrLock blind = new TPssrLock();
+            blind.setSubId(tPssrLock.getSubId());
+            blind.setApproveStatus(1L);
+            Set<String> confirm1 = new HashSet<>();
+            Set<String> confirm2 = new HashSet<>();
+            for (TPssrLock item : tPssrLockService.selectTPssrLockList(blind)) {
+
+                // 确认人1
+                confirm1.add(item.getConfirm());
+
+                // 确认人2
+                confirm2.add(item.getLockeder());
+            }
+
+
+            //处理流程节点
+            Map<String, Object> param = new HashMap<>();
+            param.put("condition", 1);
+            param.put("confirmUsers1", new ArrayList<>(confirm1));
+            param.put("confirmUsers2", new ArrayList<>(confirm2));
+            //认领任务
+            processEngine.getTaskService().claim(taskId, userId);
+            taskService.addComment(taskId, approve.getProcessId(), "驳回;" + tPssrLock.getRemarks());
+            taskService.complete(taskId, param);
+
+            // 修改审批表和sub表
+            approve.setApproveStatus(1L);
+            approve.setUpdatedate(new Date());
+            approve.setUpdaterCode(getUserId().toString());
+            tPssrApproveService.updateTPssrApprove(approve);
+
+            TPssrSubcontent subcontent = new TPssrSubcontent();
+            subcontent.setId(approve.getSubId());
+            subcontent.setApproveStatus(1L);
+            subcontent.setUpdatedate(new Date());
+            subcontent.setUpdaterCode(getUserId().toString());
+            tPssrSubcontentService.updateTPssrSubcontent(subcontent);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error();
+    }
+
     /**
      * 删除锁开锁关阀门状态
      */

+ 87 - 6
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrOverhaulExchangerController.java

@@ -1,25 +1,25 @@
 package com.ruoyi.project.pssr.controller;
 
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.framework.web.page.TableDataInfo;
-import com.ruoyi.project.pssr.domain.TPssrApprove;
+import com.ruoyi.project.pssr.domain.*;
 import com.ruoyi.project.pssr.domain.TPssrOverhaulExchanger;
 import com.ruoyi.project.pssr.service.ITPssrApproveService;
 import com.ruoyi.project.pssr.service.ITPssrOverhaulExchangerService;
-import org.activiti.engine.ProcessEngine;
-import org.activiti.engine.ProcessEngines;
-import org.activiti.engine.TaskService;
+import com.ruoyi.project.pssr.service.ITPssrSubcontentService;
+import org.activiti.engine.*;
+import org.activiti.engine.impl.identity.Authentication;
 import org.activiti.engine.runtime.ProcessInstance;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * 检修项目-换热器Controller
@@ -36,6 +36,16 @@ public class TPssrOverhaulExchangerController extends BaseController {
     @Autowired
     private ITPssrApproveService tPssrApproveService;
 
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private HistoryService historyService;
+
+    @Autowired
+    private ITPssrSubcontentService tPssrSubcontentService;
+
+
     /**
      * 查询检修项目-换热器列表
      */
@@ -157,4 +167,75 @@ public class TPssrOverhaulExchangerController extends BaseController {
         return AjaxResult.success();
     }
 
+    @PutMapping("/turnDownExchanger")
+    public AjaxResult turnDownExchanger(@RequestBody TPssrOverhaulExchanger tPssrOverhaulExchanger) {
+        if (tPssrOverhaulExchanger.getIds() != null) {
+            String userId = getUserId().toString();
+            // 修改已选择数据的状态
+            for (Long id : tPssrOverhaulExchanger.getIds()) {
+                TPssrOverhaulExchanger blind = new TPssrOverhaulExchanger();
+                blind.setId(id);
+                blind.setApproveStatus(1L);
+                blind.setUpdatedate(new Date());
+                blind.setUpdaterCode(getUserId().toString());
+                tPssrOverhaulExchangerService.updateTPssrOverhaulExchanger(blind);
+            }
+            // 查询当前流程
+            TPssrApprove approve = tPssrApproveService.selectTPssrApproveBySubId(tPssrOverhaulExchanger.getSubId());
+
+            try {
+                runtimeService.deleteProcessInstance(approve.getProcessId(), "pssr1confirm");
+                historyService.deleteHistoricProcessInstance(approve.getProcessId());
+            } catch (Exception e) {
+                logger.info("无运行时流程");
+            }
+
+
+            // 驳回 查询所有待审批的人员
+
+            //查询所有确认人
+            TPssrOverhaulExchanger exchanger = new TPssrOverhaulExchanger();
+            exchanger.setSubId(approve.getSubId());
+            exchanger.setApproveStatus(1L);
+            TPssrOverhaulExchanger overhaul = tPssrOverhaulExchangerService.selectAllConfirmedPersonBySubId(exchanger);
+            String confirmers = null;
+            if (overhaul != null) {
+                confirmers = overhaul.getConfirmedPerson();
+            }
+            logger.info("=======================confirmers:{}", confirmers);
+
+            Set<String> confirmUsers1 = new HashSet<>();
+            if (StringUtils.isNotEmpty(confirmers)) {
+                confirmUsers1.addAll(Arrays.asList(confirmers.split(",")));
+            }
+
+            // 开始申请流程
+            long businessKey = approve.getApproveId();
+            //开始工作流、监听
+            Authentication.setAuthenticatedUserId(userId);//设置当前申请人
+            Map<String, Object> variables = new HashMap<>();
+            variables.put("applyUser", userId);
+            variables.put("confirmUsers", new ArrayList<>(confirmUsers1));
+            variables.put("chargePerson", approve.getSubCharge());
+            //采用key来启动流程定义并设置流程变量,返回流程实例
+            ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr1confirm", String.valueOf(businessKey), variables);
+
+            // 修改审批表和sub表
+            approve.setProcessId(pi.getProcessInstanceId());
+            approve.setApproveStatus(1L);
+            approve.setUpdatedate(new Date());
+            approve.setUpdaterCode(getUserId().toString());
+            tPssrApproveService.updateTPssrApprove(approve);
+
+            TPssrSubcontent subcontent = new TPssrSubcontent();
+            subcontent.setId(approve.getSubId());
+            subcontent.setApproveStatus(1L);
+            subcontent.setUpdatedate(new Date());
+            subcontent.setUpdaterCode(getUserId().toString());
+            tPssrSubcontentService.updateTPssrSubcontent(subcontent);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error();
+    }
+
 }

+ 90 - 2
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrOverhaulFilterController.java

@@ -1,12 +1,18 @@
 package com.ruoyi.project.pssr.controller;
 
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.project.pssr.domain.TPssrApprove;
 import com.ruoyi.project.pssr.domain.TPssrOverhaulExchanger;
+import com.ruoyi.project.pssr.domain.TPssrSubcontent;
 import com.ruoyi.project.pssr.service.ITPssrApproveService;
 import com.ruoyi.project.pssr.service.ITPssrOverhaulExchangerService;
+import com.ruoyi.project.pssr.service.ITPssrSubcontentService;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.impl.identity.Authentication;
+import org.activiti.engine.runtime.ProcessInstance;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -45,6 +51,88 @@ public class TPssrOverhaulFilterController extends BaseController
     @Autowired
     private ITPssrApproveService tPssrApproveService;
 
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private HistoryService historyService;
+
+    @Autowired
+    private ITPssrSubcontentService tPssrSubcontentService;
+
+
+
+    @PutMapping("/turnDownFilter")
+    public AjaxResult turnDownFilter(@RequestBody TPssrOverhaulFilter tPssrOverhaulFilter) {
+        if (tPssrOverhaulFilter.getIds() != null) {
+            String userId = getUserId().toString();
+            // 修改已选择数据的状态
+            for (Long id : tPssrOverhaulFilter.getIds()) {
+                TPssrOverhaulFilter blind = new TPssrOverhaulFilter();
+                blind.setId(id);
+                blind.setApproveStatus(1L);
+                blind.setUpdatedate(new Date());
+                blind.setUpdaterCode(getUserId().toString());
+                tPssrOverhaulFilterService.updateTPssrOverhaulFilter(blind);
+            }
+            // 查询当前流程
+            TPssrApprove approve = tPssrApproveService.selectTPssrApproveBySubId(tPssrOverhaulFilter.getSubId());
+
+            try {
+                runtimeService.deleteProcessInstance(approve.getProcessId(), "pssr1confirm");
+                historyService.deleteHistoricProcessInstance(approve.getProcessId());
+            } catch (Exception e) {
+                logger.info("无运行时流程");
+            }
+
+
+            // 驳回 查询所有待审批的人员
+
+            //查询所有确认人
+            TPssrOverhaulExchanger exchanger = new TPssrOverhaulExchanger();
+            exchanger.setSubId(approve.getSubId());
+            exchanger.setApproveStatus(1L);
+            TPssrOverhaulExchanger overhaul = tPssrOverhaulExchangerService.selectAllConfirmedPersonBySubId(exchanger);
+            String confirmers = null;
+            if (overhaul != null) {
+                confirmers = overhaul.getConfirmedPerson();
+            }
+            logger.info("=======================confirmers:{}", confirmers);
+
+            Set<String> confirmUsers1 = new HashSet<>();
+            if (StringUtils.isNotEmpty(confirmers)) {
+                confirmUsers1.addAll(Arrays.asList(confirmers.split(",")));
+            }
+
+            // 开始申请流程
+            long businessKey = approve.getApproveId();
+            //开始工作流、监听
+            Authentication.setAuthenticatedUserId(userId);//设置当前申请人
+            Map<String, Object> variables = new HashMap<>();
+            variables.put("applyUser", userId);
+            variables.put("confirmUsers", new ArrayList<>(confirmUsers1));
+            variables.put("chargePerson", approve.getSubCharge());
+            //采用key来启动流程定义并设置流程变量,返回流程实例
+            ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr1confirm", String.valueOf(businessKey), variables);
+
+            // 修改审批表和sub表
+            approve.setProcessId(pi.getProcessInstanceId());
+            approve.setApproveStatus(1L);
+            approve.setUpdatedate(new Date());
+            approve.setUpdaterCode(getUserId().toString());
+            tPssrApproveService.updateTPssrApprove(approve);
+
+            TPssrSubcontent subcontent = new TPssrSubcontent();
+            subcontent.setId(approve.getSubId());
+            subcontent.setApproveStatus(1L);
+            subcontent.setUpdatedate(new Date());
+            subcontent.setUpdaterCode(getUserId().toString());
+            tPssrSubcontentService.updateTPssrSubcontent(subcontent);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error();
+    }
+
     /**
      * 查询检修项目-过滤器列表
      */

+ 88 - 2
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrOverhaulPipeController.java

@@ -1,5 +1,6 @@
 package com.ruoyi.project.pssr.controller;
 
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
@@ -9,15 +10,20 @@ import com.ruoyi.framework.web.page.TableDataInfo;
 import com.ruoyi.project.pssr.domain.TPssrApprove;
 import com.ruoyi.project.pssr.domain.TPssrOverhaulExchanger;
 import com.ruoyi.project.pssr.domain.TPssrOverhaulPipe;
+import com.ruoyi.project.pssr.domain.TPssrSubcontent;
 import com.ruoyi.project.pssr.service.ITPssrApproveService;
 import com.ruoyi.project.pssr.service.ITPssrOverhaulExchangerService;
 import com.ruoyi.project.pssr.service.ITPssrOverhaulPipeService;
+import com.ruoyi.project.pssr.service.ITPssrSubcontentService;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.impl.identity.Authentication;
+import org.activiti.engine.runtime.ProcessInstance;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * 检修项目-管线Controller
@@ -37,6 +43,86 @@ public class TPssrOverhaulPipeController extends BaseController {
     @Autowired
     private ITPssrApproveService tPssrApproveService;
 
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private HistoryService historyService;
+
+    @Autowired
+    private ITPssrSubcontentService tPssrSubcontentService;
+
+    @PutMapping("/turnDownPipe")
+    public AjaxResult turnDownPipe(@RequestBody TPssrOverhaulPipe tPssrOverhaulPipe) {
+        if (tPssrOverhaulPipe.getIds() != null) {
+            String userId = getUserId().toString();
+            // 修改已选择数据的状态
+            for (Long id : tPssrOverhaulPipe.getIds()) {
+                TPssrOverhaulPipe blind = new TPssrOverhaulPipe();
+                blind.setId(id);
+                blind.setApproveStatus(1L);
+                blind.setUpdatedate(new Date());
+                blind.setUpdaterCode(getUserId().toString());
+                tPssrOverhaulPipeService.updateTPssrOverhaulPipe(blind);
+            }
+            // 查询当前流程
+            TPssrApprove approve = tPssrApproveService.selectTPssrApproveBySubId(tPssrOverhaulPipe.getSubId());
+
+            try {
+                runtimeService.deleteProcessInstance(approve.getProcessId(), "pssr1confirm");
+                historyService.deleteHistoricProcessInstance(approve.getProcessId());
+            } catch (Exception e) {
+                logger.info("无运行时流程");
+            }
+
+
+            // 驳回 查询所有待审批的人员
+
+            //查询所有确认人
+            TPssrOverhaulExchanger exchanger = new TPssrOverhaulExchanger();
+            exchanger.setSubId(approve.getSubId());
+            exchanger.setApproveStatus(1L);
+            TPssrOverhaulExchanger overhaul = tPssrOverhaulExchangerService.selectAllConfirmedPersonBySubId(exchanger);
+            String confirmers = null;
+            if (overhaul != null) {
+                confirmers = overhaul.getConfirmedPerson();
+            }
+            logger.info("=======================confirmers:{}", confirmers);
+
+            Set<String> confirmUsers1 = new HashSet<>();
+            if (StringUtils.isNotEmpty(confirmers)) {
+                confirmUsers1.addAll(Arrays.asList(confirmers.split(",")));
+            }
+
+            // 开始申请流程
+            long businessKey = approve.getApproveId();
+            //开始工作流、监听
+            Authentication.setAuthenticatedUserId(userId);//设置当前申请人
+            Map<String, Object> variables = new HashMap<>();
+            variables.put("applyUser", userId);
+            variables.put("confirmUsers", new ArrayList<>(confirmUsers1));
+            variables.put("chargePerson", approve.getSubCharge());
+            //采用key来启动流程定义并设置流程变量,返回流程实例
+            ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr1confirm", String.valueOf(businessKey), variables);
+
+            // 修改审批表和sub表
+            approve.setProcessId(pi.getProcessInstanceId());
+            approve.setApproveStatus(1L);
+            approve.setUpdatedate(new Date());
+            approve.setUpdaterCode(getUserId().toString());
+            tPssrApproveService.updateTPssrApprove(approve);
+
+            TPssrSubcontent subcontent = new TPssrSubcontent();
+            subcontent.setId(approve.getSubId());
+            subcontent.setApproveStatus(1L);
+            subcontent.setUpdatedate(new Date());
+            subcontent.setUpdaterCode(getUserId().toString());
+            tPssrSubcontentService.updateTPssrSubcontent(subcontent);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error();
+    }
+
     /**
      * 查询检修项目-管线列表
      */

+ 90 - 2
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrOverhaulPumpController.java

@@ -1,5 +1,6 @@
 package com.ruoyi.project.pssr.controller;
 
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
@@ -9,15 +10,20 @@ import com.ruoyi.framework.web.page.TableDataInfo;
 import com.ruoyi.project.pssr.domain.TPssrApprove;
 import com.ruoyi.project.pssr.domain.TPssrOverhaulExchanger;
 import com.ruoyi.project.pssr.domain.TPssrOverhaulPump;
+import com.ruoyi.project.pssr.domain.TPssrSubcontent;
 import com.ruoyi.project.pssr.service.ITPssrApproveService;
 import com.ruoyi.project.pssr.service.ITPssrOverhaulExchangerService;
 import com.ruoyi.project.pssr.service.ITPssrOverhaulPumpService;
+import com.ruoyi.project.pssr.service.ITPssrSubcontentService;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.impl.identity.Authentication;
+import org.activiti.engine.runtime.ProcessInstance;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * 检修项目-泵Controller
@@ -37,6 +43,88 @@ public class TPssrOverhaulPumpController extends BaseController {
     @Autowired
     private ITPssrApproveService tPssrApproveService;
 
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private HistoryService historyService;
+
+    @Autowired
+    private ITPssrSubcontentService tPssrSubcontentService;
+
+
+    @PutMapping("/turnDownPump")
+    public AjaxResult turnDownPump(@RequestBody TPssrOverhaulPump tPssrOverhaulPump) {
+        if (tPssrOverhaulPump.getIds() != null) {
+            String userId = getUserId().toString();
+            // 修改已选择数据的状态
+            for (Long id : tPssrOverhaulPump.getIds()) {
+                TPssrOverhaulPump blind = new TPssrOverhaulPump();
+                blind.setId(id);
+                blind.setApproveStatus(1L);
+                blind.setUpdatedate(new Date());
+                blind.setUpdaterCode(getUserId().toString());
+                tPssrOverhaulPumpService.updateTPssrOverhaulPump(blind);
+            }
+            // 查询当前流程
+            TPssrApprove approve = tPssrApproveService.selectTPssrApproveBySubId(tPssrOverhaulPump.getSubId());
+
+            try {
+                runtimeService.deleteProcessInstance(approve.getProcessId(), "pssr1confirm");
+                historyService.deleteHistoricProcessInstance(approve.getProcessId());
+            } catch (Exception e) {
+                logger.info("无运行时流程");
+            }
+
+
+            // 驳回 查询所有待审批的人员
+
+            //查询所有确认人
+            TPssrOverhaulExchanger exchanger = new TPssrOverhaulExchanger();
+            exchanger.setSubId(approve.getSubId());
+            exchanger.setApproveStatus(1L);
+            TPssrOverhaulExchanger overhaul = tPssrOverhaulExchangerService.selectAllConfirmedPersonBySubId(exchanger);
+            String confirmers = null;
+            if (overhaul != null) {
+                confirmers = overhaul.getConfirmedPerson();
+            }
+            logger.info("=======================confirmers:{}", confirmers);
+
+            Set<String> confirmUsers1 = new HashSet<>();
+            if (StringUtils.isNotEmpty(confirmers)) {
+                confirmUsers1.addAll(Arrays.asList(confirmers.split(",")));
+            }
+
+            // 开始申请流程
+            long businessKey = approve.getApproveId();
+            //开始工作流、监听
+            Authentication.setAuthenticatedUserId(userId);//设置当前申请人
+            Map<String, Object> variables = new HashMap<>();
+            variables.put("applyUser", userId);
+            variables.put("confirmUsers", new ArrayList<>(confirmUsers1));
+            variables.put("chargePerson", approve.getSubCharge());
+            //采用key来启动流程定义并设置流程变量,返回流程实例
+            ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr1confirm", String.valueOf(businessKey), variables);
+
+            // 修改审批表和sub表
+            approve.setProcessId(pi.getProcessInstanceId());
+            approve.setApproveStatus(1L);
+            approve.setUpdatedate(new Date());
+            approve.setUpdaterCode(getUserId().toString());
+            tPssrApproveService.updateTPssrApprove(approve);
+
+            TPssrSubcontent subcontent = new TPssrSubcontent();
+            subcontent.setId(approve.getSubId());
+            subcontent.setApproveStatus(1L);
+            subcontent.setUpdatedate(new Date());
+            subcontent.setUpdaterCode(getUserId().toString());
+            tPssrSubcontentService.updateTPssrSubcontent(subcontent);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error();
+    }
+
+
     /**
      * 查询检修项目-泵列表
      */

+ 89 - 2
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrOverhaulTowerController.java

@@ -1,12 +1,18 @@
 package com.ruoyi.project.pssr.controller;
 
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.project.pssr.domain.TPssrApprove;
 import com.ruoyi.project.pssr.domain.TPssrOverhaulExchanger;
+import com.ruoyi.project.pssr.domain.TPssrSubcontent;
 import com.ruoyi.project.pssr.service.ITPssrApproveService;
 import com.ruoyi.project.pssr.service.ITPssrOverhaulExchangerService;
+import com.ruoyi.project.pssr.service.ITPssrSubcontentService;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.impl.identity.Authentication;
+import org.activiti.engine.runtime.ProcessInstance;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -45,6 +51,87 @@ public class TPssrOverhaulTowerController extends BaseController
     @Autowired
     private ITPssrApproveService tPssrApproveService;
 
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private HistoryService historyService;
+
+    @Autowired
+    private ITPssrSubcontentService tPssrSubcontentService;
+
+
+    @PutMapping("/turnDownTower")
+    public AjaxResult turnDownTower(@RequestBody TPssrOverhaulTower tPssrOverhaulTower) {
+        if (tPssrOverhaulTower.getIds() != null) {
+            String userId = getUserId().toString();
+            // 修改已选择数据的状态
+            for (Long id : tPssrOverhaulTower.getIds()) {
+                TPssrOverhaulTower blind = new TPssrOverhaulTower();
+                blind.setId(id);
+                blind.setApproveStatus(1L);
+                blind.setUpdatedate(new Date());
+                blind.setUpdaterCode(getUserId().toString());
+                tPssrOverhaulTowerService.updateTPssrOverhaulTower(blind);
+            }
+            // 查询当前流程
+            TPssrApprove approve = tPssrApproveService.selectTPssrApproveBySubId(tPssrOverhaulTower.getSubId());
+
+            try {
+                runtimeService.deleteProcessInstance(approve.getProcessId(), "pssr1confirm");
+                historyService.deleteHistoricProcessInstance(approve.getProcessId());
+            } catch (Exception e) {
+                logger.info("无运行时流程");
+            }
+
+
+            // 驳回 查询所有待审批的人员
+
+            //查询所有确认人
+            TPssrOverhaulExchanger exchanger = new TPssrOverhaulExchanger();
+            exchanger.setSubId(approve.getSubId());
+            exchanger.setApproveStatus(1L);
+            TPssrOverhaulExchanger overhaul = tPssrOverhaulExchangerService.selectAllConfirmedPersonBySubId(exchanger);
+            String confirmers = null;
+            if (overhaul != null) {
+                confirmers = overhaul.getConfirmedPerson();
+            }
+            logger.info("=======================confirmers:{}", confirmers);
+
+            Set<String> confirmUsers1 = new HashSet<>();
+            if (StringUtils.isNotEmpty(confirmers)) {
+                confirmUsers1.addAll(Arrays.asList(confirmers.split(",")));
+            }
+
+            // 开始申请流程
+            long businessKey = approve.getApproveId();
+            //开始工作流、监听
+            Authentication.setAuthenticatedUserId(userId);//设置当前申请人
+            Map<String, Object> variables = new HashMap<>();
+            variables.put("applyUser", userId);
+            variables.put("confirmUsers", new ArrayList<>(confirmUsers1));
+            variables.put("chargePerson", approve.getSubCharge());
+            //采用key来启动流程定义并设置流程变量,返回流程实例
+            ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr1confirm", String.valueOf(businessKey), variables);
+
+            // 修改审批表和sub表
+            approve.setProcessId(pi.getProcessInstanceId());
+            approve.setApproveStatus(1L);
+            approve.setUpdatedate(new Date());
+            approve.setUpdaterCode(getUserId().toString());
+            tPssrApproveService.updateTPssrApprove(approve);
+
+            TPssrSubcontent subcontent = new TPssrSubcontent();
+            subcontent.setId(approve.getSubId());
+            subcontent.setApproveStatus(1L);
+            subcontent.setUpdatedate(new Date());
+            subcontent.setUpdaterCode(getUserId().toString());
+            tPssrSubcontentService.updateTPssrSubcontent(subcontent);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error();
+    }
+
     /**
      * 查询检修项目-塔罐列表
      */

+ 89 - 2
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrOverhaulValveController.java

@@ -1,12 +1,18 @@
 package com.ruoyi.project.pssr.controller;
 
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.project.pssr.domain.TPssrApprove;
 import com.ruoyi.project.pssr.domain.TPssrOverhaulExchanger;
+import com.ruoyi.project.pssr.domain.TPssrSubcontent;
 import com.ruoyi.project.pssr.service.ITPssrApproveService;
 import com.ruoyi.project.pssr.service.ITPssrOverhaulExchangerService;
+import com.ruoyi.project.pssr.service.ITPssrSubcontentService;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.impl.identity.Authentication;
+import org.activiti.engine.runtime.ProcessInstance;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -45,6 +51,87 @@ public class TPssrOverhaulValveController extends BaseController
     @Autowired
     private ITPssrApproveService tPssrApproveService;
 
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private HistoryService historyService;
+
+    @Autowired
+    private ITPssrSubcontentService tPssrSubcontentService;
+
+
+    @PutMapping("/turnDownValve")
+    public AjaxResult turnDownValve(@RequestBody TPssrOverhaulValve tPssrOverhaulValve) {
+        if (tPssrOverhaulValve.getIds() != null) {
+            String userId = getUserId().toString();
+            // 修改已选择数据的状态
+            for (Long id : tPssrOverhaulValve.getIds()) {
+                TPssrOverhaulValve blind = new TPssrOverhaulValve();
+                blind.setId(id);
+                blind.setApproveStatus(1L);
+                blind.setUpdatedate(new Date());
+                blind.setUpdaterCode(getUserId().toString());
+                tPssrOverhaulValveService.updateTPssrOverhaulValve(blind);
+            }
+            // 查询当前流程
+            TPssrApprove approve = tPssrApproveService.selectTPssrApproveBySubId(tPssrOverhaulValve.getSubId());
+
+            try {
+                runtimeService.deleteProcessInstance(approve.getProcessId(), "pssr1confirm");
+                historyService.deleteHistoricProcessInstance(approve.getProcessId());
+            } catch (Exception e) {
+                logger.info("无运行时流程");
+            }
+
+
+            // 驳回 查询所有待审批的人员
+
+            //查询所有确认人
+            TPssrOverhaulExchanger exchanger = new TPssrOverhaulExchanger();
+            exchanger.setSubId(approve.getSubId());
+            exchanger.setApproveStatus(1L);
+            TPssrOverhaulExchanger overhaul = tPssrOverhaulExchangerService.selectAllConfirmedPersonBySubId(exchanger);
+            String confirmers = null;
+            if (overhaul != null) {
+                confirmers = overhaul.getConfirmedPerson();
+            }
+            logger.info("=======================confirmers:{}", confirmers);
+
+            Set<String> confirmUsers1 = new HashSet<>();
+            if (StringUtils.isNotEmpty(confirmers)) {
+                confirmUsers1.addAll(Arrays.asList(confirmers.split(",")));
+            }
+
+            // 开始申请流程
+            long businessKey = approve.getApproveId();
+            //开始工作流、监听
+            Authentication.setAuthenticatedUserId(userId);//设置当前申请人
+            Map<String, Object> variables = new HashMap<>();
+            variables.put("applyUser", userId);
+            variables.put("confirmUsers", new ArrayList<>(confirmUsers1));
+            variables.put("chargePerson", approve.getSubCharge());
+            //采用key来启动流程定义并设置流程变量,返回流程实例
+            ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr1confirm", String.valueOf(businessKey), variables);
+
+            // 修改审批表和sub表
+            approve.setProcessId(pi.getProcessInstanceId());
+            approve.setApproveStatus(1L);
+            approve.setUpdatedate(new Date());
+            approve.setUpdaterCode(getUserId().toString());
+            tPssrApproveService.updateTPssrApprove(approve);
+
+            TPssrSubcontent subcontent = new TPssrSubcontent();
+            subcontent.setId(approve.getSubId());
+            subcontent.setApproveStatus(1L);
+            subcontent.setUpdatedate(new Date());
+            subcontent.setUpdaterCode(getUserId().toString());
+            tPssrSubcontentService.updateTPssrSubcontent(subcontent);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error();
+    }
+
     /**
      * 查询检修项目-阀门列表
      */

+ 199 - 29
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrPumpCleaningController.java

@@ -1,24 +1,26 @@
 package com.ruoyi.project.pssr.controller;
 
-import java.util.List;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.project.pssr.domain.TPssrPumpCleaning;
-import com.ruoyi.project.pssr.service.ITPssrPumpCleaningService;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.page.TableDataInfo;
+import com.ruoyi.project.pssr.domain.*;
+import com.ruoyi.project.pssr.service.ITPssrApproveService;
+import com.ruoyi.project.pssr.service.ITPssrPumpCleaningService;
+import com.ruoyi.project.pssr.service.ITPssrPumpFillService;
+import com.ruoyi.project.pssr.service.ITPssrSubcontentService;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.impl.identity.Authentication;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
 
 /**
  * 机泵过滤器清理工作清单Controller
@@ -28,18 +30,30 @@ import com.ruoyi.framework.web.page.TableDataInfo;
  */
 @RestController
 @RequestMapping("/pssr/pumpCleaning")
-public class TPssrPumpCleaningController extends BaseController
-{
+public class TPssrPumpCleaningController extends BaseController {
     @Autowired
     private ITPssrPumpCleaningService tPssrPumpCleaningService;
+    @Autowired
+    private ITPssrPumpFillService tPssrPumpFillService;
+
+    @Autowired
+    private ITPssrApproveService tPssrApproveService;
+
+    @Autowired
+    private ITPssrSubcontentService tPssrSubcontentService;
+
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private HistoryService historyService;
 
     /**
      * 查询机泵过滤器清理工作清单列表
      */
     @PreAuthorize("@ss.hasPermi('pssr:pumpCleaning:list')")
     @GetMapping("/list")
-    public TableDataInfo list(TPssrPumpCleaning tPssrPumpCleaning)
-    {
+    public TableDataInfo list(TPssrPumpCleaning tPssrPumpCleaning) {
         startPage();
         List<TPssrPumpCleaning> list = tPssrPumpCleaningService.selectTPssrPumpCleaningList(tPssrPumpCleaning);
         return getDataTable(list);
@@ -51,8 +65,7 @@ public class TPssrPumpCleaningController extends BaseController
     @PreAuthorize("@ss.hasPermi('pssr:pumpCleaning:export')")
     @Log(title = "机泵过滤器清理工作清单", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
-    public AjaxResult export(TPssrPumpCleaning tPssrPumpCleaning)
-    {
+    public AjaxResult export(TPssrPumpCleaning tPssrPumpCleaning) {
         List<TPssrPumpCleaning> list = tPssrPumpCleaningService.selectTPssrPumpCleaningList(tPssrPumpCleaning);
         ExcelUtil<TPssrPumpCleaning> util = new ExcelUtil<TPssrPumpCleaning>(TPssrPumpCleaning.class);
         return util.exportExcel(list, "pumpCleaning");
@@ -63,8 +76,7 @@ public class TPssrPumpCleaningController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('pssr:pumpCleaning:query')")
     @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") Long id)
-    {
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
         return AjaxResult.success(tPssrPumpCleaningService.selectTPssrPumpCleaningById(id));
     }
 
@@ -74,8 +86,10 @@ public class TPssrPumpCleaningController extends BaseController
     @PreAuthorize("@ss.hasPermi('pssr:pumpCleaning:add')")
     @Log(title = "机泵过滤器清理工作清单", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody TPssrPumpCleaning tPssrPumpCleaning)
-    {
+    public AjaxResult add(@RequestBody TPssrPumpCleaning tPssrPumpCleaning) {
+        tPssrPumpCleaning.setApproveStatus(0L);
+        tPssrPumpCleaning.setCreatedate(new Date());
+        tPssrPumpCleaning.setCreaterCode(String.valueOf(getUserId()));
         return toAjax(tPssrPumpCleaningService.insertTPssrPumpCleaning(tPssrPumpCleaning));
     }
 
@@ -85,8 +99,7 @@ public class TPssrPumpCleaningController extends BaseController
     @PreAuthorize("@ss.hasPermi('pssr:pumpCleaning:edit')")
     @Log(title = "机泵过滤器清理工作清单", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@RequestBody TPssrPumpCleaning tPssrPumpCleaning)
-    {
+    public AjaxResult edit(@RequestBody TPssrPumpCleaning tPssrPumpCleaning) {
         return toAjax(tPssrPumpCleaningService.updateTPssrPumpCleaning(tPssrPumpCleaning));
     }
 
@@ -95,9 +108,166 @@ public class TPssrPumpCleaningController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('pssr:pumpCleaning:remove')")
     @Log(title = "机泵过滤器清理工作清单", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable Long[] ids)
-    {
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
         return toAjax(tPssrPumpCleaningService.deleteTPssrPumpCleaningByIds(ids));
     }
+
+    /**
+     * 确认人身防护
+     */
+    @PreAuthorize("@ss.hasPermi('pssr:pumpCleaning:edit')")
+    @Log(title = "人身防护", businessType = BusinessType.UPDATE)
+    @PutMapping("/confirmPumpCleaning")
+    public AjaxResult confirmPumpCleaning(@RequestBody TPssrPumpCleaning tPssrPumpCleaning) {
+        long queryStatus = 0;
+        long approveStatus = 0;
+        Date date = null;
+        TPssrPumpCleaning pumpCleaning = new TPssrPumpCleaning();
+        if (tPssrPumpCleaning.getTaskType() == 4) {
+            //确认人1确认
+            queryStatus = 1;
+            approveStatus = 3;
+            pumpCleaning.setConfirmer1(getUserId().toString());
+            date = new Date();
+        } else if (tPssrPumpCleaning.getTaskType() == 5) {
+            //确认人2确认
+            queryStatus = 3;
+            approveStatus = 2;
+            pumpCleaning.setConfirmer2(getUserId().toString());
+            date = new Date();
+        }
+        if (tPssrPumpCleaning.getIds() != null && tPssrPumpCleaning.getIds().length > 0) {
+            for (Long id : tPssrPumpCleaning.getIds()) {
+                pumpCleaning = tPssrPumpCleaningService.selectTPssrPumpCleaningById(id);
+                if (pumpCleaning.getConfirmationDate() == null && tPssrPumpCleaning.getTaskType() == 5) {
+                    pumpCleaning.setConfirmationDate(new Date());
+                }
+                pumpCleaning.setApproveStatus(approveStatus);
+                pumpCleaning.setUpdatedate(new Date());
+                pumpCleaning.setUpdaterCode(String.valueOf(getUserId()));
+                tPssrPumpCleaningService.updateTPssrPumpCleaning(pumpCleaning);
+            }
+        } else {
+            pumpCleaning.setSubId(tPssrPumpCleaning.getSubId());
+            pumpCleaning.setApproveStatus(queryStatus);
+            for (TPssrPumpCleaning item : tPssrPumpCleaningService.selectTPssrPumpCleaningList(pumpCleaning)) {
+                if (item.getConfirmationDate() == null && tPssrPumpCleaning.getTaskType() == 5) {
+                    item.setConfirmationDate(new Date());
+                }
+                item.setApproveStatus(approveStatus);
+                item.setUpdatedate(new Date());
+                item.setUpdaterCode(String.valueOf(getUserId()));
+                tPssrPumpCleaningService.updateTPssrPumpCleaning(item);
+            }
+        }
+        //查询当前待审批的确认人
+
+        TPssrPumpFill entity = new TPssrPumpFill();
+        entity.setSubId(tPssrPumpCleaning.getSubId());
+        entity.setApproveStatus(queryStatus);
+        TPssrPumpFill queryData = tPssrPumpFillService.selectAllConfirmedPersonBySubId(entity);
+        if (queryData != null) {
+            //如果当前用户还有待审批任务
+            if (tPssrPumpCleaning.getTaskType() == 4 && StringUtils.isNotEmpty(queryData.getConfirmer1())) {
+                if (queryData.getConfirmer1().contains(getUserId().toString())) {
+                    return AjaxResult.success();
+                }
+            }
+
+            if (tPssrPumpCleaning.getTaskType() == 5 && StringUtils.isNotEmpty(queryData.getConfirmer2())) {
+                if (queryData.getConfirmer2().contains(getUserId().toString())) {
+                    return AjaxResult.success();
+                }
+            }
+        }
+        //无待审批任务结束当前用户流程
+        TPssrApprove approve = new TPssrApprove();
+        approve.setSubId(tPssrPumpCleaning.getSubId());
+        // 因为流程关系所以approve一定会有且只有一条数据
+        TPssrApprove tPssrApprove = tPssrApproveService.selectTPssrApproveList(approve).get(0);
+        TPssrApproveController.handleConfirmApprove(tPssrApprove, getUserId().toString());
+        return AjaxResult.success();
+    }
+
+
+    /**
+     * 驳回人身防护
+     */
+    @PutMapping("/turnDownPumpCleaning")
+    public AjaxResult turnDownPumpCleaning(@RequestBody TPssrPumpCleaning tPssrPumpCleaning) {
+        if (tPssrPumpCleaning.getIds() != null) {
+            String userId = getUserId().toString();
+            // 修改已选择数据的状态
+            for (Long id : tPssrPumpCleaning.getIds()) {
+                TPssrPumpCleaning blind = new TPssrPumpCleaning();
+                blind.setId(id);
+                blind.setApproveStatus(1L);
+                blind.setUpdatedate(new Date());
+                blind.setUpdaterCode(getUserId().toString());
+                tPssrPumpCleaningService.updateTPssrPumpCleaning(blind);
+            }
+            // 查询当前流程
+            TPssrApprove approve = tPssrApproveService.selectTPssrApproveBySubId(tPssrPumpCleaning.getSubId());
+
+            try {
+                runtimeService.deleteProcessInstance(approve.getProcessId(), "pssr2confirm");
+                historyService.deleteHistoricProcessInstance(approve.getProcessId());
+            } catch (Exception e) {
+                logger.info("无运行时流程");
+            }
+
+            // 驳回 查询所有待审批的人员
+            // 查询确认人
+            TPssrPumpFill entity = new TPssrPumpFill();
+            entity.setSubId(tPssrPumpCleaning.getSubId());
+            entity.setApproveStatus(1L);
+            TPssrPumpFill queryData = tPssrPumpFillService.selectAllConfirmedPersonBySubId(entity);
+            String confirmer1s = null;
+            String confirmer2s = null;
+            if (queryData != null) {
+                confirmer1s = queryData.getConfirmer1();
+                confirmer2s = queryData.getConfirmer2();
+            }
+            logger.info("=======================confirmer1s:{}", confirmer1s);
+            logger.info("=======================confirmer2s:{}", confirmer2s);
+
+            Set<String> confirmerUsers1 = new HashSet<>();
+            Set<String> confirmerUsers2 = new HashSet<>();
+            if (StringUtils.isNotEmpty(confirmer1s)) {
+                confirmerUsers1.addAll(Arrays.asList(confirmer1s.split(",")));
+            }
+            if (StringUtils.isNotEmpty(confirmer2s)) {
+                confirmerUsers2.addAll(Arrays.asList(confirmer2s.split(",")));
+            }
+
+            // 开始申请流程
+            long businessKey = approve.getApproveId();
+            //开始工作流、监听
+            Authentication.setAuthenticatedUserId(userId);//设置当前申请人
+            Map<String, Object> variables = new HashMap<>();
+            variables.put("applyUser", userId);
+            variables.put("confirmUsers1", new ArrayList<>(confirmerUsers1));
+            variables.put("confirmUsers2", new ArrayList<>(confirmerUsers2));
+            variables.put("chargePerson", approve.getSubCharge());
+            //采用key来启动流程定义并设置流程变量,返回流程实例
+            ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr2confirm", String.valueOf(businessKey), variables);
+
+            // 修改审批表和sub表
+            approve.setProcessId(pi.getProcessInstanceId());
+            approve.setApproveStatus(1L);
+            approve.setUpdatedate(new Date());
+            approve.setUpdaterCode(getUserId().toString());
+            tPssrApproveService.updateTPssrApprove(approve);
+
+            TPssrSubcontent subcontent = new TPssrSubcontent();
+            subcontent.setId(approve.getSubId());
+            subcontent.setApproveStatus(1L);
+            subcontent.setUpdatedate(new Date());
+            subcontent.setUpdaterCode(getUserId().toString());
+            tPssrSubcontentService.updateTPssrSubcontent(subcontent);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error();
+    }
 }

+ 197 - 29
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrPumpFillController.java

@@ -1,24 +1,27 @@
 package com.ruoyi.project.pssr.controller;
 
-import java.util.List;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.project.pssr.domain.TPssrPumpFill;
-import com.ruoyi.project.pssr.service.ITPssrPumpFillService;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.page.TableDataInfo;
+import com.ruoyi.project.pssr.domain.TPssrApprove;
+import com.ruoyi.project.pssr.domain.TPssrPumpFill;
+import com.ruoyi.project.pssr.domain.TPssrSubcontent;
+import com.ruoyi.project.pssr.service.ITPssrApproveService;
+import com.ruoyi.project.pssr.service.ITPssrPumpFillService;
+import com.ruoyi.project.pssr.service.ITPssrSubcontentService;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.impl.identity.Authentication;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
 
 /**
  * 机泵润滑油加注确认清单Controller
@@ -28,18 +31,28 @@ import com.ruoyi.framework.web.page.TableDataInfo;
  */
 @RestController
 @RequestMapping("/pssr/pumpFill")
-public class TPssrPumpFillController extends BaseController
-{
+public class TPssrPumpFillController extends BaseController {
     @Autowired
     private ITPssrPumpFillService tPssrPumpFillService;
 
+    @Autowired
+    private ITPssrApproveService tPssrApproveService;
+
+    @Autowired
+    private ITPssrSubcontentService tPssrSubcontentService;
+
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private HistoryService historyService;
+
     /**
      * 查询机泵润滑油加注确认清单列表
      */
     @PreAuthorize("@ss.hasPermi('pssr:pumpFill:list')")
     @GetMapping("/list")
-    public TableDataInfo list(TPssrPumpFill tPssrPumpFill)
-    {
+    public TableDataInfo list(TPssrPumpFill tPssrPumpFill) {
         startPage();
         List<TPssrPumpFill> list = tPssrPumpFillService.selectTPssrPumpFillList(tPssrPumpFill);
         return getDataTable(list);
@@ -51,8 +64,7 @@ public class TPssrPumpFillController extends BaseController
     @PreAuthorize("@ss.hasPermi('pssr:pumpFill:export')")
     @Log(title = "机泵润滑油加注确认清单", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
-    public AjaxResult export(TPssrPumpFill tPssrPumpFill)
-    {
+    public AjaxResult export(TPssrPumpFill tPssrPumpFill) {
         List<TPssrPumpFill> list = tPssrPumpFillService.selectTPssrPumpFillList(tPssrPumpFill);
         ExcelUtil<TPssrPumpFill> util = new ExcelUtil<TPssrPumpFill>(TPssrPumpFill.class);
         return util.exportExcel(list, "pumpFill");
@@ -63,8 +75,7 @@ public class TPssrPumpFillController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('pssr:pumpFill:query')")
     @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") Long id)
-    {
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
         return AjaxResult.success(tPssrPumpFillService.selectTPssrPumpFillById(id));
     }
 
@@ -74,8 +85,10 @@ public class TPssrPumpFillController extends BaseController
     @PreAuthorize("@ss.hasPermi('pssr:pumpFill:add')")
     @Log(title = "机泵润滑油加注确认清单", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody TPssrPumpFill tPssrPumpFill)
-    {
+    public AjaxResult add(@RequestBody TPssrPumpFill tPssrPumpFill) {
+        tPssrPumpFill.setApproveStatus(0L);
+        tPssrPumpFill.setCreatedate(new Date());
+        tPssrPumpFill.setCreaterCode(String.valueOf(getUserId()));
         return toAjax(tPssrPumpFillService.insertTPssrPumpFill(tPssrPumpFill));
     }
 
@@ -85,8 +98,7 @@ public class TPssrPumpFillController extends BaseController
     @PreAuthorize("@ss.hasPermi('pssr:pumpFill:edit')")
     @Log(title = "机泵润滑油加注确认清单", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@RequestBody TPssrPumpFill tPssrPumpFill)
-    {
+    public AjaxResult edit(@RequestBody TPssrPumpFill tPssrPumpFill) {
         return toAjax(tPssrPumpFillService.updateTPssrPumpFill(tPssrPumpFill));
     }
 
@@ -95,9 +107,165 @@ public class TPssrPumpFillController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('pssr:pumpFill:remove')")
     @Log(title = "机泵润滑油加注确认清单", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable Long[] ids)
-    {
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
         return toAjax(tPssrPumpFillService.deleteTPssrPumpFillByIds(ids));
     }
+
+    /**
+     * 确认人身防护
+     */
+    @PreAuthorize("@ss.hasPermi('pssr:pumpFill:edit')")
+    @Log(title = "人身防护", businessType = BusinessType.UPDATE)
+    @PutMapping("/confirmPumpFill")
+    public AjaxResult confirmPumpFill(@RequestBody TPssrPumpFill tPssrPumpFill) {
+        long queryStatus = 0;
+        long approveStatus = 0;
+        Date date = null;
+        TPssrPumpFill pumpFill = new TPssrPumpFill();
+        if (tPssrPumpFill.getTaskType() == 4) {
+            //确认人1确认
+            queryStatus = 1;
+            approveStatus = 3;
+            pumpFill.setConfirmer1(getUserId().toString());
+            date = new Date();
+        } else if (tPssrPumpFill.getTaskType() == 5) {
+            //确认人2确认
+            queryStatus = 3;
+            approveStatus = 2;
+            pumpFill.setConfirmer2(getUserId().toString());
+            date = new Date();
+        }
+        if (tPssrPumpFill.getIds() != null && tPssrPumpFill.getIds().length > 0) {
+            for (Long id : tPssrPumpFill.getIds()) {
+                pumpFill = tPssrPumpFillService.selectTPssrPumpFillById(id);
+                if (pumpFill.getConfirmationDate() == null && tPssrPumpFill.getTaskType() == 5) {
+                    pumpFill.setConfirmationDate(new Date());
+                }
+                pumpFill.setApproveStatus(approveStatus);
+                pumpFill.setUpdatedate(new Date());
+                pumpFill.setUpdaterCode(String.valueOf(getUserId()));
+                tPssrPumpFillService.updateTPssrPumpFill(pumpFill);
+            }
+        } else {
+            pumpFill.setSubId(tPssrPumpFill.getSubId());
+            pumpFill.setApproveStatus(queryStatus);
+            for (TPssrPumpFill item : tPssrPumpFillService.selectTPssrPumpFillList(pumpFill)) {
+                if (item.getConfirmationDate() == null && tPssrPumpFill.getTaskType() == 5) {
+                    item.setConfirmationDate(new Date());
+                }
+                item.setApproveStatus(approveStatus);
+                item.setUpdatedate(new Date());
+                item.setUpdaterCode(String.valueOf(getUserId()));
+                tPssrPumpFillService.updateTPssrPumpFill(item);
+            }
+        }
+        //查询当前待审批的确认人
+        TPssrPumpFill entity = new TPssrPumpFill();
+        entity.setSubId(tPssrPumpFill.getSubId());
+        entity.setApproveStatus(queryStatus);
+        TPssrPumpFill queryData = tPssrPumpFillService.selectAllConfirmedPersonBySubId(entity);
+        if (queryData != null) {
+            //如果当前用户还有待审批任务
+            if (tPssrPumpFill.getTaskType() == 4 && StringUtils.isNotEmpty(queryData.getConfirmer1())) {
+                if (queryData.getConfirmer1().contains(getUserId().toString())) {
+                    return AjaxResult.success();
+                }
+            }
+
+            if (tPssrPumpFill.getTaskType() == 5 && StringUtils.isNotEmpty(queryData.getConfirmer2())) {
+                if (queryData.getConfirmer2().contains(getUserId().toString())) {
+                    return AjaxResult.success();
+                }
+            }
+        }
+        //无待审批任务结束当前用户流程
+        TPssrApprove approve = new TPssrApprove();
+        approve.setSubId(tPssrPumpFill.getSubId());
+        // 因为流程关系所以approve一定会有且只有一条数据
+        TPssrApprove tPssrApprove = tPssrApproveService.selectTPssrApproveList(approve).get(0);
+        TPssrApproveController.handleConfirmApprove(tPssrApprove, getUserId().toString());
+        return AjaxResult.success();
+    }
+
+
+    /**
+     * 驳回人身防护
+     */
+    @PutMapping("/turnDownPumpFill")
+    public AjaxResult turnDownPumpFill(@RequestBody TPssrPumpFill tPssrPumpFill) {
+        if (tPssrPumpFill.getIds() != null) {
+            String userId = getUserId().toString();
+            // 修改已选择数据的状态
+            for (Long id : tPssrPumpFill.getIds()) {
+                TPssrPumpFill blind = new TPssrPumpFill();
+                blind.setId(id);
+                blind.setApproveStatus(1L);
+                blind.setUpdatedate(new Date());
+                blind.setUpdaterCode(getUserId().toString());
+                tPssrPumpFillService.updateTPssrPumpFill(blind);
+            }
+            // 查询当前流程
+            TPssrApprove approve = tPssrApproveService.selectTPssrApproveBySubId(tPssrPumpFill.getSubId());
+
+            try {
+                runtimeService.deleteProcessInstance(approve.getProcessId(), "pssr2confirm");
+                historyService.deleteHistoricProcessInstance(approve.getProcessId());
+            } catch (Exception e) {
+                logger.info("无运行时流程");
+            }
+
+            // 驳回 查询所有待审批的人员
+            // 查询确认人
+            TPssrPumpFill entity = new TPssrPumpFill();
+            entity.setSubId(tPssrPumpFill.getSubId());
+            entity.setApproveStatus(1L);
+            TPssrPumpFill queryData = tPssrPumpFillService.selectAllConfirmedPersonBySubId(entity);
+            String confirmer1s = null;
+            String confirmer2s = null;
+            if (queryData != null) {
+                confirmer1s = queryData.getConfirmer1();
+                confirmer2s = queryData.getConfirmer2();
+            }
+            logger.info("=======================confirmer1s:{}", confirmer1s);
+            logger.info("=======================confirmer2s:{}", confirmer2s);
+
+            Set<String> confirmerUsers1 = new HashSet<>();
+            Set<String> confirmerUsers2 = new HashSet<>();
+            if (StringUtils.isNotEmpty(confirmer1s)) {
+                confirmerUsers1.addAll(Arrays.asList(confirmer1s.split(",")));
+            }
+            if (StringUtils.isNotEmpty(confirmer2s)) {
+                confirmerUsers2.addAll(Arrays.asList(confirmer2s.split(",")));
+            }
+
+            // 开始申请流程
+            long businessKey = approve.getApproveId();
+            //开始工作流、监听
+            Authentication.setAuthenticatedUserId(userId);//设置当前申请人
+            Map<String, Object> variables = new HashMap<>();
+            variables.put("applyUser", userId);
+            variables.put("confirmUsers1", new ArrayList<>(confirmerUsers1));
+            variables.put("confirmUsers2", new ArrayList<>(confirmerUsers2));
+            variables.put("chargePerson", approve.getSubCharge());
+            //采用key来启动流程定义并设置流程变量,返回流程实例
+            ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr2confirm", String.valueOf(businessKey), variables);
+
+            // 修改审批表和sub表
+            approve.setProcessId(pi.getProcessInstanceId());
+            approve.setApproveStatus(1L);
+            approve.setUpdatedate(new Date());
+            approve.setUpdaterCode(getUserId().toString());
+            tPssrApproveService.updateTPssrApprove(approve);
+
+            TPssrSubcontent subcontent = new TPssrSubcontent();
+            subcontent.setId(approve.getSubId());
+            subcontent.setApproveStatus(1L);
+            subcontent.setUpdatedate(new Date());
+            subcontent.setUpdaterCode(getUserId().toString());
+            tPssrSubcontentService.updateTPssrSubcontent(subcontent);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error();
+    }
 }

+ 202 - 29
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrPumpOverhaulController.java

@@ -1,24 +1,29 @@
 package com.ruoyi.project.pssr.controller;
 
-import java.util.List;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.project.pssr.domain.TPssrPumpOverhaul;
-import com.ruoyi.project.pssr.service.ITPssrPumpOverhaulService;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.page.TableDataInfo;
+import com.ruoyi.project.pssr.domain.TPssrApprove;
+import com.ruoyi.project.pssr.domain.TPssrPumpFill;
+import com.ruoyi.project.pssr.domain.TPssrPumpOverhaul;
+import com.ruoyi.project.pssr.domain.TPssrSubcontent;
+import com.ruoyi.project.pssr.service.ITPssrApproveService;
+import com.ruoyi.project.pssr.service.ITPssrPumpFillService;
+import com.ruoyi.project.pssr.service.ITPssrPumpOverhaulService;
+import com.ruoyi.project.pssr.service.ITPssrSubcontentService;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.impl.identity.Authentication;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
 
 /**
  * 机泵检修完成确认清单Controller
@@ -28,18 +33,31 @@ import com.ruoyi.framework.web.page.TableDataInfo;
  */
 @RestController
 @RequestMapping("/pssr/pumpOverhaul")
-public class TPssrPumpOverhaulController extends BaseController
-{
+public class TPssrPumpOverhaulController extends BaseController {
     @Autowired
     private ITPssrPumpOverhaulService tPssrPumpOverhaulService;
 
+    @Autowired
+    private ITPssrPumpFillService tPssrPumpFillService;
+
+    @Autowired
+    private ITPssrApproveService tPssrApproveService;
+
+    @Autowired
+    private ITPssrSubcontentService tPssrSubcontentService;
+
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private HistoryService historyService;
+
     /**
      * 查询机泵检修完成确认清单列表
      */
     @PreAuthorize("@ss.hasPermi('pssr:pumpOverhaul:list')")
     @GetMapping("/list")
-    public TableDataInfo list(TPssrPumpOverhaul tPssrPumpOverhaul)
-    {
+    public TableDataInfo list(TPssrPumpOverhaul tPssrPumpOverhaul) {
         startPage();
         List<TPssrPumpOverhaul> list = tPssrPumpOverhaulService.selectTPssrPumpOverhaulList(tPssrPumpOverhaul);
         return getDataTable(list);
@@ -51,8 +69,7 @@ public class TPssrPumpOverhaulController extends BaseController
     @PreAuthorize("@ss.hasPermi('pssr:pumpOverhaul:export')")
     @Log(title = "机泵检修完成确认清单", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
-    public AjaxResult export(TPssrPumpOverhaul tPssrPumpOverhaul)
-    {
+    public AjaxResult export(TPssrPumpOverhaul tPssrPumpOverhaul) {
         List<TPssrPumpOverhaul> list = tPssrPumpOverhaulService.selectTPssrPumpOverhaulList(tPssrPumpOverhaul);
         ExcelUtil<TPssrPumpOverhaul> util = new ExcelUtil<TPssrPumpOverhaul>(TPssrPumpOverhaul.class);
         return util.exportExcel(list, "pumpOverhaul");
@@ -63,8 +80,7 @@ public class TPssrPumpOverhaulController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('pssr:pumpOverhaul:query')")
     @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") Long id)
-    {
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
         return AjaxResult.success(tPssrPumpOverhaulService.selectTPssrPumpOverhaulById(id));
     }
 
@@ -74,8 +90,10 @@ public class TPssrPumpOverhaulController extends BaseController
     @PreAuthorize("@ss.hasPermi('pssr:pumpOverhaul:add')")
     @Log(title = "机泵检修完成确认清单", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody TPssrPumpOverhaul tPssrPumpOverhaul)
-    {
+    public AjaxResult add(@RequestBody TPssrPumpOverhaul tPssrPumpOverhaul) {
+        tPssrPumpOverhaul.setApproveStatus(0L);
+        tPssrPumpOverhaul.setCreatedate(new Date());
+        tPssrPumpOverhaul.setCreaterCode(String.valueOf(getUserId()));
         return toAjax(tPssrPumpOverhaulService.insertTPssrPumpOverhaul(tPssrPumpOverhaul));
     }
 
@@ -85,8 +103,7 @@ public class TPssrPumpOverhaulController extends BaseController
     @PreAuthorize("@ss.hasPermi('pssr:pumpOverhaul:edit')")
     @Log(title = "机泵检修完成确认清单", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@RequestBody TPssrPumpOverhaul tPssrPumpOverhaul)
-    {
+    public AjaxResult edit(@RequestBody TPssrPumpOverhaul tPssrPumpOverhaul) {
         return toAjax(tPssrPumpOverhaulService.updateTPssrPumpOverhaul(tPssrPumpOverhaul));
     }
 
@@ -95,9 +112,165 @@ public class TPssrPumpOverhaulController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('pssr:pumpOverhaul:remove')")
     @Log(title = "机泵检修完成确认清单", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable Long[] ids)
-    {
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
         return toAjax(tPssrPumpOverhaulService.deleteTPssrPumpOverhaulByIds(ids));
     }
+
+    /**
+     * 确认人身防护
+     */
+    @PreAuthorize("@ss.hasPermi('pssr:pumpOverhaul:edit')")
+    @Log(title = "人身防护", businessType = BusinessType.UPDATE)
+    @PutMapping("/confirmPumpOverhaul")
+    public AjaxResult confirmPumpOverhaul(@RequestBody TPssrPumpOverhaul tPssrPumpOverhaul) {
+        long queryStatus = 0;
+        long approveStatus = 0;
+        Date date = null;
+        TPssrPumpOverhaul pumpOverhaul = new TPssrPumpOverhaul();
+        if (tPssrPumpOverhaul.getTaskType() == 4) {
+            //确认人1确认
+            queryStatus = 1;
+            approveStatus = 3;
+            pumpOverhaul.setConfirmer1(getUserId().toString());
+            date = new Date();
+        } else if (tPssrPumpOverhaul.getTaskType() == 5) {
+            //确认人2确认
+            queryStatus = 3;
+            approveStatus = 2;
+            pumpOverhaul.setConfirmer2(getUserId().toString());
+            date = new Date();
+        }
+        if (tPssrPumpOverhaul.getIds() != null && tPssrPumpOverhaul.getIds().length > 0) {
+            for (Long id : tPssrPumpOverhaul.getIds()) {
+                pumpOverhaul = tPssrPumpOverhaulService.selectTPssrPumpOverhaulById(id);
+                if (pumpOverhaul.getConfirmationDate() == null && tPssrPumpOverhaul.getTaskType() == 5) {
+                    pumpOverhaul.setConfirmationDate(new Date());
+                }
+                pumpOverhaul.setApproveStatus(approveStatus);
+                pumpOverhaul.setUpdatedate(new Date());
+                pumpOverhaul.setUpdaterCode(String.valueOf(getUserId()));
+                tPssrPumpOverhaulService.updateTPssrPumpOverhaul(pumpOverhaul);
+            }
+        } else {
+            pumpOverhaul.setSubId(tPssrPumpOverhaul.getSubId());
+            pumpOverhaul.setApproveStatus(queryStatus);
+            for (TPssrPumpOverhaul item : tPssrPumpOverhaulService.selectTPssrPumpOverhaulList(pumpOverhaul)) {
+                if (item.getConfirmationDate() == null && tPssrPumpOverhaul.getTaskType() == 5) {
+                    item.setConfirmationDate(new Date());
+                }
+                item.setApproveStatus(approveStatus);
+                item.setUpdatedate(new Date());
+                item.setUpdaterCode(String.valueOf(getUserId()));
+                tPssrPumpOverhaulService.updateTPssrPumpOverhaul(item);
+            }
+        }
+        //查询当前待审批的确认人
+        TPssrPumpFill entity = new TPssrPumpFill();
+        entity.setSubId(tPssrPumpOverhaul.getSubId());
+        entity.setApproveStatus(queryStatus);
+        TPssrPumpFill queryData = tPssrPumpFillService.selectAllConfirmedPersonBySubId(entity);
+        if (queryData != null) {
+            //如果当前用户还有待审批任务
+            if (tPssrPumpOverhaul.getTaskType() == 4 && StringUtils.isNotEmpty(queryData.getConfirmer1())) {
+                if (queryData.getConfirmer1().contains(getUserId().toString())) {
+                    return AjaxResult.success();
+                }
+            }
+
+            if (tPssrPumpOverhaul.getTaskType() == 5 && StringUtils.isNotEmpty(queryData.getConfirmer2())) {
+                if (queryData.getConfirmer2().contains(getUserId().toString())) {
+                    return AjaxResult.success();
+                }
+            }
+        }
+        //无待审批任务结束当前用户流程
+        TPssrApprove approve = new TPssrApprove();
+        approve.setSubId(tPssrPumpOverhaul.getSubId());
+        // 因为流程关系所以approve一定会有且只有一条数据
+        TPssrApprove tPssrApprove = tPssrApproveService.selectTPssrApproveList(approve).get(0);
+        TPssrApproveController.handleConfirmApprove(tPssrApprove, getUserId().toString());
+        return AjaxResult.success();
+    }
+
+
+    /**
+     * 驳回人身防护
+     */
+    @PutMapping("/turnDownPumpOverhaul")
+    public AjaxResult turnDownPumpOverhaul(@RequestBody TPssrPumpOverhaul tPssrPumpOverhaul) {
+        if (tPssrPumpOverhaul.getIds() != null) {
+            String userId = getUserId().toString();
+            // 修改已选择数据的状态
+            for (Long id : tPssrPumpOverhaul.getIds()) {
+                TPssrPumpOverhaul blind = new TPssrPumpOverhaul();
+                blind.setId(id);
+                blind.setApproveStatus(1L);
+                blind.setUpdatedate(new Date());
+                blind.setUpdaterCode(getUserId().toString());
+                tPssrPumpOverhaulService.updateTPssrPumpOverhaul(blind);
+            }
+            // 查询当前流程
+            TPssrApprove approve = tPssrApproveService.selectTPssrApproveBySubId(tPssrPumpOverhaul.getSubId());
+
+            try {
+                runtimeService.deleteProcessInstance(approve.getProcessId(), "pssr2confirm");
+                historyService.deleteHistoricProcessInstance(approve.getProcessId());
+            } catch (Exception e) {
+                logger.info("无运行时流程");
+            }
+
+            // 驳回 查询所有待审批的人员
+            // 查询确认人
+            TPssrPumpFill entity = new TPssrPumpFill();
+            entity.setSubId(tPssrPumpOverhaul.getSubId());
+            entity.setApproveStatus(1L);
+            TPssrPumpFill queryData = tPssrPumpFillService.selectAllConfirmedPersonBySubId(entity);
+            String confirmer1s = null;
+            String confirmer2s = null;
+            if (queryData != null) {
+                confirmer1s = queryData.getConfirmer1();
+                confirmer2s = queryData.getConfirmer2();
+            }
+            logger.info("=======================confirmer1s:{}", confirmer1s);
+            logger.info("=======================confirmer2s:{}", confirmer2s);
+
+            Set<String> confirmerUsers1 = new HashSet<>();
+            Set<String> confirmerUsers2 = new HashSet<>();
+            if (StringUtils.isNotEmpty(confirmer1s)) {
+                confirmerUsers1.addAll(Arrays.asList(confirmer1s.split(",")));
+            }
+            if (StringUtils.isNotEmpty(confirmer2s)) {
+                confirmerUsers2.addAll(Arrays.asList(confirmer2s.split(",")));
+            }
+
+            // 开始申请流程
+            long businessKey = approve.getApproveId();
+            //开始工作流、监听
+            Authentication.setAuthenticatedUserId(userId);//设置当前申请人
+            Map<String, Object> variables = new HashMap<>();
+            variables.put("applyUser", userId);
+            variables.put("confirmUsers1", new ArrayList<>(confirmerUsers1));
+            variables.put("confirmUsers2", new ArrayList<>(confirmerUsers2));
+            variables.put("chargePerson", approve.getSubCharge());
+            //采用key来启动流程定义并设置流程变量,返回流程实例
+            ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr2confirm", String.valueOf(businessKey), variables);
+
+            // 修改审批表和sub表
+            approve.setProcessId(pi.getProcessInstanceId());
+            approve.setApproveStatus(1L);
+            approve.setUpdatedate(new Date());
+            approve.setUpdaterCode(getUserId().toString());
+            tPssrApproveService.updateTPssrApprove(approve);
+
+            TPssrSubcontent subcontent = new TPssrSubcontent();
+            subcontent.setId(approve.getSubId());
+            subcontent.setApproveStatus(1L);
+            subcontent.setUpdatedate(new Date());
+            subcontent.setUpdaterCode(getUserId().toString());
+            tPssrSubcontentService.updateTPssrSubcontent(subcontent);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error();
+    }
 }

+ 105 - 61
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrSafetyController.java

@@ -10,7 +10,6 @@ import com.ruoyi.project.pssr.service.*;
 import org.activiti.engine.*;
 import org.activiti.engine.impl.identity.Authentication;
 import org.activiti.engine.runtime.ProcessInstance;
-import org.activiti.engine.task.Task;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.PutMapping;
@@ -455,18 +454,27 @@ public class TPssrSafetyController extends BaseController {
             }
 
             // 驳回 查询所有待审批的人员
-            TPssrSafetyBleed blind = new TPssrSafetyBleed();
-            blind.setSubId(tPssrSafetyBleed.getSubId());
-            blind.setApproveStatus(1L);
+            // 查询确认人
+            TPssrSafetyBleed entity = new TPssrSafetyBleed();
+            entity.setSubId(tPssrSafetyBleed.getId());
+            entity.setApproveStatus(1L);
+            TPssrSafetyBleed safety = tPssrSafetyBleedService.selectAllConfirmedPersonBySubId(entity);
+            String confirmer1s = null;
+            String confirmer2s = null;
+            if (safety != null) {
+                confirmer1s = safety.getConfirmer1();
+                confirmer2s = safety.getConfirmer2();
+            }
+            logger.info("=======================confirmer1s:{}", confirmer1s);
+            logger.info("=======================confirmer2s:{}", confirmer2s);
+
             Set<String> confirmUsers1 = new HashSet<>();
             Set<String> confirmUsers2 = new HashSet<>();
-            for (TPssrSafetyBleed item : tPssrSafetyBleedService.selectTPssrSafetyBleedList(blind)) {
-
-                // 确认人1
-                confirmUsers1.add(item.getConfirmer1());
-
-                //确认人2
-                confirmUsers2.add(item.getConfirmer2());
+            if (StringUtils.isNotEmpty(confirmer1s)) {
+                confirmUsers1.addAll(Arrays.asList(confirmer1s.split(",")));
+            }
+            if (StringUtils.isNotEmpty(confirmer2s)) {
+                confirmUsers2.addAll(Arrays.asList(confirmer2s.split(",")));
             }
 
             // 开始申请流程
@@ -475,8 +483,8 @@ public class TPssrSafetyController extends BaseController {
             Authentication.setAuthenticatedUserId(userId);//设置当前申请人
             Map<String, Object> variables = new HashMap<>();
             variables.put("applyUser", userId);
-            variables.put("confirmUsers1", confirmUsers1);
-            variables.put("confirmUsers2", confirmUsers2);
+            variables.put("confirmUsers1", new ArrayList<>(confirmUsers1));
+            variables.put("confirmUsers2", new ArrayList<>(confirmUsers2));
             variables.put("chargePerson", approve.getSubCharge());
             //采用key来启动流程定义并设置流程变量,返回流程实例
             ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr2confirm", String.valueOf(businessKey), variables);
@@ -526,18 +534,27 @@ public class TPssrSafetyController extends BaseController {
             }
 
             // 驳回 查询所有待审批的人员
-            TPssrSafetyBreath blind = new TPssrSafetyBreath();
-            blind.setSubId(tPssrSafetyBreath.getSubId());
-            blind.setApproveStatus(1L);
+            // 查询确认人
+            TPssrSafetyBleed entity = new TPssrSafetyBleed();
+            entity.setSubId(approve.getSubId());
+            entity.setApproveStatus(1L);
+            TPssrSafetyBleed safety = tPssrSafetyBleedService.selectAllConfirmedPersonBySubId(entity);
+            String confirmer1s = null;
+            String confirmer2s = null;
+            if (safety != null) {
+                confirmer1s = safety.getConfirmer1();
+                confirmer2s = safety.getConfirmer2();
+            }
+            logger.info("=======================confirmer1s:{}", confirmer1s);
+            logger.info("=======================confirmer2s:{}", confirmer2s);
+
             Set<String> confirmUsers1 = new HashSet<>();
             Set<String> confirmUsers2 = new HashSet<>();
-            for (TPssrSafetyBreath item : tPssrSafetyBreathService.selectTPssrSafetyBreathList(blind)) {
-
-                // 确认人1
-                confirmUsers1.add(item.getConfirmer1());
-
-                //确认人2
-                confirmUsers2.add(item.getConfirmer2());
+            if (StringUtils.isNotEmpty(confirmer1s)) {
+                confirmUsers1.addAll(Arrays.asList(confirmer1s.split(",")));
+            }
+            if (StringUtils.isNotEmpty(confirmer2s)) {
+                confirmUsers2.addAll(Arrays.asList(confirmer2s.split(",")));
             }
 
             // 开始申请流程
@@ -546,8 +563,8 @@ public class TPssrSafetyController extends BaseController {
             Authentication.setAuthenticatedUserId(userId);//设置当前申请人
             Map<String, Object> variables = new HashMap<>();
             variables.put("applyUser", userId);
-            variables.put("confirmUsers1", confirmUsers1);
-            variables.put("confirmUsers2", confirmUsers2);
+            variables.put("confirmUsers1", new ArrayList<>(confirmUsers1));
+            variables.put("confirmUsers2", new ArrayList<>(confirmUsers2));
             variables.put("chargePerson", approve.getSubCharge());
             //采用key来启动流程定义并设置流程变量,返回流程实例
             ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr2confirm", String.valueOf(businessKey), variables);
@@ -597,18 +614,27 @@ public class TPssrSafetyController extends BaseController {
             }
 
             // 驳回 查询所有待审批的人员
-            TPssrSafetyBrust blind = new TPssrSafetyBrust();
-            blind.setSubId(tPssrSafetyBrust.getSubId());
-            blind.setApproveStatus(1L);
+            // 查询确认人
+            TPssrSafetyBleed entity = new TPssrSafetyBleed();
+            entity.setSubId(approve.getSubId());
+            entity.setApproveStatus(1L);
+            TPssrSafetyBleed safety = tPssrSafetyBleedService.selectAllConfirmedPersonBySubId(entity);
+            String confirmer1s = null;
+            String confirmer2s = null;
+            if (safety != null) {
+                confirmer1s = safety.getConfirmer1();
+                confirmer2s = safety.getConfirmer2();
+            }
+            logger.info("=======================confirmer1s:{}", confirmer1s);
+            logger.info("=======================confirmer2s:{}", confirmer2s);
+
             Set<String> confirmUsers1 = new HashSet<>();
             Set<String> confirmUsers2 = new HashSet<>();
-            for (TPssrSafetyBrust item : tPssrSafetyBrustService.selectTPssrSafetyBrustList(blind)) {
-
-                // 确认人1
-                confirmUsers1.add(item.getConfirmer1());
-
-                //确认人2
-                confirmUsers2.add(item.getConfirmer2());
+            if (StringUtils.isNotEmpty(confirmer1s)) {
+                confirmUsers1.addAll(Arrays.asList(confirmer1s.split(",")));
+            }
+            if (StringUtils.isNotEmpty(confirmer2s)) {
+                confirmUsers2.addAll(Arrays.asList(confirmer2s.split(",")));
             }
 
             // 开始申请流程
@@ -617,8 +643,8 @@ public class TPssrSafetyController extends BaseController {
             Authentication.setAuthenticatedUserId(userId);//设置当前申请人
             Map<String, Object> variables = new HashMap<>();
             variables.put("applyUser", userId);
-            variables.put("confirmUsers1", confirmUsers1);
-            variables.put("confirmUsers2", confirmUsers2);
+            variables.put("confirmUsers1", new ArrayList<>(confirmUsers1));
+            variables.put("confirmUsers2", new ArrayList<>(confirmUsers2));
             variables.put("chargePerson", approve.getSubCharge());
             //采用key来启动流程定义并设置流程变量,返回流程实例
             ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr2confirm", String.valueOf(businessKey), variables);
@@ -668,18 +694,27 @@ public class TPssrSafetyController extends BaseController {
             }
 
             // 驳回 查询所有待审批的人员
-            TPssrSafetyFlamearrester blind = new TPssrSafetyFlamearrester();
-            blind.setSubId(tPssrSafetyFlamearrester.getSubId());
-            blind.setApproveStatus(1L);
+            // 查询确认人
+            TPssrSafetyBleed entity = new TPssrSafetyBleed();
+            entity.setSubId(approve.getSubId());
+            entity.setApproveStatus(1L);
+            TPssrSafetyBleed safety = tPssrSafetyBleedService.selectAllConfirmedPersonBySubId(entity);
+            String confirmer1s = null;
+            String confirmer2s = null;
+            if (safety != null) {
+                confirmer1s = safety.getConfirmer1();
+                confirmer2s = safety.getConfirmer2();
+            }
+            logger.info("=======================confirmer1s:{}", confirmer1s);
+            logger.info("=======================confirmer2s:{}", confirmer2s);
+
             Set<String> confirmUsers1 = new HashSet<>();
             Set<String> confirmUsers2 = new HashSet<>();
-            for (TPssrSafetyFlamearrester item : tPssrSafetyFlamearresterService.selectTPssrSafetyFlamearresterList(blind)) {
-
-                // 确认人1
-                confirmUsers1.add(item.getConfirmer1());
-
-                //确认人2
-                confirmUsers2.add(item.getConfirmer2());
+            if (StringUtils.isNotEmpty(confirmer1s)) {
+                confirmUsers1.addAll(Arrays.asList(confirmer1s.split(",")));
+            }
+            if (StringUtils.isNotEmpty(confirmer2s)) {
+                confirmUsers2.addAll(Arrays.asList(confirmer2s.split(",")));
             }
 
             // 开始申请流程
@@ -688,8 +723,8 @@ public class TPssrSafetyController extends BaseController {
             Authentication.setAuthenticatedUserId(userId);//设置当前申请人
             Map<String, Object> variables = new HashMap<>();
             variables.put("applyUser", userId);
-            variables.put("confirmUsers1", confirmUsers1);
-            variables.put("confirmUsers2", confirmUsers2);
+            variables.put("confirmUsers1", new ArrayList<>(confirmUsers1));
+            variables.put("confirmUsers2", new ArrayList<>(confirmUsers2));
             variables.put("chargePerson", approve.getSubCharge());
             //采用key来启动流程定义并设置流程变量,返回流程实例
             ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr2confirm", String.valueOf(businessKey), variables);
@@ -739,18 +774,27 @@ public class TPssrSafetyController extends BaseController {
             }
 
             // 驳回 查询所有待审批的人员
-            TPssrSafetyValve blind = new TPssrSafetyValve();
-            blind.setSubId(tPssrSafetyValve.getSubId());
-            blind.setApproveStatus(1L);
+            // 查询确认人
+            TPssrSafetyBleed entity = new TPssrSafetyBleed();
+            entity.setSubId(approve.getSubId());
+            entity.setApproveStatus(1L);
+            TPssrSafetyBleed safety = tPssrSafetyBleedService.selectAllConfirmedPersonBySubId(entity);
+            String confirmer1s = null;
+            String confirmer2s = null;
+            if (safety != null) {
+                confirmer1s = safety.getConfirmer1();
+                confirmer2s = safety.getConfirmer2();
+            }
+            logger.info("=======================confirmer1s:{}", confirmer1s);
+            logger.info("=======================confirmer2s:{}", confirmer2s);
+
             Set<String> confirmUsers1 = new HashSet<>();
             Set<String> confirmUsers2 = new HashSet<>();
-            for (TPssrSafetyValve item : tPssrSafetyValveService.selectTPssrSafetyValveList(blind)) {
-
-                // 确认人1
-                confirmUsers1.add(item.getConfirmer1());
-
-                //确认人2
-                confirmUsers2.add(item.getConfirmer2());
+            if (StringUtils.isNotEmpty(confirmer1s)) {
+                confirmUsers1.addAll(Arrays.asList(confirmer1s.split(",")));
+            }
+            if (StringUtils.isNotEmpty(confirmer2s)) {
+                confirmUsers2.addAll(Arrays.asList(confirmer2s.split(",")));
             }
 
             // 开始申请流程
@@ -759,8 +803,8 @@ public class TPssrSafetyController extends BaseController {
             Authentication.setAuthenticatedUserId(userId);//设置当前申请人
             Map<String, Object> variables = new HashMap<>();
             variables.put("applyUser", userId);
-            variables.put("confirmUsers1", confirmUsers1);
-            variables.put("confirmUsers2", confirmUsers2);
+            variables.put("confirmUsers1",  new ArrayList<>(confirmUsers1));
+            variables.put("confirmUsers2",  new ArrayList<>(confirmUsers2));
             variables.put("chargePerson", approve.getSubCharge());
             //采用key来启动流程定义并设置流程变量,返回流程实例
             ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr2confirm", String.valueOf(businessKey), variables);

+ 19 - 0
master/src/main/java/com/ruoyi/project/pssr/domain/TPssrPumpCleaning.java

@@ -107,6 +107,25 @@ public class TPssrPumpCleaning extends BaseEntity
     /** 审批状态 */
     @Excel(name = "审批状态")
     private Long approveStatus;
+    private Long[] ids;
+
+    private Long taskType;
+
+    public Long[] getIds() {
+        return ids;
+    }
+
+    public void setIds(Long[] ids) {
+        this.ids = ids;
+    }
+
+    public Long getTaskType() {
+        return taskType;
+    }
+
+    public void setTaskType(Long taskType) {
+        this.taskType = taskType;
+    }
 
     public void setId(Long id)
     {

+ 19 - 0
master/src/main/java/com/ruoyi/project/pssr/domain/TPssrPumpFill.java

@@ -107,6 +107,25 @@ public class TPssrPumpFill extends BaseEntity
     /** 审批状态 */
     @Excel(name = "审批状态")
     private Long approveStatus;
+    private Long[] ids;
+
+    private Long taskType;
+
+    public Long[] getIds() {
+        return ids;
+    }
+
+    public void setIds(Long[] ids) {
+        this.ids = ids;
+    }
+
+    public Long getTaskType() {
+        return taskType;
+    }
+
+    public void setTaskType(Long taskType) {
+        this.taskType = taskType;
+    }
 
     public void setId(Long id)
     {

+ 19 - 0
master/src/main/java/com/ruoyi/project/pssr/domain/TPssrPumpOverhaul.java

@@ -99,6 +99,25 @@ public class TPssrPumpOverhaul extends BaseEntity
     /** 审批状态 */
     @Excel(name = "审批状态")
     private Long approveStatus;
+    private Long[] ids;
+
+    private Long taskType;
+
+    public Long[] getIds() {
+        return ids;
+    }
+
+    public void setIds(Long[] ids) {
+        this.ids = ids;
+    }
+
+    public Long getTaskType() {
+        return taskType;
+    }
+
+    public void setTaskType(Long taskType) {
+        this.taskType = taskType;
+    }
 
     public void setId(Long id)
     {

+ 10 - 10
master/src/main/java/com/ruoyi/project/pssr/mapper/TPssrMaterialMapper.java

@@ -6,15 +6,15 @@ import com.ruoyi.project.pssr.domain.TPssrMaterial;
 
 /**
  * 原料Mapper接口
- *
+ * 
  * @author ssy
  * @date 2024-09-18
  */
-public interface TPssrMaterialMapper
+public interface TPssrMaterialMapper 
 {
     /**
      * 查询原料
-     *
+     * 
      * @param id 原料ID
      * @return 原料
      */
@@ -23,7 +23,7 @@ public interface TPssrMaterialMapper
 
     /**
      * 查询原料列表
-     *
+     * 
      * @param tPssrMaterial 原料
      * @return 原料集合
      */
@@ -32,7 +32,7 @@ public interface TPssrMaterialMapper
 
     /**
      * 新增原料
-     *
+     * 
      * @param tPssrMaterial 原料
      * @return 结果
      */
@@ -40,15 +40,17 @@ public interface TPssrMaterialMapper
 
     /**
      * 修改原料
-     *
+     * 
      * @param tPssrMaterial 原料
      * @return 结果
      */
     public int updateTPssrMaterial(TPssrMaterial tPssrMaterial);
     int updateTPssrMaterialByIds(TPssrMaterial tPssrMaterial);
+    public int updateAllBySubId(TPssrMaterial tPssrMaterial);
+
     /**
      * 删除原料
-     *
+     * 
      * @param id 原料ID
      * @return 结果
      */
@@ -56,11 +58,9 @@ public interface TPssrMaterialMapper
 
     /**
      * 批量删除原料
-     *
+     * 
      * @param ids 需要删除的数据ID
      * @return 结果
      */
     public int deleteTPssrMaterialByIds(Long[] ids);
-
-
 }

+ 7 - 7
master/src/main/java/com/ruoyi/project/pssr/mapper/TPssrMaterialRawMapper.java

@@ -7,7 +7,7 @@ import java.util.List;
 
 /**
  * 原料Mapper接口
- *
+ * 
  * @author ssy
  * @date 2024-09-18
  */
@@ -15,15 +15,16 @@ public interface TPssrMaterialRawMapper
 {
     /**
      * 查询原料
-     *
+     * 
      * @param id 原料ID
      * @return 原料
      */
     public TPssrMaterialRaw selectTPssrMaterialRawById(Long id);
     public TPssrMaterialRaw selectAllConfirmedPersonBySubId(TPssrMaterialRaw tpssrMaterialRaw);
+
     /**
      * 查询原料列表
-     *
+     * 
      * @param tPssrMaterialRaw 原料
      * @return 原料集合
      */
@@ -32,7 +33,7 @@ public interface TPssrMaterialRawMapper
 
     /**
      * 新增原料
-     *
+     * 
      * @param tPssrMaterialRaw 原料
      * @return 结果
      */
@@ -40,12 +41,13 @@ public interface TPssrMaterialRawMapper
 
     /**
      * 修改原料
-     *
+     * 
      * @param tPssrMaterialRaw 原料
      * @return 结果
      */
     public int updateTPssrMaterialRaw(TPssrMaterialRaw tPssrMaterialRaw);
     int updateTPssrMaterialRawByIds(TPssrMaterialRaw tPssrMaterialRaw);
+    public int updateAllBySubId(TPssrMaterialRaw tPssrMaterialRaw);
 
     /**
      * 删除原料
@@ -62,6 +64,4 @@ public interface TPssrMaterialRawMapper
      * @return 结果
      */
     public int deleteTPssrMaterialRawByIds(Long[] ids);
-
-
 }

+ 1 - 0
master/src/main/java/com/ruoyi/project/pssr/mapper/TPssrPumpCleaningMapper.java

@@ -44,6 +44,7 @@ public interface TPssrPumpCleaningMapper
      * @return 结果
      */
     public int updateTPssrPumpCleaning(TPssrPumpCleaning tPssrPumpCleaning);
+    public int updateAllBySubId(TPssrPumpCleaning tPssrPumpCleaning);
 
     /**
      * 删除机泵过滤器清理工作清单

+ 3 - 0
master/src/main/java/com/ruoyi/project/pssr/mapper/TPssrPumpFillMapper.java

@@ -44,6 +44,7 @@ public interface TPssrPumpFillMapper
      * @return 结果
      */
     public int updateTPssrPumpFill(TPssrPumpFill tPssrPumpFill);
+    public int updateAllBySubId(TPssrPumpFill tPssrPumpFill);
 
     /**
      * 删除机泵润滑油加注确认清单
@@ -60,4 +61,6 @@ public interface TPssrPumpFillMapper
      * @return 结果
      */
     public int deleteTPssrPumpFillByIds(Long[] ids);
+
+    public TPssrPumpFill selectAllConfirmedPersonBySubId(TPssrPumpFill tPssrPumpFill);
 }

+ 1 - 0
master/src/main/java/com/ruoyi/project/pssr/mapper/TPssrPumpOverhaulMapper.java

@@ -44,6 +44,7 @@ public interface TPssrPumpOverhaulMapper
      * @return 结果
      */
     public int updateTPssrPumpOverhaul(TPssrPumpOverhaul tPssrPumpOverhaul);
+    public int updateAllBySubId(TPssrPumpOverhaul tPssrPumpOverhaul);
 
     /**
      * 删除机泵检修完成确认清单

+ 1 - 0
master/src/main/java/com/ruoyi/project/pssr/service/ITPssrMaterialRawService.java

@@ -44,6 +44,7 @@ public interface ITPssrMaterialRawService
      * @return 结果
      */
     public int updateTPssrMaterialRaw(TPssrMaterialRaw tPssrMaterialRaw);
+    public int updateAllBySubId(TPssrMaterialRaw tPssrMaterialRaw);
 
     /**
      * 批量删除原料

+ 1 - 0
master/src/main/java/com/ruoyi/project/pssr/service/ITPssrMaterialService.java

@@ -43,6 +43,7 @@ public interface ITPssrMaterialService
      * @return 结果
      */
     public int updateTPssrMaterial(TPssrMaterial tPssrMaterial);
+    public int updateAllBySubId(TPssrMaterial tPssrMaterial);
 
     /**
      * 批量删除原料

+ 1 - 0
master/src/main/java/com/ruoyi/project/pssr/service/ITPssrPumpCleaningService.java

@@ -42,6 +42,7 @@ public interface ITPssrPumpCleaningService
      * @return 结果
      */
     public int updateTPssrPumpCleaning(TPssrPumpCleaning tPssrPumpCleaning);
+    public int updateAllBySubId(TPssrPumpCleaning tPssrPumpCleaning);
 
     /**
      * 批量删除机泵过滤器清理工作清单

+ 2 - 0
master/src/main/java/com/ruoyi/project/pssr/service/ITPssrPumpFillService.java

@@ -18,6 +18,7 @@ public interface ITPssrPumpFillService
      * @return 机泵润滑油加注确认清单
      */
     public TPssrPumpFill selectTPssrPumpFillById(Long id);
+    public TPssrPumpFill selectAllConfirmedPersonBySubId(TPssrPumpFill tPssrPumpFill);
 
     /**
      * 查询机泵润滑油加注确认清单列表
@@ -42,6 +43,7 @@ public interface ITPssrPumpFillService
      * @return 结果
      */
     public int updateTPssrPumpFill(TPssrPumpFill tPssrPumpFill);
+    public int updateAllBySubId(TPssrPumpFill tPssrPumpFill);
 
     /**
      * 批量删除机泵润滑油加注确认清单

+ 1 - 0
master/src/main/java/com/ruoyi/project/pssr/service/ITPssrPumpOverhaulService.java

@@ -42,6 +42,7 @@ public interface ITPssrPumpOverhaulService
      * @return 结果
      */
     public int updateTPssrPumpOverhaul(TPssrPumpOverhaul tPssrPumpOverhaul);
+    public int updateAllBySubId(TPssrPumpOverhaul tPssrPumpOverhaul);
 
     /**
      * 批量删除机泵检修完成确认清单

+ 5 - 0
master/src/main/java/com/ruoyi/project/pssr/service/impl/TPssrMaterialRawServiceImpl.java

@@ -72,6 +72,11 @@ public class TPssrMaterialRawServiceImpl implements ITPssrMaterialRawService
     {
         return tPssrMaterialRawMapper.updateTPssrMaterialRaw(tPssrMaterialRaw);
     }
+    @Override
+    public int updateAllBySubId(TPssrMaterialRaw tPssrMaterialRaw)
+    {
+        return tPssrMaterialRawMapper.updateAllBySubId(tPssrMaterialRaw);
+    }
 
     /**
      * 批量删除原料

+ 5 - 0
master/src/main/java/com/ruoyi/project/pssr/service/impl/TPssrMaterialServiceImpl.java

@@ -71,6 +71,11 @@ public class TPssrMaterialServiceImpl implements ITPssrMaterialService
     {
         return tPssrMaterialMapper.updateTPssrMaterial(tPssrMaterial);
     }
+    @Override
+    public int updateAllBySubId(TPssrMaterial tPssrMaterial)
+    {
+        return tPssrMaterialMapper.updateAllBySubId(tPssrMaterial);
+    }
 
     /**
      * 批量删除原料

+ 5 - 0
master/src/main/java/com/ruoyi/project/pssr/service/impl/TPssrPumpCleaningServiceImpl.java

@@ -67,6 +67,11 @@ public class TPssrPumpCleaningServiceImpl implements ITPssrPumpCleaningService
         return tPssrPumpCleaningMapper.updateTPssrPumpCleaning(tPssrPumpCleaning);
     }
 
+    @Override
+    public int updateAllBySubId(TPssrPumpCleaning tPssrPumpCleaning) {
+        return tPssrPumpCleaningMapper.updateAllBySubId(tPssrPumpCleaning);
+    }
+
     /**
      * 批量删除机泵过滤器清理工作清单
      *

+ 10 - 0
master/src/main/java/com/ruoyi/project/pssr/service/impl/TPssrPumpFillServiceImpl.java

@@ -30,6 +30,11 @@ public class TPssrPumpFillServiceImpl implements ITPssrPumpFillService
     {
         return tPssrPumpFillMapper.selectTPssrPumpFillById(id);
     }
+    @Override
+    public TPssrPumpFill selectAllConfirmedPersonBySubId(TPssrPumpFill tPssrPumpFill)
+    {
+        return tPssrPumpFillMapper.selectAllConfirmedPersonBySubId(tPssrPumpFill);
+    }
 
     /**
      * 查询机泵润滑油加注确认清单列表
@@ -67,6 +72,11 @@ public class TPssrPumpFillServiceImpl implements ITPssrPumpFillService
         return tPssrPumpFillMapper.updateTPssrPumpFill(tPssrPumpFill);
     }
 
+    @Override
+    public int updateAllBySubId(TPssrPumpFill tPssrPumpFill) {
+        return tPssrPumpFillMapper.updateAllBySubId(tPssrPumpFill);
+    }
+
     /**
      * 批量删除机泵润滑油加注确认清单
      *

+ 5 - 0
master/src/main/java/com/ruoyi/project/pssr/service/impl/TPssrPumpOverhaulServiceImpl.java

@@ -67,6 +67,11 @@ public class TPssrPumpOverhaulServiceImpl implements ITPssrPumpOverhaulService
         return tPssrPumpOverhaulMapper.updateTPssrPumpOverhaul(tPssrPumpOverhaul);
     }
 
+    @Override
+    public int updateAllBySubId(TPssrPumpOverhaul tPssrPumpOverhaul) {
+        return tPssrPumpOverhaulMapper.updateAllBySubId(tPssrPumpOverhaul);
+    }
+
     /**
      * 批量删除机泵检修完成确认清单
      *

+ 10 - 0
master/src/main/resources/mybatis/pssr/TPssrMaterialMapper.xml

@@ -168,6 +168,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </update>
 
 
+    <update id="updateAllBySubId" parameterType="TPssrMaterial">
+        update t_pssr_material
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="approveStatus != null">approve_status = #{approveStatus},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+        </trim>
+        where sub_id= #{subId} and APPROVE_STATUS=0
+    </update>
+
     <update id="deleteTPssrMaterialById" parameterType="Long">
         update t_pssr_material set del_flag = 2 where id = #{id}
     </update>

+ 11 - 1
master/src/main/resources/mybatis/pssr/TPssrMaterialRawMapper.xml

@@ -70,7 +70,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="approveStatus != null ">AND approve_status = #{approveStatus}</if>
 
         UNION
-        SELECT DISTINCT CONFIRM1, CONFIRM2 FROM t_pssr_material_raw_raw WHERE sub_id = #{subId}
+        SELECT DISTINCT CONFIRM1, CONFIRM2 FROM t_pssr_material WHERE sub_id = #{subId}
         <if test="approveStatus != null "> AND approve_status = #{approveStatus}</if>
         )
     </select>
@@ -122,6 +122,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </trim>
     </insert>
 
+    <update id="updateAllBySubId" parameterType="TPssrMaterialRaw">
+        update t_pssr_material_raw
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="approveStatus != null">approve_status = #{approveStatus},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+        </trim>
+        where sub_id= #{subId} and APPROVE_STATUS=0
+    </update>
+
     <update id="updateTPssrMaterialRaw" parameterType="TPssrMaterialRaw">
         update t_pssr_material_raw
         <trim prefix="SET" suffixOverrides=",">

+ 10 - 0
master/src/main/resources/mybatis/pssr/TPssrPumpCleaningMapper.xml

@@ -116,6 +116,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </trim>
     </insert>
 
+    <update id="updateAllBySubId" parameterType="TPssrPumpCleaning">
+        update t_pssr_pump_cleaning
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="approveStatus != null">approve_status = #{approveStatus},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+        </trim>
+        where sub_id= #{subId} and APPROVE_STATUS=0
+    </update>
+
     <update id="updateTPssrPumpCleaning" parameterType="TPssrPumpCleaning">
         update t_pssr_pump_cleaning
         <trim prefix="SET" suffixOverrides=",">

+ 31 - 0
master/src/main/resources/mybatis/pssr/TPssrPumpFillMapper.xml

@@ -64,6 +64,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectTPssrPumpFillVo"/>
         where id = #{id}
     </select>
+
+    <select id="selectAllConfirmedPersonBySubId" parameterType="TPssrPumpFill" resultMap="TPssrPumpFillResult">
+        SELECT
+        LISTAGG(CONFIRMER1, ',') WITHIN GROUP (ORDER BY CONFIRMER1) AS CONFIRMER1,
+        LISTAGG(CONFIRMER2, ',') WITHIN GROUP (ORDER BY CONFIRMER2) AS CONFIRMER2
+        FROM (
+        SELECT DISTINCT CONFIRMER1, CONFIRMER2 FROM t_pssr_pump_fill WHERE sub_id = #{subId}
+        <if test="approveStatus != null ">AND approve_status = #{approveStatus}</if>
+
+        UNION
+        SELECT DISTINCT CONFIRMER1, CONFIRMER2 FROM t_pssr_pump_cleaning WHERE sub_id = #{subId}
+        <if test="approveStatus != null "> AND approve_status = #{approveStatus}</if>
+
+        UNION
+        SELECT DISTINCT CONFIRMER1, CONFIRMER2 FROM t_pssr_pump_overhaul WHERE sub_id = #{subId}
+        <if test="approveStatus != null "> AND approve_status = #{approveStatus}</if>
+        )
+    </select>
+
+
         
     <insert id="insertTPssrPumpFill" parameterType="TPssrPumpFill">
         <selectKey keyProperty="id" resultType="long" order="BEFORE">
@@ -116,6 +136,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </trim>
     </insert>
 
+
+    <update id="updateAllBySubId" parameterType="TPssrPumpFill">
+        update t_pssr_pump_fill
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="approveStatus != null">approve_status = #{approveStatus},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+        </trim>
+        where sub_id= #{subId} and APPROVE_STATUS=0
+    </update>
+
     <update id="updateTPssrPumpFill" parameterType="TPssrPumpFill">
         update t_pssr_pump_fill
         <trim prefix="SET" suffixOverrides=",">

+ 10 - 0
master/src/main/resources/mybatis/pssr/TPssrPumpOverhaulMapper.xml

@@ -108,6 +108,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </trim>
     </insert>
 
+    <update id="updateAllBySubId" parameterType="TPssrPumpOverhaul">
+        update t_pssr_pump_overhaul
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="approveStatus != null">approve_status = #{approveStatus},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+        </trim>
+        where sub_id= #{subId} and APPROVE_STATUS=0
+    </update>
+
     <update id="updateTPssrPumpOverhaul" parameterType="TPssrPumpOverhaul">
         update t_pssr_pump_overhaul
         <trim prefix="SET" suffixOverrides=",">

+ 9 - 0
ui/src/api/pssr/lock.js

@@ -45,6 +45,15 @@ export function handleConfirmApproveLock(data) {
   })
 }
 
+// 驳回锁开锁关
+export function handleTurnDownLock(data) {
+  return request({
+    url: '/pssr/lock/turnDownLock',
+    method: 'put',
+    data: data
+  })
+}
+
 // 删除锁开锁关阀门状态
 export function delLock(id) {
   return request({

+ 9 - 0
ui/src/api/pssr/overhaulExchanger.js

@@ -44,6 +44,15 @@ export function handleConfirmApprove(data) {
   })
 }
 
+// 确认检修项目-换热器
+export function handleTurnDownExchanger(data) {
+  return request({
+    url: '/pssr/overhaulExchanger/turnDownExchanger',
+    method: 'put',
+    data: data
+  })
+}
+
 // 删除检修项目-换热器
 export function delOverhaulExchanger(id) {
   return request({

+ 7 - 0
ui/src/api/pssr/overhaulFilter.js

@@ -1,5 +1,12 @@
 import request from '@/utils/request'
 
+export function handleTurnDownFilter(data) {
+  return request({
+    url: '/pssr/overhaulFilter/turnDownFilter',
+    method: 'put',
+    data: data
+  })
+}
 // 查询检修项目-过滤器列表
 export function listOverhaulFilter(query) {
   return request({

+ 7 - 0
ui/src/api/pssr/overhaulPipe.js

@@ -1,5 +1,12 @@
 import request from '@/utils/request'
 
+export function handleTurnDownPipe(data) {
+  return request({
+    url: '/pssr/overhaulPipe/turnDownPipe',
+    method: 'put',
+    data: data
+  })
+}
 // 查询检修项目-管线列表
 export function listOverhaulPipe(query) {
   return request({

+ 7 - 0
ui/src/api/pssr/overhaulPump.js

@@ -1,5 +1,12 @@
 import request from '@/utils/request'
 
+export function handleTurnDownPump(data) {
+  return request({
+    url: '/pssr/overhaulPump/turnDownPump',
+    method: 'put',
+    data: data
+  })
+}
 // 查询检修项目-泵列表
 export function listOverhaulPump(query) {
   return request({

+ 7 - 0
ui/src/api/pssr/overhaulTower.js

@@ -1,5 +1,12 @@
 import request from '@/utils/request'
 
+export function handleTurnDownTower(data) {
+  return request({
+    url: '/pssr/overhaulTower/turnDownTower',
+    method: 'put',
+    data: data
+  })
+}
 // 查询检修项目-塔罐列表
 export function listOverhaulTower(query) {
   return request({

+ 7 - 0
ui/src/api/pssr/overhaulValve.js

@@ -1,5 +1,12 @@
 import request from '@/utils/request'
 
+export function handleTurnDownValve(data) {
+  return request({
+    url: '/pssr/overhaulValve/turnDownValve',
+    method: 'put',
+    data: data
+  })
+}
 // 查询检修项目-阀门列表
 export function listOverhaulValve(query) {
   return request({

+ 20 - 1
ui/src/api/pssr/pumpCleaning.js

@@ -1,5 +1,24 @@
 import request from '@/utils/request'
 
+// 确认PUMPCLEANING完成确认清单
+export function handleConfirmPumpCleaning(data) {
+  return request({
+    url: '/pssr/pumpCleaning/confirmPumpCleaning',
+    method: 'put',
+    data: data
+  })
+}
+
+// 驳回PUMPCLEANING完成确认清单
+export function handleTurnDownPumpCleaning(data) {
+  return request({
+    url: '/pssr/pumpCleaning/turnDownPumpCleaning',
+    method: 'put',
+    data: data
+  })
+}
+
+
 // 查询机泵过滤器清理工作清单列表
 export function listPumpCleaning(query) {
   return request({
@@ -50,4 +69,4 @@ export function exportPumpCleaning(query) {
     method: 'get',
     params: query
   })
-}
+}

+ 20 - 1
ui/src/api/pssr/pumpFill.js

@@ -1,5 +1,24 @@
 import request from '@/utils/request'
 
+// 确认PUMPFILL完成确认清单
+export function handleConfirmPumpFill(data) {
+  return request({
+    url: '/pssr/pumpFill/confirmPumpFill',
+    method: 'put',
+    data: data
+  })
+}
+
+// 驳回PUMPFILL完成确认清单
+export function handleTurnDownPumpFill(data) {
+  return request({
+    url: '/pssr/pumpFill/turnDownPumpFill',
+    method: 'put',
+    data: data
+  })
+}
+
+
 // 查询机泵润滑油加注确认清单列表
 export function listPumpFill(query) {
   return request({
@@ -50,4 +69,4 @@ export function exportPumpFill(query) {
     method: 'get',
     params: query
   })
-}
+}

+ 20 - 1
ui/src/api/pssr/pumpOverhaul.js

@@ -1,5 +1,24 @@
 import request from '@/utils/request'
 
+// 确认PUMPOVERHAUL完成确认清单
+export function handleConfirmPumpOverhaul(data) {
+  return request({
+    url: '/pssr/pumpOverhaul/confirmPumpOverhaul',
+    method: 'put',
+    data: data
+  })
+}
+
+// 驳回PUMPOVERHAUL完成确认清单
+export function handleTurnDownPumpOverhaul(data) {
+  return request({
+    url: '/pssr/pumpOverhaul/turnDownPumpOverhaul',
+    method: 'put',
+    data: data
+  })
+}
+
+
 // 查询机泵检修完成确认清单列表
 export function listPumpOverhaul(query) {
   return request({
@@ -50,4 +69,4 @@ export function exportPumpOverhaul(query) {
     method: 'get',
     params: query
   })
-}
+}

+ 152 - 84
ui/src/router/index.js

@@ -1,11 +1,10 @@
 import Vue from 'vue'
 import Router from 'vue-router'
-
-Vue.use(Router)
-
 /* Layout */
 import Layout from '@/layout'
 
+Vue.use(Router)
+
 /**
  * Note: 路由配置项
  *
@@ -17,11 +16,11 @@ import Layout from '@/layout'
  * redirect: noRedirect           // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
  * name:'router-name'             // 设定路由的名字,一定要填写不然使用<keep-alive>时会出现各种问题
  * meta : {
-    noCache: true                // 如果设置为true,则不会被 <keep-alive> 缓存(默认 false)
-    title: 'title'               // 设置该路由在侧边栏和面包屑中展示的名字
-    icon: 'svg-name'             // 设置该路由的图标,对应路径src/assets/icons/svg
-    breadcrumb: false            // 如果设置为false,则不会在breadcrumb面包屑中显示
-  }
+ noCache: true                // 如果设置为true,则不会被 <keep-alive> 缓存(默认 false)
+ title: 'title'               // 设置该路由在侧边栏和面包屑中展示的名字
+ icon: 'svg-name'             // 设置该路由的图标,对应路径src/assets/icons/svg
+ breadcrumb: false            // 如果设置为false,则不会在breadcrumb面包屑中显示
+ }
  */
 
 // 公共路由
@@ -91,7 +90,7 @@ export const constantRoutes = [
         path: 'index',
         component: (resolve) => require(['@/views/index'], resolve),
         name: '首页',
-        meta: { title: '首页', icon: 'dashboard', noCache: true, affix: true }
+        meta: {title: '首页', icon: 'dashboard', noCache: true, affix: true}
       }
     ]
   },
@@ -105,7 +104,7 @@ export const constantRoutes = [
         path: 'profile',
         component: (resolve) => require(['@/views/system/user/profile/index'], resolve),
         name: 'Profile',
-        meta: { title: '个人中心', icon: 'user' }
+        meta: {title: '个人中心', icon: 'user'}
       }
     ]
   },
@@ -119,7 +118,7 @@ export const constantRoutes = [
         path: 'message',
         component: (resolve) => require(['@/views/system/message/index'], resolve),
         name: 'Profile',
-        meta: { title: '系统消息', icon: '' }
+        meta: {title: '系统消息', icon: ''}
       }
     ]
   },
@@ -133,7 +132,7 @@ export const constantRoutes = [
         path: 'pfd',
         component: (resolve) => require(['@/views/process/pfd/index'], resolve),
         name: 'Profile',
-        meta: { title: 'pfd', icon: '' }
+        meta: {title: 'pfd', icon: ''}
       }
     ]
   },
@@ -146,7 +145,7 @@ export const constantRoutes = [
         path: 'type/data/:dictId(\\d+)',
         component: (resolve) => require(['@/views/system/dict/data'], resolve),
         name: 'Data',
-        meta: { title: '字典数据', icon: '' }
+        meta: {title: '字典数据', icon: ''}
       }
     ]
   },
@@ -177,7 +176,7 @@ export const constantRoutes = [
         path: 'log',
         component: (resolve) => require(['@/views/monitor/job/log'], resolve),
         name: 'JobLog',
-        meta: { title: '调度日志' }
+        meta: {title: '调度日志'}
       }
     ]
   },
@@ -190,7 +189,7 @@ export const constantRoutes = [
         path: 'edit/:tableId(\\d+)',
         component: (resolve) => require(['@/views/tool/gen/editTable'], resolve),
         name: 'GenEdit',
-        meta: { title: '修改生成配置' }
+        meta: {title: '修改生成配置'}
       }
     ]
   },
@@ -203,7 +202,7 @@ export const constantRoutes = [
         path: 'rcfile/:id(\\d+)',
         component: (resolve) => require(['@/views/ehs/rcfile'], resolve),
         name: 'rcfile',
-        meta: { title: '附件' }
+        meta: {title: '附件'}
       }
     ]
   },
@@ -216,19 +215,19 @@ export const constantRoutes = [
         path: 'detail/:id(\\d+)',
         component: (resolve) => require(['@/views/plant/dailyMeeting/detail'], resolve),
         name: 'dailyMeetingDetail',
-        meta: { title: '调度会议详情'}
+        meta: {title: '调度会议详情'}
       },
       {
         path: 'dailyMeetingConfig',
         component: (resolve) => require(['@/views/plant/dailyMeetingConfig'], resolve),
         name: 'dailyMeetingConfig',
-        meta: { title: '调度会议配置' }
+        meta: {title: '调度会议配置'}
       },
       {
         path: 'dailyMeetingEmail',
         component: (resolve) => require(['@/views/plant/dailyMeetingEmail'], resolve),
         name: 'dailyMeetingEmail',
-        meta: { title: '邮件配置' }
+        meta: {title: '邮件配置'}
       }
     ]
   },
@@ -241,7 +240,7 @@ export const constantRoutes = [
         path: 'confInfoList',
         component: (resolve) => require(['@/views/plant/confInfo/list'], resolve),
         name: 'confInfoList',
-        meta: { title: '会议预约记录'}
+        meta: {title: '会议预约记录'}
       },
     ]
   },
@@ -254,37 +253,37 @@ export const constantRoutes = [
         path: 'quality/report/:sampleDate',
         component: (resolve) => require(['@/views/production/quality/report'], resolve),
         name: 'report',
-        meta: { title: '生成报告' }
+        meta: {title: '生成报告'}
       },
       {
         path: 'quality/history',
         component: (resolve) => require(['@/views/production/quality/history'], resolve),
         name: 'history',
-        meta: { title: '历史报告查看' }
+        meta: {title: '历史报告查看'}
       },
       {
         path: 'matrix',
         component: (resolve) => require(['@/views/production/matrix'], resolve),
         name: 'matrix',
-        meta: { title: 'PPE矩阵管理' }
+        meta: {title: 'PPE矩阵管理'}
       },
       {
         path: '/training/records',
         component: (resolve) => require(['@/views/training/records'], resolve),
         name: 'records',
-        meta: { title: '装置级培训记录' }
+        meta: {title: '装置级培训记录'}
       },
       {
         path: '/trainingbcc/records',
         component: (resolve) => require(['@/views/training/trainingbcc/record'], resolve),
         name: 'bccRecords',
-        meta: { title: '装置培训记录' }
+        meta: {title: '装置培训记录'}
       },
       {
         path: '/trainingrecords/companyRecords',
         component: (resolve) => require(['@/views/training/trainingrecords/companyRecrods.vue'], resolve),
         name: 'companyRecords',
-        meta: { title: '公司级培训记录' }
+        meta: {title: '公司级培训记录'}
       }
     ]
   },
@@ -297,19 +296,19 @@ export const constantRoutes = [
         path: 'successorPlan/:staffId(\\d+)',
         component: (resolve) => require(['@/views/training/spec/successor/successorPlan'], resolve),
         name: 'SuccessorPlan',
-        meta: { title: '培训计划清单' }
+        meta: {title: '培训计划清单'}
       },
       {
         path: 'monthdata/:staffId(\\d+)',
         component: (resolve) => require(['@/views/training/spec/successor/monthdata'], resolve),
         name: 'monthdata',
-        meta: { title: '月度数据' }
+        meta: {title: '月度数据'}
       },
       {
         path: 'seasondata/:staffId(\\d+)',
         component: (resolve) => require(['@/views/training/spec/successor/seasondata'], resolve),
         name: 'seasondata',
-        meta: { title: '季度数据' }
+        meta: {title: '季度数据'}
       }
     ]
   },
@@ -322,7 +321,7 @@ export const constantRoutes = [
         path: 'planItem/:yearId(\\d+)',
         component: (resolve) => require(['@/views/training/spec/plan/index'], resolve),
         name: 'PlanItem',
-        meta: { title: '培训计划明细' }
+        meta: {title: '培训计划明细'}
       }
     ]
   },
@@ -335,7 +334,7 @@ export const constantRoutes = [
         path: 'planList/:newId(\\d+)',
         component: (resolve) => require(['@/views/training/newstaff/planList'], resolve),
         name: 'planList',
-        meta: { title: '新员工培训计划' }
+        meta: {title: '新员工培训计划'}
       },
     ]
   },
@@ -348,17 +347,17 @@ export const constantRoutes = [
         path: 'trainingPlan/:newId(\\d+)',
         component: (resolve) => require(['@/views/training/bccnew/tsnew/trainingPlan.vue'], resolve),
         name: 'trainingPlan',
-        meta: { title: '导师带徒培训计划' }
-      },{
+        meta: {title: '导师带徒培训计划'}
+      }, {
         path: 'trainingPlan_s/:newId(\\d+)',
         component: (resolve) => require(['@/views/training/bccnew/tsnew/trainingPlan_student.vue'], resolve),
         name: 'trainingPlans',
-        meta: { title: '导师带徒培训计划' }
-      },{
+        meta: {title: '导师带徒培训计划'}
+      }, {
         path: 'firstPlan_t/:newId(\\d+)',
         component: (resolve) => require(['@/views/training/bccnew/firstplan/index_t.vue'], resolve),
         name: 'firstPlanT',
-        meta: { title: '导师带徒装置级培训计划' }
+        meta: {title: '导师带徒装置级培训计划'}
       },
     ]
   },
@@ -371,7 +370,7 @@ export const constantRoutes = [
         path: 'accident',
         component: (resolve) => require(['@/views/production/accident/index'], resolve),
         name: 'Accident',
-        meta: { title: '隐患排查' }
+        meta: {title: '隐患排查'}
       }
     ]
   },
@@ -384,7 +383,7 @@ export const constantRoutes = [
         path: 'publicdocmenu',
         component: (resolve) => require(['@/views/document/publicdocmenu/index'], resolve),
         name: 'PublicDocMenu',
-        meta: { title: '公共文档目录管理' }
+        meta: {title: '公共文档目录管理'}
       }
     ]
   },
@@ -397,7 +396,7 @@ export const constantRoutes = [
         path: 'alarmprincipal/:tableId(\\d+)',
         component: (resolve) => require(['@/views/system/principal/index'], resolve),
         name: 'AlarmPrincipal',
-        meta: { title: '预警管理负责人配置' }
+        meta: {title: '预警管理负责人配置'}
       }
     ]
   },
@@ -410,7 +409,7 @@ export const constantRoutes = [
         path: 'rcauditmenu',
         component: (resolve) => require(['@/views/ehs/rcauditmenu/index'], resolve),
         name: 'RcauditMenu',
-        meta: { title: 'RC审计助手目录管理' }
+        meta: {title: 'RC审计助手目录管理'}
       }
     ]
   },
@@ -423,7 +422,7 @@ export const constantRoutes = [
         path: 'environapproval',
         component: (resolve) => require(['@/views/ehs/environapproval/index'], resolve),
         name: 'Environapproval',
-        meta: { title: '环保批文清单' }
+        meta: {title: '环保批文清单'}
       }
     ]
   },
@@ -436,7 +435,7 @@ export const constantRoutes = [
         path: 'fireapproval',
         component: (resolve) => require(['@/views/ehs/fireapproval/index'], resolve),
         name: 'Fireapproval',
-        meta: { title: '消防批文清单' }
+        meta: {title: '消防批文清单'}
       }
     ]
   },
@@ -449,7 +448,7 @@ export const constantRoutes = [
         path: 'safetyapproval',
         component: (resolve) => require(['@/views/ehs/safetyapproval/index'], resolve),
         name: 'Safetyapproval',
-        meta: { title: '安全批文清单' }
+        meta: {title: '安全批文清单'}
       }
     ]
   },
@@ -462,7 +461,7 @@ export const constantRoutes = [
         path: 'msds',
         component: (resolve) => require(['@/views/ehs/msds/index'], resolve),
         name: 'Msds',
-        meta: { title: 'MSDS管理' }
+        meta: {title: 'MSDS管理'}
       }
     ]
   },
@@ -475,7 +474,7 @@ export const constantRoutes = [
         path: 'fireextinguisher',
         component: (resolve) => require(['@/views/ehs/fireextinguisher/index'], resolve),
         name: 'Fireextinguisher',
-        meta: { title: '灭火器' }
+        meta: {title: '灭火器'}
       }
     ]
   },
@@ -488,7 +487,7 @@ export const constantRoutes = [
         path: 'eyewasher',
         component: (resolve) => require(['@/views/ehs/eyewasher/index'], resolve),
         name: 'Eyewasher',
-        meta: { title: '洗眼器' }
+        meta: {title: '洗眼器'}
       }
     ]
   },
@@ -501,7 +500,7 @@ export const constantRoutes = [
         path: 'firehose',
         component: (resolve) => require(['@/views/ehs/firehose/index'], resolve),
         name: 'Firehose',
-        meta: { title: '消防水带箱' }
+        meta: {title: '消防水带箱'}
       }
     ]
   },
@@ -514,7 +513,7 @@ export const constantRoutes = [
         path: 'firehydrant',
         component: (resolve) => require(['@/views/ehs/firehydrant/index'], resolve),
         name: 'Firehydrant',
-        meta: { title: '消防栓' }
+        meta: {title: '消防栓'}
       }
     ]
   },
@@ -527,7 +526,7 @@ export const constantRoutes = [
         path: 'highpresfire',
         component: (resolve) => require(['@/views/ehs/highpresfire/index'], resolve),
         name: 'Highpresfire',
-        meta: { title: '高压消防炮' }
+        meta: {title: '高压消防炮'}
       }
     ]
   },
@@ -540,7 +539,7 @@ export const constantRoutes = [
         path: 'autosprinkler',
         component: (resolve) => require(['@/views/ehs/autosprinkler/index'], resolve),
         name: 'Autosprinkler',
-        meta: { title: '自动喷淋系统' }
+        meta: {title: '自动喷淋系统'}
       }
     ]
   },
@@ -553,7 +552,7 @@ export const constantRoutes = [
         path: 'firestandpipe',
         component: (resolve) => require(['@/views/ehs/firestandpipe/index'], resolve),
         name: 'Firestandpipe',
-        meta: { title: '消防竖管' }
+        meta: {title: '消防竖管'}
       }
     ]
   },
@@ -566,7 +565,7 @@ export const constantRoutes = [
         path: 'plantproglist',
         component: (resolve) => require(['@/views/document/plantproglist/index'], resolve),
         name: 'Plantproglist',
-        meta: { title: '装置程序清单' }
+        meta: {title: '装置程序清单'}
       }
     ]
   },
@@ -579,7 +578,7 @@ export const constantRoutes = [
         path: 'confInfo',
         component: (resolve) => require(['@/views/plant/confInfo/index'], resolve),
         name: 'ConfInfo',
-        meta: { title: '会议预约信息' }
+        meta: {title: '会议预约信息'}
       }
     ]
   },
@@ -592,7 +591,7 @@ export const constantRoutes = [
         path: 'ppe',
         component: (resolve) => require(['@/views/affair/ppe/index'], resolve),
         name: 'Ppe',
-        meta: { title: 'PPE发放登记' }
+        meta: {title: 'PPE发放登记'}
       }
     ]
   },
@@ -605,7 +604,7 @@ export const constantRoutes = [
         path: 'workcertificate',
         component: (resolve) => require(['@/views/training/workcertificate/index'], resolve),
         name: 'Workcertificate',
-        meta: { title: '作业证书一览表' }
+        meta: {title: '作业证书一览表'}
       }
     ]
   },
@@ -618,7 +617,7 @@ export const constantRoutes = [
         path: 'worklicense',
         component: (resolve) => require(['@/views/training/worklicense/index'], resolve),
         name: 'Worklicense',
-        meta: { title: '上岗证一览表' }
+        meta: {title: '上岗证一览表'}
       }
     ]
   },
@@ -632,7 +631,7 @@ export const constantRoutes = [
         path: 'monthData',
         component: (resolve) => require(['@/views/production/monthData/index'], resolve),
         name: 'MonthData',
-        meta: { title: '查看月度数据' }
+        meta: {title: '查看月度数据'}
       }
     ]
   },
@@ -645,7 +644,7 @@ export const constantRoutes = [
         path: 'deviceList/:id',
         component: (resolve) => require(['@/views/training/trainingbcc/deviceList'], resolve),
         name: 'deviceList',
-        meta: { title: '装置培训详情' }
+        meta: {title: '装置培训详情'}
       }
     ]
   },
@@ -658,21 +657,90 @@ export const constantRoutes = [
         path: 'subcontent/:aboveallId',
         component: () => import('@/views/pssr/subcontent'),
         name: 'Subcontent',
-        meta: { title: '开车条件检查内容', noCache: true },
+        meta: {title: '开车条件检查内容', noCache: false},
         hidden: true
       },
       {
         path: 'subitem/:subId&:serialNumber',
         component: () => import('@/views/pssr/subitem'),
         name: 'Subitem',
-        meta: { title: '开车条件检查项', noCache: true },
-        hidden: true
+        meta: {title: '开车条件检查项', noCache: true},
+        hidden: true,
+        beforeEnter: (to, from, next) => {
+          console.log("to", to)
+          console.log("from", from)
+          console.log("next", next)
+          if (to.fullPath.includes('jxxm')) {
+            to.meta.title = '检修项目';
+          } else if (to.fullPath.includes('kgfa')) {
+            to.meta.title = '开工方案';
+          } else if (to.fullPath.includes('sjbg')) {
+            to.meta.title = '设计变更';
+          } else if (to.fullPath.includes('mb')) {
+            to.meta.title = '盲板';
+          } else if (to.fullPath.includes('xcws')) {
+            to.meta.title = '现场卫生';
+          } else if (to.fullPath.includes('rsfh')) {
+            to.meta.title = '人身防护';
+          } else if (to.fullPath.includes('sbqjd')) {
+            to.meta.title = '设备清洁度';
+          } else if (to.fullPath.includes('qm')) {
+            to.meta.title = '气密';
+          } else if (to.fullPath.includes('sksgfmzt')) {
+            to.meta.title = '锁开锁关阀门状态';
+          } else if (to.fullPath.includes('sys')) {
+            to.meta.title = '实验室';
+          } else if (to.fullPath.includes('dj')) {
+            to.meta.title = '短接';
+          } else if (to.fullPath.includes('dqzh')) {
+            to.meta.title = '氮气置换';
+          } else if (to.fullPath.includes('xqf')) {
+            to.meta.title = '消气防设施';
+          } else if (to.fullPath.includes('aqss')) {
+            to.meta.title = '安全设施';
+          } else if (to.fullPath.includes('txjk')) {
+            to.meta.title = '通讯监控';
+          } else if (to.fullPath.includes('bxsjcy')) {
+            to.meta.title = '便携式检测仪';
+          } else if (to.fullPath.includes('gygc')) {
+            to.meta.title = '公用工程';
+          } else if (to.fullPath.includes('hbss')) {
+            to.meta.title = '环保设施';
+          } else if (to.fullPath.includes('yfl')) {
+            to.meta.title = '原辅料';
+          } else if (to.fullPath.includes('jb')) {
+            to.meta.title = '机泵';
+          } else if (to.fullPath.includes('zdj')) {
+            to.meta.title = '支(吊)架';
+          } else if (to.fullPath.includes('tzsb')) {
+            to.meta.title = '压力管道/压力容器';
+          } else if (to.fullPath.includes('ybjy')) {
+            to.meta.title = '仪表校验';
+          } else if (to.fullPath.includes('yblscs')) {
+            to.meta.title = '仪表联锁测试';
+          } else if (to.fullPath.includes('bjlszqr')) {
+            to.meta.title = '报警/联锁值确认';
+          } else if (to.fullPath.includes('lsdy')) {
+            to.meta.title = '临时电源';
+          } else if (to.fullPath.includes('djsb')) {
+            to.meta.title = '电机设备';
+          } else if (to.fullPath.includes('zmdbr')) {
+            to.meta.title = '照明、电伴热';
+          } else if (to.fullPath.includes('jdjdkj')) {
+            to.meta.title = '静电接地/跨接';
+          } else if (to.fullPath.includes('qtjcy')) {
+            to.meta.title = '气体检测仪';
+          } else if (to.fullPath.includes('zxfxy')) {
+            to.meta.title = '在线分析仪';
+          }
+          next();
+        },
       },
       {
         path: 'mgrApprove',
         component: (resolve) => require(['@/views/approve/approveDetail/pssrMgrApprove-detail.vue'], resolve),
         name: 'mgrApprove',
-        meta: { title: '经理审批流程', noCache: true }
+        meta: {title: '经理审批流程', noCache: true}
       }
     ]
   },
@@ -685,47 +753,47 @@ export const constantRoutes = [
         path: 'exam/prepare/:examId',
         component: () => import('@/views/training/elearn/paper/preview'),
         name: 'PreExam',
-        meta: { title: '准备考试', noCache: true },
+        meta: {title: '准备考试', noCache: true},
         hidden: true
-      },{
+      }, {
         path: 'paper/:examId',
         component: () => import('@/views/training/elearn/paper/list'),
         name: 'paper',
-        meta: { title: '在线考试', noCache: true },
+        meta: {title: '在线考试', noCache: true},
         hidden: true
-      },{
+      }, {
         path: 'exam/start/:paperId',
         component: () => import('@/views/training/elearn/paper/exam'),
         name: 'StartExam',
-        meta: { title: '开始考试', noCache: true },
+        meta: {title: '开始考试', noCache: true},
         hidden: true
       },
       {
         path: 'exam/result/:paperId',
         component: () => import('@/views/training/elearn/paper/result'),
         name: 'ShowExam',
-        meta: { title: '考试结果', noCache: true },
+        meta: {title: '考试结果', noCache: true},
         hidden: true
       },
       {
         path: 'userBook/training',
         component: () => import('@/views/training/elearn/userBook/train'),
         name: 'BookTraining',
-        meta: { title: '错题训练', noCache: true },
+        meta: {title: '错题训练', noCache: true},
         hidden: true
       },
       {
         path: 'repo/training/:repoId',
         component: () => import('@/views/training/elearn/userQu/train'),
         name: 'RepoTraining',
-        meta: { title: '题库训练', noCache: true },
+        meta: {title: '题库训练', noCache: true},
         hidden: true
       },
       {
         path: 'userQu/users/:examId',
         component: () => import('@/views/training/elearn/userExam/userList'),
         name: 'ListExamUser',
-        meta: { title: '考试人员', noCache: true },
+        meta: {title: '考试人员', noCache: true},
         hidden: true
       },
     ]
@@ -739,7 +807,7 @@ export const constantRoutes = [
         path: 'safetyvavle',
         component: (resolve) => require(['@/views/reliability/safetyvavle/index'], resolve),
         name: 'Safetyvavle',
-        meta: { title: '安全阀清单' }
+        meta: {title: '安全阀清单'}
       }
     ]
   },
@@ -752,7 +820,7 @@ export const constantRoutes = [
         path: 'pipe',
         component: (resolve) => require(['@/views/cui/pipe/index'], resolve),
         name: 'Pipe',
-        meta: { title: '管线清单' }
+        meta: {title: '管线清单'}
       }
     ]
   },
@@ -765,7 +833,7 @@ export const constantRoutes = [
         path: 'list',
         component: (resolve) => require(['@/views/reliability/list/index'], resolve),
         name: 'List',
-        meta: { title: '故障管理跟踪' }
+        meta: {title: '故障管理跟踪'}
       }
     ]
   },
@@ -778,7 +846,7 @@ export const constantRoutes = [
         path: 'edit/:tableId(\\d+)',
         component: (resolve) => require(['@/views/ehs/safetyapprcont/index'], resolve),
         name: 'Safetyapprcont',
-        meta: { title: '主要内容' }
+        meta: {title: '主要内容'}
       }
     ]
   },
@@ -791,7 +859,7 @@ export const constantRoutes = [
         path: 'edit/:tableId(\\d+)',
         component: (resolve) => require(['@/views/ehs/environapprcont/index'], resolve),
         name: 'Environapprcont',
-        meta: { title: '主要内容' }
+        meta: {title: '主要内容'}
       }
     ]
   },
@@ -804,7 +872,7 @@ export const constantRoutes = [
         path: 'edit/:tableId(\\d+)',
         component: (resolve) => require(['@/views/plant/weekmeeting/index'], resolve),
         name: 'hismeeting',
-        meta: { title: '主要内容' }
+        meta: {title: '主要内容'}
       }
     ]
   },
@@ -817,7 +885,7 @@ export const constantRoutes = [
         path: 'details',
         component: (resolve) => require(['@/views/system/notice/index.vue'], resolve),
         name: 'details',
-        meta: { title: '通知公告' }
+        meta: {title: '通知公告'}
       }
     ]
   },
@@ -830,19 +898,19 @@ export const constantRoutes = [
         path: 'pfd',
         component: (resolve) => require(['@/views/monitor/pfd/index.vue'], resolve),
         name: 'pfd',
-        meta: { title: 'pfd流程' }
+        meta: {title: 'pfd流程'}
       },
       {
         path: '/pfd/jlq',
         component: (resolve) => require(['@/views/monitor/pfd/JLQPage.vue'], resolve),
         name: 'jlq',
-        meta: { title: '急冷区' }
+        meta: {title: '急冷区'}
       },
       {
         path: '/pfd/c2c3',
         component: (resolve) => require(['@/views/monitor/pfd/C2C3Page.vue'], resolve),
         name: 'c2c3',
-        meta: { title: 'C2C3' }
+        meta: {title: 'C2C3'}
       }
     ]
   },
@@ -853,14 +921,14 @@ export const constantRoutes = [
     component: (resolve) => require(['@/views/monitor/materialChild/materialChild1.vue'], resolve),
     name: 'materialChild1',
     hidden: true,
-    meta: { title: '工艺流程图' }
+    meta: {title: '工艺流程图'}
   },
   {
     path: '/materialChild2',
     component: (resolve) => require(['@/views/monitor/materialChild/materialChild2.vue'], resolve),
     name: 'materialChild2',
     hidden: true,
-    meta: { title: '工艺流程图' }
+    meta: {title: '工艺流程图'}
   },
   // 2023-02 首页重构
   {
@@ -873,6 +941,6 @@ export const constantRoutes = [
 export default new Router({
   base: '/cpms/',
   mode: 'hash', // 去掉url中的#
-  scrollBehavior: () => ({ y: 0 }),
+  scrollBehavior: () => ({y: 0}),
   routes: constantRoutes
 })

+ 8 - 7
ui/src/views/approve/approveDetail/pssrApprove-detail.vue

@@ -4,10 +4,11 @@
              :visible.sync="visible"
              :append-to-body="true"
              width="60%" :close="this.$emit('refreshDataList')">
-    <Subitem  ref="subitem" v-if="subitemVisible" :sub-id="Number(subId)" :serial-number="sn" :is-approve="isApprove" @refreshHisList="afterConfirm"/>
+    <Subitem ref="subitem" v-if="subitemVisible" :sub-id="Number(subId)" :serial-number="sn" :is-approve="isApprove"
+             @refreshHisList="afterConfirm"/>
     <span slot="footer" class="dialog-footer">
       <el-button v-if="!this.taskForm.taskId == ''&&isApprove==2" type="primary"
-                 @click="dataFormSubmit(0)" >通过</el-button>
+                 @click="dataFormSubmit(0)">通过</el-button>
       <el-button @click="visible = false">{{ $t('返回') }}</el-button>
     </span>
     <div>
@@ -69,15 +70,15 @@ export default {
     }
   },
   methods: {
-    init(id, taskId, processId, taskName,sn) {
-      console.log("11",sn)
+    init(id, taskId, processId, taskName, sn) {
+      console.log("11", sn)
       this.sn = sn;
       this.subitemVisible = false;
       getSubcontent(id).then(res => {
         if (taskName == '检查内容负责人') {
           this.isApprove = 2;
         }
-        if (taskName == '确认人1') {
+        if (taskName == '确认人1' || taskName == '确认人') {
           this.isApprove = 4;
         }
         if (taskName == '确认人2') {
@@ -94,7 +95,7 @@ export default {
         if (!taskId) {
           this.isApprove = 3;
         }
-        console.log("detail",this.sn)
+        console.log("detail", this.sn)
         this.visible = true;
         this.getHistorylist();
       })
@@ -115,7 +116,7 @@ export default {
     },
     afterConfirm() {
       this.visible = false;
-      this.subitemVisible=false
+      this.subitemVisible = false
       this.$emit('refreshDataList')
     },
     dataFormSubmit(val) {

+ 35 - 30
ui/src/views/pssr/aboveall/index.vue

@@ -88,10 +88,11 @@
       <el-table-column label="单元" align="center" prop="unit" :show-overflow-tooltip="true"/>
       <el-table-column label="审批状态" align="center" prop="approveStatus" :show-overflow-tooltip="true">
         <template slot-scope="scope">
-          <dict-tag :options="dict.type.pssr_approve_status" :value="scope.row.approveStatus" :show-type="getTagType(scope.row.approveStatus)"/>
+          <dict-tag :options="dict.type.pssr_approve_status" :value="scope.row.approveStatus"
+                    :show-type="getTagType(scope.row.approveStatus)"/>
         </template>
       </el-table-column>
-      <el-table-column label="确认人" align="center" prop="confirm" :show-overflow-tooltip="true" />
+      <el-table-column label="确认人" align="center" prop="confirm" :show-overflow-tooltip="true"/>
       <el-table-column label="确认时间" align="center" prop="confirmationDate">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.confirmationDate, '{y}-{m}-{d}') }}</span>
@@ -100,14 +101,14 @@
       <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
       <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
         <template slot-scope="scope">
-<!--          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['pssr:aboveall:edit']"
-          >修改
-          </el-button>-->
+          <!--          <el-button
+                      size="mini"
+                      type="text"
+                      icon="el-icon-edit"
+                      @click="handleUpdate(scope.row)"
+                      v-hasPermi="['pssr:aboveall:edit']"
+                    >修改
+                    </el-button>-->
           <el-button
             size="mini"
             type="text"
@@ -154,11 +155,11 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="单元" prop="unit">
-              <el-select v-model="form.unit" clearable filterable style="width: 100%;" placeholder="请选择单元"
+              <el-select v-model="form.unit" clearable filterable multiple style="width: 100%;" placeholder="请选择单元"
                          :disabled="!form.region">
                 <el-option v-for="item in unitOptions"
                            :label="item.unit + '_' + item.remarks"
-                           :value="item.unit + '_' + item.remarks"
+                           :value="item.unit"
                            :key="item.id "/>
               </el-select>
             </el-form-item>
@@ -171,7 +172,8 @@
           </el-col>
         </el-row>
         <el-card class="mb10">
-          <el-table :data="subcontents" v-loading="subloading"  border :row-class-name="tableRowClassName" @selection-change="handleSubSelectionChange" max-height="500">
+          <el-table :data="subcontents" v-loading="subloading" border :row-class-name="tableRowClassName"
+                    @selection-change="handleSubSelectionChange" max-height="500">
             <el-table-column label="所属部门" align="center" prop="deptUnit" :show-overflow-tooltip="true" width="80"/>
             <el-table-column label="序号" align="center" prop="serialNumber" :show-overflow-tooltip="true" width="80"/>
             <el-table-column label="项目" align="center" prop="item" :show-overflow-tooltip="true" width="180"/>
@@ -276,7 +278,7 @@ import {listUserNoPage} from "@/api/system/user";
 import {listSubcontent} from "@/api/pssr/subcontent";
 
 export default {
-  dicts:['pssr_approve_status'],
+  dicts: ['pssr_approve_status'],
   name: "Aboveall",
   components: {Treeselect},
   data() {
@@ -371,19 +373,19 @@ export default {
     });
   },
   methods: {
-    getTagType(val){
-      if (val==0){
+    getTagType(val) {
+      if (val == 0) {
         return ''
-      }else if (val==1){
+      } else if (val == 1) {
         return 'warning'
-      }else if (val==2){
+      } else if (val == 2) {
         return 'success'
       }
     },
-    gotoSubIndex(row){
-      this.$router.push({ name: 'Subcontent', params: { aboveallId: row.id }})
+    gotoSubIndex(row) {
+      this.$router.push({name: 'Subcontent', params: {aboveallId: row.id}})
     },
-    handleChangeConfirm(val,currentRow){
+    handleChangeConfirm(val, currentRow) {
       // 检查当前行是否在选中行的数组中
       const isSelected = this.subRows.includes(currentRow);
 
@@ -397,7 +399,7 @@ export default {
         this.$set(currentRow, 'confirm', val);
       }
     },
-    handleSubSelectionChange(selection){
+    handleSubSelectionChange(selection) {
       this.subRows = selection
     },
     handleKeyChange() {
@@ -456,7 +458,7 @@ export default {
         deptId: null,
         remarks: null
       };
-      this.subcontents=[]
+      this.subcontents = []
       this.resetForm("form");
     },
     /** 搜索按钮操作 */
@@ -496,10 +498,10 @@ export default {
       listSubcontent({
         pageNum: 1,
         pageSize: 200,
-        aboveallId:id,
+        aboveallId: id,
       }).then(res => {
-        res.rows.forEach(item=>{
-          item.status=1;
+        res.rows.forEach(item => {
+          item.status = 1;
         })
         this.subcontents = res.rows;
         this.subloading = false;
@@ -512,18 +514,21 @@ export default {
     },
     /** 提交按钮 */
     submitForm() {
-      let flag=false
-      this.subcontents.forEach(item=>{
+      let flag = false
+      this.subcontents.forEach(item => {
         if (item.confirm == null || item.confirm == "") {
           this.$alert('请确认所有确认人都已选择!', '警告', {
             confirmButtonText: '确定'
           });
-          flag=true;
+          flag = true;
         }
       })
       if (flag)
         return
-      this.form.subcontents=this.subcontents;
+      if (this.form.unit != null && this.form.unit != "") {
+        this.form.unit = this.form.unit.join(",");
+      }
+      this.form.subcontents = this.subcontents;
       this.$refs["form"].validate(valid => {
         if (valid) {
           if (this.form.id != null) {

+ 233 - 297
ui/src/views/pssr/alarm/index.vue

@@ -1,33 +1,6 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="从表id" prop="subId">
-        <el-input
-          v-model="queryParams.subId"
-          placeholder="请输入从表id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="审批id" prop="approveId">
-        <el-input
-          v-model="queryParams.approveId"
-          placeholder="请输入审批id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="附件地址" prop="fileUrl">
-        <el-input
-          v-model="queryParams.fileUrl"
-          placeholder="请输入附件地址"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item label="附件名称" prop="fileName">
         <el-input
           v-model="queryParams.fileName"
@@ -37,58 +10,6 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="创建人" prop="createrCode">
-        <el-input
-          v-model="queryParams.createrCode"
-          placeholder="请输入创建人"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="创建时间" prop="createdate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.createdate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择创建时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="修改人" prop="updaterCode">
-        <el-input
-          v-model="queryParams.updaterCode"
-          placeholder="请输入修改人"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="修改时间" prop="updatedate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.updatedate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择修改时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="部门编号" prop="deptId">
-        <el-input
-          v-model="queryParams.deptId"
-          placeholder="请输入部门编号"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="备注" prop="remarks">
-        <el-input
-          v-model="queryParams.remarks"
-          placeholder="请输入备注"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -96,78 +17,50 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['pssr:alarm:add']"
-        >新增</el-button>
-      </el-col>
       <el-col :span="1.5">
         <el-button
           type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['pssr:alarm:edit']"
-        >修改</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
+          icon="el-icon-s-promotion"
           size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['pssr:alarm:remove']"
-        >删除</el-button>
+          @click="handleApprove"
+          v-if="isApprove==0"
+          v-hasPermi="['pssr:overhaulExchanger:edit']"
+        >发起审批
+        </el-button>
       </el-col>
-        <el-col :span="1.5">
-            <el-button
-                    type="info"
-                    icon="el-icon-upload2"
-                    size="mini"
-                    @click="handleImport"
-                    v-hasPermi="['pssr:alarm:edit']"
-            >导入</el-button>
-        </el-col>
       <el-col :span="1.5">
         <el-button
-          type="warning"
-          icon="el-icon-download"
+          type="primary"
+          icon="el-icon-upload"
           size="mini"
-          @click="handleExport"
-          v-hasPermi="['pssr:alarm:export']"
-        >导出</el-button>
+          v-hasPermi="['pssr:alarm:add']"
+          @click="handleDoc"
+          v-if="isApprove==0"
+        >附件
+        </el-button>
       </el-col>
-	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="alarmList" @selection-change="handleSelectionChange" :height="clientHeight" border>
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="唯一标识ID" align="center" prop="id" :show-overflow-tooltip="true"/>
-      <el-table-column label="从表id" align="center" prop="subId" :show-overflow-tooltip="true"/>
-      <el-table-column label="审批id" align="center" prop="approveId" :show-overflow-tooltip="true"/>
-      <el-table-column label="附件地址" align="center" prop="fileUrl" :show-overflow-tooltip="true"/>
-      <el-table-column label="附件名称" align="center" prop="fileName" :show-overflow-tooltip="true"/>
-      <el-table-column label="创建人" align="center" prop="createrCode" :show-overflow-tooltip="true"/>
-      <el-table-column label="创建时间" align="center" prop="createdate" width="100">
+    <el-table v-loading="loading" :data="alarmList" @selection-change="handleSelectionChange"
+              :height="clientHeight" border>
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="审批状态" align="center" prop="approveStatus" :show-overflow-tooltip="true" width="100">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createdate, '{y}-{m}-{d}') }}</span>
+          <el-tag v-if="scope.row.approveStatus==0">未审批</el-tag>
+          <el-tag v-if="scope.row.approveStatus==2" type="success">已确认</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="修改人" align="center" prop="updaterCode" :show-overflow-tooltip="true"/>
-      <el-table-column label="修改时间" align="center" prop="updatedate" width="100">
+      <el-table-column label="附件名称" align="center" prop="fileName" :show-overflow-tooltip="true">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.updatedate, '{y}-{m}-{d}') }}</span>
+          <a class="link-type" @click="handleDownload(scope.row)">
+            <span>{{ scope.row.fileName }}</span>
+          </a>
         </template>
       </el-table-column>
-      <el-table-column label="部门编号" align="center" prop="deptId" :show-overflow-tooltip="true"/>
-      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
-      <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
+      <el-table-column label="备注" align="center" prop="remarks" width="180" :show-overflow-tooltip="true"/>
+      <el-table-column label="操作" align="center" width="120" class-name="small-padding fixed-width"
+                       v-if="isApprove==0">
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -175,14 +68,16 @@
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
             v-hasPermi="['pssr:alarm:edit']"
-          >修改</el-button>
+          >修改
+          </el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
             v-hasPermi="['pssr:alarm:remove']"
-          >删除</el-button>
+          >删除
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -195,105 +90,72 @@
       @pagination="getList"
     />
 
-    <!-- 添加或修改报警联锁值确认对话框 -->
+    <!-- 添加或修改仪联锁测试对话框 -->
     <el-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="从表id" prop="subId">
-          <el-input v-model="form.subId" placeholder="请输入从表id" />
-        </el-form-item>
-        <el-form-item label="审批id" prop="approveId">
-          <el-input v-model="form.approveId" placeholder="请输入审批id" />
-        </el-form-item>
-        <el-form-item label="附件地址" prop="fileUrl">
-          <el-input v-model="form.fileUrl" placeholder="请输入附件地址" />
-        </el-form-item>
         <el-form-item label="附件名称" prop="fileName">
-          <el-input v-model="form.fileName" placeholder="请输入附件名称" />
-        </el-form-item>
-        <el-form-item label="删除状态" prop="delFlag">
-          <el-input v-model="form.delFlag" placeholder="请输入删除状态" />
-        </el-form-item>
-        <el-form-item label="创建人" prop="createrCode">
-          <el-input v-model="form.createrCode" placeholder="请输入创建人" />
-        </el-form-item>
-        <el-form-item label="创建时间" prop="createdate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.createdate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择创建时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="修改人" prop="updaterCode">
-          <el-input v-model="form.updaterCode" placeholder="请输入修改人" />
-        </el-form-item>
-        <el-form-item label="修改时间" prop="updatedate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.updatedate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择修改时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="部门编号" prop="deptId">
-          <el-input v-model="form.deptId" placeholder="请输入部门编号" />
+          <el-input v-model="form.fileName" disabled placeholder="请输入附件名称"/>
         </el-form-item>
         <el-form-item label="备注" prop="remarks">
-          <el-input v-model="form.remarks" placeholder="请输入备注" />
+          <el-input v-model="form.remarks" placeholder="请输入备注"/>
         </el-form-item>
-          <el-form-item label="归属部门" prop="deptId">
-              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
-          </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
-      <!-- 用户导入对话框 -->
-      <el-dialog :close-on-click-modal="false" :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
-          <el-upload
-                  ref="upload"
-                  :limit="1"
-                  accept=".xlsx, .xls"
-                  :headers="upload.headers"
-                  :action="upload.url + '?updateSupport=' + upload.updateSupport"
-                  :disabled="upload.isUploading"
-                  :on-progress="handleFileUploadProgress"
-                  :on-success="handleFileSuccess"
-                  :auto-upload="false"
-                  drag
-          >
-              <i class="el-icon-upload"></i>
-              <div class="el-upload__text">
-                  将文件拖到此处,或
-                  <em>点击上传</em>
-              </div>
-              <div class="el-upload__tip" slot="tip">
-                  <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
-                  <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
-              </div>
-              <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
-          </el-upload>
-          <div slot="footer" class="dialog-footer">
-              <el-button type="primary" @click="submitFileForm">确 定</el-button>
-              <el-button @click="upload.open = false">取 消</el-button>
-          </div>
-      </el-dialog>
+
+    <!-- 附件对话框 -->
+    <el-dialog :close-on-click-modal="false" v-dialogDrag :title="doc.title" :visible.sync="doc.open"
+               append-to-body width="500px" style="text-align: center">
+      <el-upload
+        ref="doc"
+        :limit="50"
+        :headers="doc.headers"
+        :action="doc.url + '?subId=' + subId "
+        :disabled="doc.isUploading"
+        :on-progress="handleFileDocProgress"
+        :on-success="handleFileDocSuccess"
+        :auto-upload="true"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+      </el-upload>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="doc.open = false">返 回</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :close-on-click-modal="false" v-dialogDrag :title="pdf.title" :visible.sync="pdf.open" width="1300px"
+               append-to-body>
+      <div style="margin-top: -60px;float: right;margin-right: 40px;">
+        <el-button size="mini" type="text" @click="openPdf">新页面打开PDF</el-button>
+      </div>
+      <div style="margin-top: -30px">
+        <iframe :src="pdf.pdfUrl" frameborder="0" width="100%" height="700px"></iframe>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { listAlarm, getAlarm, delAlarm, addAlarm, updateAlarm, exportAlarm, importTemplate} from "@/api/pssr/alarm";
-import { treeselect } from "@/api/system/dept";
-import { getToken } from "@/utils/auth";
+import {addAlarm, delAlarm, exportAlarm, getAlarm, importTemplate, listAlarm, updateAlarm} from "@/api/pssr/alarm";
+import {treeselect} from "@/api/system/dept";
+import {getToken} from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {doApprove} from "@/api/pssr/approve";
 
 export default {
-  dicts:['pssr_approve_status'],
+  dicts: ['pssr_approve_status'],
   name: "Alarm",
-  components: { Treeselect },
+  components: {Treeselect},
   props: {
     subId: {
       type: Number,
@@ -306,6 +168,35 @@ export default {
   },
   data() {
     return {
+      doc: {
+        file: "",
+        // 是否显示弹出层(报告附件)
+        open: false,
+        // 弹出层标题(报告附件)
+        title: "附件",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 报告附件上传位置编号
+        ids: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/pssr/alarm/uploadFile",
+        commonfileList: null,
+        pId: null,
+        form: {}
+      },
+      pdf: {
+        title: '',
+        pdfUrl: '',
+        numPages: null,
+        open: false,
+        pageNum: 1,
+        pageTotalNum: 1,
+        loadedRatio: 0,
+      },
       // 遮罩层
       loading: true,
       // 选中数组
@@ -318,30 +209,30 @@ export default {
       showSearch: false,
       // 总条数
       total: 0,
-      // 报警联锁值确认表格数据
+      // 仪联锁测试表格数据
       alarmList: [],
       // 弹出层标题
       title: "",
       // 部门树选项
       deptOptions: undefined,
-      clientHeight:300,
+      clientHeight: 300,
       // 是否显示弹出层
       open: false,
-        // 用户导入参数
-        upload: {
-            // 是否显示弹出层(用户导入)
-            open: false,
-            // 弹出层标题(用户导入)
-            title: "",
-            // 是否禁用上传
-            isUploading: false,
-            // 是否更新已经存在的用户数据
-            updateSupport: 0,
-            // 设置上传的请求头部
-            headers: { Authorization: "Bearer " + getToken() },
-            // 上传的地址
-            url: process.env.VUE_APP_BASE_API + "/pssr/alarm/importData"
-        },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/pssr/alarm/importData"
+      },
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -360,26 +251,25 @@ export default {
       // 表单参数
       form: {},
       // 表单校验
-      rules: {
-      }
+      rules: {}
     };
   },
   watch: {
-        // 根据名称筛选部门树
-        deptName(val) {
-            this.$refs.tree.filter(val);
-        }
-   },
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
   created() {
-      //设置表格高度对应屏幕高度
-      this.$nextTick(() => {
-          this.clientHeight = document.body.clientHeight - 350
-      })
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = document.body.clientHeight - 350
+    })
     this.getList();
     this.getTreeselect();
   },
   methods: {
-    /** 查询报警联锁值确认列表 */
+    /** 查询仪联锁测试列表 */
     getList() {
       this.loading = true;
       listAlarm(this.queryParams).then(response => {
@@ -388,12 +278,12 @@ export default {
         this.loading = false;
       });
     },
-     /** 查询部门下拉树结构 */
-     getTreeselect() {
-          treeselect().then(response => {
-              this.deptOptions = response.data;
-          });
-     },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
     // 取消按钮
     cancel() {
       this.open = false;
@@ -430,14 +320,14 @@ export default {
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
       this.open = true;
-      this.title = "添加报警联锁值确认";
+      this.title = "添加仪联锁测试";
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
@@ -446,7 +336,7 @@ export default {
       getAlarm(id).then(response => {
         this.form = response.data;
         this.open = true;
-        this.title = "修改报警联锁值确认";
+        this.title = "修改仪联锁测试";
       });
     },
     /** 提交按钮 */
@@ -473,56 +363,102 @@ export default {
     handleDelete(row) {
       const ids = row.id || this.ids;
       this.$confirm('是否确认删除?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delAlarm(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        })
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delAlarm(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      })
     },
     /** 导出按钮操作 */
     handleExport() {
       const queryParams = this.queryParams;
-      this.$confirm('是否确认导出所有报警联锁值确认数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return exportAlarm(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        })
+      this.$confirm('是否确认导出所有仪联锁测试数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return exportAlarm(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      })
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      importTemplate().then(response => {
+        this.download(response.msg);
+      });
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", {dangerouslyUseHTMLString: true});
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+    /** 确认按钮操作*/
+    handleApprove() {
+      doApprove(this.subId).then(res => {
+        this.msgSuccess("已发起确认流程");
+        this.getList();
+      })
+    },
+    /** 报告附件按钮操作 */
+    handleDoc(row, fileType) {
+      this.doc.id = row.id;
+      this.doc.title = this.$t('附件');
+      this.doc.open = true;
+      this.$nextTick(() => {
+        this.$refs.doc.clearFiles()
+      })
+    },
+    //附件上传中处理
+    handleFileDocProgress(event, file, fileList) {
+      this.doc.file = file;
+      this.doc.isUploading = true;
+    },
+    //附件上传成功处理
+    handleFileDocSuccess(response, file, fileList) {
+      this.doc.isUploading = false;
+      this.$alert(response.msg, this.$t('上传结果'), {dangerouslyUseHTMLString: true});
+      this.getList();
+    },
+    // 文件下载处理
+    handleDownload(row) {
+      var name = row.fileName;
+      var url = row.fileUrl;
+      var suffix = url.substring(url.lastIndexOf("."), url.length);
+      const a = document.createElement('a')
+      a.setAttribute('download', name)
+      a.setAttribute('target', '_blank')
+      a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
+      a.click()
+    },
+    openPdf() {
+      window.open(this.pdf.pdfUrl);//path是文件的全路径地址
+    },
+    handleSee(row) {
+      this.pdf.open = true
+      this.pdf.title = row.fileName
+      this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + '/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + row.fileUrl
     },
-      /** 导入按钮操作 */
-      handleImport() {
-          this.upload.title = "用户导入";
-          this.upload.open = true;
-      },
-      /** 下载模板操作 */
-      importTemplate() {
-          importTemplate().then(response => {
-              this.download(response.msg);
-          });
-      },
-      // 文件上传中处理
-      handleFileUploadProgress(event, file, fileList) {
-          this.upload.isUploading = true;
-      },
-      // 文件上传成功处理
-      handleFileSuccess(response, file, fileList) {
-          this.upload.open = false;
-          this.upload.isUploading = false;
-          this.$refs.upload.clearFiles();
-          this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
-          this.getList();
-      },
-      // 提交上传文件
-      submitFileForm() {
-          this.$refs.upload.submit();
-      }
   }
 };
 </script>

+ 1 - 1
ui/src/views/pssr/approve/index.vue

@@ -425,7 +425,7 @@ export default {
         subId: this.subId,
         apNo: null,
         processId: null,
-        approveStatus: "0",
+        approveStatus: 0,
         subApprover: null,
         subCharge: null,
         delFlag: null,

+ 235 - 291
ui/src/views/pssr/instrumentTest/index.vue

@@ -1,33 +1,6 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="从表id" prop="subId">
-        <el-input
-          v-model="queryParams.subId"
-          placeholder="请输入从表id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="审批id" prop="approveId">
-        <el-input
-          v-model="queryParams.approveId"
-          placeholder="请输入审批id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="附件地址" prop="fileUrl">
-        <el-input
-          v-model="queryParams.fileUrl"
-          placeholder="请输入附件地址"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item label="附件名称" prop="fileName">
         <el-input
           v-model="queryParams.fileName"
@@ -37,58 +10,6 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="创建人" prop="createrCode">
-        <el-input
-          v-model="queryParams.createrCode"
-          placeholder="请输入创建人"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="创建时间" prop="createdate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.createdate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择创建时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="修改人" prop="updaterCode">
-        <el-input
-          v-model="queryParams.updaterCode"
-          placeholder="请输入修改人"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="修改时间" prop="updatedate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.updatedate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择修改时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="部门编号" prop="deptId">
-        <el-input
-          v-model="queryParams.deptId"
-          placeholder="请输入部门编号"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="备注" prop="remarks">
-        <el-input
-          v-model="queryParams.remarks"
-          placeholder="请输入备注"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -96,78 +17,50 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['pssr:instrumentTest:add']"
-        >新增</el-button>
-      </el-col>
       <el-col :span="1.5">
         <el-button
           type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['pssr:instrumentTest:edit']"
-        >修改</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
+          icon="el-icon-s-promotion"
           size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['pssr:instrumentTest:remove']"
-        >删除</el-button>
+          @click="handleApprove"
+          v-if="isApprove==0"
+          v-hasPermi="['pssr:overhaulExchanger:edit']"
+        >发起审批
+        </el-button>
       </el-col>
-        <el-col :span="1.5">
-            <el-button
-                    type="info"
-                    icon="el-icon-upload2"
-                    size="mini"
-                    @click="handleImport"
-                    v-hasPermi="['pssr:instrumentTest:edit']"
-            >导入</el-button>
-        </el-col>
       <el-col :span="1.5">
         <el-button
-          type="warning"
-          icon="el-icon-download"
+          type="primary"
+          icon="el-icon-upload"
           size="mini"
-          @click="handleExport"
-          v-hasPermi="['pssr:instrumentTest:export']"
-        >导出</el-button>
+          v-hasPermi="['pssr:instrumentTest:add']"
+          @click="handleDoc"
+          v-if="isApprove==0"
+        >附件
+        </el-button>
       </el-col>
-	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="instrumentTestList" @selection-change="handleSelectionChange" :height="clientHeight" border>
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="唯一标识ID" align="center" prop="id" :show-overflow-tooltip="true"/>
-      <el-table-column label="从表id" align="center" prop="subId" :show-overflow-tooltip="true"/>
-      <el-table-column label="审批id" align="center" prop="approveId" :show-overflow-tooltip="true"/>
-      <el-table-column label="附件地址" align="center" prop="fileUrl" :show-overflow-tooltip="true"/>
-      <el-table-column label="附件名称" align="center" prop="fileName" :show-overflow-tooltip="true"/>
-      <el-table-column label="创建人" align="center" prop="createrCode" :show-overflow-tooltip="true"/>
-      <el-table-column label="创建时间" align="center" prop="createdate" width="100">
+    <el-table v-loading="loading" :data="instrumentTestList" @selection-change="handleSelectionChange"
+              :height="clientHeight" border>
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="审批状态" align="center" prop="approveStatus" :show-overflow-tooltip="true" width="100">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createdate, '{y}-{m}-{d}') }}</span>
+          <el-tag v-if="scope.row.approveStatus==0">未审批</el-tag>
+          <el-tag v-if="scope.row.approveStatus==2" type="success">已确认</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="修改人" align="center" prop="updaterCode" :show-overflow-tooltip="true"/>
-      <el-table-column label="修改时间" align="center" prop="updatedate" width="100">
+      <el-table-column label="附件名称" align="center" prop="fileName" :show-overflow-tooltip="true">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.updatedate, '{y}-{m}-{d}') }}</span>
+          <a class="link-type" @click="handleDownload(scope.row)">
+            <span>{{ scope.row.fileName }}</span>
+          </a>
         </template>
       </el-table-column>
-      <el-table-column label="部门编号" align="center" prop="deptId" :show-overflow-tooltip="true"/>
-      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
-      <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
+      <el-table-column label="备注" align="center" prop="remarks" width="180" :show-overflow-tooltip="true"/>
+      <el-table-column label="操作" v-if="isApprove==0" align="center" width="120"
+                       class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -175,14 +68,16 @@
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
             v-hasPermi="['pssr:instrumentTest:edit']"
-          >修改</el-button>
+          >修改
+          </el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
             v-hasPermi="['pssr:instrumentTest:remove']"
-          >删除</el-button>
+          >删除
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -198,102 +93,77 @@
     <!-- 添加或修改仪联锁测试对话框 -->
     <el-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="从表id" prop="subId">
-          <el-input v-model="form.subId" placeholder="请输入从表id" />
-        </el-form-item>
-        <el-form-item label="审批id" prop="approveId">
-          <el-input v-model="form.approveId" placeholder="请输入审批id" />
-        </el-form-item>
-        <el-form-item label="附件地址" prop="fileUrl">
-          <el-input v-model="form.fileUrl" placeholder="请输入附件地址" />
-        </el-form-item>
         <el-form-item label="附件名称" prop="fileName">
-          <el-input v-model="form.fileName" placeholder="请输入附件名称" />
-        </el-form-item>
-        <el-form-item label="删除状态" prop="delFlag">
-          <el-input v-model="form.delFlag" placeholder="请输入删除状态" />
-        </el-form-item>
-        <el-form-item label="创建人" prop="createrCode">
-          <el-input v-model="form.createrCode" placeholder="请输入创建人" />
-        </el-form-item>
-        <el-form-item label="创建时间" prop="createdate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.createdate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择创建时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="修改人" prop="updaterCode">
-          <el-input v-model="form.updaterCode" placeholder="请输入修改人" />
-        </el-form-item>
-        <el-form-item label="修改时间" prop="updatedate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.updatedate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择修改时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="部门编号" prop="deptId">
-          <el-input v-model="form.deptId" placeholder="请输入部门编号" />
+          <el-input v-model="form.fileName" disabled placeholder="请输入附件名称"/>
         </el-form-item>
         <el-form-item label="备注" prop="remarks">
-          <el-input v-model="form.remarks" placeholder="请输入备注" />
+          <el-input v-model="form.remarks" placeholder="请输入备注"/>
         </el-form-item>
-          <el-form-item label="归属部门" prop="deptId">
-              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
-          </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
-      <!-- 用户导入对话框 -->
-      <el-dialog :close-on-click-modal="false" :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
-          <el-upload
-                  ref="upload"
-                  :limit="1"
-                  accept=".xlsx, .xls"
-                  :headers="upload.headers"
-                  :action="upload.url + '?updateSupport=' + upload.updateSupport"
-                  :disabled="upload.isUploading"
-                  :on-progress="handleFileUploadProgress"
-                  :on-success="handleFileSuccess"
-                  :auto-upload="false"
-                  drag
-          >
-              <i class="el-icon-upload"></i>
-              <div class="el-upload__text">
-                  将文件拖到此处,或
-                  <em>点击上传</em>
-              </div>
-              <div class="el-upload__tip" slot="tip">
-                  <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
-                  <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
-              </div>
-              <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
-          </el-upload>
-          <div slot="footer" class="dialog-footer">
-              <el-button type="primary" @click="submitFileForm">确 定</el-button>
-              <el-button @click="upload.open = false">取 消</el-button>
-          </div>
-      </el-dialog>
+
+    <!-- 附件对话框 -->
+    <el-dialog :close-on-click-modal="false" v-dialogDrag :title="doc.title" :visible.sync="doc.open"
+               append-to-body width="500px" style="text-align: center">
+      <el-upload
+        ref="doc"
+        :limit="50"
+        :headers="doc.headers"
+        :action="doc.url + '?subId=' + subId "
+        :disabled="doc.isUploading"
+        :on-progress="handleFileDocProgress"
+        :on-success="handleFileDocSuccess"
+        :auto-upload="true"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+      </el-upload>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="doc.open = false">返 回</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :close-on-click-modal="false" v-dialogDrag :title="pdf.title" :visible.sync="pdf.open" width="1300px"
+               append-to-body>
+      <div style="margin-top: -60px;float: right;margin-right: 40px;">
+        <el-button size="mini" type="text" @click="openPdf">新页面打开PDF</el-button>
+      </div>
+      <div style="margin-top: -30px">
+        <iframe :src="pdf.pdfUrl" frameborder="0" width="100%" height="700px"></iframe>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { listInstrumentTest, getInstrumentTest, delInstrumentTest, addInstrumentTest, updateInstrumentTest, exportInstrumentTest, importTemplate} from "@/api/pssr/instrumentTest";
-import { treeselect } from "@/api/system/dept";
-import { getToken } from "@/utils/auth";
+import {
+  addInstrumentTest,
+  delInstrumentTest,
+  exportInstrumentTest,
+  getInstrumentTest,
+  importTemplate,
+  listInstrumentTest,
+  updateInstrumentTest
+} from "@/api/pssr/instrumentTest";
+import {treeselect} from "@/api/system/dept";
+import {getToken} from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {doApprove} from "@/api/pssr/approve";
 
 export default {
-  dicts:['pssr_approve_status'],
+  dicts: ['pssr_approve_status'],
   name: "InstrumentTest",
-  components: { Treeselect },
+  components: {Treeselect},
   props: {
     subId: {
       type: Number,
@@ -306,6 +176,35 @@ export default {
   },
   data() {
     return {
+      doc: {
+        file: "",
+        // 是否显示弹出层(报告附件)
+        open: false,
+        // 弹出层标题(报告附件)
+        title: "附件",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 报告附件上传位置编号
+        ids: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/pssr/instrumentTest/uploadFile",
+        commonfileList: null,
+        pId: null,
+        form: {}
+      },
+      pdf: {
+        title: '',
+        pdfUrl: '',
+        numPages: null,
+        open: false,
+        pageNum: 1,
+        pageTotalNum: 1,
+        loadedRatio: 0,
+      },
       // 遮罩层
       loading: true,
       // 选中数组
@@ -324,24 +223,24 @@ export default {
       title: "",
       // 部门树选项
       deptOptions: undefined,
-      clientHeight:300,
+      clientHeight: 300,
       // 是否显示弹出层
       open: false,
-        // 用户导入参数
-        upload: {
-            // 是否显示弹出层(用户导入)
-            open: false,
-            // 弹出层标题(用户导入)
-            title: "",
-            // 是否禁用上传
-            isUploading: false,
-            // 是否更新已经存在的用户数据
-            updateSupport: 0,
-            // 设置上传的请求头部
-            headers: { Authorization: "Bearer " + getToken() },
-            // 上传的地址
-            url: process.env.VUE_APP_BASE_API + "/pssr/instrumentTest/importData"
-        },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/pssr/instrumentTest/importData"
+      },
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -360,21 +259,20 @@ export default {
       // 表单参数
       form: {},
       // 表单校验
-      rules: {
-      }
+      rules: {}
     };
   },
   watch: {
-        // 根据名称筛选部门树
-        deptName(val) {
-            this.$refs.tree.filter(val);
-        }
-   },
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
   created() {
-      //设置表格高度对应屏幕高度
-      this.$nextTick(() => {
-          this.clientHeight = document.body.clientHeight - 350
-      })
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = document.body.clientHeight - 350
+    })
     this.getList();
     this.getTreeselect();
   },
@@ -388,12 +286,12 @@ export default {
         this.loading = false;
       });
     },
-     /** 查询部门下拉树结构 */
-     getTreeselect() {
-          treeselect().then(response => {
-              this.deptOptions = response.data;
-          });
-     },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
     // 取消按钮
     cancel() {
       this.open = false;
@@ -430,7 +328,7 @@ export default {
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
@@ -473,56 +371,102 @@ export default {
     handleDelete(row) {
       const ids = row.id || this.ids;
       this.$confirm('是否确认删除?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delInstrumentTest(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        })
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delInstrumentTest(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      })
     },
     /** 导出按钮操作 */
     handleExport() {
       const queryParams = this.queryParams;
       this.$confirm('是否确认导出所有仪联锁测试数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return exportInstrumentTest(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        })
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return exportInstrumentTest(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      })
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      importTemplate().then(response => {
+        this.download(response.msg);
+      });
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", {dangerouslyUseHTMLString: true});
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+    /** 确认按钮操作*/
+    handleApprove() {
+      doApprove(this.subId).then(res => {
+        this.msgSuccess("已发起确认流程");
+        this.getList();
+      })
+    },
+    /** 报告附件按钮操作 */
+    handleDoc(row, fileType) {
+      this.doc.id = row.id;
+      this.doc.title = this.$t('附件');
+      this.doc.open = true;
+      this.$nextTick(() => {
+        this.$refs.doc.clearFiles()
+      })
+    },
+    //附件上传中处理
+    handleFileDocProgress(event, file, fileList) {
+      this.doc.file = file;
+      this.doc.isUploading = true;
+    },
+    //附件上传成功处理
+    handleFileDocSuccess(response, file, fileList) {
+      this.doc.isUploading = false;
+      this.$alert(response.msg, this.$t('上传结果'), {dangerouslyUseHTMLString: true});
+      this.getList();
+    },
+    // 文件下载处理
+    handleDownload(row) {
+      var name = row.fileName;
+      var url = row.fileUrl;
+      var suffix = url.substring(url.lastIndexOf("."), url.length);
+      const a = document.createElement('a')
+      a.setAttribute('download', name)
+      a.setAttribute('target', '_blank')
+      a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
+      a.click()
+    },
+    openPdf() {
+      window.open(this.pdf.pdfUrl);//path是文件的全路径地址
+    },
+    handleSee(row) {
+      this.pdf.open = true
+      this.pdf.title = row.fileName
+      this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + '/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + row.fileUrl
     },
-      /** 导入按钮操作 */
-      handleImport() {
-          this.upload.title = "用户导入";
-          this.upload.open = true;
-      },
-      /** 下载模板操作 */
-      importTemplate() {
-          importTemplate().then(response => {
-              this.download(response.msg);
-          });
-      },
-      // 文件上传中处理
-      handleFileUploadProgress(event, file, fileList) {
-          this.upload.isUploading = true;
-      },
-      // 文件上传成功处理
-      handleFileSuccess(response, file, fileList) {
-          this.upload.open = false;
-          this.upload.isUploading = false;
-          this.$refs.upload.clearFiles();
-          this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
-          this.getList();
-      },
-      // 提交上传文件
-      submitFileForm() {
-          this.$refs.upload.submit();
-      }
   }
 };
 </script>

+ 35 - 2
ui/src/views/pssr/lock/index.vue

@@ -114,6 +114,18 @@
         >确认
         </el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-refresh-left"
+          size="mini"
+          v-if="isApprove==2"
+          :disabled="multiple"
+          @click="handleTurnDown"
+          v-hasPermi="['pssr:lock:edit']"
+        >驳回
+        </el-button>
+      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
@@ -123,7 +135,7 @@
       <span>检查要求:检查上锁位置和PID以及清单上描述的位置是否一致正确;阀门状态和PID标注状态描述是否一致正确;锁开锁关是否紧固;锁体和链条是否无损坏;是(√),否(×),不符合要求的立即联系责任人整改。</span>
     </div>
     <el-table v-loading="loading" :data="lockList" @selection-change="handleSelectionChange"
-              :selectable="checkSelectable" :height="clientHeight"
+               :height="clientHeight"
               border>
       <el-table-column type="selection" width="55" align="center"/>
       <el-table-column label="审批状态" align="center" prop="approveStatus" :show-overflow-tooltip="true" width="100">
@@ -319,7 +331,7 @@ import {
   delLock,
   exportLock,
   getLock,
-  handleConfirmApproveLock,
+  handleConfirmApproveLock, handleTurnDownLock,
   importTemplate,
   listLock,
   updateLock
@@ -330,6 +342,7 @@ import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import {listUserNoPage} from "@/api/system/user";
 import {doApprove} from "@/api/pssr/approve";
+import {handleTurnDownMoc} from "@/api/pssr/moc";
 
 export default {
   dicts: ['pssr_approve_status'],
@@ -459,6 +472,26 @@ export default {
         this.$emit('refreshHisList');
       })
     },
+    handleTurnDown(val) {
+      this.$prompt('请输入驳回原因', '提示', {
+        confirmButtonText: '确认驳回',
+        cancelButtonText: '取消',
+      }).then(({value}) => {
+        let data = {
+          ids: this.ids,
+          subId: this.subId,
+          remarks: value
+        }
+        handleTurnDownLock(data).then(res => {
+          this.msgSuccess("驳回成功");
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '取消驳回'
+        });
+      });
+    },
     userFormat(userId) {
       for (let item of this.userOptions) {
         if (item.userId == userId) {

+ 4 - 4
ui/src/views/pssr/material/index.vue

@@ -44,7 +44,7 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
+<!--      <el-col :span="1.5">
         <el-button
           type="primary"
           icon="el-icon-plus"
@@ -89,7 +89,7 @@
           v-if="isApprove==0"
         >导入
         </el-button>
-      </el-col>
+      </el-col>-->
       <el-col :span="1.5">
         <el-button
           type="warning"
@@ -190,14 +190,14 @@
             v-hasPermi="['pssr:material:edit']"
           >修改
           </el-button>
-          <el-button
+<!--          <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
             v-hasPermi="['pssr:material:remove']"
           >删除
-          </el-button>
+          </el-button>-->
         </template>
       </el-table-column>
     </el-table>

+ 4 - 14
ui/src/views/pssr/materialRaw/index.vue

@@ -44,7 +44,7 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
+<!--      <el-col :span="1.5">
         <el-button
           type="primary"
           icon="el-icon-plus"
@@ -89,7 +89,7 @@
           v-if="isApprove==0"
         >导入
         </el-button>
-      </el-col>
+      </el-col>-->
       <el-col :span="1.5">
         <el-button
           type="warning"
@@ -192,24 +192,14 @@
             v-hasPermi="['pssr:materialRaw:edit']"
           >修改
           </el-button>
-          <el-button
+<!--          <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
             v-hasPermi="['pssr:materialRaw:remove']"
           >删除
-          </el-button>
-          <el-col :span="1.5">
-            <el-button
-              type="success"
-              icon="el-icon-edit"
-              size="mini"
-              :disabled="multiple"
-              @click="handleBatch"
-              v-hasPermi="['pssr:materialRaw:edit']"
-            >批量操作</el-button>
-          </el-col>
+          </el-button>-->
         </template>
       </el-table-column>
     </el-table>

+ 37 - 3
ui/src/views/pssr/overhaulExchanger/index.vue

@@ -125,12 +125,24 @@
           type="primary"
           icon="el-icon-check"
           size="mini"
-          v-if="isApprove==1"
+          v-if="isApprove==4"
           @click="handleConfirmApprove"
           v-hasPermi="['pssr:overhaulExchanger:edit']"
         >确认
         </el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-refresh-left"
+          size="mini"
+          v-if="isApprove==2"
+          :disabled="multiple"
+          @click="handleTurnDown"
+          v-hasPermi="['pssr:overhaulExchanger:edit']"
+        >驳回
+        </el-button>
+      </el-col>
       <el-col :span="1.5">
         <el-button
           type="primary"
@@ -147,7 +159,7 @@
     </div>
     <el-table v-loading="loading" :data="overhaulExchangerList" @selection-change="handleSelectionChange"
               :height="clientHeight" border>
-      <el-table-column type="selection" width="55" align="center" :selectable="checkSelectable"/>
+      <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="审批状态" align="center" prop="approveStatus" :show-overflow-tooltip="true" width="120">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.pssr_approve_status" :value="scope.row.approveStatus"
@@ -351,7 +363,7 @@ import {
   delOverhaulExchanger,
   exportOverhaulExchanger,
   getOverhaulExchanger,
-  handleConfirmApprove,
+  handleConfirmApprove, handleTurnDownExchanger,
   importTemplate,
   listOverhaulExchanger,
   updateOverhaulExchanger
@@ -365,6 +377,7 @@ import {listUserNoPage} from "@/api/system/user";
 import {doApprove} from "@/api/pssr/approve";
 import {getSubcontent} from "@/api/pssr/subcontent";
 import {allFileList, delCommonfile} from "@/api/common/commonfile";
+import {handleTurnDownLock} from "@/api/pssr/lock";
 
 export default {
   dicts: ['pssr_approve_status'],
@@ -514,6 +527,27 @@ export default {
     })
   },
   methods: {
+    handleTurnDown(val) {
+      this.$prompt('请输入驳回原因', '提示', {
+        confirmButtonText: '确认驳回',
+        cancelButtonText: '取消',
+      }).then(({value}) => {
+        let data = {
+          ids: this.ids,
+          subId: this.subId,
+          remarks: value
+        }
+        handleTurnDownExchanger(data).then(res => {
+          this.msgSuccess("驳回成功");
+          this.getList();
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '取消驳回'
+        });
+      });
+    },
     getTagType(val) {
       if (val == 0) {
         return ''

+ 35 - 3
ui/src/views/pssr/overhaulFilter/index.vue

@@ -103,12 +103,24 @@
         >发起审批
         </el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-refresh-left"
+          size="mini"
+          v-if="isApprove==2"
+          :disabled="multiple"
+          @click="handleTurnDown"
+          v-hasPermi="['pssr:overhaulFilter:edit']"
+        >驳回
+        </el-button>
+      </el-col>
       <el-col :span="1.5">
         <el-button
           type="primary"
           icon="el-icon-check"
           size="mini"
-          v-if="isApprove==1"
+          v-if="isApprove==4"
           @click="handleConfirmApprove"
           v-hasPermi="['pssr:overhaulFilter:edit']"
         >确认
@@ -130,7 +142,7 @@
     </div>
     <el-table v-loading="loading" :data="overhaulFilterList" @selection-change="handleSelectionChange"
               :height="clientHeight" border>
-      <el-table-column type="selection" width="55" align="center" :selectable="checkSelectable"/>
+      <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="审批状态" align="center" prop="approveStatus" :show-overflow-tooltip="true" width="120">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.pssr_approve_status" :value="scope.row.approveStatus" :show-type="getTagType(scope.row.approveStatus)"/>
@@ -357,7 +369,7 @@ import {
   delOverhaulFilter,
   exportOverhaulFilter,
   getOverhaulFilter,
-  handleConfirmApprove,
+  handleConfirmApprove, handleTurnDownFilter,
   importTemplate,
   listOverhaulFilter,
   updateOverhaulFilter
@@ -543,6 +555,26 @@ export default {
     })
   },
   methods: {
+    handleTurnDown(val) {
+      this.$prompt('请输入驳回原因', '提示', {
+        confirmButtonText: '确认驳回',
+        cancelButtonText: '取消',
+      }).then(({value}) => {
+        let data = {
+          ids: this.ids,
+          subId: this.subId,
+          remarks: value
+        }
+        handleTurnDownFilter(data).then(res => {
+          this.msgSuccess("驳回成功");
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '取消驳回'
+        });
+      });
+    },
     getTagType(val){
       if (val==0){
         return ''

+ 35 - 3
ui/src/views/pssr/overhaulPipe/index.vue

@@ -94,12 +94,24 @@
         >发起审批
         </el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-refresh-left"
+          size="mini"
+          v-if="isApprove==2"
+          :disabled="multiple"
+          @click="handleTurnDown"
+          v-hasPermi="['pssr:overhaulPipe:edit']"
+        >驳回
+        </el-button>
+      </el-col>
       <el-col :span="1.5">
         <el-button
           type="primary"
           icon="el-icon-check"
           size="mini"
-          v-if="isApprove==1"
+          v-if="isApprove==4"
           @click="handleConfirmApprove"
           v-hasPermi="['pssr:overhaulPipe:edit']"
         >确认
@@ -112,7 +124,7 @@
     </div>
     <el-table v-loading="loading" :data="overhaulPipeList" @selection-change="handleSelectionChange"
               :height="clientHeight" border>
-      <el-table-column type="selection" width="55" align="center" :selectable="checkSelectable"/>
+      <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="审批状态" align="center" prop="approveStatus" :show-overflow-tooltip="true" width="120">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.pssr_approve_status" :value="scope.row.approveStatus"
@@ -239,7 +251,7 @@ import {
   delOverhaulPipe,
   exportOverhaulPipe,
   getOverhaulPipe,
-  handleConfirmApprove,
+  handleConfirmApprove, handleTurnDownPipe,
   importTemplate,
   listOverhaulPipe,
   updateOverhaulPipe
@@ -367,6 +379,26 @@ export default {
     })
   },
   methods: {
+    handleTurnDown(val) {
+      this.$prompt('请输入驳回原因', '提示', {
+        confirmButtonText: '确认驳回',
+        cancelButtonText: '取消',
+      }).then(({value}) => {
+        let data = {
+          ids: this.ids,
+          subId: this.subId,
+          remarks: value
+        }
+        handleTurnDownPipe(data).then(res => {
+          this.msgSuccess("驳回成功");
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '取消驳回'
+        });
+      });
+    },
     getTagType(val) {
       if (val == 0) {
         return ''

+ 35 - 3
ui/src/views/pssr/overhaulPump/index.vue

@@ -103,12 +103,24 @@
         >发起审批
         </el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-refresh-left"
+          size="mini"
+          v-if="isApprove==2"
+          :disabled="multiple"
+          @click="handleTurnDown"
+          v-hasPermi="['pssr:overhaulPump:edit']"
+        >驳回
+        </el-button>
+      </el-col>
       <el-col :span="1.5">
         <el-button
           type="primary"
           icon="el-icon-check"
           size="mini"
-          v-if="isApprove==1"
+          v-if="isApprove==4"
           @click="handleConfirmApprove"
           v-hasPermi="['pssr:overhaulPump:edit']"
         >确认
@@ -121,7 +133,7 @@
     </div>
     <el-table v-loading="loading" :data="overhaulPumpList" @selection-change="handleSelectionChange"
               :height="clientHeight" border>
-      <el-table-column type="selection" width="55" align="center" :selectable="checkSelectable"/>
+      <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="审批状态" align="center" prop="approveStatus" :show-overflow-tooltip="true" width="120">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.pssr_approve_status" :value="scope.row.approveStatus" :show-type="getTagType(scope.row.approveStatus)"/>
@@ -251,7 +263,7 @@ import {
   delOverhaulPump,
   exportOverhaulPump,
   getOverhaulPump,
-  handleConfirmApprove,
+  handleConfirmApprove, handleTurnDownPump,
   importTemplate,
   listOverhaulPump,
   updateOverhaulPump
@@ -380,6 +392,26 @@ export default {
     })
   },
   methods: {
+    handleTurnDown(val) {
+      this.$prompt('请输入驳回原因', '提示', {
+        confirmButtonText: '确认驳回',
+        cancelButtonText: '取消',
+      }).then(({value}) => {
+        let data = {
+          ids: this.ids,
+          subId: this.subId,
+          remarks: value
+        }
+        handleTurnDownPump(data).then(res => {
+          this.msgSuccess("驳回成功");
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '取消驳回'
+        });
+      });
+    },
     getTagType(val){
       if (val==0){
         return ''

+ 35 - 3
ui/src/views/pssr/overhaulTower/index.vue

@@ -104,12 +104,24 @@
         >发起审批
         </el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-refresh-left"
+          size="mini"
+          v-if="isApprove==2"
+          :disabled="multiple"
+          @click="handleTurnDown"
+          v-hasPermi="['pssr:overhaulTower:edit']"
+        >驳回
+        </el-button>
+      </el-col>
       <el-col :span="1.5">
         <el-button
           type="primary"
           icon="el-icon-check"
           size="mini"
-          v-if="isApprove==1"
+          v-if="isApprove==4"
           @click="handleConfirmApprove"
           v-hasPermi="['pssr:overhaulTower:edit']"
         >确认
@@ -132,7 +144,7 @@
     </div>
     <el-table v-loading="loading" :data="overhaulTowerList" @selection-change="handleSelectionChange"
               :height="clientHeight" border>
-      <el-table-column type="selection" width="55" align="center" :selectable="checkSelectable"/>
+      <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="审批状态" align="center" prop="approveStatus" :show-overflow-tooltip="true" width="120">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.pssr_approve_status" :value="scope.row.approveStatus" :show-type="getTagType(scope.row.approveStatus)"/>
@@ -334,7 +346,7 @@ import {
   delOverhaulTower,
   exportOverhaulTower,
   getOverhaulTower,
-  handleConfirmApprove,
+  handleConfirmApprove, handleTurnDownTower,
   importTemplate,
   listOverhaulTower,
   updateOverhaulTower
@@ -498,6 +510,26 @@ export default {
     })
   },
   methods: {
+    handleTurnDown(val) {
+      this.$prompt('请输入驳回原因', '提示', {
+        confirmButtonText: '确认驳回',
+        cancelButtonText: '取消',
+      }).then(({value}) => {
+        let data = {
+          ids: this.ids,
+          subId: this.subId,
+          remarks: value
+        }
+        handleTurnDownTower(data).then(res => {
+          this.msgSuccess("驳回成功");
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '取消驳回'
+        });
+      });
+    },
     getTagType(val){
       if (val==0){
         return ''

+ 35 - 3
ui/src/views/pssr/overhaulValve/index.vue

@@ -101,12 +101,24 @@
         >发起审批
         </el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-refresh-left"
+          size="mini"
+          v-if="isApprove==2"
+          :disabled="multiple"
+          @click="handleTurnDown"
+          v-hasPermi="['pssr:overhaulValve:edit']"
+        >驳回
+        </el-button>
+      </el-col>
       <el-col :span="1.5">
         <el-button
           type="primary"
           icon="el-icon-check"
           size="mini"
-          v-if="isApprove==1"
+          v-if="isApprove==4"
           @click="handleConfirmApprove"
           v-hasPermi="['pssr:overhaulValve:edit']"
         >确认
@@ -129,7 +141,7 @@
     </div>
     <el-table v-loading="loading" :data="overhaulValveList" @selection-change="handleSelectionChange"
               :height="clientHeight" border>
-      <el-table-column type="selection" width="55" align="center" :selectable="checkSelectable"/>
+      <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="审批状态" align="center" prop="approveStatus" :show-overflow-tooltip="true" width="120">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.pssr_approve_status" :value="scope.row.approveStatus" :show-type="getTagType(scope.row.approveStatus)"/>
@@ -386,7 +398,7 @@ import {
   delOverhaulValve,
   exportOverhaulValve,
   getOverhaulValve,
-  handleConfirmApprove,
+  handleConfirmApprove, handleTurnDownValve,
   importTemplate,
   listOverhaulValve,
   updateOverhaulValve
@@ -560,6 +572,26 @@ export default {
     })
   },
   methods: {
+    handleTurnDown(val) {
+      this.$prompt('请输入驳回原因', '提示', {
+        confirmButtonText: '确认驳回',
+        cancelButtonText: '取消',
+      }).then(({value}) => {
+        let data = {
+          ids: this.ids,
+          subId: this.subId,
+          remarks: value
+        }
+        handleTurnDownValve(data).then(res => {
+          this.msgSuccess("驳回成功");
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '取消驳回'
+        });
+      });
+    },
     getTagType(val){
       if (val==0){
         return ''

+ 283 - 328
ui/src/views/pssr/pumpCleaning/index.vue

@@ -1,24 +1,6 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="从表id" prop="subId">
-        <el-input
-          v-model="queryParams.subId"
-          placeholder="请输入从表id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="审批id" prop="approveId">
-        <el-input
-          v-model="queryParams.approveId"
-          placeholder="请输入审批id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item label="单元" prop="unit">
         <el-input
           v-model="queryParams.unit"
@@ -46,111 +28,6 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="数量" prop="filterNumber">
-        <el-input
-          v-model="queryParams.filterNumber"
-          placeholder="请输入数量"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="是否清理干净" prop="cleaning">
-        <el-input
-          v-model="queryParams.cleaning"
-          placeholder="请输入是否清理干净"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="是否正确回装" prop="backLoading">
-        <el-input
-          v-model="queryParams.backLoading"
-          placeholder="请输入是否正确回装"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="确认人1" prop="confirmer1">
-        <el-input
-          v-model="queryParams.confirmer1"
-          placeholder="请输入确认人1"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="确认人2" prop="confirmer2">
-        <el-input
-          v-model="queryParams.confirmer2"
-          placeholder="请输入确认人2"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="完成日期" prop="confirmationDate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.confirmationDate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择完成日期">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="创建人" prop="createrCode">
-        <el-input
-          v-model="queryParams.createrCode"
-          placeholder="请输入创建人"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="创建时间" prop="createdate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.createdate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择创建时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="修改人" prop="updaterCode">
-        <el-input
-          v-model="queryParams.updaterCode"
-          placeholder="请输入修改人"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="修改时间" prop="updatedate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.updatedate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择修改时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="部门编号" prop="deptId">
-        <el-input
-          v-model="queryParams.deptId"
-          placeholder="请输入部门编号"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="备注" prop="remarks">
-        <el-input
-          v-model="queryParams.remarks"
-          placeholder="请输入备注"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -165,7 +42,9 @@
           size="mini"
           @click="handleAdd"
           v-hasPermi="['pssr:pumpCleaning:add']"
-        >新增</el-button>
+          v-if="isApprove==0"
+        >新增
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -175,7 +54,9 @@
           :disabled="single"
           @click="handleUpdate"
           v-hasPermi="['pssr:pumpCleaning:edit']"
-        >修改</el-button>
+          v-if="isApprove==0"
+        >修改
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -185,17 +66,21 @@
           :disabled="multiple"
           @click="handleDelete"
           v-hasPermi="['pssr:pumpCleaning:remove']"
-        >删除</el-button>
+          v-if="isApprove==0"
+        >删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+          v-hasPermi="['pssr:pumpCleaning:edit']"
+          v-if="isApprove==0"
+        >导入
+        </el-button>
       </el-col>
-        <el-col :span="1.5">
-            <el-button
-                    type="info"
-                    icon="el-icon-upload2"
-                    size="mini"
-                    @click="handleImport"
-                    v-hasPermi="['pssr:pumpCleaning:edit']"
-            >导入</el-button>
-        </el-col>
       <el-col :span="1.5">
         <el-button
           type="warning"
@@ -203,43 +88,72 @@
           size="mini"
           @click="handleExport"
           v-hasPermi="['pssr:pumpCleaning:export']"
-        >导出</el-button>
+          v-if="isApprove==0"
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-s-promotion"
+          size="mini"
+          @click="handleApprove"
+          v-if="isApprove==0"
+          v-hasPermi="['pssr:pumpCleaning:edit']"
+        >发起审批
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-check"
+          size="mini"
+          v-if="isApprove==4||isApprove==5"
+          @click="handleConfirmApprove"
+          v-hasPermi="['pssr:pumpCleaning:edit']"
+        >确认
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-refresh-left"
+          size="mini"
+          v-if="isApprove==2"
+          :disabled="multiple"
+          @click="handleTurnDown"
+          v-hasPermi="['pssr:pumpCleaning:edit']"
+        >驳回
+        </el-button>
       </el-col>
-	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="pumpCleaningList" @selection-change="handleSelectionChange" :height="clientHeight" border>
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="唯一标识ID" align="center" prop="id" :show-overflow-tooltip="true"/>
-      <el-table-column label="从表id" align="center" prop="subId" :show-overflow-tooltip="true"/>
-      <el-table-column label="审批id" align="center" prop="approveId" :show-overflow-tooltip="true"/>
-      <el-table-column label="单元" align="center" prop="unit" :show-overflow-tooltip="true"/>
-      <el-table-column label="过滤网位置" align="center" prop="position" :show-overflow-tooltip="true"/>
-      <el-table-column label="P&ID号" align="center" prop="pidNo" :show-overflow-tooltip="true"/>
-      <el-table-column label="数量" align="center" prop="filterNumber" :show-overflow-tooltip="true"/>
-      <el-table-column label="是否清理干净" align="center" prop="cleaning" :show-overflow-tooltip="true"/>
-      <el-table-column label="是否正确回装" align="center" prop="backLoading" :show-overflow-tooltip="true"/>
-      <el-table-column label="确认人1" align="center" prop="confirmer1" :show-overflow-tooltip="true"/>
-      <el-table-column label="确认人2" align="center" prop="confirmer2" :show-overflow-tooltip="true"/>
-      <el-table-column label="完成日期" align="center" prop="confirmationDate" width="100">
+    <el-table v-loading="loading" :data="pumpCleaningList" @selection-change="handleSelectionChange"
+              :height="clientHeight" border>
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="审批状态" align="center" prop="approveStatus" :show-overflow-tooltip="true" width="120">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.confirmationDate, '{y}-{m}-{d}') }}</span>
+          <el-tag v-if="scope.row.approveStatus==0">未审批</el-tag>
+          <el-tag v-if="scope.row.approveStatus==1" type="warning">待确认</el-tag>
+          <el-tag v-if="scope.row.approveStatus==3" type="success">已确认1</el-tag>
+          <el-tag v-if="scope.row.approveStatus==2" type="success">已确认2</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="创建人" align="center" prop="createrCode" :show-overflow-tooltip="true"/>
-      <el-table-column label="创建时间" align="center" prop="createdate" width="100">
+      <el-table-column label="单元" align="center" prop="unit" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="过滤网位置" align="center" prop="position" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="P&ID号" align="center" prop="pidNo" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="数量" align="center" prop="filterNumber" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="是否清理干净" align="center" prop="cleaning" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="是否正确回装" align="center" prop="backLoading" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="确认人1" align="center" prop="confirmer1" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="确认人2" align="center" prop="confirmer2" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="完成日期" align="center" prop="confirmationDate" width="150">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createdate, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="修改人" align="center" prop="updaterCode" :show-overflow-tooltip="true"/>
-      <el-table-column label="修改时间" align="center" prop="updatedate" width="100">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.updatedate, '{y}-{m}-{d}') }}</span>
+          <span>{{ parseTime(scope.row.confirmationDate, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="部门编号" align="center" prop="deptId" :show-overflow-tooltip="true"/>
-      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
+      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true" width="180"/>
       <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -248,14 +162,16 @@
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
             v-hasPermi="['pssr:pumpCleaning:edit']"
-          >修改</el-button>
+          >修改
+          </el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
             v-hasPermi="['pssr:pumpCleaning:remove']"
-          >删除</el-button>
+          >删除
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -271,128 +187,107 @@
     <!-- 添加或修改机泵过滤器清理工作清单对话框 -->
     <el-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="从表id" prop="subId">
-          <el-input v-model="form.subId" placeholder="请输入从表id" />
-        </el-form-item>
-        <el-form-item label="审批id" prop="approveId">
-          <el-input v-model="form.approveId" placeholder="请输入审批id" />
-        </el-form-item>
         <el-form-item label="单元" prop="unit">
-          <el-input v-model="form.unit" placeholder="请输入单元" />
+          <el-input v-model="form.unit" placeholder="请输入单元"/>
         </el-form-item>
         <el-form-item label="过滤网位置" prop="position">
-          <el-input v-model="form.position" placeholder="请输入过滤网位置" />
+          <el-input v-model="form.position" placeholder="请输入过滤网位置"/>
         </el-form-item>
         <el-form-item label="P&ID号" prop="pidNo">
-          <el-input v-model="form.pidNo" placeholder="请输入P&ID号" />
+          <el-input v-model="form.pidNo" placeholder="请输入P&ID号"/>
         </el-form-item>
         <el-form-item label="数量" prop="filterNumber">
-          <el-input v-model="form.filterNumber" placeholder="请输入数量" />
+          <el-input v-model="form.filterNumber" placeholder="请输入数量"/>
         </el-form-item>
         <el-form-item label="是否清理干净" prop="cleaning">
-          <el-input v-model="form.cleaning" placeholder="请输入是否清理干净" />
+          <el-input v-model="form.cleaning" placeholder="请输入是否清理干净"/>
         </el-form-item>
         <el-form-item label="是否正确回装" prop="backLoading">
-          <el-input v-model="form.backLoading" placeholder="请输入是否正确回装" />
+          <el-input v-model="form.backLoading" placeholder="请输入是否正确回装"/>
         </el-form-item>
         <el-form-item label="确认人1" prop="confirmer1">
-          <el-input v-model="form.confirmer1" placeholder="请输入确认人1" />
+          <el-select v-model="form.confirmer1" filterable placeholder="请选择确认人1">
+            <el-option v-for="user in userOptions"
+                       :label="user.nickName"
+                       :value="user.userId+''"
+                       :key="user.userId"/>
+          </el-select>
         </el-form-item>
         <el-form-item label="确认人2" prop="confirmer2">
-          <el-input v-model="form.confirmer2" placeholder="请输入确认人2" />
-        </el-form-item>
-        <el-form-item label="完成日期" prop="confirmationDate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.confirmationDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择完成日期">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="删除状态" prop="delFlag">
-          <el-input v-model="form.delFlag" placeholder="请输入删除状态" />
-        </el-form-item>
-        <el-form-item label="创建人" prop="createrCode">
-          <el-input v-model="form.createrCode" placeholder="请输入创建人" />
-        </el-form-item>
-        <el-form-item label="创建时间" prop="createdate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.createdate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择创建时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="修改人" prop="updaterCode">
-          <el-input v-model="form.updaterCode" placeholder="请输入修改人" />
-        </el-form-item>
-        <el-form-item label="修改时间" prop="updatedate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.updatedate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择修改时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="部门编号" prop="deptId">
-          <el-input v-model="form.deptId" placeholder="请输入部门编号" />
+          <el-select v-model="form.confirmer2" filterable placeholder="请选择确认人2">
+            <el-option v-for="user in userOptions"
+                       :label="user.nickName"
+                       :value="user.userId+''"
+                       :key="user.userId"/>
+          </el-select>
         </el-form-item>
         <el-form-item label="备注" prop="remarks">
-          <el-input v-model="form.remarks" placeholder="请输入备注" />
+          <el-input v-model="form.remarks" placeholder="请输入备注"/>
         </el-form-item>
-          <el-form-item label="归属部门" prop="deptId">
-              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
-          </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
-      <!-- 用户导入对话框 -->
-      <el-dialog :close-on-click-modal="false" :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
-          <el-upload
-                  ref="upload"
-                  :limit="1"
-                  accept=".xlsx, .xls"
-                  :headers="upload.headers"
-                  :action="upload.url + '?updateSupport=' + upload.updateSupport"
-                  :disabled="upload.isUploading"
-                  :on-progress="handleFileUploadProgress"
-                  :on-success="handleFileSuccess"
-                  :auto-upload="false"
-                  drag
-          >
-              <i class="el-icon-upload"></i>
-              <div class="el-upload__text">
-                  将文件拖到此处,或
-                  <em>点击上传</em>
-              </div>
-              <div class="el-upload__tip" slot="tip">
-                  <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
-                  <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
-              </div>
-              <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
-          </el-upload>
-          <div slot="footer" class="dialog-footer">
-              <el-button type="primary" @click="submitFileForm">确 定</el-button>
-              <el-button @click="upload.open = false">取 消</el-button>
-          </div>
-      </el-dialog>
+    <!-- 用户导入对话框 -->
+    <el-dialog :close-on-click-modal="false" :title="upload.title" :visible.sync="upload.open" width="400px"
+               append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+        <div class="el-upload__tip" slot="tip">
+          <el-checkbox v-model="upload.updateSupport"/>
+          是否更新已经存在的用户数据
+          <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
+        </div>
+        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { listPumpCleaning, getPumpCleaning, delPumpCleaning, addPumpCleaning, updatePumpCleaning, exportPumpCleaning, importTemplate} from "@/api/pssr/pumpCleaning";
-import { treeselect } from "@/api/system/dept";
-import { getToken } from "@/utils/auth";
+import {
+  addPumpCleaning,
+  delPumpCleaning,
+  exportPumpCleaning,
+  getPumpCleaning,
+  importTemplate,
+  listPumpCleaning,
+  updatePumpCleaning,
+  handleConfirmPumpCleaning,
+  handleTurnDownPumpCleaning
+} from "@/api/pssr/pumpCleaning";
+import {treeselect} from "@/api/system/dept";
+import {getToken} from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {doApprove} from "@/api/pssr/approve";
+import {listUserNoPage} from "@/api/system/user";
 
 export default {
-  dicts:['pssr_approve_status'],
+  dicts: ['pssr_approve_status'],
   name: "PumpCleaning",
-  components: { Treeselect },
+  components: {Treeselect},
   props: {
     subId: {
       type: Number,
@@ -405,6 +300,7 @@ export default {
   },
   data() {
     return {
+      userOptions: [],
       // 遮罩层
       loading: true,
       // 选中数组
@@ -423,24 +319,24 @@ export default {
       title: "",
       // 部门树选项
       deptOptions: undefined,
-      clientHeight:300,
+      clientHeight: 300,
       // 是否显示弹出层
       open: false,
-        // 用户导入参数
-        upload: {
-            // 是否显示弹出层(用户导入)
-            open: false,
-            // 弹出层标题(用户导入)
-            title: "",
-            // 是否禁用上传
-            isUploading: false,
-            // 是否更新已经存在的用户数据
-            updateSupport: 0,
-            // 设置上传的请求头部
-            headers: { Authorization: "Bearer " + getToken() },
-            // 上传的地址
-            url: process.env.VUE_APP_BASE_API + "/pssr/pumpCleaning/importData"
-        },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/pssr/pumpCleaning/importData"
+      },
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -467,22 +363,31 @@ export default {
       form: {},
       // 表单校验
       rules: {
+        confirmer1: [
+          {required: true, message: "确认人1不能为空", trigger: "blur"}
+        ],
+        confirmer2: [
+          {required: true, message: "确认人2不能为空", trigger: "blur"}
+        ],
       }
     };
   },
   watch: {
-        // 根据名称筛选部门树
-        deptName(val) {
-            this.$refs.tree.filter(val);
-        }
-   },
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
   created() {
-      //设置表格高度对应屏幕高度
-      this.$nextTick(() => {
-          this.clientHeight = document.body.clientHeight - 350
-      })
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = document.body.clientHeight - 350
+    })
     this.getList();
     this.getTreeselect();
+    listUserNoPage({}).then(res => {
+      this.userOptions = res.data
+    });
   },
   methods: {
     /** 查询机泵过滤器清理工作清单列表 */
@@ -494,12 +399,12 @@ export default {
         this.loading = false;
       });
     },
-     /** 查询部门下拉树结构 */
-     getTreeselect() {
-          treeselect().then(response => {
-              this.deptOptions = response.data;
-          });
-     },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
     // 取消按钮
     cancel() {
       this.open = false;
@@ -543,7 +448,7 @@ export default {
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
@@ -586,56 +491,106 @@ export default {
     handleDelete(row) {
       const ids = row.id || this.ids;
       this.$confirm('是否确认删除?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delPumpCleaning(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        })
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delPumpCleaning(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      })
     },
     /** 导出按钮操作 */
     handleExport() {
       const queryParams = this.queryParams;
       this.$confirm('是否确认导出所有机泵过滤器清理工作清单数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return exportPumpCleaning(queryParams);
-        }).then(response => {
-          this.download(response.msg);
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return exportPumpCleaning(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      })
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      importTemplate().then(response => {
+        this.download(response.msg);
+      });
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", {dangerouslyUseHTMLString: true});
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+    /** 确认按钮操作*/
+    handleApprove() {
+      doApprove(this.subId).then(res => {
+        this.msgSuccess("已发起确认流程");
+        this.getList();
+      })
+    },
+    handleConfirmApprove() {
+      let data = {
+        ids: this.ids,
+        subId: this.subId,
+        taskType: this.isApprove
+      }
+      handleConfirmPumpCleaning(data).then(res => {
+        this.msgSuccess("确认成功");
+        this.getList()
+        this.$emit('refreshHisList');
+      })
+    },
+    handleTurnDown(val) {
+      this.$prompt('请输入驳回原因', '提示', {
+        confirmButtonText: '确认驳回',
+        cancelButtonText: '取消',
+      }).then(({value}) => {
+        let data = {
+          ids: this.ids,
+          subId: this.subId,
+          remarks: value
+        }
+        handleTurnDownPumpCleaning(data).then(res => {
+          this.msgSuccess("驳回成功");
         })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '取消驳回'
+        });
+      });
     },
-      /** 导入按钮操作 */
-      handleImport() {
-          this.upload.title = "用户导入";
-          this.upload.open = true;
-      },
-      /** 下载模板操作 */
-      importTemplate() {
-          importTemplate().then(response => {
-              this.download(response.msg);
-          });
-      },
-      // 文件上传中处理
-      handleFileUploadProgress(event, file, fileList) {
-          this.upload.isUploading = true;
-      },
-      // 文件上传成功处理
-      handleFileSuccess(response, file, fileList) {
-          this.upload.open = false;
-          this.upload.isUploading = false;
-          this.$refs.upload.clearFiles();
-          this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
-          this.getList();
-      },
-      // 提交上传文件
-      submitFileForm() {
-          this.$refs.upload.submit();
+    userFormat(userId) {
+      for (let item of this.userOptions) {
+        if (item.userId == userId) {
+          return item.nickName
+        }
       }
+    },
   }
 };
 </script>

+ 282 - 337
ui/src/views/pssr/pumpFill/index.vue

@@ -1,24 +1,6 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="从表id" prop="subId">
-        <el-input
-          v-model="queryParams.subId"
-          placeholder="请输入从表id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="审批id" prop="approveId">
-        <el-input
-          v-model="queryParams.approveId"
-          placeholder="请输入审批id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item label="单元" prop="unit">
         <el-input
           v-model="queryParams.unit"
@@ -37,120 +19,6 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="润滑部位" prop="lubricatingPart">
-        <el-input
-          v-model="queryParams.lubricatingPart"
-          placeholder="请输入润滑部位"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="润滑油或油脂加注完成" prop="fillingComplete">
-        <el-input
-          v-model="queryParams.fillingComplete"
-          placeholder="请输入润滑油或油脂加注完成"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="润滑油泄漏" prop="lubricatingLeak">
-        <el-input
-          v-model="queryParams.lubricatingLeak"
-          placeholder="请输入润滑油泄漏"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="油杯液位正常" prop="liquidNormal">
-        <el-input
-          v-model="queryParams.liquidNormal"
-          placeholder="请输入油杯液位正常"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="确认人1" prop="confirmer1">
-        <el-input
-          v-model="queryParams.confirmer1"
-          placeholder="请输入确认人1"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="确认人2" prop="confirmer2">
-        <el-input
-          v-model="queryParams.confirmer2"
-          placeholder="请输入确认人2"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="完成日期" prop="confirmationDate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.confirmationDate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择完成日期">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="创建人" prop="createrCode">
-        <el-input
-          v-model="queryParams.createrCode"
-          placeholder="请输入创建人"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="创建时间" prop="createdate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.createdate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择创建时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="修改人" prop="updaterCode">
-        <el-input
-          v-model="queryParams.updaterCode"
-          placeholder="请输入修改人"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="修改时间" prop="updatedate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.updatedate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择修改时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="部门编号" prop="deptId">
-        <el-input
-          v-model="queryParams.deptId"
-          placeholder="请输入部门编号"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="备注" prop="remarks">
-        <el-input
-          v-model="queryParams.remarks"
-          placeholder="请输入备注"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -165,7 +33,9 @@
           size="mini"
           @click="handleAdd"
           v-hasPermi="['pssr:pumpFill:add']"
-        >新增</el-button>
+          v-if="isApprove==0"
+        >新增
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -175,7 +45,9 @@
           :disabled="single"
           @click="handleUpdate"
           v-hasPermi="['pssr:pumpFill:edit']"
-        >修改</el-button>
+          v-if="isApprove==0"
+        >修改
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -185,17 +57,21 @@
           :disabled="multiple"
           @click="handleDelete"
           v-hasPermi="['pssr:pumpFill:remove']"
-        >删除</el-button>
+          v-if="isApprove==0"
+        >删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+          v-hasPermi="['pssr:pumpFill:edit']"
+          v-if="isApprove==0"
+        >导入
+        </el-button>
       </el-col>
-        <el-col :span="1.5">
-            <el-button
-                    type="info"
-                    icon="el-icon-upload2"
-                    size="mini"
-                    @click="handleImport"
-                    v-hasPermi="['pssr:pumpFill:edit']"
-            >导入</el-button>
-        </el-col>
       <el-col :span="1.5">
         <el-button
           type="warning"
@@ -203,43 +79,73 @@
           size="mini"
           @click="handleExport"
           v-hasPermi="['pssr:pumpFill:export']"
-        >导出</el-button>
+          v-if="isApprove==0"
+        >导出
+        </el-button>
       </el-col>
-	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-s-promotion"
+          size="mini"
+          @click="handleApprove"
+          v-if="isApprove==0"
+          v-hasPermi="['pssr:pumpFill:edit']"
+        >发起审批
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-check"
+          size="mini"
+          v-if="isApprove==4||isApprove==5"
+          @click="handleConfirmApprove"
+          v-hasPermi="['pssr:pumpFill:edit']"
+        >确认
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-refresh-left"
+          size="mini"
+          v-if="isApprove==2"
+          :disabled="multiple"
+          @click="handleTurnDown"
+          v-hasPermi="['pssr:pumpFill:edit']"
+        >驳回
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="pumpFillList" @selection-change="handleSelectionChange" :height="clientHeight" border>
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="唯一标识ID" align="center" prop="id" :show-overflow-tooltip="true"/>
-      <el-table-column label="从表id" align="center" prop="subId" :show-overflow-tooltip="true"/>
-      <el-table-column label="审批id" align="center" prop="approveId" :show-overflow-tooltip="true"/>
-      <el-table-column label="单元" align="center" prop="unit" :show-overflow-tooltip="true"/>
-      <el-table-column label="设备位号" align="center" prop="devNo" :show-overflow-tooltip="true"/>
-      <el-table-column label="润滑部位" align="center" prop="lubricatingPart" :show-overflow-tooltip="true"/>
-      <el-table-column label="润滑油或油脂加注完成" align="center" prop="fillingComplete" :show-overflow-tooltip="true"/>
-      <el-table-column label="润滑油泄漏" align="center" prop="lubricatingLeak" :show-overflow-tooltip="true"/>
-      <el-table-column label="油杯液位正常" align="center" prop="liquidNormal" :show-overflow-tooltip="true"/>
-      <el-table-column label="确认人1" align="center" prop="confirmer1" :show-overflow-tooltip="true"/>
-      <el-table-column label="确认人2" align="center" prop="confirmer2" :show-overflow-tooltip="true"/>
-      <el-table-column label="完成日期" align="center" prop="confirmationDate" width="100">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.confirmationDate, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="创建人" align="center" prop="createrCode" :show-overflow-tooltip="true"/>
-      <el-table-column label="创建时间" align="center" prop="createdate" width="100">
+    <el-table v-loading="loading" :data="pumpFillList" @selection-change="handleSelectionChange" :height="clientHeight"
+              border>
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="审批状态" align="center" prop="approveStatus" :show-overflow-tooltip="true" width="120">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createdate, '{y}-{m}-{d}') }}</span>
+          <el-tag v-if="scope.row.approveStatus==0">未审批</el-tag>
+          <el-tag v-if="scope.row.approveStatus==1" type="warning">待确认</el-tag>
+          <el-tag v-if="scope.row.approveStatus==3" type="success">已确认1</el-tag>
+          <el-tag v-if="scope.row.approveStatus==2" type="success">已确认2</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="修改人" align="center" prop="updaterCode" :show-overflow-tooltip="true"/>
-      <el-table-column label="修改时间" align="center" prop="updatedate" width="100">
+      <el-table-column label="单元" align="center" prop="unit" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="设备位号" align="center" prop="devNo" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="润滑部位" align="center" prop="lubricatingPart" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="润滑油或油脂加注完成" align="center" prop="fillingComplete"
+                       :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="润滑油泄漏" align="center" prop="lubricatingLeak" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="油杯液位正常" align="center" prop="liquidNormal" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="确认人1" align="center" prop="confirmer1" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="确认人2" align="center" prop="confirmer2" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="完成日期" align="center" prop="confirmationDate" width="150">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.updatedate, '{y}-{m}-{d}') }}</span>
+          <span>{{ parseTime(scope.row.confirmationDate, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="部门编号" align="center" prop="deptId" :show-overflow-tooltip="true"/>
-      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
+      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true" width="180"/>
       <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -248,14 +154,16 @@
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
             v-hasPermi="['pssr:pumpFill:edit']"
-          >修改</el-button>
+          >修改
+          </el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
             v-hasPermi="['pssr:pumpFill:remove']"
-          >删除</el-button>
+          >删除
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -271,128 +179,105 @@
     <!-- 添加或修改机泵润滑油加注确认清单对话框 -->
     <el-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="从表id" prop="subId">
-          <el-input v-model="form.subId" placeholder="请输入从表id" />
-        </el-form-item>
-        <el-form-item label="审批id" prop="approveId">
-          <el-input v-model="form.approveId" placeholder="请输入审批id" />
-        </el-form-item>
         <el-form-item label="单元" prop="unit">
-          <el-input v-model="form.unit" placeholder="请输入单元" />
+          <el-input v-model="form.unit" placeholder="请输入单元"/>
         </el-form-item>
         <el-form-item label="设备位号" prop="devNo">
-          <el-input v-model="form.devNo" placeholder="请输入设备位号" />
+          <el-input v-model="form.devNo" placeholder="请输入设备位号"/>
         </el-form-item>
         <el-form-item label="润滑部位" prop="lubricatingPart">
-          <el-input v-model="form.lubricatingPart" placeholder="请输入润滑部位" />
+          <el-input v-model="form.lubricatingPart" placeholder="请输入润滑部位"/>
         </el-form-item>
         <el-form-item label="润滑油或油脂加注完成" prop="fillingComplete">
-          <el-input v-model="form.fillingComplete" placeholder="请输入润滑油或油脂加注完成" />
+          <el-input v-model="form.fillingComplete" placeholder="请输入润滑油或油脂加注完成"/>
         </el-form-item>
         <el-form-item label="润滑油泄漏" prop="lubricatingLeak">
-          <el-input v-model="form.lubricatingLeak" placeholder="请输入润滑油泄漏" />
+          <el-input v-model="form.lubricatingLeak" placeholder="请输入润滑油泄漏"/>
         </el-form-item>
         <el-form-item label="油杯液位正常" prop="liquidNormal">
-          <el-input v-model="form.liquidNormal" placeholder="请输入油杯液位正常" />
+          <el-input v-model="form.liquidNormal" placeholder="请输入油杯液位正常"/>
         </el-form-item>
         <el-form-item label="确认人1" prop="confirmer1">
-          <el-input v-model="form.confirmer1" placeholder="请输入确认人1" />
+          <el-select v-model="form.confirmer1" filterable placeholder="请选择确认人1">
+            <el-option v-for="user in userOptions"
+                       :label="user.nickName"
+                       :value="user.userId+''"
+                       :key="user.userId"/>
+          </el-select>
         </el-form-item>
         <el-form-item label="确认人2" prop="confirmer2">
-          <el-input v-model="form.confirmer2" placeholder="请输入确认人2" />
-        </el-form-item>
-        <el-form-item label="完成日期" prop="confirmationDate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.confirmationDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择完成日期">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="删除状态" prop="delFlag">
-          <el-input v-model="form.delFlag" placeholder="请输入删除状态" />
-        </el-form-item>
-        <el-form-item label="创建人" prop="createrCode">
-          <el-input v-model="form.createrCode" placeholder="请输入创建人" />
-        </el-form-item>
-        <el-form-item label="创建时间" prop="createdate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.createdate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择创建时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="修改人" prop="updaterCode">
-          <el-input v-model="form.updaterCode" placeholder="请输入修改人" />
-        </el-form-item>
-        <el-form-item label="修改时间" prop="updatedate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.updatedate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择修改时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="部门编号" prop="deptId">
-          <el-input v-model="form.deptId" placeholder="请输入部门编号" />
+          <el-select v-model="form.confirmer2" filterable placeholder="请选择确认人2">
+            <el-option v-for="user in userOptions"
+                       :label="user.nickName"
+                       :value="user.userId+''"
+                       :key="user.userId"/>
+          </el-select>
         </el-form-item>
         <el-form-item label="备注" prop="remarks">
-          <el-input v-model="form.remarks" placeholder="请输入备注" />
+          <el-input v-model="form.remarks" placeholder="请输入备注"/>
         </el-form-item>
-          <el-form-item label="归属部门" prop="deptId">
-              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
-          </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
-      <!-- 用户导入对话框 -->
-      <el-dialog :close-on-click-modal="false" :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
-          <el-upload
-                  ref="upload"
-                  :limit="1"
-                  accept=".xlsx, .xls"
-                  :headers="upload.headers"
-                  :action="upload.url + '?updateSupport=' + upload.updateSupport"
-                  :disabled="upload.isUploading"
-                  :on-progress="handleFileUploadProgress"
-                  :on-success="handleFileSuccess"
-                  :auto-upload="false"
-                  drag
-          >
-              <i class="el-icon-upload"></i>
-              <div class="el-upload__text">
-                  将文件拖到此处,或
-                  <em>点击上传</em>
-              </div>
-              <div class="el-upload__tip" slot="tip">
-                  <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
-                  <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
-              </div>
-              <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
-          </el-upload>
-          <div slot="footer" class="dialog-footer">
-              <el-button type="primary" @click="submitFileForm">确 定</el-button>
-              <el-button @click="upload.open = false">取 消</el-button>
-          </div>
-      </el-dialog>
+    <!-- 用户导入对话框 -->
+    <el-dialog :close-on-click-modal="false" :title="upload.title" :visible.sync="upload.open" width="400px"
+               append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+        <div class="el-upload__tip" slot="tip">
+          <el-checkbox v-model="upload.updateSupport"/>
+          是否更新已经存在的用户数据
+          <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
+        </div>
+        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { listPumpFill, getPumpFill, delPumpFill, addPumpFill, updatePumpFill, exportPumpFill, importTemplate} from "@/api/pssr/pumpFill";
-import { treeselect } from "@/api/system/dept";
-import { getToken } from "@/utils/auth";
+import {
+  addPumpFill,
+  delPumpFill,
+  exportPumpFill,
+  getPumpFill, handleConfirmPumpFill, handleTurnDownPumpFill,
+  importTemplate,
+  listPumpFill,
+  updatePumpFill
+} from "@/api/pssr/pumpFill";
+import {treeselect} from "@/api/system/dept";
+import {getToken} from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {doApprove} from "@/api/pssr/approve";
+import {listUserNoPage} from "@/api/system/user";
 
 export default {
-  dicts:['pssr_approve_status'],
+  dicts: ['pssr_approve_status'],
   name: "PumpFill",
-  components: { Treeselect },
+  components: {Treeselect},
   props: {
     subId: {
       type: Number,
@@ -405,6 +290,7 @@ export default {
   },
   data() {
     return {
+      userOptions: [],
       // 遮罩层
       loading: true,
       // 选中数组
@@ -423,24 +309,24 @@ export default {
       title: "",
       // 部门树选项
       deptOptions: undefined,
-      clientHeight:300,
+      clientHeight: 300,
       // 是否显示弹出层
       open: false,
-        // 用户导入参数
-        upload: {
-            // 是否显示弹出层(用户导入)
-            open: false,
-            // 弹出层标题(用户导入)
-            title: "",
-            // 是否禁用上传
-            isUploading: false,
-            // 是否更新已经存在的用户数据
-            updateSupport: 0,
-            // 设置上传的请求头部
-            headers: { Authorization: "Bearer " + getToken() },
-            // 上传的地址
-            url: process.env.VUE_APP_BASE_API + "/pssr/pumpFill/importData"
-        },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/pssr/pumpFill/importData"
+      },
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -467,22 +353,31 @@ export default {
       form: {},
       // 表单校验
       rules: {
+        confirmer1: [
+          {required: true, message: "确认人1不能为空", trigger: "blur"}
+        ],
+        confirmer2: [
+          {required: true, message: "确认人2不能为空", trigger: "blur"}
+        ],
       }
     };
   },
   watch: {
-        // 根据名称筛选部门树
-        deptName(val) {
-            this.$refs.tree.filter(val);
-        }
-   },
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
   created() {
-      //设置表格高度对应屏幕高度
-      this.$nextTick(() => {
-          this.clientHeight = document.body.clientHeight - 350
-      })
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = document.body.clientHeight - 350
+    })
     this.getList();
     this.getTreeselect();
+    listUserNoPage({}).then(res => {
+      this.userOptions = res.data
+    });
   },
   methods: {
     /** 查询机泵润滑油加注确认清单列表 */
@@ -494,12 +389,12 @@ export default {
         this.loading = false;
       });
     },
-     /** 查询部门下拉树结构 */
-     getTreeselect() {
-          treeselect().then(response => {
-              this.deptOptions = response.data;
-          });
-     },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
     // 取消按钮
     cancel() {
       this.open = false;
@@ -543,7 +438,7 @@ export default {
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
@@ -586,56 +481,106 @@ export default {
     handleDelete(row) {
       const ids = row.id || this.ids;
       this.$confirm('是否确认删除?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delPumpFill(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        })
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delPumpFill(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      })
     },
     /** 导出按钮操作 */
     handleExport() {
       const queryParams = this.queryParams;
       this.$confirm('是否确认导出所有机泵润滑油加注确认清单数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return exportPumpFill(queryParams);
-        }).then(response => {
-          this.download(response.msg);
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return exportPumpFill(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      })
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      importTemplate().then(response => {
+        this.download(response.msg);
+      });
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", {dangerouslyUseHTMLString: true});
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+    /** 确认按钮操作*/
+    handleApprove() {
+      doApprove(this.subId).then(res => {
+        this.msgSuccess("已发起确认流程");
+        this.getList();
+      })
+    },
+    handleConfirmApprove() {
+      let data = {
+        ids: this.ids,
+        subId: this.subId,
+        taskType: this.isApprove
+      }
+      handleConfirmPumpFill(data).then(res => {
+        this.msgSuccess("确认成功");
+        this.getList()
+        this.$emit('refreshHisList');
+      })
+    },
+    handleTurnDown(val) {
+      this.$prompt('请输入驳回原因', '提示', {
+        confirmButtonText: '确认驳回',
+        cancelButtonText: '取消',
+      }).then(({value}) => {
+        let data = {
+          ids: this.ids,
+          subId: this.subId,
+          remarks: value
+        }
+        handleTurnDownPumpFill(data).then(res => {
+          this.msgSuccess("驳回成功");
         })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '取消驳回'
+        });
+      });
     },
-      /** 导入按钮操作 */
-      handleImport() {
-          this.upload.title = "用户导入";
-          this.upload.open = true;
-      },
-      /** 下载模板操作 */
-      importTemplate() {
-          importTemplate().then(response => {
-              this.download(response.msg);
-          });
-      },
-      // 文件上传中处理
-      handleFileUploadProgress(event, file, fileList) {
-          this.upload.isUploading = true;
-      },
-      // 文件上传成功处理
-      handleFileSuccess(response, file, fileList) {
-          this.upload.open = false;
-          this.upload.isUploading = false;
-          this.$refs.upload.clearFiles();
-          this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
-          this.getList();
-      },
-      // 提交上传文件
-      submitFileForm() {
-          this.$refs.upload.submit();
+    userFormat(userId) {
+      for (let item of this.userOptions) {
+        if (item.userId == userId) {
+          return item.nickName
+        }
       }
+    },
   }
 };
 </script>

+ 280 - 315
ui/src/views/pssr/pumpOverhaul/index.vue

@@ -1,24 +1,6 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="从表id" prop="subId">
-        <el-input
-          v-model="queryParams.subId"
-          placeholder="请输入从表id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="审批id" prop="approveId">
-        <el-input
-          v-model="queryParams.approveId"
-          placeholder="请输入审批id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item label="单元" prop="unit">
         <el-input
           v-model="queryParams.unit"
@@ -37,102 +19,6 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="正确回装" prop="backLoading">
-        <el-input
-          v-model="queryParams.backLoading"
-          placeholder="请输入正确回装"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="设备检修完成" prop="overhaulDone">
-        <el-input
-          v-model="queryParams.overhaulDone"
-          placeholder="请输入设备检修完成"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="确认人1" prop="confirmer1">
-        <el-input
-          v-model="queryParams.confirmer1"
-          placeholder="请输入确认人1"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="确认人2" prop="confirmer2">
-        <el-input
-          v-model="queryParams.confirmer2"
-          placeholder="请输入确认人2"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="完成日期" prop="confirmationDate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.confirmationDate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择完成日期">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="创建人" prop="createrCode">
-        <el-input
-          v-model="queryParams.createrCode"
-          placeholder="请输入创建人"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="创建时间" prop="createdate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.createdate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择创建时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="修改人" prop="updaterCode">
-        <el-input
-          v-model="queryParams.updaterCode"
-          placeholder="请输入修改人"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="修改时间" prop="updatedate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.updatedate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择修改时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="部门编号" prop="deptId">
-        <el-input
-          v-model="queryParams.deptId"
-          placeholder="请输入部门编号"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="备注" prop="remarks">
-        <el-input
-          v-model="queryParams.remarks"
-          placeholder="请输入备注"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -147,7 +33,9 @@
           size="mini"
           @click="handleAdd"
           v-hasPermi="['pssr:pumpOverhaul:add']"
-        >新增</el-button>
+          v-if="isApprove==0"
+        >新增
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -157,7 +45,9 @@
           :disabled="single"
           @click="handleUpdate"
           v-hasPermi="['pssr:pumpOverhaul:edit']"
-        >修改</el-button>
+          v-if="isApprove==0"
+        >修改
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -167,17 +57,21 @@
           :disabled="multiple"
           @click="handleDelete"
           v-hasPermi="['pssr:pumpOverhaul:remove']"
-        >删除</el-button>
+          v-if="isApprove==0"
+        >删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+          v-hasPermi="['pssr:pumpOverhaul:edit']"
+          v-if="isApprove==0"
+        >导入
+        </el-button>
       </el-col>
-        <el-col :span="1.5">
-            <el-button
-                    type="info"
-                    icon="el-icon-upload2"
-                    size="mini"
-                    @click="handleImport"
-                    v-hasPermi="['pssr:pumpOverhaul:edit']"
-            >导入</el-button>
-        </el-col>
       <el-col :span="1.5">
         <el-button
           type="warning"
@@ -185,41 +79,71 @@
           size="mini"
           @click="handleExport"
           v-hasPermi="['pssr:pumpOverhaul:export']"
-        >导出</el-button>
+          v-if="isApprove==0"
+        >导出
+        </el-button>
       </el-col>
-	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-s-promotion"
+          size="mini"
+          @click="handleApprove"
+          v-if="isApprove==0"
+          v-hasPermi="['pssr:pumpOverhaul:edit']"
+        >发起审批
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-check"
+          size="mini"
+          v-if="isApprove==4||isApprove==5"
+          @click="handleConfirmApprove"
+          v-hasPermi="['pssr:pumpOverhaul:edit']"
+        >确认
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-refresh-left"
+          size="mini"
+          v-if="isApprove==2"
+          :disabled="multiple"
+          @click="handleTurnDown"
+          v-hasPermi="['pssr:pumpOverhaul:edit']"
+        >驳回
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="pumpOverhaulList" @selection-change="handleSelectionChange" :height="clientHeight" border>
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="唯一标识ID" align="center" prop="id" :show-overflow-tooltip="true"/>
-      <el-table-column label="从表id" align="center" prop="subId" :show-overflow-tooltip="true"/>
-      <el-table-column label="审批id" align="center" prop="approveId" :show-overflow-tooltip="true"/>
-      <el-table-column label="单元" align="center" prop="unit" :show-overflow-tooltip="true"/>
-      <el-table-column label="设备位号" align="center" prop="devNo" :show-overflow-tooltip="true"/>
-      <el-table-column label="正确回装" align="center" prop="backLoading" :show-overflow-tooltip="true"/>
-      <el-table-column label="设备检修完成" align="center" prop="overhaulDone" :show-overflow-tooltip="true"/>
-      <el-table-column label="确认人1" align="center" prop="confirmer1" :show-overflow-tooltip="true"/>
-      <el-table-column label="确认人2" align="center" prop="confirmer2" :show-overflow-tooltip="true"/>
-      <el-table-column label="完成日期" align="center" prop="confirmationDate" width="100">
+    <el-table v-loading="loading" :data="pumpOverhaulList" @selection-change="handleSelectionChange"
+              :height="clientHeight" border>
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="审批状态" align="center" prop="approveStatus" :show-overflow-tooltip="true" width="180">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.confirmationDate, '{y}-{m}-{d}') }}</span>
+          <el-tag v-if="scope.row.approveStatus==0">未审批</el-tag>
+          <el-tag v-if="scope.row.approveStatus==1" type="warning">待确认</el-tag>
+          <el-tag v-if="scope.row.approveStatus==3" type="success">已确认1</el-tag>
+          <el-tag v-if="scope.row.approveStatus==2" type="success">已确认2</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="创建人" align="center" prop="createrCode" :show-overflow-tooltip="true"/>
-      <el-table-column label="创建时间" align="center" prop="createdate" width="100">
+      <el-table-column label="单元" align="center" prop="unit" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="设备位号" align="center" prop="devNo" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="正确回装" align="center" prop="backLoading" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="设备检修完成" align="center" prop="overhaulDone" :show-overflow-tooltip="true"
+                       width="180"/>
+      <el-table-column label="确认人1" align="center" prop="confirmer1" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="确认人2" align="center" prop="confirmer2" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="完成日期" align="center" prop="confirmationDate" width="150">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createdate, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="修改人" align="center" prop="updaterCode" :show-overflow-tooltip="true"/>
-      <el-table-column label="修改时间" align="center" prop="updatedate" width="100">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.updatedate, '{y}-{m}-{d}') }}</span>
+          <span>{{ parseTime(scope.row.confirmationDate, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="部门编号" align="center" prop="deptId" :show-overflow-tooltip="true"/>
-      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
+      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true" width="180"/>
       <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -228,14 +152,16 @@
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
             v-hasPermi="['pssr:pumpOverhaul:edit']"
-          >修改</el-button>
+          >修改
+          </el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
             v-hasPermi="['pssr:pumpOverhaul:remove']"
-          >删除</el-button>
+          >删除
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -251,122 +177,101 @@
     <!-- 添加或修改机泵检修完成确认清单对话框 -->
     <el-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="从表id" prop="subId">
-          <el-input v-model="form.subId" placeholder="请输入从表id" />
-        </el-form-item>
-        <el-form-item label="审批id" prop="approveId">
-          <el-input v-model="form.approveId" placeholder="请输入审批id" />
-        </el-form-item>
         <el-form-item label="单元" prop="unit">
-          <el-input v-model="form.unit" placeholder="请输入单元" />
+          <el-input v-model="form.unit" placeholder="请输入单元"/>
         </el-form-item>
         <el-form-item label="设备位号" prop="devNo">
-          <el-input v-model="form.devNo" placeholder="请输入设备位号" />
+          <el-input v-model="form.devNo" placeholder="请输入设备位号"/>
         </el-form-item>
         <el-form-item label="正确回装" prop="backLoading">
-          <el-input v-model="form.backLoading" placeholder="请输入正确回装" />
+          <el-input v-model="form.backLoading" placeholder="请输入正确回装"/>
         </el-form-item>
         <el-form-item label="设备检修完成" prop="overhaulDone">
-          <el-input v-model="form.overhaulDone" placeholder="请输入设备检修完成" />
+          <el-input v-model="form.overhaulDone" placeholder="请输入设备检修完成"/>
         </el-form-item>
         <el-form-item label="确认人1" prop="confirmer1">
-          <el-input v-model="form.confirmer1" placeholder="请输入确认人1" />
+          <el-select v-model="form.confirmer1" filterable placeholder="请选择确认人1">
+            <el-option v-for="user in userOptions"
+                       :label="user.nickName"
+                       :value="user.userId+''"
+                       :key="user.userId"/>
+          </el-select>
         </el-form-item>
         <el-form-item label="确认人2" prop="confirmer2">
-          <el-input v-model="form.confirmer2" placeholder="请输入确认人2" />
-        </el-form-item>
-        <el-form-item label="完成日期" prop="confirmationDate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.confirmationDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择完成日期">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="删除状态" prop="delFlag">
-          <el-input v-model="form.delFlag" placeholder="请输入删除状态" />
-        </el-form-item>
-        <el-form-item label="创建人" prop="createrCode">
-          <el-input v-model="form.createrCode" placeholder="请输入创建人" />
-        </el-form-item>
-        <el-form-item label="创建时间" prop="createdate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.createdate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择创建时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="修改人" prop="updaterCode">
-          <el-input v-model="form.updaterCode" placeholder="请输入修改人" />
-        </el-form-item>
-        <el-form-item label="修改时间" prop="updatedate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.updatedate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择修改时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="部门编号" prop="deptId">
-          <el-input v-model="form.deptId" placeholder="请输入部门编号" />
+          <el-select v-model="form.confirmer2" filterable placeholder="请选择确认人2">
+            <el-option v-for="user in userOptions"
+                       :label="user.nickName"
+                       :value="user.userId+''"
+                       :key="user.userId"/>
+          </el-select>
         </el-form-item>
         <el-form-item label="备注" prop="remarks">
-          <el-input v-model="form.remarks" placeholder="请输入备注" />
+          <el-input v-model="form.remarks" placeholder="请输入备注"/>
         </el-form-item>
-          <el-form-item label="归属部门" prop="deptId">
-              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
-          </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
-      <!-- 用户导入对话框 -->
-      <el-dialog :close-on-click-modal="false" :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
-          <el-upload
-                  ref="upload"
-                  :limit="1"
-                  accept=".xlsx, .xls"
-                  :headers="upload.headers"
-                  :action="upload.url + '?updateSupport=' + upload.updateSupport"
-                  :disabled="upload.isUploading"
-                  :on-progress="handleFileUploadProgress"
-                  :on-success="handleFileSuccess"
-                  :auto-upload="false"
-                  drag
-          >
-              <i class="el-icon-upload"></i>
-              <div class="el-upload__text">
-                  将文件拖到此处,或
-                  <em>点击上传</em>
-              </div>
-              <div class="el-upload__tip" slot="tip">
-                  <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
-                  <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
-              </div>
-              <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
-          </el-upload>
-          <div slot="footer" class="dialog-footer">
-              <el-button type="primary" @click="submitFileForm">确 定</el-button>
-              <el-button @click="upload.open = false">取 消</el-button>
-          </div>
-      </el-dialog>
+    <!-- 用户导入对话框 -->
+    <el-dialog :close-on-click-modal="false" :title="upload.title" :visible.sync="upload.open" width="400px"
+               append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+        <div class="el-upload__tip" slot="tip">
+          <el-checkbox v-model="upload.updateSupport"/>
+          是否更新已经存在的用户数据
+          <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
+        </div>
+        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { listPumpOverhaul, getPumpOverhaul, delPumpOverhaul, addPumpOverhaul, updatePumpOverhaul, exportPumpOverhaul, importTemplate} from "@/api/pssr/pumpOverhaul";
-import { treeselect } from "@/api/system/dept";
-import { getToken } from "@/utils/auth";
+import {
+  addPumpOverhaul,
+  delPumpOverhaul,
+  exportPumpOverhaul,
+  getPumpOverhaul,
+  handleConfirmPumpOverhaul,
+  handleTurnDownPumpOverhaul,
+  importTemplate,
+  listPumpOverhaul,
+  updatePumpOverhaul
+} from "@/api/pssr/pumpOverhaul";
+import {treeselect} from "@/api/system/dept";
+import {getToken} from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {doApprove} from "@/api/pssr/approve";
+import {listUserNoPage} from "@/api/system/user";
 
 export default {
-  dicts:['pssr_approve_status'],
+  dicts: ['pssr_approve_status'],
   name: "PumpOverhaul",
-  components: { Treeselect },
+  components: {Treeselect},
   props: {
     subId: {
       type: Number,
@@ -379,6 +284,7 @@ export default {
   },
   data() {
     return {
+      userOptions: [],
       // 遮罩层
       loading: true,
       // 选中数组
@@ -397,24 +303,24 @@ export default {
       title: "",
       // 部门树选项
       deptOptions: undefined,
-      clientHeight:300,
+      clientHeight: 300,
       // 是否显示弹出层
       open: false,
-        // 用户导入参数
-        upload: {
-            // 是否显示弹出层(用户导入)
-            open: false,
-            // 弹出层标题(用户导入)
-            title: "",
-            // 是否禁用上传
-            isUploading: false,
-            // 是否更新已经存在的用户数据
-            updateSupport: 0,
-            // 设置上传的请求头部
-            headers: { Authorization: "Bearer " + getToken() },
-            // 上传的地址
-            url: process.env.VUE_APP_BASE_API + "/pssr/pumpOverhaul/importData"
-        },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/pssr/pumpOverhaul/importData"
+      },
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -439,22 +345,31 @@ export default {
       form: {},
       // 表单校验
       rules: {
+        confirmer1: [
+          {required: true, message: "确认人1不能为空", trigger: "blur"}
+        ],
+        confirmer2: [
+          {required: true, message: "确认人2不能为空", trigger: "blur"}
+        ],
       }
     };
   },
   watch: {
-        // 根据名称筛选部门树
-        deptName(val) {
-            this.$refs.tree.filter(val);
-        }
-   },
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
   created() {
-      //设置表格高度对应屏幕高度
-      this.$nextTick(() => {
-          this.clientHeight = document.body.clientHeight - 350
-      })
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = document.body.clientHeight - 350
+    })
     this.getList();
     this.getTreeselect();
+    listUserNoPage({}).then(res => {
+      this.userOptions = res.data
+    });
   },
   methods: {
     /** 查询机泵检修完成确认清单列表 */
@@ -466,12 +381,12 @@ export default {
         this.loading = false;
       });
     },
-     /** 查询部门下拉树结构 */
-     getTreeselect() {
-          treeselect().then(response => {
-              this.deptOptions = response.data;
-          });
-     },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
     // 取消按钮
     cancel() {
       this.open = false;
@@ -513,7 +428,7 @@ export default {
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
@@ -556,56 +471,106 @@ export default {
     handleDelete(row) {
       const ids = row.id || this.ids;
       this.$confirm('是否确认删除?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delPumpOverhaul(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        })
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delPumpOverhaul(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      })
     },
     /** 导出按钮操作 */
     handleExport() {
       const queryParams = this.queryParams;
       this.$confirm('是否确认导出所有机泵检修完成确认清单数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return exportPumpOverhaul(queryParams);
-        }).then(response => {
-          this.download(response.msg);
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return exportPumpOverhaul(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      })
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      importTemplate().then(response => {
+        this.download(response.msg);
+      });
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", {dangerouslyUseHTMLString: true});
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+    /** 确认按钮操作*/
+    handleApprove() {
+      doApprove(this.subId).then(res => {
+        this.msgSuccess("已发起确认流程");
+        this.getList();
+      })
+    },
+    handleConfirmApprove() {
+      let data = {
+        ids: this.ids,
+        subId: this.subId,
+        taskType: this.isApprove
+      }
+      handleConfirmPumpOverhaul(data).then(res => {
+        this.msgSuccess("确认成功");
+        this.getList()
+        this.$emit('refreshHisList');
+      })
+    },
+    handleTurnDown(val) {
+      this.$prompt('请输入驳回原因', '提示', {
+        confirmButtonText: '确认驳回',
+        cancelButtonText: '取消',
+      }).then(({value}) => {
+        let data = {
+          ids: this.ids,
+          subId: this.subId,
+          remarks: value
+        }
+        handleTurnDownPumpOverhaul(data).then(res => {
+          this.msgSuccess("驳回成功");
         })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '取消驳回'
+        });
+      });
     },
-      /** 导入按钮操作 */
-      handleImport() {
-          this.upload.title = "用户导入";
-          this.upload.open = true;
-      },
-      /** 下载模板操作 */
-      importTemplate() {
-          importTemplate().then(response => {
-              this.download(response.msg);
-          });
-      },
-      // 文件上传中处理
-      handleFileUploadProgress(event, file, fileList) {
-          this.upload.isUploading = true;
-      },
-      // 文件上传成功处理
-      handleFileSuccess(response, file, fileList) {
-          this.upload.open = false;
-          this.upload.isUploading = false;
-          this.$refs.upload.clearFiles();
-          this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
-          this.getList();
-      },
-      // 提交上传文件
-      submitFileForm() {
-          this.$refs.upload.submit();
+    userFormat(userId) {
+      for (let item of this.userOptions) {
+        if (item.userId == userId) {
+          return item.nickName
+        }
       }
+    },
   }
 };
 </script>