Browse Source

装置审计开项审批流程

wangggziwen 10 months ago
parent
commit
b5a0ece671

+ 14 - 3
rc-admin/src/main/java/com/ruoyi/web/controller/rc/TApproveDangerController.java

@@ -7,7 +7,9 @@ import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.rc.domain.DevProcess;
 import com.ruoyi.rc.domain.DevTask;
+import com.ruoyi.rc.domain.TOpenItem;
 import com.ruoyi.rc.domain.TProgress;
+import com.ruoyi.rc.service.ITOpenItemService;
 import com.ruoyi.rc.service.ITProgressService;
 import com.ruoyi.system.service.ISysUserService;
 import org.activiti.bpmn.model.BpmnModel;
@@ -61,6 +63,9 @@ public class TApproveDangerController extends BaseController {
     @Autowired
     private ITProgressService tProgressService;
 
+    @Autowired
+    private ITOpenItemService tOpenItemService;
+
     /**
      * 我的申请列表
      */
@@ -94,7 +99,9 @@ public class TApproveDangerController extends BaseController {
                         devProcess.setProgress(progress);
                         devProcess.setApNo(progress.getApNo());
                     } else if (pi.getProcessDefinitionName().equals("开项审批流程")) {
-
+                        TOpenItem openItem = tOpenItemService.selectTOpenItemById(Long.parseLong(h.getBusinessKey()));
+                        devProcess.setOpenItem(openItem);
+                        devProcess.setApNo(openItem.getApNo());
                     }
                 } catch (Exception e) {
                     logger.error(e.toString());
@@ -160,7 +167,9 @@ public class TApproveDangerController extends BaseController {
                     devTask.setProgress(progress);
                     devTask.setApNo(progress.getApNo());
                 } else if (pi.getProcessDefinitionName().equals("开项审批流程")) {
-
+                    TOpenItem openItem = tOpenItemService.selectTOpenItemById(Long.parseLong(pi.getBusinessKey()));
+                    devTask.setOpenItem(openItem);
+                    devTask.setApNo(openItem.getApNo());
                 }
                 list.add(devTask);
             }
@@ -199,7 +208,9 @@ public class TApproveDangerController extends BaseController {
                     devProcess.setApNo(progress.getApNo());
                     devProcess.setProgress(progress);
                 } else if (pi.getProcessDefinitionName().equals("开项审批流程")) {
-
+                    TOpenItem openItem = tOpenItemService.selectTOpenItemById(Long.parseLong(pi.getBusinessKey()));
+                    devProcess.setApNo(openItem.getApNo());
+                    devProcess.setOpenItem(openItem);
                 }
                 devProcess.setBusinessKey(pi.getBusinessKey());
                 devProcess.setProcessCreateTime(pi.getStartTime());

+ 129 - 3
rc-admin/src/main/java/com/ruoyi/web/controller/rc/TOpenItemController.java

@@ -1,12 +1,24 @@
 package com.ruoyi.web.controller.rc;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import javax.servlet.http.HttpServletResponse;
 
 import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.rc.domain.TMeeting;
+import com.ruoyi.rc.domain.*;
+import com.ruoyi.rc.service.ITProgressService;
+import com.ruoyi.rc.service.ITQuestionnaireService;
 import com.ruoyi.system.service.ISysDeptService;
+import org.activiti.engine.ProcessEngine;
+import org.activiti.engine.ProcessEngines;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.TaskService;
+import org.activiti.engine.impl.identity.Authentication;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -21,7 +33,6 @@ import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.rc.domain.TOpenItem;
 import com.ruoyi.rc.service.ITOpenItemService;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.core.page.TableDataInfo;
