Explorar o código

PSSR:
-添加锁开锁关创建流程

jiangbiao hai 8 meses
pai
achega
c4cee2951d

+ 4 - 0
master/src/main/java/com/ruoyi/config/ActivitiConfig.java

@@ -169,6 +169,10 @@ public class ActivitiConfig {
         Resource pssr2 = resourceLoader.getResource("classpath:/processes/pssr/pssr2confirm.bpmn"); //加载流程图资源文件
         pssr2Db.enableDuplicateFiltering().addInputStream(pssr2.getFilename(), pssr2.getInputStream()).name("PSSR双确认人确认流程").deploy();//按流程id部署
 
+        DeploymentBuilder pssr3Db = repositoryService().createDeployment();
+        Resource pssr3 = resourceLoader.getResource("classpath:/processes/pssr/pssr3confirm.bpmn"); //加载流程图资源文件
+        pssr3Db.enableDuplicateFiltering().addInputStream(pssr3.getFilename(), pssr3.getInputStream()).name("PSSR双确认人确认流程").deploy();//按流程id部署
+
     }
 }
 

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

@@ -71,6 +71,9 @@ public class TPssrApproveController extends BaseController {
 
     @Autowired
     private ITPssrBlindService tPssrBlindService;
+
+    @Autowired
+    private ITPssrLockService tPssrLockService;
     @Autowired
     private ITPssrPipeService tPssrPipeService;
 
@@ -178,6 +181,7 @@ public class TPssrApproveController extends BaseController {
             case "16":
                 break;
             case "17":
+                do17Approve(tPssrSubcontent);
                 break;
             case "18":
                 break;
@@ -228,6 +232,8 @@ public class TPssrApproveController extends BaseController {
             tPssrSubcontent.setApproveStatus(2L);
             tPssrSubcontentService.updateTPssrSubcontent(tPssrSubcontent);
             tPssrApproveService.updateTPssrApprove(approve);
+        }else{
+            // todo驳回操作,修改子表状态
         }
         //处理流程节点
         Map<String, Object> param = new HashMap<>();
@@ -504,6 +510,99 @@ public class TPssrApproveController extends BaseController {
 
     }
 
+    public void do17Approve(TPssrSubcontent sub){
+        String userId = getUserId().toString();
+        //修改状态
+        TPssrLock tPssrLock = new TPssrLock();
+        tPssrLock.setApproveStatus(0L);
+        tPssrLock.setSubId(sub.getId());
+        Set<String> unlockers = new HashSet<>();
+        Set<String> lockeders = new HashSet<>();
+        Set<String> confirmers = new HashSet<>();
+        for (TPssrLock item : tPssrLockService.selectTPssrLockList(tPssrLock)) {
+            item.setApproveStatus(1L);
+            item.setUpdatedate(new Date());
+            item.setUpdaterCode(userId);
+            tPssrLockService.updateTPssrLock(item);
+
+            // 拆锁人员
+            unlockers.add(item.getUnlocker());
+
+            // 上锁人员
+            lockeders.add(item.getLockeder());
+
+            // 确认人
+            confirmers.add(item.getConfirm());
+        }
+
+        TPssrApprove exist = new TPssrApprove();
+        exist.setSubId(sub.getId());
+        List<TPssrApprove> tPssrApproves = tPssrApproveService.selectTPssrApproveList(exist);
+        if (CollectionUtil.isEmpty(tPssrApproves)) {
+            //新增审批数据
+            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);
+
+            // 开始申请流程
+            long businessKey = approve.getApproveId();
+            //开始工作流、监听
+            Authentication.setAuthenticatedUserId(userId);//设置当前申请人
+            Map<String, Object> variables = new HashMap<>();
+            variables.put("applyUser", userId);
+            variables.put("confirmUsers1", new ArrayList<>(unlockers));
+            variables.put("confirmUsers2", new ArrayList<>(lockeders));
+            variables.put("confirmUsers3", new ArrayList<>(confirmers));
+            variables.put("chargePerson", sub.getConfirm());
+            //采用key来启动流程定义并设置流程变量,返回流程实例
+            ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr3confirm", String.valueOf(businessKey), variables);
+            approve.setProcessId(pi.getProcessInstanceId());
+            tPssrApproveService.updateTPssrApprove(approve);
+        }else{
+            // 已存在流程时,删除旧流程,重新发起
+            TPssrApprove approve = tPssrApproves.get(0);
+            runtimeService.deleteProcessInstance(approve.getProcessId(), "pssr3confirm");
+            historyService.deleteHistoricProcessInstance(approve.getProcessId());
+
+            tPssrLock = new TPssrLock();
+            tPssrLock.setApproveStatus(1L);
+            tPssrLock.setSubId(sub.getId());
+            for (TPssrLock item : tPssrLockService.selectTPssrLockList(tPssrLock)) {
+
+
+                // 拆锁人员
+                unlockers.add(item.getUnlocker());
+
+                // 上锁人员
+                lockeders.add(item.getLockeder());
+
+                // 确认人
+                confirmers.add(item.getConfirm());
+            }
+
+            // 开始申请流程
+            long businessKey = approve.getApproveId();
+            //开始工作流、监听
+            Authentication.setAuthenticatedUserId(userId);//设置当前申请人
+            Map<String, Object> variables = new HashMap<>();
+            variables.put("applyUser", userId);
+            variables.put("confirmUsers1", new ArrayList<>(unlockers));
+            variables.put("confirmUsers2", new ArrayList<>(lockeders));
+            variables.put("confirmUsers3", new ArrayList<>(confirmers));
+            variables.put("chargePerson", sub.getConfirm());
+            //采用key来启动流程定义并设置流程变量,返回流程实例
+            ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr3confirm", String.valueOf(businessKey), variables);
+            approve.setProcessId(pi.getProcessInstanceId());
+            tPssrApproveService.updateTPssrApprove(approve);
+        }
+
+    }
+
     // 盲板审批流程发起申请
     public void do20Approve(TPssrSubcontent sub) {
         String userId = getUserId().toString();

+ 91 - 29
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrLockController.java

@@ -1,24 +1,20 @@
 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.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.project.pssr.domain.TPssrLock;
-import com.ruoyi.project.pssr.service.ITPssrLockService;
 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.TPssrLock;
+import com.ruoyi.project.pssr.service.ITPssrApproveService;
+import com.ruoyi.project.pssr.service.ITPssrLockService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 锁开锁关阀门状态Controller
@@ -28,18 +24,19 @@ import com.ruoyi.framework.web.page.TableDataInfo;
  */
 @RestController
 @RequestMapping("/pssr/lock")
-public class TPssrLockController extends BaseController
-{
+public class TPssrLockController extends BaseController {
     @Autowired
     private ITPssrLockService tPssrLockService;
 
+    @Autowired
+    private ITPssrApproveService tPssrApproveService;
+
     /**
      * 查询锁开锁关阀门状态列表
      */
     @PreAuthorize("@ss.hasPermi('pssr:lock:list')")
     @GetMapping("/list")
-    public TableDataInfo list(TPssrLock tPssrLock)
-    {
+    public TableDataInfo list(TPssrLock tPssrLock) {
         startPage();
         List<TPssrLock> list = tPssrLockService.selectTPssrLockList(tPssrLock);
         return getDataTable(list);
@@ -51,8 +48,7 @@ public class TPssrLockController extends BaseController
     @PreAuthorize("@ss.hasPermi('pssr:lock:export')")
     @Log(title = "锁开锁关阀门状态", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
-    public AjaxResult export(TPssrLock tPssrLock)
-    {
+    public AjaxResult export(TPssrLock tPssrLock) {
         List<TPssrLock> list = tPssrLockService.selectTPssrLockList(tPssrLock);
         ExcelUtil<TPssrLock> util = new ExcelUtil<TPssrLock>(TPssrLock.class);
         return util.exportExcel(list, "lock");
@@ -63,8 +59,7 @@ public class TPssrLockController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('pssr:lock:query')")
     @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") Long id)
-    {
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
         return AjaxResult.success(tPssrLockService.selectTPssrLockById(id));
     }
 
@@ -74,8 +69,8 @@ public class TPssrLockController extends BaseController
     @PreAuthorize("@ss.hasPermi('pssr:lock:add')")
     @Log(title = "锁开锁关阀门状态", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody TPssrLock tPssrLock)
-    {
+    public AjaxResult add(@RequestBody TPssrLock tPssrLock) {
+        tPssrLock.setApproveStatus(0L);
         return toAjax(tPssrLockService.insertTPssrLock(tPssrLock));
     }
 
@@ -85,19 +80,86 @@ public class TPssrLockController extends BaseController
     @PreAuthorize("@ss.hasPermi('pssr:lock:edit')")
     @Log(title = "锁开锁关阀门状态", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@RequestBody TPssrLock tPssrLock)
-    {
+    public AjaxResult edit(@RequestBody TPssrLock tPssrLock) {
         return toAjax(tPssrLockService.updateTPssrLock(tPssrLock));
     }
 
+
+    /**
+     * 锁开锁关确认
+     */
+    @PreAuthorize("@ss.hasPermi('pssr:lock:edit')")
+    @Log(title = "锁开锁关阀门状态", businessType = BusinessType.UPDATE)
+    @PutMapping("/confirmLock")
+    public AjaxResult confirmLock(@RequestBody TPssrLock tPssrLock) {
+        long queryStatus = 0;
+        long approveStatus = 0;
+        if (tPssrLock.getTaskType() == 4) {
+            //拆锁确认
+            queryStatus = 1;
+            approveStatus = 3;
+        } else if (tPssrLock.getTaskType() == 5) {
+            //上锁确认
+            queryStatus = 3;
+            approveStatus = 4;
+        } else if (tPssrLock.getTaskType() == 6) {
+            //确认人确认
+            queryStatus = 4;
+            approveStatus = 2;
+        }
+        // 修改锁开锁关状态
+        if (tPssrLock.getIds() != null && tPssrLock.getIds().length > 0) {
+            for (Long id : tPssrLock.getIds()) {
+                TPssrLock item = tPssrLockService.selectTPssrLockById(id);
+                item.setApproveStatus(approveStatus);
+                tPssrLockService.updateTPssrLock(item);
+            }
+        } else {
+            TPssrLock lock = new TPssrLock();
+            lock.setSubId(tPssrLock.getSubId());
+            lock.setApproveStatus(queryStatus);
+            for (TPssrLock item : tPssrLockService.selectTPssrLockList(lock)) {
+                item.setApproveStatus(approveStatus);
+                tPssrLockService.updateTPssrLock(item);
+            }
+        }
+        //查询当前待审批的确认人
+        TPssrLock entity = new TPssrLock();
+        entity.setSubId(tPssrLock.getSubId());
+        entity.setApproveStatus(queryStatus);
+        for (TPssrLock item : tPssrLockService.selectTPssrLockList(entity)) {
+            if (tPssrLock.getTaskType() == 4) {
+                if (item.getUnlocker().equals(getUserId().toString())) {
+                    return AjaxResult.success();
+                }
+            } else if (tPssrLock.getTaskType() == 5) {
+                if (item.getLockeder().equals(getUserId().toString())) {
+                    return AjaxResult.success();
+                }
+            } else if (tPssrLock.getTaskType() == 6) {
+                if (item.getConfirm().equals(getUserId().toString())) {
+                    return AjaxResult.success();
+                }
+            }
+        }
+
+        //无待审批任务结束当前用户流程
+        TPssrApprove approve = new TPssrApprove();
+        approve.setSubId(tPssrLock.getSubId());
+        // 因为流程关系所以approve一定会有且只有一条数据
+        TPssrApprove tPssrApprove = tPssrApproveService.selectTPssrApproveList(approve).get(0);
+        TPssrApproveController.handleConfirmApprove(tPssrApprove, getUserId().toString());
+        return AjaxResult.success();
+
+    }
+
     /**
      * 删除锁开锁关阀门状态
      */
     @PreAuthorize("@ss.hasPermi('pssr:lock:remove')")
     @Log(title = "锁开锁关阀门状态", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable Long[] ids)
-    {
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
         return toAjax(tPssrLockService.deleteTPssrLockByIds(ids));
     }
 }

+ 20 - 0
master/src/main/java/com/ruoyi/project/pssr/domain/TPssrLock.java

@@ -134,6 +134,26 @@ public class TPssrLock 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)
     {
         this.id = id;

+ 1 - 1
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsFirstplanController.java

@@ -74,7 +74,7 @@ public class TTsFirstplanController extends BaseController {
             TTsNew tsNew = tTsNewService.selectTTsNewById(firstplan.getNewId());
             firstplan.setStaffId(tsNew.getStaffId());
         }
-        startPage();
+        //startPage();
         return getDataTable(list);
     }
 

+ 1 - 1
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsFlplanController.java

@@ -104,7 +104,7 @@ public class TTsFlplanController extends BaseController {
                 list.get(i).setStudy(0);
             }
         }
-        startPage();
+        //startPage();
         return getDataTable(list);
     }
 

+ 1 - 1
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsFtplanController.java

@@ -104,7 +104,7 @@ public class TTsFtplanController extends BaseController {
                 list.get(i).setStudy(0);
             }
         }
-        startPage();
+        //startPage();
         return getDataTable(list);
     }
 

+ 1 - 1
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsLjplanController.java

@@ -105,7 +105,7 @@ public class TTsLjplanController extends BaseController {
             }
         }
 
-        startPage();
+        //startPage();
         return getDataTable(list);
     }
 

+ 1 - 1
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsYsplanController.java

@@ -105,7 +105,7 @@ public class TTsYsplanController extends BaseController {
             }
         }
 
-        startPage();
+        //startPage();
         return getDataTable(list);
     }
 

+ 115 - 0
master/src/main/resources/processes/pssr/pssr3confirm.bpmn

@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
+  <process id="pssr3confirm" name="PSSR三确认人确认流程" isExecutable="true">
+    <startEvent id="applyUser" name="Start" activiti:initiator="${applyUser}"></startEvent>
+    <sequenceFlow id="flow1" sourceRef="applyUser" targetRef="confirmUser1"></sequenceFlow>
+    <userTask id="confirmUser1" name="确认人1" activiti:assignee="${confirmUser1}">
+        <extensionElements>
+            <!-- 定义多实例任务,使用集合变量 confirmUsers 动态生成 -->
+            <activiti:multiInstanceLoopCharacteristics isSequential="false" activiti:collection="confirmUsers1" activiti:elementVariable="confirmUser1">
+                <completionCondition>${nrOfCompletedInstances == nrOfInstances}</completionCondition>
+            </activiti:multiInstanceLoopCharacteristics>
+        </extensionElements>
+    </userTask>
+    <userTask id="confirmUser2" name="确认人2" activiti:assignee="${confirmUser2}">
+        <extensionElements>
+            <!-- 定义多实例任务,使用集合变量 confirmUsers 动态生成 -->
+            <activiti:multiInstanceLoopCharacteristics isSequential="false" activiti:collection="confirmUsers2" activiti:elementVariable="confirmUser2">
+                <completionCondition>${nrOfCompletedInstances == nrOfInstances}</completionCondition>
+            </activiti:multiInstanceLoopCharacteristics>
+        </extensionElements>
+    </userTask>
+    <sequenceFlow id="flow2" sourceRef="confirmUser1" targetRef="confirmUser2"></sequenceFlow>
+    <userTask id="confirmUser3" name="确认人3" activiti:assignee="${confirmUser3}">
+        <extensionElements>
+            <!-- 定义多实例任务,使用集合变量 confirmUsers 动态生成 -->
+            <activiti:multiInstanceLoopCharacteristics isSequential="false" activiti:collection="confirmUsers3" activiti:elementVariable="confirmUser3">
+                <completionCondition>${nrOfCompletedInstances == nrOfInstances}</completionCondition>
+            </activiti:multiInstanceLoopCharacteristics>
+        </extensionElements>
+    </userTask>
+    <sequenceFlow id="flow3" sourceRef="confirmUser2" targetRef="confirmUser3"></sequenceFlow>
+    <userTask id="chargePerson" name="检查内容负责人"  activiti:assignee="#{chargePerson}"></userTask>
+    <sequenceFlow id="flow4" sourceRef="confirmUser3" targetRef="chargePerson"></sequenceFlow>
+    <endEvent id="endevent1" name="End"></endEvent>
+    <sequenceFlow id="flow5" sourceRef="chargePerson" targetRef="endevent1">
+      <documentation>${condition == 1}</documentation>
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 1}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="flow6" sourceRef="chargePerson" targetRef="confirmUser3">
+      <documentation>${condition == 0}</documentation>
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 0}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="flow7" sourceRef="chargePerson" targetRef="confirmUser2">
+      <documentation>${condition == 2}</documentation>
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 2}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="flow8" sourceRef="chargePerson" targetRef="confirmUser1">
+      <documentation>${condition == 3}</documentation>
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 3}]]></conditionExpression>
+    </sequenceFlow>
+  </process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_pssr3confirm">
+    <bpmndi:BPMNPlane bpmnElement="pssr3confirm" id="BPMNPlane_pssr3confirm">
+      <bpmndi:BPMNShape bpmnElement="applyUser" id="BPMNShape_applyUser">
+        <omgdc:Bounds height="35.0" width="35.0" x="160.0" y="250.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="confirmUser1" id="BPMNShape_confirmUser1">
+        <omgdc:Bounds height="55.0" width="105.0" x="240.0" y="240.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="confirmUser2" id="BPMNShape_confirmUser2">
+        <omgdc:Bounds height="55.0" width="105.0" x="390.0" y="240.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="confirmUser3" id="BPMNShape_confirmUser3">
+        <omgdc:Bounds height="55.0" width="105.0" x="540.0" y="240.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="chargePerson" id="BPMNShape_chargePerson">
+        <omgdc:Bounds height="55.0" width="105.0" x="690.0" y="240.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
+        <omgdc:Bounds height="35.0" width="35.0" x="840.0" y="250.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
+        <omgdi:waypoint x="195.0" y="267.0"></omgdi:waypoint>
+        <omgdi:waypoint x="240.0" y="267.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
+        <omgdi:waypoint x="345.0" y="267.0"></omgdi:waypoint>
+        <omgdi:waypoint x="390.0" y="267.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
+        <omgdi:waypoint x="495.0" y="267.0"></omgdi:waypoint>
+        <omgdi:waypoint x="540.0" y="267.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
+        <omgdi:waypoint x="645.0" y="267.0"></omgdi:waypoint>
+        <omgdi:waypoint x="690.0" y="267.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5">
+        <omgdi:waypoint x="795.0" y="267.0"></omgdi:waypoint>
+        <omgdi:waypoint x="840.0" y="267.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6">
+        <omgdi:waypoint x="742.0" y="295.0"></omgdi:waypoint>
+        <omgdi:waypoint x="742.0" y="331.0"></omgdi:waypoint>
+        <omgdi:waypoint x="655.0" y="331.0"></omgdi:waypoint>
+        <omgdi:waypoint x="592.0" y="331.0"></omgdi:waypoint>
+        <omgdi:waypoint x="592.0" y="295.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow7" id="BPMNEdge_flow7">
+        <omgdi:waypoint x="742.0" y="240.0"></omgdi:waypoint>
+        <omgdi:waypoint x="742.0" y="209.0"></omgdi:waypoint>
+        <omgdi:waypoint x="591.0" y="209.0"></omgdi:waypoint>
+        <omgdi:waypoint x="442.0" y="209.0"></omgdi:waypoint>
+        <omgdi:waypoint x="442.0" y="240.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8">
+        <omgdi:waypoint x="742.0" y="295.0"></omgdi:waypoint>
+        <omgdi:waypoint x="742.0" y="363.0"></omgdi:waypoint>
+        <omgdi:waypoint x="520.0" y="363.0"></omgdi:waypoint>
+        <omgdi:waypoint x="292.0" y="363.0"></omgdi:waypoint>
+        <omgdi:waypoint x="292.0" y="295.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</definitions>

