Commit cf7a434f0cf3bd1767afeda406c08fd36aeac8a3

Authored by YunaiV
1 parent 519a4a16

流程详情页 80% - 接入审批通过、审批不通过的功能

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 &quot;@/api/bpm/form&quot;;
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>
... ...