@@ -42,6 +53,119 @@ public class TOpenItemController extends BaseController
     @Autowired
     private ISysDeptService deptService;
 
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private TaskService taskService;
+
+    @Autowired
+    private ITQuestionnaireService tQuestionnaireService;
+
+    /**
+     * 流程处理
+     */
+    @PutMapping("/handle")
+    public AjaxResult handle(@RequestBody DevTask devTask) {
+        TOpenItem openItem = devTask.getOpenItem();
+        TQuestionnaire questionnaire = tQuestionnaireService.selectTQuestionnaireById(openItem.getQuestionnaireId());
+        String taskId = devTask.getTaskId();
+        String taskName = devTask.getTaskName();
+        String condition = devTask.getCondition();
+        Map<String, Object> param = new HashMap<>();
+        param.put("condition", condition);
+        String comment = "";
+        if (taskName.equals("提交申请")) {
+            // 进度审批状态修改为2-待审核
+            openItem.setStatus("2");
+            comment = "重新提交";
+        } else if (taskName.equals("审核")) {
+            if ("1".equals(condition)) {
+                // 进度审批状态修改为4-已通过
+                openItem.setStatus("4");
+                comment = "通过";
+            } else {
+                // 进度审批状态修改为3-未通过
+                openItem.setStatus("3");
+                comment = "驳回";
+            }
+        }
+        // 使用任务id,获取任务对象,获取流程实例id
+        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+        //利用任务对象,获取流程实例id
+        String processInstancesId = task.getProcessInstanceId();
+        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
+        TaskService taskService = processEngine.getTaskService();
+        //认领任务
+        processEngine.getTaskService()
+                .claim(taskId, getUserId().toString());
+        taskService.addComment(taskId, processInstancesId, comment);
+        taskService.complete(taskId, param);
+//        // 标记taskId、TaskName
+//        List<Task> list = processEngine.getTaskService()//获取任务service
+//                .createTaskQuery()//创建查询对象
+//                .taskCandidateOrAssigned(questionnaire.getReviewer()+"").list();
+//        for (Task t : list) {
+//            if (openItem.getProcessId().equals(t.getProcessInstanceId())) {
+//                openItem.setTaskId(t.getId());
+//                openItem.setTaskName(t.getName());
+//            }
+//        }
+        // 更新数据
+        tOpenItemService.updateTOpenItem(openItem);
+        String year = questionnaire.getYear();
+        if (StringUtils.isNotEmpty(year) && !"".equals(year) && year.length() > 4) {
+            questionnaire.setYear(year.substring(0, year.indexOf("-")));
+        }
+        tQuestionnaireService.updateTQuestionnaire(questionnaire);
+        return AjaxResult.success();
+    }
+
+    /**
+     * 提交申请
+     */
+    @PutMapping("/apply")
+    public AjaxResult apply(@RequestBody TOpenItem tOpenItem) {
+        // 当前登录用户id
+        String userId = getUserId().toString();
+
+        // 开始流程
+        Authentication.setAuthenticatedUserId(userId);
+        Map<String, Object> variables = new HashMap<>();
+        variables.put("personInCharge", tOpenItem.getPersonInCharge());
+        variables.put("reviewer", tOpenItem.getReviewer());
+        long businessKey = tOpenItem.getId();
+        ProcessInstance pi = runtimeService.startProcessInstanceByKey("openitemProcess", String.valueOf(businessKey), variables);
+
+        // 提交申请
+        Map<String, Object> param = new HashMap<>();
+        param.put("condition", "1");
+        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
+        TaskService taskService = processEngine.getTaskService();
+        List<Task> list = taskService.createTaskQuery().taskCandidateOrAssigned(userId).list();
+        String taskId = null;
+        String processInstanceId = null;
+        for (Task task : list) {
+            processInstanceId = task.getProcessInstanceId();
+            if (processInstanceId.equals(pi.getProcessInstanceId())) {
+                taskId = task.getId();
+            }
+        }
+        processEngine.getTaskService().claim(taskId, getUserId().toString());
+        taskService.addComment(taskId, processInstanceId, "无");
+        taskService.complete(taskId, param);
+
+        tOpenItem.setProcessId(pi.getProcessInstanceId());
+        tOpenItem.setApNo(DateUtils.dateTimeNow() + userId);
+        // 进度审批状态修改为2-待审核
+        tOpenItem.setStatus("2");
+
+        tOpenItemService.updateTOpenItem(tOpenItem);
+
+        return AjaxResult.success();
+    }
+
+
     /**
      * 查询开项列表
      */