+ 11 - 1
ui/src/api/pssr/lock.js

@@ -35,6 +35,16 @@ export function updateLock(data) {
   })
 }
 
+
+// 确认盲板
+export function handleConfirmApproveLock(data) {
+  return request({
+    url: '/pssr/lock/confirmLock',
+    method: 'put',
+    data: data
+  })
+}
+
 // 删除锁开锁关阀门状态
 export function delLock(id) {
   return request({
@@ -50,4 +60,4 @@ export function exportLock(query) {
     method: 'get',
     params: query
   })
-}
+}

+ 4 - 1
ui/src/views/approve/approveDetail/pssrApprove-detail.vue

@@ -44,7 +44,7 @@ export default {
     return {
       //label样式
       labelStyle: {'width': '200px'},
-      isApprove: 1,//0-显示新增等按钮;1-确认人查询(我的待办);2-28项负责人查询(我的待办);3-无按钮;
+      isApprove: 1,//0-显示新增等按钮;1-确认人查询(我的待办);2-28项负责人查询(我的待办);3-无按钮;4-确认人1;5-确认人2;6-确认人3;
       //流转列表
       historyList: [],
       historyLoading: true,
@@ -81,6 +81,9 @@ export default {
         if (taskName=='确认人2'){
           this.isApprove=5;
         }
+        if (taskName=='确认人3'){
+          this.isApprove=6;
+        }
         console.log(res)
         this.sn = res.data.serialNumber
         this.subId = id;

+ 300 - 398
ui/src/views/pssr/lock/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,159 +28,6 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="尺寸" prop="lockSize">
-        <el-input
-          v-model="queryParams.lockSize"
-          placeholder="请输入尺寸"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="PID标注状态" prop="pidStatus">
-        <el-select v-model="queryParams.pidStatus" placeholder="请选择PID标注状态" clearable size="small">
-          <el-option label="请选择字典生成" value="" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="拆锁人" prop="unlocker">
-        <el-input
-          v-model="queryParams.unlocker"
-          placeholder="请输入拆锁人"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="拆锁时间" prop="unlockDate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.unlockDate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择拆锁时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="上锁人" prop="lockeder">
-        <el-input
-          v-model="queryParams.lockeder"
-          placeholder="请输入上锁人"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="上锁时间" prop="lockedDate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.lockedDate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择上锁时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="上锁位置正确(是/否)" prop="positionRight">
-        <el-input
-          v-model="queryParams.positionRight"
-          placeholder="请输入上锁位置正确(是/否)"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="阀门状态正确(是/否)" prop="statusRight">
-        <el-input
-          v-model="queryParams.statusRight"
-          placeholder="请输入阀门状态正确(是/否)"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="锁开锁关紧固(是/否)" prop="fastening">
-        <el-input
-          v-model="queryParams.fastening"
-          placeholder="请输入锁开锁关紧固(是/否)"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="锁体和链条无损坏(是/否)" prop="noDamage">
-        <el-input
-          v-model="queryParams.noDamage"
-          placeholder="请输入锁体和链条无损坏(是/否)"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="确认人" prop="confirm">
-        <el-input
-          v-model="queryParams.confirm"
-          placeholder="请输入确认人"
-          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>
@@ -212,8 +41,10 @@
           icon="el-icon-plus"
           size="mini"
           @click="handleAdd"
+          v-if="isApprove==0"
           v-hasPermi="['pssr:lock:add']"
-        >新增</el-button>
+        >新增
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -222,8 +53,10 @@
           size="mini"
           :disabled="single"
           @click="handleUpdate"
+          v-if="isApprove==0"
           v-hasPermi="['pssr:lock:edit']"
-        >修改</el-button>
+        >修改
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -232,92 +65,134 @@
           size="mini"
           :disabled="multiple"
           @click="handleDelete"
+          v-if="isApprove==0"
           v-hasPermi="['pssr:lock:remove']"
-        >删除</el-button>
+        >删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+          v-if="isApprove==0"
+          v-hasPermi="['pssr:lock: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:lock:edit']"
-            >导入</el-button>
-        </el-col>
       <el-col :span="1.5">
         <el-button
           type="warning"
           icon="el-icon-download"
           size="mini"
           @click="handleExport"
+          v-if="isApprove==0"
           v-hasPermi="['pssr:lock:export']"
-        >导出</el-button>
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-s-promotion"
+          size="mini"
+          @click="handleApprove"
+          v-if="isApprove==0"
+          v-hasPermi="['pssr:lock:edit']"
+        >发起审批
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-check"
+          size="mini"
+          v-if="isApprove==4||isApprove==5||isApprove==6"
+          @click="handleConfirmApprove"
+          v-hasPermi="['pssr:lock: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="lockList" @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="PID图号" align="center" prop="pidNo" :show-overflow-tooltip="true"/>
-      <el-table-column label="位置" align="center" prop="position" :show-overflow-tooltip="true"/>
-      <el-table-column label="尺寸" align="center" prop="lockSize" :show-overflow-tooltip="true"/>
-      <el-table-column label="PID标注状态" align="center" prop="pidStatus" :show-overflow-tooltip="true"/>
-      <el-table-column label="拆锁人" align="center" prop="unlocker" :show-overflow-tooltip="true"/>
+    <el-table v-loading="loading" :data="lockList" @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">
+          <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">已拆锁</el-tag>
+          <el-tag v-if="scope.row.approveStatus==4" type="success">已上锁</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="unit" :show-overflow-tooltip="true" width="150"/>
+      <el-table-column label="PID图号" align="center" prop="pidNo" :show-overflow-tooltip="true" width="150"/>
+      <el-table-column label="位置" align="center" prop="position" :show-overflow-tooltip="true" width="150"/>
+      <el-table-column label="尺寸" align="center" prop="lockSize" :show-overflow-tooltip="true" width="150"/>
+      <el-table-column label="PID标注状态" align="center" prop="pidStatus" :show-overflow-tooltip="true" width="150"/>
+      <el-table-column label="拆锁人" align="center" prop="unlocker" :show-overflow-tooltip="true" width="150">
+        <template slot-scope="scope">
+          <span>{{ userFormat(scope.row.unlocker) }}</span>
+        </template>
+      </el-table-column>
       <el-table-column label="拆锁时间" align="center" prop="unlockDate" width="100">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.unlockDate, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="上锁人" align="center" prop="lockeder" :show-overflow-tooltip="true"/>
-      <el-table-column label="上锁时间" align="center" prop="lockedDate" width="100">
+      <el-table-column label="上锁人" align="center" prop="lockeder" :show-overflow-tooltip="true" width="150">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.lockedDate, '{y}-{m}-{d}') }}</span>
+          <span>{{ userFormat(scope.row.lockeder) }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="上锁位置正确(是/否)" align="center" prop="positionRight" :show-overflow-tooltip="true"/>
-      <el-table-column label="阀门状态正确(是/否)" align="center" prop="statusRight" :show-overflow-tooltip="true"/>
-      <el-table-column label="锁开锁关紧固(是/否)" align="center" prop="fastening" :show-overflow-tooltip="true"/>
-      <el-table-column label="锁体和链条无损坏(是/否)" align="center" prop="noDamage" :show-overflow-tooltip="true"/>
-      <el-table-column label="确认人" align="center" prop="confirm" :show-overflow-tooltip="true"/>
-      <el-table-column label="确认时间" align="center" prop="confirmationDate" width="100">
+      <el-table-column label="上锁时间" align="center" prop="lockedDate" width="100">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.confirmationDate, '{y}-{m}-{d}') }}</span>
+          <span>{{ parseTime(scope.row.lockedDate, '{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-column label="上锁位置正确(是/否)" align="center" prop="positionRight" :show-overflow-tooltip="true"
+                       width="150"/>
+      <el-table-column label="阀门状态正确(是/否)" align="center" prop="statusRight" :show-overflow-tooltip="true"
+                       width="150"/>
+      <el-table-column label="锁开锁关紧固(是/否)" align="center" prop="fastening" :show-overflow-tooltip="true"
+                       width="150"/>
+      <el-table-column label="锁体和链条无损坏(是/否)" align="center" prop="noDamage" :show-overflow-tooltip="true"
+                       width="170"/>
+      <el-table-column label="确认人" align="center" prop="confirm" :show-overflow-tooltip="true" width="150">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createdate, '{y}-{m}-{d}') }}</span>
+          <span>{{ userFormat(scope.row.confirm) }}</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">
+      <el-table-column label="确认时间" align="center" prop="confirmationDate" 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" fixed="right" width="120" class-name="small-padding fixed-width">
+      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true" width="150"/>
+      <el-table-column label="操作" align="center" fixed="right" width="120" v-if="isApprove==0" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
             size="mini"
             type="text"
             icon="el-icon-edit"
