SpringMVC流程图(Activity)Java代码
model层(实体类entity)
在需要做流程
的实体类加入workflow_id
(工作流id)approve_opinion
(审批意见)字段
Controller层(控制层)
//流程必要参数Spring注入
private String formKey;
private long formValue;
private MyTask myTask;
@Autowired
private ActivitiService activitiService;
/**
* 跳转到申请列表
* @return
*/
public String forwordList() {
return "forwordList";
}
/**
* 跳转申请详情页面
* @return
*/
public String forwordView() {
peopleHolidayMode = peopleHolidayService.selectCadreModebyId(peopleHolidayMode.getId());
return "forwordView";
}
/**
* 跳转到审批历史列表
* @return
*/
public String forwordAuditHisList() {
return "forwordAuditHisList";
}
/**
* 跳转到审批页面
* @return
*/
public String forwordAudit() {
SysUser sysUser = (SysUser) ActionContext.getContext().getSession().get("sysUser");
isHandWritting = handWrittingService.isHandWritting(sysUser.getPeopleId());//判断是否需要手写板签字
peopleList = cadreInfoService.findCadreInfos(sysUser.getDeptId());
peopleHoliday = peopleHolidayService.selectPeopleHolidaybyId(peopleHolidayMode.getId());
peopleHolidayMode = peopleHolidayService.selectCadreModebyId(peopleHolidayMode.getId());
myTask = activitiService.findTaskIdByBusinessKey(peopleHoliday.getSplcname(), String.valueOf(peopleHolidayMode.getId()));
id = Long.parseLong(myTask.getExecutionId());
return "forwordAudit";
}
/**
* 获取流程申请列表信息
* @return
*/
public String ajaxList() {
SysUser sysUser = (SysUser) ActionContext.getContext().getSession().get("sysUser");
StringBuffer sql = new StringBuffer("select *,case when marital_status=0 then '未婚' else '已婚' end as m,case when type=0 then '事假' else '探亲' end as t,case when ensure=0 then '否' else '是' end as e,case when is_witharmy=0 then '否' else '是' end as i from view_holiday WHERE 1=1 ");
if (flag == true)
sql.append(" and holiday_flag=0");
else
sql.append(" and holiday_flag=1");
json = customQueryService.getCustomQueryData("(" + sql.toString() + ") t", sysUser.getDeptId());
return AJAX;
}
/**
* 启动流程
* @return
* @throws Exception
*/
public String ajaxStartFlow() throws Exception {
currentYear = Calendar.getInstance().get(Calendar.YEAR);
peopleHoliday = peopleHolidayService.selectPeopleHolidaybyId(peopleHoliday.getId());
peopleHolidayMode = peopleHolidayService.selectPeopleHolidayModebyId(peopleHoliday.getId());
SysUser sysUser = (SysUser) StrutsUtils.getObjectFromSession("sysUser");
// 依据单位类型区分流程启动时的走向
Map<String, Object> mapValues = new HashMap<String, Object>();
mapValues.put("realName", sysUser.getUserName());
// if(peopleHolidayMode.getDepttype()==0){
// mapValues.put("lx", "200");//100机关*;200基层*
// }else{
// mapValues.put("lx", "100");//100机关*;200基层*
// }
// 依据单位类型区分流启动时的走向
// 启动流程
String processId = activitiService.startProcess(peopleHoliday.getSplcname(), peopleHoliday.getId() + "", sysUser, mapValues);
// 流程启动并发送短消息
// activitiService.startTask(,processId,name);
// 提交流程,返回的状态值
String act_status = activitiService.findStatusByProcessInstanceId(processId);
// 流程ID
peopleHoliday.setWorkflow_id(Long.parseLong(processId));
// 流程状态
peopleHoliday.setApprove_status(act_status);
peopleHolidayService.updatePeopleHoliday(peopleHoliday);
// 发送审批消息
PeopleMessage ps = new PeopleMessage();
ps.setMessage_title("*休假流程");
ps.setSend_type(5);
ps.setMessage_content("您有一条*休假申请待处理");
ps.setMessage_name("处理");
ps.setMessage_url("holiday/holiday!forwordAuditList?flag=false");
ps.setSend_user(sysUser.getUserId());
ps.setSend_username(sysUser.getUserName());
ps.setRead_status(0);
ps.setSound_name("default.mp3");
ps.setMessage_date(DateUtils.getNowDate());
activitiService.sendMessageToAuditor(processId, ps, sysUser.getDeptId());
saveLog("提交*休假申请:"+cadreInfoService.getById(peopleHoliday.getUser_id()).getName());
json = JSONObjectTool.getJson(AjaxBeanData.success());
return AJAX;
}
/**
* *休假审批
* @return
*/
public String ajaxAudit() throws Exception {
currentYear = Calendar.getInstance().get(Calendar.YEAR);
SysUser sysUser = (SysUser) StrutsUtils.getObjectFromSession("sysUser");
// 审批流程
peopleHoliday = peopleHolidayService.selectPeopleHolidaybyId(peopleHolidayMode.getId());
Map<String, Object> map = new HashMap<String, Object>();
map.put(formKey, formValue);
myTask = activitiService.findTaskIdByBusinessKey(peopleHoliday.getSplcname(), String.valueOf(peopleHoliday.getId()));
activitiService.complteTask(myTask.getId(), String.valueOf(peopleHoliday.getWorkflow_id()), StrutsUtils.getString("approve_opinion"), map, sysUser);
// 判断流程是否结束
String act_status = activitiService.findStatusByProcessInstanceId(String.valueOf(peopleHoliday.getWorkflow_id()));
// 流程状态
peopleHoliday.setApprove_status(act_status);
/*peopleHoliday.setApprove_opinion(StrutsUtils.getString("approve_opinion"));*/
if (formValue == 1&&act_status.startsWith("0")) {
peopleHoliday.setClear_status(1);
}
saveLog("审批*休假申请:"+cadreInfoService.getById(peopleHoliday.getUser_id()).getName());
peopleHolidayService.updatePeopleHoliday(peopleHoliday);
// 发送审批消息
AuditMessage ms = new AuditMessage();
ms.setMessageTitle("*休假流程");
ms.setSendType(5);
ms.setAuditMessageContent("您有一条*休假申请待处理"); // 发给审批人的内容
ms.setApplayMessageContent("您的*休假申请被处理了,请查看");// 发给申请人的内容
ms.setAuditMessageeName("处理");
ms.setApplayMessageeName("查看");
ms.setAuditMessageUrl("holiday/holiday!forwordAuditList?flag=false"); // 发给审批人的链接
ms.setApplayMessageUrl("holiday/holiday!forwordList?flag=false");// 发给申请人的链接
ms.setSendUser(sysUser.getUserId());
activitiService.sendMessageAfterAudited(myTask.getProcessInstanceId(), ms, sysUser.getDeptId());
json = JSONObjectTool.getJson(AjaxBeanData.success());
return AJAX;
}
/**
* 显示工作流
* @return
*/
public String forwordWorkFlowShow() throws Exception {
// 根据业务ID与流程定义的key获取Task
peopleHoliday = peopleHolidayService.selectPeopleHolidaybyId(id);
try {
myTask = activitiService.findTaskIdByBusinessKey(peopleHoliday.getSplcname(), String.valueOf(id));
} catch (Exception e) {
myTask = null;
}
if (null == myTask) {
myTask = new MyTask();
myTask.setParentTaskId(String.valueOf(peopleHoliday.getWorkflow_id()));
id = Long.parseLong(myTask.getParentTaskId());
} else {
id = Long.parseLong(myTask.getExecutionId());
}
return "forwordWorkFlowShow";
}
/**
* 显示工作流程,已审批结束
*
* @return
*/
public String forwordWorkFlowShow2() throws Exception {
// 根据业务ID与流程定义的key获取Task
peopleHoliday = peopleHolidayService.selectPeopleHolidaybyId(id);
id = peopleHoliday.getWorkflow_id();
processName = peopleHoliday.getSplcname();
title = "*休假程跟踪";
return "forwordWorkFlowShow2";
}
public String getFormKey() {
return formKey;
}
public void setFormKey(String formKey) {
this.formKey = formKey;
}
public long getFormValue() {
return formValue;
}
public void setFormValue(long formValue) {
this.formValue = formValue;
}
public MyTask getMyTask() {
return myTask;
}
public void setMyTask(MyTask myTask) {
this.myTask = myTask;
}
struts-system.xml
<package name="/holiday" extends="workCenter-default">
<action name="holiday" class="com.linksaint.web.peopleHoliday.action.PeopleHolidayAction">
<!-- 流程列表页面-->
<result name="forwordList">/peopleHoliday/peopleHolidayList.jsp</result>
<!-- 流程申请页面-->
<result name="forwordInsert">/peopleHoliday/peopleHolidayInsert.jsp</result>
<!-- 流程申请详情页面-->
<result name="forwordView">/peopleHoliday/peopleHolidayView.jsp</result>
<!-- 流程审批列表页面-->
<result name="forwordAuditList">/peopleHoliday/peopleHolidayAuditList.jsp</result>
<!-- 流程审批页面-->
<result name="forwordAudit">/peopleHoliday/peopleHolidayAudit.jsp</result>
<!-- 审批历史列表页面-->
<result name="forwordAuditHisList">/peopleHoliday/peopleHolidayAuditHisList.jsp</result>
</action>
</package>
View层(视图层)
peopleHolidayList.jsp(流程申请列表
【启动流程】页面)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@include file="../head.jsp"%>
<script type="text/javascript">
// var title = '<input type="button" class="button btn60" onclick="add()" value="新增" > ';
// title += '<input type="button" class="button btn60" onclick="modify()" value="修改" > ';
// title += '<input type="button" class="button btn60" onclick="del()" value="删除" > ';
// title += '<input type="button" class="button btn60" onclick="StartFlow()" value="提交" > ';
// title += '<input type="button" class="button btn100" onclick="Aduit()" value="跳过当前流程" > ';
// title += '<input type="button" class="button btn60" onclick="printView()" value="打印" > ';
var title='';
function view(id) {
$.eiui.window({
url : "holiday!forwordView?peopleHolidayMode.id=" + id + '&_rnd=' + Math.random(10000000),
width : 750,
height : 540,
refresh : refPage
});
};
authButton.printView=function() {
var id = util.eiui.getBox(false);
if (!!id) {
$.eiui.window({
url : "holiday!forwordPrint?peopleHolidayMode.id=" + id + '&_rnd='+ Math.random(10000000),
width : 850,
height : 600
});
}
}
authButton.add=function() {
$.eiui.window({
url : "holiday!forwordInsert?flag=${flag}&_rnd=" + Math.random(10000000),
width : 800,
height : 510,
refresh : refPage
});
}
authButton.modify=function() {
var id = util.eiui.getBox(true);
if (id.length > 1) {
alert("只能选择一个");
return;
}
$.ajax({
url : "holiday!ajaxCheckStatus?peopleHoliday.id=" + id[0] + "&_rnd=" + Math.random(10000000),
dataType : "json",
success : function(data) {
if (data.data.split(',')[1] == '草稿' || data.data == '') {
!!id && $.eiui.window({
url : "holiday!forwordUpdate?peopleHoliday.id=" + id[0],
width : 800,
height : 510,
refresh : refPage
});
} else {
alert("已进入流程,不可以修改!");
}
}
});
}
authButton.del=function() {
var id = util.eiui.getBox(false);
if (!!id) {
var item = util.eiui.getItem(id, "ID");
if (item.APPROVE_STATUS.split(',')[1] == '草稿') {
if (id && confirm($.eiui.error.getErrorMsg("确定要删除选择的数据吗?", "confirm"))) {
$.post('holiday!ajaxDelete?ids=' + id + '&_rnd=' + Math.random(10000000), {}, function(data) {
funcGetList();
var result = data.result;
if (result != 'success') {
alert(data.resume);
}
}, 'json');
}
} else {
alert("已进入流程不可以删除!")
}
}
}
//启动流程
authButton.sub=function() {
var id = util.eiui.getBox(true);
if (id.length > 1) {
alert("只能选择一个");
return;
}
if (id && confirm($.eiui.error.getErrorMsg("确定要提交?", "confirm"))) {
$.ajax({
url : "holiday!ajaxCheckStatus?peopleHoliday.id=" + id[0] + "&_rnd=" + Math.random(10000000),
dataType : "json",
success : function(data) {
if (data.data.split(',')[1] == '草稿' || data.data == '') {
var item = util.eiui.getItem(id, "ID");
$.ajax({
url : 'holiday!ajaxGetWXJ?peopleId=' + item.USER_ID,
async : false,
type : 'post',
dataType : 'json',
success : function(data) {
var result = data.result;
if (result != 'success') {
alert(data.resume);
} else {
$.ajax({
url : "holiday!ajaxStartFlow?peopleHoliday.id=" + id[0] + "&_rnd=" + Math.random(10000000),
dataType : "json",
success : function(data) {
funcGetList();
}
});
}
}
});
} else {
alert("该申请不是草稿状态,无法提交!");
return;
}
}
});
}
}
authButton.Aduit=function() {
var id = util.eiui.getBox(true);
if (id.length > 1) {
alert("只能选择一个");
return;
}
if (!!id) {
var item = util.eiui.getItem(id, "ID");
var audit_status = item.APPROVE_STATUS;
if (audit_status.split(',')[0] == 0) {
alert("草稿或审批通过状态不能做此操作!")
} else {
$.eiui.window({
url : "holiday!forwordAudit?peopleHolidayMode.id=" + id + '&_rnd=' + Math.random(10000000),
width : 1000,
height : 500,
refresh : refPage
});
}
}
}
function refPage() {
funcGetList();
}
$(function() {
$.eiui.title("*休假申请");
funcGetList();
});
function funcGetList() {
title = authButton.init({
authUrl : 'holiday/holiday!forwordList?flag=false'//必填
});
var deptId = $('#deptId').val();
$.eiui.dataGrid({
id : 'holiday',
url : 'holiday!ajaxList?flag=${flag}',
data : {
'deptId' : deptId,
'startTime' : $('#startTime').val(),
'endTime' : $('#endTime').val()
},
pageFunc : funcGetList,
primaryKey : 'ID',
selectLineType : "checkbox",
searchCustom : {
statAnalysis:{
open : false,
fields:[]
},
customSubmitFunction : function(){
funcGetList();
},
customResultFields : "",
customFields : [
{
text:'申请人',
value:'USERNAME'
},{
text:'申请部门',
value:'DEPTNAME'
},{
text:'申请时间',
value:'BEG_TIME',
control:'date-area'
}
],
exportExcel:{
open:true
}
},
'title' : title,
fields : {
DEPTNAME : {
label : '申请部门'
},
USER_ID : {
label : '人员Id',
attributes : {
style : 'display:none'
}
},
USERNAME : {
label : '申请人',
format : function(val, data) {
return "<a href='###' onclick='view(" + data['ID'] + ")'>" + val + "</a>";
}
},
BEG_TIME : {
label : '开始时间'
},
END_TIME : {
label : '结束时间'
},
ACTUAL_BEG_TIME : {
label : '实际离队时间'
},
ACTUAL_END_TIME : {
label : '实际归队时间'
},
WORKFLOW_TYPE: {
label : '流程类型',
attributes:{
style : 'display:none'
}
},
APPROVE_STATUS : {
label : '审批状态',
attributes:{
style : 'display:none'
}
},
APPROVESTATUS : {
label : '审批状态',
format : function(val, data) {
var aa=data.APPROVE_STATUS;
if(data.WORKFLOW_TYPE<3){
if(val=='草稿'){
return val;
}else if(aa.split(',')[0]==0){
return '<a href="#" onclick=forwordWorkFlowShow2('+data.ID+')>'+val+'</a>';
}else{
return '<a href="#" onclick=forwordWorkFlowShow('+data.ID+')>'+val+'</a>';
}
}else{
return '<span>'+val+'</span>';
}
}
},
// CLEAR_STATUS : {
// label : '销假状态',
// format : function(val, data) {
// if(val=='0') return '<span style="color: black;" >----</span>';
// if(val=='1') return '<span style="color: red;" >未销假</span>';
// if(val=='2') return '<span style="color: blue;" >已销假</span>';
// }
// },
CLEARSTATUS : {
label : '销假状态',
format : function(val, data) {
if(val=='----') return '<span style="color: black;" >----</span>';
if(val=='未销假') return '<span style="color: red;" >未销假</span>';
if(val=='已销假') return '<span style="color: blue;" >已销假</span>';
}
},
holday_left : {
label : '剩余假期天数',
attributes:{
style : 'display:none;',
show : true
}
},
dutyName : {
label : '职务',
attributes:{
style : 'display:none;',
show : true
}
},
joinArmy_time : {
label : '入伍时间',
attributes:{
style : 'display:none;',
show : true
}
},
e : {
label : '补或二次休假',
attributes:{
style : 'display:none;',
show : true
}
},
m : {
label : '婚姻状况',
attributes:{
style : 'display:none;',
show : true
}
},
t : {
label : '假期种类',
attributes:{
style : 'display:none;',
show : true
}
},
i : {
label : '是否随军',
attributes:{
style : 'display:none;',
show : true
}
},
address : {
label : '休假地点',
attributes:{
style : 'display:none;',
show : true
}
},
phone : {
label : '联系电话',
attributes:{
style : 'display:none;',
show : true
}
},
place : {
label : '通信地址',
attributes:{
style : 'display:none;',
show : true
}
},
HOLIDAY_REASON : {
label : '休假理由',
attributes:{
style : 'display:none;',
show : true
}
}
}
}, function(data) {
util.eiui.save(data)
});
}
function forwordWorkFlowShow(id) {
$.eiui.window({
url : "holiday!forwordWorkFlowShow?id=" + id,
size : 'full',
refresh : refPage
});
}
function forwordWorkFlowShow2(id){
$.eiui.window({
type:'default',
url : "holiday!forwordWorkFlowShow2?id=" + id,
size:'full'
});
}
</script>
<style>
</style>
</head>
<body>
<input type="hidden" id="deptId" value="${deptId }">
<input type="hidden" id="startTime" value="${startTime }">
<input type="hidden" id="endTime" value="${endTime }">
<span style="color: red;"></span>
</body>
</html>
auditRecord.jsp(流程跟踪
页面)
<%@ page pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<TITLE>休假流程跟踪</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style>
@import "../images/style.css";
@import "../js/qtip/jquery.qtip.css";
</style>
<%@include file="../head.jsp"%>
<script type="text/javascript" src="../activiti/activitiHistory.js"></script>
<script src="../activiti/jquery.outerhtml.js"></script>
<script src="../activiti/workflow.js"></script>
<script>
$(document).ready(function() {
$.eiui.title("休假流程跟踪");
AH.init('zblc','${id}');
var opt = {
pid: '${id}'
}
if('${myTask.id} != null'){
graphTrace(opt);
}
});
</script>
</head>
<body>
<div id="workflowTraceDialog" style="border: 1px solid;position: relative;margin:10px;">
<div id='processImageBorder' ></div>
<s:if test="myTask.id != null">
<img />
</s:if>
</div>
<div id="zblc"></div>
<div id="imgDiv" style="float: right;height: 120px;"></div>
</body>
</html>
holidayAudit.jsp(流程审批
页面)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>休假审批</title>
<%@include file="../head.jsp"%>
<script type="text/javascript" src="../activiti/activitiHistory.js"></script>
<script>
var span = $('<span></span>');
$(function() {
$.eiui.title("*休假审批");
var param = util.param();
initMyTask();
$("#user_id").val("${peopleHolidayMode.user_id}");
AH.init('auditRecord','${id}');
if('${isHandWritting}'==1){
$("#aa").show();
obj = document.getElementById("HWPenSign");//汉王手写板
obj.HWSetBkColor(0xE0F8E0);
obj.HWSetCtlFrame(2, 0x000000);
obj.HWSetPenWidth(2);
obj.HWSetPenMode(1);
Button1_onclick();
}
})
function Button1_onclick() {
res = obj.HWInitialize();
}
function Button2_onclick() {
var stream;
stream = obj.HWFinalize();
}
function Button3_onclick() {
obj.HWClearPenSign();
}
function getdept() {
var combotree_value = $('.easyui-combotree').combotree('getText');
var s = span.clone().text(combotree_value);
$('#carUseId').after(s);
$('#parDiv').css('display', 'none');
}
function ShowPeople(id) {
$.eiui.window({
url : "../cadreInfo/cadreInfo!forwordCenterView?cadreInfo.id=" + id+'&_rnd=' + Math.random(10000000),
width : 850,
height : 600,
refresh : refPage
});
};
function initMyTask() {
if ('${myTask}' == null || '${myTask}' == '') {
alert('流程审批已完成');
window.close();
} else {
flowButtons();
}
}
function flowButtons() {
var url = '../activiti/activitimanager!ajaxFormByTask?_rnd='
+ Math.random(10000000);
$.ajax({
url : url,
type : 'POST',
dataType : 'json',
data : {
taskId : '${myTask.id}'
},
success : function(data) {
if (data.items.length > 0) {
var key = data.items[0].id;
var val = data.items[0].values;
$.each(
val,
function(i, n) {
$(".buttonDiv")
.append(
'<input type="button" class="button btn60 submit" id='
+ key
+ ' value='
+ n.name
+ ' onclick="save(\''
+ key
+ '\','
+ n.value
+ ')"/>')
.append(
' ');
});
$(".buttonDiv")
.append(
'<input type=button onclick="window.close();" class="button btn60 reset" value="取消">');
}
}
});
}
function save(formKey, formValue) {
if ('${isHandWritting}' == 1) {
try {
if(obj.HWIsNeedSave()!=0){
$('#stream').html('data:image/jpg;base64,' + obj.HWGetBase64Stream(2));
$("#cc").html('data:image/jpg;base64,' + obj.HWGetBase64Stream(2));
}
} catch (e) {
var text2=$('#bb').html();
$("#cc").html(text2);
}
}else{
var text2=$('#bb').html();
$("#cc").html(text2);
}
var url = 'holiday!ajaxAudit?_rnd=' + Math.random(10000000);
$.eiui.loading.load("正在处理,请耐心等待");
$.ajax({
url : url,
type : 'POST',
data : $("#form").serialize() + "&formKey=" + formKey
+ "&formValue=" + formValue,
success : function(data) {
window.returnValue = "refresh";
window.close();
}
});
}
</script>
<style>
table.dataTable td input {
width: 200px;
}
table.dataTable2 th {
text-align: center;
}
table.dataTable2 td {
text-align: center;
}
</style>
</head>
<body>
<form name="form" id="form">
<div class="dataTableBody">
<input type="hidden" name="peopleHolidayMode.id" value="${peopleHolidayMode.id}">
<table class="dataTable" width=100% cellSpacing=0 cellPadding=0>
<tr>
<th >申请人</th>
<td colspan="3"><a href="#" style="color: blue;" onclick="ShowPeople('${peopleHolidayMode.user_id}')">${peopleHolidayMode.username}</a></td>
</tr>
<tr>
<th>申请部门</th>
<td>${peopleHolidayMode.deptname}</td>
<th >剩余假期天数</th>
<td >${ peopleHolidayMode.holday_left}</td>
</tr>
<tr>
<th>职务</th>
<td>${peopleHolidayMode.dutyName}</td>
<th >警衔</th>
<td >${peopleHolidayMode.militaryRankName}</td>
</tr>
<tr>
<th>补或二次休假</th>
<td><s:if test='peopleHolidayMode.ensure==1'>是</s:if> <s:else>否</s:else></td>
<th>婚姻状况</th>
<td><s:if test='peopleHolidayMode.marital_status==1'>已婚</s:if> <s:else>未婚</s:else>
</td>
</tr>
<tr>
<th width="12%">假期种类</th>
<td width="28%"><s:if test='peopleHolidayMode.type==1'>探亲</s:if> <s:else>事假</s:else></td>
<th width="11%">休假(地点)</th>
<td width="29%">${peopleHolidayMode.address}</td>
</tr>
<tr>
<th width="12%">开始时间</th>
<td width="28%">${peopleHolidayMode.beg_time}</td>
<th width="11%">结束时间</th>
<td width="29%">${peopleHolidayMode.end_time}</td>
</tr>
<tr>
<th width="12%">通信地址</th>
<td width="28%">${peopleHolidayMode.place}</td>
<th width="11%">联系电话</th>
<td width="29%">${peopleHolidayMode.phone}</td>
</tr>
<tr>
<th>休假事由</th>
<td colspan="3">${peopleHolidayMode.holiday_reason}</td>
</tr>
<tr id="aa" style="display: none;">
<th>审批意见</th>
<td colspan="3">
<object id="HWPenSign" name="HWPenSign" classid="clsid:E8F5278C-0C72-4561-8F7E-CCBC3E48C2E3"
width="320" height="120"></object>
<div style="float: left; margin-left: 165px; margin-top: -120px;">
<br />
<input id="button1" type="button" value="初始化设备" onclick="return Button1_onclick()"
style="width: 80px;" />
<br /> <br />
<input id="button2" type="button" value="关闭设备" onclick="return Button2_onclick()"
style="width: 80px;" />
<br /> <br />
<input id="Button3" type="button" value="重新签名" onclick="return Button3_onclick()"
style="width: 80px;" />
</div>
<textarea style="display: none;" id="stream"></textarea>
</td>
</tr>
<tr>
<th>审批意见</th>
<td colspan="3">
<textarea id="bb"></textarea>
<textarea style="display: none;" name="approve_opinion" id="cc"></textarea>
</td>
</tr>
</table>
</div>
</form>
<div id="auditRecord" style="height: 20%; margin: 0 6px;"></div>
<div id="imgDiv" style="float: right;height: 120px;"></div>
<DIV class=buttonDiv></DIV>
</body>
</html>