bpmc/ebpm-process-manage/webapp/pages/trace/traceProcessMobile.jsp
2024-08-14 15:17:51 +08:00

755 lines
24 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<%@page import="com.blueland.bpm.manage.web.ProcessTraceController,com.blueland.bpm.engine.util.*"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<%@page import="org.activiti.engine.history.HistoricProcessInstance"%>
<%@page
import="com.blueland.bpm.common.page.*,com.blueland.bpm.identity.model.User,org.activiti.engine.history.HistoricProcessInstance,org.activiti.engine.history.HistoricTaskInstance,org.activiti.engine.task.Comment"%>
<%@page
import="com.blueland.bpm.common.util.*,com.blueland.bpm.engine.core.model.*"%>
<%@page import="java.util.*"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ include file="/commons/taglibs.jsp"%>
<%
String processInstanceId=request.getParameter("processInstanceId");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<%@ include file="/commons/meta.jsp"%>
<title>手机监控</title>
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0" name="viewport"/>
<meta content="yes" name="apple-mobile-web-app-capable"/>
<meta content="black" name="apple-mobile-web-app-status-bar-style"/>
<meta content="telephone=no" name="format-detection"/>
<script type="text/javascript" src="${ctx}/resource/js/jquery-1.8.3.min.js"></script>
<link href="${ctx }/resource/js/plugins/jquery.qtip.css" rel="stylesheet" type="text/css" media="screen" />
<script src="${ctx }/resource/js/plugins/easyTemplate.js" type="text/javascript"></script>
<script src="${ctx }/resource/js/plugins/jquery.qtip.js" type="text/javascript"></script>
<style>
body{
background:#fff;
margin:0;
padding:0;
color:#333;
font-size:14px;
font-family:"微软雅黑";
}
.lcjk_title{
margin:0;
padding:0;
color:#333;
font-size:16px;
font-family:"微软雅黑";
padding:10px;
border-bottom:10px solid #efefef;
}
.lcjk_title .lcjk_title_list{
display:table;
width:100%;
margin:5px 0;
padding:0;
}
.lcjk_title .lcjk_title_list .cell_left{
display:table-cell;
vertical-align:top;
color:#7f7f7f;
font-size:16px;
line-height:1.5;
width:120px;
}
.lcjk_title .lcjk_title_list .cell_right{
display:table-cell;
vertical-align:top;
color:#333;
font-size:16px;
line-height:1.5;
}
.lcjk_cont{
margin:0;
padding:0;
color:#333;
font-size:16px;
font-family:"微软雅黑";
padding:0;
}
.lcjk_cont .lcjk_menu{
display:table;
width:100%;
border-bottom:1px solid #dfdfdf;
}
.lcjk_cont .lcjk_menu .cell{
display:table-cell;
text-align:center;
vertical-align:middle;
color:#333;
font-size:16px;
cursor:pointer !important;
}
.lcjk_cont .lcjk_menu .cell.active{
color:#428BCB;
}
.lcjk_cont .lcjk_menu .cell .cell_title{
display:inline-block;
padding:10px 0 0 0;
color:#333;
font-size:16px;
}
.lcjk_cont .lcjk_menu .cell.active .cell_title{
color:#428BCB;
}
.lcjk_cont .lcjk_menu .cell .cell_title:after {
content: "";
height: 3px;
width: 30px;
display: block;
background: transparent;
border-radius:5px;
margin: 10px auto 0 auto;
}
.lcjk_cont .lcjk_menu .cell.active .cell_title:after {
background: #428BCB;
}
.lcjk_cont .lcjk_body{
padding:10px;
color:#333;
font-size:14px;
font-family:"微软雅黑";
}
.lcjk_timeline{
color:#333;
font-size:14px;
font-family:"微软雅黑";
margin:0;
padding:0;
}
.lcjk_timeline .timeline{
display: table;
width: 100%;
margin: 0;
padding:0;
position: relative;
}
.lcjk_timeline .timeline:before {
content: "";
display: block;
width: 2px;
height: 100%;
position: absolute;
border-left: 2px dotted #ddd !important;
margin-left:7px;
}
.lcjk_timeline .timeline:after {
content: "";
display: block;
width: 12px;
height: 12px;
border-radius:100%;
background: #5EAE07;
position: absolute;
border: 2px solid #fff;
margin-top: 4px;
left:0;
box-sizing: content-box;
}
.lcjk_timeline>.timeline:last-child:after {
background: #EE374D;
}
.lcjk_timeline .timeline .time_right{
display: table-cell;
padding: 0 0 0 30px;
font-size: 14px;
color: #666;
}
.lcjk_timeline .timeline .time_right .xx_time{
font-size: 16px;
color: #000;
margin: 0 0 10px 0;
}
.lcjk_timeline .timeline .time_right .xx_time>span{
font-size: 16px;
color: #000;
margin: 0 10px 0 0;
}
.lcjk_timeline .timeline .time_right .xx_box{
margin:0 0 20px 0;
padding:0 0 20px 0;
border-bottom:2px dotted #ddd;
}
.lcjk_timeline>.timeline:last-child .time_right .xx_box{
margin:0;
padding:0;
border-bottom:0;
}
.lcjk_timeline .timeline .time_right .xx_box .xx_text{
display:table;
width:100%;
color:#333;
font-size:14px;
margin:0;
padding:0 0 5px 0;
}
.lcjk_timeline .timeline .time_right .xx_box>.xx_text:last-child{
padding:0;
}
.lcjk_timeline .timeline .time_right .xx_box .xx_text .xx_left{
display:table-cell;
vertical-align:top;
color:#7f7f7f;
font-size:14px;
width:70px;
}
.lcjk_timeline .timeline .time_right .xx_box .xx_text .xx_right{
display:table-cell;
vertical-align:top;
color:#333;
font-size:14px;
}
.lcjk_timeline .timeline .time_right .xx_box .xx_text .xx_right .yj_text{
color:#333;
font-size:14px;
max-height: 20px;
overflow: hidden;
word-wrap: break-word;
word-break: break-all;
}
.lcjk_timeline .timeline .time_right .xx_box .xx_text.more .xx_right .yj_text{
max-height:inherit;
overflow:inherit;
word-wrap: inherit;
word-break: inherit;
}
.lcjk_timeline .timeline .time_right .xx_box .xx_text .xx_right .more_btn{
color:#5EAE07;
font-size:14px;
padding:5px 0 0 0;
}
</style>
<script type="text/javascript">
$(function() {
$.each($("div.flowNode"), function() {
var obj = $(this);
var nodeId =obj.attr('id');
//console.log(nodeId);
obj.css('cursor', 'pointer');
var type=obj.attr('type');
console.log(type);
if(type!="manualTask"&&type!="serviceTask"&&type!="callActivity"){
checkStatusInfo(nodeId,type);
}
});
});
function filters(startdate){
startdate = startdate.replace(/\-/g, "/");
var date = new Date(time);
return formatDate(date, "yyyy-MM-dd");
}
function xiaoshi(startdate){
startdate = startdate.replace(/\-/g, "/");
var date = new Date(time);
return formatDate(date, "HH:mm:ss");
}
//初始化qtip
function checkStatusInfo(nodeId,type) {
var obj = $("#" + nodeId);
var y = -15;
var x = -15;
var atValue = "center";
var myValue = "Top Left";
var html = getHistoryTaskHtml(nodeId);
if(html){
//如果流程距离页面顶部距离较大,显示在上边
if(obj.offset().top+335-40 > $(window).height()){
myValue = "Bottom Left";
y = 50;
}
//如果流程距离页面左边距离较大,显示在左边
if(obj.offset().left+270+40 > $(window).width()){
myValue = "Top Right";
x = -30;
}
if(obj.offset().top+335-40 > $(window).height() && obj.offset().left+270+40 > $(window).width()){
myValue = "Bottom Right";
x = -20;
y = -30;
}
}else{
if(obj.offset().top+170+40 > $(window).height()){
myValue = "Bottom Left";
y = -20;
}
//如果流程距离页面左边距离较大,显示在左边
if(obj.offset().left+270+40 > $(window).width()){
myValue = "Top Right";
x = -30;
}
if(obj.offset().top+170+40 > $(window).height() && obj.offset().left+270+40 > $(window).width()){
myValue = "Bottom Right";
x = -20;
y = -30;
}
}
//$("#" + nodeId).append('<span style="float: right; margin: 4px;" class="badge badge-danger">4</span>');
obj.qtip({
content : {
text : function() {
if(type=="userTask"){
var html = getHistoryTaskHtml(nodeId);
if (html) {
return html;
}else {
return getTaskDefinitionHtml(nodeId);
}
}else if(type=="callActivity"){
//alert(1);
}
},
title : {
text : "任务执行情况"
}
},
position : {
at : atValue,
my : myValue,
target : 'event',
adjust : {
x : x,
y : y
}
},
show : {
effect : function(offset) {
$(this).slideDown(200);
// $("a[candidateUserUrl]").each(showResult);
}
},
hide : {
event : 'mouseleave',
fixed : true,
delay : 300
},
style : {
classes : 'ui-tooltip-light ui-tooltip-shadow',
width : 270,
height: $("#ui-tooltip-content").height()
}
});
}
//构建显示的html
function getHistoryTaskHtml(nodeId) {
//alert(nodeId);
var html = new Array();
var textareaObj = $("textarea[id='txtTask" + nodeId + "']");
if (textareaObj.length == 0) {
return;
}
html.push('<div style="max-height:310px;width=100px;overflow:auto;">');
textareaObj.each(function(i) {
var tableHtml = $(this).val();
if (typeof (tableHtml) == "undefined") {
return;
}
html.push(tableHtml);
});
html.push('</div>');
//alert(html.join(''));
return html.join('');
}
function getTaskDefinitionHtml(nodeId) {
//alert(nodeId);
var html = new Array();
var procDefId="${curProcessInstance.processDefinitionId}";
var url="${ctx}/procDefMgr/getActivityDefModel.do";
$.ajax({
url : url,
data:{"procDefId":procDefId,"actDefId":nodeId},
cache : false,
async : false,
type : "POST",
success : function (data){
//alert(data);
var actDefObject = eval(data);
html.push('<div class="panel-body"><div id="txtTaskDefHmtl" style="max-height:310px;width=100px;overflow:auto;">');
html.push('<table class="table-task" cellpadding="0" cellspacing="0" border="0">');
html.push('<tr>');
html.push('<th>任务名称: </th>');
html.push('<td>'+actDefObject.actDefName+'</td>');
html.push('</tr>');
html.push('<tr>');
html.push('<th>任务资源: </th>');
html.push('<td>');
var roleStrs="";
var orgStrs="";
var userStrs="";
var activityResources = eval(actDefObject.activityResources);
$.each(activityResources,function(index,activityResource){
// alert(activityResource.name);
if(activityResource.type=="ROLE"){
roleStrs+=activityResource.name+",";
}else if(activityResource.type=="ORG"){
orgStrs+=activityResource.name+",";
}else if(activityResource.type=="USER"){
userStrs+=activityResource.name+",";
}
});
roleStrs=roleStrs.substring(0,roleStrs.lastIndexOf(","));
orgStrs=orgStrs.substring(0,orgStrs.lastIndexOf(","));
userStrs=userStrs.substring(0,userStrs.lastIndexOf(","));
if(roleStrs.length>0){
html.push("角色:"+roleStrs+"<br/>");
}
if(orgStrs.length>0){
html.push("组织:"+orgStrs+"<br/>");
}
if(userStrs.length>0){
html.push("人员:"+userStrs+"<br/>");
}
html.push('</td>');
html.push('</tr>');
html.push('<tr>');
html.push("<th width='100px'>任务处理类型: </th>");
html.push('<td>单人处理</td>');
html.push('</tr>');
html.push('<tr>');
html.push('<th>任务状态: </th>');
html.push('<td>未执行</td>');
html.push('</tr>');
html.push('</table>');
html.push('</div></div>');
}
});
return html.join('');
}
function getCallActivityHtml(nodeId) {
//alert(nodeId);
var html = new Array();
var procDefId="${curProcessInstance.processDefinitionId}";
var url="${ctx}/procDefMgr/getActivityDefModel.do";
$.ajax({
url : url,
data:{"procDefId":procDefId,"actDefId":nodeId},
cache : false,
async : false,
type : "POST",
success : function (data){
//alert(data);
var actDefObject = eval(data);
html.push('<div class="panel-body"><div id="txtTaskDefHmtl" style="max-height:310px;width=100px;overflow:auto;">');
html.push('<table class="table-task" cellpadding="0" cellspacing="0" border="0">');
html.push('<tr>');
html.push('<th>任务名称: </th>');
html.push('<td>'+actDefObject.actDefName+'</td>');
html.push('</tr>');
html.push('<tr>');
html.push('<th>任务资源: </th>');
html.push('<td>');
var roleStrs="";
var orgStrs="";
var userStrs="";
var activityResources = eval(actDefObject.activityResources);
$.each(activityResources,function(index,activityResource){
// alert(activityResource.name);
if(activityResource.type=="ROLE"){
roleStrs+=activityResource.name+",";
}else if(activityResource.type=="ORG"){
orgStrs+=activityResource.name+",";
}else if(activityResource.type=="USER"){
userStrs+=activityResource.name+",";
}
});
roleStrs=roleStrs.substring(0,roleStrs.lastIndexOf(","));
orgStrs=orgStrs.substring(0,orgStrs.lastIndexOf(","));
userStrs=userStrs.substring(0,userStrs.lastIndexOf(","));
if(roleStrs.length>0){
html.push("角色:"+roleStrs+"<br/>");
}
if(orgStrs.length>0){
html.push("组织:"+orgStrs+"<br/>");
}
if(userStrs.length>0){
html.push("人员:"+userStrs+"<br/>");
}
html.push('</td>');
html.push('</tr>');
html.push('<tr>');
html.push("<th width='100px'>任务处理类型: </th>");
html.push('<td>单人处理</td>');
html.push('</tr>');
html.push('<tr>');
html.push('<th>任务状态: </th>');
html.push('<td>未执行</td>');
html.push('</tr>');
html.push('</table>');
html.push('</div></div>');
}
});
return html.join('');
}
function change(type){
$(".cell").removeClass("active");
$(type).addClass("active");
if( $(type).find("a").text()=="文本监控"){
$("#image").hide();
$("#text").show();
}else{
$("#text").hide();
$("#image").show();
}
}
</script>
</head>
<body>
<div class="lcjk_title">
<div class="lcjk_title_list">
<div class="cell_left">流程标题:</div>
<div class="cell_right">${curProcessInstance.procTitle }</div>
</div>
<div class="lcjk_title_list">
<div class="cell_left">流程名称:</div>
<div class="cell_right">${curProcessInstance.processDefinitionName }</div>
</div>
</div><!--lcjk_title-->
<div class="lcjk_cont">
<div class="lcjk_menu">
<div class="cell active" onclick="change(this)"><a class="cell_title" >文本监控</a></div>
<div class="cell" onclick="change(this)"><a class="cell_title" >图形监控</a></div>
</div><!--lcjk_menu-->
<div class="lcjk_body">
<div class="lcjk_timeline" id="text">
<c:forEach items="${hisTaskLog.processDetailLogs }" var="processDetailLog">
<div class="timeline">
<div class="time_right">
<%-- <fmt:formatDate value="${processDetailLog.historicTaskInstance.startTime }" type="date" pattern="yyyy-MM-dd"/> --%>
<div class="xx_time"><span id="start_${processDetailLog.historicTaskInstance.id }"><fmt:formatDate value="${processDetailLog.historicTaskInstance.startTime }" type="date" pattern="yyyy-MM-dd"/></span><span class="end_${processDetailLog.historicTaskInstance.id }"><fmt:formatDate value="${processDetailLog.historicTaskInstance.startTime }" type="date" pattern="HH:mm:ss"/></span></div>
<div class="xx_box">
<div class="xx_text"><div class="xx_left">处理人员:</div><div class="xx_right">${processDetailLog.sendUserName }(${processDetailLog.sendOrgName })</div></div>
<div class="xx_text"><div class="xx_left">处理环节:</div><div class="xx_right">${processDetailLog.historicTaskInstance.preTaskDefName }</div></div>
<div class="xx_text"><div class="xx_left">接收人员:</div><div class="xx_right">${processDetailLog.reiceiveUserName }(${processDetailLog.receiveOrgName })</div></div>
<div class="xx_text"><div class="xx_left">接收环节:</div><div class="xx_right">${processDetailLog.historicTaskInstance.name }</div></div>
<div class="xx_text"><!--加上more展示更多去掉more默认展示一行-->
<div class="xx_left">处理意见:</div>
<div class="xx_right"><div class="yj_text">${processDetailLog.comment.fullMessage }</div><c:if test="${fn:length(processDetailLog.comment.fullMessage)>21}"><a class="more_btn">更多</a></c:if></div>
</div>
</div>
</div>
</div><!--timeline-->
<script type="text/javascript">
// var time="${processDetailLog.historicTaskInstance.startTime}";
// var processid="${processDetailLog.historicTaskInstance.id }";
// alert(filters(time));
// alert(xiaoshi(time));
// $("#start_"+processid).text(filters(time));
// $("#end_"+processid).text(xiaoshi(time));
</script>
</c:forEach>
<!-- <div class="timeline"> -->
<!-- <div class="time_right"> -->
<!-- <div class="xx_time"><span>2018-07-09</span><span>16:04:27</span></div> -->
<!-- <div class="xx_box"> -->
<!-- <div class="xx_text"><div class="xx_left">处理人员:</div><div class="xx_right">黄富(企业管理部(大数据部))</div></div> -->
<!-- <div class="xx_text"><div class="xx_left">处理环节:</div><div class="xx_right">实施部门填写采购事项审核表</div></div> -->
<!-- <div class="xx_text"><div class="xx_left">接收人员:</div><div class="xx_right">黄富(企业管理部(大数据部))</div></div> -->
<!-- <div class="xx_text"><div class="xx_left">接收环节:</div><div class="xx_right">实施部门负责人审核</div></div> -->
<!-- <div class="xx_text">加上more展示更多去掉more默认展示一行 -->
<!-- <div class="xx_left">处理意见:</div> -->
<!-- <div class="xx_right"><div class="yj_text">默认展示一行,点更多展示全部。默认展示一行,点更多展示全部。默认展示一行,点更多展示全部。</div><a class="more_btn">更多</a></div> -->
<!-- </div> -->
<!-- </div> -->
<!-- </div> -->
<!-- </div>timeline -->
</div><!--lcjk_timeline-->
<div id="image" style="height:100%;width:100%;display:none;overflow-x:auto;">
<div style="padding-left: 30px; display: inline; float: left; margin:10px auto 0;position: relative;background:url('${ctx}/workflow/trace/resource1.do?resourceType=image&processInstanceId=${processInstanceId}') no-repeat;width:${imageWidth+140}px;height:${imageHeight}px;">
${processDefinitonDiv}
</div>
</div>
<%
Map<String, Object> hisTaskLog = (Map) request
.getAttribute("hisTaskLog");
HistoricProcessInstance historicProcessInstance = (HistoricProcessInstance) hisTaskLog
.get("historicProcessInstance");
String finishStr = "未结束";
if (historicProcessInstance != null
&& historicProcessInstance.getEndTime() != null) {
finishStr = "已结束";
}
List<ProcessLogModel> processDetailLogs = (List<ProcessLogModel>) hisTaskLog
.get("processDetailLogs");
Map<String,com.blueland.bpm.engine.config.model.ActivityInfoConfig> allActivityInfoConfigs =(Map<String,com.blueland.bpm.engine.config.model.ActivityInfoConfig>)hisTaskLog.get("allActivityInfoConfigs");
for (int i=0;i<processDetailLogs.size();i++) {
ProcessLogModel processDetailLog =processDetailLogs.get(i);
HistoricTaskInstance historicTaskInstance = processDetailLog
.getHistoricTaskInstance();
Comment comment = processDetailLog.getComment();
String limitTimeStr = "";
try {
com.blueland.bpm.engine.config.model.ActivityInfoConfig activityInfoConfig = allActivityInfoConfigs.get(historicTaskInstance.getTaskDefinitionKey());
Date endDate=new Date();
if (historicTaskInstance.getEndTime() != null) {
endDate=historicTaskInstance.getEndTime();
}
if (activityInfoConfig.getActivityLimitTime() != null
&& activityInfoConfig.getActivityLimitTime() != 0) {
Date dueDate = org.apache.commons.lang3.time.DateUtils
.addDays(historicTaskInstance.getStartTime(),
activityInfoConfig
.getActivityLimitTime());
long limitDate = ProcessTraceController.differByDay(
dueDate, endDate);
if (limitDate > 0) {
limitTimeStr = "超时" + limitDate + "天";
} else if(historicTaskInstance.getEndTime() != null){
limitTimeStr = "耗时" + Math.abs(limitDate) + "天";
} else{
limitTimeStr = "剩余" + Math.abs(limitDate) + "天";
}
} else {
String t = String.valueOf((ProcessTraceController
.differByDay(
historicTaskInstance.getStartTime(),endDate)));
limitTimeStr = "耗时" + t + "天";
;
}
if (historicTaskInstance.getEndTime() == null) {
//limitTimeStr += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='javascript:void(0);' onclick=\"showDiaLog('/standard/workflow/taskPressView.do','催办','500px','400px');\"><font color='blue'>催办</font></a>";
}
} catch (Exception e) {
}
%>
<textarea id="txtTask<%=historicTaskInstance.getTaskDefinitionKey()%>"
style="display: none">
<table class="table-task" cellpadding="0" cellspacing="0" border="0" style="table-layout:fixed;">
<tr>
<th width="100px">接收环节: </th>
<td width="140px"><%=historicTaskInstance.getName()%></td>
</tr>
<tr>
<th>发送环节: </th>
<td><%=historicTaskInstance.getPreTaskDefName()!=null?historicTaskInstance.getPreTaskDefName():""%></td>
</tr>
<tr>
<th>发送人: </th>
<td><%=processDetailLog.getSendUserName()%></td>
</tr>
<tr>
<th>接收人: </th>
<td>
<%
if (processDetailLog.getReiceiveUserName() != null
|| processDetailLog.getReceiveOrgName() != null) {
%>
<%=processDetailLog.getReiceiveUserName()%><%=processDetailLog.getReceiveOrgName()%>
<%
}
%>
</td>
</tr>
<%
if (processDetailLog.getOwnerName() != null) {
%>
<tr>
<th>委托人: </th>
<td>
<%=processDetailLog.getOwnerName()%>
</td>
</tr>
<%
}
%>
<tr>
<th>审批意见: </th>
<%
String commentMsg = (comment!=null&&comment.getMessage()!=null? comment.getMessage() : "");
if(!StringUtils.isEmpty(historicTaskInstance.getDeleteReason())&&"cancel_process".equals(historicTaskInstance.getActionType())){
commentMsg="当前流程已作废,作废意见为:"+historicTaskInstance.getDeleteReason();
}
int length = commentMsg.length();
%>
<c:set var="set" value="<%=length %>" />
<c:choose>
<c:when test="${set>16}">
<td title="<%=commentMsg%>" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
<a href="#" style="text-decoration:none;"><%=commentMsg%></a></td>
</c:when>
<c:otherwise>
<td class="qTipmessage"><%=commentMsg%></td>
</c:otherwise>
</c:choose>
</tr>
<tr>
<th nowrap="nowrap">开始时间: </th>
<td><%=DateUtil.convertDateToString("yyyy-MM-dd HH:mm:ss",
historicTaskInstance.getStartTime())%></td>
</tr>
<%
if (historicTaskInstance.getEndTime() != null) {
%>
<tr>
<th nowrap="nowrap">结束时间: </th>
<td><%=DateUtil.convertDateToString(
"yyyy-MM-dd HH:mm:ss",
historicTaskInstance.getEndTime())%></td>
</tr>
<%
}
%><tr>
<th nowrap="nowrap">持续时间: </th>
<td><%=limitTimeStr%></td>
</tr>
<tr>
<th>任务状态: </th>
<td><%
if(WorkFlowContants.ACTION_TYPE_CANCEL_PROCESS.equals(historicTaskInstance.getActionType())){
out.println("<font color='red'>作废</font>");
}else{
out.println(historicTaskInstance.getEndTime() != null ? "已完成": "<font color='red'>正在审批</font>");
}
%></td>
</tr>
</table>
<br>
</textarea>
<%
}
%>
</div><!--lcjk_body-->
</div><!--lcjk_cont-->
</body>
</html>