+            v-if="scope.row.approveStatus!=2"
             @click="handleUpdate(scope.row)"
             v-hasPermi="['pssr:lock:edit']"
-          >修改</el-button>
+          >修改
+          </el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
+            v-if="scope.row.approveStatus!=2"
             v-hasPermi="['pssr:lock:remove']"
-          >删除</el-button>
+          >删除
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -331,160 +206,156 @@
     />
 
     <!-- 添加或修改锁开锁关阀门状态对话框 -->
-    <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-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="700px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="175px">
         <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="PID图号" prop="pidNo">
-          <el-input v-model="form.pidNo" placeholder="请输入PID图号" />
+          <el-input v-model="form.pidNo" placeholder="请输入PID图号"/>
         </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="尺寸" prop="lockSize">
-          <el-input v-model="form.lockSize" placeholder="请输入尺寸" />
+          <el-input v-model="form.lockSize" placeholder="请输入尺寸"/>
         </el-form-item>
-        <el-form-item label="PID标注状态">
-          <el-radio-group v-model="form.pidStatus">
-            <el-radio label="1">请选择字典生成</el-radio>
-          </el-radio-group>
+        <el-form-item label="PID标注状态" prop="pidStatus">
+          <el-input v-model="form.pidStatus" placeholder="请输入PID标注状态"/>
         </el-form-item>
         <el-form-item label="拆锁人" prop="unlocker">