@@ -102,7 +226,9 @@ public class TOpenItemController extends BaseController
     public AjaxResult add(@RequestBody TOpenItem tOpenItem)
     {
         tOpenItem.setDeptId(getLoginUser().getDeptId().toString());
-        return toAjax(tOpenItemService.insertTOpenItem(tOpenItem));
+        int i = tOpenItemService.insertTOpenItem(tOpenItem);
+        this.apply(tOpenItem);
+        return toAjax(i);
     }
 
     /**

+ 10 - 14
rc-admin/src/main/java/com/ruoyi/web/controller/rc/TQuestionnaireController.java

@@ -107,16 +107,16 @@ public class TQuestionnaireController extends BaseController
                 .claim(taskId, getUserId().toString());
         taskService.addComment(taskId, processInstancesId, comment);
         taskService.complete(taskId, param);
-        // 标记taskId、TaskName
-        List<Task> list = processEngine.getTaskService()//获取任务service
-                .createTaskQuery()//创建查询对象
-                .taskCandidateOrAssigned(questionnaire.getReviewer()+"").list();
-        for (Task t : list) {
-            if (progress.getProcessId().equals(t.getProcessInstanceId())) {
-                progress.setTaskId(t.getId());
-                progress.setTaskName(t.getName());
-            }
-        }
+//        // 标记taskId、TaskName
+//        List<Task> list = processEngine.getTaskService()//获取任务service
+//                .createTaskQuery()//创建查询对象
+//                .taskCandidateOrAssigned(questionnaire.getReviewer()+"").list();
+//        for (Task t : list) {
+//            if (progress.getProcessId().equals(t.getProcessInstanceId())) {
+//                progress.setTaskId(t.getId());
+//                progress.setTaskName(t.getName());
+//            }
+//        }
         // 更新数据
         tProgressService.updateTProgress(progress);
         String year = questionnaire.getYear();
@@ -161,10 +161,6 @@ public class TQuestionnaireController extends BaseController
         taskService.addComment(taskId, processInstanceId, "无");
         taskService.complete(taskId, param);
 
-//        Task nextTask = taskService.createTaskQuery().singleResult();
-//        tProgress.setTaskId(nextTask.getId());
-//        tProgress.setTaskName(nextTask.getName());
-
         tProgress.setProcessId(pi.getProcessInstanceId());
         tProgress.setApNo(DateUtils.dateTimeNow() + userId);
         // 进度审批状态修改为2-待审核

+ 10 - 0
rc-buisness/src/main/java/com/ruoyi/rc/domain/DevProcess.java

@@ -31,6 +31,16 @@ public class DevProcess {
 
     private TProgress progress;
 
+    private TOpenItem openItem;
+
+    public TOpenItem getOpenItem() {
+        return openItem;
+    }
+
+    public void setOpenItem(TOpenItem openItem) {
+        this.openItem = openItem;
+    }
+
     public TProgress getProgress() {
         return progress;
     }

+ 10 - 0
rc-buisness/src/main/java/com/ruoyi/rc/domain/DevTask.java

@@ -69,6 +69,16 @@ public class DevTask {
 
     private TProgress progress;
 
+    private TOpenItem openItem;
+
+    public TOpenItem getOpenItem() {
+        return openItem;
+    }
+
+    public void setOpenItem(TOpenItem openItem) {
+        this.openItem = openItem;
+    }
+
     public TProgress getProgress() {
         return progress;
     }

+ 22 - 0
rc-buisness/src/main/java/com/ruoyi/rc/domain/TOpenItem.java

@@ -83,6 +83,28 @@ public class TOpenItem extends BaseEntity
     @Excel(name = "装置")
     private String deptName;
 
+    /** 申请编号 */
+    private String apNo;
+
+    /** 流程id */
+    private String processId;
+
+    public String getApNo() {
+        return apNo;
+    }
+
+    public void setApNo(String apNo) {
+        this.apNo = apNo;
+    }
+
+    public String getProcessId() {
+        return processId;
+    }
+
+    public void setProcessId(String processId) {
+        this.processId = processId;
+    }
+
     public String getPersonInChargeName() {
         return personInChargeName;
     }

+ 11 - 0
rc-buisness/src/main/resources/mapper/rc/TOpenItemMapper.xml

@@ -21,10 +21,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="deptId"    column="dept_id"    />
         <result property="personInChargeName"    column="person_in_charge_name"    />
         <result property="reviewerName"    column="reviewer_name"    />
+        <result property="apNo"    column="ap_no"    />
+        <result property="processId"    column="process_id"    />
     </resultMap>
 
     <sql id="selectTOpenItemVo">
         select id, type, questionnaire_id, description, level, open_time, close_time, o.status, person_in_charge, reviewer, result, deadline, remarks, o.dept_id,
+        o.ap_no, o.process_id,
         u1.nick_name as person_in_charge_name, u2.nick_name as reviewer_name
         from t_open_item as o
         left join sys_user u1 on o.person_in_charge = u1.user_id
@@ -47,6 +50,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="deadline != null "> and deadline = #{deadline}</if>
             <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
             <if test="deptId != null  and deptId != ''"> and o.dept_id = #{deptId}</if>
+            <if test="apNo != null "> and p.ap_no = #{apNo}</if>
+            <if test="processId != null "> and p.process_id = #{processId}</if>
         </where>
     </select>
     
