Browse Source

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

jiangbiao 10 tháng trước cách đây
mục cha
commit
0966b481b3
66 tập tin đã thay đổi với 3694 bổ sung1936 xóa
  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>