-          <el-input v-model="form.unlocker" placeholder="请输入拆锁人" />
+          <el-select v-model="form.unlocker" clearable filterable style="width: 100%;"
+                     placeholder="请选择拆锁人">
+            <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="unlockDate">
           <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.unlockDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择拆锁时间">
+                          v-model="form.unlockDate"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          placeholder="选择拆锁时间">
           </el-date-picker>
         </el-form-item>
         <el-form-item label="上锁人" prop="lockeder">
-          <el-input v-model="form.lockeder" placeholder="请输入上锁人" />
+          <el-select v-model="form.lockeder" clearable filterable style="width: 100%;"
+                     placeholder="请选择上锁人">
+            <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="lockedDate">
           <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.lockedDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择上锁时间">
+                          v-model="form.lockedDate"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          placeholder="选择上锁时间">
           </el-date-picker>
         </el-form-item>
         <el-form-item label="上锁位置正确(是/否)" prop="positionRight">
-          <el-input v-model="form.positionRight" placeholder="请输入上锁位置正确(是/否)" />
+          <el-radio v-model="form.positionRight" label="✔" border>✔</el-radio>
+          <el-radio v-model="form.positionRight" label="✖" border>✖</el-radio>
         </el-form-item>
         <el-form-item label="阀门状态正确(是/否)" prop="statusRight">