@@ -71,6 +76,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="deadline != null">deadline,</if>
             <if test="remarks != null">remarks,</if>
             <if test="deptId != null">dept_id,</if>
+            <if test="apNo != null">ap_no,</if>
+            <if test="processId != null">process_id,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="type != null">#{type},</if>
@@ -86,6 +93,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="deadline != null">#{deadline},</if>
             <if test="remarks != null">#{remarks},</if>
             <if test="deptId != null">#{deptId},</if>
+            <if test="apNo != null">#{apNo},</if>
+            <if test="processId != null">#{processId},</if>
          </trim>
     </insert>
 
@@ -105,6 +114,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="deadline != null">deadline = #{deadline},</if>
             <if test="remarks != null">remarks = #{remarks},</if>
             <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="apNo != null">ap_no = #{apNo},</if>
+            <if test="processId != null">process_id = #{processId},</if>
         </trim>
         where id = #{id}
     </update>

+ 3 - 3
rc-common/src/main/java/com/ruoyi/common/config/ActivitiConfig.java

@@ -80,9 +80,9 @@ public class ActivitiConfig {
         Resource common = resourceLoader.getResource("classpath:/processes/questionnaire.bpmn"); //加载流程图资源文件
         deploymentBuilder.enableDuplicateFiltering().addInputStream(common.getFilename(), common.getInputStream()).name("问卷审批流程").deploy(); //按流程id部署
 
-//        DeploymentBuilder deploymentBuilder1 = repositoryService().createDeployment();
-//        Resource major= resourceLoader.getResource("classpath:/processes/openitem.bpmn");
-//        deploymentBuilder1.enableDuplicateFiltering().addInputStream(major.getFilename(), major.getInputStream()).name("开项审批流程").deploy();
+        DeploymentBuilder deploymentBuilder1 = repositoryService().createDeployment();
+        Resource major= resourceLoader.getResource("classpath:/processes/openitem.bpmn");
+        deploymentBuilder1.enableDuplicateFiltering().addInputStream(major.getFilename(), major.getInputStream()).name("开项审批流程").deploy();
     }
 }
 

+ 9 - 0
ruoyi-ui/src/api/rc/openitem.js

@@ -1,5 +1,14 @@
 import request from '@/utils/request'
 
