Jelajahi Sumber

限制流程节点只展示当前数据所在流程节点

Z 2 tahun lalu
induk
melakukan
c13f5a91aa
1 mengubah file dengan 357 tambahan dan 351 penghapusan
  1. 357 351
      src/views/bpm/handleTask/index.vue

+ 357 - 351
src/views/bpm/handleTask/index.vue

@@ -12,7 +12,7 @@
       <el-card class="box-card" v-loading="processInstanceLoading">
         <div slot="header" class="clearfix">
           <span class="el-icon-document"
-            >申请信息【{{ processInstance.name }}】 申请人:【{{
+          >申请信息【{{ processInstance.name }}】 申请人:【{{
               processInstance.startUser?.nickname
             }}】</span
           >
@@ -61,7 +61,7 @@
             :rules="auditRule"
             label-width="100px"
           >
-     
+
             <el-form-item
               label="审批建议"
               prop="reason"
@@ -145,7 +145,8 @@
         </el-form>
         <div slot="footer" class="dialog-footer">
           <el-button type="primary" @click="submitUpdateAssigneeForm"
-            >确 定</el-button
+          >确 定
+          </el-button
           >
           <el-button @click="cancelUpdateAssigneeForm">取 消</el-button>
         </div>
@@ -188,7 +189,8 @@
         </el-form>
         <div slot="footer" class="dialog-footer">
           <el-button type="primary" @click="submitUpdateDelegateForm"
-            >确 定</el-button
+          >确 定
+          </el-button
           >
           <el-button @click="cancelUpdateDelegateForm">取 消</el-button>
         </div>
@@ -235,7 +237,7 @@
             :disabled="formLoading"
             type="primary"
             @click="submitReturn"
-            >确 定</el-button
+          >确 定</el-button
           >
         </span>
       </el-dialog>
@@ -244,383 +246,387 @@
 </template>
 
 <script>
-  // import { getProcessDefinitionBpmnXML } from '@/api/bpm/definition';
-  import store from '@/store';
-  //   import {decodeFields} from "@/utils/formGenerator";
-  //   import Parser from '@/components/parser/Parser'
-  import { getProcessInstance } from '@/api/bpm/processInstance';
-  import { listAllUserBind } from '@/api/system/organization';
-  import Vue from 'vue';
+// import { getProcessDefinitionBpmnXML } from '@/api/bpm/definition';
+import store from '@/store';
+//   import {decodeFields} from "@/utils/formGenerator";
+//   import Parser from '@/components/parser/Parser'
+import {getProcessInstance} from '@/api/bpm/processInstance';
+import {listAllUserBind} from '@/api/system/organization';
+import Vue from 'vue';
 
-  import {
-    approveTask,
-    delegateTask,
-    getReturnList,
-    getTaskListByProcessInstanceId,
-    rejectTask,
-    returnTask,
-    updateTaskAssignee
-  } from '@/api/bpm/task';
-  // import { getDate } from '@/utils/dateUtils';
+import {
+  approveTask,
+  delegateTask,
+  getReturnList,
+  getTaskListByProcessInstanceId,
+  rejectTask,
+  returnTask,
+  updateTaskAssignee
+} from '@/api/bpm/task';
+// import { getDate } from '@/utils/dateUtils';
 
-  // 流程实例的详情页,可用于审批
-  export default {
-    name: 'ProcessInstanceDetail',
-    components: {
-      //   Parser
-    },
-    data() {
-      return {
-        // 遮罩层
-        processInstanceLoading: true,
-        dialogVisible: false,
-        // 流程实例
-        listData: {
-          id: undefined, // 流程实例的编号
-          pcHandleRouter: '',
-          pcViewRouter: '',
-          businessId: '', // 业务id
-          taskDefinitionKey: '',
-          taskId: '' //任务编码
-        },
+// 流程实例的详情页,可用于审批
+export default {
+  name: 'ProcessInstanceDetail',
+  components: {
+    //   Parser
+  },
+  data() {
+    return {
+      // 遮罩层
+      processInstanceLoading: true,
+      dialogVisible: false,
+      // 流程实例
+      listData: {
+        id: undefined, // 流程实例的编号
+        pcHandleRouter: '',
+        pcViewRouter: '',
+        businessId: '', // 业务id
+        taskDefinitionKey: '',
+        taskId: '' //任务编码
+      },
+
+      processInstance: {},
+      formLoading: false,
+      // 流程表单详情
+      detailForm: {
+        fields: []
+      },
+      //回退列表数据
+      returnList: [],
+      formData: {
+        id: '',
+        targetDefinitionKey: undefined,
+        reason: ''
+      },
+      formRules: {
+        targetDefinitionKey: [
+          {required: true, message: '必须选择回退节点', trigger: 'change'}
+        ],
+        reason: [
+          {required: true, message: '回退理由不能为空', trigger: 'blur'}
+        ]
+      },
+      returnOpen: false,
+      activityList: [],
 
-        processInstance: {},
-        formLoading: false,
-        // 流程表单详情
-        detailForm: {
-          fields: []
+      tasks: [],
+
+      // 审批表单
+      runningTasks: [],
+      auditForms: [],
+      auditRule: {
+        reason: [
+          {required: true, message: '审批建议不能为空', trigger: 'blur'}
+        ]
+      },
+      // 转派审批人
+      userOptions: [],
+      updateAssignee: {
+        open: false,
+        form: {
+          assigneeUserId: undefined
         },
-        //回退列表数据
-        returnList: [],
-        formData: {
-          id: '',
-          targetDefinitionKey: undefined,
+        rules: {
+          assigneeUserId: [
+            {required: true, message: '新审批人不能为空', trigger: 'change'}
+          ]
+        }
+      },
+      updateDelegate: {
+        open: false,
+        form: {
+          delegateUserId: undefined,
           reason: ''
         },
-        formRules: {
-          targetDefinitionKey: [
-            { required: true, message: '必须选择回退节点', trigger: 'change' }
+        rules: {
+          delegateUserId: [
+            {required: true, message: '新审批人不能为空', trigger: 'change'}
           ],
           reason: [
-            { required: true, message: '回退理由不能为空', trigger: 'blur' }
+            {required: true, message: '委派理由不能为空', trigger: 'blur'}
           ]
-        },
-        returnOpen: false,
-        activityList: [],
-
-        tasks: [],
-
-        // 审批表单
-        runningTasks: [],
-        auditForms: [],
-        auditRule: {
-          reason: [
-            { required: true, message: '审批建议不能为空', trigger: 'blur' }
-          ]
-        },
-        // 转派审批人
-        userOptions: [],
-        updateAssignee: {
-          open: false,
-          form: {
-            assigneeUserId: undefined
-          },
-          rules: {
-            assigneeUserId: [
-              { required: true, message: '新审批人不能为空', trigger: 'change' }
-            ]
-          }
-        },
-        updateDelegate: {
-          open: false,
-          form: {
-            delegateUserId: undefined,
-            reason: ''
-          },
-          rules: {
-            delegateUserId: [
-              { required: true, message: '新审批人不能为空', trigger: 'change' }
-            ],
-            reason: [
-              { required: true, message: '委派理由不能为空', trigger: 'blur' }
-            ]
-          }
         }
-      };
-    },
-    created() {
-      //   this.id = this.$route.query.id;
-      //   if (!this.id) {
-      //     this.$message.error('未传递 id 参数,无法查看流程信息');
-      //     return;
-      //   }
-      //   this.getDetail();
+      }
+    };
+  },
+  created() {
+    //   this.id = this.$route.query.id;
+    //   if (!this.id) {
+    //     this.$message.error('未传递 id 参数,无法查看流程信息');
+    //     return;
+    //   }
+    //   this.getDetail();
 
-      // 获得用户列表
-      this.userOptions = [];
-      listAllUserBind().then((data) => {
-        this.userOptions.push(...data);
-      });
+    // 获得用户列表
+    this.userOptions = [];
+    listAllUserBind().then((data) => {
+      this.userOptions.push(...data);
+    });
+  },
+  methods: {
+    submit(data) {
+      this.$refs.bziRef.save(data);
     },
-    methods: {
-      submit(data) {
-        this.$refs.bziRef.save(data);
-      },
-      open(data) {
-        this.listData = data;
-        console.log('实例流程~~~~~~', data);
-        this.dialogVisible = true;
-        this.getDetail();
-      },
-      activeCompChange(activeComp) {
-        console.log(activeComp);
-        this.$refs.subForm[0].activeCompChange(activeComp);
-      },
-      /** 获得流程实例 */
-      getDetail() {
-        // 获得流程实例相关
-        this.processInstanceLoading = true;
-        getProcessInstance(this.listData.id).then((response) => {
-          if (!response) {
-            this.$message.error('查询不到流程信息!');
-            return;
-          }
-          // 设置流程信息
-          console.log('==', response);
-          console.log('==', this.listData);
-          this.processInstance = response;
-          // //将业务表单,注册为动态组件
-          // let formCustomCreatePath = JSON.parse(
-          //   this.processInstance.processDefinition.formCustomCreatePath
-          // );
-          // const bizpath = formCustomCreatePath.pcView;
-          // const subpath = formCustomCreatePath.pcHandle;
-          Vue.component('async-biz-form-component', (resolve) => {
-            require([`@/views${this.listData.pcViewRouter}`], resolve);
-          });
-          Vue.component('async-sub-form-component', (resolve) => {
-            require([`@/views${this.listData.pcHandleRouter}`], resolve);
-          });
-          //   // 设置表单信息
-          //   if (this.processInstance.processDefinition.formType === 10) {
-          //     this.detailForm = {
-          //       ...JSON.parse(this.processInstance.processDefinition.formConf),
-          //       disabled: true, // 表单禁用
-          //       formBtns: false, // 按钮隐藏
-          //       fields: decodeFields(this.processInstance.processDefinition.formFields)
-          //     }
-          //     // 设置表单的值
-          //     this.detailForm.fields.forEach(item => {
-          //       const val = this.processInstance.formVariables[item.__vModel__]
-          //       if (val) {
-          //         item.__config__.defaultValue = val
-          //       }
-          //     });
-          //   }
-
-          // 取消加载中
-          this.processInstanceLoading = false;
+    open(data) {
+      this.listData = data;
+      console.log('实例流程~~~~~~', data);
+      this.dialogVisible = true;
+      this.getDetail();
+    },
+    activeCompChange(activeComp) {
+      console.log(activeComp);
+      this.$refs.subForm[0].activeCompChange(activeComp);
+    },
+    /** 获得流程实例 */
+    getDetail() {
+      // 获得流程实例相关
+      this.processInstanceLoading = true;
+      getProcessInstance(this.listData.id).then((response) => {
+        if (!response) {
+          this.$message.error('查询不到流程信息!');
+          return;
+        }
+        // 设置流程信息
+        console.log('==', response);
+        console.log('==', this.listData);
+        this.processInstance = response;
+        // //将业务表单,注册为动态组件
+        // let formCustomCreatePath = JSON.parse(
+        //   this.processInstance.processDefinition.formCustomCreatePath
+        // );
+        // const bizpath = formCustomCreatePath.pcView;
+        // const subpath = formCustomCreatePath.pcHandle;
+        Vue.component('async-biz-form-component', (resolve) => {
+          require([`@/views${this.listData.pcViewRouter}`], resolve);
         });
-
-        this.runningTasks = [];
-        this.auditForms = [];
-        getTaskListByProcessInstanceId(this.listData.id).then((response) => {
-          console.log(response, 'response');
-          // 审批记录
-          this.tasks = [];
-          // 移除已取消的审批
-          response.forEach((task) => {
-            if (task.result !== 4) {
-              this.tasks.push(task);
-            }
-          });
-          // 排序,将未完成的排在前面,已完成的排在后面;
-          this.tasks.sort((a, b) => {
-            // 有已完成的情况,按照完成时间倒序
-            if (a.endTime && b.endTime) {
-              return b.endTime - a.endTime;
-            } else if (a.endTime) {
-              return 1;
-            } else if (b.endTime) {
-              return -1;
-              // 都是未完成,按照创建时间倒序
-            } else {
-              return b.createTime - a.createTime;
-            }
-          });
-
-          // 需要审核的记录
-          const userId = store.getters.user.info.userId;
-          this.tasks.forEach((task) => {
-            if (task.result !== 1 && task.result !== 6) {
-              // 只有待处理才需要
-              return;
-            }
-            if (!task.assigneeUser || task.assigneeUser.id !== userId) {
-              // 自己不是处理人
-              return;
-            }
-            this.runningTasks.push({ ...task });
-            console.log(this.runningTasks, ' this.runningTasks');
-            this.auditForms.push({
-              reason: ''
-            });
-          });
+        Vue.component('async-sub-form-component', (resolve) => {
+          require([`@/views${this.listData.pcHandleRouter}`], resolve);
         });
-      },
-
-      /** 处理审批通过和不通过的操作 */
-      handleAudit(data) {
-        let text = data.status === 1 ? '通过' : '不通过';
-        this.$message.success(`审批${data.title || text}成功!`);
-        this.handleClose(); // 获得最新详情
-
-        // const index = this.runningTasks.indexOf(task);
-        // this.$refs['form' + index][0].validate((valid) => {
-        //   if (!valid) {
-        //     return;
-        //   }
-        //   const data = {
-        //     id: task.id,
-        //     reason: this.auditForms[index].reason
-        //   };
-        //   if (pass) {
-        //     approveTask(data).then((response) => {
-        //       this.$message.success('审批通过成功!');
-        //       this.handleClose(); // 获得最新详情
-        //     });
-        //   } else {
-        //     rejectTask(data).then((response) => {
-        //       this.$message.success('审批不通过成功!');
-        //       this.handleClose(); // 获得最新详情
+        //   // 设置表单信息
+        //   if (this.processInstance.processDefinition.formType === 10) {
+        //     this.detailForm = {
+        //       ...JSON.parse(this.processInstance.processDefinition.formConf),
+        //       disabled: true, // 表单禁用
+        //       formBtns: false, // 按钮隐藏
+        //       fields: decodeFields(this.processInstance.processDefinition.formFields)
+        //     }
+        //     // 设置表单的值
+        //     this.detailForm.fields.forEach(item => {
+        //       const val = this.processInstance.formVariables[item.__vModel__]
+        //       if (val) {
+        //         item.__config__.defaultValue = val
+        //       }
         //     });
         //   }
-        // });
-      },
-      /** 处理转办审批人 */
-      handleUpdateAssignee(task) {
-        // 设置表单
-        this.resetUpdateAssigneeForm();
-        this.updateAssignee.form.id = task.id;
-        // 设置为打开
-        this.updateAssignee.open = true;
-      },
-      /** 提交转办审批人 */
-      submitUpdateAssigneeForm() {
-        this.$refs['updateAssigneeForm'].validate((valid) => {
-          if (!valid) {
-            return;
-          }
-          updateTaskAssignee(this.updateAssignee.form).then((response) => {
-            this.$message.success('转办任务成功!');
 
-            this.updateAssignee.open = false;
-            this.handleClose(); // 获得最新详情
-          });
+        // 取消加载中
+        this.processInstanceLoading = false;
+      });
+
+      this.runningTasks = [];
+      this.auditForms = [];
+      getTaskListByProcessInstanceId(this.listData.id).then((response) => {
+        console.log(response, 'response');
+        // 审批记录
+        this.tasks = [];
+        // 移除已取消的审批
+        response.forEach((task) => {
+          if (task.result !== 4) {
+            this.tasks.push(task);
+          }
         });
-      },
-      /** 取消转办审批人 */
-      cancelUpdateAssigneeForm() {
-        this.updateAssignee.open = false;
-        this.resetUpdateAssigneeForm();
-      },
-      /** 重置转办审批人 */
-      resetUpdateAssigneeForm() {
-        this.updateAssignee.form = {
-          id: undefined,
-          assigneeUserId: undefined
-        };
-        this.resetForm('updateAssigneeForm');
-      },
-      /** 处理审批委派的操作 */
-      handleDelegate(task) {
-        //this.$modal.msgError("暂不支持【委派】功能,可以使用【转派】替代!");
-        this.resetUpdateDelegateForm();
-        this.updateDelegate.form.id = task.id;
-        // 设置为打开
-        this.updateDelegate.open = true;
-      },
-      /** 提交委派审批人 */
-      submitUpdateDelegateForm() {
-        this.$refs['updateDelegateForm'].validate((valid) => {
-          if (!valid) {
-            return;
+        // 排序,将未完成的排在前面,已完成的排在后面;
+        this.tasks.sort((a, b) => {
+          // 有已完成的情况,按照完成时间倒序
+          if (a.endTime && b.endTime) {
+            return b.endTime - a.endTime;
+          } else if (a.endTime) {
+            return 1;
+          } else if (b.endTime) {
+            return -1;
+            // 都是未完成,按照创建时间倒序
+          } else {
+            return b.createTime - a.createTime;
           }
-          delegateTask(this.updateDelegate.form).then((response) => {
-            this.$message.success('委派任务成功!');
-            this.updateDelegate.open = false;
-            this.handleClose(); // 获得最新详情
-          });
         });
-      },
-      /** 取消委派审批人 */
-      cancelUpdateDelegateForm() {
-        this.updateDelegate.open = false;
-        this.resetUpdateDelegateForm();
-      },
-      /** 重置委派审批人 */
-      resetUpdateDelegateForm() {
-        this.updateDelegate.form = {
-          id: undefined,
-          delegateUserId: undefined
-        };
-        this.resetForm('updateDelegateForm');
-      },
-      /** 处理审批退回的操作 */
-      /** 返回退回节点列表 */
-      handleBackList(task) {
-        // 可参考 http://blog.wya1.com/article/636697030/details/7296
-        getReturnList(task.id).then((response) => {
-          this.returnList = response.data.data;
-          if (this.returnList.length == 0) {
-            this.$message.error('当前没有可回退的节点!');
 
+        // 需要审核的记录
+        const userId = store.getters.user.info.userId;
+        this.tasks.forEach((task) => {
+          if (task.result !== 1 && task.result !== 6) {
+            // 只有待处理才需要
             return;
           }
-          this.formData.id = task.id;
-          this.returnOpen = true;
-        });
-      },
-      /** 提交退回任务 */
-      submitReturn() {
-        if (!this.formData.targetDefinitionKey) {
-          this.$message.error('请选择退回节点!');
-        }
-        this.$refs['formRef'].validate((valid) => {
-          if (!valid) {
+          if (!task.assigneeUser || task.assigneeUser.id !== userId) {
+            // 自己不是处理人
             return;
           }
-          returnTask(this.formData).then((res) => {
-            if (res.data) {
-              this.$message.success('回退成功!');
-
-              this.returnOpen = false;
-              this.handleClose(); // 获得最新详情
-            }
+          if (task.taskDefinitionKey !== this.listData.taskDefinitionKey) {
+            // 不是当前流程的
+            return;
+          }
+          this.runningTasks.push({...task});
+          console.log(this.runningTasks, ' this.runningTasks');
+          this.auditForms.push({
+            reason: ''
           });
         });
-      },
-      handleClose() {
-        this.$emit('reload');
-        this.dialogVisible = false;
-      },
-      getTableValue(fn) {
-        fn(this.$refs.bziRef.getTableValue());
-      },
-      getReturnStorage(fn) {
-        fn(this.$refs.bziRef.getReturnStorage());
+      });
+    },
+
+    /** 处理审批通过和不通过的操作 */
+    handleAudit(data) {
+      let text = data.status === 1 ? '通过' : '不通过';
+      this.$message.success(`审批${data.title || text}成功!`);
+      this.handleClose(); // 获得最新详情
+
+      // const index = this.runningTasks.indexOf(task);
+      // this.$refs['form' + index][0].validate((valid) => {
+      //   if (!valid) {
+      //     return;
+      //   }
+      //   const data = {
+      //     id: task.id,
+      //     reason: this.auditForms[index].reason
+      //   };
+      //   if (pass) {
+      //     approveTask(data).then((response) => {
+      //       this.$message.success('审批通过成功!');
+      //       this.handleClose(); // 获得最新详情
+      //     });
+      //   } else {
+      //     rejectTask(data).then((response) => {
+      //       this.$message.success('审批不通过成功!');
+      //       this.handleClose(); // 获得最新详情
+      //     });
+      //   }
+      // });
+    },
+    /** 处理转办审批人 */
+    handleUpdateAssignee(task) {
+      // 设置表单
+      this.resetUpdateAssigneeForm();
+      this.updateAssignee.form.id = task.id;
+      // 设置为打开
+      this.updateAssignee.open = true;
+    },
+    /** 提交转办审批人 */
+    submitUpdateAssigneeForm() {
+      this.$refs['updateAssigneeForm'].validate((valid) => {
+        if (!valid) {
+          return;
+        }
+        updateTaskAssignee(this.updateAssignee.form).then((response) => {
+          this.$message.success('转办任务成功!');
+
+          this.updateAssignee.open = false;
+          this.handleClose(); // 获得最新详情
+        });
+      });
+    },
+    /** 取消转办审批人 */
+    cancelUpdateAssigneeForm() {
+      this.updateAssignee.open = false;
+      this.resetUpdateAssigneeForm();
+    },
+    /** 重置转办审批人 */
+    resetUpdateAssigneeForm() {
+      this.updateAssignee.form = {
+        id: undefined,
+        assigneeUserId: undefined
+      };
+      this.resetForm('updateAssigneeForm');
+    },
+    /** 处理审批委派的操作 */
+    handleDelegate(task) {
+      //this.$modal.msgError("暂不支持【委派】功能,可以使用【转派】替代!");
+      this.resetUpdateDelegateForm();
+      this.updateDelegate.form.id = task.id;
+      // 设置为打开
+      this.updateDelegate.open = true;
+    },
+    /** 提交委派审批人 */
+    submitUpdateDelegateForm() {
+      this.$refs['updateDelegateForm'].validate((valid) => {
+        if (!valid) {
+          return;
+        }
+        delegateTask(this.updateDelegate.form).then((response) => {
+          this.$message.success('委派任务成功!');
+          this.updateDelegate.open = false;
+          this.handleClose(); // 获得最新详情
+        });
+      });
+    },
+    /** 取消委派审批人 */
+    cancelUpdateDelegateForm() {
+      this.updateDelegate.open = false;
+      this.resetUpdateDelegateForm();
+    },
+    /** 重置委派审批人 */
+    resetUpdateDelegateForm() {
+      this.updateDelegate.form = {
+        id: undefined,
+        delegateUserId: undefined
+      };
+      this.resetForm('updateDelegateForm');
+    },
+    /** 处理审批退回的操作 */
+    /** 返回退回节点列表 */
+    handleBackList(task) {
+      // 可参考 http://blog.wya1.com/article/636697030/details/7296
+      getReturnList(task.id).then((response) => {
+        this.returnList = response.data.data;
+        if (this.returnList.length == 0) {
+          this.$message.error('当前没有可回退的节点!');
+
+          return;
+        }
+        this.formData.id = task.id;
+        this.returnOpen = true;
+      });
+    },
+    /** 提交退回任务 */
+    submitReturn() {
+      if (!this.formData.targetDefinitionKey) {
+        this.$message.error('请选择退回节点!');
       }
+      this.$refs['formRef'].validate((valid) => {
+        if (!valid) {
+          return;
+        }
+        returnTask(this.formData).then((res) => {
+          if (res.data) {
+            this.$message.success('回退成功!');
+
+            this.returnOpen = false;
+            this.handleClose(); // 获得最新详情
+          }
+        });
+      });
+    },
+    handleClose() {
+      this.$emit('reload');
+      this.dialogVisible = false;
+    },
+    getTableValue(fn) {
+      fn(this.$refs.bziRef.getTableValue());
+    },
+    getReturnStorage(fn) {
+      fn(this.$refs.bziRef.getReturnStorage());
     }
-  };
+  }
+};
 </script>
 
 <style lang="scss">
-  .my-process-designer {
-    height: calc(100vh - 200px);
-  }
+.my-process-designer {
+  height: calc(100vh - 200px);
+}
 
-  .box-card {
-    width: 100%;
-    margin-bottom: 20px;
-  }
+.box-card {
+  width: 100%;
+  margin-bottom: 20px;
+}
 </style>