-          <el-input v-model="form.statusRight" placeholder="请输入阀门状态正确(是/否)" />
+          <el-radio v-model="form.statusRight" label="✔" border>✔</el-radio>
+          <el-radio v-model="form.statusRight" label="✖" border>✖</el-radio>
         </el-form-item>
         <el-form-item label="锁开锁关紧固(是/否)" prop="fastening">
-          <el-input v-model="form.fastening" placeholder="请输入锁开锁关紧固(是/否)" />
+          <el-radio v-model="form.fastening" label="✔" border>✔</el-radio>
+          <el-radio v-model="form.fastening" label="✖" border>✖</el-radio>
         </el-form-item>
         <el-form-item label="锁体和链条无损坏(是/否)" prop="noDamage">
-          <el-input v-model="form.noDamage" placeholder="请输入锁体和链条无损坏(是/否)" />
+          <el-radio v-model="form.noDamage" label="✔" border>✔</el-radio>
+          <el-radio v-model="form.noDamage" label="✖" border>✖</el-radio>
         </el-form-item>
         <el-form-item label="确认人" prop="confirm">
-          <el-input v-model="form.confirm" placeholder="请输入确认人" />
+          <el-select v-model="form.confirm" clearable filterable style="width: 100%;"
+                     placeholder="请选择确认人">
+            <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="confirmationDate">
           <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.confirmationDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择确认时间">