+// 提交申请
+export function handleOpenitem(data) {
+  return request({
+    url: '/rc/openitem/handle',
+    method: 'put',
+    data: data
+  })
+}
+
 // 查询开项列表
 export function listOpenitem(query) {
   return request({

+ 0 - 123
ruoyi-ui/src/views/rc/approve/detail/common-detail.vue

@@ -1,123 +0,0 @@
-<!--<template>-->
-  <!--<el-dialog :close-on-click-modal="false" :title="title" :visible.sync="visible" :append-to-body="true" width="600px">-->
-
-
-    <!--<el-table :data="historyList" border v-loading="historyLoading" style="width: 100%;">-->
-      <!--<el-table-column width="100" prop="taskName" header-align="center" align="center" label="流程进度"></el-table-column>-->
-      <!--<el-table-column width="80" prop="userName" header-align="center" align="center" label="处理人"></el-table-column>-->
-      <!--<el-table-column prop="comment" header-align="center" align="center" label="备注 / 审批意见"></el-table-column>-->
-      <!--<el-table-column width="100" prop="taskCreateTime" header-align="center" align="center" label="开始时间"></el-table-column>-->
-      <!--<el-table-column width="100" prop="taskEndTime" header-align="center" align="center" label="结束时间"></el-table-column>-->
-    <!--</el-table>-->
-
-    <!--<div slot="footer" class="dialog-footer">-->
-      <!--<el-button type="success" @click="dataFormSubmit(1)">通 过</el-button>-->
-      <!--<el-button type="info" @click="dataFormSubmit(0)">驳 回</el-button>-->
-      <!--<el-button @click="visible = false">返回</el-button>-->
-    <!--</div>-->
-  <!--</el-dialog>-->
-<!--</template>-->
-
-<!--<script>-->
-  <!--import { getToken } from "@/utils/auth";-->
-  <!--import { treeselect, listDept } from "@/api/system/dept";-->
-  <!--import Treeselect from "@riophae/vue-treeselect";-->
-  <!--import "@riophae/vue-treeselect/dist/vue-treeselect.css";-->
-  <!--import {getHistorylist} from "@/api/branch/approvedanger";-->
-
-<!--export default {-->
-  <!--name: "questionnaire-detail",-->
-  <!--components: { Treeselect },-->
-  <!--data() {-->
-    <!--return {-->
-      <!--rules: {-->
-      <!--},-->
-      <!--taskForm: {},-->
-      <!--title: null,-->
-      <!--visible: false,-->
-      <!--deptOptions: [],-->
-      <!--//流转列表-->
-      <!--historyList: [],-->
-      <!--// rejectList: [],-->
-      <!--historyLoading: true,-->
-      <!--dialogType: 0,-->
-    <!--}-->
-  <!--},-->
-  <!--methods: {-->
-    <!--init(id, taskId, processId, taskName, dialogType) {-->
-      <!--// 流转列表-->
-      <!--getHistorylist({ "processId": processId }).then(response => {-->
-        <!--this.historyList = response.rows;-->
-        <!--this.historyLoading = false-->
-      <!--});-->
-      <!--this.reset();-->
-      <!--this.visible = true;-->
-      <!--// if (taskName == "支部申请") {-->
-      <!--//   this.newDeptIdDisabled = false;-->
-      <!--// } else {-->
-      <!--//   this.newDeptIdDisabled = true;-->
-      <!--// }-->
-      <!--// this.dialogType = dialogType;-->
-      <!--// if (dialogType == 1) {-->
-      <!--//   this.title =  taskName + "处理";-->
-      <!--// } else {-->
-      <!--//   this.title = "查看详情";-->
-      <!--// }-->
-      <!--// this.taskForm.objId = id;-->
-      <!--// this.taskForm.taskId = taskId;-->
-      <!--// this.taskForm.taskName = taskName;-->
-      <!--// getMember(id).then(response => {-->
-      <!--//   this.taskForm.obj = response.data;-->
-      <!--//   this.taskForm.oldDeptId = Number(response.data.oldDeptId);-->
-      <!--//   this.taskForm.newDeptId = Number(response.data.newDeptId);-->
-      <!--//   this.taskForm.userId = Number(response.data.userId);-->
-      <!--//   console.log(typeof(this.taskForm.newDeptId))-->
-      <!--//   console.log(typeof(this.taskForm.userId))-->
-      <!--// });-->
-      <!--// this.getTreeselect();-->
-      <!--// this.getUserList();-->
-    <!--},-->
-
-    <!--reset() {-->
-      <!--this.taskForm =  {-->
-        <!--oldDeptId: null,-->
-        <!--newDeptId: null,-->
-        <!--comment: '',-->
-      <!--};-->
-    <!--},-->
-
-    <!--dataFormSubmit(condition) {-->
-      <!--this.$refs["form"].validate(valid => {-->
-        <!--if (valid) {-->
-          <!--if (this.taskForm.taskName == "支部申请") {-->
-            <!--this.taskForm.obj.oldDeptId = this.taskForm.oldDeptId;-->
-            <!--this.taskForm.obj.newDeptId = this.taskForm.newDeptId;-->
-            <!--this.$forceUpdate();-->
-          <!--}-->
-          <!--this.taskForm.condition = condition;-->
-          <!--handle(this.taskForm).then(response => {-->
-            <!--this.visible = false;-->
-            <!--this.$modal.msgSuccess("提交成功");-->
-            <!--// refreshDataList事件:调用父组件getList方法刷新页面-->
-            <!--this.$emit('refreshDataList');-->
-          <!--});-->
-        <!--}-->
-      <!--});-->
-    <!--},-->
-
-    <!--/** 查询部门下拉树结构 */-->
-    <!--getTreeselect() {-->
-      <!--treeselect().then(response => {-->
-        <!--this.deptOptions = response.data;-->
-      <!--});-->
-    <!--},-->
-  <!--}-->
-<!--}-->
-<!--</script>-->
-
-<!--<style scoped lang="scss">-->
-  <!--::v-deep .el-input.is-disabled .el-input__inner {-->
-    <!--color: #606266;-->
-    <!--background-color: transparent;-->
-  <!--}-->
-<!--</style>-->

+ 132 - 0
ruoyi-ui/src/views/rc/approve/detail/openitem-detail.vue

@@ -0,0 +1,132 @@
+<template>
+  <el-dialog :close-on-click-modal="false" :title="title" :visible.sync="visible" :append-to-body="true" width="600px">
+
+    <el-descriptions title="详细信息" :column="2" border>
+      <el-descriptions-item :span="1" label="问题类型">
+        <span
+          v-for="dict in dict.type.t_open_item_type"
+          v-if="openitem.type==dict.value"
+          v-text="dict.label"
+        ></span>
+      </el-descriptions-item>
+      <el-descriptions-item :span="1" label="涉及整改code">{{openitem.questionnaireId}}</el-descriptions-item>
+      <el-descriptions-item :span="2" label="存在问题描述">{{openitem.description}}</el-descriptions-item>
+      <el-descriptions-item :span="1" label="开项级别">
+        <span
+          v-for="dict in dict.type.t_open_item_level"
+          v-if="openitem.level==dict.value"
+          v-text="dict.label"
+        ></span>
+      </el-descriptions-item>
+      <el-descriptions-item :span="1" label="开项时间">{{openitem.openTime}}</el-descriptions-item>
+      <el-descriptions-item :span="1" label="闭项时间">{{openitem.closeTime}}</el-descriptions-item>
+      <el-descriptions-item :span="1" label="问题处理状态">
+        <span
+          v-for="dict in dict.type.t_open_item_status"
+          v-if="openitem.status==dict.value"
+          v-text="dict.label"
+        ></span>
+      </el-descriptions-item>
+      <el-descriptions-item :span="1" label="负责人">{{openitem.personInChargeName}}</el-descriptions-item>
+      <el-descriptions-item :span="1" label="审核人">{{openitem.reviewerName}}</el-descriptions-item>
+      <el-descriptions-item :span="1" label="责任人确认">
+        <span
+          v-for="dict in dict.type.t_open_item_result"
+          v-if="openitem.result==dict.value"
+          v-text="dict.label"
+        ></span>
+      </el-descriptions-item>
+      <el-descriptions-item :span="1" label="截至时间">{{openitem.deadline}}</el-descriptions-item>
+      <el-descriptions-item :span="2" label="备注">{{openitem.remarks}}</el-descriptions-item>
+    </el-descriptions>
+
+    <el-table :data="historyList" border v-loading="historyLoading" style="width: 100%;">
+      <el-table-column width="100" prop="taskName" header-align="center" align="center" label="流程进度"></el-table-column>
+      <el-table-column width="80" prop="userName" header-align="center" align="center" label="处理人"></el-table-column>
+      <el-table-column prop="comment" header-align="center" align="center" label="备注 / 审批意见"></el-table-column>
+      <el-table-column width="100" prop="taskCreateTime" header-align="center" align="center" label="开始时间"></el-table-column>
+      <el-table-column width="100" prop="taskEndTime" header-align="center" align="center" label="结束时间"></el-table-column>
+    </el-table>
+
+    <div slot="footer" class="dialog-footer">
+      <el-button v-if="type == 2" type="success" @click="dataFormSubmit(1)">通 过</el-button>
+      <el-button v-if="type == 2" type="info" @click="dataFormSubmit(0)">驳 回</el-button>
+      <el-button @click="visible = false">返回</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import { getToken } from "@/utils/auth";
+  import {getHistorylist} from "@/api/rc/approvedanger";
+  import { handleOpenitem } from "@/api/rc/openitem";
+  import { listAllUser } from "@/api/system/user";
+
+export default {
+  name: "openitem-detail",
+  components: {  },
+  dicts: [ 't_open_item_result', 't_open_item_type', 't_open_item_level', 't_open_item_status' ],
+  data() {
+    return {
+      rules: {
+      },
+      taskForm: {},
+      title: null,
+      visible: false,
+      deptOptions: [],
+      //流转列表
+      historyList: [],
+      // rejectList: [],
+      historyLoading: true,
+      dialogType: 0,
+      openitem: null,
+      type: null,
+      // 用户列表
+      userOptions: [],
+    }
+  },
+  methods: {
+    init(openitem, taskId, processId, taskName, type) {
+      this.getUserList();
+      this.openitem = openitem;
+      this.type = type;
+      this.taskForm.openItem = openitem;
+      this.taskForm.taskId = taskId;
+      this.taskForm.processId = processId;
+      this.taskForm.taskName = taskName;
+      // 流转列表
+      getHistorylist({ "processId": processId }).then(response => {
+        this.historyList = response.rows;
+        this.historyLoading = false
+      });
+      this.visible = true;
+    },
+    /** 查询用户列表 */
+    getUserList() {
+      listAllUser().then(response => {
+        let data = response.data;
+        for (let i = 0; i < data.length; i++) {
+          // 非顶级节点
+          if (data[i].parentId !== 0) {
+            // 插入装置列表
+            this.userOptions.push({"dictLabel": data[i].nickName, "dictValue": data[i].userId});
+          }
+        }
+      });
+    },
+    reset() {
+      this.taskForm =  {
+      };
+    },
+    dataFormSubmit(condition) {
+      this.taskForm.condition = condition;
+      handleOpenitem(this.taskForm).then(response => {
+        this.visible = false;
+        this.$modal.msgSuccess("提交成功");
+        // refreshDataList事件:调用父组件getList方法刷新页面
+        this.$emit('refreshDataList');
+      });
+    },
+  }
+}
+</script>

+ 2 - 1
ruoyi-ui/src/views/rc/approve/detail/questionnaire-detail.vue

@@ -30,13 +30,14 @@
           v-text="dict.label"
         ></span>
       </el-descriptions-item>
-      <el-descriptions-item :span="2" label="进度描述">
+      <el-descriptions-item :span="1" label="进度描述">
         <span
           v-for="dict in dict.type.t_progress_description"
           v-if="progress.progress==dict.value"
           v-text="dict.label"
         ></span>
       </el-descriptions-item>
+      <el-descriptions-item :span="1" label=""></el-descriptions-item>
       <el-descriptions-item :span="2" label="备注">{{progress.remarks}}</el-descriptions-item>
     </el-descriptions>
 

+ 12 - 2
ruoyi-ui/src/views/rc/approve/myapprove/index.vue

@@ -41,6 +41,7 @@
     />
     <process-img v-if="processImgVisible" ref="processImg" @refreshDataList="getList"></process-img>
     <questionnaire-detail v-if="questionnaireVisible" ref="questionnaireDetail" @refreshDataList="getList"/>
+    <openitem-detail v-if="openitemVisible" ref="openitemDetail" @refreshDataList="getList"/>
   </div>
 </template>
 
@@ -48,12 +49,14 @@
   import {getMyApprovelist} from "@/api/rc/approvedanger";
   import ProcessImg from '../processImg'
   import QuestionnaireDetail from "@/views/rc/approve/detail/questionnaire-detail";
+  import OpenitemDetail from "@/views/rc/approve/detail/openitem-detail";
 
   export default {
     name: "Myapprove",
     components: {
       ProcessImg,
-      QuestionnaireDetail
+      QuestionnaireDetail,
+      OpenitemDetail
     },
     data() {
       return {
@@ -61,6 +64,7 @@
         loading: true,
         processImgVisible: false,
         questionnaireVisible: false,
+        openitemVisible: false,
         // 选中数组
         ids: [],
         // 非单个禁用
@@ -129,11 +133,17 @@
       //操作审批流程
       detailHandle (row) {
         if (row.processName == "问卷审批流程") {
-          this.title = '处理问卷审批流程';
+          this.title = '查看问卷审批流程';
           this.questionnaireVisible = true
           this.$nextTick(() => {
             this.$refs.questionnaireDetail.init(row.progress, row.taskId, row.processId, row.taskName, 1)
           })
+        } else if (row.processName == "开项审批流程") {
+          this.title = '查看开项审批流程';
+          this.openitemVisible = true
+          this.$nextTick(() => {
+            this.$refs.openitemDetail.init(row.openItem, row.taskId, row.processId, row.taskName, 1)
+          })
         }
       },
       // 装置名称字典翻译

+ 11 - 50
ruoyi-ui/src/views/rc/approve/pending/index.vue

@@ -33,6 +33,7 @@
     />
     <process-img v-if="processImgVisible" ref="processImg" @refreshDataList="getList"></process-img>
     <questionnaire-detail v-if="questionnaireVisible" ref="questionnaireDetail" @refreshDataList="getList"/>
+    <openitem-detail v-if="openitemVisible" ref="openitemDetail" @refreshDataList="getList"/>
   </div>
 </template>
 
@@ -41,12 +42,14 @@
   import ProcessImg from '../processImg/index';
   import {getToken} from "@/utils/auth"
   import QuestionnaireDetail from "@/views/rc/approve/detail/questionnaire-detail";
+  import OpenitemDetail from "@/views/rc/approve/detail/openitem-detail";
 
   export default {
     name: "Pending",
     components: {
       ProcessImg,
-      QuestionnaireDetail
+      QuestionnaireDetail,
+      OpenitemDetail
     },
     data() {
       return {
@@ -55,6 +58,7 @@
         //弹窗界面是否开启
         questionnaireVisible: false,
         processImgVisible: false,
+        openitemVisible: false,
         // 选中数组
         ids: [],
         // 非单个禁用
@@ -93,36 +97,6 @@
           approveNo: null,
           deptId: null,
         },
-        // 措施前上传照片参数
-        uploadbefore: {
-          file: "",
-          // 是否禁用上传
-          isUploading: false,
-          // 是否更新已经存在的用户数据
-          updateSupport: 0,
-          // 设置上传的请求头部
-          headers: { Authorization: "Bearer " + getToken() },
-          // 上传的地址
-          url: process.env.VUE_APP_BASE_API + "/common/upload",
-          // 报告附件上传位置编号
-          ids: 0,
-          commonfileList: null,
-        },
-        // 措施后上传照片参数
-        uploadafter: {
-          file: "",
-          // 是否禁用上传
-          isUploading: false,
-          // 是否更新已经存在的用户数据
-          updateSupport: 0,
-          // 设置上传的请求头部
-          headers: { Authorization: "Bearer " + getToken() },
-          // 上传的地址
-          url: process.env.VUE_APP_BASE_API + "/common/upload",
-          // 报告附件上传位置编号
-          ids: 0,
-          commonfileList: null,
-        },
         // 表单参数
         form: {},
         //事件记录人更新内容
@@ -183,25 +157,6 @@
       // 表单重置
       reset() {
         this.form = {
-          id: null,
-          plantCode: null,
-          recorderId: null,
-          hiddendangerLevel: null,
-          hiddendangerContent: null,
-          measures: null,
-          completeTime: null,
-          status: 0,
-          creattime: null,
-          endtime: null,
-          processId: null,
-          approveNo: null,
-          deptId: null,
-          delFlag: null,
-          submitType: null,
-          commont: null,
-          accidentLevel: null,
-          executorId: null
-
         };
         this.resetForm("form");
       },
@@ -213,6 +168,12 @@
           this.$nextTick(() => {
             this.$refs.questionnaireDetail.init(row.progress, row.taskId, row.processId, row.taskName, 2)
           })
+        } else if (row.processName == "开项审批流程") {
+          this.title = '处理开项审批流程';
+          this.openitemVisible = true
+          this.$nextTick(() => {
+            this.$refs.openitemDetail.init(row.openItem, row.taskId, row.processId, row.taskName, 2)
+          })
         }
       },
       // 多选框选中数据

+ 12 - 2
ruoyi-ui/src/views/rc/approve/taskdone/index.vue

@@ -43,6 +43,7 @@
     />
     <process-img v-if="processImgVisible" ref="processImg" @refreshDataList="getList"></process-img>
     <questionnaire-detail v-if="questionnaireVisible" ref="questionnaireDetail" @refreshDataList="getList"/>
+    <openitem-detail v-if="openitemVisible" ref="openitemDetail" @refreshDataList="getList"/>
   </div>
 </template>
 
@@ -50,12 +51,14 @@
   import { getTaskdonelist } from "@/api/rc/approvedanger";
   import QuestionnaireDetail from "@/views/rc/approve/detail/questionnaire-detail";
   import ProcessImg from "../processImg/index";
+  import OpenitemDetail from "@/views/rc/approve/detail/openitem-detail";
 
   export default {
     name: "Taskdone",
     components: {
       ProcessImg,
-      QuestionnaireDetail
+      QuestionnaireDetail,
+      OpenitemDetail
     },
     data() {
       return {
@@ -63,6 +66,7 @@
         loading: true,
         processImgVisible: false,
         questionnaireVisible: false,
+        openitemVisible: false,
         // 选中数组
         ids: [],
         // 非单个禁用
@@ -135,11 +139,17 @@
       /** 查看操作 */
       handleView (row) {
         if (row.processName == "问卷审批流程") {
-          this.title = '处理问卷审批流程';
+          this.title = '查看问卷审批流程';
           this.questionnaireVisible = true
           this.$nextTick(() => {
             this.$refs.questionnaireDetail.init(row.progress, row.taskId, row.processId, row.taskName, 3)
           })
+        } else if (row.processName == "开项审批流程") {
+          this.title = '查看开项审批流程';
+          this.openitemVisible = true
+          this.$nextTick(() => {
+            this.$refs.openitemDetail.init(row.openItem, row.taskId, row.processId, row.taskName, 3)
+          })
         }
       },
       // 装置名称字典翻译

+ 3 - 0
sql/create.sql

@@ -616,3 +616,6 @@ ALTER TABLE t_progress ADD ap_no varchar(255) NULL COMMENT '申请编号';
 ALTER TABLE t_progress ADD task_id varchar(255) NULL COMMENT '任务编号';
 ALTER TABLE t_progress ADD task_name varchar(255) NULL COMMENT '任务名称';
 
+ALTER TABLE t_open_item ADD process_id varchar(255) NULL COMMENT '流程id';
+ALTER TABLE t_open_item ADD ap_no varchar(255) NULL COMMENT '申请编号';
+