Commit 72c465be86639d3d91b9efdbcd63867c7d0aa824

Authored by YunaiV
1 parent 5332e543

优化 bpm 高亮流程图的前端

yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/activity/BpmActivityRespVO.java
@@ -20,6 +20,9 @@ public class BpmActivityRespVO { @@ -20,6 +20,9 @@ public class BpmActivityRespVO {
20 @ApiModelProperty(value = "流程活动的结束时间", required = true) 20 @ApiModelProperty(value = "流程活动的结束时间", required = true)
21 private Date endTime; 21 private Date endTime;
22 22
  23 + @ApiModelProperty(value = "关联的流程任务的编号", example = "2048", notes = "关联的流程任务,只有 UserTask 等类型才有")
  24 + private String taskId;
  25 +
23 /** 26 /**
24 * 关联的流程任务,只有 UserTask 类型才有 27 * 关联的流程任务,只有 UserTask 类型才有
25 */ 28 */
yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue
@@ -37,6 +37,8 @@ export default { @@ -37,6 +37,8 @@ export default {
37 return { 37 return {
38 xml: '', 38 xml: '',
39 activityList: [], 39 activityList: [],
  40 + processInstance: undefined,
  41 + taskList: [],
40 }; 42 };
41 }, 43 },
42 mounted() { 44 mounted() {
@@ -61,6 +63,14 @@ export default { @@ -61,6 +63,14 @@ export default {
61 activityData: function (newActivityData) { 63 activityData: function (newActivityData) {
62 this.activityList = newActivityData; 64 this.activityList = newActivityData;
63 this.createNewDiagram(this.xml); 65 this.createNewDiagram(this.xml);
  66 + },
  67 + processInstanceData: function (newProcessInstanceData) {
  68 + this.processInstance = newProcessInstanceData;
  69 + this.createNewDiagram(this.xml);
  70 + },
  71 + taskData: function (newTaskListData) {
  72 + this.taskList = newTaskListData;
  73 + this.createNewDiagram(this.xml);
64 } 74 }
65 }, 75 },
66 methods: { 76 methods: {
@@ -94,6 +104,11 @@ export default { @@ -94,6 +104,11 @@ export default {
94 /* 高亮流程图 */ 104 /* 高亮流程图 */
95 // TODO 芋艿:如果多个 endActivity 的话,目前的逻辑可能有一定的问题。https://www.jdon.com/workflow/multi-events.html 105 // TODO 芋艿:如果多个 endActivity 的话,目前的逻辑可能有一定的问题。https://www.jdon.com/workflow/multi-events.html
96 async highlightDiagram() { 106 async highlightDiagram() {
  107 + // let activityList = this.activityList.filter(task => {
  108 + // if (task.type !== 'sequenceFlow') { // 去除连线元素
  109 + // return true;
  110 + // }
  111 + // });
97 let activityList = this.activityList; 112 let activityList = this.activityList;
98 if (activityList.length === 0) { 113 if (activityList.length === 0) {
99 return; 114 return;
@@ -109,20 +124,15 @@ export default { @@ -109,20 +124,15 @@ export default {
109 if (!activity) { 124 if (!activity) {
110 return; 125 return;
111 } 126 }
112 - // TODO 芋艿:  
113 - if (activity.task) {  
114 - const result = activity.task.result;  
115 - if (result === 1) {  
116 - canvas.addMarker(n.id, 'highlight-todo');  
117 - } else if (result === 2) {  
118 - canvas.addMarker(n.id, 'highlight');  
119 - } else if (result === 3) {  
120 - canvas.addMarker(n.id, 'highlight-reject');  
121 - } else if (result === 4) {  
122 - canvas.addMarker(n.id, 'highlight-cancel');  
123 - } 127 + // 处理用户任务的高亮
  128 + const task = this.taskList.find(m => m.id === activity.taskId); // 找到活动对应的 taskId
  129 + if (task) {
  130 + canvas.addMarker(n.id, this.getTaskHighlightCss(task));
124 } 131 }
  132 +
  133 + debugger
125 n.outgoing?.forEach(nn => { 134 n.outgoing?.forEach(nn => {
  135 + debugger
126 let targetActivity = activityList.find(m => m.key === nn.targetRef.id) 136 let targetActivity = activityList.find(m => m.key === nn.targetRef.id)
127 if (targetActivity) { 137 if (targetActivity) {
128 debugger 138 debugger
@@ -190,8 +200,15 @@ export default { @@ -190,8 +200,15 @@ export default {
190 return activity.endTime ? 'highlight' : 'highlight-todo'; 200 return activity.endTime ? 'highlight' : 'highlight-todo';
191 }, 201 },
192 getTaskHighlightCss(task) { 202 getTaskHighlightCss(task) {
193 - if (!task) {  
194 - return ''; 203 + const result = task.result;
  204 + if (result === 1) {
  205 + return 'highlight-todo';
  206 + } else if (result === 2) {
  207 + return 'highlight';
  208 + } else if (result === 3) {
  209 + return 'highlight-reject';
  210 + } else if (result === 4) {
  211 + return 'highlight-cancel';
195 } 212 }
196 return ''; 213 return '';
197 }, 214 },
yudao-admin-ui/src/views/bpm/processInstance/detail.vue
@@ -74,7 +74,8 @@ @@ -74,7 +74,8 @@
74 <div slot="header" class="clearfix"> 74 <div slot="header" class="clearfix">
75 <span class="el-icon-picture-outline">流程图</span> 75 <span class="el-icon-picture-outline">流程图</span>
76 </div> 76 </div>
77 - <my-process-viewer key="designer" v-model="bpmnXML" v-bind="bpmnControlForm" :activityData="activityList"/> 77 + <my-process-viewer key="designer" v-model="bpmnXML" v-bind="bpmnControlForm" :activityData="activityList"
  78 + :processInstanceData="processInstance" :taskData="tasks" />
78 </el-card> 79 </el-card>
79 80
80 <!-- 对话框(转派审批人) --> 81 <!-- 对话框(转派审批人) -->