+                          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-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 { listLock, getLock, delLock, addLock, updateLock, exportLock, importTemplate} from "@/api/pssr/lock";
-import { treeselect } from "@/api/system/dept";
-import { getToken } from "@/utils/auth";
+import {
+  addLock,
+  delLock,
+  exportLock,
+  getLock,
+  handleConfirmApproveLock,
+  importTemplate,
+  listLock,
+  updateLock
+} from "@/api/pssr/lock";
+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 {listUserNoPage} from "@/api/system/user";
+import {doApprove} from "@/api/pssr/approve";
 
 export default {
-  dicts:['pssr_approve_status'],
+  dicts: ['pssr_approve_status'],
   name: "Lock",
-  components: { Treeselect },
+  components: {Treeselect},
   props: {
     subId: {
       type: Number,
@@ -497,6 +368,7 @@ export default {
   },
   data() {
     return {
+      userOptions: [],
       // 遮罩层
       loading: true,
       // 选中数组
@@ -515,24 +387,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/lock/importData"
-        },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/pssr/lock/importData"
+      },
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -564,25 +436,55 @@ 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 -250
-      })
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = document.body.clientHeight - 250
+    })
     this.getList();
     this.getTreeselect();
+    listUserNoPage({}).then(res => {
+      this.userOptions = res.data
+    });
   },
   methods: {
+    /** 确认按钮操作*/
+    handleApprove() {
+      doApprove(this.subId).then(res => {
+        this.msgSuccess("已发起确认流程");
+      })
+    },
+    checkSelectable(row) {
+      console.log(this.isApprove)
+      return (row.approveStatus == 1 && this.isApprove != 0) || this.isApprove == 0
+    },
+    handleConfirmApprove() {
+      let data = {
+        ids: this.ids,
+        subId: this.subId,
+        taskType: this.isApprove
+      }
+      handleConfirmApproveLock(data).then(res => {
+        this.msgSuccess("确认成功");
+        this.getList()
+      })
+    },
+    userFormat(userId) {
+      for (let item of this.userOptions) {
+        if (item.userId == userId) {
+          return item.nickName
+        }
+      }
+    },
     /** 查询锁开锁关阀门状态列表 */
     getList() {
       this.loading = true;
@@ -592,12 +494,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;
@@ -613,7 +515,7 @@ export default {
         pidNo: null,
         position: null,
         lockSize: null,
-        pidStatus: "0",
+        pidStatus: null,
         unlocker: null,
         unlockDate: null,
         lockeder: null,
@@ -647,7 +549,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
     },
     /** 新增按钮操作 */
@@ -690,56 +592,56 @@ export default {
     handleDelete(row) {
       const ids = row.id || this.ids;
       this.$confirm('是否确认删除?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delLock(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        })
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delLock(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      })
     },
     /** 导出按钮操作 */
     handleExport() {
       const queryParams = this.queryParams;
       this.$confirm('是否确认导出所有锁开锁关阀门状态数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return exportLock(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        })
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return exportLock(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();
-      }
+    /** 导入按钮操作 */
+    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>