0
点赞
收藏
分享

微信扫一扫

3-Springboot集成FLOWABLE之 流程节点动态显示审批人信息

JakietYu 2022-02-18 阅读 114

目录

效果

演示地址
代码地址
前端
在这里插入图片描述

修改思路

在这里插入图片描述

1.首先这个svg是参考display实现的。复制一份display出来变成display-custom.然后自己改源码就行了。

在这里插入图片描述

2、改displaymodel.html

在这里插入图片描述

<html>

<head>

<!-- build:css ./styles/displaymodel-style.css -->
<script src="../scripts/app-cfg.js"></script>
<script src="../scripts/configuration/url-config.js"></script>
<script src="../libs/jquery_1.11.0/jquery.min.js"></script>
<script src="../libs/jquery-ui-1.10.3.custom.min.js"></script>
<link type="text/css" rel="stylesheet" href="./jquery.qtip.min.css" />
<link type="text/css" rel="stylesheet" href="./displaymodel.css" />
<!-- endbuild -->

<!-- build:js ./scripts/displaymodel-logic.js -->
<script type="text/javascript" src="./jquery.qtip.min.js"></script>
<script type="text/javascript" src="./raphael.min.js"></script>
<script type="text/javascript" src="./bpmn-draw.js"></script>
<script type="text/javascript" src="./bpmn-icons.js"></script>
<script type="text/javascript" src="./Polyline.js"></script>
<script type="text/javascript" src="./displaymodel.js"></script>
<!-- endbuild -->

</head>

<body>
<div id="bpmnModel" style="height: 100%; width: 100%;"></div>
</body>

</html>

3、改displaymodel.js

在这里插入图片描述
修改的地方(左边新 右边旧)
在这里插入图片描述
COMPLETED_COLOR:已完成的颜色的标记
CURRENT_COLOR:当前节点的颜色的标记
HOVER_COLOR: 鼠标放上去的颜色标记
ACTIVITY_STROKE_COLOR:未走过的节点的颜色标记

在这里插入图片描述
这个地方是获取url传过来的参数,因为引用的方式是

<iframe
v-if="processInstanceId"
:src="`/workflow/display-custom/displaymodel.html?v=${ts}&processInstanceId=${processInstanceId}&modelType=runtime&processDefinitionId=${definitionId}&historyModelId=${historyModelId}`"
width="100%"
height="100%"
frameborder="0"
scrolling="no"
></iframe>

======================================================================

function _showTip(htmlNode, element) {
console.log(222, element)
var documentation = undefined;
if (element.type === 'UserTask' || element.type === 'StartEvent' || element.type === 'endEvent') {
documentation = "<div style="padding: 5px; ">";

if (element.myname) {
documentation = documentation + "<div style="font-size:14px;height:30px;line-height:30px;border-bottom:1px solid #D3D3D3;white-space:nowrap">" +
"<span style="font-weight:bold">审批人:</span><span style="margin-left:10px">" + element.myname + "</span></div>";
}
if (element.myrole) {
documentation = documentation + "<div style="font-size:14px;height:30px;line-height:30px;border-bottom:1px solid #D3D3D3;white-space:nowrap">" +
"<span style="font-weight:bold">审批角色:</span><span style="margin-left:10px">" + element.myrole + "</span></div>";
}

if (!element.completed) {
element.endTime = '';
}
if (!element.completed && !element.current) {
element.startTime = '';
}
if (element.startTime) {
documentation = documentation +
"<div style="font-size:14px;height:30px;line-height:30px;border-bottom:1px solid #D3D3D3;white-space:nowrap">" +
"<span style="font-weight:bold">开始时间:</span><span style="margin-left:10px">" + element.startTime + "</span></div>"
}
if (element.endTime) {
documentation = documentation +
"<div style="font-size:14px;height:30px;line-height:30px;border-bottom:1px solid #D3D3D3;white-space:nowrap">" +
"<span style="font-weight:bold">结束时间:</span><span style="margin-left:10px">" + element.endTime + "</span></div>";
}
if (element.name) {
documentation = documentation + "<div style="font-size:14px;height:30px;line-height:30px;border-bottom:1px solid #D3D3D3;white-space:nowrap">" +
"<span style="font-weight:bold">节点名称:</span><span style="margin-left:10px">" + element.name + "</span></div>";
}
documentation = documentation + "</div>";
}

这一块就是就是显示鼠标方式去的提示的逻辑。

======================================================================

function getDoneIds(doneIds, doneSequenceFlows, data, currentId) {
let flows = data.flows;
for (let i = 0; i < flows.length; i++) {
if (flows[i].targetRef === currentId && data.completedActivities.includes(flows[i].id)) {
doneIds.push(flows[i].sourceRef);
doneSequenceFlows.push(flows[i].id);
getDoneIds(doneIds, doneSequenceFlows, data, flows[i].sourceRef);
}
}
}

在这里插入图片描述

默认返回的数据有问题。这对驳回高亮的需要特殊处理下。否则高亮会乱

======================================================

在这里插入图片描述
修改显示的宽度

以上是前端的修改逻辑,下面说下后端的

4、 参照RuntimeDisplayJsonClientResource.java(这个是源码里面的类)改下后台路逻辑(前端请求的地址就是这个控制器的请求),把返回节点的属性的逻辑改下,不然前端的这个属性没来源呀!

在这里插入图片描述

前端获取数据就是在这个方法获取的
在这里插入图片描述
在这里重写这个类,然后在方法结束的时候改下返回的数据。
在这里插入图片描述

主要看这个packingProcessNode方法就行了,逻辑就是在这里实现的。
在这里插入图片描述

5、最后iframe引用界面就行了

<iframe
v-if="processInstanceId"
:src="`/workflow/display-custom/displaymodel.html?v=${ts}&processInstanceId=${processInstanceId}&modelType=runtime&processDefinitionId=${definitionId}&historyModelId=${historyModelId}`"
width="100%"
height="100%"
frameborder="0"
scrolling="no"
></iframe>

这里的
ts是时间戳,
processInstanceId是指流程实例ID,
definitionId是流程定义ID,
historyModelId是指历史流程ID(流程结束了才传,没结束可以不传)

补充

发现任务审批的时候,字数超出不会换行如下图所示
在这里插入图片描述

修改后的效果
在这里插入图片描述

解决方法:
修改 bpmn-draw.js 670行开始(这个bpmn-draw.js正常在display下,假如你按照我的步骤,应该在display-custom下),修改如下
修改前
在这里插入图片描述

修改后
在这里插入图片描述

let newText = [];
for (let i = 0; i < text.length; i++) {
newText.push(text[i]);
if (i%7==0 =0) {
newText.push("
"
);
}
}
var removedLineBreaks = newText.join("").split("
"
)

下一篇:流程驳回

举报

相关推荐

0 条评论