Commit cf7a434f0cf3bd1767afeda406c08fd36aeac8a3
1 parent
519a4a16
流程详情页 80% - 接入审批通过、审批不通过的功能
Showing
2 changed files
with
74 additions
and
35 deletions
yudao-admin-ui/src/views/bpm/processInstance/detail.vue
| 1 | 1 | <template> |
| 2 | 2 | <div class="app-container"> |
| 3 | 3 | <!-- 审批信息 --> |
| 4 | - <el-card class="box-card" v-loading="processInstanceLoading"> | |
| 4 | + <el-card class="box-card" v-loading="processInstanceLoading" v-for="(item, index) in tasks" :key="index"> | |
| 5 | 5 | <div slot="header" class="clearfix"> |
| 6 | - <span class="el-icon-picture-outline">审批任务【TODO】</span> | |
| 6 | + <span class="el-icon-picture-outline">审批任务【{{ item.name }}】</span> | |
| 7 | 7 | </div> |
| 8 | 8 | <el-col :span="16" :offset="6" > |
| 9 | - <el-form ref="form" :model="form" :rules="rules" label-width="80px"> | |
| 10 | - <el-row> | |
| 11 | - <el-col :span="12"> | |
| 12 | - <el-form-item label="审批建议" prop="comment"> | |
| 13 | - <el-input type="textarea" v-model="form.comment" placeholder="请输入审批建议" /> | |
| 14 | - </el-form-item> | |
| 15 | - </el-col> | |
| 16 | - </el-row> | |
| 9 | + <el-form :ref="'form' + index" :model="auditForms[index]" :rules="auditRule" label-width="100px"> | |
| 10 | + <el-form-item label="流程名" v-if="processInstance && processInstance.name"> | |
| 11 | + {{ processInstance.name }} | |
| 12 | + </el-form-item> | |
| 13 | + <el-form-item label="流程发起人" v-if="processInstance && processInstance.startUser"> | |
| 14 | + {{ processInstance.startUser.nickname }} | |
| 15 | + <el-tag type="info" size="mini">{{ processInstance.startUser.deptName }}</el-tag> | |
| 16 | + </el-form-item> | |
| 17 | + <el-form-item label="审批建议" prop="comment"> | |
| 18 | + <el-input type="textarea" v-model="auditForms[index].comment" placeholder="请输入审批建议" /> | |
| 19 | + </el-form-item> | |
| 17 | 20 | </el-form> |
| 18 | 21 | <div style="margin-left: 10%; margin-bottom: 20px; font-size: 14px;"> |
| 19 | - <el-button icon="el-icon-edit-outline" type="success" size="mini" @click="handleComplete">通过</el-button> | |
| 20 | - <el-button icon="el-icon-circle-close" type="danger" size="mini" @click="handleReject">不通过</el-button> | |
| 21 | - <el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleAssign">转办</el-button> | |
| 22 | - <el-button icon="el-icon-edit-outline" type="info" size="mini" @click="handleDelegate">委派</el-button> | |
| 23 | - <el-button icon="el-icon-refresh-left" type="warning" size="mini" @click="handleReturn">退回</el-button> | |
| 22 | + <el-button icon="el-icon-edit-outline" type="success" size="mini" @click="handleAudit(item, true)">通过</el-button> | |
| 23 | + <el-button icon="el-icon-circle-close" type="danger" size="mini" @click="handleAudit(item, false)">不通过</el-button> | |
| 24 | +<!-- <el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleAssign">转办</el-button>--> | |
| 25 | + <el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleDelegate(item)">委派</el-button> | |
| 26 | + <el-button icon="el-icon-refresh-left" type="warning" size="mini" @click="handleBack(item)">退回</el-button> | |
| 24 | 27 | </div> |
| 25 | 28 | </el-col> |
| 26 | 29 | </el-card> |
| ... | ... | @@ -43,8 +46,7 @@ |
| 43 | 46 | <div class="block"> |
| 44 | 47 | <el-timeline> |
| 45 | 48 | <el-timeline-item v-for="(item, index) in historicTasks" :key="index" |
| 46 | - :icon="getTimelineItemIcon(item)" | |
| 47 | - :type="getTimelineItemType(item)"> | |
| 49 | + :icon="getTimelineItemIcon(item)" :type="getTimelineItemType(item)"> | |
| 48 | 50 | <p style="font-weight: 700">任务:{{ item.name }}</p> |
| 49 | 51 | <el-card :body-style="{ padding: '10px' }"> |
| 50 | 52 | <label v-if="item.assigneeUser" style="font-weight: normal; margin-right: 30px;"> |
| ... | ... | @@ -83,7 +85,7 @@ import {getForm} from "@/api/bpm/form"; |
| 83 | 85 | import {decodeFields} from "@/utils/formGenerator"; |
| 84 | 86 | import Parser from '@/components/parser/Parser' |
| 85 | 87 | import {createProcessInstance, getMyProcessInstancePage, getProcessInstance} from "@/api/bpm/processInstance"; |
| 86 | -import {getHistoricTaskListByProcessInstanceId} from "@/api/bpm/task"; | |
| 88 | +import {approveTask, getHistoricTaskListByProcessInstanceId, rejectTask} from "@/api/bpm/task"; | |
| 87 | 89 | import {getDate} from "@/utils/dateUtils"; |
| 88 | 90 | |
| 89 | 91 | // 流程实例的详情页,可用于审批 |
| ... | ... | @@ -116,8 +118,9 @@ export default { |
| 116 | 118 | historicTasks: [], |
| 117 | 119 | |
| 118 | 120 | // 审批表单 |
| 119 | - form: {}, | |
| 120 | - rules: { | |
| 121 | + tasks: [], | |
| 122 | + auditForms: [], | |
| 123 | + auditRule: { | |
| 121 | 124 | comment: [{ required: true, message: "审批建议不能为空", trigger: "blur" }], |
| 122 | 125 | }, |
| 123 | 126 | |
| ... | ... | @@ -172,7 +175,10 @@ export default { |
| 172 | 175 | |
| 173 | 176 | // 获得流程任务列表(审批记录) |
| 174 | 177 | this.historicTasksLoad = true; |
| 178 | + this.tasks = []; | |
| 179 | + this.auditForms = []; | |
| 175 | 180 | getHistoricTaskListByProcessInstanceId(this.id).then(response => { |
| 181 | + // 审批记录 | |
| 176 | 182 | this.historicTasks = response.data; |
| 177 | 183 | // 排序,将未完成的排在前面,已完成的排在后面; |
| 178 | 184 | this.historicTasks.sort((a, b) => { |
| ... | ... | @@ -188,6 +194,19 @@ export default { |
| 188 | 194 | return b.createTime - a.createTime; |
| 189 | 195 | } |
| 190 | 196 | }); |
| 197 | + | |
| 198 | + // 需要审核的记录 | |
| 199 | + this.historicTasks.forEach(task => { | |
| 200 | + if (task.result !== 1) { // 只有待处理才需要 | |
| 201 | + return; | |
| 202 | + } | |
| 203 | + this.tasks.push({...task}); | |
| 204 | + this.auditForms.push({ | |
| 205 | + comment: '' | |
| 206 | + }) | |
| 207 | + }); | |
| 208 | + | |
| 209 | + // 取消加载中 | |
| 191 | 210 | this.historicTasksLoad = false; |
| 192 | 211 | }); |
| 193 | 212 | }, |
| ... | ... | @@ -266,6 +285,38 @@ export default { |
| 266 | 285 | } |
| 267 | 286 | return ''; |
| 268 | 287 | }, |
| 288 | + /** 处理审批通过和不通过的操作 */ | |
| 289 | + handleAudit(task, pass) { | |
| 290 | + const index = this.tasks.indexOf(task); | |
| 291 | + this.$refs['form' + index][0].validate(valid => { | |
| 292 | + if (!valid) { | |
| 293 | + return; | |
| 294 | + } | |
| 295 | + const data = { | |
| 296 | + id: task.id, | |
| 297 | + comment: this.auditForms[index].comment | |
| 298 | + } | |
| 299 | + if (pass) { | |
| 300 | + approveTask(data).then(response => { | |
| 301 | + this.msgSuccess("审批通过成功!"); | |
| 302 | + this.getDetail(); // 获得最新详情 | |
| 303 | + }); | |
| 304 | + } else { | |
| 305 | + rejectTask(data).then(response => { | |
| 306 | + this.msgSuccess("审批不通过成功!"); | |
| 307 | + this.getDetail(); // 获得最新详情 | |
| 308 | + }); | |
| 309 | + } | |
| 310 | + }) | |
| 311 | + }, | |
| 312 | + /** 处理审批退回的操作 */ | |
| 313 | + handleDelegate(task) { | |
| 314 | + this.msgError("暂不支持【委派】功能,可以使用【转派】替代!"); | |
| 315 | + }, | |
| 316 | + /** 处理审批退回的操作 */ | |
| 317 | + handleBack(task) { | |
| 318 | + this.msgError("暂不支持【退回】功能!"); | |
| 319 | + } | |
| 269 | 320 | } |
| 270 | 321 | }; |
| 271 | 322 | </script> | ... | ... |
yudao-admin-ui/src/views/bpm/task/todo.vue
| ... | ... | @@ -3,6 +3,9 @@ |
| 3 | 3 | |
| 4 | 4 | <!-- 搜索工作栏 --> |
| 5 | 5 | <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> |
| 6 | + <el-form-item label="流程发起人"> | |
| 7 | + 321321321 | |
| 8 | + </el-form-item> | |
| 6 | 9 | <el-form-item label="流程名" prop="name"> |
| 7 | 10 | <el-input v-model="queryParams.name" placeholder="请输入流程名" clearable size="small" @keyup.enter.native="handleQuery"/> |
| 8 | 11 | </el-form-item> |
| ... | ... | @@ -37,8 +40,6 @@ |
| 37 | 40 | <template slot-scope="scope"> |
| 38 | 41 | <!-- TODO 权限、颜色 --> |
| 39 | 42 | <el-button size="mini" type="text" icon="el-icon-edit" @click="handleAudit(scope.row)">审批</el-button> |
| 40 | - <el-button size="mini" type="text" icon="el-icon-edit" @click="audit(scope.row, true)">通过</el-button> | |
| 41 | - <el-button size="mini" type="text" icon="el-icon-edit" @click="audit(scope.row, false)">不通过</el-button> | |
| 42 | 43 | <el-button size="mini" type="text" icon="el-icon-edit" v-if="scope.row.suspensionState === 2">激活</el-button> |
| 43 | 44 | <el-button size="mini" type="text" icon="el-icon-edit" v-if="scope.row.suspensionState === 1">挂起</el-button> |
| 44 | 45 | </template> |
| ... | ... | @@ -108,19 +109,6 @@ export default { |
| 108 | 109 | handleAudit(row) { |
| 109 | 110 | this.$router.push({ path: "/bpm/process-instance/detail", query: { id: row.processInstance.id}}); |
| 110 | 111 | }, |
| 111 | - audit(row, pass) { | |
| 112 | - if (pass) { | |
| 113 | - approveTask({ | |
| 114 | - id: row.id, | |
| 115 | - comment: '通过' | |
| 116 | - }) | |
| 117 | - } else { | |
| 118 | - rejectTask({ | |
| 119 | - id: row.id, | |
| 120 | - comment: '不通过' | |
| 121 | - }) | |
| 122 | - } | |
| 123 | - } | |
| 124 | 112 | } |
| 125 | 113 | }; |
| 126 | 114 | </script> | ... | ... |