Skip to content

Commit 6809146

Browse files
YunaiVgitee-org
authored andcommitted
!212 工作流支持会签、或签,可自定义任务分配方式
Merge pull request !212 from 芋道源码/feature/bpm-back
2 parents 4640968 + 06a6463 commit 6809146

File tree

9 files changed

+40
-34
lines changed

9 files changed

+40
-34
lines changed

src/api/bpm/task.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ export function rejectTask(data) {
3939
data: data
4040
})
4141
}
42+
export function backTask(data) {
43+
return request({
44+
url: '/bpm/task/back',
45+
method: 'PUT',
46+
data: data
47+
})
48+
}
4249

4350
export function updateTaskAssignee(data) {
4451
return request({

src/components/bpmnProcessDesigner/package/designer/ProcessDesigner.vue

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ export default {
118118
componentName: "MyProcessDesigner",
119119
props: {
120120
value: String, // xml 字符串
121+
valueWatch: true, // xml 字符串的 watch 状态
121122
processId: String, // 流程 key 标识
122123
processName: String, // 流程 name 名字
123124
formId: Number, // 流程 form 表单编号
@@ -252,11 +253,6 @@ export default {
252253
this.bpmnModeler = null;
253254
});
254255
},
255-
watch: {
256-
value: function (newValue) { // 在 xmlString 发生变化时,重新创建,从而绘制流程图
257-
this.createNewDiagram(newValue);
258-
}
259-
},
260256
methods: {
261257
initBpmnModeler() {
262258
if (this.bpmnModeler) return;
@@ -307,7 +303,7 @@ export default {
307303
let newName = this.processName || `业务流程_${new Date().getTime()}`;
308304
let xmlString = xml || DefaultEmptyXML(newId, newName, this.prefix);
309305
try {
310-
console.log(this.bpmnModeler.importXML);
306+
// console.log(this.bpmnModeler.importXML);
311307
let { warnings } = await this.bpmnModeler.importXML(xmlString);
312308
if (warnings && warnings.length) {
313309
warnings.forEach(warn => console.warn(warn));

src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,11 @@ export default {
116116
let todoActivity = activityList.find(m => !m.endTime) // 找到待办的任务
117117
let endActivity = activityList[activityList.length - 1] // 获得最后一个任务
118118
// debugger
119-
console.log(this.bpmnModeler.getDefinitions().rootElements[0].flowElements);
119+
// console.log(this.bpmnModeler.getDefinitions().rootElements[0].flowElements);
120120
this.bpmnModeler.getDefinitions().rootElements[0].flowElements?.forEach(n => {
121121
let activity = activityList.find(m => m.key === n.id) // 找到对应的活动
122122
if (n.$type === 'bpmn:UserTask') { // 用户任务
123+
debugger
123124
if (!activity) {
124125
return;
125126
}

src/components/bpmnProcessDesigner/package/penal/base/ElementBaseInfo.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<div class="panel-tab__content">
33
<el-form size="mini" label-width="90px" :model="model" :rules="rules" @submit.native.prevent>
44
<div v-if="elementBaseInfo.$type === 'bpmn:Process'"> <!-- 如果是 Process 信息的时候,使用自定义表单 -->
5+
<el-link href="https://doc.iocoder.cn/bpm/#_3-%E6%B5%81%E7%A8%8B%E5%9B%BE%E7%A4%BA%E4%BE%8B"
6+
type="danger" target="_blank">如何实现实现会签、或签?</el-link>
57
<el-form-item label="流程标识" prop="key">
68
<el-input v-model="model.key" placeholder="请输入流标标识"
79
:disabled="model.id !== undefined && model.id.length > 0" @change="handleKeyUpdate" />

src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
</el-select>
1616
</el-form-item>
1717
<el-form-item label="表达式" v-if="flowConditionForm.conditionType && flowConditionForm.conditionType === 'expression'" key="express">
18-
<el-input v-model="flowConditionForm.body" clearable @change="updateFlowCondition" />
18+
<el-input v-model="flowConditionForm.body" style="width:192px;" clearable @change="updateFlowCondition" />
1919
</el-form-item>
2020
<template v-if="flowConditionForm.conditionType && flowConditionForm.conditionType === 'script'">
2121
<el-form-item label="脚本语言" key="language">

src/components/bpmnProcessDesigner/package/penal/multi-instance/ElementMultiInstance.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<el-form-item label="循环基数" key="loopCardinality">
1616
<el-input v-model="loopInstanceForm.loopCardinality" clearable @change="updateLoopCardinality" />
1717
</el-form-item>
18-
<el-form-item label="集合" key="collection">
18+
<el-form-item label="集合" key="collection" v-show="false">
1919
<el-input v-model="loopInstanceForm.collection" clearable @change="updateLoopBase" />
2020
</el-form-item>
2121
<el-form-item label="元素变量" key="elementVariable">
@@ -131,7 +131,7 @@ export default {
131131
if (type === "SequentialMultiInstance") {
132132
this.multiLoopInstance = window.bpmnInstances.moddle.create("bpmn:MultiInstanceLoopCharacteristics", { isSequential: true });
133133
} else {
134-
this.multiLoopInstance = window.bpmnInstances.moddle.create("bpmn:MultiInstanceLoopCharacteristics");
134+
this.multiLoopInstance = window.bpmnInstances.moddle.create("bpmn:MultiInstanceLoopCharacteristics", { collection: "${coll_userList}" });
135135
}
136136
window.bpmnInstances.modeling.updateProperties(this.bpmnElement, {
137137
loopCharacteristics: this.multiLoopInstance

src/views/bpm/model/modelEditor.vue

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<div class="app-container">
33

44
<!-- 流程设计器,负责绘制流程等 -->
5-
<my-process-designer :key="`designer-${reloadIndex}`" v-model="xmlString" v-bind="controlForm"
5+
<my-process-designer v-if="xmlString !== undefined" :key="`designer-${reloadIndex}`" v-model="xmlString" v-bind="controlForm"
66
keyboard ref="processDesigner" @init-finished="initModeler"
77
@save="save"/>
88

@@ -30,7 +30,7 @@ export default {
3030
components: { MyProcessPalette },
3131
data() {
3232
return {
33-
xmlString: "", // BPMN XML
33+
xmlString: undefined, // BPMN XML
3434
modeler: null,
3535
reloadIndex: 0,
3636
controlDrawerVisible: false,
@@ -72,21 +72,6 @@ export default {
7272
console.log(modeler);
7373
}, 10);
7474
},
75-
reloadProcessDesigner(deep) {
76-
this.controlForm.additionalModel = [];
77-
for (let key in this.addis) {
78-
if (this.addis[key]) {
79-
this.controlForm.additionalModel.push(this.addis[key]);
80-
}
81-
}
82-
deep && (this.xmlString = undefined);
83-
this.reloadIndex += 1;
84-
this.modeler = null; // 避免 panel 异常
85-
// if (deep) {
86-
// this.xmlString = undefined;
87-
// this.$refs.processDesigner.processRestart();
88-
// }
89-
},
9075
save(bpmnXml) {
9176
const data = {
9277
...this.model,

src/views/bpm/processInstance/detail.vue

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
审批人:{{ item.assigneeUser.nickname }}
6161
<el-tag type="info" size="mini">{{ item.assigneeUser.deptName }}</el-tag>
6262
</label>
63-
<label style="font-weight: normal">创建时间:</label>
63+
<label style="font-weight: normal" v-if="item.createTime">创建时间:</label>
6464
<label style="color:#8a909c; font-weight: normal">{{ parseTime(item.createTime) }}</label>
6565
<label v-if="item.endTime" style="margin-left: 30px;font-weight: normal">审批时间:</label>
6666
<label v-if="item.endTime" style="color:#8a909c;font-weight: normal"> {{ parseTime(item.endTime) }}</label>
@@ -109,7 +109,7 @@ import store from "@/store";
109109
import {decodeFields} from "@/utils/formGenerator";
110110
import Parser from '@/components/parser/Parser'
111111
import {createProcessInstance, getProcessInstance} from "@/api/bpm/processInstance";
112-
import {approveTask, getTaskListByProcessInstanceId, rejectTask, updateTaskAssignee} from "@/api/bpm/task";
112+
import {approveTask, getTaskListByProcessInstanceId, rejectTask, updateTaskAssignee,backTask} from "@/api/bpm/task";
113113
import {getDate} from "@/utils/dateUtils";
114114
import {listSimpleUsers} from "@/api/system/user";
115115
import {getActivityList} from "@/api/bpm/activity";
@@ -232,7 +232,13 @@ export default {
232232
this.auditForms = [];
233233
getTaskListByProcessInstanceId(this.id).then(response => {
234234
// 审批记录
235-
this.tasks = response.data;
235+
this.tasks = [];
236+
// 移除已取消的审批
237+
response.data.forEach(task => {
238+
if (task.result !== 4) {
239+
this.tasks.push(task);
240+
}
241+
});
236242
// 排序,将未完成的排在前面,已完成的排在后面;
237243
this.tasks.sort((a, b) => {
238244
// 有已完成的情况,按照完成时间倒序
@@ -407,6 +413,15 @@ export default {
407413
/** 处理审批退回的操作 */
408414
handleBack(task) {
409415
this.$modal.msgError("暂不支持【退回】功能!");
416+
// 可参考 http://blog.wya1.com/article/636697030/details/7296
417+
// const data = {
418+
// id: task.id,
419+
// assigneeUserId: 1
420+
// }
421+
// backTask(data).then(response => {
422+
// this.$modal.msgSuccess("回退成功!");
423+
// this.getDetail(); // 获得最新详情
424+
// });
410425
}
411426
}
412427
};

src/views/bpm/taskAssignRule/taskAssignRuleDialog.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
<el-option v-for="item in postOptions" :key="parseInt(item.id)" :label="item.name" :value="parseInt(item.id)" />
5454
</el-select>
5555
</el-form-item>
56-
<el-form-item v-if="form.type === 30" label="指定用户" prop="userIds">
56+
<el-form-item v-if="form.type === 30 || form.type === 31 || form.type === 32" label="指定用户" prop="userIds">
5757
<el-select v-model="form.userIds" multiple clearable style="width: 100%">
5858
<el-option v-for="item in userOptions" :key="parseInt(item.id)" :label="item.nickname" :value="parseInt(item.id)" />
5959
</el-select>
@@ -215,7 +215,7 @@ export default {
215215
this.form.deptIds.push(...row.options);
216216
} else if (row.type === 22) {
217217
this.form.postIds.push(...row.options);
218-
} else if (row.type === 30) {
218+
} else if (row.type === 30 || row.type === 31 || row.type === 32) {
219219
this.form.userIds.push(...row.options);
220220
} else if (row.type === 40) {
221221
this.form.userGroupIds.push(...row.options);
@@ -240,7 +240,7 @@ export default {
240240
form.options = form.deptIds;
241241
} else if (form.type === 22) {
242242
form.options = form.postIds;
243-
} else if (form.type === 30) {
243+
} else if (form.type === 30 || form.type === 31 || form.type === 32) {
244244
form.options = form.userIds;
245245
} else if (form.type === 40) {
246246
form.options = form.userGroupIds;
@@ -302,7 +302,7 @@ export default {
302302
return postOption.name;
303303
}
304304
}
305-
} else if (type === 30) {
305+
} else if (type === 30 || type === 31 || type === 32) {
306306
for (const userOption of this.userOptions) {
307307
if (userOption.id === option) {
308308
return userOption.nickname;

0 commit comments

Comments
 (0)