Enford 5 роки тому
батько
коміт
3625f9a6ad
70 змінених файлів з 16914 додано та 0 видалено
  1. 75 0
      src/main/webapp/webpage/modules/workhandbill/workHandBillDetailForm.jsp
  2. 138 0
      src/main/webapp/webpage/modules/workhandbill/workHandBillDetailList.jsp
  3. 210 0
      src/main/webapp/webpage/modules/workhandbill/workHandBillForm.jsp
  4. 84 0
      src/main/webapp/webpage/modules/workhandbill/workHandBillFormView.jsp
  5. 134 0
      src/main/webapp/webpage/modules/workhandbill/workHandBillList.jsp
  6. 272 0
      src/main/webapp/webpage/modules/workieavetemplate/workIeaveTemplateForm.jsp
  7. 218 0
      src/main/webapp/webpage/modules/workieavetemplate/workIeaveTemplateList.jsp
  8. 77 0
      src/main/webapp/webpage/modules/workieavetemplate/workIeaveTemplateUserForm.jsp
  9. 152 0
      src/main/webapp/webpage/modules/workieavetemplate/workIeaveTemplateUserList.jsp
  10. 132 0
      src/main/webapp/webpage/modules/workieavetemplate/workIeaveTemplateView.jsp
  11. 304 0
      src/main/webapp/webpage/modules/workincomingmessage/workIncomingMessageAudit.jsp
  12. 217 0
      src/main/webapp/webpage/modules/workincomingmessage/workIncomingMessageForm.jsp
  13. 370 0
      src/main/webapp/webpage/modules/workincomingmessage/workIncomingMessageList.jsp
  14. 219 0
      src/main/webapp/webpage/modules/workincomingmessage/workIncomingMessageModifyApply.jsp
  15. 15 0
      src/main/webapp/webpage/modules/workincomingmessage/workIncomingMessageTask.jsp
  16. 180 0
      src/main/webapp/webpage/modules/workincomingmessage/workIncomingMessageView.jsp
  17. 75 0
      src/main/webapp/webpage/modules/workinfolist/workInfoListForm.jsp
  18. 37 0
      src/main/webapp/webpage/modules/workinfolist/workInfoListFormView.jsp
  19. 122 0
      src/main/webapp/webpage/modules/workinfolist/workInfoListList.jsp
  20. 263 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAudit.jsp
  21. 638 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAuditEnd.jsp
  22. 60 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceCancle.jsp
  23. 578 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceForm.jsp
  24. 135 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceHistoricList.jsp
  25. 418 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceList.jsp
  26. 575 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceModify.jsp
  27. 15 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceTask.jsp
  28. 205 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceTodoList.jsp
  29. 243 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceView.jsp
  30. 271 0
      src/main/webapp/webpage/modules/workinvoicealter/workInvoiceAudita.jsp
  31. 540 0
      src/main/webapp/webpage/modules/workinvoicealter/workInvoiceForma.jsp
  32. 539 0
      src/main/webapp/webpage/modules/workinvoicealter/workInvoiceFormas.jsp
  33. 352 0
      src/main/webapp/webpage/modules/workinvoicealter/workInvoiceLista.jsp
  34. 549 0
      src/main/webapp/webpage/modules/workinvoicealter/workInvoiceModifya.jsp
  35. 15 0
      src/main/webapp/webpage/modules/workinvoicealter/workInvoiceTaska.jsp
  36. 243 0
      src/main/webapp/webpage/modules/workinvoicealter/workInvoiceViewa.jsp
  37. 255 0
      src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailAudit.jsp
  38. 112 0
      src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailForm.jsp
  39. 310 0
      src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailFormAdd.jsp
  40. 236 0
      src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailFormDetail.jsp
  41. 121 0
      src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailHistoricList.jsp
  42. 278 0
      src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailList.jsp
  43. 316 0
      src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailModify.jsp
  44. 15 0
      src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailTask.jsp
  45. 204 0
      src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailTodoList.jsp
  46. 303 0
      src/main/webapp/webpage/modules/workinvoicereturn/workInvoiceReturnAudit.jsp
  47. 307 0
      src/main/webapp/webpage/modules/workinvoicereturn/workInvoiceReturnForm.jsp
  48. 412 0
      src/main/webapp/webpage/modules/workinvoicereturn/workInvoiceReturnList.jsp
  49. 328 0
      src/main/webapp/webpage/modules/workinvoicereturn/workInvoiceReturnModify.jsp
  50. 15 0
      src/main/webapp/webpage/modules/workinvoicereturn/workInvoiceReturnTask.jsp
  51. 281 0
      src/main/webapp/webpage/modules/workinvoicereturn/workInvoiceReturnView.jsp
  52. 383 0
      src/main/webapp/webpage/modules/workinvoicereturn/workInvoiceReturnfpglyAudit.jsp
  53. 299 0
      src/main/webapp/webpage/modules/workinvoicereturnalter/workInvoiceReturnAlterAudit.jsp
  54. 334 0
      src/main/webapp/webpage/modules/workinvoicereturnalter/workInvoiceReturnAlterForm.jsp
  55. 348 0
      src/main/webapp/webpage/modules/workinvoicereturnalter/workInvoiceReturnAlterList.jsp
  56. 332 0
      src/main/webapp/webpage/modules/workinvoicereturnalter/workInvoiceReturnAlterModify.jsp
  57. 15 0
      src/main/webapp/webpage/modules/workinvoicereturnalter/workInvoiceReturnAlterTask.jsp
  58. 278 0
      src/main/webapp/webpage/modules/workinvoicereturnalter/workInvoiceReturnAlterView.jsp
  59. 105 0
      src/main/webapp/webpage/modules/workitem/workItemForm.jsp
  60. 234 0
      src/main/webapp/webpage/modules/workitem/workItemList.jsp
  61. 380 0
      src/main/webapp/webpage/modules/workitemcollar/workItemCollarAudit.jsp
  62. 443 0
      src/main/webapp/webpage/modules/workitemcollar/workItemCollarForm.jsp
  63. 309 0
      src/main/webapp/webpage/modules/workitemcollar/workItemCollarList.jsp
  64. 446 0
      src/main/webapp/webpage/modules/workitemcollar/workItemCollarModifyApply.jsp
  65. 15 0
      src/main/webapp/webpage/modules/workitemcollar/workItemCollarTask.jsp
  66. 221 0
      src/main/webapp/webpage/modules/workitemcollar/workItemCollarView.jsp
  67. 152 0
      src/main/webapp/webpage/modules/workitempre/workItemPreForm.jsp
  68. 166 0
      src/main/webapp/webpage/modules/workitempre/workItemPreList.jsp
  69. 117 0
      src/main/webapp/webpage/modules/workitemstock/workItemStockForm.jsp
  70. 174 0
      src/main/webapp/webpage/modules/workitemstock/workItemStockList.jsp

+ 75 - 0
src/main/webapp/webpage/modules/workhandbill/workHandBillDetailForm.jsp

@@ -0,0 +1,75 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>交接单材料管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+			
+		});
+	</script>
+</head>
+<body class="hideScroll">
+		<form:form id="inputForm" modelAttribute="workHandBillDetail" action="${ctx}/workhandbill/workHandBillDetail/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<sys:message content="${message}"/>	
+		<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+		   <tbody>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">备注信息:</label></td>
+					<td class="width-35">
+						<form:textarea path="remarks" htmlEscape="false" rows="4"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">资料名称:</label></td>
+					<td class="width-35">
+						<form:input path="materialName" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">有/无:</label></td>
+					<td class="width-35">
+						<form:input path="materialFlag" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">份数或者页数:</label></td>
+					<td class="width-35">
+						<form:input path="materialPages" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">交接单编号:</label></td>
+					<td class="width-35">
+						<form:input path="billId" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"></td>
+		   			<td class="width-35" ></td>
+		  		</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 138 - 0
src/main/webapp/webpage/modules/workhandbill/workHandBillDetailList.jsp

@@ -0,0 +1,138 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>交接单材料管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		$(document).ready(function() {
+		});
+	</script>
+</head>
+<body class="gray-bg">
+	<div class="wrapper wrapper-content">
+	<div class="ibox">
+	<div class="ibox-title">
+		<h5>交接单材料列表 </h5>
+		<div class="ibox-tools">
+			<a class="collapse-link">
+				<i class="fa fa-chevron-up"></i>
+			</a>
+			<a class="dropdown-toggle" data-toggle="dropdown" href="#">
+				<i class="fa fa-wrench"></i>
+			</a>
+			<ul class="dropdown-menu dropdown-user">
+				<li><a href="#">选项1</a>
+				</li>
+				<li><a href="#">选项2</a>
+				</li>
+			</ul>
+			<a class="close-link">
+				<i class="fa fa-times"></i>
+			</a>
+		</div>
+	</div>
+    
+    <div class="ibox-content">
+	<sys:message content="${message}"/>
+	
+	<!--查询条件-->
+	<div class="row">
+	<div class="col-sm-12">
+	<form:form id="searchForm" modelAttribute="workHandBillDetail" action="${ctx}/workhandbill/workHandBillDetail/" method="post" class="form-inline">
+		<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+		<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+		<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+		<div class="form-group">
+		 </div>	
+	</form:form>
+	<br/>
+	</div>
+	</div>
+	
+	<!-- 工具栏 -->
+	<div class="row">
+	<div class="col-sm-12">
+		<div class="pull-left">
+			<shiro:hasPermission name="workhandbill:workHandBillDetail:add">
+				<table:addRow url="${ctx}/workhandbill/workHandBillDetail/form" title="交接单材料"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workhandbill:workHandBillDetail:edit">
+			    <table:editRow url="${ctx}/workhandbill/workHandBillDetail/form" title="交接单材料" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workhandbill:workHandBillDetail:del">
+				<table:delRow url="${ctx}/workhandbill/workHandBillDetail/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workhandbill:workHandBillDetail:import">
+				<table:importExcel url="${ctx}/workhandbill/workHandBillDetail/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workhandbill:workHandBillDetail:export">
+	       		<table:exportExcel url="${ctx}/workhandbill/workHandBillDetail/export"></table:exportExcel><!-- 导出按钮 -->
+	       	</shiro:hasPermission>
+	       <button class="btn btn-white btn-sm " data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i> 刷新</button>
+		
+			</div>
+		<div class="pull-right">
+			<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="search()" ><i class="fa fa-search"></i> 查询</button>
+			<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="reset()" ><i class="fa fa-refresh"></i> 重置</button>
+		</div>
+	</div>
+	</div>
+	
+	<!-- 表格 -->
+	<table id="contentTable" class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+		<thead>
+			<tr>
+				<th> <input type="checkbox" class="i-checks"></th>
+				<th  class="sort-column remarks">备注信息</th>
+				<th  class="sort-column materialName">资料名称</th>
+				<th  class="sort-column materialFlag">有/无</th>
+				<th  class="sort-column materialPages">份数或者页数</th>
+				<th  class="sort-column billId">交接单编号</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="workHandBillDetail">
+			<tr>
+				<td> <input type="checkbox" id="${workHandBillDetail.id}" class="i-checks"></td>
+				<td><a  href="#" onclick="openDialogView('查看交接单材料', '${ctx}/workhandbill/workHandBillDetail/form?id=${workHandBillDetail.id}','800px', '500px')">
+					${workHandBillDetail.remarks}
+				</a></td>
+				<td>
+					${workHandBillDetail.materialName}
+				</td>
+				<td>
+					${workHandBillDetail.materialFlag}
+				</td>
+				<td>
+					${workHandBillDetail.materialPages}
+				</td>
+				<td>
+					${workHandBillDetail.billId}
+				</td>
+				<td>
+					<shiro:hasPermission name="workhandbill:workHandBillDetail:view">
+						<a href="#" onclick="openDialogView('查看交接单材料', '${ctx}/workhandbill/workHandBillDetail/form?id=${workHandBillDetail.id}','800px', '500px')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="workhandbill:workHandBillDetail:edit">
+    					<a href="#" onclick="openDialog('修改交接单材料', '${ctx}/workhandbill/workHandBillDetail/form?id=${workHandBillDetail.id}','800px', '500px')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="workhandbill:workHandBillDetail:del">
+						<a href="${ctx}/workhandbill/workHandBillDetail/delete?id=${workHandBillDetail.id}" onclick="return confirmx('确认要删除该交接单材料吗?', this.href)"   class="btn btn-danger btn-xs"><i class="fa fa-trash"></i> 删除</a>
+					</shiro:hasPermission>
+				</td>
+			</tr>
+		</c:forEach>
+		</tbody>
+	</table>
+	
+		<!-- 分页代码 -->
+	<table:page page="${page}"></table:page>
+	<br/>
+	<br/>
+	</div>
+	</div>
+</div>
+</body>
+</html>

+ 210 - 0
src/main/webapp/webpage/modules/workhandbill/workHandBillForm.jsp

@@ -0,0 +1,210 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>交接单管理</title>
+	<meta name="decorator" content="default"/>
+	<script src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>
+	<script type="text/javascript">
+		var validateForm;
+//		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+//		  if(validateForm.form()){
+//			  $("#inputForm").submit();
+//			  return true;
+//		  }
+//
+//		  return false;
+//		}
+		$(document).ready(function() {
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+            getCurrentDocumentHei()
+		});
+        function addRow(list, idx, tpl, row){
+            var idx2 = $("#workHandBills tr").length;
+            if(list == '#workHandBills'){
+                bornTemplete(list, idx, tpl, row, idx2);
+            }
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+//            $(list+idx).find("select").each(function(){
+//                $(this).val($(this).attr("data-value"));
+//            });
+//            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+//                var ss = $(this).attr("data-value").split(',');
+//                for (var i=0; i<ss.length; i++){
+//                    if($(this).val() == ss[i]){
+//                        $(this).attr("checked","checked");
+//                    }
+//                }
+//            });
+            getCurrentDocumentHei();
+        }
+        function delRow(obj, prefix,othis){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            if (id.val() == ""){
+                delFlag.val("1");
+                $(obj).parent().parent().remove();
+            }else if(delFlag.val() == "0"){
+                delFlag.val("1");
+                $(obj).html("&divide;").attr("title", "撤回删除");
+                $(obj).parent().parent().addClass("error");
+                $(obj).parent().parent().addClass("hide");
+            }else if(delFlag.val() == "1"){
+                delFlag.val("0");
+                $(obj).parent().parent().removeClass("error");
+            }
+            getCurrentDocumentHei(othis);
+        }
+        function isNumber(val){
+            if(val === "" || val ==null){
+                return false;
+            }
+            var regPos = /^\d+(\.\d+)?$/; //非负浮点数
+            var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
+            if(regPos.test(val) || regNeg.test(val)){
+                return true;
+            }else{
+                return false;
+            }
+
+        }
+        function getCurrentDocumentHei(obj){
+            var height = $(document).outerHeight();
+            if(height < 410){
+                height = height + 350;
+            }
+            var hei = 0;
+            if(obj){
+                hei = $(obj).find("tr").eq(0).height() || 0;
+            }
+            parent.$("#controltype").attr("height",(height - hei) +"px")
+        }
+	</script>
+</head>
+<body class="hideScroll">
+		<form:form id="inputForm" modelAttribute="workHandBill" action="${ctx}/workhandbill/workHandBill/save" method="post" class="">
+		<form:hidden path="id"/>
+		<sys:message content="${message}"/>
+		<input type="hidden" name="projectId" id="projectId">
+		<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+		   <tbody>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font style="color: red">*</font>接收人:</label></td>
+					<td class="width-35">
+						<sys:treeselect id="billRecUser" name="billRecUser.id" value="${workHandBill.billRecUser.id}" labelName="billRecUser.name" labelValue="${workHandBill.billRecUser.name}"
+							title="用户" url="/sys/office/treeData?type=3" cssClass="form-control required" allowClear="true" notAllowSelectParent="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right"><font style="color: red">*</font>送达人:</label></td>
+					<td class="width-35">
+						<sys:treeselect id="billSendUser" name="billSendUser.id" value="${workHandBill.billSendUser.id}" labelName="billSendUser.name" labelValue="${workHandBill.billSendUser.name}"
+										title="用户" url="/sys/office/treeData?type=3" cssClass="form-control required" allowClear="true" notAllowSelectParent="true"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font style="color: red">*</font>交接时间:</label></td>
+					<td class="width-35">
+						<input id="billHandTime" name="billHandTime" class="laydate-icon form-control layer-date required" style="min-width:100%;" onclick="laydate({istime: false,format: 'YYYY-MM-DD'})"
+							value="<fmt:formatDate value="${workHandBill.billHandTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+					</td>
+				</tr>
+		 	</tbody>
+		</table>
+		<a class="btn btn-white btn-sm addBtn" onclick="addRow('#workHandBills', workHandBillsRowIdx, workHandBillsTpl);workHandBillsRowIdx = workHandBillsRowIdx + 1;" title="新增"><i class="fa fa-plus"></i> 新增</a>
+		<table id="contentTable2" class="table table-striped table-bordered table-condensed">
+			<thead>
+			<tr>
+				<th><font color="red">*</font>序号</th>
+				<th><font color="red">*</font>资料名称</th>
+				<th><font color="red">*</font>有无</th>
+				<th><font color="red">*</font>份数或页数</th>
+				<th>备注</th>
+				<th width="150px">操作</th>
+			</tr>
+			</thead>
+			<tbody id="workHandBills">
+			<c:if test="${not empty workHandBill.workHandBillDetailList}">
+				<c:forEach items="${workHandBill.workHandBillDetailList}" var="workHandBill" varStatus="index">
+					<tr id="workHandBillDetailList${index.index}">
+						<td class="hide">
+							<input id="workHandBillDetailList${index.index}_id" name="workHandBillDetailList[${index.index}].id" type="hidden" value="${workHandBill.id}"/>
+							<input id="workHandBillDetailList${index.index}_delFlag" name="workHandBillDetailList[${index.index}].delFlag" type="hidden" value="0"/>
+						</td>
+						<td>
+							<input id="workHandBillDetailList${index.index}_materialNumber"  name="workHandBillDetailList[${index.index}].materialNumber" type="text" value="${workHandBill.materialNumber}"    class="form-control required"/>
+						</td>
+
+						<td>
+							<input id="workHandBillDetailList${index.index}_materialName" name="workHandBillDetailList[${index.index}].materialName" type="text" value="${workHandBill.materialName}"    class="form-control required"/>
+						</td>
+						<td>
+							<input id="workHandBillDetailList${index.index}_materialFlag" name="workHandBillDetailList[${index.index}].materialFlag" type="text" value="${workHandBill.materialFlag}"    class="form-control required"/>
+						</td>
+						<td>
+							<input id="workHandBillDetailList${index.index}_materialPages" name="workHandBillDetailList[${index.index}].materialPages" type="text" value="${workHandBill.materialPages}"    class="form-control required"/>
+						</td>
+						<td>
+							<input id="workHandBillDetailList${index.index}_remarks" name="workHandBillDetailList[${index.index}].remarks" type="text" value="${workHandBill.remarks}"    class="form-control number required"/>
+						</td>
+						<td class="text-center" style="width:80px;">
+							<span class="btn btn-danger btn-xs" onclick="delRow(this, '#workHandBillDetailList${index.index}','#workHandBills')" title="删除"><i class="fa fa-trash"></i> 删除</span>
+						</td>
+					</tr>
+				</c:forEach>
+			</c:if>
+			</tbody>
+		</table>
+		<script type="text/template" id="workHandBillsTpl">//<!--
+		<tr id="workHandBillDetailList{{idx}}">
+			<td class="hide">
+				<input id="workHandBillDetailList{{idx}}_id" name="workDeviceRecordList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+				<input id="workHandBillDetailList{{idx}}_delFlag" name="workDeviceRecordList[{{idx}}].delFlag" type="hidden" value="0"/>
+			</td>
+			<td>
+				<input id="workHandBillDetailList{{idx}}_materialNumber"  name="workHandBillDetailList[{{idx}}].materialNumber" type="text" value="{{row.materialNumber}}"    class="form-control required"/>
+			</td>
+			<td>
+				<input id="workHandBillDetailList{{idx}}_materialName"  name="workHandBillDetailList[{{idx}}].materialName" type="text" value="{{row.materialName}}"    class="form-control required"/>
+			</td>
+			<td>
+				<input id="workHandBillDetailList{{idx}}_materialFlag" name="workHandBillDetailList[{{idx}}].materialFlag" type="text" value="{{row.materialFlag}}"    class="form-control required"/>
+			</td>
+			<td>
+				<input id="workHandBillDetailList{{idx}}_materialPages" name="workHandBillDetailList[{{idx}}].materialPages" type="text" value="{{row.materialPages}}"    class="form-control required"/>
+			</td>
+			<td>
+				<input id="workHandBillDetailList{{idx}}_remarks" name="workHandBillDetailList[{{idx}}].remarks" type="text" value="{{row.remarks}}"    class="form-control required"/>
+			</td>
+
+			<td class="text-center" style="width:80px;">
+				{{#delBtn}}<span class="btn btn-danger btn-xs" onclick="delRow(this, '#workHandBillDetailList{{idx}}','#workHandBills')" title="删除"><i class="fa fa-trash"></i> 删除</span>{{/delBtn}}
+			</td>
+		</tr>//-->
+		</script>
+		<script type="text/javascript">
+			var workHandBillsRowIdx = 0, workHandBillsTpl = $("#workHandBillsTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+			if($("#id").val()){
+                workHandBillsRowIdx = ${fn:length(workHandBill.workHandBillDetailList)};
+			}
+		</script>
+	</form:form>
+</body>
+</html>

+ 84 - 0
src/main/webapp/webpage/modules/workhandbill/workHandBillFormView.jsp

@@ -0,0 +1,84 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp" %>
+<html>
+<head>
+    <title>交接单管理</title>
+    <meta name="decorator" content="default"/>
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+        <div class="form-group layui-row first">
+            <div class="form-group-label"><h2>交接单</h2></div>
+            <div class="layui-item layui-col-sm6">
+                <label class="layui-form-label"><span class="require-item">*</span>接收人:</label>
+                <div class="layui-input-block with-icon">
+                    <sys:treeselect id="billRecUser" name="workHandBill.billRecUser.id" disabled="disabled"
+                                    value="${workHandBill.billRecUser.id}"
+                                    labelName="workHandBill.billRecUser.name"
+                                    labelValue="${workHandBill.billRecUser.name}"
+                                    title="用户" url="/sys/office/treeData?type=3"
+                                    cssClass="form-control required layui-input" allowClear="true"
+                                    notAllowSelectParent="true"/>
+                </div>
+            </div>
+            <div class="layui-item layui-col-sm6">
+                <label class="layui-form-label"><span class="require-item">*</span>送达人:</label>
+                <div class="layui-input-block with-icon">
+                    <sys:treeselect id="billSendUser" name="workHandBill.billSendUser.id" disabled="disabled"
+                                    value="${workHandBill.billSendUser.id}" labelName="workHandBill.billSendUser.name"
+                                    labelValue="${workHandBill.billSendUser.name}"
+                                    title="用户" url="/sys/office/treeData?type=3"
+                                    cssClass="form-control required layui-input" allowClear="true"
+                                    notAllowSelectParent="true"/>
+                </div>
+            </div>
+            <div class="layui-item layui-col-sm6">
+                <label class="layui-form-label"><span class="require-item">*</span>交接时间:</label>
+                <div class="layui-input-block with-icon">
+                    <input id="billHandTime" name="workHandBill.billHandTime" readonly="true" disabled="disabled"
+                           maxlength="20"
+                           class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+                           value="<fmt:formatDate value="${workHandBill.billHandTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                </div>
+            </div>
+        </div>
+        <table class="table table-bordered table-condensed no-bottom-margin details">
+            <thead>
+            <tr>
+                <th><font color="red">*</font>序号</th>
+                <th><font color="red">*</font>资料名称</th>
+                <th><font color="red">*</font>有无</th>
+                <th><font color="red">*</font>份数或页数</th>
+                <th>备注</th>
+            </tr>
+            </thead>
+            <tbody>
+            <c:if test="${not empty workHandBill.workHandBillDetailList}">
+                <c:forEach items="${workHandBill.workHandBillDetailList}" var="workHandBill" varStatus="index">
+                    <tr id="workHandBillDetailList${index.index}">
+                        <td>
+                                ${workHandBill.materialNumber}
+                        </td>
+
+                        <td>
+                                ${workHandBill.materialName}
+                        </td>
+                        <td>
+                                ${workHandBill.materialFlag}
+                        </td>
+                        <td>
+                                ${workHandBill.materialPages}
+                        </td>
+                        <td>
+                                ${workHandBill.remarks}
+                        </td>
+                    </tr>
+                </c:forEach>
+            </c:if>
+            </tbody>
+        </table>
+    </div>
+</div>
+</body>
+</html>

+ 134 - 0
src/main/webapp/webpage/modules/workhandbill/workHandBillList.jsp

@@ -0,0 +1,134 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>交接单管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		$(document).ready(function() {
+		});
+	</script>
+</head>
+<body class="gray-bg">
+	<div class="wrapper wrapper-content">
+	<div class="ibox">
+	<div class="ibox-title">
+		<h5>交接单列表 </h5>
+		<div class="ibox-tools">
+			<a class="collapse-link">
+				<i class="fa fa-chevron-up"></i>
+			</a>
+			<a class="dropdown-toggle" data-toggle="dropdown" href="#">
+				<i class="fa fa-wrench"></i>
+			</a>
+			<ul class="dropdown-menu dropdown-user">
+				<li><a href="#">选项1</a>
+				</li>
+				<li><a href="#">选项2</a>
+				</li>
+			</ul>
+			<a class="close-link">
+				<i class="fa fa-times"></i>
+			</a>
+		</div>
+	</div>
+    
+    <div class="ibox-content">
+	<sys:message content="${message}"/>
+	
+	<!--查询条件-->
+	<div class="row">
+	<div class="col-sm-12">
+	<form:form id="searchForm" modelAttribute="workHandBill" action="${ctx}/workhandbill/workHandBill/" method="post" class="form-inline">
+		<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+		<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+		<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+		<div class="form-group">
+		 </div>	
+	</form:form>
+	<br/>
+	</div>
+	</div>
+	
+	<!-- 工具栏 -->
+	<div class="row">
+	<div class="col-sm-12">
+		<div class="pull-left">
+			<shiro:hasPermission name="workhandbill:workHandBill:add">
+				<table:addRow url="${ctx}/workhandbill/workHandBill/form" title="交接单"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workhandbill:workHandBill:edit">
+			    <table:editRow url="${ctx}/workhandbill/workHandBill/form" title="交接单" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workhandbill:workHandBill:del">
+				<table:delRow url="${ctx}/workhandbill/workHandBill/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workhandbill:workHandBill:import">
+				<table:importExcel url="${ctx}/workhandbill/workHandBill/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workhandbill:workHandBill:export">
+	       		<table:exportExcel url="${ctx}/workhandbill/workHandBill/export"></table:exportExcel><!-- 导出按钮 -->
+	       	</shiro:hasPermission>
+	       <button class="btn btn-white btn-sm " data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i> 刷新</button>
+		
+			</div>
+		<div class="pull-right">
+			<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="search()" ><i class="fa fa-search"></i> 查询</button>
+			<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="reset()" ><i class="fa fa-refresh"></i> 重置</button>
+		</div>
+	</div>
+	</div>
+	
+	<!-- 表格 -->
+	<table id="contentTable" class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+		<thead>
+			<tr>
+				<th> <input type="checkbox" class="i-checks"></th>
+				<th  class="sort-column remarks">备注信息</th>
+				<th  class="sort-column ">接收人</th>
+				<th  class="sort-column ">送达人</th>
+				<th  class="sort-column billHandTime">交接时间</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="workHandBill">
+			<tr>
+				<td> <input type="checkbox" id="${workHandBill.id}" class="i-checks"></td>
+				<td><a  href="#" onclick="openDialogView('查看交接单', '${ctx}/workhandbill/workHandBill/form?id=${workHandBill.id}','800px', '500px')">
+					${workHandBill.remarks}
+				</a></td>
+				<td>
+					${workHandBill.billRecUser.name}
+				</td>
+				<td>
+					${workHandBill.billSendUser.name}
+				</td>
+				<td>
+					<fmt:formatDate value="${workHandBill.billHandTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
+				</td>
+				<td>
+					<shiro:hasPermission name="workhandbill:workHandBill:view">
+						<a href="#" onclick="openDialogView('查看交接单', '${ctx}/workhandbill/workHandBill/form?id=${workHandBill.id}','800px', '500px')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="workhandbill:workHandBill:edit">
+    					<a href="#" onclick="openDialog('修改交接单', '${ctx}/workhandbill/workHandBill/form?id=${workHandBill.id}','800px', '500px')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="workhandbill:workHandBill:del">
+						<a href="${ctx}/workhandbill/workHandBill/delete?id=${workHandBill.id}" onclick="return confirmx('确认要删除该交接单吗?', this.href)"   class="btn btn-danger btn-xs"><i class="fa fa-trash"></i> 删除</a>
+					</shiro:hasPermission>
+				</td>
+			</tr>
+		</c:forEach>
+		</tbody>
+	</table>
+	
+		<!-- 分页代码 -->
+	<table:page page="${page}"></table:page>
+	<br/>
+	<br/>
+	</div>
+	</div>
+</div>
+</body>
+</html>

+ 272 - 0
src/main/webapp/webpage/modules/workieavetemplate/workIeaveTemplateForm.jsp

@@ -0,0 +1,272 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>调整职级管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        var count = 0;
+        $(document).ready(function() {
+            if($("#createDate").val()==null || $("#createDate").val()==''){
+                $("#createDate").val(getNowFormatDate());
+            }
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                rules:{
+                },
+                messages:{
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+         /*   laydate.render({
+                elem: '#createDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                format: 'yyyy-MM-dd',
+                type : 'date'
+            });*/
+
+
+        });
+        function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            $("#inputForm").attr("action","${ctx}/workieavetemplate/workIeaveTemplate/save");
+            if(validateForm.form()){
+
+                $("#inputForm").submit();
+                return true;
+            }else {
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+            return false;
+        }
+
+        function deleteRow(obj,index){
+            $(obj).parent().parent().remove();
+            str[index] = " ";
+            mon[index] = 0;
+
+        }
+        function getNowFormatDate() {
+            var date = new Date();
+            var seperator1 = "-";
+            var seperator2 = ":";
+            var month = date.getMonth() + 1;
+            var strDate = date.getDate();
+            month = (month < 10)?"0"+month:month;
+            strDate = (strDate < 10)?"0"+strDate:strDate;
+            var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate;
+            return currentdate;
+        }
+
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workMonthlyPlanThisList tr").length;
+            bornTemplete(list, idx, tpl, row, idx1);
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+
+        }
+        function delRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            if (id.val() == ""){
+                delFlag.val("1");
+                $(obj).parent().parent().remove();
+            }else if(delFlag.val() == "0"){
+                delFlag.val("1");
+                $(obj).html("&divide;").attr("title", "撤销删除");
+                $(obj).parent().parent().addClass("error");
+                $(obj).parent().parent().addClass("hide");
+            }else if(delFlag.val() == "1"){
+                delFlag.val("0");
+                $(obj).html("&times;").attr("title", "删除");
+                $(obj).parent().parent().removeClass("error");
+            }
+        }
+
+        function selectUserInfo(data){
+            console.info(data);
+                        addRow('#workIeaveTemplateUserList', workIeaveTemplateUserListRowIdx, workIeaveTemplateUserListTpl);
+                        workIeaveTemplateUserListRowIdx = workIeaveTemplateUserListRowIdx + 1;
+                        var row = workIeaveTemplateUserListRowIdx - 1 ;
+                        $("#"+"workIeaveTemplateUserList"+row+"_auditor").val(data.userId);
+                        $("#"+"workIeaveTemplateUserList"+row+"_1").val(data.officeName);
+                        $("#"+"workIeaveTemplateUserList"+row+"_2").val(data.name);
+        }
+
+        function openDialogreUser(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: ['90%','90%'],
+                title:title,
+                skin:"two-btns",
+                name:'friend',
+                content: encodeURI("${ctx}/workieavetemplate/workIeaveTemplate/gridSelectUser?url=${ctx}/workieavetemplate/workIeaveTemplate/gridSelectUser&isAll=true&type=null&isSingle=true") ,
+                btn: ['确定', '关闭'],
+                yes: function(index, layero){
+                    var iframeWin = layero.find('iframe')[0].contentWindow; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var item = iframeWin.getSelectedItem();
+                    if(item == "-1"){
+                        return;
+                    }
+                        selectUserInfo(item);
+                    top.layer.close(index);//关闭对话框。
+
+                },
+                cancel: function(index){
+                }
+            });
+        }
+	</script>
+	<style>
+		/*超过5个汉字,调整label的长度,以下是配套的*/
+		.layui-item .layui-form-label{
+			width:90px;
+		}
+		.form-group .layui-item .layui-input-block,
+		.query .layui-input-block {
+			margin-left: 116px;
+		}
+	</style>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workIeaveTemplate" action="${ctx}/workieavetemplate/workIeaveTemplate/save" method="post" class="form-horizontal" >
+			<form:hidden path="id"/>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">公司名称:</label>
+					<div class="layui-input-block with-icon">
+                        <div class="input-group">
+						<sys:treeselect id="branchOffice" name="branchOffice" value="${workIeaveTemplate.branchOffice}" labelName="branchOfficeName" labelValue="${workIeaveTemplate.branchOfficeName}"
+										title="分公司" url="/workieavetemplate/workIeaveTemplate/treeDataCompany?type=2" cssClass="form-control required layui-input" allowClear="true" notAllowSelectParent="false"/>
+					</div>
+                    </div>
+				</div>
+
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>创建日期:</label>
+					<div class="layui-input-block">
+						<input id="createDate" name="createDate" readonly="true" type="text"  maxlength="20" class="laydate-icondate form-control layer-date  layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workIeaveTemplate.createDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>模板详情</h2></div>
+				<div class="layui-item nav-btns ">
+					<a href="javascript:void(0)" onclick="openDialogreUser('选择用户', '${ctx}/workieavetemplate/workIeaveTemplate/gridSelectUser','80%','80%')" class="nav-btn nav-btn-add" ><i class="fa fa-plus"></i>&nbsp;选择</a>
+				</div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px">审核部门</th>
+							<th width="200px">审核人</th>
+							<th width="150px">审核项目</th>
+							<th width="200px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="workIeaveTemplateUserList">
+						<c:if test="${not empty workIeaveTemplate.workIeaveTemplateUserList}">
+							<c:forEach items="${workIeaveTemplate.workIeaveTemplateUserList}" var="workIeaveTemplateUser" varStatus="index">
+								<tr id="workIeaveTemplateUserList${index.index}">
+									<td class="hide">
+										<input id="workIeaveTemplateUserList${index.index}_id" name="workIeaveTemplateUserList[${index.index}].id" type="hidden" value="${workIeaveTemplateUser.id}"/>
+										<input id="workIeaveTemplateUserList${index.index}_templateId" name="workIeaveTemplateUserList[${index.index}].templateId" type="hidden" value="${workIeaveTemplateUser.templateId}"/>
+										<input id="workIeaveTemplateUserList${index.index}_auditor" name="workIeaveTemplateUserList[${index.index}].auditor" type="hidden" value="${workIeaveTemplateUser.auditor}"/>
+										<input id="workIeaveTemplateUserList${index.index}_delFlag" name="workIeaveTemplateUserList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										<input id="workIeaveTemplateUserList${index.index}_1"  readonly="true"   type="text" value="${workIeaveTemplateUser.officeName}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workIeaveTemplateUserList${index.index}_2"  readonly="true"   type="text" value="${workIeaveTemplateUser.userName}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workIeaveTemplateUserList${index.index}_3" name="workIeaveTemplateUserList[${index.index}].comment"     type="text" value="${workIeaveTemplateUser.comment}"   class="form-control "/>
+									</td>
+									<td class="text-center op-td" >
+										<span class="op-btn op-btn-delete" id="workIeaveTemplateUserList${index.index}_span" onclick="delRow(this, '#workIeaveTemplateUserList${index.index}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+					<script type="text/template" id="workIeaveTemplateUserListTpl">//<!--
+                                    <tr id="workIeaveTemplateUserList{{idx}}">
+                                        <td class="hide">
+                                            <input id="workIeaveTemplateUserList{{idx}}_id" name="workIeaveTemplateUserList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                            <input id="workIeaveTemplateUserList{{idx}}_templateId" name="workIeaveTemplateUserList[{{idx}}].templateId" type="hidden" value="{{row.templateId}}"/>
+                                            <input id="workIeaveTemplateUserList{{idx}}_auditor" name="workIeaveTemplateUserList[{{idx}}].auditor" type="hidden" value="{{row.workStaffBasicInfo.auditor}}"/>
+                                            <input id="workIeaveTemplateUserList{{idx}}_delFlag" name="workIeaveTemplateUserList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                        <td>
+                                            <input id="workIeaveTemplateUserList{{idx}}_1"   name="workIeaveTemplateUserList[{{idx}}].officeName" type="text" value="{{row.officeName}}"  readonly="true"   class="form-control "/>
+                                        </td>
+                                        <td>
+                                            <input id="workIeaveTemplateUserList{{idx}}_2"  name="workIeaveTemplateUserList[{{idx}}].userName" type="text" value="{{row.userName}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workIeaveTemplateUserList{{idx}}_3"  name="workIeaveTemplateUserList[{{idx}}].comment" type="text" value="{{row.comment}}"    class="form-control "/>
+                                        </td>
+
+                                        <td class="text-center op-td" >
+                                            {{#delBtn}}<span class="op-btn op-btn-delete" id="workIeaveTemplateUserList{{idx}}_span" onclick="delRow(this, '#workIeaveTemplateUserList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+                        var workIeaveTemplateUserListRowIdx = ${fn:length(workIeaveTemplate.workIeaveTemplateUserList)}, workIeaveTemplateUserListTpl = $("#workIeaveTemplateUserListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                        if($("#id").val()){
+                            workIeaveTemplateUserListIdx = ${fn:length(workIeaveTemplate.workIeaveTemplateUserList)};
+                        }
+                        $(document).ready(function() {
+                        });
+					</script>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+
+	</div>
+</div>
+</body>
+</html>

+ 218 - 0
src/main/webapp/webpage/modules/workieavetemplate/workIeaveTemplateList.jsp

@@ -0,0 +1,218 @@
+<%@ page import="com.jeeplus.modules.sys.utils.UserUtils" %>
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>离职模板</title>
+	<meta name="decorator" content="default"/>
+	<style>
+		.widthClass{
+			display: inline-block;
+		}
+		.shows .input-group{
+			width: 48%!important;
+		}
+	</style>
+	<style>
+		body{
+			background-color:transparent;
+			filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+			color:#ffffff;
+			background-color:rgba(255,255,255,0);
+			height:100%;
+		}
+	</style>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+	<sys:message content="${message}"/>
+	<div class="layui-row">
+		<div class="full-width fl">
+			<div class="contentShadow layui-row" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="workIeaveTemplate" action="${ctx}/workieavetemplate/workIeaveTemplate/" method="post" class="form-inline">
+					<%--以下三行照抄--%>
+					<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+					<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+					<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+					<div class="commonQuery">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">公司名称:</label>
+							<div class="layui-input-block">
+								<input id="branchOfficeName" name="branchOfficeName" type="text"  maxlength="64" class=" form-control  layui-input laydate-icon" value="${workOfficeChange.userName}" />
+								</input>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">创建日期:</label>
+							<div class="layui-input-block">
+								<input id="beginDate" placeholder="开始时间" name="beginDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workIeaveTemplate.beginDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+								<span class="group-sep">-</span>
+								<input id="endDate" placeholder="结束时间" name="endDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workIeaveTemplate.endDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+							</div>
+						</div>
+						<div class="layui-item athird">
+							<div class="input-group">
+								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+								<button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
+								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" style="clear:both;display:none;">
+
+						<div style="clear:both;"></div>
+					</div>
+				</form:form>
+			</div>
+		</div>
+
+		<div class="full-width fl">
+			<div class="contentShadow layui-form contentDetails">
+				<div class="nav-btns">
+					<%--此处按钮样式包括 nav-btn-add nav-btn-refresh nav-btn-import nav-btn-export nav-btn-query nav-btn-reset--%>
+					<shiro:hasPermission name="workieavetemplate:workIeaveTemplate:add">
+						<a href="javascript:void(0)" onclick="openDialog('新增离职模板', '${ctx}/workieavetemplate/workIeaveTemplate/form?tabId=1','95%','95%')" class="nav-btn nav-btn-add" ><i class="fa fa-plus"></i>&nbsp;添加</a>
+					</shiro:hasPermission>
+					<button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i>&nbsp;刷新</button>
+					<div style="clear: both;"></div>
+				</div>
+				<table class="oa-table layui-table" id="contentTable"></table>
+
+				<!-- 分页代码 -->
+				<table:page page="${page}"></table:page>
+				<div style="clear: both;"></div>
+			</div>
+		</div>
+	</div>
+	<div id="changewidth"></div>
+</div>
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script>
+    layui.use('table', function(){
+        layui.table.render({
+            limit:${ page.pageSize }
+            ,elem: '#contentTable'
+            ,page: false
+            ,cols: [[
+                {field:'branchOfficeName',align:'center',sort: true, minWidth:150,title: '公司名称', templet:function(d){
+                        var xml = "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看离职模板', '${ctx}/workieavetemplate/workIeaveTemplate/view?id=" + d.id + "','95%','95%')\">" +
+                            "<span title=" + d.branchOfficeName + ">" + d.branchOfficeName + "</span></a>";
+                        return xml;
+                    }},
+                 {field:'createDate', align:'center',sort: true,width:350,title: '创建日期'}
+                ,{align:'caozuo',align:'center',title:"操作",width:160,templet:function(d){
+                        var xml = "";
+                        if(d.canedit != undefined && d.canedit == "1"){
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialog('修改离职模板', '${ctx}/workieavetemplate/workIeaveTemplate/form?id=" + d.id+"','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i>修改</a>"
+                        }
+                        if(d.candelete != undefined && d.candelete == "1"){
+                            xml +="<a href=\"${ctx}/workieavetemplate/workIeaveTemplate/delete?id=" + d.id+"\" onclick=\"return confirmx('确认要删除该离职模板吗?', this.href)\"   class=\"op-btn op-btn-delete\"><i class=\"fa fa-trash\"></i> 删除</a>";
+                        }
+                        return xml;
+                    }}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="workIeaveTemplate" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "id":"${workIeaveTemplate.id}"
+                    ,"branchOfficeName":"${workIeaveTemplate.branchOfficeName}"
+                    ,"createDate":"<fmt:formatDate value="${workIeaveTemplate.createDate}" pattern="yyyy-MM-dd"/>"
+                    <shiro:hasPermission name="workieavetemplate:workIeaveTemplate:edit">
+					,"canedit":"1"
+                    </shiro:hasPermission>
+                    <shiro:hasPermission name="workieavetemplate:workIeaveTemplate:del">
+                    ,"candelete":"1"
+                    </shiro:hasPermission>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+        });
+
+    })
+    resizeListTable();
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+<script type="text/javascript">
+    $(document).ready(function() {
+        $("#cus_name").show();
+        $("#cus_name").siblings().hide();
+        //搜索框收放
+        $('#moresee').click(function(){
+            if($('#moresees').is(':visible'))
+            {
+                $('#moresees').slideUp(0,resizeListWindow1);
+                $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+            }else{
+                $('#moresees').slideDown(0,resizeListWindow1);
+                $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+            }
+        });
+
+        laydate.render({
+            elem: '#beginDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+            format: 'yyyy-MM-dd',
+            type : 'date'
+        });
+
+        laydate.render({
+            elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+            format: 'yyyy-MM-dd',
+            type : 'date'
+        });
+
+    });
+    function switchInput(obj){
+        $("#"+obj).show();
+        $("#"+obj).siblings().hide();
+    }
+
+    function openDialog(title,url,width,height,target){
+        if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+            width='auto';
+            height='auto';
+        }else{//如果是PC端,根据用户设置的width和height显示。
+        }
+        top.layer.open({
+            type: 2,
+            area: [width, height],
+            title: title,
+            skin: 'tow-btns',
+            maxmin: true, //开启最大化最小化按钮
+            content: url ,
+            btn: ['提交','关闭'],
+            yes: function(index, layero){
+                var body = top.layer.getChildFrame('body', index);
+                var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                var inputForm = body.find('#inputForm');
+                var top_iframe;
+                if(target){
+                    top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                }else{
+                    top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                }
+                inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                if(iframeWin.contentWindow.doSubmit(2) ){
+                    top.layer.close(index);//关闭对话框。
+                    setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                }
+            },
+            btn3: function(index){
+            }
+        });
+    }
+</script>
+</body>
+</html>

+ 77 - 0
src/main/webapp/webpage/modules/workieavetemplate/workIeaveTemplateUserForm.jsp

@@ -0,0 +1,77 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>离职模板管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+			
+		});
+	</script>
+</head>
+<body class="hideScroll">
+		<form:form id="inputForm" modelAttribute="workIeaveTemplateUser" action="${ctx}/workieavetemplate/workIeaveTemplateUser/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<sys:message content="${message}"/>	
+		<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+		   <tbody>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">备注信息:</label></td>
+					<td class="width-35">
+						<form:textarea path="remarks" htmlEscape="false" rows="4"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">所属部门:</label></td>
+					<td class="width-35">
+						<form:input path="office_id" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">所属公司:</label></td>
+					<td class="width-35">
+						<form:input path="companyId" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">审核人:</label></td>
+					<td class="width-35">
+						<form:input path="auditor" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">所属分公司:</label></td>
+					<td class="width-35">
+						<form:input path="branchOffice" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">模板主键:</label></td>
+					<td class="width-35">
+						<form:input path="templateId" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 152 - 0
src/main/webapp/webpage/modules/workieavetemplate/workIeaveTemplateUserList.jsp

@@ -0,0 +1,152 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>离职模板管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		$(document).ready(function() {
+		});
+	</script>
+</head>
+<body class="gray-bg">
+	<div class="wrapper wrapper-content">
+	<div class="ibox">
+	<div class="ibox-title">
+		<h5>离职模板列表 </h5>
+		<div class="ibox-tools">
+			<a class="collapse-link">
+				<i class="fa fa-chevron-up"></i>
+			</a>
+			<a class="dropdown-toggle" data-toggle="dropdown" href="#">
+				<i class="fa fa-wrench"></i>
+			</a>
+			<ul class="dropdown-menu dropdown-user">
+				<li><a href="#">选项1</a>
+				</li>
+				<li><a href="#">选项2</a>
+				</li>
+			</ul>
+			<a class="close-link">
+				<i class="fa fa-times"></i>
+			</a>
+		</div>
+	</div>
+    
+    <div class="ibox-content">
+	<sys:message content="${message}"/>
+	
+	<!--查询条件-->
+	<div class="row">
+	<div class="col-sm-12">
+	<form:form id="searchForm" modelAttribute="workIeaveTemplateUser" action="${ctx}/workieavetemplate/workIeaveTemplateUser/" method="post" class="form-inline">
+		<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+		<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+		<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+		<div class="form-group">
+			<span>所属部门:</span>
+				<form:input path="office_id" htmlEscape="false" maxlength="64"  class=" form-control input-sm"/>
+			<span>所属公司:</span>
+				<form:input path="companyId" htmlEscape="false" maxlength="64"  class=" form-control input-sm"/>
+			<span>审核人:</span>
+				<form:input path="auditor" htmlEscape="false" maxlength="64"  class=" form-control input-sm"/>
+			<span>所属分公司:</span>
+				<form:input path="branchOffice" htmlEscape="false" maxlength="64"  class=" form-control input-sm"/>
+			<span>模板主键:</span>
+				<form:input path="templateId" htmlEscape="false" maxlength="64"  class=" form-control input-sm"/>
+		 </div>	
+	</form:form>
+	<br/>
+	</div>
+	</div>
+	
+	<!-- 工具栏 -->
+	<div class="row">
+	<div class="col-sm-12">
+		<div class="pull-left">
+			<shiro:hasPermission name="workieavetemplate:workIeaveTemplateUser:add">
+				<table:addRow url="${ctx}/workieavetemplate/workIeaveTemplateUser/form" title="离职模板"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workieavetemplate:workIeaveTemplateUser:edit">
+			    <table:editRow url="${ctx}/workieavetemplate/workIeaveTemplateUser/form" title="离职模板" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workieavetemplate:workIeaveTemplateUser:del">
+				<table:delRow url="${ctx}/workieavetemplate/workIeaveTemplateUser/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workieavetemplate:workIeaveTemplateUser:import">
+				<table:importExcel url="${ctx}/workieavetemplate/workIeaveTemplateUser/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workieavetemplate:workIeaveTemplateUser:export">
+	       		<table:exportExcel url="${ctx}/workieavetemplate/workIeaveTemplateUser/export"></table:exportExcel><!-- 导出按钮 -->
+	       	</shiro:hasPermission>
+	       <button class="btn btn-white btn-sm " data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i> 刷新</button>
+		
+			</div>
+		<div class="pull-right">
+			<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="search()" ><i class="fa fa-search"></i> 查询</button>
+			<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="reset()" ><i class="fa fa-refresh"></i> 重置</button>
+		</div>
+	</div>
+	</div>
+	
+	<!-- 表格 -->
+	<table id="contentTable" class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+		<thead>
+			<tr>
+				<th> <input type="checkbox" class="i-checks"></th>
+				<th  class="sort-column remarks">备注信息</th>
+				<th  class="sort-column office_id">所属部门</th>
+				<th  class="sort-column companyId">所属公司</th>
+				<th  class="sort-column auditor">审核人</th>
+				<th  class="sort-column branchOffice">所属分公司</th>
+				<th  class="sort-column templateId">模板主键</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="workIeaveTemplateUser">
+			<tr>
+				<td> <input type="checkbox" id="${workIeaveTemplateUser.id}" class="i-checks"></td>
+				<td><a  href="#" onclick="openDialogView('查看离职模板', '${ctx}/workieavetemplate/workIeaveTemplateUser/form?id=${workIeaveTemplateUser.id}','800px', '500px')">
+					${workIeaveTemplateUser.remarks}
+				</a></td>
+				<td>
+					${workIeaveTemplateUser.office_id}
+				</td>
+				<td>
+					${workIeaveTemplateUser.companyId}
+				</td>
+				<td>
+					${workIeaveTemplateUser.auditor}
+				</td>
+				<td>
+					${workIeaveTemplateUser.branchOffice}
+				</td>
+				<td>
+					${workIeaveTemplateUser.templateId}
+				</td>
+				<td>
+					<shiro:hasPermission name="workieavetemplate:workIeaveTemplateUser:view">
+						<a href="#" onclick="openDialogView('查看离职模板', '${ctx}/workieavetemplate/workIeaveTemplateUser/form?id=${workIeaveTemplateUser.id}','800px', '500px')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="workieavetemplate:workIeaveTemplateUser:edit">
+    					<a href="#" onclick="openDialog('修改离职模板', '${ctx}/workieavetemplate/workIeaveTemplateUser/form?id=${workIeaveTemplateUser.id}','800px', '500px')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="workieavetemplate:workIeaveTemplateUser:del">
+						<a href="${ctx}/workieavetemplate/workIeaveTemplateUser/delete?id=${workIeaveTemplateUser.id}" onclick="return confirmx('确认要删除该离职模板吗?', this.href)"   class="btn btn-danger btn-xs"><i class="fa fa-trash"></i> 删除</a>
+					</shiro:hasPermission>
+				</td>
+			</tr>
+		</c:forEach>
+		</tbody>
+	</table>
+	
+		<!-- 分页代码 -->
+	<table:page page="${page}"></table:page>
+	<br/>
+	<br/>
+	</div>
+	</div>
+</div>
+</body>
+</html>

+ 132 - 0
src/main/webapp/webpage/modules/workieavetemplate/workIeaveTemplateView.jsp

@@ -0,0 +1,132 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>调整职级管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        var count = 0;
+        $(document).ready(function() {
+            if($("#createDate").val()==null || $("#createDate").val()==''){
+                $("#createDate").val(getNowFormatDate());
+            }
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                rules:{
+                },
+                messages:{
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+
+
+
+        });
+
+        function getNowFormatDate() {
+            var date = new Date();
+            var seperator1 = "-";
+            var seperator2 = ":";
+            var month = date.getMonth() + 1;
+            var strDate = date.getDate();
+            month = (month < 10)?"0"+month:month;
+            strDate = (strDate < 10)?"0"+strDate:strDate;
+            var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate;
+            return currentdate;
+        }
+
+
+	</script>
+	<style>
+		/*超过5个汉字,调整label的长度,以下是配套的*/
+		.layui-item .layui-form-label{
+			width:90px;
+		}
+		.form-group .layui-item .layui-input-block,
+		.query .layui-input-block {
+			margin-left: 116px;
+		}
+	</style>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<form:form id="inputForm" modelAttribute="workIeaveTemplate" action="${ctx}/workieavetemplate/workIeaveTemplate/save" method="post" class="form-horizontal" >
+			<form:hidden path="id"/>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">公司名称:</label>
+					<div class="layui-input-block with-icon">
+						<form:input path="branchOfficeName" htmlEscape="false"  readonly="true"  class="form-control  layui-input required"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>创建日期:</label>
+					<div class="layui-input-block">
+						<input id="createDate" name="createDate" type="text"  maxlength="20" class="laydate-icondate form-control layer-date  layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workIeaveTemplate.createDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>模板详情</h2></div>
+
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px">审核部门</th>
+							<th width="200px">审核人</th>
+							<th width="150px">审核项目</th>
+						</tr>
+						</thead>
+						<tbody id="workIeaveTemplateUserList">
+						<c:if test="${not empty workIeaveTemplate.workIeaveTemplateUserList}">
+							<c:forEach items="${workIeaveTemplate.workIeaveTemplateUserList}" var="workIeaveTemplateUser" varStatus="index">
+								<tr id="workIeaveTemplateUserList${index.index}">
+									<td class="hide">
+										<input id="workIeaveTemplateUserList${index.index}_id" name="workIeaveTemplateUserList[${index.index}].id" type="hidden" value="${workIeaveTemplateUser.id}"/>
+										<input id="workIeaveTemplateUserList${index.index}_templateId" name="workIeaveTemplateUserList[${index.index}].templateId" type="hidden" value="${workIeaveTemplateUser.templateId}"/>
+										<input id="workIeaveTemplateUserList${index.index}auditor" name="workIeaveTemplateUserList[${index.index}].auditor" type="hidden" value="${workIeaveTemplateUser.auditor}"/>
+										<input id="workIeaveTemplateUserList${index.index}_delFlag" name="workIeaveTemplateUserList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										<input id="workIeaveTemplateUserList${index.index}_1"  readonly="true"   type="text" value="${workIeaveTemplateUser.officeName}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workIeaveTemplateUserList${index.index}_2"  readonly="true"   type="text" value="${workIeaveTemplateUser.userName}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workIeaveTemplateUserList${index.index}_3"  readonly="true"    type="text" value="${workIeaveTemplateUser.comment}" title="${workIeaveTemplateUser.comment}"  class="form-control "/>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+
+	</div>
+</div>
+</body>
+</html>

+ 304 - 0
src/main/webapp/webpage/modules/workincomingmessage/workIncomingMessageAudit.jsp

@@ -0,0 +1,304 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>收文管理管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj,index1){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 1){
+                  $('#flag').val('yes');
+                  var taskKey = '${workIncomingMessage.act.taskDefKey}';
+                  if('zjl'==taskKey){
+                      var val = $("#handlerId").val();
+                      if(val==null||val==''){
+                          parent.layer.confirm("没有选择处理人,确认继续提交吗?",{icon: 3, title:'系统提示'}, function(index){
+                              //do something
+                              $("#inputForm").submit();
+                              parent.layer.close(index);
+                              setTimeout(function(){parent.layer.close(index1)}, 100);
+                          });
+                          return false;
+                      }
+                  }else if('consume'==taskKey){
+                      var dailyFlag = '${workIncomingMessage.dailyFlag}';
+                      if("false"==dailyFlag){
+                          parent.layer.msg("处理明细存在【未完成】状态,不能提交审批!",{icon:5});
+                          return false;
+                      }
+                  }
+              }else{
+                  $('#flag').val('no');
+              }
+
+              $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+            laydate.render({
+                elem: '#incomeDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+		});
+
+        function insertTitle(tValue){
+            var list = "${workIncomingMessage.workAttachments}";
+            var size = (list.split('url')).length-1;
+            var files = $("#attachment_file")[0].files;            for(var i = 0;i<files.length;i++) {                var file = files[i];
+            var attachmentId = "";
+            var attachmentFlag = "100";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workIncomingMessage/"+timestamp+"/"+file['name'];
+            var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+            var divId = "_attachment";
+            $("#addFile"+divId).show();
+            multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size);}
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+		<form:form id="inputForm" modelAttribute="workIncomingMessage" action="${ctx}/workincomingmessage/workIncomingMessage/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+        <form:hidden path="home"/>
+        <form:hidden path="act.taskId"/>
+        <form:hidden path="act.taskName"/>
+        <form:hidden path="act.taskDefKey"/>
+        <form:hidden path="act.procInsId"/>
+        <form:hidden path="act.procDefId"/>
+        <form:hidden id="flag" path="act.flag"/>
+            <div class="form-group layui-row first">
+                <div class="form-group-label"><h2>基础信息</h2></div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文标题:</label>
+                    <div class="layui-input-block">
+                        <form:input path="title" htmlEscape="false" readonly="true" class="form-control  layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>收文编号:</label>
+                    <div class="layui-input-block">
+                        <div class="input-group">
+                            <form:input path="num" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+                            <span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty workIncomingMessage.state}">${fns:getDictLabel(workIncomingMessage.state, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文字号:</label>
+                    <div class="layui-input-block">
+                        <form:input path="wordSize" htmlEscape="false" readonly="true" class="form-control  layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文日期:</label>
+                    <div class="layui-input-block">
+                        <input type="text" readonly="readonly" class="form-control layui-input"
+                               value="<fmt:formatDate value="${workIncomingMessage.incomeDate}" pattern="yyyy-MM-dd"/>"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文单位:</label>
+                    <div class="layui-input-block">
+                        <form:input path="incomePart" htmlEscape="false" readonly="true" class="form-control  layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>份    数:</label>
+                    <div class="layui-input-block">
+                        <form:input path="counts" htmlEscape="false" readonly="true" class="form-control digits layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">申请人:</label>
+                    <div class="layui-input-block">
+                        <form:input path="createBy.name" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+                        <form:hidden path="createBy.id" htmlEscape="false"    class="form-control required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">所属部门:</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="office.name" readonly="readonly" class="form-control layui-input"  value="${workIncomingMessage.office.topCompany}"/>
+                        <input type="hidden" name="office.id" readonly="readonly" class="form-control layui-input"  value="${workIncomingMessage.office.id}"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12 with-textarea">
+                    <label class="layui-form-label">拟办意见:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="remarks" htmlEscape="false" readonly="true" rows="3" class="form-control"/>
+                    </div>
+                </div>
+                <c:choose>
+                    <c:when test="${workIncomingMessage.act.taskDefKey eq 'zjl'}">
+                        <div class="layui-item layui-col-sm12 with-textarea">
+                            <label class="layui-form-label">领导批示:</label>
+                            <div class="layui-input-block">
+                                <form:textarea path="opinion" htmlEscape="false" rows="3" maxlength="255" class="form-control"/>
+                            </div>
+                        </div>
+                        <div class="layui-item layui-col-sm12">
+                            <label class="layui-form-label">处理人:</label>
+                            <div class="layui-input-block with-icon">
+                                <sys:treeselectt id="handler" name="handler" value="${workIncomingMessage.handler}" labelName="leaderNameStr" labelValue="${workIncomingMessage.leaderNameStr}"
+                                                 title="用户" url="/sys/office/treeData?type=3" checked="true" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
+
+                            </div>
+                        </div>
+                    </c:when>
+                    <c:otherwise>
+                        <div class="layui-item layui-col-sm12 with-textarea">
+                            <label class="layui-form-label">领导批示:</label>
+                            <div class="layui-input-block">
+                                <textarea htmlEscape="false" readonly="true" rows="3"  class="form-control">${workIncomingMessage.opinion}</textarea>
+                            </div>
+                        </div>
+                        <div class="layui-item layui-col-sm12">
+                            <label class="layui-form-label">处理人:</label>
+                            <div class="layui-input-block with-icon">
+                                <input type="text" value="${workIncomingMessage.leaderNameStr}" readonly="readonly"  class="form-control layui-input">
+                            </div>
+                        </div>
+                    </c:otherwise>
+                </c:choose>
+            </div>
+
+            <div class="form-group layui-row lw12">
+                <div class="form-group-label"><h2>处理明细</h2></div>
+                <table id="termsTable" class="table table-bordered table-condensed details">
+                    <thead>
+                    <tr>
+                        <th>姓名</th>
+                        <th>部门</th>
+                        <th>完成状态</th>
+                        <th>完成日期</th>
+                        <th>完成情况说明</th>
+                    </tr>
+                    </thead>
+                    <tbody id="termTableList">
+                    <c:forEach items="${workIncomingMessage.detailList}" var="routineDetail" varStatus="idx">
+                        <tr>
+                            <td style="text-align:center;">
+                                    ${routineDetail.operator.name}
+                            </td>
+                            <td style="text-align:center;">
+                                    ${routineDetail.office.name}
+                            </td>
+                            <td style="text-align:center;">
+                                    ${routineDetail.status}
+                            </td>
+                            <td style="text-align:center;">
+                                <fmt:formatDate value="${routineDetail.updateDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                            </td>
+                            <td style="text-align:center;" title="${routineDetail.remarks}">
+                                    ${routineDetail.remarks}
+                            </td>
+                        </tr>
+                    </c:forEach>
+                    </tbody>
+                </table>
+            </div>
+
+
+            <div class="form-group layui-row">
+            <div class="form-group-label"><h2>附件信息</h2></div>
+            <div class="layui-item layui-col-xs12 form-table-container" >
+                <table id="listAttachment" class="table table-bordered table-condensed no-bottom-margin details">
+                        <thead>
+                        <tr>
+                                <%-- <th>序号</th>--%>
+                            <th>文件预览</th>
+                            <th>上传人</th>
+                            <th>上传时间</th>
+                            <th width="150px">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="file_attachment">
+                        <c:forEach items="${workIncomingMessage.workAttachments}" var = "workClientAttachment" varStatus="status">
+                            <tr>
+                                    <%-- <td>${status.index + 1}</td>--%>
+                                <c:choose>
+                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                        <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+                                    </c:when>
+                                    <c:otherwise>
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                <td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+                                            </c:when>
+                                            <c:otherwise>
+                                                <td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%')">${workClientAttachment.attachmentName}</a></td>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:otherwise>
+                                </c:choose>
+                                <td>${workClientAttachment.createBy.name}</td>
+                                <td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+                                <td class="op-td">
+                                    <div class="op-btn-box" >
+                                        <a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                    </div>
+                                </td>
+                            </tr>
+                        </c:forEach>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>审批意见</h2></div>
+                <div class="layui-item layui-col-xs12 with-textarea" >
+                    <label class="layui-form-label">审批意见:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="act.comment" class="form-control" rows="4" maxlength="127" />
+                        <input type="file" name="upload_files" style="display: none;">
+                    </div>
+                </div>
+            </div>
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>审批流程</h2></div>
+                <div class="layui-item layui-col-xs12 form-table-container" >
+                    <act:flowChart procInsId="${workIncomingMessage.act.procInsId}"/>
+                    <act:histoicFlow procInsId="${workIncomingMessage.act.procInsId}"/>
+                </div>
+            </div>
+
+            <div class="form-group layui-row page-end"></div>
+	</form:form>
+    </div>
+</div>
+</body>
+</html>

+ 217 - 0
src/main/webapp/webpage/modules/workincomingmessage/workIncomingMessageForm.jsp

@@ -0,0 +1,217 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>收文管理管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(i){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(i==2){
+                  $("#inputForm").attr("action","${ctx}/workincomingmessage/workIncomingMessage/tstore");
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+            laydate.render({
+                elem: '#incomeDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+		});
+
+        function insertTitle(tValue){
+            var list = "${workIncomingMessage.workAttachments}";
+            var size = (list.split('url')).length-1;
+            var files = $("#attachment_file")[0].files;            for(var i = 0;i<files.length;i++) {                var file = files[i];
+            var attachmentId = "";
+            var attachmentFlag = "100";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workIncomingMessage/"+timestamp+"/"+file['name'];
+            var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+            var divId = "_attachment";
+            $("#addFile"+divId).show();
+            multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size);}
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+		<form:form id="inputForm" modelAttribute="workIncomingMessage" action="${ctx}/workincomingmessage/workIncomingMessage/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+            <div class="form-group layui-row first">
+                <div class="form-group-label"><h2>基本信息</h2></div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文标题:</label>
+                    <div class="layui-input-block">
+                        <form:input path="title" htmlEscape="false"    class="form-control  layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>收文编号:</label>
+                    <div class="layui-input-block">
+                        <div class="input-group">
+                            <form:input path="num" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+                            <span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty workIncomingMessage.state}">${fns:getDictLabel(workIncomingMessage.state, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文字号:</label>
+                    <div class="layui-input-block">
+                        <form:input path="wordSize" htmlEscape="false"    class="form-control  layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文日期:</label>
+                    <div class="layui-input-block">
+                        <input id="incomeDate" name="incomeDate" type="text" maxlength="20" class="laydate-icondate form-control layui-input layer-date laydate-icon required"
+                               value="<fmt:formatDate value="${workIncomingMessage.incomeDate}" pattern="yyyy-MM-dd"/>"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文单位:</label>
+                    <div class="layui-input-block">
+                        <form:input path="incomePart" htmlEscape="false"    class="form-control  layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>份    数:</label>
+                    <div class="layui-input-block">
+                        <form:input path="counts" htmlEscape="false"    class="form-control digits layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>申请人:</label>
+                    <div class="layui-input-block">
+                        <form:input path="createBy.name" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+                        <form:hidden path="createBy.id" htmlEscape="false"    class="form-control required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">所属部门:</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="office.name" readonly="readonly" class="form-control layui-input"  value="${workIncomingMessage.office.topCompany}"/>
+                        <input type="hidden" name="office.id" readonly="readonly" class="form-control layui-input"  value="${workIncomingMessage.office.id}"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12 with-textarea">
+                    <label class="layui-form-label">拟办意见:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="remarks" htmlEscape="false" rows="3" maxlength="255" class="form-control"/>
+                    </div>
+                </div>
+                <%--<div class="layui-item layui-col-sm12 with-textarea">
+                    <label class="layui-form-label">领导批示:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="opinion" htmlEscape="false" rows="3" class="form-control"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12">
+                    <label class="layui-form-label">处理人:</label>
+                    <div class="layui-input-block with-icon">
+                        <sys:treeselectt id="handler" name="handler" value="${workIncomingMessage.handler}" labelName="leaderNameStr" labelValue="${workIncomingMessage.leaderNameStr}"
+                                         title="用户" url="/sys/office/treeDataAll?type=3" checked="true" cssClass="form-control required layui-input" allowClear="true" notAllowSelectParent="true"/>
+
+                    </div>
+                </div>--%>
+            </div>
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>附件信息</h2></div>
+                <div class="layui-item nav-btns">
+                    <a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
+                </div>
+                <div id="addFile_attachment" style="display: none" class="upload-progress">
+                    <span id="fileName_attachment" ></span>
+                    <b><span id="baifenbi_attachment" ></span></b>
+                    <div class="progress">
+                        <div id="jindutiao_attachment" class="progress-bar" style="width: 0%" aria-valuenow="0">
+                        </div>
+                    </div>
+                </div>
+                <input id="attachment_file" type="file" name="attachment_file" multiple="multiple" style="display: none;" onChange="if(this.value)insertTitle(this.value);"/>
+                <span id="attachment_title"></span>
+                <div class="layui-item layui-col-xs12" style="padding:0 16px;">
+                    <table id="upTable" class="table table-bordered table-condensed details">
+                        <thead>
+                        <tr>
+                                <%-- <th>序号</th>--%>
+                            <th>文件预览</th>
+                            <th>上传人</th>
+                            <th>上传时间</th>
+                            <th width="150px">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="file_attachment">
+                        <c:forEach items="${workIncomingMessage.workAttachments}" var = "workClientAttachment" varStatus="status">
+                            <tr>
+                                    <%-- <td>${status.index + 1}</td>--%>
+                                <c:choose>
+                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                        <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+                                    </c:when>
+                                    <c:otherwise>
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                <td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+                                            </c:when>
+                                            <c:otherwise>
+                                                <td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%')">${workClientAttachment.attachmentName}</a></td>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:otherwise>
+                                </c:choose>
+                                <td>${workClientAttachment.createBy.name}</td>
+                                <td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+                                <td class="op-td">
+                                    <div class="op-btn-box" >
+                                        <a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+
+                                        <c:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">
+                                            <a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>
+                                        </c:if>
+                                    </div>
+                                </td>
+                            </tr>
+                        </c:forEach>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+	</form:form>
+    </div>
+</div>
+</body>
+</html>

+ 370 - 0
src/main/webapp/webpage/modules/workincomingmessage/workIncomingMessageList.jsp

@@ -0,0 +1,370 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>收文管理管理</title>
+    <meta name="decorator" content="default"/>
+    <style>
+        .widthClass{
+            display: inline-block;
+        }
+        .shows .input-group{
+            width: 48%!important;
+        }
+    </style>
+    <style>
+        body{
+            background-color:transparent;
+            filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+            color:#ffffff;
+            background-color:rgba(255,255,255,0);
+            height:100%;
+        }
+    </style>
+    <script type="text/javascript">
+        $(document).ready(function() {
+            $("#cus_name").show();
+            $("#cus_name").siblings().hide();
+            //搜索框收放
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow1);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow1);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#beginIncomeDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#endIncomeDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+        });
+
+        function openDialog(title,url,width,height,target) {
+
+            if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+                width = 'auto';
+                height = 'auto';
+            } else {//如果是PC端,根据用户设置的width和height显示。
+
+            }
+
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url,
+                skin: 'three-btns',
+                btn: ['送审', '暂存', '关闭'],
+                /*yes: function (index, layero) {
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if (target) {
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    } else {
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target", top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+
+                    if (iframeWin.contentWindow.doSubmit()) {
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function () {
+                            top.layer.close(index)
+                        }, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+
+                },*/
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }else {
+                        return false;
+                    }
+                },
+                btn3: function (index) {
+                }
+            });
+        }
+        function openDialogre(title,url,width,height,target,buttons) {
+
+            if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+                width = 'auto';
+                height = 'auto';
+            } else {//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            var split = buttons.split(",");
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                skin: 'three-btns',
+                content: url,
+                btn: split,
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    if(split.length==2){return}
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }else {
+                        return false;
+                    }
+                },
+                btn3: function (index) {
+                }
+            });
+        }
+    </script>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+    <sys:message content="${message}"/>
+    <div class="layui-row">
+        <div class="full-width fl">
+            <div class="contentShadow layui-row" id="queryDiv">
+	            <form:form id="searchForm" modelAttribute="workIncomingMessage" action="${ctx}/workincomingmessage/workIncomingMessage/" method="post" class="form-inline">
+                    <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+                    <input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+                    <table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+                    <div class="commonQuery">
+                        <div class="layui-item query athird">
+                            <label class="layui-form-label">来文标题:</label>
+                            <div class="layui-input-block">
+                                <form:input path="title" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+                            </div>
+                        </div>
+                        <div class="layui-item query athird">
+                            <label class="layui-form-label">收文编号:</label>
+                            <div class="layui-input-block">
+                                <form:input path="num" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+                            </div>
+                        </div>
+                        <div class="layui-item athird">
+                            <div class="input-group">
+                                <a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+                                <button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
+                                <button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+                            </div>
+                        </div>
+                        <div style="    clear:both;"></div>
+                    </div>
+                    <div id="moresees" style="clear:both;display:none;">
+                        <div class="layui-item query athird">
+                            <label class="layui-form-label">来文日期:</label>
+                            <div class="layui-input-block">
+                                <input id="beginIncomeDate" name="beginIncomeDate" type="text" placeholder="开始时间" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+                                       value="<fmt:formatDate value="${workIncomingMessage.beginIncomeDate}" pattern="yyyy-MM-dd"/>"/>
+                                </input>
+                                <span class="group-sep">-</span>
+                                <input id="endIncomeDate" name="endIncomeDate" type="text" placeholder="结束时间" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+                                       value="<fmt:formatDate value="${workIncomingMessage.endIncomeDate}" pattern="yyyy-MM-dd"/>"/>
+                                </input>
+                            </div>
+                        </div>
+                        <div class="layui-item query athird">
+                            <label class="layui-form-label">来文字号:</label>
+                            <div class="layui-input-block">
+                                <form:input path="wordSize" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+                            </div>
+                        </div>
+                        <div class="layui-item query athird">
+                            <label class="layui-form-label">来文单位:</label>
+                            <div class="layui-input-block">
+                                <form:input path="incomePart" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+                            </div>
+                        </div>
+                        <div class="layui-item query athird">
+                            <label class="layui-form-label">处理人:</label>
+                            <div class="layui-input-block with-icon">
+                                <sys:treeselect id="handler" name="handler" value="${workIncomingMessage.handler}" labelName="handlerName" labelValue="${workIncomingMessage.handlerName}"
+                                                title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
+                            </div>
+                        </div>
+                        <div class="layui-item query athird">
+                            <label class="layui-form-label">申请状态:</label>
+                            <div class="layui-input-block">
+                                <form:select path="state" class="form-control simple-select">
+                                    <form:option value="" label=""/>
+                                    <form:options items="${fns:getDictList('audit_state')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                                </form:select>
+                            </div>
+                        </div>
+                    </div>
+                </form:form>
+	        </div>
+	    </div>
+	
+	<!-- 工具栏 -->
+        <div class="full-width fl">
+            <div class="contentShadow layui-form contentDetails">
+                <div class="nav-btns">
+                    <shiro:hasPermission name="workincomingmessage:workIncomingMessage:add">
+                        <table:addRow url="${ctx}/workincomingmessage/workIncomingMessage/form" title="收文管理"></table:addRow><!-- 增加按钮 -->
+                    </shiro:hasPermission>
+                    <button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i>&nbsp;刷新</button>
+                    <div style="clear: both;"></div>
+			    </div>
+                <table class="oa-table layui-table" id="contentTable"></table>
+
+                <!-- 分页代码 -->
+                <table:page page="${page}"></table:page>
+                <div style="clear: both;"></div>
+	        </div>
+	    </div>
+    </div>
+    <div id="changewidth"></div>
+</div>
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script>
+    layui.use('table', function(){
+        layui.table.render({
+            limit:${ page.pageSize }
+            ,elem: '#contentTable'
+            ,page: false
+            ,cols: [[
+                {field:'index',align:'center', title: '序号',width:40}
+                ,{field:'num',align:'center', title: '收文编号',minWidth:200,templet:function(d){
+                        var xml = "<a class=\"attention-info\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看收文管理', '${ctx}/workincomingmessage/workIncomingMessage/view?id="+d.id+"','95%','95%')\">" +
+                            "<span title=" + d.num + ">" + d.num + "</span></a>";
+                        return xml;
+                    }}
+                ,{field:'wordSize',align:'center', title: '来文字号',width:100}
+                ,{field:'title',align:'center', title: '来文标题',minWidth:120}
+                ,{field:'incomePart',align:'center', title: '来文单位', minWidth:120}
+                ,{field:'incomeDate', align:'center',title: '来文日期',width:100}
+                ,{field:'leaderNameStr', align:'center',title: '处理人',minWidth:100}
+                ,{align:'center', title: '申请状态',  width:70,templet:function(d){
+                        var st = getAuditState(d.state)
+                        var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workincomingmessage/workIncomingMessage/getProcess?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        return xml;
+                    }}
+                ,{align:'center',title:"操作",width:130,templet:function(d){
+                        ////对操作进行初始化
+                        var xml = "";
+
+                        if(d.canedit != undefined && d.canedit == "1"){
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialog('修改收文管理', '${ctx}/workincomingmessage/workIncomingMessage/form?id=" + d.id+"','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i>修改</a>"
+                        }
+                        if(d.canmodify != undefined && d.canmodify =="1"){
+                            xml+="<a href=\"#\" onclick=\"openDialogre('修改收文管理', '${ctx}/workincomingmessage/workIncomingMessage/modify?id=" + d.id + "','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.canrecall != undefined && d.canrecall =="1"){
+                            xml+="<a href=\"#\" onclick=\"openDialogre('修改收文管理', '${ctx}/workincomingmessage/workIncomingMessage/form?id=" + d.id + "','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.candelete != undefined && d.candelete == "1"){
+                            xml +="<a href=\"${ctx}/workincomingmessage/workIncomingMessage/delete?id=" + d.id+"\" onclick=\"return confirmx('确认要删除该收文管理吗?', this.href)\"   class=\"op-btn op-btn-delete\"><i class=\"fa fa-trash\"></i> 删除</a>";
+                        }
+                        if(d.cancancel != undefined && d.cancancel =="1"){
+                            xml+="<a href=\"${ctx}/workincomingmessage/workIncomingMessage/revoke?id=" + d.id + "&processInstanceId=" + d.procId + "\" onclick=\"return confirmx('确认要撤回该收文管理审批吗?', this.href)\" class=\"op-btn op-btn-cancel\" ><i class=\"glyphicon glyphicon-share-alt\"></i> 撤回</a>";
+                        }
+
+                        return xml;
+                    }}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="workIncomingMessage" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${workIncomingMessage.id}"
+                    ,"num":"<c:out value="${workIncomingMessage.num}" escapeXml="true"/>"
+                    ,'wordSize':"<c:out value="${workIncomingMessage.wordSize}" escapeXml="true"/>"
+                    ,'title':"<c:out value="${workIncomingMessage.title}" escapeXml="true"/>"
+                    ,'incomePart':"<c:out value="${workIncomingMessage.incomePart}" escapeXml="true"/>"
+                    ,'leaderNameStr':"${workIncomingMessage.leaderNameStr}"
+                    ,"incomeDate":"<fmt:formatDate value="${workIncomingMessage.incomeDate}" pattern="yyyy-MM-dd"/>"
+                    ,"state":"${workIncomingMessage.state}"
+                    ,"procId":"${workIncomingMessage.processInstanceId}"
+                    <c:if test="${flag == '1' or fns:getUser().id == workIncomingMessage.createBy.id}">
+                    <shiro:hasPermission name="workincomingmessage:workIncomingMessage:edit">,"canedit":<c:choose><c:when test="${workIncomingMessage.state == 1}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    ,"canmodify":<c:choose><c:when test="${workIncomingMessage.state == 4}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    ,"canrecall":<c:choose><c:when test="${workIncomingMessage.state == 3}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    </shiro:hasPermission>
+                    <shiro:hasPermission name="workincomingmessage:workIncomingMessage:del">,"candelete":<c:choose><c:when test="${workIncomingMessage.state == 1 or workIncomingMessage.state == 3 or workIncomingMessage.state == 4}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose></shiro:hasPermission>
+                    ,"cancancel":<c:choose><c:when test="${workIncomingMessage.state == 2 and (workIncomingMessage.dailyId ==null or workIncomingMessage.dailyId =='')}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    </c:if>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+        });
+
+    })
+
+    resizeListTable(130);/*消除由于有竖向滚动条造成table出现横向滚动条*/
+    $("a").on("click",addLinkVisied);
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+</body>
+</html>

+ 219 - 0
src/main/webapp/webpage/modules/workincomingmessage/workIncomingMessageModifyApply.jsp

@@ -0,0 +1,219 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>收文管理管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+            laydate.render({
+                elem: '#incomeDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+		});
+
+        function insertTitle(tValue){
+            var list = "${workIncomingMessage.workAttachments}";
+            var size = (list.split('url')).length-1;
+            var files = $("#attachment_file")[0].files;            for(var i = 0;i<files.length;i++) {                var file = files[i];
+            var attachmentId = "";
+            var attachmentFlag = "100";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workIncomingMessage/"+timestamp+"/"+file['name'];
+            var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+            var divId = "_attachment";
+            $("#addFile"+divId).show();
+            multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size);}
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+		<form:form id="inputForm" modelAttribute="workIncomingMessage" action="${ctx}/workincomingmessage/workIncomingMessage/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+        <form:hidden path="home"/>
+        <form:hidden path="act.taskId"/>
+        <form:hidden path="act.taskName"/>
+        <form:hidden path="act.taskDefKey"/>
+        <form:hidden path="act.procInsId"/>
+        <form:hidden path="act.procDefId"/>
+        <form:hidden id="flag" path="act.flag"/>
+            <div class="form-group layui-row first">
+                <div class="form-group-label"><h2>基础信息</h2></div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文标题:</label>
+                    <div class="layui-input-block">
+                        <form:input path="title" htmlEscape="false"    class="form-control  layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>收文编号:</label>
+                    <div class="layui-input-block">
+                        <div class="input-group">
+                            <form:input path="num" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+                            <span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty workIncomingMessage.state}">${fns:getDictLabel(workIncomingMessage.state, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文字号:</label>
+                    <div class="layui-input-block">
+                        <form:input path="wordSize" htmlEscape="false"    class="form-control  layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文日期:</label>
+                    <div class="layui-input-block">
+                        <input id="incomeDate" name="incomeDate" type="text" maxlength="20" class="laydate-icondate form-control layui-input layer-date laydate-icon required"
+                               value="<fmt:formatDate value="${workIncomingMessage.incomeDate}" pattern="yyyy-MM-dd"/>"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文单位:</label>
+                    <div class="layui-input-block">
+                        <form:input path="incomePart" htmlEscape="false"    class="form-control  layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>份    数:</label>
+                    <div class="layui-input-block">
+                        <form:input path="counts" htmlEscape="false"    class="form-control digits layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>申请人:</label>
+                    <div class="layui-input-block">
+                        <form:input path="createBy.name" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+                        <form:hidden path="createBy.id" htmlEscape="false"    class="form-control required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">所属部门:</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="office.name" readonly="readonly" class="form-control layui-input"  value="${workIncomingMessage.office.topCompany}"/>
+                        <input type="hidden" name="office.id" readonly="readonly" class="form-control layui-input"  value="${workIncomingMessage.office.id}"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12 with-textarea">
+                    <label class="layui-form-label">拟办意见:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="remarks" htmlEscape="false" maxlength="255" rows="3" class="form-control"/>
+                    </div>
+                </div>
+                <%--<div class="layui-item layui-col-sm12 with-textarea">
+                    <label class="layui-form-label">领导批示:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="opinion" htmlEscape="false" readonly="true" rows="3" class="form-control"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12">
+                    <label class="layui-form-label">处理人:</label>
+                    <div class="layui-input-block with-icon">
+                        <input type="text" value="${workIncomingMessage.leaderNameStr}" readonly="readonly"  class="form-control layui-input">
+                    </div>
+                </div>--%>
+            </div>
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>报销附件信息</h2></div>
+                <div class="layui-item nav-btns">
+                    <a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
+                </div>
+                <div id="addFile_attachment" style="display: none" class="upload-progress">
+                    <span id="fileName_attachment" ></span>
+                    <b><span id="baifenbi_attachment" ></span></b>
+                    <div class="progress">
+                        <div id="jindutiao_attachment" class="progress-bar" style="width: 0%" aria-valuenow="0">
+                        </div>
+                    </div>
+                </div>
+                <input id="attachment_file" type="file" name="attachment_file" multiple="multiple" style="display: none;" onChange="if(this.value)insertTitle(this.value);"/>
+                <span id="attachment_title"></span>
+                <div class="layui-item layui-col-xs12" style="padding:0 16px;">
+                    <table id="upTable" class="table table-bordered table-condensed details">
+                        <thead>
+                        <tr>
+                                <%-- <th>序号</th>--%>
+                            <th>文件预览</th>
+                            <th>上传人</th>
+                            <th>上传时间</th>
+                            <th width="150px">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="file_attachment">
+                        <c:forEach items="${workIncomingMessage.workAttachments}" var = "workClientAttachment" varStatus="status">
+                            <tr>
+                                    <%-- <td>${status.index + 1}</td>--%>
+                                <c:choose>
+                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                        <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+                                    </c:when>
+                                    <c:otherwise>
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                <td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+                                            </c:when>
+                                            <c:otherwise>
+                                                <td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%')">${workClientAttachment.attachmentName}</a></td>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:otherwise>
+                                </c:choose>
+                                <td>${workClientAttachment.createBy.name}</td>
+                                <td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+                                <td class="op-td">
+                                    <div class="op-btn-box" >
+                                        <a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+
+                                        <c:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">
+                                            <a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>
+                                        </c:if>
+                                    </div>
+                                </td>
+                            </tr>
+                        </c:forEach>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+	</form:form>
+    </div>
+</div>
+</body>
+</html>

+ 15 - 0
src/main/webapp/webpage/modules/workincomingmessage/workIncomingMessageTask.jsp

@@ -0,0 +1,15 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>流程追踪</title>
+	<meta name="decorator" content="default"/>
+</head>
+<body class="gray-bg">
+<div class="container form layui-form">
+	<act:flowChart procInsId="${processInstanceId}"/>
+	<act:histoicFlow procInsId="${processInstanceId}"/>
+</div>
+</body>
+</html>
+

+ 180 - 0
src/main/webapp/webpage/modules/workincomingmessage/workIncomingMessageView.jsp

@@ -0,0 +1,180 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>收文管理管理</title>
+	<meta name="decorator" content="default"/>
+</head>
+<body>
+<div class="single-form">
+    <div class="container view-form">
+		<form:form id="inputForm" modelAttribute="workIncomingMessage" action="${ctx}/workincomingmessage/workIncomingMessage/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+            <div class="form-group layui-row first">
+                <div class="form-group-label"><h2>基础信息</h2></div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文标题:</label>
+                    <div class="layui-input-block">
+                        <form:input path="title" htmlEscape="false" readonly="true" class="form-control  layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>收文编号:</label>
+                    <div class="layui-input-block">
+                        <div class="input-group">
+                            <form:input path="num" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+                            <span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty workIncomingMessage.state}">${fns:getDictLabel(workIncomingMessage.state, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文字号:</label>
+                    <div class="layui-input-block">
+                        <form:input path="wordSize" htmlEscape="false" readonly="true" class="form-control  layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文日期:</label>
+                    <div class="layui-input-block">
+                        <input type="text" readonly="readonly" class="form-control layui-input"
+                               value="<fmt:formatDate value="${workIncomingMessage.incomeDate}" pattern="yyyy-MM-dd"/>"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>来文单位:</label>
+                    <div class="layui-input-block">
+                        <form:input path="incomePart" htmlEscape="false" readonly="true" class="form-control  layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>份    数:</label>
+                    <div class="layui-input-block">
+                        <form:input path="counts" htmlEscape="false" readonly="true" class="form-control digits layui-input required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>申请人:</label>
+                    <div class="layui-input-block">
+                        <form:input path="createBy.name" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+                        <form:hidden path="createBy.id" htmlEscape="false"    class="form-control required"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">所属部门:</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="office.name" readonly="readonly" class="form-control layui-input"  value="${workIncomingMessage.office.topCompany}"/>
+                        <input type="hidden" name="office.id" readonly="readonly" class="form-control layui-input"  value="${workIncomingMessage.office.id}"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12 with-textarea">
+                    <label class="layui-form-label">拟办意见:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="remarks" htmlEscape="false" readonly="true" rows="3" class="form-control"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12 with-textarea">
+                    <label class="layui-form-label">领导批示:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="opinion" htmlEscape="false" readonly="true" rows="3" class="form-control"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12">
+                    <label class="layui-form-label">处理人:</label>
+                    <div class="layui-input-block with-icon">
+                        <input type="text" value="${workIncomingMessage.leaderNameStr}" readonly="readonly"  class="form-control layui-input">
+                    </div>
+                </div>
+            </div>
+
+            <div class="form-group layui-row lw12">
+                <div class="form-group-label"><h2>处理明细</h2></div>
+                <table id="termsTable" class="table table-bordered table-condensed details">
+                    <thead>
+                    <tr>
+                        <th>姓名</th>
+                        <th>部门</th>
+                        <th>完成状态</th>
+                        <th>完成日期</th>
+                        <th>完成情况说明</th>
+                    </tr>
+                    </thead>
+                    <tbody id="termTableList">
+                    <c:forEach items="${workIncomingMessage.detailList}" var="routineDetail" varStatus="idx">
+                        <tr>
+                            <td style="text-align:center;">
+                                    ${routineDetail.operator.name}
+                            </td>
+                            <td style="text-align:center;">
+                                    ${routineDetail.office.name}
+                            </td>
+                            <td style="text-align:center;">
+                                    ${routineDetail.status}
+                            </td>
+                            <td style="text-align:center;">
+                                <fmt:formatDate value="${routineDetail.updateDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                            </td>
+                            <td style="text-align:center;" title="${routineDetail.remarks}">
+                                    ${routineDetail.remarks}
+                            </td>
+                        </tr>
+                    </c:forEach>
+                    </tbody>
+                </table>
+            </div>
+
+            <div class="form-group layui-row">
+            <div class="form-group-label"><h2>附件信息</h2></div>
+            <div class="layui-item layui-col-xs12 form-table-container" >
+                <table id="listAttachment" class="table table-bordered table-condensed no-bottom-margin details">
+                        <thead>
+                        <tr>
+                                <%-- <th>序号</th>--%>
+                            <th>文件预览</th>
+                            <th>上传人</th>
+                            <th>上传时间</th>
+                            <th width="150px">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="file_attachment">
+                        <c:forEach items="${workIncomingMessage.workAttachments}" var = "workClientAttachment" varStatus="status">
+                            <tr>
+                                    <%-- <td>${status.index + 1}</td>--%>
+                                <c:choose>
+                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                        <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+                                    </c:when>
+                                    <c:otherwise>
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                <td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+                                            </c:when>
+                                            <c:otherwise>
+                                                <td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%')">${workClientAttachment.attachmentName}</a></td>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:otherwise>
+                                </c:choose>
+                                <td>${workClientAttachment.createBy.name}</td>
+                                <td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+                                <td class="op-td">
+                                    <div class="op-btn-box" >
+                                        <a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                    </div>
+                                </td>
+                            </tr>
+                        </c:forEach>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+	</form:form>
+    </div>
+</div>
+</body>
+</html>

+ 75 - 0
src/main/webapp/webpage/modules/workinfolist/workInfoListForm.jsp

@@ -0,0 +1,75 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>补充资料清单管理</title>
+	<meta name="decorator" content="default"/>
+	 <link href="${ctxStatic}/summernotenew/summernote.css" rel="stylesheet">
+	 <link href="${ctxStatic}/summernotenew/summernote-bs3.css" rel="stylesheet">
+	<script src="${ctxStatic}/summernotenew/summernote.min.js"></script>
+	<script src="${ctxStatic}/summernotenew/lang/summernote-zh-CN.js"></script>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+			
+				//富文本初始化
+			$('.summernote').summernote({
+                lang: 'zh-CN',
+				height:'300px'
+            });
+            getCurrentDocumentHei();
+		});
+        function getCurrentDocumentHei(){
+            var height = $(document).outerHeight();
+            parent.$("#controltype").attr("height",height +"px")
+		}
+	</script>
+	<style>
+		.note-editor .panel-heading{
+			padding:3px 5px;
+		}
+	</style>
+</head>
+<body>
+<div class="single-form">
+		<form:form id="inputForm" modelAttribute="workInfoList" action="${ctx}/workinfolist/workInfoList/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<sys:message content="${message}"/>
+			<input type="hidden" name="projectId" id="projectId">
+
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label"><span class="require-item">*</span>内容:</label>
+					<div class="layui-input-block">
+						<textarea id="content" name="content"  class="form-control summernote required" placeholder="内容" required>${workInfoList.content}</textarea>
+					</div>
+				</div>
+			</div>
+		</form:form>
+</div>
+</body>
+</html>

+ 37 - 0
src/main/webapp/webpage/modules/workinfolist/workInfoListFormView.jsp

@@ -0,0 +1,37 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp" %>
+<html>
+<head>
+    <title>补充资料清单管理</title>
+    <meta name="decorator" content="default"/>
+    <link href="${ctxStatic}/summernotenew/summernote.css" rel="stylesheet">
+    <link href="${ctxStatic}/summernotenew/summernote-bs3.css" rel="stylesheet">
+    <script src="${ctxStatic}/summernotenew/summernote.min.js"></script>
+    <script src="${ctxStatic}/summernotenew/lang/summernote-zh-CN.js"></script>
+    <script>
+        $(function(){
+            $('.summernote').summernote({
+                lang: 'zh-CN',
+                height:'300px',
+                minHeight:'300px',
+            });
+            $('.summernote').summernote('disable');
+        })
+    </script>
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+        <div class="form-group layui-row first">
+            <div class="form-group-label"><h2>补充资料清单</h2></div>
+            <div class="layui-item layui-col-sm12">
+                <label class="layui-form-label"><span class="require-item">*</span>内容:</label>
+                <div class="layui-input-block">
+                    <textarea id="content" name="workInfoList.content"  class="form-control summernote required" placeholder="内容" required>${projectControlTable.workInfoList.content}</textarea>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+</body>
+</html>

+ 122 - 0
src/main/webapp/webpage/modules/workinfolist/workInfoListList.jsp

@@ -0,0 +1,122 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>补充资料清单管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		$(document).ready(function() {
+		});
+	</script>
+</head>
+<body class="gray-bg">
+	<div class="wrapper wrapper-content">
+	<div class="ibox">
+	<div class="ibox-title">
+		<h5>补充资料清单列表 </h5>
+		<div class="ibox-tools">
+			<a class="collapse-link">
+				<i class="fa fa-chevron-up"></i>
+			</a>
+			<a class="dropdown-toggle" data-toggle="dropdown" href="#">
+				<i class="fa fa-wrench"></i>
+			</a>
+			<ul class="dropdown-menu dropdown-user">
+				<li><a href="#">选项1</a>
+				</li>
+				<li><a href="#">选项2</a>
+				</li>
+			</ul>
+			<a class="close-link">
+				<i class="fa fa-times"></i>
+			</a>
+		</div>
+	</div>
+
+    <div class="ibox-content">
+	<sys:message content="${message}"/>
+
+	<!--查询条件-->
+	<div class="row">
+	<div class="col-sm-12">
+	<form:form id="searchForm" modelAttribute="workInfoList" action="${ctx}/workinfolist/workInfoList/" method="post" class="form-inline">
+		<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+		<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+		<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+		<div class="form-group">
+		 </div>
+	</form:form>
+	<br/>
+	</div>
+	</div>
+
+	<!-- 工具栏 -->
+	<div class="row">
+	<div class="col-sm-12">
+		<div class="pull-left">
+			<shiro:hasPermission name="workinfolist:workInfoList:add">
+				<table:addRow url="${ctx}/workinfolist/workInfoList/form" title="补充资料清单"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workinfolist:workInfoList:edit">
+			    <table:editRow url="${ctx}/workinfolist/workInfoList/form" title="补充资料清单" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workinfolist:workInfoList:del">
+				<table:delRow url="${ctx}/workinfolist/workInfoList/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workinfolist:workInfoList:import">
+				<table:importExcel url="${ctx}/workinfolist/workInfoList/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workinfolist:workInfoList:export">
+	       		<table:exportExcel url="${ctx}/workinfolist/workInfoList/export"></table:exportExcel><!-- 导出按钮 -->
+	       	</shiro:hasPermission>
+	       <button class="btn btn-white btn-sm " data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i> 刷新</button>
+
+			</div>
+		<div class="pull-right">
+			<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="search()" ><i class="fa fa-search"></i> 查询</button>
+			<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="reset()" ><i class="fa fa-refresh"></i> 重置</button>
+		</div>
+	</div>
+	</div>
+
+	<!-- 表格 -->
+	<table id="contentTable" class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+		<thead>
+			<tr>
+				<th  class="sort-column content">内容</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="workInfoList">
+			<tr>
+				<td>
+					<a  href="#" onclick="openDialogView('查看补充资料清单', '${ctx}/workinfolist/workInfoList/form?id=${workInfoList.id}&view=view','800px', '500px')">
+						${fns:unescapeHtml(workInfoList.content)}
+					</a>
+				</td>
+				<td>
+					<shiro:hasPermission name="workinfolist:workInfoList:view">
+						<a href="#" onclick="openDialogView('查看补充资料清单', '${ctx}/workinfolist/workInfoList/form?id=${workInfoList.id}','800px', '500px')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="workinfolist:workInfoList:edit">
+    					<a href="#" onclick="openDialog('修改补充资料清单', '${ctx}/workinfolist/workInfoList/form?id=${workInfoList.id}','800px', '500px')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="workinfolist:workInfoList:del">
+						<a href="${ctx}/workinfolist/workInfoList/delete?id=${workInfoList.id}" onclick="return confirmx('确认要删除该补充资料清单吗?', this.href)"   class="btn btn-danger btn-xs"><i class="fa fa-trash"></i> 删除</a>
+					</shiro:hasPermission>
+				</td>
+			</tr>
+		</c:forEach>
+		</tbody>
+	</table>
+
+		<!-- 分页代码 -->
+	<table:page page="${page}"></table:page>
+	<br/>
+	<br/>
+	</div>
+	</div>
+</div>
+</body>
+</html>

+ 263 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceAudit.jsp

@@ -0,0 +1,263 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票审批</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 1) {
+                  $("#flag").val("yes");
+              }else {
+                  $("#flag").val("no");
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+		  return false;
+		}
+		$(document).ready(function() {
+			$("#name").focus();
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+	<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/workinvoice/workInvoice/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="home"/>
+		<form:hidden path="act.taskId"/>
+		<form:hidden path="act.taskName"/>
+		<form:hidden path="act.taskDefKey"/>
+		<form:hidden path="act.procInsId"/>
+		<form:hidden path="act.procDefId"/>
+		<form:hidden id="flag" path="act.flag"/>
+		<c:set var="status" value="${workInvoice.act.status}" />
+
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>基本信息</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.projectName}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>发票申请编号:</label>
+				<div class="layui-input-block">
+					<div class="input-group">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.number}"/>
+						<span class="input-group-btn">
+							<label class="form-status"><c:choose><c:when test="${ empty workInvoice.invoiceState}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoice.invoiceState, 'audit_state','')}</c:otherwise>	</c:choose></label>
+						</span>
+					</div>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>合同名称:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.workContractInfo.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.projectId}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>委托方:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.workContractInfo.client.name}"/>
+				</div>
+			</div>
+			<%--<div class="layui-item layui-col-sm6">--%>
+				<%--<label class="layui-form-label"><span class="require-item">*</span>所属部门:</label>--%>
+				<%--<div class="layui-input-block">--%>
+					<%--<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.office.name}"/>--%>
+				<%--</div>--%>
+			<%--</div>--%>
+		</div>
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>发票详情</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.client.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">纳税人识别号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.orUnicode}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">地址:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.address}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">电话:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.telephone}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开户银行:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bank}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">银行账号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bankNumber}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>价税合计(元):</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<fmt:formatNumber value="${workInvoice.money}" pattern="#,#00.00"/>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>开票内容要求:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.content}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票人:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value=""/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票时间:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value=""/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm12">
+				<label class="layui-form-label">领票时间:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value=""/>
+				</div>
+			</div>
+                <div class="layui-item layui-col-sm12 with-textarea">
+                    <label class="layui-form-label">审批意见:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="act.comment" class="form-control " rows="5" maxlength="20"/>
+                    </div>
+                </div>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>发票明细</h2></div>
+			<div class="layui-item layui-col-xs12 form-table-container">
+				<table id="contentTable" class="table table-bordered table-condensed details">
+					<thead>
+					<tr>
+						<th><span class="require-item">*</span>发票代码</th>
+						<th><span class="require-item">*</span>发票号</th>
+						<th><span class="require-item">*</span>价税合计</th>
+						<th><span class="require-item">*</span>税率</th>
+						<th><span class="require-item">*</span>金额</th>
+						<th><span class="require-item">*</span>税额</th>
+						<th><span class="require-item">*</span>累计登记金额</th>
+						<th><span class="require-item">*</span>发票状态</th><%--正常--%>
+						<th><span class="require-item">*</span>被退标记</th>
+						<th><span class="require-item">*</span>被退票号</th>
+						<th><span class="require-item">*</span>开票日期</th>
+					</tr>
+					</thead>
+					<tbody id="workAccountList">
+					<c:if test="${not empty workInvoice.workAccountList}">
+						<c:forEach items="${workInvoice.workAccountList}" var="workAccount" varStatus="index">
+							<tr id="workAccountList${index.index}">
+								<td title="${workAccount.code}">
+										${workAccount.code}
+								</td>
+								<td title="${workAccount.number}">
+										${workAccount.number}
+								</td>
+
+								<td title="<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>
+								</td>
+								<td title="${workAccount.tax}">
+										${workAccount.tax}
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>
+								</td>
+								<td title="${workAccount.state}">
+										${workAccount.state}
+								</td>
+								<td title="${workAccount.backSign}">
+										${workAccount.backSign}
+								</td>
+								<td title="${workAccount.backNumber}">
+										${workAccount.backNumber}
+								</td>
+								<td>
+										<%--<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd HH:mm:ss"/>--%>
+								</td>
+							</tr>
+						</c:forEach>
+					</c:if>
+					</tbody>
+				</table>
+			</div>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>审批流程</h2></div>
+			<div class="layui-item layui-col-xs12 form-table-container" >
+				<act:flowChart procInsId="${workInvoice.act.procInsId}"/>
+				<act:histoicFlow procInsId="${workInvoice.act.procInsId}" />
+			</div>
+		</div>
+
+		<div class="form-group layui-row page-end"></div>
+	</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 638 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceAuditEnd.jsp

@@ -0,0 +1,638 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票审批</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+        var count = 0;
+        var numcount=0;//验证导入发票号是否重复
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 1) {
+                  $("#flag").val("yes");
+              }else {
+                  $("#flag").val("no");
+              }
+              if(  obj == 1 && $("#workAccountList tr").length==0){
+                  top.layer.alert('请添加发票明细!', {icon: 0});
+                  return;
+              }
+
+              var m = ${workInvoice.money};
+              var money = "0.00";
+              //自动计算出结果并填充在相应的输入框中
+              var size = $("#workAccountList tr").length+count;
+              for (var i = 0;i<size;i++){
+                  var _totalMoney = $("#workAccountList"+i+"_totalMoney").val();
+
+                  var delFlag = $("#workAccountList"+i+"_delFlag").val();
+                  if (_totalMoney!=undefined && isNumber(_totalMoney) && delFlag==0){
+                      if(money==""){
+                          money = parseFloat(_totalMoney).toFixed(2);
+                      }else {
+                          money = (parseFloat(money) + parseFloat(_totalMoney)).toFixed(2);
+                      }
+                  }
+              }
+              if(obj == 1 && money != m ){
+                  top.layer.alert('发票明细总价税合计与主信息价税合计不等,禁止提交!', {icon: 0});
+                  return;
+              }
+
+			  $("#inputForm").submit();
+			  return true;
+		  }
+		  return false;
+		}
+		$(document).ready(function() {
+			$("#name").focus();
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+
+            laydate.render({
+                elem: '#invoiceDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+
+            laydate.render({
+                elem: '#takeDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            String.prototype.endWith=function(endStr){
+                var d=this.length-endStr.length;
+                return (d>=0&&this.lastIndexOf(endStr)==d)
+            }
+		});
+
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workAccountList tr").length;
+            if(list == '#workAccountList' && idx1 < 100){
+                bornTemplete(list, idx, tpl, row, idx1);
+                if($("#invoiceType").val()=="专票"){
+                    $("#workAccountList"+idx+"_code").attr("minlength","10");
+                    $("#workAccountList"+idx+"_code").attr("maxlength","10");
+                }else if($("#invoiceType").val()=="普票"){
+                    $("#workAccountList"+idx+"_code").attr("minlength","12");
+                    $("#workAccountList"+idx+"_code").attr("maxlength","12");
+                }
+                //$("#workAccountList"+idx+"_number").val(("0000000" + 100000000 * Math.random()).match(/(\d{8})(\.|$)/)[1]);
+                if(idx>0){
+                    var i = idx-1;
+                    var code = $("#workAccountList"+i+"_code").val();
+                    if(code == null || code == undefined || code == ""){
+						i = idx-2;
+						code = $("#workAccountList"+i+"_code").val();
+                    }
+                    $("#workAccountList"+idx+"_code").val(code);
+
+				}
+            }
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        function delRow(obj, prefix) {
+            count++;
+            var id = $(prefix + "_id");
+            var delFlag = $(prefix + "_delFlag");
+            if (id.val() == "") {
+                $(obj).parent().parent().remove();
+            } else if (delFlag.val() == "0") {
+                delFlag.val("1");
+                $(obj).html("&divide;").attr("title", "撤回删除");
+                $(obj).parent().parent().addClass("error");
+                $(obj).parent().parent().addClass("hide");
+            } else if (delFlag.val() == "1") {
+                delFlag.val("0");
+                $(obj).html("&times;").attr("title", "删除");
+                $(obj).parent().parent().removeClass("error");
+            }
+            // var idx1 = $("#workAccountList tr").length; //tr 总数
+            // for (var i = 0; i < idx1; i++) {
+            //     $("#workAccountList tr").eq(i).find("td").eq(1).html(i + 1);
+            // }
+        }
+        function isNumber(val){
+            if(val === "" || val ==null){
+                return false;
+            }
+            var regPos = /^\d+(\.\d+)?$/; //非负浮点数
+            var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
+            if(regPos.test(val) || regNeg.test(val)){
+                return true;
+            }else{
+                return false;
+            }
+
+        }
+        function setVs(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('allPrice','proportion');
+            var value = obj.value;
+            var p = $("#price").val() || 0;
+            if(!p || p == 0){
+                parent.layer.msg("请先填写造价指标,且不能为零",{icon:5});
+                return;
+            }
+            var num = value/p ;
+            if(!/^\d+(\.\d{1,2})?$/.test( value )){
+                parent.layer.msg("合价必须输入数字",{icon:5});
+            }else{
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+            }
+        }
+        function setTaxMoney(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('tax','taxMoney');
+            var t = a.replace('tax','totalMoney');
+            var tr = a.replace('tax','taxRate');
+            var value = obj.value || 0;
+            if(!value){
+                parent.layer.msg("请正确填写税率",{icon:5});
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                return;
+			}
+            var m = ${workInvoice.money};
+            var t2 = $("#" +  t ).val();
+            if(!/^\d+(\.\d{1,4})?$/.test( t2 )){
+                parent.layer.msg("请正确填写价税合计",{icon:5});
+                return;
+            }else if(t2 > m) {
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                parent.layer.msg("所填值大于发票总价税合计",{icon:5});
+                return;
+            }
+            var tax = 1 + value/100;
+            var p = $("#" +  t ).val() || 0;//获取价税合计
+            if(!p || p == 0){
+                parent.layer.msg("请先填写价税合计,且不能为零",{icon:5});
+                return;
+            }
+            var num = p/tax || 0;
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+                var taxRate = p - num;
+                $("#" +  tr ).val(parseFloat(taxRate.toFixed(2)));
+        }
+        function setCheck(obj){
+            var aa = $(obj).attr("id");
+            var b = aa.replace('totalMoney','taxMoney');
+            var tr = aa.replace('totalMoney','taxRate');
+            $("#" +  b ).val("");
+            $("#" +  tr ).val("");
+            var m = ${workInvoice.money};
+            var a = obj.value;
+            if(a > m) {
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                parent.layer.msg("所填值大于发票总价税合计",{icon:5});
+                return;
+            }
+        }
+        function getMoney(value,obj){
+            var aa = $(obj).attr("id");
+            var b = aa.replace('totalMoney','taxMoney');
+            console.log("b====="+b);
+            var tr = aa.replace('totalMoney','taxRate');
+            var m = ${workInvoice.money};
+            var money = "0.00";
+            //自动计算出结果并填充在相应的输入框中
+            var size = $("#workAccountList tr").length+count;
+            for (var i = 0;i<size;i++){
+                var _totalMoney = $("#workAccountList"+i+"_totalMoney").val();
+
+                var delFlag = $("#workAccountList"+i+"_delFlag").val();
+                if (_totalMoney!=undefined && isNumber(_totalMoney) && delFlag==0){
+                    if(money==""){
+                        money = parseFloat(_totalMoney).toFixed(2);
+                    }else {
+                        money = (parseFloat(money) + parseFloat(_totalMoney)).toFixed(2);
+                    }
+                }
+            }
+            if(money >m){
+                console.log("money--------"+money);
+                $("#" + aa ).val("");
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                parent.layer.msg("发票明细价税合计总值大于主申请发票价税合计",{icon:5});
+                return;
+			}
+        }
+        function setV(obj){
+            var a =  $(obj).attr("id");
+            var c = "京";
+            var date=new Date;
+            var year=date.getFullYear();
+            var month=date.getMonth()+1;
+            month =(month<10 ? "0"+month:month);
+            var mydate = (year.toString()+month.toString());
+            var timestamp="["+mydate+"]";//获取固定格式年月
+            var number = c+timestamp;
+            $("#" +  a ).val(number);
+        }
+        function checkSame(obj){
+            var value =obj.value;
+            var a = $(obj).attr("id");
+            var idx = a.replace('_number','');
+            var idxx = idx.replace('workAccountList','')
+            var b = a.replace('number','oldNumber');
+            var oldValue = $("#" +  b ).val();
+            var size = $("#workAccountList tr").length+count;
+            for (var i = 0;i<size;i++){
+                var _number = $("#workAccountList"+i+"_number").val();
+                var delFlag = $("#workAccountList"+i+"_delFlag").val();
+                if (_number!=undefined&& delFlag==0 && i!= idxx ){
+                    if(_number == value){
+                        $("#" +  a ).val("");
+                        numcount++;
+                        parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+                        return;
+                    }
+                }
+            }
+                $.ajax({
+                    type:'post',
+                    url:'${ctx}/workinvoicedetail/workInvoiceDetail/checkSame',
+                    data:{
+                        "number":value,"oldNumber":oldValue
+                    },
+                    success:function(data){
+                        if("false" == data){
+                            $("#" +  a ).val("");
+                            numcount++;
+                            parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+                            return;
+                        }
+                    }
+                })
+        }
+        function openDialogreExcel(title,url,width,height,target){
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 1,
+                area: [500,300],
+                title:"导入数据",
+                skin: 'three-btns with-demo',
+                content:$("#import").html() ,
+                btn: ['导入全部','仅导入当前纳税人识别号', '关闭'],
+                btn1: function(index, layero){
+                    var impType='0';
+                    importExcel(impType,url)
+                    top.layer.close(index);
+                },
+                btn2: function(index, layero){
+                    var impType='1';
+                    importExcel(impType,url)
+                    top.layer.close(index);
+                },
+                btn3: function(index){
+                    top.layer.close(index);
+                }
+
+
+            });
+        }
+        function importExcel(impType,url){
+            var orUnicode=$("#orUnicode").val();
+            var invoiceType=$("#invoiceType").val();
+            url=url+"?impType="+encodeURIComponent(impType)+"&orUnicode="+encodeURIComponent(orUnicode)+"&invoiceType="+encodeURIComponent(invoiceType);
+            var formData = new FormData();
+            formData.append("file",top.$("#uploadFile")[0].files[0]);
+            var obj =top.$("#uploadFile")[0].files[0];
+            if(obj==undefined){
+                parent.layer.alert('请选择上传文件',{icon:0,title:'系统提示'});
+                return;
+            }
+            var fileType = obj.name;
+            if(!fileType.endWith("xml")){
+                top.layer.alert('请上传*.xml格式的文件',{icon:0,title:'系统提示'});
+                return;
+            }
+
+            $.ajax({
+                type: 'post',
+                url:url,
+                data: formData,
+                dataType: "json",
+                cache: false,
+                processData: false,
+                contentType: false,
+            }).success(function (data) {
+                for (var i = 0; i < data.data.length; i++) {
+                    addExcelRow('#workAccountList', workAccountListRowIdx, workAccountListTpl,data.data[i]);
+                    if($("#invoiceType").val()=="专票"){
+                        $("#workAccountList"+workAccountListRowIdx+"_code").attr("minlength","10");
+                        $("#workAccountList"+workAccountListRowIdx+"_code").attr("maxlength","10");
+					}else if($("#invoiceType").val()=="普票"){
+                        $("#workAccountList"+workAccountListRowIdx+"_code").attr("minlength","12");
+                        $("#workAccountList"+workAccountListRowIdx+"_code").attr("maxlength","12");
+					}
+                    workAccountListRowIdx=workAccountListRowIdx+1;
+                }
+                if(numcount>0){
+                    top.layer.alert(data.message+" 存在发票号重复数据!",{icon:5});
+				}else{
+                    top.layer.alert(data.message,{icon:5});
+				}
+
+            }).error(function () {
+                top.layer.msg("导入文件失败!");
+            });
+		}
+        function addExcelRow(list, idx, tpl, row){
+            var idx1 = $("#workAccountList tr").length;
+			bornTemplete(list, idx, tpl, row, idx1);
+			$("#workAccountList"+idx+"_number").change();
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+	<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/workinvoice/workInvoice/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="home"/>
+		<form:hidden path="act.taskId"/>
+		<form:hidden path="act.taskName"/>
+		<form:hidden path="act.taskDefKey"/>
+		<form:hidden path="act.procInsId"/>
+		<form:hidden path="act.procDefId"/>
+		<form:hidden id="flag" path="act.flag"/>
+		<c:set var="status" value="${workInvoice.act.status}" />
+
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>基本信息</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.projectName}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>发票申请编号:</label>
+				<div class="layui-input-block">
+					<div class="input-group">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.number}"/>
+						<span class="input-group-btn">
+							<label class="form-status"><c:choose><c:when test="${ empty workInvoice.invoiceState}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoice.invoiceState, 'audit_state','')}</c:otherwise>	</c:choose></label>
+						</span>
+					</div>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>合同名称:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.workContractInfo.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.projectId}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>委托方:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.workContractInfo.client.name}"/>
+				</div>
+			</div>
+			<%--<div class="layui-item layui-col-sm6">--%>
+				<%--<label class="layui-form-label"><span class="require-item">*</span>所属部门:</label>--%>
+				<%--<div class="layui-input-block">--%>
+					<%--<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.office.name}"/>--%>
+				<%--</div>--%>
+			<%--</div>--%>
+		</div>
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>发票详情</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true" id="invoiceType"  class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.client.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">纳税人识别号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true" id="orUnicode"   class="form-control layui-input" value="${workInvoice.orUnicode}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">地址:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.address}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">电话:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.telephone}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开户银行:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bank}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">银行账号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bankNumber}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>价税合计(元):</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<fmt:formatNumber value="${workInvoice.money}" pattern="#,#00.00"/>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>开票内容要求:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.content}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票人:</label>
+				<div class="layui-input-block">
+					<form:input   path="drawerName" htmlEscape="false" readonly="true"  class="form-control layui-input"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票时间:</label>
+				<div class="layui-input-block">
+					<input class="form-control layer-date laydate-icon layui-input laydate-icondate" id="invoiceDate" name="invoiceDate" value="<fmt:formatDate
+							value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>">
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm12">
+				<label class="layui-form-label">领票时间:</label>
+				<div class="layui-input-block">
+					<input class="form-control layer-date laydate-icon layui-input laydate-icondate" id="takeDate" name="takeDate" value="<fmt:formatDate
+							value="${workInvoice.takeDate}" pattern="yyyy-MM-dd"/>">
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm12 with-textarea">
+				<label class="layui-form-label">审批意见:</label>
+				<div class="layui-input-block">
+					<form:textarea path="act.comment" class="form-control " rows="5" maxlength="20"/>
+				</div>
+			</div>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>发票明细</h2></div>
+			<div class="layui-item nav-btns">
+				<a class="nav-btn nav-btn-add" onclick="addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl);workAccountListRowIdx = workAccountListRowIdx + 1;" title="新增"><i class="fa fa-plus"></i>&nbsp;新增</a>
+				<a href="javascript:void(0)" onclick="openDialogreExcel('导入数据', '${ctx}/workAccount/workAccount/import','90%','90%')" class="nav-btn nav-btn-import" ><i class="fa fa-plus"></i>&nbsp;导入</a>
+				<div id="import" class="hide" style="padding: 5px">
+					<input id="uploadFile" name="file" type="file" style="width:330px"/>导入文件不能超过5M,仅允许导入“xml”格式文件!<br/>  
+						<%--<input type="radio"  name="impType"  checked id="all" value="0">
+						<label for="all">导入全部</label>
+						<input type="radio"  name="impType" id="noAll" value="1">
+						<label for="noAll">仅导入当前纳税人识别号</label>--%>
+
+				</div>
+
+			</div>
+			<div class="layui-item layui-col-xs12 form-table-container">
+				<table id="contentTable" class="table table-bordered table-condensed can-edit">
+					<thead>
+					<tr>
+						<th><span class="require-item">*</span>发票代码</th>
+						<th><span class="require-item">*</span>发票号</th>
+						<th><span class="require-item">*</span>价税合计</th>
+						<th width="80px"><span class="require-item">*</span>税率</th>
+						<th width="100px"><span class="require-item">*</span>金额</th>
+						<th width="100px"><span class="require-item">*</span>税额</th>
+						<th width="100px"><span class="require-item">*</span>累计登记金额</th>
+						<th width="80px">操作</th>
+						<%--<th><span class="require-item">*</span>发票状态</th>&lt;%&ndash;正常&ndash;%&gt;--%>
+						<%--<th><span class="require-item">*</span>被退标记</th>--%>
+						<%--<th><span class="require-item">*</span>被退票号</th>--%>
+						<%--<th><span class="require-item">*</span>开票日期</th>--%>
+					</tr>
+					</thead>
+					<tbody id="workAccountList">
+					</tbody>
+				</table>
+				<script type="text/template" id="workAccountListTpl">//<!--
+							<tr id="workAccountList{{idx}}">
+								<td class="hide">
+									<input id="workAccountList{{idx}}_id" name="workAccountList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+									<input id="workAccountList{{idx}}_delFlag" name="workAccountList[{{idx}}].delFlag" type="hidden" value="0"/>
+								</td>
+								<td>
+									<input id="workAccountList{{idx}}_code" name="workAccountList[{{idx}}].code" type="text" value="{{row.code}}"    class="form-control number required"/>
+								 </td>
+								 <td>
+									<input id="workAccountList{{idx}}_number" name="workAccountList[{{idx}}].number" onchange="checkSame(this)" type="text" value="{{row.number}}"  minlength="8" maxlength="8"  class="form-control number required"/>
+									 <input type="hidden" id="workAccountList{{idx}}_oldNumber" value="{{row.number}}"/>
+								 </td>
+								<td>
+									<input id="workAccountList{{idx}}_totalMoney"  onblur="setCheck(this)"  onchange="getMoney(this.value,this)"  name="workAccountList[{{idx}}].totalMoney" type="text" value="{{row.totalMoney}}"    class="form-control number required"/>
+								</td>
+								<td>
+								<div class="input-group">
+									<input id="workAccountList{{idx}}_tax" onblur="setTaxMoney(this)" name="workAccountList[{{idx}}].tax" type="text" value="{{row.tax}}"    class="form-control number required"/><span class="input-group-addon input-height">%</span>
+									</div>
+								</td>
+								<td>
+									<input id="workAccountList{{idx}}_taxMoney" name="workAccountList[{{idx}}].taxMoney" type="text" value="{{row.taxMoney}}"    class="form-control number required"/>
+								</td>
+								<td>
+									<input id="workAccountList{{idx}}_taxRate" name="workAccountList[{{idx}}].taxRate" type="text" value="{{row.taxRate}}"    class="form-control number required"/>
+								</td>
+								<td>
+									<input id="workAccountList{{idx}}_incomeMoney" name="workAccountList[{{idx}}].incomeMoney" type="text" value="0"  readonly="true"  class="form-control required"/>
+								</td>
+
+									<input id="workAccountList{{idx}}_state" name="workAccountList[{{idx}}].state"  type="hidden" value="正常"   class="form-control"/>
+
+									<input id="workAccountList{{idx}}_backSign" name="workAccountList[{{idx}}].backSign"  type="hidden" value="正常"  readonly="true"  class="form-control required"/>
+
+									<input id="workAccountList{{idx}}_backNumber" name="workAccountList[{{idx}}].backNumber"  type="hidden" value=""  readonly="true"  class="form-control required"/>
+
+
+								<td class="text-center op-td">
+									{{#delBtn}}<span class="op-btn op-btn-delete" onclick="delRow(this, '#workAccountList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}
+								</td>
+							</tr>//-->
+				</script>
+				<script type="text/javascript">
+					var workAccountListRowIdx = 0, workAccountListTpl = $("#workAccountListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+					$(document).ready(function() {
+						var data = ${fns:toJson(workInvoice.workAccountList)};
+						for (var i=0; i<data.length; i++){
+							addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl, data[i]);
+							workAccountListRowIdx = workAccountListRowIdx + 1;
+						}
+					});
+				</script>
+			</div>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>审批流程</h2></div>
+			<div class="layui-item layui-col-xs12 form-table-container" >
+				<act:flowChart procInsId="${workInvoice.act.procInsId}"/>
+				<act:histoicFlow procInsId="${workInvoice.act.procInsId}" />
+			</div>
+		</div>
+
+		<div class="form-group layui-row page-end"></div>
+	</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 60 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceCancle.jsp

@@ -0,0 +1,60 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票作废</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            //debugger
+            if(validateForm.form()){
+                if(obj == 1){
+                    $("#inputForm").attr("action","${ctx}/workinvoice/workInvoice/cancleinvoice");
+                }
+                $("#inputForm").submit();
+                return true;
+            }
+            return false;
+        }
+        $(document).ready(function() {
+
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+        });
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/workinvoice/workInvoice/cancleinvoice" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<input type="hidden" name="id" value="${workContractInfo.id}"/>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>发票作废</h2></div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label "><span class="require-item">*</span>作废原因:</label>
+					<div class="layui-input-block">
+						<form:textarea path="cancleReason" htmlEscape="false" rows="4"  class="form-control required"/>
+					</div>
+				</div>
+			</div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 578 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceForm.jsp

@@ -0,0 +1,578 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票管理</title>
+	<meta name="decorator" content="default"/>
+	<%--<script src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>--%>
+	<style>
+		#contractTypeDoc-error{
+			top:80px;
+			left:0;
+		}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            //debugger
+            if(validateForm.form()){
+                if(obj == 2){
+                    $("#inputForm").attr("action","${ctx}/workinvoice/workInvoice/store");
+                }else{
+                    $("#inputForm").attr("action","${ctx}/workinvoice/workInvoice/save");
+                }
+                $("#inputForm").submit();
+                return true;
+            }
+            return false;
+        }
+        $(document).ready(function() {
+            /*$('#money').keyup(function(){
+                var c=$(this);
+                if(/[^\d]/.test(c.val())){//替换非数字字符
+                    var temp_amount=c.val().replace(/[^\d]/g,'');
+                    $(this).val(temp_amount);
+                }
+            })*/
+            jQuery.validator.addMethod("isUscCode", function(value, element) {
+                if (this.optional(element)){
+                    return true;
+                }
+                var uscCode = /^((\w{15})|(\w{18})|(\w{20}))$/;
+                return uscCode.test(value);
+            }, "请填写正确的纳税人识别号");
+
+            /* $("input[name='ext']").on('ifChecked', function(event){
+                 var radioVal = $(this).val();
+                 if(radioVal == 0){
+                     $("#td1").removeClass("hide");
+                     $("#td2").addClass("hide");
+                     $("#tr1").show()
+                 }else{
+                     $("#td1").addClass("hide");
+                     $("#td2").removeClass("hide");
+                     $("#tr1").hide()
+                 }
+             });*/
+            if("${workInvoice.ext}" == "1"){
+                $("#ext1").iCheck('check')
+            }else{
+                $("#ext").iCheck('check')
+            }
+            if("${workInvoice.invoiceType}" == "1"){
+                $("#invoiceType1").iCheck('check');
+                $(".invoicetype").show();
+            }else{
+                $("#invoiceType").iCheck('check');
+                $(".invoicetype").hide();
+            }
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+            $("input[name='invoiceType']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                //专票必填
+                if(radioVal == 1){
+                    $(".invoicetype").show();
+                    $("#bank").attr("class","form-control required layui-input");
+                    $("#bankNumber").attr("class","form-control number required layui-input");
+                    $("#orUnicode").attr("class","form-control isUscCode required layui-input");
+                    $("#address").attr("class","form-control required layui-input");
+                    $("#telephone").attr("class","form-control isTel required layui-input");
+                }else if(radioVal == 2){
+                    $(".invoicetype").hide();
+                    $("#bank").attr("class","form-control layui-input");
+                    $("#bankNumber").attr("class","form-control number layui-input");
+                    $("#orUnicode").attr("class","form-control isUscCode layui-input");
+                    $("#address").attr("class","form-control layui-input");
+                    $("#telephone").attr("class","form-control isTel layui-input");
+                }
+            });
+            /*--------------*/
+
+        });
+        function setValuee(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getWorkClientInfo',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#bank").val(d.bank);
+                    $("#orUnicode").val(d.orUnicode);
+                    $("#bankNumber").val(d.bankNumber);
+                    $("#telephone").val(d.telephone);
+                    $("#address").val(d.adress);
+                    $("#ids").val(d.ids);
+                }
+            })
+        }
+        function setDp(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getUserDp',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#dp").val(d.dp);
+                }
+            })
+        }
+        function setPNumber(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getPNumber',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#cName").val(d.cName);
+                    $("#officeName").val(d.officeName);
+                    $("#officeId").val(d.officeId);
+                }
+            })
+        }
+
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workAccountList tr").length;
+            if(list == '#workAccountList' && idx1 < 100){
+                bornTemplete(list, idx, tpl, row, idx1);
+            }
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        /*function delRow(obj, prefix) {
+            var id = $(prefix + "_id");
+            var delFlag = $(prefix + "_delFlag");
+            if (id.val() == "") {
+                $(obj).parent().parent().remove();
+            } else if (delFlag.val() == "0") {
+                delFlag.val("1");
+                $(obj).html("&divide;").attr("title", "撤回删除");
+                $(obj).parent().parent().addClass("error");
+                $(obj).parent().parent().addClass("hide");
+            } else if (delFlag.val() == "1") {
+                delFlag.val("0");
+                $(obj).html("&times;").attr("title", "删除");
+                $(obj).parent().parent().removeClass("error");
+            }
+            // var idx1 = $("#workAccountList tr").length; //tr 总数
+            // for (var i = 0; i < idx1; i++) {
+            //     $("#workAccountList tr").eq(i).find("td").eq(1).html(i + 1);
+            // }
+        }*/
+        function provinceForShort(province){
+            if(province == "北京市")
+                return "京";
+            else if(province == "天津市")
+                return "津";
+            else if(province == "重庆市")
+                return "渝";
+            else if(province == "上海市")
+                return "沪";
+            else if(province == "河北省")
+                return "冀";
+            else if(province == "山西省")
+                return "晋";
+            else if(province == "辽宁省")
+                return "辽";
+            else if(province == "吉林省")
+                return "吉";
+            else if(province == "黑龙江省")
+                return "黑";
+            else if(province == "江苏省")
+                return "苏";
+            else if(province == "浙江省")
+                return "浙";
+            else if(province == "安徽省")
+                return "皖";
+            else if(province == "福建省")
+                return "闽";
+            else if(province == "江西省")
+                return "赣";
+            else if(province == "山东省")
+                return "鲁";
+            else if(province == "河南省")
+                return "豫";
+            else if(province == "湖北省")
+                return "鄂";
+            else if(province == "湖南省")
+                return "湘";
+            else if(province == "广东省")
+                return "粤";
+            else if(province == "海南省")
+                return "琼";
+            else if(province == "四川省")
+                return "川/蜀";
+            else if(province == "贵州省")
+                return "黔/贵";
+            else if(province == "云南省")
+                return "云/滇";
+            else if(province == "陕西省")
+                return "陕/秦";
+            else if(province == "甘肃省")
+                return "甘/陇";
+            else if(province == "青海省")
+                return "青";
+            else if(province == "台湾省")
+                return "台";
+            else if(province == "内蒙古自治区")
+                return "内蒙古";
+            else if(province == "广西壮族自治区")
+                return "桂";
+            else if(province == "宁夏回族自治区")
+                return "宁";
+            else if(province == "新疆维吾尔自治区 ")
+                return "新";
+            else if(province == "西藏自治区")
+                return "藏";
+            else if(province == "香港特别行政区")
+                return "港";
+            else if(province == "澳门特别行政区")
+                return "澳";
+        }
+
+        function setVs(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('allPrice','proportion');
+            var value = obj.value;
+            var p = $("#price").val() || 0;
+            if(!p || p == 0){
+                parent.layer.msg("请先填写造价指标,且不能为零",{icon:5});
+                return;
+            }
+            var num = value/p ;
+            if(!/^\d+(\.\d{1,2})?$/.test( value )){
+                parent.layer.msg("合价必须输入数字",{icon:5});
+            }else{
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+            }
+        }
+        function setTaxMoney(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('tax','taxMoney');
+            var t = a.replace('tax','totalMoney');
+            var tr = a.replace('tax','taxRate');
+            var value = obj.value || 0;
+            console.log("-value----"+value);
+            var tax = 1 + value/100;
+            console.log("-tax----"+tax);
+            var p = $("#" +  t ).val() || 0;//获取价税合计
+            console.log("-----"+p);
+            if(!p || p == 0){
+                parent.layer.msg("请先填写价税合计,且不能为零",{icon:5});
+                return;
+            }
+            var num = p/tax || 0;
+            console.log("-----"+num);
+            if(!/^\d+(\.\d{1,2})?$/.test( tax )){
+                parent.layer.msg("税率必须输入数字",{icon:5});
+            }else{
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+                var taxRate = p - num;
+                $("#" +  tr ).val(parseFloat(taxRate.toFixed(2)));
+            }
+        }
+
+        /*function setV(obj){
+            var a =  $(obj).attr("id");
+            var b = $("#province").val();
+            var c = provinceForShort(b);//开票单位所在省/直辖市简称
+            var date=new Date;
+            var year=date.getFullYear();
+            var month=date.getMonth()+1;
+            month =(month<10 ? "0"+month:month);
+            var mydate = (year.toString()+month.toString());
+            var timestamp="["+mydate+"]";//获取固定格式年月
+			var number = c+timestamp;
+            $("#" +  a ).val(number);
+        }*/
+        function setV(obj){
+            var a =  $(obj).attr("id");
+            var c = "京";
+            var date=new Date;
+            var year=date.getFullYear();
+            var month=date.getMonth()+1;
+            month =(month<10 ? "0"+month:month);
+            var mydate = (year.toString()+month.toString());
+            var timestamp="["+mydate+"]";//获取固定格式年月
+            var number = c+timestamp;
+            $("#" +  a ).val(number);
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/workinvoice/workInvoice/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="invoiceDate"/>
+			<form:hidden path="province" id="province"/>
+
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="hidden" value="" id ="ids">
+						<sys:gridselectcallprojectt url="${ctx}/workinvoice/workInvoice/selectproject" id="project" name="project.id"  value="${workInvoice.project.id}"  title="选择所属项目" labelName="workInvoice.project.projectName"
+													labelValue="${workInvoice.project.projectName}" cssClass="form-control required layui-input" fieldLabels="项目" fieldKeys="projectName" searchLabel="项目名称" searchKey="projectName" ></sys:gridselectcallprojectt>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">发票申请编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<form:input path="number" htmlEscape="false" readonly="true"   class="form-control layui-input"/>
+							<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workInvoice.invoiceState}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoice.invoiceState, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>合同名称:</label>
+					<div class="layui-input-block">
+						<form:input id ="cInfoName" path="project.workContractInfo.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+					<div class="layui-input-block">
+						<form:input id ="pNumber" path="project.projectId" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>委托方:</label>
+					<div class="layui-input-block">
+						<form:input id ="cName" path="project.workContractInfo.client.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<%--<div class="layui-item layui-col-sm6">--%>
+					<%--<label class="layui-form-label"><span class="require-item">*</span>所属部门:</label>--%>
+					<%--<div class="layui-input-block">--%>
+						<%--<form:input id ="officeName" path="office.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>--%>
+						<%--<form:hidden path="office.id" id ="officeId" />--%>
+					<%--</div>--%>
+				<%--</div>--%>
+			</div>
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>发票详情</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+					<div class="layui-input-block">
+						<c:choose>
+							<c:when test="${workInvoice.invoiceState == 4}">
+								<c:choose>
+									<c:when test="${workInvoice.ext ==0}">
+										<input value = "本公司开票" readonly="true" class="form-control layui-input"/>
+									</c:when>
+									<c:otherwise>
+										<input value = "上级公司开票" readonly="true"  class="form-control layui-input"/>
+									</c:otherwise>
+								</c:choose>
+							</c:when>
+							<c:otherwise>
+								<input type="radio" class="i-checks" name="ext" checked id="ext" value="0">
+								<label for="ext">本公司开票</label>
+								<input type="radio" class="i-checks" name="ext" id="ext1" value="1">
+								<label for="ext1">上级公司开票</label>
+							</c:otherwise>
+						</c:choose>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+					<div class="layui-input-block">
+						<input type="radio" class="i-checks" name="invoiceType" checked id="invoiceType1" value="1">
+						<label for="invoiceType1">专票</label>
+						<input type="radio" class="i-checks" name="invoiceType" id="invoiceType" value="2">
+						<label for="invoiceType">普票</label>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+					<div class="layui-input-block with-icon">
+						<sys:gridselect url="${ctx}/workinvoice/workInvoice/selectclient" id="client" name="client.id"  value="${workInvoice.client.id}"  title="选择开票单位" labelName="workInvoice.client.name"
+										labelValue="${workInvoice.client.name}" cssClass="form-control required layui-input" fieldLabels="单位" fieldKeys="name" searchLabel="客户名称" searchKey="name" ></sys:gridselect>
+						</td>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item invoicetype">*</span>纳税人识别号:</label>
+					<div class="layui-input-block">
+						<form:input id="orUnicode" path="orUnicode" htmlEscape="false"    class="form-control isUscCode layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item invoicetype">*</span>地址:</label>
+					<div class="layui-input-block">
+						<form:input id="address" path="address" htmlEscape="false"    class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item invoicetype">*</span>电话:</label>
+					<div class="layui-input-block">
+						<form:input id="telephone" path="telephone" htmlEscape="false"    class="form-control isTel layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item invoicetype">*</span>开户银行:</label>
+					<div class="layui-input-block">
+						<form:input id ="bank"  path="bank" htmlEscape="false"   class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item invoicetype">*</span>银行账号:</label>
+					<div class="layui-input-block">
+						<form:input id="bankNumber" path="bankNumber" htmlEscape="false"   class="form-control number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label"><span class="require-item">*</span>价税合计(元):</label>
+					<div class="layui-input-block">
+							<%--<form:input id=""  path="money" htmlEscape="false" class="form-control number required layui-input"/>--%>
+						<input name="money" htmlEscape="false"  value="${workInvoice.money}" class="form-control required number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>开票内容要求:</label>
+					<div class="layui-input-block">
+						<form:textarea path="content" id="contractTypeDoc" htmlEscape="false" rows="4"    class="form-control required"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票人:</label>
+					<div class="layui-input-block">
+						<form:input id=""  path="" htmlEscape="false" readonly="true"  class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<form:input id=""  path="" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">领票时间:</label>
+					<div class="layui-input-block">
+						<form:input id=""  path="" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>发票明细</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container">
+					<table id="contentTable" class="table table-bordered table-condensed can-edit">
+						<thead>
+						<tr>
+							<th><span class="require-item">*</span>发票代码</th>
+							<th><span class="require-item">*</span>发票号</th>
+							<th><span class="require-item">*</span>价税合计</th>
+							<th><span class="require-item">*</span>税率</th>
+							<th><span class="require-item">*</span>金额</th>
+							<th><span class="require-item">*</span>税额</th>
+							<th><span class="require-item">*</span>累计登记金额</th>
+							<th width="150px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="workAccountList">
+						</tbody>
+					</table>
+					<script type="text/template" id="workAccountListTpl">//<!--
+                                    <tr id="workAccountList{{idx}}">
+                                        <td class="hide">
+                                            <input id="workAccountList{{idx}}_id" name="workAccountList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                            <input id="workAccountList{{idx}}_delFlag" name="workAccountList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                    	<td>
+                                        	<input id="workAccountList{{idx}}_code" name="workAccountList[{{idx}}].code" type="text" value="{{row.code}}"    class="form-control required"/>
+                                   		 </td>
+                                    	 <td>
+                                        	<input id="workAccountList{{idx}}_number" name="workAccountList[{{idx}}].number" type="text" value="{{row.number}}"    class="form-control required"/>
+                                   		 </td>
+                                    	<td>
+                                            <input id="workAccountList{{idx}}_totalMoney"  name="workAccountList[{{idx}}].totalMoney" type="text" value="{{row.totalMoney}}"    class="form-control required"/>
+                                        </td>
+                                        <td>
+                                        <div class="input-group">
+                                            <input id="workAccountList{{idx}}_tax" onblur="setTaxMoney(this)" name="workAccountList[{{idx}}].tax" type="text" value="{{row.tax}}"    class="form-control number required"/><span class="input-group-addon">%</span>
+                                            </div>
+
+                                        </td>
+                                        <td>
+                                            <input id="workAccountList{{idx}}_taxMoney" name="workAccountList[{{idx}}].taxMoney" type="text" value="{{row.taxMoney}}"    class="form-control required"/>
+                                        </td>
+										<td>
+                                            <input id="workAccountList{{idx}}_taxRate" name="workAccountList[{{idx}}].taxRate" type="text" value="{{row.taxRate}}"    class="form-control required"/>
+                                        </td>
+                                        <td>
+                                            <input id="workAccountList{{idx}}_incomeMoney" name="workAccountList[{{idx}}].incomeMoney" type="text" value="0"  readonly="true"  class="form-control required"/>
+                                        </td>
+
+                                            <input id="workAccountList{{idx}}_state" name="workAccountList[{{idx}}].state"  type="hidden" value="正常"   class="form-control"/>
+
+                                            <input id="workAccountList{{idx}}_backSign" name="workAccountList[{{idx}}].backSign"  type="hidden" value="正常"  readonly="true"  class="form-control required"/>
+
+                                            <input id="workAccountList{{idx}}_backNumber" name="workAccountList[{{idx}}].backNumber"  type="hidden" value=""  readonly="true"  class="form-control required"/>
+
+
+                                        <td class="text-center op-td">
+                                            {{#delBtn}}<span class="op-btn op-btn-delete" onclick="delRow(this, '#workAccountList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+                        var workAccountListRowIdx = 0, workAccountListTpl = $("#workAccountListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                        $(document).ready(function() {
+                            var data = ${fns:toJson(workInvoice.workAccountList)};
+                            for (var i=0; i<data.length; i++){
+                                addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl, data[i]);
+                                workAccountListRowIdx = workAccountListRowIdx + 1;
+                            }
+                        });
+					</script>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+
+</body>
+</html>

+ 135 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceHistoricList.jsp

@@ -0,0 +1,135 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>已审核发票管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        $(document).ready(function() {
+            laydate.render({
+                elem: '#beginDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'datetime'
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'datetime'
+            });
+        });
+	</script>
+</head>
+<body class="gray-bg">
+<div class="wrapper wrapper-content">
+	<div class="ibox">
+		<div class="ibox-title" style="height: 70px;">
+			<h5>
+				<ul class="nav nav-tabs">
+					<li><a href="${ctx}/workinvoice/workInvoice/list">发票管理列表</a></li>
+					<li><a href="${ctx}/workinvoice/workInvoice/workInvoiceTodoList">待办任务</a></li>
+					<li class="active"><a href="${ctx}/workinvoice/workInvoice/workInvoiceHistoricList">已办任务</a></li>
+					<%--<li><a href="${ctx}/workprequalification/workPrequalification/form">申请资格预审项目</a></li>--%>
+				</ul>
+			</h5>
+			<%--<div class="ibox-tools">
+				<a class="collapse-link">
+					<i class="fa fa-chevron-up"></i>
+				</a>
+				<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:void(0)">
+					<i class="fa fa-wrench"></i>
+				</a>
+
+			</div>--%>
+		</div>
+
+		<div class="ibox-content">
+			<sys:message content="${message}"/>
+			<!--查询条件-->
+			<div class="row">
+				<div class="col-sm-12">
+					<form:form id="searchForm" modelAttribute="act" action="${ctx}/workinvoice/workInvoice/workInvoiceHistoricList" method="get" class="form-inline">
+						<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+						<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+						<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+						<div class="form-group">
+							<label>创建时间:</label>
+							<input id="beginDate"  name="beginDate"  type="text" readonly="readonly" maxlength="20" style="width:200px;" class="laydate-icondate form-control layer-date input-sm"
+								   value="<fmt:formatDate value="${act.beginDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+							 -- 
+							<input id="endDate" name="endDate" type="text" readonly="readonly" maxlength="20" style="width:200px;" class="laydate-icondate form-control layer-date input-sm"
+								   value="<fmt:formatDate value="${act.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+						</div>
+					</form:form>
+					<br/>
+				</div>
+			</div>
+			<!-- 工具栏 -->
+			<div class="row">
+				<div class="col-sm-12">
+					<div class="pull-left">
+						<button class="btn btn-white btn-sm " data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i> 刷新</button>
+					</div>
+					<div class="pull-right">
+						<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="search()" ><i class="fa fa-search"></i> 查询</button>
+						<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="reset()" ><i class="fa fa-refresh"></i> 重置</button>
+					</div>
+				</div>
+			</div>
+			<!-- 表格 -->
+			<table id="contentTable" class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+				<thead>
+				<tr>
+					<th style="text-align: center;width: 10%">流程发起人</th>
+					<th style="text-align: center;width: 10%">当前环节</th>
+					<th style="text-align: center;width: 10%">流程名称</th>
+					<th style="text-align: center;width: 10%">流程版本</th>
+					<th style="text-align: center;width: 15%">项目名称</th>
+					<th style="text-align: center;width: 10%">开票金额</th>
+					<%--<th>项目类型</th>--%>
+					<%--<th>项目概况</th>--%>
+					<th style="text-align: center;width: 20%">备注信息</th>
+					<th style="text-align: center;width: 15%">创建时间</th>
+				</tr>
+				</thead>
+				<tbody>
+				<c:forEach items="${list}" var="workInvoice">
+					<c:set var="task" value="${workInvoice.act.task}" />
+					<c:set var="vars" value="${workInvoice.act.vars}" />
+					<c:set var="procDef" value="${workInvoice.act.procDef}" />
+					<c:set var="status" value="${workInvoice.act.status}" />
+					<tr>
+						<td>${workInvoice.createBy.name}</td>
+						<td>
+								${fns:getDictLabel(workInvoice.invoiceState, 'invoice_state','')}
+						</td>
+						<td>${procDef.name}</td>
+						<td><b title='流程版本号'>V: ${procDef.version}</b></td>
+						<td>
+							<c:choose>
+								<c:when test="${workInvoice.ext == 1}">
+									<span title="${workInvoice.projectName}">${fns:abbr(workInvoice.projectName,30)}</span>
+								</c:when>
+								<c:otherwise>
+									<span title="${workInvoice.project.name}">${fns:abbr(workInvoice.project.name,30)}</span>
+								</c:otherwise>
+							</c:choose>
+						</td>
+						<td>${workInvoice.money}</td>
+							<%--<td>${fns:getMainDictLabel(workprequalification.projectType, 'contract_type', '')}</td>--%>
+							<%--<td>${workprequalification.projectSituation}</td>--%>
+						<td>${workInvoice.invoiceRemarks}</td>
+						<td><fmt:formatDate value="${workInvoice.updateDate}" type="both"/></td>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+		<td>${act.vars.map.applyUserId}</td>
+	</div>
+</div>
+</body>
+</html>

+ 418 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceList.jsp

@@ -0,0 +1,418 @@
+<%@ page import="com.jeeplus.modules.sys.utils.UserUtils" %>
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+
+	<title>发票管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        <%--var Srole = "<%= UserUtils.getSelectRole().getName()%>";--%>
+
+        $(document).ready(function() {
+            // laydate.render({
+            //     elem: '#invoiceDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+            //     event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+				// ,type:'datetime'
+            // });
+            //搜索框收放
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#beginContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#endContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+        });
+        function openDialogre(title,url,width,height,target){
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url ,
+                skin:"three-btns",
+                btn: ['送审','暂存','关闭'],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                    return false;
+                },
+                btn3: function(index){
+                }
+            });
+
+        }
+
+        function openDialogreplay(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url ,
+                skin:"two-btns",
+                btn: ['送审','关闭'],
+                yes: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+
+                    if(iframeWin.contentWindow.doSubmit() ){
+                        top.layer.close(index);//关闭对话框。
+                        //setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+
+                },
+                cancel: function(index){
+                }
+            });
+        }
+
+        function contractOpenDialogre(title,url,width,height,target){
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: false, //开启最大化最小化按钮
+                skin:"three-btns",
+                content: url ,
+                btn: ['送审','暂存','关闭'],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                    return false;
+                },
+                btn3: function(index){
+                }
+            });
+
+        }
+	</script>
+	<style>
+		body{
+			background-color:transparent;
+			filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+			color:#ffffff;
+			background-color:rgba(255,255,255,0);
+			height:100%;
+		}
+	</style>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+	<sys:message content="${message}"/>
+	<div class="layui-row ">
+		<div class="full-width fl">
+			<div class=" contentShadow shadowLTR list-form-tab" id="tabDiv">
+				<ul class="list-tabs" >
+					<li class="active"><a href="${ctx}/workinvoice/workInvoice/list">发票管理</a></li>
+					<li><a href="${ctx}/workinvoicealter/workInvoiceAlter/list">发票变更</a></li>
+				</ul>
+			</div>
+		</div>
+		<div class="full-width fl">
+			<div class=" layui-row contentShadow shadowLR" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="workInvoice" action="${ctx}/workinvoice/workInvoice/" method="post" class="form-inline">
+				<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+				<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+				<%--<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->--%>
+
+					<div class="commonQuery lw9">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">项目编号:</label>
+							<div class="layui-input-block">
+								<form:input path="project.projectId" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">项目名称:</label>
+							<div class="layui-input-block with-icon">
+								<form:input path="project.projectName" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item athird">
+							<div class="input-group">
+								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+								<button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
+								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" class="lw9" style="clear:both;display:none;">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">创建日期:</label>
+							<div class="layui-input-block">
+								<input id="beginContractDate" name="beginContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workInvoice.beginContractDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+								<span class="group-sep">-</span>
+								<input id="endContractDate" name="endContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workInvoice.endContractDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">发票申请编号:</label>
+							<div class="layui-input-block">
+								<form:input path="number" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">所属部门:</label>
+							<div class="layui-input-block">
+								<form:input path="office.name" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">实际开票单位:</label>
+							<div class="layui-input-block with-icon">
+								<form:input path="client.name" htmlEscape="false"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">状态:</label>
+							<div class="layui-input-block with-icon">
+								<form:select path="invoiceState" class="form-control simple-select">
+									<form:option value="" label=""/>
+									<form:options items="${fns:getDictList('audit_state')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+								</form:select>
+							</div>
+						</div>
+					</div>
+				</form:form>
+			</div>
+		</div>
+		<div class="full-width fl">
+			<div class=" contentShadow shadowLBR layui-form contentDetails">
+				<div class="nav-btns">
+					<shiro:hasPermission name="workinvoice:workInvoice:add">
+						<button class="nav-btn nav-btn-add" title="发票管理" onclick="openDialogre('发票管理','${ctx}//workinvoice/workInvoice/form','95%','95%')"><i class="fa fa-plus"></i>&nbsp;添加</button>
+					</shiro:hasPermission>
+
+					<button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i> 刷新</button>
+
+					<div style="clear: both;"></div>
+				</div>
+				<table class="oa-table layui-table" id="contentTable"></table>
+
+				<!-- 分页代码 -->
+				<table:page page="${page}"></table:page>
+				<div style="clear: both;"></div>
+			</div>
+		</div>
+	</div>
+    <div id="changewidth"></div>
+</div>
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script>
+    layui.use('table', function(){
+        layui.table.render({
+            limit:${ page.pageSize }
+            ,elem: '#contentTable'
+            ,page: false
+            ,cols: [[
+                // {checkbox: true, fixed: true},
+                {field:'index',align:'center', title: '序号',width:40}
+                ,{field:'invoiceNum',align:'center', sort:true,title: '发票申请编号', minWidth:150,templet:function(d){
+                        return "<a class=\"attention-info\" title=\""+ d.invoiceNum +"\"href=\"javascript:void(0);\" onclick=\"openDialogView('查看发票管理', '${ctx}/workinvoice/workInvoice/form?id=" + d.id + "&tabId=1','95%', '95%')\">" + d.invoiceNum + "</a>";
+                    }}
+                ,{field:'projNum',align:'center', sort:true,title: '项目编号', minWidth:150,templet:function(d){
+                        return "<span title='"+ d.projNum +"'>" + d.projNum + "</span>";
+                    }}
+                ,{field:'projName',align:'center', title: '项目名称', minWidth:100,templet:function(d){
+                        return "<span title='"+ d.projName +"'>" + d.projName + "</span>";
+                    }}
+                ,{field:'clientName', align:'center',title: '实际开票单位', minWidth:150,templet:function(d){
+                        return "<span title='"+ d.clientName +"'>" + d.clientName + "</span>";
+                    }}
+                ,{field:'officeName', align:'center',title: '所属部门',width:150,templet:function(d){
+                        return "<span title='"+ d.officeName +"'>" + d.officeName + "</span>";
+                    }}
+                ,{field:'money',align:'center', title: '价税合计(元)',  width:90,templet:function(d){
+                        return "<span title='"+ d.money +"'>" + d.money + "</span>";
+                    }}
+                ,{field:'createDate',align:'center', sort:true,title: '创建时间',  width:80}
+                ,{align:'center', title: '状态',  width:70,templet:function(d){
+                        <%--var st = getAuditState(d.status);--%>
+
+                        <%--var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workinvoice/workInvoice/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";--%>
+                        <%--return xml;--%>
+                        var st = getAuditState(d.status);
+                        if(st.action)
+                            var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workinvoice/workInvoice/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        else
+                            var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        return xml;
+                    }}
+                ,{field:'op',align:'center',title:"操作",width:130,templet:function(d){
+                        ////对操作进行初始化
+                        var xml="";
+                        if(d.canedit1 != undefined && d.canedit1 =="1")
+                        {
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogre('修改发票', '${ctx}/workinvoice/workInvoice/form?id=" + d.id + "','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.canedit2 != undefined && d.canedit2 =="1")
+                        {
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('修改发票', '${ctx}/workinvoice/workInvoice/form?id=" + d.id + "&tabId=3','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.canedit3 != undefined && d.canedit3 =="1")
+                        {
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('重新申请发票', '${ctx}/workinvoice/workInvoice/form?id=" + d.id + "&tabId=4','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.candelete != undefined && d.candelete =="1")
+                        {
+                            xml += "<a href=\"${ctx}/workinvoice/workInvoice/delete?id=" + d.id + "\" onclick=\"return confirmx('确认要删除该发票记录吗?', this.href)\"   class=\"op-btn op-btn-delete\"><i class=\"fa fa-trash\"></i> 删除</a>";
+                        }
+                        if(d.cancancel != undefined && d.cancancel =="1")
+                        {
+                            xml += "<a href=\"${ctx}/workinvoice/workInvoice/cancelInvalidate?id="+ d.id +"\" onclick=\"return confirmx('确认要强制撤回?', this.href)\" class=\"op-btn op-btn-cancel\" ><i class=\"glyphicon glyphicon-share-alt\"></i> 撤回</a>";
+                        }
+                        if(d.canalter != undefined && d.canalter =="1")
+                        {
+                            xml += "<a href=\"javascript:void(0)\" onclick=\"contractOpenDialogre('变更发票管理', '${ctx}/workinvoice/workInvoice/alterForm?id="+ d.id +"','95%','95%')\" class=\"op-btn op-btn-revert\" ><i class=\"fa fa-edit\"></i> 变更</a>";
+                        }
+                        return xml;
+
+                    }}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="workInvoice" varStatus="index"><c:set var="Srole" scope="session" value="<%= UserUtils.getSelectRole().get(0).getEnname()%>"/>
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${workInvoice.id}"
+                    ,"invoiceNum":"${workInvoice.number}"
+                    ,"projNum":"${workInvoice.project.projectId}"
+                    ,"projName":"${workInvoice.project.projectName}"
+                    ,"clientName":"${workInvoice.client.name}"
+                    ,"officeName":"${workInvoice.office.name}"
+                    ,"money":"<fmt:formatNumber value="${workInvoice.money}" pattern="#,#0.00"/>"
+                    ,"createDate":"<fmt:formatDate value="${workInvoice.createDate}" pattern="yyyy-MM-dd"/>"
+                    ,"status":"${workInvoice.invoiceState}"
+                    <c:if test="${workInvoice.invoiceState == 1 && fns:getUser().id == workInvoice.createBy.id}"><shiro:hasPermission name="workinvoice:workInvoice:edit">,"canedit1":"1"</shiro:hasPermission></c:if><%--暂存-修改--%>
+                    <c:if test="${workInvoice.invoiceState == '4' && fns:getUser().id == workInvoice.createBy.id}">,"canedit2":"1"</c:if><%--驳回--修改--%>
+                    <c:if test="${workInvoice.invoiceState == '3' && fns:getUser().id == workInvoice.createBy.id}">,"canedit3":"1"</c:if><%--撤回--修改--%>
+                    <c:if test="${fns:getUser().id == workInvoice.createBy.id}"><c:if test="${workInvoice.invoiceState == '1' or workInvoice.invoiceState == '3' or workInvoice.invoiceState == '4'}"><shiro:hasPermission name="workinvoice:workInvoice:del">,"candelete":"1"</shiro:hasPermission></c:if></c:if>
+                    <c:if test="${workInvoice.invoiceState == '2' && fns:getUser().id == workInvoice.createBy.id}">,"cancancel":"1"</c:if>
+					<shiro:hasPermission name="workinvoice:workInvoice:alteredit">
+                    <c:if test="${workInvoice.invoiceState == '5'}">,"canalter":"1"</c:if>
+                    </shiro:hasPermission>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+
+    resizeListTable();/*消除由于有竖向滚动条造成table出现横向滚动条*/
+</script>
+<script>
+    resizeListWindow2();
+    $(window).resize(function(){
+        resizeListWindow2();
+    });
+</script>
+
+</body>
+</html>

+ 575 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceModify.jsp

@@ -0,0 +1,575 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            //debugger
+            if(validateForm.form()){
+                if(obj == 2){
+                    $("#flag").val("no");
+                }else{
+                    $("#flag").val("yes");
+                }
+                $("#inputForm").submit();
+                return true;
+            }
+            return false;
+        }
+        $(document).ready(function() {
+            /*$('#money').keyup(function(){
+                var c=$(this);
+                if(/[^\d]/.test(c.val())){//替换非数字字符
+                    var temp_amount=c.val().replace(/[^\d]/g,'');
+                    $(this).val(temp_amount);
+                }
+            })*/
+            jQuery.validator.addMethod("isUscCode", function(value, element) {
+                if (this.optional(element)){
+                    return true;
+                }
+                var uscCode = /^((\w{15})|(\w{18})|(\w{20}))$/;
+                return uscCode.test(value);
+            }, "请填写正确的纳税人识别号");
+
+            $("input[name='ext']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                if(radioVal == 0){
+                    $("#td1").removeClass("hide");
+                    $("#td2").addClass("hide");
+                    $("#tr1").show()
+                }else{
+                    $("#td1").addClass("hide");
+                    $("#td2").removeClass("hide");
+                    $("#tr1").hide()
+                }
+            });
+            if("${workInvoice.ext}" == "1"){
+                $("#ext1").iCheck('check')
+            }else{
+                $("#ext").iCheck('check')
+            }
+            if("${workInvoice.invoiceType}" == "1"){
+                $("#invoiceType1").iCheck('check');
+                $(".invoicetype").show();
+            }else{
+                $("#invoiceType").iCheck('check');
+                $(".invoicetype").hide();
+            }
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+            $("input[name='invoiceType']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                //专票必填
+                if(radioVal == 1){
+                    $(".invoicetype").show();
+                    $("#bank").attr("class","form-control required layui-input");
+                    $("#bankNumber").attr("class","form-control number required layui-input");
+                    $("#orUnicode").attr("class","form-control isUscCode required layui-input");
+                    $("#address").attr("class","form-control required layui-input");
+                    $("#telephone").attr("class","form-control isTel required layui-input");
+                }else if(radioVal == 2){
+                    $(".invoicetype").hide();
+                    $("#bank").attr("class","form-control layui-input");
+                    $("#bankNumber").attr("class","form-control number layui-input");
+                    $("#orUnicode").attr("class","form-control isUscCode layui-input");
+                    $("#address").attr("class","form-control layui-input");
+                    $("#telephone").attr("class","form-control isTel layui-input");
+                }
+            });
+
+        });
+        function setValuee(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getWorkClientInfo',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#bank").val(d.bank);
+                    $("#orUnicode").val(d.orUnicode);
+                    $("#bankNumber").val(d.bankNumber);
+                    $("#telephone").val(d.telephone);
+                    $("#address").val(d.adress);
+                    $("#ids").val(d.ids);
+                }
+            })
+        }
+        function setDp(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getUserDp',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#dp").val(d.dp);
+                }
+            })
+        }
+        function setPNumber(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getPNumber',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#cName").val(d.cName);
+                    $("#officeName").val(d.officeName);
+                    $("#officeId").val(d.officeId);
+                }
+            })
+        }
+
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workAccountList tr").length;
+            if(list == '#workAccountList' && idx1 < 100){
+                bornTemplete(list, idx, tpl, row, idx1);
+            }
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        /*function delRow(obj, prefix) {
+            var id = $(prefix + "_id");
+            var delFlag = $(prefix + "_delFlag");
+            if (id.val() == "") {
+                $(obj).parent().parent().remove();
+            } else if (delFlag.val() == "0") {
+                delFlag.val("1");
+                $(obj).html("&divide;").attr("title", "撤回删除");
+                $(obj).parent().parent().addClass("error");
+                $(obj).parent().parent().addClass("hide");
+            } else if (delFlag.val() == "1") {
+                delFlag.val("0");
+                $(obj).html("&times;").attr("title", "删除");
+                $(obj).parent().parent().removeClass("error");
+            }
+            // var idx1 = $("#workAccountList tr").length; //tr 总数
+            // for (var i = 0; i < idx1; i++) {
+            //     $("#workAccountList tr").eq(i).find("td").eq(1).html(i + 1);
+            // }
+        }*/
+        function provinceForShort(province){
+            if(province == "北京市")
+                return "京";
+            else if(province == "天津市")
+                return "津";
+            else if(province == "重庆市")
+                return "渝";
+            else if(province == "上海市")
+                return "沪";
+            else if(province == "河北省")
+                return "冀";
+            else if(province == "山西省")
+                return "晋";
+            else if(province == "辽宁省")
+                return "辽";
+            else if(province == "吉林省")
+                return "吉";
+            else if(province == "黑龙江省")
+                return "黑";
+            else if(province == "江苏省")
+                return "苏";
+            else if(province == "浙江省")
+                return "浙";
+            else if(province == "安徽省")
+                return "皖";
+            else if(province == "福建省")
+                return "闽";
+            else if(province == "江西省")
+                return "赣";
+            else if(province == "山东省")
+                return "鲁";
+            else if(province == "河南省")
+                return "豫";
+            else if(province == "湖北省")
+                return "鄂";
+            else if(province == "湖南省")
+                return "湘";
+            else if(province == "广东省")
+                return "粤";
+            else if(province == "海南省")
+                return "琼";
+            else if(province == "四川省")
+                return "川/蜀";
+            else if(province == "贵州省")
+                return "黔/贵";
+            else if(province == "云南省")
+                return "云/滇";
+            else if(province == "陕西省")
+                return "陕/秦";
+            else if(province == "甘肃省")
+                return "甘/陇";
+            else if(province == "青海省")
+                return "青";
+            else if(province == "台湾省")
+                return "台";
+            else if(province == "内蒙古自治区")
+                return "内蒙古";
+            else if(province == "广西壮族自治区")
+                return "桂";
+            else if(province == "宁夏回族自治区")
+                return "宁";
+            else if(province == "新疆维吾尔自治区 ")
+                return "新";
+            else if(province == "西藏自治区")
+                return "藏";
+            else if(province == "香港特别行政区")
+                return "港";
+            else if(province == "澳门特别行政区")
+                return "澳";
+        }
+
+        function setVs(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('allPrice','proportion');
+            var value = obj.value;
+            var p = $("#price").val() || 0;
+            if(!p || p == 0){
+                parent.layer.msg("请先填写造价指标,且不能为零",{icon:5});
+                return;
+            }
+            var num = value/p ;
+            if(!/^\d+(\.\d{1,2})?$/.test( value )){
+                parent.layer.msg("合价必须输入数字",{icon:5});
+            }else{
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+            }
+        }
+        function setTaxMoney(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('tax','taxMoney');
+            var t = a.replace('tax','totalMoney');
+            var tr = a.replace('tax','taxRate');
+            var value = obj.value || 0;
+            console.log("-value----"+value);
+            var tax = 1 + value/100;
+            console.log("-tax----"+tax);
+            var p = $("#" +  t ).val() || 0;//获取价税合计
+            console.log("-----"+p);
+            if(!p || p == 0){
+                parent.layer.msg("请先填写价税合计,且不能为零",{icon:5});
+                return;
+            }
+            var num = p/tax || 0;
+            console.log("-----"+num);
+            if(!/^\d+(\.\d{1,2})?$/.test( tax )){
+                parent.layer.msg("税率必须输入数字",{icon:5});
+            }else{
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+                var taxRate = p - num;
+                $("#" +  tr ).val(parseFloat(taxRate.toFixed(2)));
+            }
+        }
+
+        /*function setV(obj){
+            var a =  $(obj).attr("id");
+            var b = $("#province").val();
+            var c = provinceForShort(b);//开票单位所在省/直辖市简称
+            var date=new Date;
+            var year=date.getFullYear();
+            var month=date.getMonth()+1;
+            month =(month<10 ? "0"+month:month);
+            var mydate = (year.toString()+month.toString());
+            var timestamp="["+mydate+"]";//获取固定格式年月
+			var number = c+timestamp;
+            $("#" +  a ).val(number);
+        }*/
+        function setV(obj){
+            var a =  $(obj).attr("id");
+            var c = "京";
+            var date=new Date;
+            var year=date.getFullYear();
+            var month=date.getMonth()+1;
+            month =(month<10 ? "0"+month:month);
+            var mydate = (year.toString()+month.toString());
+            var timestamp="["+mydate+"]";//获取固定格式年月
+            var number = c+timestamp;
+            $("#" +  a ).val(number);
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/workinvoice/workInvoice/saveAudit" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="invoiceDate"/>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+			<form:hidden path="province" id="province"/>
+			<%--<form:hidden path="invoiceNumber"/>--%>
+
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="hidden" value="" id ="ids">
+						<sys:gridselectcallprojectt url="${ctx}/workinvoice/workInvoice/selectproject" id="project" name="project.id"  value="${workInvoice.project.id}"  title="选择所属项目" labelName="workInvoice.project.projectName"
+													labelValue="${workInvoice.project.projectName}" cssClass="form-control required layui-input" fieldLabels="项目" fieldKeys="projectName" searchLabel="项目名称" searchKey="projectName" ></sys:gridselectcallprojectt>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">发票申请编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<form:input path="number" htmlEscape="false" readonly="true"   class="form-control layui-input"/>
+							<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workInvoice.invoiceState}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoice.invoiceState, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>合同名称:</label>
+					<div class="layui-input-block">
+						<form:input id ="cInfoName" path="project.workContractInfo.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+					<div class="layui-input-block">
+						<form:input id ="pNumber" path="project.projectId" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>委托方:</label>
+					<div class="layui-input-block">
+						<form:input id ="cName" path="project.workContractInfo.client.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<%--<div class="layui-item layui-col-sm6">--%>
+					<%--<label class="layui-form-label"><span class="require-item">*</span>所属部门:</label>--%>
+					<%--<div class="layui-input-block">--%>
+						<%--<form:input id ="officeName" path="office.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>--%>
+						<%--<form:hidden path="office.id" id ="officeId" />--%>
+					<%--</div>--%>
+				<%--</div>--%>
+			</div>
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>发票详情</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+					<div class="layui-input-block">
+						<c:choose>
+							<c:when test="${workInvoice.invoiceState == 4}">
+								<c:choose>
+									<c:when test="${workInvoice.ext ==0}">
+										<input value = "本公司开票" readonly="true" class="form-control layui-input"/>
+									</c:when>
+									<c:otherwise>
+										<input value = "上级公司开票" readonly="true"  class="form-control layui-input"/>
+									</c:otherwise>
+								</c:choose>
+							</c:when>
+							<c:otherwise>
+								<input type="radio" class="i-checks" name="ext" checked id="ext" value="0">
+								<label for="ext">本公司开票</label>
+								<input type="radio" class="i-checks" name="ext" id="ext1" value="1">
+								<label for="ext1">上级公司开票</label>
+							</c:otherwise>
+						</c:choose>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+					<div class="layui-input-block">
+						<input type="radio" class="i-checks" name="invoiceType" checked id="invoiceType1" value="1">
+						<label for="invoiceType1">专票</label>
+						<input type="radio" class="i-checks" name="invoiceType" id="invoiceType" value="2">
+						<label for="invoiceType">普票</label>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+					<div class="layui-input-block with-icon">
+						<sys:gridselect url="${ctx}/workinvoice/workInvoice/selectclient" id="client" name="client.id"  value="${workInvoice.client.id}"  title="选择开票单位" labelName="workInvoice.client.name"
+										labelValue="${workInvoice.client.name}" cssClass="form-control required layui-input" fieldLabels="单位" fieldKeys="name" searchLabel="客户名称" searchKey="name" ></sys:gridselect>
+						</td>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item invoicetype">*</span>纳税人识别号:</label>
+					<div class="layui-input-block">
+						<form:input id="orUnicode" path="orUnicode" htmlEscape="false"    class="form-control isUscCode layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item invoicetype">*</span>地址:</label>
+					<div class="layui-input-block">
+						<form:input id="address" path="address" htmlEscape="false"    class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item invoicetype">*</span>电话:</label>
+					<div class="layui-input-block">
+						<form:input id="telephone" path="telephone" htmlEscape="false"    class="form-control isTel layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item invoicetype">*</span>开户银行:</label>
+					<div class="layui-input-block">
+						<form:input id ="bank"  path="bank" htmlEscape="false"   class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item invoicetype">*</span>银行账号:</label>
+					<div class="layui-input-block">
+						<form:input id="bankNumber" path="bankNumber" htmlEscape="false"   class="form-control number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label"><span class="require-item">*</span>价税合计(元):</label>
+					<div class="layui-input-block">
+						<input name="money" htmlEscape="false"  value="<fmt:formatNumber value="${workInvoice.money}" pattern="#.00#"/>" class="form-control required number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>开票内容要求:</label>
+					<div class="layui-input-block">
+						<form:textarea path="content" id="contractTypeDoc" htmlEscape="false" rows="4"    class="form-control required"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票人:</label>
+					<div class="layui-input-block">
+						<form:input id=""  path="" htmlEscape="false" readonly="true"  class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<form:input id=""  path="" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">领票时间:</label>
+					<div class="layui-input-block">
+						<form:input id=""  path="" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>发票明细</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container">
+					<table id="contentTable" class="table table-bordered table-condensed can-edit">
+						<thead>
+						<tr>
+							<th><span class="require-item">*</span>发票代码</th>
+							<th><span class="require-item">*</span>发票号</th>
+							<th><span class="require-item">*</span>价税合计</th>
+							<th><span class="require-item">*</span>税率</th>
+							<th><span class="require-item">*</span>金额</th>
+							<th><span class="require-item">*</span>税额</th>
+							<th><span class="require-item">*</span>累计登记金额</th>
+							<th width="150px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="workAccountList">
+						</tbody>
+					</table>
+					<script type="text/template" id="workAccountListTpl">//<!--
+                                    <tr id="workAccountList{{idx}}">
+                                        <td class="hide">
+                                            <input id="workAccountList{{idx}}_id" name="workAccountList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                            <input id="workAccountList{{idx}}_delFlag" name="workAccountList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                    	<td>
+                                        	<input id="workAccountList{{idx}}_code" name="workAccountList[{{idx}}].code" type="text" value="{{row.code}}"    class="form-control required"/>
+                                   		 </td>
+                                    	 <td>
+                                        	<input id="workAccountList{{idx}}_number" name="workAccountList[{{idx}}].number" type="text" value="{{row.number}}"    class="form-control required"/>
+                                   		 </td>
+                                    	<td>
+                                            <input id="workAccountList{{idx}}_totalMoney"  name="workAccountList[{{idx}}].totalMoney" type="text" value="{{row.totalMoney}}"    class="form-control required"/>
+                                        </td>
+                                        <td>
+                                        <div class="input-group">
+                                            <input id="workAccountList{{idx}}_tax" onblur="setTaxMoney(this)" name="workAccountList[{{idx}}].tax" type="text" value="{{row.tax}}"    class="form-control number required"/><span class="input-group-addon">%</span>
+                                            </div>
+
+                                        </td>
+                                        <td>
+                                            <input id="workAccountList{{idx}}_taxMoney" name="workAccountList[{{idx}}].taxMoney" type="text" value="{{row.taxMoney}}"    class="form-control required"/>
+                                        </td>
+										<td>
+                                            <input id="workAccountList{{idx}}_taxRate" name="workAccountList[{{idx}}].taxRate" type="text" value="{{row.taxRate}}"    class="form-control required"/>
+                                        </td>
+                                        <td>
+                                            <input id="workAccountList{{idx}}_incomeMoney" name="workAccountList[{{idx}}].incomeMoney" type="text" value="0"  readonly="true"  class="form-control required"/>
+                                        </td>
+
+                                            <input id="workAccountList{{idx}}_state" name="workAccountList[{{idx}}].state"  type="hidden" value="正常"   class="form-control"/>
+
+                                            <input id="workAccountList{{idx}}_backSign" name="workAccountList[{{idx}}].backSign"  type="hidden" value="正常"  readonly="true"  class="form-control required"/>
+
+                                            <input id="workAccountList{{idx}}_backNumber" name="workAccountList[{{idx}}].backNumber"  type="hidden" value=""  readonly="true"  class="form-control required"/>
+
+
+                                        <td class="text-center" width="10">
+                                            {{#delBtn}}<span class="close" onclick="delRow(this, '#workAccountList{{idx}}')" title="删除">&times;</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+                        var workAccountListRowIdx = 0, workAccountListTpl = $("#workAccountListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                        $(document).ready(function() {
+                            var data = ${fns:toJson(workInvoice.workAccountList)};
+                            for (var i=0; i<data.length; i++){
+                                addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl, data[i]);
+                                workAccountListRowIdx = workAccountListRowIdx + 1;
+                            }
+                        });
+					</script></div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 15 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceTask.jsp

@@ -0,0 +1,15 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票流程追踪</title>
+	<meta name="decorator" content="default"/>
+</head>
+<body class="gray-bg">
+	<div class="container form layui-form">
+        <act:flowChart procInsId="${processInstanceId}"/>
+        <act:histoicFlow procInsId="${processInstanceId}"/>
+	</div>
+</body>
+</html>
+

+ 205 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceTodoList.jsp

@@ -0,0 +1,205 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>待审发票管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        $(document).ready(function() {
+            laydate.render({
+                elem: '#beginDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'datetime'
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'datetime'
+            });
+        });
+        function page(n,s){
+            location = '${ctx}/workinvoice/workInvoice/list/?pageNo='+n+'&pageSize='+s;
+        }
+        /**
+         * 签收任务
+         */
+        function claim(taskId) {
+            $.get('${ctx}/act/task/claim' ,{taskId: taskId}, function(data) {
+                if (data == 'true'){
+                    top.$.jBox.tip('签收完成');
+                    location = '${ctx}/workinvoice/workInvoice/workInvoiceTodoList/';
+                }else{
+                    top.$.jBox.tip('签收失败');
+                }
+            });
+        }
+
+        function openDialogre(title,url,width,height,target){
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url ,
+                btn: ['同意','驳回','关闭'],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                    return false;
+                },
+                btn3: function(index){
+                }
+            });
+
+        }
+	</script>
+</head>
+<body class="gray-bg">
+<div class="wrapper wrapper-content">
+	<div class="ibox">
+		<div class="ibox-title" style="height: 70px;">
+			<h5>
+				<ul class="nav nav-tabs">
+					<li><a href="${ctx}/workinvoice/workInvoice/list">发票管理列表</a></li>
+					<li class="active"><a href="${ctx}/workinvoice/workInvoice/workInvoiceTodoList">待办任务</a></li>
+					<li><a href="${ctx}/workinvoice/workInvoice/workInvoiceHistoricList">已办任务</a></li>
+					<%--<li><a href="${ctx}/workprequalification/workPrequalification/form">申请资格预审项目</a></li>--%>
+				</ul>
+			</h5>
+			<%--<div class="ibox-tools">
+				<a class="collapse-link">
+					<i class="fa fa-chevron-up"></i>
+				</a>
+				<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:void(0)">
+					<i class="fa fa-wrench"></i>
+				</a>
+
+			</div>--%>
+		</div>
+
+		<div class="ibox-content">
+			<sys:message content="${message}"/>
+			<!--查询条件-->
+			<div class="row">
+				<div class="col-sm-12">
+					<form:form id="searchForm" modelAttribute="act" action="${ctx}/workinvoice/workInvoice/workInvoiceTodoList" method="get" class="form-inline">
+						<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+						<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+						<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+						<div class="form-group">
+							<label>创建时间:</label>
+							<input id="beginDate"  name="beginDate"  type="text" readonly="readonly" maxlength="20" style="width:200px;" class="laydate-icondate form-control layer-date input-sm"
+								   value="<fmt:formatDate value="${act.beginDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+							 -- 
+							<input id="endDate" name="endDate" type="text" readonly="readonly" maxlength="20" style="width:200px;" class="laydate-icondate form-control layer-date input-sm"
+								   value="<fmt:formatDate value="${act.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+						</div>
+					</form:form>
+					<br/>
+				</div>
+			</div>
+
+			<!-- 工具栏 -->
+			<div class="row">
+				<div class="col-sm-12">
+					<div class="pull-left">
+						<button class="btn btn-white btn-sm " data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i> 刷新</button>
+					</div>
+					<div class="pull-right">
+						<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="search()" ><i class="fa fa-search"></i> 查询</button>
+						<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="reset()" ><i class="fa fa-refresh"></i> 重置</button>
+					</div>
+				</div>
+			</div>
+			<!-- 表格 -->
+			<table id="contentTable" class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+				<thead>
+				<tr>
+					<th style="text-align: center;width: 10%">流程发起人</th>
+					<th style="text-align: center;width: 10%">当前环节</th>
+					<th style="text-align: center;width: 10%">流程名称</th>
+					<th style="text-align: center;width: 8%">流程版本</th>
+					<th style="text-align: center;"  class="">发票申请编号</th>
+					<th style="text-align: center;"  class="">项目编号</th>
+					<th style="text-align: center;"  class="">项目名称</th>
+					<th style="text-align: center;width: 15%">创建时间</th>
+					<th style="text-align: center;width: 8%">操作</th>
+				</tr>
+				</thead>
+				<tbody>
+				<c:forEach items="${list}" var="workInvoice">
+					<c:set var="task" value="${workInvoice.act.task}" />
+					<c:set var="vars" value="${workInvoice.act.vars}" />
+					<c:set var="procDef" value="${workInvoice.act.procDef}" />
+					<c:set var="status" value="${workInvoice.act.status}" />
+					<tr>
+						<td>${workInvoice.act.vars.map.applyUserId}</td>
+						<td>
+							${task.name}
+						</td>
+						<td>${procDef.name}</td>
+						<td><b title='流程版本号'>V: ${procDef.version}</b></td>
+						<td>
+							<a  href="javascript:void(0)" onclick="openDialogView('查看发票管理', '${ctx}/workinvoice/workInvoice/form?id=${workInvoice.id}&tabId=1','80%','80%')">
+								<span title="${workInvoice.number}">${fns:abbr(workInvoice.number,30)}</span>
+							</a>
+						</td>
+						<td>
+								${workInvoice.project.projectId}
+						</td>
+						<td>
+							<span title="${workInvoice.project.projectName}">${fns:abbr(workInvoice.project.projectName,30)}</span>
+						</td>
+						<td><fmt:formatDate value="${task.createTime}" type="both"/></td>
+						<td>
+							<div style="text-align: center">
+							<a href="javascript:void(0)" onclick="openDialogre('发票审核', '${ctx}/workinvoice/workInvoice/applyOnWorkInvoice?taskId=${task.id}&taskName=${fns:urlEncode(task.name)}&taskDefKey=${task.taskDefinitionKey}&procInsId=${task.processInstanceId}&procDefId=${task.processDefinitionId}&status=${status}','80%','80%','','同意','驳回')" class="btn btn-info btn-xs" > 任务办理</a>
+							</div>
+						</td>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+	</div>
+</div>
+</body>
+</html>

+ 243 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceView.jsp

@@ -0,0 +1,243 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			$("#name").focus();
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+	</script>
+</head>
+<body >
+<div class="single-form view-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/workinvoice/workInvoice/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="act.taskId"/>
+		<form:hidden path="act.taskName"/>
+		<form:hidden path="act.taskDefKey"/>
+		<form:hidden path="act.procInsId"/>
+		<form:hidden path="act.procDefId"/>
+		<form:hidden id="flag" path="act.flag"/>
+
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.projectName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票申请编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.number}"/>
+							<span class="input-group-btn">
+							<label class="form-status"><c:choose><c:when test="${ empty workInvoice.invoiceState}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoice.invoiceState, 'audit_state','')}</c:otherwise>	</c:choose></label>
+						</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>合同名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.workContractInfo.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.projectId}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>委托方:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.workContractInfo.client.name}"/>
+					</div>
+				</div>
+				<%--<div class="layui-item layui-col-sm6">--%>
+					<%--<label class="layui-form-label"><span class="require-item">*</span>所属部门:</label>--%>
+					<%--<div class="layui-input-block">--%>
+						<%--<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.office.name}"/>--%>
+					<%--</div>--%>
+				<%--</div>--%>
+			</div>
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>发票详情</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.orUnicode}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">地址:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.address}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.telephone}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block  ">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bank}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bankNumber}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>价税合计(元):</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<fmt:formatNumber value="${workInvoice.money}" pattern="#,#00.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>开票内容要求:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.content}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.drawerName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label">领票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${workInvoice.takeDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>发票明细</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container">
+					<table id="contentTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+							<th><span class="require-item">*</span>发票代码</th>
+							<th><span class="require-item">*</span>发票号</th>
+							<th><span class="require-item">*</span>价税合计</th>
+							<th><span class="require-item">*</span>税率</th>
+							<th><span class="require-item">*</span>金额</th>
+							<th><span class="require-item">*</span>税额</th>
+							<th><span class="require-item">*</span>累计登记金额</th>
+							<th><span class="require-item">*</span>发票状态</th><%--正常--%>
+							<th><span class="require-item">*</span>被退标记</th>
+							<%--<th><span class="require-item">*</span>被退票号</th>
+							<th><span class="require-item">*</span>开票日期</th>--%>
+						</tr>
+						</thead>
+						<tbody id="workAccountList">
+						<c:if test="${not empty workInvoice.workAccountList}">
+						<c:forEach items="${workInvoice.workAccountList}" var="workAccount" varStatus="index">
+							<tr id="workAccountList${index.index}">
+								<td title="${workAccount.code}">
+										${workAccount.code}
+								</td>
+								<td title="${workAccount.number}">
+										${workAccount.number}
+								</td>
+
+								<td title="<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>
+								</td>
+								<td title="${workAccount.tax}">
+										${workAccount.tax}
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>
+								</td>
+								<td title="${workAccount.state}">
+										${workAccount.state}
+								</td>
+								<td title="${workAccount.backSign}">
+										${workAccount.backSign}
+								</td>
+								<%--<td title="${workAccount.backNumber}">
+										${workAccount.backNumber}
+								</td>
+								<td title="<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>">
+									<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>
+								</td>--%>
+							</tr>
+						</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 271 - 0
src/main/webapp/webpage/modules/workinvoicealter/workInvoiceAudita.jsp

@@ -0,0 +1,271 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票审批</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 1) {
+                  $("#flag").val("yes");
+              }else {
+                  $("#flag").val("no");
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+		  return false;
+		}
+		$(document).ready(function() {
+			$("#name").focus();
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+
+            laydate.render({
+                elem: '#invoiceDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+		});
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+	<form:form id="inputForm" modelAttribute="workInvoiceAlter" action="${ctx}/workinvoicealter/workInvoiceAlter/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="home"/>
+		<form:hidden path="act.taskId"/>
+		<form:hidden path="act.taskName"/>
+		<form:hidden path="act.taskDefKey"/>
+		<form:hidden path="act.procInsId"/>
+		<form:hidden path="act.procDefId"/>
+		<form:hidden id="flag" path="act.flag"/>
+		<c:set var="status" value="${workInvoiceAlter.act.status}" />
+
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>基本信息</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+				<div class="layui-input-block  with-icon">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.projectName}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>发票申请编号:</label>
+				<div class="layui-input-block">
+					<div class="input-group">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.number}"/>
+						<span class="input-group-btn">
+							<label class="form-status"><c:choose><c:when test="${ empty workInvoiceAlter.invoiceState}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoiceAlter.invoiceState, 'audit_state','')}</c:otherwise>	</c:choose></label>
+						</span>
+					</div>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>合同名称:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.workContractInfo.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.projectId}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>委托方:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.workContractInfo.client.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>所属部门:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.office.name}"/>
+				</div>
+			</div>
+		</div>
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>发票详情</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoiceAlter.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoiceAlter.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoiceAlter.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoiceAlter.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.client.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">纳税人识别号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.orUnicode}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">地址:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.address}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">电话:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.telephone}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开户银行:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.bank}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">银行账号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.bankNumber}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>价税合计(元):</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<fmt:formatNumber value="${workInvoiceAlter.money}" pattern="#,#00.00"/>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>开票内容要求:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.content}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票人:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.drawerName}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票时间:</label>
+				<div class="layui-input-block  with-icon">
+					<input class="form-control layer-date laydate-icon layui-input laydate-icondate" id="invoiceDate" readonly="true" name="invoiceDate" value="<fmt:formatDate
+							value="${workInvoiceAlter.invoiceDate}" pattern="yyyy-MM-dd"/>">
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm12">
+				<label class="layui-form-label">领票时间:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<fmt:formatDate value="${workInvoiceAlter.takeDate}" pattern="yyyy-MM-dd"/>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm12 with-textarea">
+				<label class="layui-form-label">审批意见:</label>
+				<div class="layui-input-block  with-icon">
+					<form:textarea path="act.comment" class="form-control " rows="5" maxlength="20"/>
+				</div>
+			</div>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>发票明细</h2></div>
+			<div class="layui-item layui-col-xs12 form-table-container">
+				<table id="contentTable" class="table table-bordered table-condensed details">
+					<thead>
+					<tr>
+						<th><span class="require-item">*</span>发票代码</th>
+						<th><span class="require-item">*</span>发票号</th>
+						<th><span class="require-item">*</span>价税合计</th>
+						<th><span class="require-item">*</span>税率</th>
+						<th><span class="require-item">*</span>金额</th>
+						<th><span class="require-item">*</span>税额</th>
+						<th><span class="require-item">*</span>累计登记金额</th>
+						<th><span class="require-item">*</span>发票状态</th><%--正常--%>
+						<th><span class="require-item">*</span>被退标记</th>
+						<th><span class="require-item">*</span>被退票号</th>
+						<th><span class="require-item">*</span>开票日期</th>
+					</tr>
+					</thead>
+					<tbody id="workAccountList">
+					<c:if test="${not empty workInvoiceAlter.workAccountList}">
+						<c:forEach items="${workInvoiceAlter.workAccountList}" var="workAccount" varStatus="index">
+							<tr id="workAccountList${index.index}">
+								<td title="${workAccount.code}">
+										${workAccount.code}
+								</td>
+								<td title="${workAccount.number}">
+										${workAccount.number}
+								</td>
+
+								<td title="<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>
+								</td>
+								<td title="${workAccount.tax}">
+										${workAccount.tax}
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>
+								</td>
+								<td title="${workAccount.state}">
+										${workAccount.state}
+								</td>
+								<td title="${workAccount.backSign}">
+										${workAccount.backSign}
+								</td>
+								<td title="${workAccount.backNumber}">
+										${workAccount.backNumber}
+								</td>
+								<td title="">
+										<%--<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd HH:mm:ss"/>--%>
+								</td>
+							</tr>
+						</c:forEach>
+					</c:if>
+					</tbody>
+				</table>
+			</div>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>审批流程</h2></div>
+			<div class="layui-item layui-col-xs12 form-table-container" >
+				<act:flowChart procInsId="${workInvoiceAlter.act.procInsId}"/>
+				<act:histoicFlow procInsId="${workInvoiceAlter.act.procInsId}" />
+			</div>
+		</div>
+
+		<div class="form-group layui-row page-end"></div>
+	</form:form>
+	</div>
+</div>
+
+</body>
+</html>

+ 540 - 0
src/main/webapp/webpage/modules/workinvoicealter/workInvoiceForma.jsp

@@ -0,0 +1,540 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票审批</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+        var count = 0;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            debugger
+		  if(validateForm.form()){
+              if(obj == 2){
+                  $("#inputForm").attr("action","${ctx}/workinvoicealter/workInvoiceAlter/store");
+              }else{
+                  $("#inputForm").attr("action","${ctx}/workinvoicealter/workInvoiceAlter/save");
+              }
+              var m = ${workInvoiceAlter.money};
+              var money = "0.00";
+              //自动计算出结果并填充在相应的输入框中
+              var size = $("#workAccountList tr").length+count;
+              for (var i = 0;i<size;i++){
+                  var _totalMoney = $("#workAccountList"+i+"_totalMoney").val();
+
+                  var delFlag = $("#workAccountList"+i+"_delFlag").val();
+                  if (_totalMoney!=undefined && isNumber(_totalMoney) && delFlag==0){
+                      if(money==""){
+                          money = parseFloat(_totalMoney).toFixed(2);
+                      }else {
+                          money = (parseFloat(money) + parseFloat(_totalMoney)).toFixed(2);
+                      }
+                  }
+              }
+              if(money != m){
+                  top.layer.alert('发票明细总价税合计与主信息价税合计不等,禁止提交!', {icon: 0});
+                  return;
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+		  return false;
+		}
+		$(document).ready(function() {
+			$("#name").focus();
+            jQuery.validator.addMethod("isUscCode", function(value, element) {
+                if (this.optional(element)){
+                    return true;
+                }
+                var uscCode = /^((\w{15})|(\w{18})|(\w{20}))$/;
+                return uscCode.test(value);
+            }, "请填写正确的纳税人识别号");
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+
+            laydate.render({
+                elem: '#invoiceDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+
+            laydate.render({
+                elem: '#takeDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+		});
+
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workAccountList tr").length;
+            if(list == '#workAccountList' && idx1 < 100){
+                bornTemplete(list, idx, tpl, row, idx1);
+                if($("#invoiceType").val()=="1"){
+                    $("#workAccountList"+idx+"_code").attr("minlength","10");
+                    $("#workAccountList"+idx+"_code").attr("maxlength","10");
+                }else if($("#invoiceType").val()=="2"){
+                    $("#workAccountList"+idx+"_code").attr("minlength","12");
+                    $("#workAccountList"+idx+"_code").attr("maxlength","12");
+                }
+                if(idx>0){
+                    var i = idx-1;
+                    var code = $("#workAccountList"+i+"_code").val();
+                    if(code == null || code == undefined || code == ""){
+                        i = idx-2;
+                        code = $("#workAccountList"+i+"_code").val();
+                        console.log(i);
+                    }
+                    $("#workAccountList"+idx+"_code").val(code);
+                }
+            }
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        function isNumber(val){
+            if(val === "" || val ==null){
+                return false;
+            }
+            var regPos = /^\d+(\.\d+)?$/; //非负浮点数
+            var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
+            if(regPos.test(val) || regNeg.test(val)){
+                return true;
+            }else{
+                return false;
+            }
+
+        }
+        function delRow(obj, prefix) {
+            count++;
+            var id = $(prefix + "_id");
+            var delFlag = $(prefix + "_delFlag");
+            if (id.val() == "") {
+                $(obj).parent().parent().remove();
+            } else if (delFlag.val() == "0") {
+                delFlag.val("1");
+                $(obj).html("&divide;").attr("title", "撤回删除");
+                $(obj).parent().parent().addClass("error");
+                $(obj).parent().parent().addClass("hide");
+            } else if (delFlag.val() == "1") {
+                delFlag.val("0");
+                $(obj).html("&times;").attr("title", "删除");
+                $(obj).parent().parent().removeClass("error");
+            }
+            // var idx1 = $("#workAccountList tr").length; //tr 总数
+            // for (var i = 0; i < idx1; i++) {
+            //     $("#workAccountList tr").eq(i).find("td").eq(1).html(i + 1);
+            // }
+        }
+        function getMoney(value,obj){
+            var aa = $(obj).attr("id");
+            var b = aa.replace('totalMoney','taxMoney');
+            console.log("b====="+b);
+            var tr = aa.replace('totalMoney','taxRate');
+            var m = ${workInvoiceAlter.money};
+            var money = "0.00";
+            //自动计算出结果并填充在相应的输入框中
+            var size = $("#workAccountList tr").length+count;
+            for (var i = 0;i<size;i++){
+                var _totalMoney = $("#workAccountList"+i+"_totalMoney").val();
+
+                var delFlag = $("#workAccountList"+i+"_delFlag").val();
+                if (_totalMoney!=undefined && isNumber(_totalMoney) && delFlag==0){
+                    if(money==""){
+                        money = parseFloat(_totalMoney).toFixed(2);
+                    }else {
+                        money = (parseFloat(money) + parseFloat(_totalMoney)).toFixed(2);
+                    }
+                }
+            }
+            if(money >m){
+                console.log("money--------"+money);
+                $("#" + aa ).val("");
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                parent.layer.msg("发票明细价税合计总值大于主申请发票价税合计",{icon:5});
+                return;
+            }
+        }
+        function setVs(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('allPrice','proportion');
+            var value = obj.value;
+            var p = $("#price").val() || 0;
+            if(!p || p == 0){
+                parent.layer.msg("请先填写造价指标,且不能为零",{icon:5});
+                return;
+            }
+            var num = value/p ;
+            if(!/^\d+(\.\d{1,2})?$/.test( value )){
+                parent.layer.msg("合价必须输入数字",{icon:5});
+            }else{
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+            }
+        }
+        function setTaxMoney(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('tax','taxMoney');
+            var t = a.replace('tax','totalMoney');
+            var tr = a.replace('tax','taxRate');
+            var value = obj.value || 0;
+            if(!value){
+                parent.layer.msg("请正确填写税率",{icon:5});
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                return;
+            }
+            var m = ${workInvoiceAlter.money};
+            var t2 = $("#" +  t ).val();
+            if(!/^\d+(\.\d{1,4})?$/.test( t2 )){
+                parent.layer.msg("请正确填写价税合计",{icon:5});
+                return;
+            }else if(t2 > m) {
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                parent.layer.msg("所填值大于发票总价税合计",{icon:5});
+                return;
+            }
+            // console.log("-value----"+value);
+            var tax = 1 + value/100;
+            // console.log("-tax----"+tax);
+            var p = $("#" +  t ).val() || 0;//获取价税合计
+            //  console.log("-----"+p);
+            if(!p || p == 0){
+                parent.layer.msg("请先填写价税合计,且不能为零",{icon:5});
+                return;
+            }
+            var num = p/tax || 0;
+            // console.log("-----"+num);
+            $("#" +  b ).val(parseFloat(num.toFixed(2)));
+            var taxRate = p - num;
+            $("#" +  tr ).val(parseFloat(taxRate.toFixed(2)));
+        }
+        function setCheck(obj){
+            var aa = $(obj).attr("id");
+            var b = aa.replace('totalMoney','taxMoney');
+            //console.log("b====="+b);
+            var tr = aa.replace('totalMoney','taxRate');
+            // console.log("tr====="+tr);
+            $("#" +  b ).val("");
+            $("#" +  tr ).val("");
+            var m = ${workInvoiceAlter.money};
+            //  console.log("-m----"+m);
+            var a = obj.value;
+            // console.log("-a----"+a);
+            if(a > m) {
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                parent.layer.msg("所填值大于发票总价税合计",{icon:5});
+                return;
+            }
+        }
+        function setV(obj){
+            var a =  $(obj).attr("id");
+            var c = "京";
+            var date=new Date;
+            var year=date.getFullYear();
+            var month=date.getMonth()+1;
+            month =(month<10 ? "0"+month:month);
+            var mydate = (year.toString()+month.toString());
+            var timestamp="["+mydate+"]";//获取固定格式年月
+            var number = c+timestamp;
+            $("#" +  a ).val(number);
+        }
+        function checkSame(obj){
+            var value =obj.value;
+            var a = $(obj).attr("id");
+            var idx = a.replace('_number','');
+            var idxx = idx.replace('workAccountList','')
+            //console.log(idxx);
+            var b = a.replace('number','oldNumber');
+            var oldValue = $("#" +  b ).val();
+
+            var size = $("#workAccountList tr").length+count;
+            for (var i = 0;i<size;i++){
+                var _number = $("#workAccountList"+i+"_number").val();
+
+                var delFlag = $("#workAccountList"+i+"_delFlag").val();
+                if (_number!=undefined&& delFlag==0 && i!= idxx ){
+                    if(_number == value){
+                        $("#" +  a ).val("");
+                        parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+                        return;
+                    }
+                }
+            }
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/checkSame',
+                data:{
+                    "number":value,"oldNumber":oldValue
+                },
+                success:function(data){
+                    //console.log("========data"+data);
+                    if("false" == data){
+                        $("#" +  a ).val("");
+                        parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+                        return;
+                    }
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+	<form:form id="inputForm" modelAttribute="workInvoiceAlter" action="${ctx}/workinvoicealter/workInvoiceAlter/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="project.id"/>
+		<form:hidden path="office.id"/>
+		<form:hidden path="workInvoice.id"/>
+		<form:hidden path="client.id"/>
+		<form:hidden path="ext"/>
+		<form:hidden path="invoiceType"/>
+		<form:hidden path="province" id="province"/>
+		<c:set var="status" value="${workInvoiceAlter.act.status}" />
+
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>基本信息</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.projectName}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">发票申请编号:</label>
+				<div class="layui-input-block">
+					<div class="input-group">
+						<form:input path="number" htmlEscape="false" readonly="true"   class="form-control layui-input"/>
+						<span class="input-group-btn">
+							<label class="form-status"><c:choose><c:when test="${ empty workInvoiceAlter.invoiceState}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoiceAlter.invoiceState, 'audit_state','')}</c:otherwise></c:choose></label>
+						</span>
+					</div>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>合同名称:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.workContractInfo.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.projectId}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>委托方:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.workContractInfo.client.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>所属部门:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.office.name}"/>
+				</div>
+			</div>
+		</div>
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>发票详情</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoiceAlter.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoiceAlter.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true" id="invoiceType"  class="form-control layui-input" value="<c:choose><c:when test="${workInvoiceAlter.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoiceAlter.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.client.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">纳税人识别号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"  name="orUnicode" class="form-control isUscCode layui-input" value="${workInvoiceAlter.orUnicode}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">地址:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true" name="address"  class="form-control layui-input" value="${workInvoiceAlter.address}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">电话:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"  name="telephone" class="form-control layui-input" value="${workInvoiceAlter.telephone}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开户银行:</label>
+				<div class="layui-input-block">
+					<form:input id ="bank"  path="bank" readonly="true"  htmlEscape="false"   class="form-control layui-input"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">银行账号:</label>
+				<div class="layui-input-block">
+					<form:input id="bankNumber" path="bankNumber" readonly="true" htmlEscape="false"   class="form-control layui-input"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>价税合计(元):</label>
+				<div class="layui-input-block">
+					<input name="money" htmlEscape="false"  value="<fmt:formatNumber value="${workInvoiceAlter.money}" pattern="#.00#"/>" readonly="true" class="form-control layui-input"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm12 with-textarea">
+				<label class="layui-form-label"><span class="require-item">*</span>开票内容要求:</label>
+				<div class="layui-input-block">
+					<form:textarea path="content" id="contractTypeDoc" readonly="true" htmlEscape="false" rows="4"    class="form-control required"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票人:</label>
+				<div class="layui-input-block">
+					<form:input id=""  path="drawerName" htmlEscape="false" readonly="true"  class="form-control layui-input"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票时间:</label>
+				<div class="layui-input-block">
+					<input class="form-control layer-date laydate-icon layui-input laydate-icondate" id="invoiceDate" readonly="true" name="invoiceDate" value="<fmt:formatDate
+							value="${workInvoiceAlter.invoiceDate}" pattern="yyyy-MM-dd"/>">
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">领票时间:</label>
+				<div class="layui-input-block">
+					<input class="form-control layer-date laydate-icon layui-input laydate-icondate" id="takeDate" readonly="true"  name="takeDate" value="<fmt:formatDate
+							value="${workInvoiceAlter.takeDate}" pattern="yyyy-MM-dd"/>">
+				</div>
+			</div>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>发票明细</h2></div>
+			<div class="layui-item nav-btns">
+				<a class="nav-btn nav-btn-add" onclick="addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl);workAccountListRowIdx = workAccountListRowIdx + 1;" title="新增"><i class="fa fa-plus"></i>&nbsp;新增</a>
+			</div>
+			<div class="layui-item layui-col-xs12 form-table-container">
+				<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+					<thead>
+					<tr>
+						<th><span class="require-item">*</span>发票代码</th>
+						<th><span class="require-item">*</span>发票号</th>
+						<th width="100px"><span class="require-item">*</span>价税合计</th>
+						<th width="80px"><span class="require-item">*</span>税率</th>
+						<th width="100px"><span class="require-item">*</span>金额</th>
+						<th width="100px"><span class="require-item">*</span>税额</th>
+						<th width="100px"><span class="require-item">*</span>累计登记金额</th>
+						<th width="80px">操作</th>
+							<%--<th><span class="require-item">*</span>发票状态</th>&lt;%&ndash;正常&ndash;%&gt;--%>
+							<%--<th><span class="require-item">*</span>被退标记</th>--%>
+							<%--<th><span class="require-item">*</span>被退票号</th>--%>
+							<%--<th><span class="require-item">*</span>开票日期</th>--%>
+					</tr>
+					</thead>
+					<tbody id="workAccountList">
+					</tbody>
+				</table>
+
+						<script type="text/template" id="workAccountListTpl">//<!--
+                                    <tr id="workAccountList{{idx}}">
+                                        <td class="hide">
+                                        	<input id="workAccountList{{idx}}_id" name="workAccountList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                            <input id="workAccountList{{idx}}_delFlag" name="workAccountList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                    	<td>
+                                        	<input id="workAccountList{{idx}}_code" name="workAccountList[{{idx}}].code" type="text" value="{{row.code}}"    class="form-control number required"/>
+                                   		 </td>
+                                    	 <td>
+                                        	<input id="workAccountList{{idx}}_number" name="workAccountList[{{idx}}].number" onchange="checkSame(this)" type="text" value="{{row.number}}"  minlength="8" maxlength="8"  class="form-control number required"/>
+									 		<input type="hidden" id="workAccountList{{idx}}_oldNumber" value="{{row.number}}"/>
+                                   		 </td>
+                                    	<td>
+                                            <input id="workAccountList{{idx}}_totalMoney"  onblur="setCheck(this)" onchange="getMoney(this.value,this)" name="workAccountList[{{idx}}].totalMoney" type="text" value="{{row.totalMoney}}"    class="form-control number required"/>
+                                        </td>
+                                        <td>
+                                        <div class="input-group">
+                                            <input id="workAccountList{{idx}}_tax" onblur="setTaxMoney(this)" name="workAccountList[{{idx}}].tax" type="text" value="{{row.tax}}"    class="form-control number required"/><span class="input-group-addon input-height">%</span>
+                                            </div>
+
+                                        </td>
+                                        <td>
+                                            <input id="workAccountList{{idx}}_taxMoney" name="workAccountList[{{idx}}].taxMoney" type="text" value="{{row.taxMoney}}"    class="form-control number required"/>
+                                        </td>
+										<td>
+                                            <input id="workAccountList{{idx}}_taxRate" name="workAccountList[{{idx}}].taxRate" type="text" value="{{row.taxRate}}"    class="form-control number required"/>
+                                        </td>
+                                        <td>
+                                            <input id="workAccountList{{idx}}_incomeMoney" name="workAccountList[{{idx}}].incomeMoney" type="text" value="0"  readonly="true"  class="form-control required"/>
+                                        </td>
+
+                                            <input id="workAccountList{{idx}}_state" name="workAccountList[{{idx}}].state"  type="hidden" value="正常"   class="form-control"/>
+
+                                            <input id="workAccountList{{idx}}_backSign" name="workAccountList[{{idx}}].backSign"  type="hidden" value="正常"  readonly="true"  class="form-control required"/>
+
+                                            <input id="workAccountList{{idx}}_backNumber" name="workAccountList[{{idx}}].backNumber"  type="hidden" value=""  readonly="true"  class="form-control required"/>
+
+
+                                        <td class="text-center op-td">
+                                            {{#delBtn}}<span class="op-btn op-btn-delete" onclick="delRow(this, '#workAccountList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+						</script>
+						<script type="text/javascript">
+                            var workAccountListRowIdx = 0, workAccountListTpl = $("#workAccountListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                            $(document).ready(function() {
+                                var data = ${fns:toJson(workInvoiceAlter.workAccountList)};
+                                for (var i=0; i<data.length; i++){
+                                    addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl, data[i]);
+                                    workAccountListRowIdx = workAccountListRowIdx + 1;
+                                }
+                            });
+						</script>
+
+					</div>
+		</div>
+		<div class="form-group layui-row page-end"></div>
+	</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 539 - 0
src/main/webapp/webpage/modules/workinvoicealter/workInvoiceFormas.jsp

@@ -0,0 +1,539 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票审批</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+        var count = 0;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 2){
+                  $("#inputForm").attr("action","${ctx}/workinvoicealter/workInvoiceAlter/store");
+              }else{
+                  $("#inputForm").attr("action","${ctx}/workinvoicealter/workInvoiceAlter/save");
+              }
+              var m = ${workInvoiceAlter.money};
+              var money = "0.00";
+              //自动计算出结果并填充在相应的输入框中
+              var size = $("#workAccountList tr").length+count;
+              for (var i = 0;i<size;i++){
+                  var _totalMoney = $("#workAccountList"+i+"_totalMoney").val();
+
+                  var delFlag = $("#workAccountList"+i+"_delFlag").val();
+                  if (_totalMoney!=undefined && isNumber(_totalMoney) && delFlag==0){
+                      if(money==""){
+                          money = parseFloat(_totalMoney).toFixed(2);
+                      }else {
+                          money = (parseFloat(money) + parseFloat(_totalMoney)).toFixed(2);
+                      }
+                  }
+              }
+              if(money != m){
+                  top.layer.alert('发票明细总价税合计与主信息价税合计不等,禁止提交!', {icon: 0});
+                  return;
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+		  return false;
+		}
+		$(document).ready(function() {
+			$("#name").focus();
+            jQuery.validator.addMethod("isUscCode", function(value, element) {
+                if (this.optional(element)){
+                    return true;
+                }
+                var uscCode = /^((\w{15})|(\w{18})|(\w{20}))$/;
+                return uscCode.test(value);
+            }, "请填写正确的纳税人识别号");
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+
+            laydate.render({
+                elem: '#invoiceDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+
+            laydate.render({
+                elem: '#takeDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+		});
+
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workAccountList tr").length;
+            if(list == '#workAccountList' && idx1 < 100){
+                bornTemplete(list, idx, tpl, row, idx1);
+                if($("#invoiceType").val()=="1"){
+                    $("#workAccountList"+idx+"_code").attr("minlength","10");
+                    $("#workAccountList"+idx+"_code").attr("maxlength","10");
+                }else if($("#invoiceType").val()=="2"){
+                    $("#workAccountList"+idx+"_code").attr("minlength","12");
+                    $("#workAccountList"+idx+"_code").attr("maxlength","12");
+                }
+                if(idx>0){
+                    var i = idx-1;
+                    var code = $("#workAccountList"+i+"_code").val();
+                    if(code == null || code == undefined || code == ""){
+                        i = idx-2;
+                        code = $("#workAccountList"+i+"_code").val();
+                        console.log(i);
+                    }
+                    $("#workAccountList"+idx+"_code").val(code);
+                }
+            }
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        function isNumber(val){
+            if(val === "" || val ==null){
+                return false;
+            }
+            var regPos = /^\d+(\.\d+)?$/; //非负浮点数
+            var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
+            if(regPos.test(val) || regNeg.test(val)){
+                return true;
+            }else{
+                return false;
+            }
+
+        }
+        function delRow(obj, prefix) {
+            count++;
+            var id = $(prefix + "_id");
+            var delFlag = $(prefix + "_delFlag");
+            if (id.val() == "") {
+                $(obj).parent().parent().remove();
+            } else if (delFlag.val() == "0") {
+                delFlag.val("1");
+                $(obj).html("&divide;").attr("title", "撤回删除");
+                $(obj).parent().parent().addClass("error");
+                $(obj).parent().parent().addClass("hide");
+            } else if (delFlag.val() == "1") {
+                delFlag.val("0");
+                $(obj).html("&times;").attr("title", "删除");
+                $(obj).parent().parent().removeClass("error");
+            }
+            // var idx1 = $("#workAccountList tr").length; //tr 总数
+            // for (var i = 0; i < idx1; i++) {
+            //     $("#workAccountList tr").eq(i).find("td").eq(1).html(i + 1);
+            // }
+        }
+        function getMoney(value,obj){
+            var aa = $(obj).attr("id");
+            var b = aa.replace('totalMoney','taxMoney');
+            console.log("b====="+b);
+            var tr = aa.replace('totalMoney','taxRate');
+            var m = ${workInvoiceAlter.money};
+            var money = "0.00";
+            //自动计算出结果并填充在相应的输入框中
+            var size = $("#workAccountList tr").length+count;
+            for (var i = 0;i<size;i++){
+                var _totalMoney = $("#workAccountList"+i+"_totalMoney").val();
+
+                var delFlag = $("#workAccountList"+i+"_delFlag").val();
+                if (_totalMoney!=undefined && isNumber(_totalMoney) && delFlag==0){
+                    if(money==""){
+                        money = parseFloat(_totalMoney).toFixed(2);
+                    }else {
+                        money = (parseFloat(money) + parseFloat(_totalMoney)).toFixed(2);
+                    }
+                }
+            }
+            if(money >m){
+                console.log("money--------"+money);
+                $("#" + aa ).val("");
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                parent.layer.msg("发票明细价税合计总值大于主申请发票价税合计",{icon:5});
+                return;
+            }
+        }
+        function setVs(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('allPrice','proportion');
+            var value = obj.value;
+            var p = $("#price").val() || 0;
+            if(!p || p == 0){
+                parent.layer.msg("请先填写造价指标,且不能为零",{icon:5});
+                return;
+            }
+            var num = value/p ;
+            if(!/^\d+(\.\d{1,2})?$/.test( value )){
+                parent.layer.msg("合价必须输入数字",{icon:5});
+            }else{
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+            }
+        }
+        function setTaxMoney(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('tax','taxMoney');
+            var t = a.replace('tax','totalMoney');
+            var tr = a.replace('tax','taxRate');
+            var value = obj.value || 0;
+            if(!value){
+                parent.layer.msg("请正确填写税率",{icon:5});
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                return;
+            }
+            var m = ${workInvoiceAlter.money};
+            var t2 = $("#" +  t ).val();
+            if(!/^\d+(\.\d{1,4})?$/.test( t2 )){
+                parent.layer.msg("请正确填写价税合计",{icon:5});
+                return;
+            }else if(t2 > m) {
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                parent.layer.msg("所填值大于发票总价税合计",{icon:5});
+                return;
+            }
+            // console.log("-value----"+value);
+            var tax = 1 + value/100;
+            // console.log("-tax----"+tax);
+            var p = $("#" +  t ).val() || 0;//获取价税合计
+            //  console.log("-----"+p);
+            if(!p || p == 0){
+                parent.layer.msg("请先填写价税合计,且不能为零",{icon:5});
+                return;
+            }
+            var num = p/tax || 0;
+            // console.log("-----"+num);
+            $("#" +  b ).val(parseFloat(num.toFixed(2)));
+            var taxRate = p - num;
+            $("#" +  tr ).val(parseFloat(taxRate.toFixed(2)));
+        }
+        function setCheck(obj){
+            var aa = $(obj).attr("id");
+            var b = aa.replace('totalMoney','taxMoney');
+            //console.log("b====="+b);
+            var tr = aa.replace('totalMoney','taxRate');
+            // console.log("tr====="+tr);
+            $("#" +  b ).val("");
+            $("#" +  tr ).val("");
+            var m = ${workInvoiceAlter.money};
+            //  console.log("-m----"+m);
+            var a = obj.value;
+            // console.log("-a----"+a);
+            if(a > m) {
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                parent.layer.msg("所填值大于发票总价税合计",{icon:5});
+                return;
+            }
+        }
+        function setV(obj){
+            var a =  $(obj).attr("id");
+            var c = "京";
+            var date=new Date;
+            var year=date.getFullYear();
+            var month=date.getMonth()+1;
+            month =(month<10 ? "0"+month:month);
+            var mydate = (year.toString()+month.toString());
+            var timestamp="["+mydate+"]";//获取固定格式年月
+            var number = c+timestamp;
+            $("#" +  a ).val(number);
+        }
+        function checkSame(obj){
+            var value =obj.value;
+            var a = $(obj).attr("id");
+            var idx = a.replace('_number','');
+            var idxx = idx.replace('workAccountList','')
+            //console.log(idxx);
+            var b = a.replace('number','oldNumber');
+            var oldValue = $("#" +  b ).val();
+
+            var size = $("#workAccountList tr").length+count;
+            for (var i = 0;i<size;i++){
+                var _number = $("#workAccountList"+i+"_number").val();
+
+                var delFlag = $("#workAccountList"+i+"_delFlag").val();
+                if (_number!=undefined&& delFlag==0 && i!= idxx ){
+                    if(_number == value){
+                        $("#" +  a ).val("");
+                        parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+                        return;
+                    }
+                }
+            }
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/checkSame',
+                data:{
+                    "number":value,"oldNumber":oldValue
+                },
+                success:function(data){
+                    //console.log("========data"+data);
+                    if("false" == data){
+                        $("#" +  a ).val("");
+                        parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+                        return;
+                    }
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+	<form:form id="inputForm" modelAttribute="workInvoiceAlter" action="${ctx}/workinvoicealter/workInvoiceAlter/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="project.id"/>
+		<form:hidden path="office.id"/>
+		<form:hidden path="workInvoice.id"/>
+		<form:hidden path="client.id"/>
+		<form:hidden path="ext"/>
+		<form:hidden path="invoiceType"/>
+		<form:hidden path="province" id="province"/>
+		<c:set var="status" value="${workInvoiceAlter.act.status}" />
+
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>基本信息</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.projectName}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">发票申请编号:</label>
+				<div class="layui-input-block">
+					<div class="input-group">
+						<form:input path="number" htmlEscape="false" readonly="true"   class="form-control layui-input"/>
+						<span class="input-group-btn">
+							<label class="form-status"><c:choose><c:when test="${ empty workInvoiceAlter.invoiceState}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoiceAlter.invoiceState, 'audit_state','')}</c:otherwise></c:choose></label>
+						</span>
+					</div>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>合同名称:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.workContractInfo.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.projectId}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>委托方:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.workContractInfo.client.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>所属部门:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.office.name}"/>
+				</div>
+			</div>
+		</div>
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>发票详情</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoiceAlter.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoiceAlter.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true" id="invoiceType"  class="form-control layui-input" value="<c:choose><c:when test="${workInvoiceAlter.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoiceAlter.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.client.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">纳税人识别号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"  name="orUnicode" class="form-control isUscCode layui-input" value="${workInvoiceAlter.orUnicode}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">地址:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true" name="address"  class="form-control layui-input" value="${workInvoiceAlter.address}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">电话:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"  name="telephone" class="form-control layui-input" value="${workInvoiceAlter.telephone}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开户银行:</label>
+				<div class="layui-input-block">
+					<form:input id ="bank"  path="bank" readonly="true"  htmlEscape="false"   class="form-control layui-input"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">银行账号:</label>
+				<div class="layui-input-block">
+					<form:input id="bankNumber" path="bankNumber" readonly="true" htmlEscape="false"   class="form-control layui-input"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>价税合计(元):</label>
+				<div class="layui-input-block">
+					<input name="money" htmlEscape="false"  value="<fmt:formatNumber value="${workInvoiceAlter.money}" pattern="#.00#"/>" readonly="true" class="form-control layui-input"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm12 with-textarea">
+				<label class="layui-form-label"><span class="require-item">*</span>开票内容要求:</label>
+				<div class="layui-input-block">
+					<form:textarea path="content" id="contractTypeDoc" readonly="true" htmlEscape="false" rows="4"    class="form-control required"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票人:</label>
+				<div class="layui-input-block">
+					<form:input id=""  path="drawerName" htmlEscape="false" readonly="true"  class="form-control layui-input"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票时间:</label>
+				<div class="layui-input-block">
+					<input class="form-control layer-date laydate-icon layui-input laydate-icondate"  readonly="true" name="invoiceDate" value="<fmt:formatDate
+							value="${workInvoiceAlter.invoiceDate}" pattern="yyyy-MM-dd"/>">
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">领票时间:</label>
+				<div class="layui-input-block">
+					<input class="form-control layer-date laydate-icon layui-input laydate-icondate"  readonly="true"  name="takeDate" value="<fmt:formatDate
+							value="${workInvoiceAlter.takeDate}" pattern="yyyy-MM-dd"/>">
+				</div>
+			</div>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>发票明细</h2></div>
+			<div class="layui-item nav-btns">
+				<a class="nav-btn nav-btn-add" onclick="addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl);workAccountListRowIdx = workAccountListRowIdx + 1;" title="新增"><i class="fa fa-plus"></i>&nbsp;新增</a>
+			</div>
+			<div class="layui-item layui-col-xs12 form-table-container">
+				<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+					<thead>
+					<tr>
+						<th><span class="require-item">*</span>发票代码</th>
+						<th><span class="require-item">*</span>发票号</th>
+						<th width="100px"><span class="require-item">*</span>价税合计</th>
+						<th width="80px"><span class="require-item">*</span>税率</th>
+						<th width="100px"><span class="require-item">*</span>金额</th>
+						<th width="100px"><span class="require-item">*</span>税额</th>
+						<th width="100px"><span class="require-item">*</span>累计登记金额</th>
+						<th width="80px">操作</th>
+							<%--<th><span class="require-item">*</span>发票状态</th>&lt;%&ndash;正常&ndash;%&gt;--%>
+							<%--<th><span class="require-item">*</span>被退标记</th>--%>
+							<%--<th><span class="require-item">*</span>被退票号</th>--%>
+							<%--<th><span class="require-item">*</span>开票日期</th>--%>
+					</tr>
+					</thead>
+					<tbody id="workAccountList">
+					</tbody>
+				</table>
+
+						<script type="text/template" id="workAccountListTpl">//<!--
+                                    <tr id="workAccountList{{idx}}">
+                                        <td class="hide">
+											<input id="workAccountList{{idx}}_id" name="workAccountList[{{idx}}].id" type="hidden" value=""/>
+                                            <input id="workAccountList{{idx}}_delFlag" name="workAccountList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                    	<td>
+                                        	<input id="workAccountList{{idx}}_code" name="workAccountList[{{idx}}].code" type="text" value="{{row.code}}"    class="form-control number required"/>
+                                   		 </td>
+                                    	 <td>
+                                        	<input id="workAccountList{{idx}}_number" name="workAccountList[{{idx}}].number" onchange="checkSame(this)" type="text" value="{{row.number}}"  minlength="8" maxlength="8"  class="form-control number required"/>
+									 		<input type="hidden" id="workAccountList{{idx}}_oldNumber" value="{{row.number}}"/>
+                                   		 </td>
+                                    	<td>
+                                            <input id="workAccountList{{idx}}_totalMoney"  onblur="setCheck(this)" onchange="getMoney(this.value,this)" name="workAccountList[{{idx}}].totalMoney" type="text" value="{{row.totalMoney}}"    class="form-control number required"/>
+                                        </td>
+                                        <td>
+                                        <div class="input-group">
+                                            <input id="workAccountList{{idx}}_tax" onblur="setTaxMoney(this)" name="workAccountList[{{idx}}].tax" type="text" value="{{row.tax}}"    class="form-control number required"/><span class="input-group-addon input-height">%</span>
+                                            </div>
+
+                                        </td>
+                                        <td>
+                                            <input id="workAccountList{{idx}}_taxMoney" name="workAccountList[{{idx}}].taxMoney" type="text" value="{{row.taxMoney}}"    class="form-control number required"/>
+                                        </td>
+										<td>
+                                            <input id="workAccountList{{idx}}_taxRate" name="workAccountList[{{idx}}].taxRate" type="text" value="{{row.taxRate}}"    class="form-control number required"/>
+                                        </td>
+                                        <td>
+                                            <input id="workAccountList{{idx}}_incomeMoney" name="workAccountList[{{idx}}].incomeMoney" type="text" value="0"  readonly="true"  class="form-control required"/>
+                                        </td>
+
+                                            <input id="workAccountList{{idx}}_state" name="workAccountList[{{idx}}].state"  type="hidden" value="正常"   class="form-control"/>
+
+                                            <input id="workAccountList{{idx}}_backSign" name="workAccountList[{{idx}}].backSign"  type="hidden" value="正常"  readonly="true"  class="form-control required"/>
+
+                                            <input id="workAccountList{{idx}}_backNumber" name="workAccountList[{{idx}}].backNumber"  type="hidden" value=""  readonly="true"  class="form-control required"/>
+
+
+                                        <td class="text-center op-td">
+                                            {{#delBtn}}<span class="op-btn op-btn-delete" onclick="delRow(this, '#workAccountList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+						</script>
+						<script type="text/javascript">
+                            var workAccountListRowIdx = 0, workAccountListTpl = $("#workAccountListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                            $(document).ready(function() {
+                                var data = ${fns:toJson(workInvoiceAlter.workAccountList)};
+                                for (var i=0; i<data.length; i++){
+                                    addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl, data[i]);
+                                    workAccountListRowIdx = workAccountListRowIdx + 1;
+                                }
+                            });
+						</script>
+
+					</div>
+		</div>
+		<div class="form-group layui-row page-end"></div>
+	</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 352 - 0
src/main/webapp/webpage/modules/workinvoicealter/workInvoiceLista.jsp

@@ -0,0 +1,352 @@
+<%@ page import="com.jeeplus.modules.sys.utils.UserUtils" %>
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+
+	<title>发票管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        <%--var Srole = "<%= UserUtils.getSelectRole().getName()%>";--%>
+
+        $(document).ready(function() {
+            // laydate.render({
+            //     elem: '#invoiceDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+            //     event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+				// ,type:'datetime'
+            // });
+            //搜索框收放
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#updateDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#beginContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#endContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+        });
+        function openDialogre(title,url,width,height,target){
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url ,
+                skin:"three-btns",
+                btn: ['送审','暂存','关闭'],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                    return false;
+                },
+                btn3: function(index){
+                }
+            });
+
+        }
+
+        function openDialogreplay(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url ,
+                skin:"two-btns",
+                btn: ['送审','关闭'],
+                yes: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+
+                    if(iframeWin.contentWindow.doSubmit() ){
+                        top.layer.close(index);//关闭对话框。
+                        //setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+
+                },
+                cancel: function(index){
+                }
+            });
+        }
+	</script>
+	<style>
+		body{
+			background-color:transparent;
+			filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+			color:#ffffff;
+			background-color:rgba(255,255,255,0);
+			height:100%;
+		}
+	</style>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+	<sys:message content="${message}"/>
+	<div class="layui-row">
+		<div class="full-width fl">
+			<div class="list-form-tab contentShadow shadowLTR" id="tabDiv">
+				<ul class="list-tabs" >
+					<li><a href="${ctx}/workinvoice/workInvoice/list">发票管理</a></li>
+					<li class="active"><a href="${ctx}/workinvoicealter/workInvoiceAlter/list">发票变更</a></li>
+				</ul>
+			</div>
+		</div>
+		<div class="full-width fl">
+			<div class=" layui-row contentShadow shadowLR" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="workInvoiceAlter" action="${ctx}/workinvoicealter/workInvoiceAlter/list" method="post" class="form-inline">
+				<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+				<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+				<%--<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->--%>
+
+				<div class="commonQuery lw9">
+					<div class="layui-item query athird">
+						<label class="layui-form-label">实际开票单位:</label>
+						<div class="layui-input-block">
+							<form:input path="client.name" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+						</div>
+					</div>
+					<div class="layui-item query athird">
+						<label class="layui-form-label">项目名称:</label>
+						<div class="layui-input-block with-icon">
+							<form:input path="project.projectName" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+						</div>
+					</div>
+					<div class="layui-item athird">
+						<div class="input-group">
+							<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+							<button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
+							<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+						</div>
+					</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" class="lw9" style="clear:both;display:none;">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">变更日期:</label>
+							<div class="layui-input-block">
+								<input id="beginContractDate" name="beginContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workInvoiceAlter.beginContractDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+								<span class="group-sep">-</span>
+								<input id="endContractDate" name="endContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workInvoiceAlter.endContractDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">发票申请编号:</label>
+							<div class="layui-input-block">
+								<form:input path="number" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">所属部门:</label>
+							<div class="layui-input-block">
+								<form:input path="office.name" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">状态:</label>
+							<div class="layui-input-block with-icon">
+								<form:select path="invoiceState" class="form-control simple-select">
+									<form:option value="" label=""/>
+									<form:options items="${fns:getDictList('audit_change_state')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+								</form:select>
+							</div>
+						</div>
+					</div>
+				</form:form>
+			</div>
+		</div>
+		<div class="full-width fl">
+			<div class="layui-form contentDetails contentShadow shadowLBR">
+				<div class="nav-btns">
+					<button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i> 刷新</button>
+
+					<div style="clear: both;"></div>
+				</div>
+				<table class="oa-table layui-table" id="contentTable"></table>
+
+				<!-- 分页代码 -->
+				<table:page page="${page}"></table:page>
+				<div style="clear: both;"></div>
+			</div>
+		</div>
+	</div>
+    <div id="changewidth"></div>
+</div>
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script>
+    layui.use('table', function(){
+        layui.table.render({
+            limit:${ page.pageSize }
+            ,elem: '#contentTable'
+            ,page: false
+            ,cols: [[
+                // {checkbox: true, fixed: true},
+                {field:'index',align:'center', title: '序号',width:40}
+                ,{field:'invoiceNum',align:'center', sort:true,title: '发票申请编号', minWidth:150,templet:function(d){
+                        return "<a class=\"attention-info\" title=\""+ d.invoiceNum +"\"href=\"javascript:void(0);\" onclick=\"openDialogView('查看发票管理', '${ctx}/workinvoicealter/workInvoiceAlter/form?id=" + d.id + "&tabId=1','95%', '95%')\">" + d.invoiceNum + "</a>";
+                    }}
+                ,{field:'projNum',align:'center', sort:true,title: '项目编号', minWidth:150,templet:function(d){
+                        return "<span title='"+ d.projNum +"'>" + d.projNum + "</span>";
+                    }}
+                ,{field:'projName',align:'center', title: '项目名称', minWidth:100,templet:function(d){
+                        return "<span title='"+ d.projName +"'>" + d.projName + "</span>";
+                    }}
+                ,{field:'clientName', align:'center',title: '实际开票单位', minWidth:150,templet:function(d){
+                        return "<span title='"+ d.clientName +"'>" + d.clientName + "</span>";
+                    }}
+                ,{field:'officeName', align:'center',title: '所属部门',width:150,templet:function(d){
+                        return "<span title='"+ d.officeName +"'>" + d.officeName + "</span>";
+                    }}
+                ,{field:'money',align:'center', title: '价税合计(元)',  width:90,templet:function(d){
+                        return "<span title='"+ d.money +"'>" + d.money + "</span>";
+                    }}
+                ,{field:'updateDate', align:'center',sort:true,title: '变更日期',width:80}
+                ,{align:'center', title: '状态',  width:70,templet:function(d){
+                        <%--var st = getAuditChangeState(d.status)--%>
+                        <%--var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workinvoicealter/workInvoiceAlter/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";--%>
+                        <%--return xml;--%>
+                        var st = getAuditChangeState(d.status);
+                        if(st.action)
+                            var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workinvoicealter/workInvoiceAlter/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        else
+                            var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        return xml;
+                    }}
+                ,{align:'center',title:"操作",width:130,templet:function(d){
+                        ////对操作进行初始化
+                        var xml="";
+                        if(d.canedit1 != undefined && d.canedit1 =="1")
+                        {
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogre('修改发票', '${ctx}/workinvoicealter/workInvoiceAlter/form?id=" + d.id + "','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.canedit2 != undefined && d.canedit2 =="1")
+                        {
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('修改发票', '${ctx}/workinvoicealter/workInvoiceAlter/form?id=" + d.id + "&tabId=3','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.canedit3 != undefined && d.canedit3 =="1")
+                        {
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('重新申请发票', '${ctx}/workinvoicealter/workInvoiceAlter/form?id=" + d.id + "&tabId=4','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.candelete != undefined && d.candelete =="1")
+                        {
+                            xml += "<a href=\"${ctx}/workinvoicealter/workInvoiceAlter/delete?id=" + d.id + "\" onclick=\"return confirmx('确认要删除该变更记录吗?', this.href)\"   class=\"op-btn op-btn-delete\"><i class=\"fa fa-trash\"></i> 删除</a>";
+                        }
+                        if(d.cancancel != undefined && d.cancancel =="1")
+                        {
+                            xml += "<a href=\"${ctx}/workinvoicealter/workInvoiceAlter/cancelInvalidate?id="+ d.id +"\" onclick=\"return confirmx('确认要强制撤回?', this.href)\" class=\"op-btn op-btn-cancel\" ><i class=\"glyphicon glyphicon-share-alt\"></i> 撤回</a>";
+                        }
+
+                        return xml;
+
+                    }}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="workInvoiceAlter" varStatus="index"><c:set var="Srole" scope="session" value="<%= UserUtils.getSelectRole().get(0).getEnname()%>"/>
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${workInvoiceAlter.id}"
+                    ,"invoiceNum":"${workInvoiceAlter.number}"
+                    ,"projNum":"${workInvoiceAlter.project.projectId}"
+                    ,"projName":"${workInvoiceAlter.project.projectName}"
+                    ,"clientName":"${workInvoiceAlter.client.name}"
+                    ,"officeName":"${workInvoiceAlter.office.name}"
+                    ,"money":"<fmt:formatNumber value="${workInvoiceAlter.money}" pattern="#,#00.00"/>"
+                    ,"updateDate":"<fmt:formatDate value="${workInvoiceAlter.updateDate}" pattern="yyyy-MM-dd"/>"
+                    ,"status":"${workInvoiceAlter.invoiceState}"
+                    <c:if test="${workInvoiceAlter.invoiceState == 1}"><shiro:hasPermission name="workinvoice:workInvoice:edit">,"canedit1":"1"</shiro:hasPermission></c:if><%--暂存-修改--%>
+                    <c:if test="${workInvoiceAlter.invoiceState == '4' && fns:getUser().id == workInvoiceAlter.createBy.id}">,"canedit2":"1"</c:if><%--驳回--修改--%>
+                    <c:if test="${workInvoiceAlter.invoiceState == '3' && fns:getUser().id == workInvoiceAlter.createBy.id}">,"canedit3":"1"</c:if><%--撤回--修改--%>
+                    <c:if test="${workInvoiceAlter.invoiceState == '1' or workInvoiceAlter.invoiceState == '3' or workInvoiceAlter.invoiceState == '4'}"><shiro:hasPermission name="workinvoice:workInvoice:del">,"candelete":"1"</shiro:hasPermission></c:if>
+                    <c:if test="${workInvoiceAlter.invoiceState == '2' && fns:getUser().id == workInvoiceAlter.createBy.id}">,"cancancel":"1"</c:if>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+
+    resizeListTable();/*消除由于有竖向滚动条造成table出现横向滚动条*/
+</script>
+<script>
+    resizeListWindow2();
+    $(window).resize(function(){
+        resizeListWindow2();
+    });
+</script>
+
+</body>
+</html>

+ 549 - 0
src/main/webapp/webpage/modules/workinvoicealter/workInvoiceModifya.jsp

@@ -0,0 +1,549 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票审批</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        var count = 0;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(obj == 2){
+                    $("#flag").val("no");
+                }else{
+                    $("#flag").val("yes");
+                }
+                var m = ${workInvoiceAlter.money};
+                var money = "0.00";
+                //自动计算出结果并填充在相应的输入框中
+                var size = $("#workAccountList tr").length+count;
+                for (var i = 0;i<size;i++){
+                    var _totalMoney = $("#workAccountList"+i+"_totalMoney").val();
+
+                    var delFlag = $("#workAccountList"+i+"_delFlag").val();
+                    if (_totalMoney!=undefined && isNumber(_totalMoney) && delFlag==0){
+                        if(money==""){
+                            money = parseFloat(_totalMoney).toFixed(2);
+                        }else {
+                            money = (parseFloat(money) + parseFloat(_totalMoney)).toFixed(2);
+                        }
+                    }
+                }
+                if(money != m){
+                    top.layer.alert('发票明细总价税合计与主信息价税合计不等,禁止提交!', {icon: 0});
+                    return;
+                }
+                $("#inputForm").submit();
+                return true;
+            }
+            return false;
+        }
+        $(document).ready(function() {
+            $("#name").focus();
+            jQuery.validator.addMethod("isUscCode", function(value, element) {
+                if (this.optional(element)){
+                    return true;
+                }
+                var uscCode = /^((\w{15})|(\w{18})|(\w{20}))$/;
+                return uscCode.test(value);
+            }, "请填写正确的纳税人识别号");
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+
+
+            laydate.render({
+                elem: '#takeDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#invoiceDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+        });
+
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workAccountList tr").length;
+            if(list == '#workAccountList' && idx1 < 100){
+                bornTemplete(list, idx, tpl, row, idx1);
+                if($("#invoiceType").val()=="专票"){
+                    $("#workAccountList"+idx+"_code").attr("minlength","10");
+                    $("#workAccountList"+idx+"_code").attr("maxlength","10");
+                }else if($("#invoiceType").val()=="普票"){
+                    $("#workAccountList"+idx+"_code").attr("minlength","12");
+                    $("#workAccountList"+idx+"_code").attr("maxlength","12");
+                }
+                if(idx>0){
+                    var i = idx-1;
+                    var code = $("#workAccountList"+i+"_code").val();
+                    if(code == null || code == undefined || code == ""){
+                        i = idx-2;
+                        code = $("#workAccountList"+i+"_code").val();
+                        console.log(i);
+                    }
+                    $("#workAccountList"+idx+"_code").val(code);
+                }
+            }
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        function delRow(obj, prefix) {
+            count++;
+            var id = $(prefix + "_id");
+            var delFlag = $(prefix + "_delFlag");
+            if (id.val() == "") {
+                $(obj).parent().parent().remove();
+            } else if (delFlag.val() == "0") {
+                delFlag.val("1");
+                $(obj).html("&divide;").attr("title", "撤回删除");
+                $(obj).parent().parent().addClass("error");
+                $(obj).parent().parent().addClass("hide");
+            } else if (delFlag.val() == "1") {
+                delFlag.val("0");
+                $(obj).html("&times;").attr("title", "删除");
+                $(obj).parent().parent().removeClass("error");
+            }
+            // var idx1 = $("#workAccountList tr").length; //tr 总数
+            // for (var i = 0; i < idx1; i++) {
+            //     $("#workAccountList tr").eq(i).find("td").eq(1).html(i + 1);
+            // }
+        }
+        function setVs(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('allPrice','proportion');
+            var value = obj.value;
+            var p = $("#price").val() || 0;
+            if(!p || p == 0){
+                parent.layer.msg("请先填写造价指标,且不能为零",{icon:5});
+                return;
+            }
+            var num = value/p ;
+            if(!/^\d+(\.\d{1,2})?$/.test( value )){
+                parent.layer.msg("合价必须输入数字",{icon:5});
+            }else{
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+            }
+        }
+        function isNumber(val){
+            if(val === "" || val ==null){
+                return false;
+            }
+            var regPos = /^\d+(\.\d+)?$/; //非负浮点数
+            var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
+            if(regPos.test(val) || regNeg.test(val)){
+                return true;
+            }else{
+                return false;
+            }
+
+        }
+        function setTaxMoney(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('tax','taxMoney');
+            var t = a.replace('tax','totalMoney');
+            var tr = a.replace('tax','taxRate');
+            var value = obj.value || 0;
+            if(!value){
+                parent.layer.msg("请正确填写税率",{icon:5});
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                return;
+            }
+            var m = ${workInvoiceAlter.money};
+            var t2 = $("#" +  t ).val();
+            if(!/^\d+(\.\d{1,4})?$/.test( t2 )){
+                parent.layer.msg("请正确填写价税合计",{icon:5});
+                return;
+            }else if(t2 > m) {
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                parent.layer.msg("所填值大于发票总价税合计",{icon:5});
+                return;
+            }
+            // console.log("-value----"+value);
+            var tax = 1 + value/100;
+            // console.log("-tax----"+tax);
+            var p = $("#" +  t ).val() || 0;//获取价税合计
+            //  console.log("-----"+p);
+            if(!p || p == 0){
+                parent.layer.msg("请先填写价税合计,且不能为零",{icon:5});
+                return;
+            }
+            var num = p/tax || 0;
+            // console.log("-----"+num);
+            $("#" +  b ).val(parseFloat(num.toFixed(2)));
+            var taxRate = p - num;
+            $("#" +  tr ).val(parseFloat(taxRate.toFixed(2)));
+        }
+        function setCheck(obj){
+            var aa = $(obj).attr("id");
+            var b = aa.replace('totalMoney','taxMoney');
+            //console.log("b====="+b);
+            var tr = aa.replace('totalMoney','taxRate');
+            // console.log("tr====="+tr);
+            $("#" +  b ).val("");
+            $("#" +  tr ).val("");
+            var m = ${workInvoiceAlter.money};
+            //  console.log("-m----"+m);
+            var a = obj.value;
+            // console.log("-a----"+a);
+            if(a > m) {
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                parent.layer.msg("所填值大于发票总价税合计",{icon:5});
+                return;
+            }
+        }
+        function getMoney(value,obj){
+            var aa = $(obj).attr("id");
+            var b = aa.replace('totalMoney','taxMoney');
+            console.log("b====="+b);
+            var tr = aa.replace('totalMoney','taxRate');
+            var m = ${workInvoiceAlter.money};
+            var money = "0.00";
+            //自动计算出结果并填充在相应的输入框中
+            var size = $("#workAccountList tr").length+count;
+            for (var i = 0;i<size;i++){
+                var _totalMoney = $("#workAccountList"+i+"_totalMoney").val();
+
+                var delFlag = $("#workAccountList"+i+"_delFlag").val();
+                if (_totalMoney!=undefined && isNumber(_totalMoney) && delFlag==0){
+                    if(money==""){
+                        money = parseFloat(_totalMoney).toFixed(2);
+                    }else {
+                        money = (parseFloat(money) + parseFloat(_totalMoney)).toFixed(2);
+                    }
+                }
+            }
+            if(money >m){
+                console.log("money--------"+money);
+                $("#" + aa ).val("");
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                parent.layer.msg("发票明细价税合计总值大于主申请发票价税合计",{icon:5});
+                return;
+            }
+        }
+        function setV(obj){
+            var a =  $(obj).attr("id");
+            var c = "京";
+            var date=new Date;
+            var year=date.getFullYear();
+            var month=date.getMonth()+1;
+            month =(month<10 ? "0"+month:month);
+            var mydate = (year.toString()+month.toString());
+            var timestamp="["+mydate+"]";//获取固定格式年月
+            var number = c+timestamp;
+            $("#" +  a ).val(number);
+        }
+        function checkSame(obj){
+            var value =obj.value;
+            var a = $(obj).attr("id");
+            var idx = a.replace('_number','');
+            var idxx = idx.replace('workAccountList','')
+            //console.log(idxx);
+            var b = a.replace('number','oldNumber');
+            var oldValue = $("#" +  b ).val();
+
+            var size = $("#workAccountList tr").length+count;
+            for (var i = 0;i<size;i++){
+                var _number = $("#workAccountList"+i+"_number").val();
+
+                var delFlag = $("#workAccountList"+i+"_delFlag").val();
+                if (_number!=undefined&& delFlag==0 && i!= idxx ){
+                    if(_number == value){
+                        $("#" +  a ).val("");
+                        parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+                        return;
+                    }
+                }
+            }
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/checkSame',
+                data:{
+                    "number":value,"oldNumber":oldValue
+                },
+                success:function(data){
+                    //console.log("========data"+data);
+                    if("false" == data){
+                        $("#" +  a ).val("");
+                        parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+                        return;
+                    }
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoiceAlter" action="${ctx}/workinvoicealter/workInvoiceAlter/saveAudit" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<%--<form:hidden path="invoiceDate"/>--%>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+			<form:hidden path="province" id="province"/>
+			<c:set var="status" value="${workInvoiceAlter.act.status}" />
+
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.projectName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">发票申请编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<form:input path="number" htmlEscape="false" readonly="true"   class="form-control layui-input"/>
+							<span class="input-group-btn">
+							<label class="form-status"><c:choose><c:when test="${ empty workInvoiceAlter.invoiceState}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoiceAlter.invoiceState, 'audit_state','')}</c:otherwise></c:choose></label>
+						</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>合同名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.workContractInfo.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.projectId}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>委托方:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.workContractInfo.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>所属部门:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.office.name}"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>发票详情</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoiceAlter.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoiceAlter.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" id="invoiceType"  class="form-control layui-input" value="<c:choose><c:when test="${workInvoiceAlter.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoiceAlter.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control isUscCode layui-input" value="${workInvoiceAlter.orUnicode}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">地址:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.address}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.telephone}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block">
+						<form:input id ="bank" readonly="true"  path="bank" htmlEscape="false"   class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<form:input id="bankNumber" readonly="true"  path="bankNumber" htmlEscape="false"   class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label"><span class="require-item">*</span>价税合计(元):</label>
+					<div class="layui-input-block">
+						<form:input id=""  path="money" readonly="true"  htmlEscape="false" class="form-control number required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>开票内容要求:</label>
+					<div class="layui-input-block">
+						<form:textarea path="content" readonly="true" id="contractTypeDoc" htmlEscape="false" rows="4"    class="form-control required"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票人:</label>
+					<div class="layui-input-block">
+						<form:input id=""  path="drawerName" htmlEscape="false" readonly="true"  class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input class="form-control layer-date laydate-icon layui-input laydate-icondate" id="invoiceDate" readonly="true"  name="invoiceDate" value="<fmt:formatDate
+							value="${workInvoiceAlter.invoiceDate}" pattern="yyyy-MM-dd"/>">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">领票时间:</label>
+					<div class="layui-input-block">
+						<input class="form-control layer-date laydate-icon layui-input laydate-icondate" id="takeDate" readonly="true"  name="takeDate" value="<fmt:formatDate
+							value="${workInvoiceAlter.takeDate}" pattern="yyyy-MM-dd"/>">
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>发票明细</h2></div>
+				<div class="layui-item nav-btns">
+					<a class="nav-btn nav-btn-add" onclick="addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl);workAccountListRowIdx = workAccountListRowIdx + 1;" title="新增"><i class="fa fa-plus"></i>&nbsp;新增</a>
+				</div>
+				<div class="layui-item layui-col-xs12 form-table-container">
+					<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th><span class="require-item">*</span>发票代码</th>
+							<th><span class="require-item">*</span>发票号</th>
+							<th width="100px"><span class="require-item">*</span>价税合计</th>
+							<th width="80px"><span class="require-item">*</span>税率</th>
+							<th width="100px"><span class="require-item">*</span>金额</th>
+							<th width="100px"><span class="require-item">*</span>税额</th>
+							<th width="100px"><span class="require-item">*</span>累计登记金额</th>
+							<th width="80px">操作</th>
+								<%--<th><span class="require-item">*</span>发票状态</th>&lt;%&ndash;正常&ndash;%&gt;--%>
+								<%--<th><span class="require-item">*</span>被退标记</th>--%>
+								<%--<th><span class="require-item">*</span>被退票号</th>--%>
+								<%--<th><span class="require-item">*</span>开票日期</th>--%>
+						</tr>
+						</thead>
+						<tbody id="workAccountList">
+						</tbody>
+					</table>
+
+					<script type="text/template" id="workAccountListTpl">//<!--
+                                    <tr id="workAccountList{{idx}}">
+                                        <td class="hide">
+                                            <input id="workAccountList{{idx}}_id" name="workAccountList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                            <input id="workAccountList{{idx}}_delFlag" name="workAccountList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                    	<td>
+                                        	<input id="workAccountList{{idx}}_code" name="workAccountList[{{idx}}].code" type="text" value="{{row.code}}"  minlength="10" maxlength="12"  class="form-control number required"/>
+                                   		 </td>
+                                    	 <td>
+                                        	<input id="workAccountList{{idx}}_number" name="workAccountList[{{idx}}].number" onchange="checkSame(this)" type="text" value="{{row.number}}"  minlength="8" maxlength="8"  class="form-control number required"/>
+									 		<input type="hidden" id="workAccountList{{idx}}_oldNumber" value="{{row.number}}"/>
+                                   		 </td>
+                                    	<td>
+                                            <input id="workAccountList{{idx}}_totalMoney"  onblur="setCheck(this)" onchange="getMoney(this.value,this)" name="workAccountList[{{idx}}].totalMoney" type="text" value="{{row.totalMoney}}"    class="form-control number required"/>
+                                        </td>
+                                        <td>
+                                        <div class="input-group">
+                                            <input id="workAccountList{{idx}}_tax" onblur="setTaxMoney(this)" name="workAccountList[{{idx}}].tax" type="text" value="{{row.tax}}"    class="form-control number required"/><span class="input-group-addon input-height">%</span>
+                                            </div>
+
+                                        </td>
+                                        <td>
+                                            <input id="workAccountList{{idx}}_taxMoney" name="workAccountList[{{idx}}].taxMoney" type="text" value="{{row.taxMoney}}"    class="form-control number required"/>
+                                        </td>
+										<td>
+                                            <input id="workAccountList{{idx}}_taxRate" name="workAccountList[{{idx}}].taxRate" type="text" value="{{row.taxRate}}"    class="form-control number required"/>
+                                        </td>
+                                        <td>
+                                            <input id="workAccountList{{idx}}_incomeMoney" name="workAccountList[{{idx}}].incomeMoney" type="text" value="0"  readonly="true"  class="form-control required"/>
+                                        </td>
+
+                                            <input id="workAccountList{{idx}}_state" name="workAccountList[{{idx}}].state"  type="hidden" value="正常"   class="form-control"/>
+
+                                            <input id="workAccountList{{idx}}_backSign" name="workAccountList[{{idx}}].backSign"  type="hidden" value="正常"  readonly="true"  class="form-control required"/>
+
+                                            <input id="workAccountList{{idx}}_backNumber" name="workAccountList[{{idx}}].backNumber"  type="hidden" value=""  readonly="true"  class="form-control required"/>
+
+
+                                        <td class="text-center op-td">
+                                            {{#delBtn}}<span class="op-btn op-btn-delete" onclick="delRow(this, '#workAccountList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+                        var workAccountListRowIdx = 0, workAccountListTpl = $("#workAccountListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                        $(document).ready(function() {
+                            var data = ${fns:toJson(workInvoiceAlter.workAccountList)};
+                            for (var i=0; i<data.length; i++){
+                                addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl, data[i]);
+                                if($("#invoiceType").val()=="专票"){
+                                    $("#workAccountList"+workAccountListRowIdx+"_code").attr("minlength","10");
+                                    $("#workAccountList"+workAccountListRowIdx+"_code").attr("maxlength","10");
+                                }else if($("#invoiceType").val()=="普票"){
+                                    $("#workAccountList"+workAccountListRowIdx+"_code").attr("minlength","12");
+                                    $("#workAccountList"+workAccountListRowIdx+"_code").attr("maxlength","12");
+                                }
+                                workAccountListRowIdx = workAccountListRowIdx + 1;
+                            }
+                        });
+					</script>
+
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 15 - 0
src/main/webapp/webpage/modules/workinvoicealter/workInvoiceTaska.jsp

@@ -0,0 +1,15 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票流程追踪</title>
+	<meta name="decorator" content="default"/>
+</head>
+<body class="gray-bg">
+	<div class="container form layui-form">
+        <act:flowChart procInsId="${processInstanceId}"/>
+        <act:histoicFlow procInsId="${processInstanceId}"/>
+	</div>
+</body>
+</html>
+

+ 243 - 0
src/main/webapp/webpage/modules/workinvoicealter/workInvoiceViewa.jsp

@@ -0,0 +1,243 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			$("#name").focus();
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+	</script>
+</head>
+<body>
+<div class="single-form view-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoiceAlter" action="${ctx}/workinvoicealter/workInvoiceAlter/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="act.taskId"/>
+		<form:hidden path="act.taskName"/>
+		<form:hidden path="act.taskDefKey"/>
+		<form:hidden path="act.procInsId"/>
+		<form:hidden path="act.procDefId"/>
+		<form:hidden id="flag" path="act.flag"/>
+
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+					<div class="layui-input-block  with-icon">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.projectName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票申请编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.number}"/>
+							<span class="input-group-btn">
+							<label class="form-status"><c:choose><c:when test="${ empty workInvoiceAlter.invoiceState}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoiceAlter.invoiceState, 'audit_state','')}</c:otherwise>	</c:choose></label>
+						</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>合同名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.workContractInfo.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.projectId}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>委托方:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.project.workContractInfo.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>所属部门:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.office.name}"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>发票详情</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoiceAlter.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoiceAlter.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoiceAlter.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoiceAlter.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.orUnicode}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">地址:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.address}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.telephone}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.bank}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.bankNumber}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>价税合计(元):</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<fmt:formatNumber value="${workInvoiceAlter.money}" pattern="#,#00.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>开票内容要求:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.content}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceAlter.drawerName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<fmt:formatDate value="${workInvoiceAlter.invoiceDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label">领票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<fmt:formatDate value="${workInvoiceAlter.takeDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>发票明细</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container">
+					<table id="contentTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+							<th><span class="require-item">*</span>发票代码</th>
+							<th><span class="require-item">*</span>发票号</th>
+							<th><span class="require-item">*</span>价税合计</th>
+							<th><span class="require-item">*</span>税率</th>
+							<th><span class="require-item">*</span>金额</th>
+							<th><span class="require-item">*</span>税额</th>
+							<th><span class="require-item">*</span>累计登记金额</th>
+							<th><span class="require-item">*</span>发票状态</th><%--正常--%>
+							<th><span class="require-item">*</span>被退标记</th>
+							<th><span class="require-item">*</span>被退票号</th>
+							<th><span class="require-item">*</span>开票日期</th>
+						</tr>
+						</thead>
+						<tbody id="workAccountList">
+						<c:if test="${not empty workInvoiceAlter.workAccountList}">
+							<c:forEach items="${workInvoiceAlter.workAccountList}" var="workAccount" varStatus="index">
+								<tr id="workAccountList${index.index}">
+									<td title="${workAccount.code}">
+											${workAccount.code}
+									</td>
+									<td title="${workAccount.number}">
+											${workAccount.number}
+									</td>
+
+									<td title="<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>
+									</td>
+									<td title="${workAccount.tax}">
+											${workAccount.tax}
+									</td>
+									<td title="<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>
+									</td>
+									<td title="<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>
+									</td>
+									<td title="<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>
+									</td>
+									<td title="${workAccount.state}">
+											${workAccount.state}
+									</td>
+									<td title="${workAccount.backSign}">
+											${workAccount.backSign}
+									</td>
+									<td title="${workAccount.backNumber}">
+											${workAccount.backNumber}
+									</td>
+									<td title="<fmt:formatDate value="${workInvoiceAlter.invoiceDate}" pattern="yyyy-MM-dd"/>">
+										<fmt:formatDate value="${workInvoiceAlter.invoiceDate}" pattern="yyyy-MM-dd"/>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 255 - 0
src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailAudit.jsp

@@ -0,0 +1,255 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票审批</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 1) {
+                  $("#flag").val("yes");
+              }else {
+                  $("#flag").val("no");
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+		  return false;
+		}
+		$(document).ready(function() {
+			$("#name").focus();
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+	</script>
+</head>
+<body class="gray-bg">
+	 <div class="ibox-content">
+	<form:form id="inputForm" modelAttribute="workInvoiceDetail" action="${ctx}/workinvoicedetail/workInvoiceDetail/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="home"/>
+		<form:hidden path="act.taskId"/>
+		<form:hidden path="act.taskName"/>
+		<form:hidden path="act.taskDefKey"/>
+		<form:hidden path="act.procInsId"/>
+		<form:hidden path="act.procDefId"/>
+		<form:hidden id="flag" path="act.flag"/>
+		<sys:message content="${message}"/>
+		<c:set var="status" value="${workInvoiceDetail.act.status}" />
+		<fieldset>
+			<legend>${workInvoiceDetail.act.taskName}</legend>
+			<div class="tab-content">
+				<div class="tabs-container">
+					<ul class="nav nav-tabs">
+						<li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true" >退票信息</a>
+						</li>
+					</ul>
+				</div>
+				<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+					<tbody>
+					<tr>
+						<td class="width-15 active"><label class="pull-right"><font color="red">*</font>被退票号:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.number}
+						</td>
+						<td class="width-15 active"><label class="pull-right">退票申请编号:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.returnNumber}
+						</td>
+						<td class="width-35">
+							<c:choose>
+								<c:when test="${ empty workInvoiceDetail.status}">
+									新添
+								</c:when>
+								<c:otherwise>
+									${fns:getDictLabel(workInvoiceDetail.status, 'audit_state','')}
+								</c:otherwise>
+							</c:choose>
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">项目名称:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.project.projectName}
+						</td>
+						<td class="width-15 active"><label class="pull-right">项目编号:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.project.projectId}
+						</td>
+
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">合同名称:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.project.workContractInfo.name}
+						</td>
+						<td class="width-15 active"><label class="pull-right">所属部门:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.office.name}
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">委托方:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.project.workContractInfo.client.name}
+						</td>
+						<td class="width-15 active"><label class="pull-right">项目负责人:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.project.leaderNameStr}
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">发票类型:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.invoiceType}
+						</td>
+						<td class="width-15 active"><label class="pull-right">实际开票单位:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.client.name}
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">纳税人识别号:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.client.uscCode}
+						</td>
+						<td class="width-15 active"><label class="pull-right">地址:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.client.address}
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">电话:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.client.telephone}
+						</td>
+						<td class="width-15 active"><label class="pull-right">开户银行:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.bank}
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">银行账号:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.bankNumber}
+						</td>
+						<td class="width-15 active"><label class="pull-right">开票时间:</label></td>
+						<td class="width-35">
+							<fmt:formatDate value="${workInvoiceDetail.workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">价税合计:</label></td>
+						<td class="width-35">
+							<fmt:formatNumber value="${workInvoiceDetail.totalMoney}" pattern="#,#00.00"/>
+						</td>
+						<td class="width-15 active"><label class="pull-right">税率:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.tax}
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">金额:</label></td>
+						<td class="width-35">
+							<fmt:formatNumber value="${workInvoiceDetail.taxMoney}" pattern="#,#00.00"/>
+						</td>
+						<td class="width-15 active"><label class="pull-right">税额:</label></td>
+						<td class="width-35">
+							<fmt:formatNumber value="${workInvoiceDetail.taxRate}" pattern="#,#00.00"/>
+						</td>
+					</tr>
+					<tr>
+						<td class="width-15 active"><label class="pull-right"><font color="red">*</font>退票原因:</label></td>
+						<td class="width-35" colspan="3">
+							${workInvoiceDetail.returnReason}
+						</td>
+					</tr>
+					<tr>
+						<td class="width-15 active"><label class="pull-right">审批意见:</label></td>
+						<td colspan="5">
+							<form:textarea path="act.comment" class="form-control " rows="5" maxlength="20"/>
+						</td>
+					</tr>
+					</tbody>
+				</table>
+
+				<div class="tabs-container">
+					<ul class="nav nav-tabs">
+						<li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true" style="margin-top: 15px">财务受理信息</a>
+						</li>
+					</ul>
+				</div>
+				<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+					<tbody>
+					<tr>
+						<td class="width-15 active"><label class="pull-right"><font color="red">*</font>作废/退票:</label></td>
+						<td class="width-35">
+							<c:if test="${1 eq workInvoiceDetail.returnCancle}">
+								退票
+							</c:if>
+							<c:if test="${2 eq workInvoiceDetail.returnCancle}">
+								作废
+							</c:if>
+						</td>
+						<td class="width-15 active"><label class="pull-right">发票号:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.number}
+						</td>
+					</tr>
+					<tr>
+						<td class="width-15 active"><label class="pull-right"><font color="red">*</font>原票是否退回:</label></td>
+						<td class="width-35">
+							<c:if test="${1 eq workInvoiceDetail.returnSign}">
+								是
+							</c:if>
+							<c:if test="${2 eq workInvoiceDetail.returnSign}">
+								否
+							</c:if>
+						</td>
+						<td class="width-15 active"><label class="pull-right">退票人:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.returnUser}
+						</td>
+					</tr>
+					<tr>
+						<td class="width-15 active"><label class="pull-right"><font color="red">*</font>退票时间:</label></td>
+						<td class="width-35">
+							<fmt:formatDate value="${workInvoiceDetail.returnDate}" pattern="yyyy-MM-dd"/>
+						</td>
+					</tr>
+					</tbody>
+				</table>
+			</div>
+		</fieldset>
+		<%--<div class="form-actions">--%>
+				<%--<c:if test="${workInvoice.act.taskDefKey eq 'apply_end'}">--%>
+					<%--<input id="btnSubmit" class="btn btn-primary" type="submit" value="兑 现" onclick="$('#flag').val('yes')"/>&nbsp;--%>
+				<%--</c:if>--%>
+				<%--<c:if test="${workInvoice.act.taskDefKey ne 'apply_end'}">--%>
+					<%--<input id="btnSubmit" class="btn btn-primary" type="submit" value="同 意" onclick="$('#flag').val('yes')"/>&nbsp;--%>
+					<%--<input id="btnSubmit" class="btn btn-inverse" type="submit" value="驳 回" onclick="$('#flag').val('no')"/>&nbsp;--%>
+				<%--</c:if>--%>
+			<%--<input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>--%>
+		<%--</div>--%>
+		<act:flowChart procInsId="${workInvoiceDetail.act.procInsId}"/>
+		<act:histoicFlow procInsId="${workInvoiceDetail.act.procInsId}" />
+	</form:form>
+	
+	</div>
+</body>
+</html>

+ 112 - 0
src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailForm.jsp

@@ -0,0 +1,112 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票明细管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+			
+					laydate({
+			            elem: '#date', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+			            event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+			        });
+		});
+	</script>
+</head>
+<body class="hideScroll">
+		<form:form id="inputForm" modelAttribute="workInvoiceDetail" action="${ctx}/workinvoicedetail/workInvoiceDetail/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<sys:message content="${message}"/>	
+		<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+		   <tbody>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">备注信息:</label></td>
+					<td class="width-35">
+						<form:textarea path="remarks" htmlEscape="false" rows="4"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">发票号:</label></td>
+					<td class="width-35">
+						<form:input path="number" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">价税合计:</label></td>
+					<td class="width-35">
+						<form:input path="totalMoney" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">税率:</label></td>
+					<td class="width-35">
+						<form:input path="tax" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">金额:</label></td>
+					<td class="width-35">
+						<form:input path="taxMoney" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">税额:</label></td>
+					<td class="width-35">
+						<form:input path="taxRate" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">登记金额:</label></td>
+					<td class="width-35">
+						<form:input path="incomeMoney" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">发票状态:</label></td>
+					<td class="width-35">
+						<form:input path="state" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">被退标记:</label></td>
+					<td class="width-35">
+						<form:input path="backSign" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">被退票号:</label></td>
+					<td class="width-35">
+						<form:input path="backNumber" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">开票日期:</label></td>
+					<td class="width-35">
+						<input id="date" name="date" type="text" maxlength="20" class="laydate-icon form-control layer-date "
+							value="<fmt:formatDate value="${workInvoiceDetail.date}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">发票主键:</label></td>
+					<td class="width-35">
+						<form:input path="invoiceId" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 310 - 0
src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailFormAdd.jsp

@@ -0,0 +1,310 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票管理</title>
+	<meta name="decorator" content="default"/>
+	<script src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+			debugger
+		  if(validateForm.form()){
+              if(obj == 2){
+                  $("#inputForm").attr("action","${ctx}/workinvoicedetail/workInvoiceDetail/store");
+              }else{
+                  $("#inputForm").attr("action","${ctx}/workinvoicedetail/workInvoiceDetail/save");
+              }
+              $("#inputForm").submit();
+              return true;
+		  }
+		  return false;
+		}
+		$(document).ready(function() {
+            /*$('#money').keyup(function(){
+                var c=$(this);
+                if(/[^\d]/.test(c.val())){//替换非数字字符
+                    var temp_amount=c.val().replace(/[^\d]/g,'');
+                    $(this).val(temp_amount);
+                }
+            })*/
+
+            $("input[name='ext']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                if(radioVal == 0){
+                    $("#td1").removeClass("hide");
+                    $("#td2").addClass("hide");
+                    $("#tr1").show()
+                }else{
+                    $("#td1").addClass("hide");
+                    $("#td2").removeClass("hide");
+                    $("#tr1").hide()
+                }
+            });
+            if("${workInvoiceDetail.returnCancle}" == "2"){
+                $("#returnCancle1").iCheck('check')
+            }else{
+                $("#returnCancle").iCheck('check')
+            }
+            if("${workInvoiceDetail.returnSign}" == "2"){
+                $("#returnSign1").iCheck('check')
+            }else{
+                $("#returnSign").iCheck('check')
+            }
+            validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+        function setValue(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/getWorkInvoice',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cName").val(d.cName);
+                    $("#clientName").val(d.clientName);
+                    $("#leaderName").val(d.leaderName);
+                    $("#officeName").val(d.officeName);
+                    $("#invoiceType").val(d.invoiceType);
+                    $("#invoiceCName").val(d.invoiceCName);
+                    $("#orUnicode").val(d.orUnicode);
+                    $("#address").val(d.address);
+                    $("#telephone").val(d.telephone);
+                    $("#bank").val(d.bank);
+                    $("#bankNumber").val(d.bankNumber);
+                    $("#startDate").val(d.startDate);
+                    $("#totalMoney").val(d.totalMoney);
+                    $("#tax").val(d.tax);
+                    $("#taxMoney").val(d.taxMoney);
+                    $("#taxRate").val(d.taxRate);
+                    $("#number").val(d.number);
+                    $("#id").val(obj);
+                }
+            })
+        }
+        function setDp(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getUserDp',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#dp").val(d.dp);
+                }
+            })
+        }
+        function setPNumber(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getPNumber',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#cName").val(d.cName);
+                    $("#officeName").val(d.officeName);
+                    $("#officeId").val(d.officeId);
+                }
+            })
+        }
+
+	</script>
+</head>
+<body class="gray-bg">
+	<div class="ibox-content">
+		<form:form id="inputForm" modelAttribute="workInvoiceDetail" action="${ctx}/workinvoicedetail/workInvoiceDetail/save" method="post" class="form-horizontal">
+		<form:hidden id="id" path="id"/>
+			<form:hidden path="home"/>
+		<sys:message content="${message}"/>
+		<div class="tab-content">
+			<div class="tabs-container">
+				<ul class="nav nav-tabs">
+					<li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true" >退票信息</a>
+					</li>
+				</ul>
+			</div>
+		<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+		   <tbody>
+		   <tr>
+			   <td class="width-15 active"><label class="pull-right"><font color="red">*</font>被退票号:</label></td>
+			   <td class="width-35">
+				   <sys:gridselectInvoiceDetail url="${ctx}/workinvoicedetail/workInvoiceDetail/selectinvoice" id="detail" name=""  value="${workInvoiceDetail.id}"  title="选择开票单位" labelName="workInvoiceDetail.number"
+								   labelValue="${workInvoiceDetail.number}" cssClass="form-control required" fieldLabels="单位" fieldKeys="number" searchLabel="发票号" searchKey="number" ></sys:gridselectInvoiceDetail>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">退票申请编号:</label></td>
+			   <td class="width-35">
+				   <form:input path="returnNumber" htmlEscape="false" readonly="true"   class="form-control"/>
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">项目名称:</label></td>
+			   <td class="width-35">
+				   <form:input id ="cInfoName" path="workInvoice.project.projectName" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">项目编号:</label></td>
+			   <td class="width-35">
+				   <form:input id ="pNumber" path="workInvoice.project.projectId" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">合同名称:</label></td>
+			   <td class="width-35">
+				   <form:input id ="cName" path="workInvoice.project.workContractInfo.name" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">所属部门:</label></td>
+			   <td class="width-35">
+				   <form:input id ="officeName" path="workInvoice.office.name" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">委托方:</label></td>
+			   <td class="width-35">
+				   <form:input id ="clientName" path="workInvoice.project.workContractInfo.client.name" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">项目负责人:</label></td>
+			   <td class="width-35">
+				   <form:input id ="leaderName" path="workInvoice.project.leaderNameStr" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">发票类型:</label></td>
+			   <td class="width-35">
+				   <form:input id ="invoiceType" path="workInvoice.invoiceType" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">实际开票单位:</label></td>
+			   <td class="width-35">
+				   <form:input id ="invoiceCName" path="workInvoice.client.name" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">纳税人识别号:</label></td>
+			   <td class="width-35">
+				   <form:input id ="orUnicode" path="workInvoice.client.uscCode" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">地址:</label></td>
+			   <td class="width-35">
+				   <form:input id ="address" path="workInvoice.client.address" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">电话:</label></td>
+			   <td class="width-35">
+				   <form:input id ="telephone" path="workInvoice.client.telephone" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">开户银行:</label></td>
+			   <td class="width-35">
+				   <form:input id ="bank" path="workInvoice.bank" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">银行账号:</label></td>
+			   <td class="width-35">
+				   <form:input id ="bankNumber" path="workInvoice.bankNumber" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">开票时间:</label></td>
+			   <td class="width-35">
+				   <input class="form-control layer-date laydate-icon" readonly="readonly" id="startDate" name="startDate" value="<fmt:formatDate
+							value="${workInvoiceDetail.workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">价税合计:</label></td>
+			   <td class="width-35">
+				   <form:input id ="totalMoney" path="totalMoney" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">税率:</label></td>
+			   <td class="width-35">
+				   <form:input id ="tax" path="tax" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">金额:</label></td>
+			   <td class="width-35">
+				   <form:input id ="taxMoney" path="taxMoney" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">税额:</label></td>
+			   <td class="width-35">
+				   <form:input id ="taxRate" path="taxRate" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+		   </tr>
+		   <tr>
+			   <td class="width-15 active"><label class="pull-right"><font color="red">*</font>退票原因:</label></td>
+			   <td class="width-35" colspan="3">
+				   <form:textarea path="returnReason" htmlEscape="false" rows="4"    class="form-control required"/>
+			   </td>
+		   </tr>
+		 	</tbody>
+		</table>
+
+			<div class="tabs-container">
+				<ul class="nav nav-tabs">
+					<li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true" style="margin-top: 15px">财务受理信息</a>
+					</li>
+				</ul>
+			</div>
+			<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+				<tbody>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>作废/退票:</label></td>
+					<td class="width-35">
+						<input type="radio" class="i-checks" name="returnCancle" checked id="returnCancle" value="1">
+						<label for="returnCancle">退票</label>
+						<input type="radio" class="i-checks" name="returnCancle" id="returnCancle1" value="2">
+						<label for="returnCancle1">作废</label>
+					</td>
+					<td class="width-15 active"><label class="pull-right">发票号:</label></td>
+					<td class="width-35">
+						<form:input id ="number" path="number" htmlEscape="false"  readonly="true" class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>原票是否退回:</label></td>
+					<td class="width-35">
+						<input type="radio" class="i-checks" name="returnSign" checked id="returnSign" value="1">
+						<label for="returnSign">是</label>
+						<input type="radio" class="i-checks" name="returnSign" id="returnSign1" value="2">
+						<label for="returnSign1">否</label>
+					</td>
+					<td class="width-15 active"><label class="pull-right">退票人:</label></td>
+					<td class="width-35">
+						<form:input id ="returnUser" path="returnUser" htmlEscape="false"  readonly="true" class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>退票时间:</label></td>
+					<td class="width-35">
+						<input class="form-control layer-date reuired laydate-icon" id="returnDate" name="returnDate" value="<fmt:formatDate
+							value="${workInvoiceDetail.returnDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+					</td>
+				</tr>
+				</tbody>
+			</table>
+		</div>
+	</form:form>
+	</div>
+	</div>
+</body>
+</html>

+ 236 - 0
src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailFormDetail.jsp

@@ -0,0 +1,236 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			$("#name").focus();
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+	</script>
+</head>
+<body class="gray-bg">
+	 <div class="ibox-content">
+		<form:form id="inputForm" modelAttribute="workInvoiceDetail" action="${ctx}/workinvoicedetail/workInvoiceDetail/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="act.taskId"/>
+		<form:hidden path="act.taskName"/>
+		<form:hidden path="act.taskDefKey"/>
+		<form:hidden path="act.procInsId"/>
+		<form:hidden path="act.procDefId"/>
+		<form:hidden id="flag" path="act.flag"/>
+		<sys:message content="${message}"/>
+		<fieldset>
+			<legend>${workInvoiceDetail.act.taskName}</legend>
+			<div class="tab-content">
+				<div class="tabs-container">
+					<ul class="nav nav-tabs">
+						<li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true" >退票信息</a>
+						</li>
+					</ul>
+				</div>
+				<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+					<tbody>
+					<tr>
+						<td class="width-15 active"><label class="pull-right"><font color="red">*</font>被退票号:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.number}
+						</td>
+						<td class="width-15 active"><label class="pull-right">退票申请编号:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.returnNumber}
+						</td>
+						<td class="width-35">
+							<c:choose>
+								<c:when test="${ empty workInvoiceDetail.status}">
+									新添
+								</c:when>
+								<c:otherwise>
+									${fns:getDictLabel(workInvoiceDetail.status, 'audit_state','')}
+								</c:otherwise>
+							</c:choose>
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">项目名称:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.project.projectName}
+						</td>
+						<td class="width-15 active"><label class="pull-right">项目编号:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.project.projectId}
+						</td>
+
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">合同名称:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.project.workContractInfo.name}
+						</td>
+						<td class="width-15 active"><label class="pull-right">所属部门:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.office.name}
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">委托方:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.project.workContractInfo.client.name}
+						</td>
+						<td class="width-15 active"><label class="pull-right">项目负责人:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.project.leaderNameStr}
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">发票类型:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.invoiceType}
+						</td>
+						<td class="width-15 active"><label class="pull-right">实际开票单位:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.client.name}
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">纳税人识别号:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.client.uscCode}
+						</td>
+						<td class="width-15 active"><label class="pull-right">地址:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.client.address}
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">电话:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.client.telephone}
+						</td>
+						<td class="width-15 active"><label class="pull-right">开户银行:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.bank}
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">银行账号:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.workInvoice.bankNumber}
+						</td>
+						<td class="width-15 active"><label class="pull-right">开票时间:</label></td>
+						<td class="width-35">
+							<fmt:formatDate value="${workInvoiceDetail.workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">价税合计:</label></td>
+						<td class="width-35">
+							<fmt:formatNumber value="${workInvoiceDetail.totalMoney}" pattern="#,#00.00"/>
+						</td>
+						<td class="width-15 active"><label class="pull-right">税率:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.tax}
+						</td>
+					</tr>
+					<tr >
+						<td class="width-15 active"><label class="pull-right">金额:</label></td>
+						<td class="width-35">
+							<fmt:formatNumber value="${workInvoiceDetail.taxMoney}" pattern="#,#00.00"/>
+						</td>
+						<td class="width-15 active"><label class="pull-right">税额:</label></td>
+						<td class="width-35">
+							<fmt:formatNumber value="${workInvoiceDetail.taxRate}" pattern="#,#00.00"/>
+						</td>
+					</tr>
+					<tr>
+						<td class="width-15 active"><label class="pull-right"><font color="red">*</font>退票原因:</label></td>
+						<td class="width-35" colspan="3">
+								${workInvoiceDetail.returnReason}
+						</td>
+					</tr>
+					</tbody>
+				</table>
+
+				<div class="tabs-container">
+					<ul class="nav nav-tabs">
+						<li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true" style="margin-top: 15px">财务受理信息</a>
+						</li>
+					</ul>
+				</div>
+				<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+					<tbody>
+					<tr>
+						<td class="width-15 active"><label class="pull-right"><font color="red">*</font>作废/退票:</label></td>
+						<td class="width-35">
+							<c:if test="${1 eq workInvoiceDetail.returnCancle}">
+								退票
+							</c:if>
+							<c:if test="${2 eq workInvoiceDetail.returnCancle}">
+								作废
+							</c:if>
+						</td>
+						<td class="width-15 active"><label class="pull-right">发票号:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.number}
+						</td>
+					</tr>
+					<tr>
+						<td class="width-15 active"><label class="pull-right"><font color="red">*</font>原票是否退回:</label></td>
+						<td class="width-35">
+							<c:if test="${1 eq workInvoiceDetail.returnSign}">
+								是
+							</c:if>
+							<c:if test="${2 eq workInvoiceDetail.returnSign}">
+								否
+							</c:if>
+						</td>
+						<td class="width-15 active"><label class="pull-right">退票人:</label></td>
+						<td class="width-35">
+								${workInvoiceDetail.returnUser}
+						</td>
+					</tr>
+					<tr>
+						<td class="width-15 active"><label class="pull-right"><font color="red">*</font>退票时间:</label></td>
+						<td class="width-35">
+							<fmt:formatDate value="${workInvoiceDetail.returnDate}" pattern="yyyy-MM-dd"/>
+						</td>
+					</tr>
+					</tbody>
+				</table>
+			</div>
+		</fieldset>
+		<div class="form-actions hide">
+			<input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+		</div>
+		<%--<act:flowChart procInsId="${workInvoice.act.procInsId}"/>
+		<act:histoicFlow procInsId="${workInvoice.act.procInsId}" />--%>
+	</form:form>
+	
+	</div>
+</body>
+</html>

+ 121 - 0
src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailHistoricList.jsp

@@ -0,0 +1,121 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>已审核发票管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        $(document).ready(function() {
+            laydate.render({
+                elem: '#beginDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'datetime'
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'datetime'
+            });
+        });
+	</script>
+</head>
+<body class="gray-bg">
+<div class="wrapper wrapper-content">
+	<div class="ibox">
+		<div class="ibox-title" style="height: 70px;">
+			<h5>
+				<ul class="nav nav-tabs">
+					<li ><a href="${ctx}/workinvoicedetail/workInvoiceDetail/list">退票信息</a></li>
+					<li ><a href="${ctx}/workinvoicedetail/workInvoiceDetail/queryToList">待办任务</a></li>
+					<li class="active"><a href="${ctx}/workinvoicedetail/workInvoiceDetail/queryCompleteList">已办任务</a></li>
+				</ul>
+			</h5>
+			<%--<div class="ibox-tools">
+				<a class="collapse-link">
+					<i class="fa fa-chevron-up"></i>
+				</a>
+				<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:void(0)">
+					<i class="fa fa-wrench"></i>
+				</a>
+
+			</div>--%>
+		</div>
+
+		<div class="ibox-content">
+			<sys:message content="${message}"/>
+			<!--查询条件-->
+			<div class="row">
+				<div class="col-sm-12">
+					<form:form id="searchForm" modelAttribute="act" action="${ctx}/workinvoicedetail/workInvoiceDetail/workInvoiceDetailHistoricList" method="get" class="form-inline">
+						<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+						<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+						<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+						<div class="form-group">
+							<label>创建时间:</label>
+							<input id="beginDate"  name="beginDate"  type="text" readonly="readonly" maxlength="20" style="width:200px;" class="laydate-icondate form-control layer-date input-sm"
+								   value="<fmt:formatDate value="${act.beginDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+							 -- 
+							<input id="endDate" name="endDate" type="text" readonly="readonly" maxlength="20" style="width:200px;" class="laydate-icondate form-control layer-date input-sm"
+								   value="<fmt:formatDate value="${act.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+						</div>
+					</form:form>
+					<br/>
+				</div>
+			</div>
+			<!-- 工具栏 -->
+			<div class="row">
+				<div class="col-sm-12">
+					<div class="pull-left">
+						<button class="btn btn-white btn-sm " data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i> 刷新</button>
+					</div>
+					<div class="pull-right">
+						<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="search()" ><i class="fa fa-search"></i> 查询</button>
+						<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="reset()" ><i class="fa fa-refresh"></i> 重置</button>
+					</div>
+				</div>
+			</div>
+			<!-- 表格 -->
+			<table id="contentTable" class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+				<thead>
+				<tr>
+					<th style="text-align: center;width: 10%">流程发起人</th>
+					<th style="text-align: center;width: 10%">当前环节</th>
+					<th style="text-align: center;width: 10%">流程名称</th>
+					<th style="text-align: center;width: 10%">流程版本</th>
+					<th style="text-align: center;width: 15%">项目名称</th>
+					<th style="text-align: center;width: 10%">价税合计</th>
+					<th style="text-align: center;width: 15%">创建时间</th>
+				</tr>
+				</thead>
+				<tbody>
+				<c:forEach items="${list}" var="workInvoiceDetail">
+					<c:set var="task" value="${workInvoiceDetail.act.task}" />
+					<c:set var="vars" value="${workInvoiceDetail.act.vars}" />
+					<c:set var="procDef" value="${workInvoiceDetail.act.procDef}" />
+					<c:set var="status" value="${workInvoiceDetail.act.status}" />
+					<tr>
+						<td>${workInvoiceDetail.act.vars.map.applyUserId}</td>
+						<td>
+								${fns:getDictLabel(workInvoiceDetail.status, 'audit_state','')}
+						</td>
+						<td>${procDef.name}</td>
+						<td><b title='流程版本号'>V: ${procDef.version}</b></td>
+						<td>
+							<span title="${workInvoiceDetail.workInvoice.project.projectName}">${fns:abbr(workInvoiceDetail.workInvoice.project.projectName,30)}</span>
+						</td>
+						<td><fmt:formatNumber value="${workInvoiceDetail.totalMoney}" pattern="#,#00.00"/></td>
+						<td><fmt:formatDate value="${workInvoiceDetail.updateDate}" type="both"/></td>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+		<td>${act.vars.map.applyUserId}</td>
+	</div>
+</div>
+</body>
+</html>

+ 278 - 0
src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailList.jsp

@@ -0,0 +1,278 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票一览</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		$(document).ready(function() {
+            //搜索框收放
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow1);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow1);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#beginContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+
+
+            laydate.render({
+                elem: '#endContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+		});
+	</script>
+	<style>
+		body{
+			background-color:transparent;
+			filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+			color:#ffffff;
+			background-color:rgba(255,255,255,0);
+			height:100%;
+		}
+	</style>
+</head>
+<body class="gray-bg">
+<div class="wrapper wrapper-content">
+	<sys:message content="${message}"/>
+	<div class="layui-row">
+		<div class="full-width fl">
+			<div class="contentShadow layui-row" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="workInvoiceDetail" action="${ctx}/workinvoicedetail/workInvoiceDetail/" method="post" class="form-inline">
+					<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+					<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+					<div class="commonQuery lw8">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">实际开票单位:</label>
+							<div class="layui-input-block">
+								<form:input id="cName" path="workInvoice.client.name" htmlEscape="false" class="form-control  layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">开票人:</label>
+							<div class="layui-input-block">
+								<form:input id="invoiceDrawerName" path="invoiceDrawerName" htmlEscape="false" class="form-control  layui-input"/>
+							</div>
+						</div>
+
+						<div class="layui-item athird">
+							<div class="input-group">
+								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+								<button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
+								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" class="lw8" style="clear:both;display:none;">
+
+						<div class="layui-item query athird">
+							<label class="layui-form-label">发票类型:</label>
+							<div class="layui-input-block with-icon">
+								<form:select path="invoiceInvoiceType"  class="form-control simple-select">
+									<form:option value="" label=""/>
+									<form:options items="${fns:getDictList('invoice_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+								</form:select>
+							</div>
+						</div>
+
+						<div class="layui-item query athird">
+							<label class="layui-form-label">所属部门:</label>
+							<div class="layui-input-block">
+								<form:input id="invoiceOfficeName" path="invoiceOfficeName" htmlEscape="false" class="form-control  layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">合同名称:</label>
+							<div class="layui-input-block">
+								<form:input id="contractName" path="contractName" htmlEscape="false" class="form-control  layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">开票日期:</label>
+							<div class="layui-input-block">
+								<input id="beginContractDate" name="beginContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workInvoiceDetail.beginContractDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+								<span class="group-sep">-</span>
+								<input id="endContractDate" name="endContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workInvoiceDetail.endContractDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+							</div>
+						</div>
+					</div>
+				</form:form>
+			</div>
+		</div>
+		<div class="full-width fl">
+			<div class="contentShadow layui-form contentDetails">
+				<div class="nav-btns">
+					<shiro:hasPermission name="workinvoicedetail:workInvoiceDetail:export">
+						<table:exportExcel url="${ctx}/workinvoicedetail/workInvoiceDetail/export"></table:exportExcel><!-- 导出按钮 -->
+					</shiro:hasPermission>
+					<button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i>&nbsp;刷新</button>
+					<div style="clear: both;"></div>
+				</div>
+				<table class="oa-table layui-table" id="contentTable"></table>
+
+				<!-- 分页代码 -->
+				<table:page page="${page}"></table:page>
+				<div style="clear: both;"></div>
+			</div>
+		</div>
+	</div>
+	<div id="changewidth"></div>
+</div>
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script>
+    layui.use('table', function(){
+        layui.table.render({
+            limit:${ page.pageSize }
+            ,elem: '#contentTable'
+            ,page: false
+            ,cols: [[
+                // {checkbox: true, fixed: true},
+                {field:'index',align:'center', title: '序号',width:40}
+                ,{field:'code',align:'center', title: '发票代码',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.code +"'>" + d.code + "</span>";
+                }}
+                ,{field:'number',align:'center', title: '发票号',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.number +"'>" + d.number + "</span>";
+                }}
+                ,{field:'totalMoney',align:'center', title: '价税合计',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.totalMoney +"'>" + d.totalMoney + "</span>";
+                }}
+                ,{field:'tax',align:'center', title: '税率',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.tax +"'>" + d.tax + "</span>";
+                }}
+                ,{field:'taxMoney',align:'center', title: '金额',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.taxMoney +"'>" + d.taxMoney + "</span>";
+                }}
+                ,{field:'taxRate',align:'center', title: '税额',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.taxRate +"'>" + d.taxRate + "</span>";
+                }}
+                ,{field:'incomeMoney',align:'center', title: '累计登记金额',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.incomeMoney +"'>" + d.incomeMoney + "</span>";
+                }}
+                ,{field:'date',align:'center', title: '开票日期',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.date +"'>" + d.date + "</span>";
+                }}
+                ,{field:'ext',align:'center', title: '上级/本公司开票',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.ext +"'>" + d.ext + "</span>";
+                }}
+                ,{field:'invoiceType',align:'center', title: '发票类型',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.invoiceType +"'>" + d.invoiceType + "</span>";
+                }}
+                ,{field:'client',align:'center', title: '实际开票单位',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.client +"'>" + d.client + "</span>";
+                }}
+                ,{field:'orUnicode',align:'center', title: '纳税人识别号',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.orUnicode +"'>" + d.orUnicode + "</span>";
+                }}
+                ,{field:'content',align:'center', title: '开票内容要求',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.content +"'>" + d.content + "</span>";
+                }}
+                ,{field:'remarks',align:'center', title: '备注',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.remarks +"'>" + d.remarks + "</span>";
+                }}
+                ,{field:'state',align:'center', title: '发票状态',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.state +"'>" + d.state + "</span>";
+                }}
+                ,{field:'backSign',align:'center', title: '被退标记',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.backSign +"'>" + d.backSign + "</span>";
+                }}
+                ,{field:'backNumber',align:'center', title: '被退票号及代码',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.backNumber +"'>" + d.backNumber + "</span>";
+                }}
+                ,{field:'invoiceNumber',align:'center', title: '申请编号',minWidth:210,templet:function(d){
+                    return "<span title='"+ d.invoiceNumber +"'>" + d.invoiceNumber + "</span>";
+                }}
+                ,{field:'drawerName',align:'center', title: '开票人',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.drawerName +"'>" + d.drawerName + "</span>";
+                }}
+                ,{field:'office',align:'center', title: '所属部门',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.office +"'>" + d.office + "</span>";
+                }}
+                ,{field:'contractNum',align:'center', title: '合同编号',minWidth:210,templet:function(d){
+                    return "<span title='"+ d.contractNum +"'>" + d.contractNum + "</span>";
+                }}
+                ,{field:'name',align:'center', title: '合同名称',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.name +"'>" + d.name + "</span>";
+                }}
+                ,{field:'clientName', align:'center',title: '主委托方',minWidth:210,templet:function(d){
+                    return "<span title='"+ d.clientName +"'>" + d.clientName + "</span>";
+                }}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="workInvoiceDetail" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${workInvoiceDetail.id}"
+                    ,"code":"${workInvoiceDetail.code}"
+                    ,"number":"${workInvoiceDetail.number}"
+                    ,"totalMoney":"<fmt:formatNumber value="${workInvoiceDetail.totalMoney}" pattern="#,#00.00"/>"
+                    ,"tax":"${workInvoiceDetail.tax}%"
+                    ,"taxMoney":"<fmt:formatNumber value="${workInvoiceDetail.taxMoney}" pattern="#,#00.00"/>"
+					<%--/*"${fns:getDictLabel(workInvoiceDetail.workContractInfo.contractType, 'contract_type', '')}"*/--%>
+                    ,"taxRate":"<fmt:formatNumber value="${workInvoiceDetail.taxRate}" pattern="#,#00.00"/>"
+					<%--"<fmt:formatDate value="${workInvoiceDetail.createDate}" pattern="yyyy-MM-dd"/>"--%>
+                    ,"incomeMoney":"<fmt:formatNumber value="${workInvoiceDetail.incomeMoney}" pattern="#,#00.00"/>"
+                    ,"date":"<fmt:formatDate value="${workInvoiceDetail.date}" pattern="yyyy-MM-dd"/>"
+                    ,"ext":"<c:choose><c:when test="${workInvoiceDetail.invoiceExt eq '0'}">本公司开票</c:when><c:when test="${workInvoiceDetail.invoiceExt eq '1'}">上级公司开票</c:when></c:choose>"
+                    ,"invoiceType":"<c:choose><c:when test="${workInvoiceDetail.invoiceInvoiceType eq '1'}">专票</c:when><c:when test="${workInvoiceDetail.invoiceInvoiceType eq '2'}">普票</c:when></c:choose>"
+                    ,"client":"${workInvoiceDetail.invoiceClientName}"
+                    ,"orUnicode":"${workInvoiceDetail.invoiceOrUnicode}"
+                    ,"content":"${workInvoiceDetail.invoiceContent}"
+                    ,"remarks":"${workInvoiceDetail.invoiceRemarks}"
+                    ,"state":"${workInvoiceDetail.state}"
+                    ,"backSign":"${workInvoiceDetail.backSign}"
+                    ,"backNumber":"<c:choose><c:when test="${workInvoiceDetail.backSign eq '冲销'}">${workInvoiceDetail.backNumber},${workInvoiceDetail.backCode}</c:when><c:otherwise></c:otherwise></c:choose>"
+                    ,"invoiceNumber":"<c:choose><c:when test="${workInvoiceDetail.backSign eq '冲销'}">${workInvoiceDetail.returnNumbers}</c:when><c:otherwise>${workInvoiceDetail.invocieNumber}</c:otherwise></c:choose>"
+                    ,"drawerName":"${workInvoiceDetail.invoiceDrawerName}"
+                    ,"office":"${workInvoiceDetail.invoiceOfficeName}"
+                    ,"contractNum":"${workInvoiceDetail.contractNum}"
+                    ,"name":"${workInvoiceDetail.contractName}"
+                    ,"clientName":"${workInvoiceDetail.contractClientName}"
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+
+    resizeListTable();
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+    var navg = window.navigator.userAgent;
+    if(navg.indexOf('Chrome')!==-1&& navg.indexOf('Edge')==-1){
+        $('.layui-table').children().eq(0).children().children().eq(1).css({"background":"transparent","position":"sticky","border-right":"1px solid #ccc","left":"0","background":"#F5F5F5","z-index":"999"});
+        var tableft = $('.layui-table').children().eq(0).children().children().eq(1).width();
+        $('.layui-table').children().eq(0).children().children().eq(2).css({"background":"transparent","position":"sticky","left":tableft,"background":"#F5F5F5","z-index":"999"});
+        var trone = $('.layui-table').children().eq(1).children();
+        var newArr = []
+        for(var i=0;i<trone.length;i++){
+            newArr.push(trone[i]);
+            $(newArr[i]).children().eq(1).css({"background":"transparent","position":"sticky","left":"0","background":"#fff","z-index":"999"});
+            $(newArr[i]).children().eq(2).css({"background":"transparent","position":"sticky","left":tableft,"background":"#fff","z-index":"999"});
+        }
+    }
+</script>
+	
+</body>
+</html>

+ 316 - 0
src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailModify.jsp

@@ -0,0 +1,316 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票管理</title>
+	<meta name="decorator" content="default"/>
+	<script src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+			debugger
+		  if(validateForm.form()){
+              if(obj == 2){
+                  $("#flag").val("no");
+              }else{
+                  $("#flag").val("yes");
+              }
+              $("#inputForm").submit();
+              return true;
+		  }
+		  return false;
+		}
+		$(document).ready(function() {
+            /*$('#money').keyup(function(){
+                var c=$(this);
+                if(/[^\d]/.test(c.val())){//替换非数字字符
+                    var temp_amount=c.val().replace(/[^\d]/g,'');
+                    $(this).val(temp_amount);
+                }
+            })*/
+
+            $("input[name='ext']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                if(radioVal == 0){
+                    $("#td1").removeClass("hide");
+                    $("#td2").addClass("hide");
+                    $("#tr1").show()
+                }else{
+                    $("#td1").addClass("hide");
+                    $("#td2").removeClass("hide");
+                    $("#tr1").hide()
+                }
+            });
+            if("${workInvoiceDetail.returnCancle}" == "2"){
+                $("#returnCancle1").iCheck('check')
+            }else{
+                $("#returnCancle").iCheck('check')
+            }
+            if("${workInvoiceDetail.returnSign}" == "2"){
+                $("#returnSign1").iCheck('check')
+            }else{
+                $("#returnSign").iCheck('check')
+            }
+            validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+        function setValue(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/getWorkInvoice',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cName").val(d.cName);
+                    $("#clientName").val(d.clientName);
+                    $("#leaderName").val(d.leaderName);
+                    $("#officeName").val(d.officeName);
+                    $("#invoiceType").val(d.invoiceType);
+                    $("#invoiceCName").val(d.invoiceCName);
+                    $("#orUnicode").val(d.orUnicode);
+                    $("#address").val(d.address);
+                    $("#telephone").val(d.telephone);
+                    $("#bank").val(d.bank);
+                    $("#bankNumber").val(d.bankNumber);
+                    $("#startDate").val(d.startDate);
+                    $("#totalMoney").val(d.totalMoney);
+                    $("#tax").val(d.tax);
+                    $("#taxMoney").val(d.taxMoney);
+                    $("#taxRate").val(d.taxRate);
+                    $("#number").val(d.number);
+                    $("#id").val(obj);
+                }
+            })
+        }
+        function setDp(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getUserDp',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#dp").val(d.dp);
+                }
+            })
+        }
+        function setPNumber(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getPNumber',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#cName").val(d.cName);
+                    $("#officeName").val(d.officeName);
+                    $("#officeId").val(d.officeId);
+                }
+            })
+        }
+
+	</script>
+</head>
+<body class="gray-bg">
+	<div class="ibox-content">
+		<form:form id="inputForm" modelAttribute="workInvoiceDetail" action="${ctx}/workinvoicedetail/workInvoiceDetail/saveAudit" method="post" class="form-horizontal">
+		<form:hidden id="id" path="id"/>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+		<sys:message content="${message}"/>
+		<div class="tab-content">
+			<div class="tabs-container">
+				<ul class="nav nav-tabs">
+					<li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true" >退票信息</a>
+					</li>
+				</ul>
+			</div>
+		<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+		   <tbody>
+		   <tr>
+			   <td class="width-15 active"><label class="pull-right"><font color="red">*</font>被退票号:</label></td>
+			   <td class="width-35">
+				   <sys:gridselectInvoiceDetail url="${ctx}/workinvoicedetail/workInvoiceDetail/selectinvoice" id="detail" name=""  value="${workInvoiceDetail.id}"  title="选择开票单位" labelName="workInvoiceDetail.number"
+								   labelValue="${workInvoiceDetail.number}" cssClass="form-control required" fieldLabels="单位" fieldKeys="number" searchLabel="发票号" searchKey="number" ></sys:gridselectInvoiceDetail>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">退票申请编号:</label></td>
+			   <td class="width-35">
+				   <form:input path="returnNumber" htmlEscape="false" readonly="true"   class="form-control"/>
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">项目名称:</label></td>
+			   <td class="width-35">
+				   <form:input id ="cInfoName" path="workInvoice.project.projectName" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">项目编号:</label></td>
+			   <td class="width-35">
+				   <form:input id ="pNumber" path="workInvoice.project.projectId" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">合同名称:</label></td>
+			   <td class="width-35">
+				   <form:input id ="cName" path="workInvoice.project.workContractInfo.name" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">所属部门:</label></td>
+			   <td class="width-35">
+				   <form:input id ="officeName" path="workInvoice.office.name" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">委托方:</label></td>
+			   <td class="width-35">
+				   <form:input id ="clientName" path="workInvoice.project.workContractInfo.client.name" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">项目负责人:</label></td>
+			   <td class="width-35">
+				   <form:input id ="leaderName" path="workInvoice.project.leaderNameStr" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">发票类型:</label></td>
+			   <td class="width-35">
+				   <form:input id ="invoiceType" path="workInvoice.invoiceType" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">实际开票单位:</label></td>
+			   <td class="width-35">
+				   <form:input id ="invoiceCName" path="workInvoice.client.name" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">纳税人识别号:</label></td>
+			   <td class="width-35">
+				   <form:input id ="orUnicode" path="workInvoice.client.uscCode" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">地址:</label></td>
+			   <td class="width-35">
+				   <form:input id ="address" path="workInvoice.client.address" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">电话:</label></td>
+			   <td class="width-35">
+				   <form:input id ="telephone" path="workInvoice.client.telephone" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">开户银行:</label></td>
+			   <td class="width-35">
+				   <form:input id ="bank" path="workInvoice.bank" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">银行账号:</label></td>
+			   <td class="width-35">
+				   <form:input id ="bankNumber" path="workInvoice.bankNumber" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">开票时间:</label></td>
+			   <td class="width-35">
+				   <input class="form-control layer-date laydate-icon" readonly="readonly" id="startDate" name="startDate" value="<fmt:formatDate
+							value="${workInvoiceDetail.workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'yyyy-MM-dd'})">
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">价税合计:</label></td>
+			   <td class="width-35">
+				   <form:input id ="totalMoney" path="totalMoney" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">税率:</label></td>
+			   <td class="width-35">
+				   <form:input id ="tax" path="tax" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+		   </tr>
+		   <tr >
+			   <td class="width-15 active"><label class="pull-right">金额:</label></td>
+			   <td class="width-35">
+				   <form:input id ="taxMoney" path="taxMoney" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">税额:</label></td>
+			   <td class="width-35">
+				   <form:input id ="taxRate" path="taxRate" htmlEscape="false"  readonly="true" class="form-control "/>
+			   </td>
+		   </tr>
+		   <tr>
+			   <td class="width-15 active"><label class="pull-right"><font color="red">*</font>退票原因:</label></td>
+			   <td class="width-35" colspan="3">
+				   <form:textarea path="returnReason" htmlEscape="false" rows="4"    class="form-control required"/>
+			   </td>
+		   </tr>
+		 	</tbody>
+		</table>
+
+			<div class="tabs-container">
+				<ul class="nav nav-tabs">
+					<li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true" style="margin-top: 15px">财务受理信息</a>
+					</li>
+				</ul>
+			</div>
+			<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+				<tbody>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>作废/退票:</label></td>
+					<td class="width-35">
+						<input type="radio" class="i-checks" name="returnCancle" checked id="returnCancle" value="1">
+						<label for="returnCancle">退票</label>
+						<input type="radio" class="i-checks" name="returnCancle" id="returnCancle1" value="2">
+						<label for="returnCancle1">作废</label>
+					</td>
+					<td class="width-15 active"><label class="pull-right">发票号:</label></td>
+					<td class="width-35">
+						<form:input id ="number" path="number" htmlEscape="false"  readonly="true" class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>原票是否退回:</label></td>
+					<td class="width-35">
+						<input type="radio" class="i-checks" name="returnSign" checked id="returnSign" value="1">
+						<label for="returnSign">是</label>
+						<input type="radio" class="i-checks" name="returnSign" id="returnSign1" value="2">
+						<label for="returnSign1">否</label>
+					</td>
+					<td class="width-15 active"><label class="pull-right">退票人:</label></td>
+					<td class="width-35">
+						<form:input id ="returnUser" path="returnUser" htmlEscape="false"  readonly="true" class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>退票时间:</label></td>
+					<td class="width-35">
+						<input class="form-control layer-date reuired laydate-icon" id="returnDate" name="returnDate" value="<fmt:formatDate
+							value="${workInvoiceDetail.returnDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'yyyy-MM-dd'})">
+					</td>
+				</tr>
+				</tbody>
+			</table>
+		</div>
+	</form:form>
+	</div>
+	</div>
+</body>
+</html>

+ 15 - 0
src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailTask.jsp

@@ -0,0 +1,15 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票流程追踪</title>
+	<meta name="decorator" content="default"/>
+</head>
+<body class="gray-bg">
+	<div class="wrapper wrapper-content">
+        <act:flowChart procInsId="${processInstanceId}"/>
+        <act:histoicFlow procInsId="${processInstanceId}"/>
+	</div>
+</body>
+</html>
+

+ 204 - 0
src/main/webapp/webpage/modules/workinvoicedetail/workInvoiceDetailTodoList.jsp

@@ -0,0 +1,204 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>待审退票管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        $(document).ready(function() {
+            laydate.render({
+                elem: '#beginDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'datetime'
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'datetime'
+            });
+        });
+        function page(n,s){
+            location = '${ctx}/workinvoicedetail/workInvoiceDetail/list/?pageNo='+n+'&pageSize='+s;
+        }
+        /**
+         * 签收任务
+         */
+        function claim(taskId) {
+            $.get('${ctx}/act/task/claim' ,{taskId: taskId}, function(data) {
+                if (data == 'true'){
+                    top.$.jBox.tip('签收完成');
+                    location = '${ctx}/workinvoicedetail/workInvoiceDetail/workInvoiceDetailTodoList/';
+                }else{
+                    top.$.jBox.tip('签收失败');
+                }
+            });
+        }
+
+        function openDialogre(title,url,width,height,target){
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url ,
+                btn: ['同意','驳回','关闭'],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                    return false;
+                },
+                btn3: function(index){
+                }
+            });
+
+        }
+	</script>
+</head>
+<body class="gray-bg">
+<div class="wrapper wrapper-content">
+	<div class="ibox">
+		<div class="ibox-title" style="height: 70px;">
+			<h5>
+				<ul class="nav nav-tabs">
+					<li ><a href="${ctx}/workinvoicedetail/workInvoiceDetail/list">退票信息</a></li>
+					<li class="active"><a href="${ctx}/workinvoicedetail/workInvoiceDetail/queryToList">待办任务</a></li>
+					<li><a href="${ctx}/workinvoicedetail/workInvoiceDetail/queryCompleteList">已办任务</a></li>
+				</ul>
+			</h5>
+			<%--<div class="ibox-tools">
+				<a class="collapse-link">
+					<i class="fa fa-chevron-up"></i>
+				</a>
+				<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:void(0)">
+					<i class="fa fa-wrench"></i>
+				</a>
+
+			</div>--%>
+		</div>
+
+		<div class="ibox-content">
+			<sys:message content="${message}"/>
+			<!--查询条件-->
+			<div class="row">
+				<div class="col-sm-12">
+					<form:form id="searchForm" modelAttribute="act" action="${ctx}/workinvoicedetail/workInvoiceDetail/workInvoiceDetailTodoList" method="get" class="form-inline">
+						<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+						<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+						<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+						<div class="form-group">
+							<label>创建时间:</label>
+							<input id="beginDate"  name="beginDate"  type="text" readonly="readonly" maxlength="20" style="width:200px;" class="laydate-icondate form-control layer-date input-sm"
+								   value="<fmt:formatDate value="${act.beginDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+							 -- 
+							<input id="endDate" name="endDate" type="text" readonly="readonly" maxlength="20" style="width:200px;" class="laydate-icondate form-control layer-date input-sm"
+								   value="<fmt:formatDate value="${act.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+						</div>
+					</form:form>
+					<br/>
+				</div>
+			</div>
+
+			<!-- 工具栏 -->
+			<div class="row">
+				<div class="col-sm-12">
+					<div class="pull-left">
+						<button class="btn btn-white btn-sm " data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i> 刷新</button>
+					</div>
+					<div class="pull-right">
+						<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="search()" ><i class="fa fa-search"></i> 查询</button>
+						<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="reset()" ><i class="fa fa-refresh"></i> 重置</button>
+					</div>
+				</div>
+			</div>
+			<!-- 表格 -->
+			<table id="contentTable" class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+				<thead>
+				<tr>
+					<th style="text-align: center;width: 10%">流程发起人</th>
+					<th style="text-align: center;width: 10%">当前环节</th>
+					<th style="text-align: center;width: 10%">流程名称</th>
+					<th style="text-align: center;width: 8%">流程版本</th>
+					<th style="text-align: center;"  class="">退票申请编号</th>
+					<th style="text-align: center;"  class="">项目编号</th>
+					<th style="text-align: center;"  class="">项目名称</th>
+					<th style="text-align: center;width: 15%">创建时间</th>
+					<th style="text-align: center;width: 8%">操作</th>
+				</tr>
+				</thead>
+				<tbody>
+				<c:forEach items="${list}" var="workInvoiceDetail">
+					<c:set var="task" value="${workInvoiceDetail.act.task}" />
+					<c:set var="vars" value="${workInvoiceDetail.act.vars}" />
+					<c:set var="procDef" value="${workInvoiceDetail.act.procDef}" />
+					<c:set var="status" value="${workInvoiceDetail.act.status}" />
+					<tr>
+						<td>${workInvoiceDetail.act.vars.map.applyUserId}</td>
+						<td>
+							${task.name}
+						</td>
+						<td>${procDef.name}</td>
+						<td><b title='流程版本号'>V: ${procDef.version}</b></td>
+						<td>
+							<a  href="javascript:void(0)" onclick="openDialogView('查看退票申请', '${ctx}/workinvoicedetail/workInvoiceDetail/form?id=${workInvoiceDetail.id}&tabId=1','80%','80%')">
+								<span title="${workInvoiceDetail.number}">${fns:abbr(workInvoiceDetail.number,30)}</span>
+							</a>
+						</td>
+						<td>
+								${workInvoiceDetail.workInvoice.project.projectId}
+						</td>
+						<td>
+							<span title="${workInvoiceDetail.workInvoice.project.projectName}">${fns:abbr(workInvoiceDetail.workInvoice.project.projectName,30)}</span>
+						</td>
+						<td><fmt:formatDate value="${task.createTime}" type="both"/></td>
+						<td>
+							<div style="text-align: center">
+							<a href="javascript:void(0)" onclick="openDialogre('发票审核', '${ctx}/workinvoicedetail/workInvoiceDetail/applyOnLeave?taskId=${task.id}&taskName=${fns:urlEncode(task.name)}&taskDefKey=${task.taskDefinitionKey}&procInsId=${task.processInstanceId}&procDefId=${task.processDefinitionId}&status=${status}','80%','80%','','同意','驳回')" class="btn btn-info btn-xs" > 任务办理</a>
+							</div>
+						</td>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+	</div>
+</div>
+</body>
+</html>

+ 303 - 0
src/main/webapp/webpage/modules/workinvoicereturn/workInvoiceReturnAudit.jsp

@@ -0,0 +1,303 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票管理管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 1) {
+                  $("#flag").val("yes");
+              }else {
+                  $("#flag").val("no");
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+
+            if("${workInvoiceReturn.cancleReturn}" == "2"){
+                $("#cancleReturn1").iCheck('check')
+            }else{
+                $("#cancleReturn").iCheck('check')
+            }
+            if("${workInvoiceReturn.returnType}" == "2"){
+                $("#returnType1").iCheck('check')
+            }else{
+                $("#returnType").iCheck('check')
+            }
+
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+
+        function setValue(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/getWorkInvoice',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cName").val(d.cName);
+                    $("#clientName").val(d.clientName);
+                    $("#leaderName").val(d.leaderName);
+                    $("#officeName").val(d.officeName);
+                    $("#invoiceType").val(d.invoiceType);
+                    $("#invoiceCName").val(d.invoiceCName);
+                    $("#orUnicode").val(d.orUnicode);
+                    $("#address").val(d.address);
+                    $("#telephone").val(d.telephone);
+                    $("#bank").val(d.bank);
+                    $("#bankNumber").val(d.bankNumber);
+                    $("#startDate").val(d.startDate);
+                    $("#totalMoney").val(d.totalMoney);
+                    $("#tax").val(d.tax);
+                    $("#taxMoney").val(d.taxMoney);
+                    $("#taxRate").val(d.taxRate);
+                }
+            })
+        }
+	</script>
+</head>
+<body >
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoiceReturn" action="${ctx}/workinvoicereturn/workInvoiceReturn/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>退票信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>被退票号:</label>
+					<div class="layui-input-block  with-icon">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.number}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">退票申请编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceReturn.returnNumber}"/>
+							<span class="input-group-btn">
+							<label class="form-status"><c:choose><c:when test="${ empty workInvoiceReturn.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoiceReturn.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+						</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.project.projectName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目编号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.project.projectId}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.project.workContractInfo.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.office.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">委托方:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.project.workContractInfo.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目负责人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.project.leaderNameStr}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">发票类型:</label>
+					<c:if test="${workInvoiceReturn.invoiceDetail.workInvoice.invoiceType eq 1}">
+						<div class="layui-input-block">
+							<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="专票"/>
+						</div>
+					</c:if>
+					<c:if test="${workInvoiceReturn.invoiceDetail.workInvoice.invoiceType eq 2}">
+						<div class="layui-input-block">
+							<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="普票"/>
+						</div>
+					</c:if>
+					<c:if test="${empty workInvoiceReturn.invoiceDetail.workInvoice.invoiceType}">
+						<div class="layui-input-block">
+							<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.invoiceType}"/>
+						</div>
+					</c:if>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票单位:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.orUnicode}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">地址:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.address}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.telephone}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.bank}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.bankNumber}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${workInvoiceReturn.invoiceDetail.workInvoice.invoiceDate}" pattern="yyyy年MM月dd日"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">价税合计:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.totalMoney}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税率:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.tax}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">金额:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.taxMoney}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税额:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.taxRate}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>退票原因:</label>
+					<div class="layui-input-block">
+						<textarea htmlEscape="false" rows="4" readonly="true"    class="form-control required">${workInvoiceReturn.reason}</textarea>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label">审批意见:</label>
+					<div class="layui-input-block">
+						<form:textarea path="act.comment" htmlEscape="false" rows="5"   maxlength="20" class="form-control"/>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>财务受理信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>作废/退票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<c:if test="${1 eq workInvoiceReturn.cancleReturn}">退票</c:if><c:if test="${2 eq workInvoiceReturn.cancleReturn}">作废</c:if>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>原票是否退回:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="<c:if test="${1 eq workInvoiceReturn.returnType}">是</c:if><c:if test="${2 eq workInvoiceReturn.returnType}">否</c:if>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票代码:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="${workInvoiceReturn.code}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票号:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="${workInvoiceReturn.number}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control required layui-input" value="${workInvoiceReturn.uname}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control required layui-input" value="<fmt:formatDate value="${workInvoiceReturn.returnDate}" pattern="yyyy年MM月dd日"/>"/>
+					</div>
+				</div>
+			</div>
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>审批流程</h2></div>
+                <div class="layui-item layui-col-xs12 form-table-container" >
+                    <act:flowChart procInsId="${workInvoiceReturn.act.procInsId}"/>
+                    <act:histoicFlow procInsId="${workInvoiceReturn.act.procInsId}" />
+                </div>
+            </div>
+
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 307 - 0
src/main/webapp/webpage/modules/workinvoicereturn/workInvoiceReturnForm.jsp

@@ -0,0 +1,307 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票管理管理</title>
+	<meta name="decorator" content="default"/>
+	<style>
+		#reason-error{
+			left:0;
+			top:80px;
+		}
+	</style>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 2){
+                  $("#inputForm").attr("action","${ctx}/workinvoicereturn/workInvoiceReturn/store");
+              }else{
+                  $("#inputForm").attr("action","${ctx}/workinvoicereturn/workInvoiceReturn/save");
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+
+            if("${workInvoiceReturn.cancleReturn}" == "2"){
+                $("#cancleReturn1").iCheck('check')
+            }else{
+                $("#cancleReturn").iCheck('check')
+            }
+            if("${workInvoiceReturn.returnType}" == "2"){
+                $("#returnType1").iCheck('check')
+            }else{
+                $("#returnType").iCheck('check')
+            }
+
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+
+            laydate.render({
+                elem: '#returnDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            $('input[name="cancleReturn"]').on('ifChecked', function(event){
+                disUscc(event.target.defaultValue);
+            });
+            disUscc($('input[name="cancleReturn"]:checked').val());
+		});
+
+        function setValue(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/getWorkInvoice',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cName").val(d.cName);
+                    $("#clientName").val(d.clientName);
+                    $("#leaderName").val(d.leaderName);
+                    $("#officeName").val(d.officeName);
+                    $("#invoiceType").val(d.invoiceType);
+                    $("#wid").val(d.wid);
+                    $("#invoiceCName").val(d.invoiceCName);
+                    $("#orUnicode").val(d.orUnicode);
+                    $("#address").val(d.address);
+                    $("#telephone").val(d.telephone);
+                    $("#bank").val(d.bank);
+                    $("#bankNumber").val(d.bankNumber);
+                    $("#startDate").val(d.startDate);
+                    $("#totalMoney").val(d.totalMoney);
+                    $("#tax").val(d.tax);
+                    $("#taxMoney").val(d.taxMoney);
+                    $("#taxRate").val(d.taxRate);
+                }
+            })
+        }
+
+        function disUscc(hasUscc) {
+            if("1"==hasUscc){
+                $("#code").attr("class","form-control layui-input required");
+                $("#number").attr("class","form-control layui-input required");
+            }else {
+                $("#code").attr("class","form-control layui-input ");
+                $("#number").attr("class","form-control layui-input ");
+            }
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoiceReturn" action="${ctx}/workinvoicereturn/workInvoiceReturn/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+			<form:hidden id="wid" path="invoiceDetail.workInvoice.id"/>
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>退票信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>被退票号:</label>
+					<div class="layui-input-block  with-icon">
+						<sys:gridselectInvoiceDetail url="${ctx}/workinvoicedetail/workInvoiceDetail/selectinvoices" id="invoiceDetail" name="invoiceDetail.id"  value="${workInvoiceReturn.invoiceDetail.id}"  title="选择开票单位" labelName="invoiceDetail.number"
+													 labelValue="${workInvoiceReturn.invoiceDetail.number}" cssClass="form-control required layui-input" fieldLabels="单位" fieldKeys="number" searchLabel="发票号" searchKey="number" ></sys:gridselectInvoiceDetail>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">退票申请编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+						<form:input path="returnNumber" htmlEscape="false" readonly="true"   class="form-control layui-input"/>
+						<span class="input-group-btn">
+							<label class="form-status"><c:choose><c:when test="${ empty workInvoiceReturn.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoiceReturn.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+						</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目名称:</label>
+					<div class="layui-input-block">
+						<form:input id ="cInfoName" path="invoiceDetail.workInvoice.project.projectName" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目编号:</label>
+					<div class="layui-input-block">
+						<form:input id ="pNumber" path="invoiceDetail.workInvoice.project.projectId" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同名称:</label>
+					<div class="layui-input-block">
+						<form:input id ="cName" path="invoiceDetail.workInvoice.project.workContractInfo.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<form:input id ="officeName" path="invoiceDetail.workInvoice.office.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">委托方:</label>
+					<div class="layui-input-block">
+						<form:input id ="clientName" path="invoiceDetail.workInvoice.project.workContractInfo.client.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目负责人:</label>
+					<div class="layui-input-block">
+						<form:input id ="leaderName" path="invoiceDetail.workInvoice.project.leaderNameStr" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">发票类型:</label>
+					<div class="layui-input-block">
+						<c:if test="${1 eq workInvoiceReturn.invoiceDetail.workInvoice.invoiceType}">
+							<input readonly="true" value="普票" class="form-control layui-input"/>
+						</c:if>
+						<c:if test="${2 eq workInvoiceReturn.invoiceDetail.workInvoice.invoiceType}">
+							<input readonly="true" value="普票" class="form-control layui-input"/>
+						</c:if>
+						<c:if test="${empty workInvoiceReturn.invoiceDetail.workInvoice.invoiceType}">
+							<form:input id ="invoiceType" path="invoiceDetail.workInvoice.invoiceType" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+						</c:if>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票单位:</label>
+					<div class="layui-input-block">
+						<form:input id ="invoiceCName" path="invoiceDetail.workInvoice.client.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<form:input id ="orUnicode" path="invoiceDetail.workInvoice.orUnicode" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">地址:</label>
+					<div class="layui-input-block">
+						<form:input id ="address" path="invoiceDetail.workInvoice.address" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<form:input id ="telephone" path="invoiceDetail.workInvoice.telephone" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block">
+						<form:input id ="bank" path="invoiceDetail.workInvoice.bank" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<form:input id ="bankNumber" path="invoiceDetail.workInvoice.bankNumber" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input id ="startDate"   name="startDate" readonly="true" value="<fmt:formatDate
+							value="${workInvoiceReturn.invoiceDetail.workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">价税合计:</label>
+					<div class="layui-input-block">
+						<form:input id ="totalMoney" path="invoiceDetail.totalMoney" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税率:</label>
+					<div class="layui-input-block">
+						<form:input id ="tax" path="invoiceDetail.tax" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">金额:</label>
+					<div class="layui-input-block">
+						<form:input id ="taxMoney" path="invoiceDetail.taxMoney" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税额:</label>
+					<div class="layui-input-block">
+						<form:input id ="taxRate" path="invoiceDetail.taxRate" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>退票原因:</label>
+					<div class="layui-input-block">
+						<form:textarea path="reason" htmlEscape="false" rows="4"    maxlength="500" class="form-control required"/>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>财务受理信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>作废/退票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<c:if test="${1 eq workInvoiceReturn.cancleReturn}">退票</c:if><c:if test="${2 eq workInvoiceReturn.cancleReturn}">作废</c:if>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>原票是否退回:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="<c:if test="${1 eq workInvoiceReturn.returnType}">是</c:if><c:if test="${2 eq workInvoiceReturn.returnType}">否</c:if>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票代码:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="${workInvoiceReturn.code}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票号:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="${workInvoiceReturn.number}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  name="uname" readonly="true" class="form-control required layui-input" value="${workInvoiceReturn.uname}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value=""/>  <%--<fmt:formatDate value="${workInvoiceReturn.returnDate}" pattern="yyyy年MM月dd日"/>--%>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 412 - 0
src/main/webapp/webpage/modules/workinvoicereturn/workInvoiceReturnList.jsp

@@ -0,0 +1,412 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票管理管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        $(document).ready(function() {
+
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#beginContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#endContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+        });
+
+        function openDialogre(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                skin:"three-btns",
+                content: url ,
+                btn: ['送审','暂存','关闭'],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        top.layer.close(index);//关闭对话框。
+//                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                    return false;
+                },
+                btn3: function(index){
+                }
+            });
+        }
+        function openDialogreplay(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url ,
+                skin:"two-btns",
+                btn: ['送审','关闭'],
+                yes: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+
+                    if(iframeWin.contentWindow.doSubmit() ){
+                        top.layer.close(index);//关闭对话框。
+                        //setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+
+                },
+                cancel: function(index){
+                }
+            });
+        }
+        function contractOpenDialogre(title,url,width,height,target){
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: false, //开启最大化最小化按钮
+                skin:"three-btns",
+                content: url ,
+                btn: ['送审','暂存','关闭'],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                    return false;
+                },
+                btn3: function(index){
+                }
+            });
+
+        }
+	</script>
+	<style>
+		body{
+			background-color:transparent;
+			filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+			color:#ffffff;
+			background-color:rgba(255,255,255,0);
+			height:100%;
+		}
+	</style>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+	<sys:message content="${message}"/>
+	<div class="layui-row">
+		<div class="full-width fl">
+			<div class="list-form-tab contentShadow shadowLTR" id="tabDiv">
+				<ul class="list-tabs" >
+					<li class="active"><a href="${ctx}/workinvoicereturn/workInvoiceReturn/list">退票信息</a></li>
+					<li><a href="${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/list">退票变更</a></li>
+				</ul>
+			</div>
+		</div>
+		<div class="full-width fl">
+			<div class="layui-row contentShadow shadowLR" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="workInvoiceReturn" action="${ctx}/workinvoicereturn/workInvoiceReturn/" method="post" class="form-inline">
+					<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+					<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+					<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+
+					<div class="commonQuery lw8">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">实际开票单位:</label>
+							<div class="layui-input-block">
+								<form:input path="invoiceDetail.workInvoice.client.name" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">被退票号:</label>
+							<div class="layui-input-block">
+								<form:input path="invoiceDetail.number" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item athird">
+							<div class="input-group">
+								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+								<button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
+								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" class="lw8" style="clear:both;display:none;">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">退票日期:</label>
+							<div class="layui-input-block">
+								<input id="beginContractDate" name="beginContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workInvoiceReturn.beginContractDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+								<span class="group-sep">-</span>
+								<input id="endContractDate" name="endContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workInvoiceReturn.endContractDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">退票申请编号:</label>
+							<div class="layui-input-block">
+								<form:input path="returnNumber" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">发票号:</label>
+							<div class="layui-input-block">
+								<form:input path="number" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">所属部门:</label>
+							<div class="layui-input-block">
+								<form:input path="invoiceDetail.workInvoice.office.name" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">退票状态:</label>
+							<div class="layui-input-block with-icon">
+								<form:select path="status" class="form-control simple-select">
+									<form:option value="" label=""/>
+									<form:options items="${fns:getDictList('audit_state')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+								</form:select>
+							</div>
+						</div>
+					</div>
+				</form:form>
+			</div>
+		</div>
+		<div class="full-width fl">
+			<div class="layui-form contentDetails contentShadow shadowLBR">
+				<div class="nav-btns">
+					<button class="nav-btn nav-btn-add" title="退票单" onclick="openDialogre('退票单','${ctx}/workinvoicereturn/workInvoiceReturn/form','95%','95%')"><i class="fa fa-plus"></i>&nbsp;添加</button>
+					<table:exportExcel url="${ctx}/workinvoicereturn/workInvoiceReturn/export"></table:exportExcel><!-- 导出按钮 -->
+
+					<button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i> 刷新</button>
+
+					<div style="clear: both;"></div>
+				</div>
+				<table class="oa-table layui-table" id="contentTable"></table>
+
+				<!-- 分页代码 -->
+				<table:page page="${page}"></table:page>
+				<div style="clear: both;"></div>
+			</div>
+		</div>
+	</div>
+	<div id="changewidth"></div>
+</div>
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script>
+    layui.use('table', function(){
+        layui.table.render({
+            limit:${ page.pageSize }
+            ,elem: '#contentTable'
+            ,page: false
+            ,cols: [[
+                // {checkbox: true, fixed: true},
+                {field:'index',align:'center', title: '序号',width:40}
+                ,{field:'returnNumber',align:'center', sort:true,title: '退票申请编号', minWidth:150,templet:function(d){
+                        return "<a class=\"attention-info\" title=\""+ d.returnNumber +"\"href=\"javascript:void(0);\" onclick=\"openDialogView('查看发票管理', '${ctx}/workinvoicereturn/workInvoiceReturn/form?id=" + d.id + "&tabId=1','95%', '95%')\">" + d.returnNumber + "</a>";
+                    }}
+                ,{field:'invoiceNum',align:'center', sort:true,title: '被退票号', minWidth:150,templet:function(d){
+                        return "<span title='"+ d.invoiceNum +"'>" + d.invoiceNum + "</span>";
+                    }}
+                ,{field:'type',align:'center', title: '作废/退票',width:75}
+                ,{field:'tickNumber',align:'center', title: '发票号', minWidth:150,templet:function(d){
+                        return "<span title='"+ d.tickNumber +"'>" + d.tickNumber + "</span>";
+                    }}
+                ,{field:'clientName', align:'center',title: '实际开票单位', minWidth:150,templet:function(d){
+                        return "<span title='"+ d.clientName +"'>" + d.clientName + "</span>";
+                    }}
+                ,{field:'officeName', align:'center',title: '所属部门',width:200,templet:function(d){
+                        return "<span title='"+ d.officeName +"'>" + d.officeName + "</span>";
+                    }}
+                ,{field:'money',align:'center', sort:true,title: '价税合计(元)',  width:160,templet:function(d){
+                        return "<span title='"+ d.money2 +"'>" + d.money2 + "</span>";
+                    }}
+                ,{field:'returnDate', sort:true,align:'center',title: '退票时间',width:80}
+                ,{field:'createDate', sort:true,align:'center',title: '创建时间',width:80}
+                ,{align:'center', title: '状态',  width:70,templet:function(d){
+
+                        <%--var st = getAuditState(d.status)--%>
+                        <%--var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workinvoicereturn/workInvoiceReturn/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";--%>
+                        <%--return xml;--%>
+                        var st = getAuditState(d.status);
+                        if(st.action)
+                            var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workinvoicereturn/workInvoiceReturn/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        else
+                            var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        return xml;
+                    }}
+                ,{align:'center',title:"操作",width:130,templet:function(d){
+                        ////对操作进行初始化
+                        var xml="";
+                        if(d.canedit1 != undefined && d.canedit1 =="1")
+                        {
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogre('修改退票信息', '${ctx}/workinvoicereturn/workInvoiceReturn/form?id=" + d.id + "','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.canedit2 != undefined && d.canedit2 =="1")
+                        {
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('修改退票信息', '${ctx}/workinvoicereturn/workInvoiceReturn/form?id=" + d.id + "&tabId=3','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.canedit3 != undefined && d.canedit3 =="1")
+                        {
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('重新申请', '${ctx}/workinvoicereturn/workInvoiceReturn/form?id=" + d.id + "&tabId=4','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.candelete != undefined && d.candelete =="1")
+                        {
+                            xml += "<a href=\"${ctx}/workinvoicereturn/workInvoiceReturn/delete?id=" + d.id + "\" onclick=\"return confirmx('确认要删除该退票信息吗?', this.href)\"   class=\"op-btn op-btn-delete\"><i class=\"fa fa-trash\"></i> 删除</a>";
+                        }
+                        if(d.cancancel != undefined && d.cancancel =="1")
+                        {
+                            xml += "<a href=\"${ctx}/workinvoicereturn/workInvoiceReturn/cancelInvalidate?id="+ d.id +"\" onclick=\"return confirmx('确认要强制撤回?', this.href)\" class=\"op-btn op-btn-cancel\" ><i class=\"glyphicon glyphicon-share-alt\"></i> 撤回</a>";
+                        }
+                        if(d.canalter != undefined && d.canalter =="1")
+                        {
+                            xml += "<a href=\"javascript:void(0)\" onclick=\"contractOpenDialogre('变更退票', '${ctx}/workinvoicereturn/workInvoiceReturn/alterForm?id="+ d.id +"','95%','95%')\" class=\"op-btn op-btn-revert\" ><i class=\"fa fa-edit\"></i> 变更</a>";
+                        }
+                        return xml;
+
+                    }}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="workInvoiceReturn" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+					,"id":"${workInvoiceReturn.id}"
+                    ,"returnNumber":"${workInvoiceReturn.returnNumber}"
+                    ,"invoiceNum":"${workInvoiceReturn.invoiceDetail.number}"
+                    ,"type":"<c:if test="${'1' eq workInvoiceReturn.cancleReturn}">退票</c:if><c:if test="${'2' eq workInvoiceReturn.cancleReturn}">作废</c:if>"
+                    ,"tickNumber":"${workInvoiceReturn.number}"
+                    ,"clientName":"${workInvoiceReturn.invoiceDetail.workInvoice.client.name}"
+                    ,"officeName":"${workInvoiceReturn.invoiceDetail.workInvoice.office.name}"
+                    ,"money":"${workInvoiceReturn.invoiceDetail.totalMoney}"
+                    ,"money2":"<fmt:formatNumber value="${workInvoiceReturn.invoiceDetail.totalMoney}" pattern="#,#00.00"/>"
+                    ,"returnDate":"<fmt:formatDate value="${workInvoiceReturn.returnDate}" pattern="yyyy-MM-dd"/>"
+                    ,"createDate":"<fmt:formatDate value="${workInvoiceReturn.createDate}" pattern="yyyy-MM-dd"/>"
+                    ,"status":"${workInvoiceReturn.status}"
+                    <c:if test="${workInvoiceReturn.status == '1'}">,"canedit1":"1"</c:if>
+                    <c:if test="${workInvoiceReturn.status == '4' && fns:getUser().id == workInvoiceReturn.createBy.id}">,"canedit2":"1"</c:if>
+                    <c:if test="${workInvoiceReturn.status == '3' && fns:getUser().id == workInvoiceReturn.createBy.id}">,"canedit3":"1"</c:if>
+                    <c:if test="${workInvoiceReturn.status == '1' or workInvoiceReturn.status == '3' or workInvoiceReturn.status == '4'}">,"candelete":"1"</c:if>
+                    <c:if test="${workInvoiceReturn.status == '2' && fns:getUser().id == workInvoiceReturn.createBy.id}">,"cancancel":"1"</c:if>
+                    <shiro:hasPermission name="workinvoicereturn:workInvoiceReturn:alteredit">
+                    <c:if test="${workInvoiceReturn.status == '5'}">,"canalter":"1"</c:if>
+                    </shiro:hasPermission>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+
+    resizeListTable();
+</script>
+<script>
+    resizeListWindow2();
+    $(window).resize(function(){
+        resizeListWindow2();
+    });
+</script>
+
+</body>
+</html>

+ 328 - 0
src/main/webapp/webpage/modules/workinvoicereturn/workInvoiceReturnModify.jsp

@@ -0,0 +1,328 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票管理管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 2){
+                  $("#flag").val("no");
+              }else{
+                  $("#flag").val("yes");
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+
+            if("${workInvoiceReturn.cancleReturn}" == "2"){
+                $("#cancleReturn1").iCheck('check')
+            }else{
+                $("#cancleReturn").iCheck('check')
+            }
+            if("${workInvoiceReturn.returnType}" == "2"){
+                $("#returnType1").iCheck('check')
+            }else{
+                $("#returnType").iCheck('check')
+            }
+
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+
+            laydate.render({
+                elem: '#returnDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            $('input[name="cancleReturn"]').on('ifChecked', function(event){
+                disUscc(event.target.defaultValue);
+            });
+            disUscc($('input[name="cancleReturn"]:checked').val());
+		});
+
+        function setValue(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/getWorkInvoice',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cName").val(d.cName);
+                    $("#clientName").val(d.clientName);
+                    $("#leaderName").val(d.leaderName);
+                    $("#officeName").val(d.officeName);
+                    $("#invoiceType").val(d.invoiceType);
+                    $("#invoiceCName").val(d.invoiceCName);
+                    $("#orUnicode").val(d.orUnicode);
+                    $("#address").val(d.address);
+                    $("#telephone").val(d.telephone);
+                    $("#bank").val(d.bank);
+                    $("#bankNumber").val(d.bankNumber);
+                    $("#startDate").val(d.startDate);
+                    $("#totalMoney").val(d.totalMoney);
+                    $("#tax").val(d.tax);
+                    $("#taxMoney").val(d.taxMoney);
+                    $("#taxRate").val(d.taxRate);
+                }
+            })
+        }
+        function disUscc(hasUscc) {
+            if("1"==hasUscc){
+                $("#code").attr("class","form-control layui-input required");
+                $("#number").attr("class","form-control layui-input required");
+            }else {
+                $("#code").attr("class","form-control layui-input ");
+                $("#number").attr("class","form-control layui-input ");
+            }
+        }
+        function checkSame(obj){
+            if(!/^\d+(\.\d{1,2})?$/.test( obj)){
+                $("#number").val("");
+                parent.layer.msg("请输入数字",{icon:5});
+                return;
+            }
+            var oldValue = $("oldNumber").val();
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/checkSame',
+                data:{
+                    "number":obj,"oldNumber":oldValue
+                },
+                success:function(data){
+                    //console.log("========data"+data);
+                    if("false" == data){
+                        $("#number").val("");
+                        parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+                        return;
+                    }
+                }
+            })
+        }
+        function check(obj){
+            if(!/^\d+(\.\d{1,2})?$/.test( obj)){
+                $("#code").val("");
+                parent.layer.msg("请输入数字",{icon:5});
+                return;
+            }
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoiceReturn" action="${ctx}/workinvoicereturn/workInvoiceReturn/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>退票信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>被退票号:</label>
+					<div class="layui-input-block  with-icon">
+						<sys:gridselectInvoiceDetail url="${ctx}/workinvoicedetail/workInvoiceDetail/selectinvoices" id="invoiceDetail" name="invoiceDetail.id"  value="${workInvoiceReturn.invoiceDetail.id}"  title="选择开票单位" labelName="invoiceDetail.number"
+													 labelValue="${workInvoiceReturn.invoiceDetail.number}" cssClass="form-control required layui-input" fieldLabels="单位" fieldKeys="number" searchLabel="发票号" searchKey="number" ></sys:gridselectInvoiceDetail>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">退票申请编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<form:input path="returnNumber" htmlEscape="false" readonly="true"   class="form-control layui-input"/>
+							<span class="input-group-btn">
+							<label class="form-status"><c:choose><c:when test="${ empty workInvoiceReturn.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoiceReturn.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+						</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目名称:</label>
+					<div class="layui-input-block">
+						<form:input id ="cInfoName" path="invoiceDetail.workInvoice.project.projectName" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目编号:</label>
+					<div class="layui-input-block">
+						<form:input id ="pNumber" path="invoiceDetail.workInvoice.project.projectId" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同名称:</label>
+					<div class="layui-input-block">
+						<form:input id ="cName" path="invoiceDetail.workInvoice.project.workContractInfo.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<form:input id ="officeName" path="invoiceDetail.workInvoice.office.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">委托方:</label>
+					<div class="layui-input-block">
+						<form:input id ="clientName" path="invoiceDetail.workInvoice.project.workContractInfo.client.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目负责人:</label>
+					<div class="layui-input-block">
+						<form:input id ="leaderName" path="invoiceDetail.workInvoice.project.leaderNameStr" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">发票类型:</label>
+					<div class="layui-input-block">
+						<form:input id ="invoiceType" path="invoiceDetail.workInvoice.invoiceType" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票单位:</label>
+					<div class="layui-input-block">
+						<form:input id ="invoiceCName" path="invoiceDetail.workInvoice.client.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<form:input id ="orUnicode" path="invoiceDetail.workInvoice.orUnicode" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">地址:</label>
+					<div class="layui-input-block">
+						<form:input id ="address" path="invoiceDetail.workInvoice.address" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<form:input id ="telephone" path="invoiceDetail.workInvoice.telephone" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block">
+						<form:input id ="bank" path="invoiceDetail.workInvoice.bank" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<form:input id ="bankNumber" path="invoiceDetail.workInvoice.bankNumber" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input id ="startDate"   name="startDate" readonly="true" value="<fmt:formatDate
+							value="${workInvoiceReturn.invoiceDetail.workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">价税合计:</label>
+					<div class="layui-input-block">
+						<form:input id ="totalMoney" path="invoiceDetail.totalMoney" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税率:</label>
+					<div class="layui-input-block">
+						<form:input id ="tax" path="invoiceDetail.tax" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">金额:</label>
+					<div class="layui-input-block">
+						<form:input id ="taxMoney" path="invoiceDetail.taxMoney" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税额:</label>
+					<div class="layui-input-block">
+						<form:input id ="taxRate" path="invoiceDetail.taxRate" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>退票原因:</label>
+					<div class="layui-input-block">
+						<form:textarea path="reason" htmlEscape="false" rows="4"    class="form-control required"/>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>财务受理信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>作废/退票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<c:if test="${1 eq workInvoiceReturn.cancleReturn}">退票</c:if><c:if test="${2 eq workInvoiceReturn.cancleReturn}">作废</c:if>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>原票是否退回:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="<c:if test="${1 eq workInvoiceReturn.returnType}">是</c:if><c:if test="${2 eq workInvoiceReturn.returnType}">否</c:if>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票代码:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="${workInvoiceReturn.code}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票号:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="${workInvoiceReturn.number}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  name="uname" readonly="true" class="form-control required layui-input" value="${workInvoiceReturn.uname}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value=""/>  <%--<fmt:formatDate value="${workInvoiceReturn.returnDate}" pattern="yyyy年MM月dd日"/>--%>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 15 - 0
src/main/webapp/webpage/modules/workinvoicereturn/workInvoiceReturnTask.jsp

@@ -0,0 +1,15 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票流程追踪</title>
+	<meta name="decorator" content="default"/>
+</head>
+<body class="gray-bg">
+	<div class="container form layui-form">
+        <act:flowChart procInsId="${processInstanceId}"/>
+        <act:histoicFlow procInsId="${processInstanceId}"/>
+	</div>
+</body>
+</html>
+

+ 281 - 0
src/main/webapp/webpage/modules/workinvoicereturn/workInvoiceReturnView.jsp

@@ -0,0 +1,281 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票管理管理</title>
+	<meta name="decorator" content="default"/>
+	<script src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 2){
+                  $("#inputForm").attr("action","${ctx}/workinvoicereturn/workInvoiceReturn/store");
+              }else{
+                  $("#inputForm").attr("action","${ctx}/workinvoicereturn/workInvoiceReturn/save");
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+
+            if("${workInvoiceReturn.cancleReturn}" == "2"){
+                $("#cancleReturn1").iCheck('check')
+            }else{
+                $("#cancleReturn").iCheck('check')
+            }
+            if("${workInvoiceReturn.returnType}" == "2"){
+                $("#returnType1").iCheck('check')
+            }else{
+                $("#returnType").iCheck('check')
+            }
+
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+
+        function setValue(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/getWorkInvoice',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cName").val(d.cName);
+                    $("#clientName").val(d.clientName);
+                    $("#leaderName").val(d.leaderName);
+                    $("#officeName").val(d.officeName);
+                    $("#invoiceType").val(d.invoiceType);
+                    $("#invoiceCName").val(d.invoiceCName);
+                    $("#orUnicode").val(d.orUnicode);
+                    $("#address").val(d.address);
+                    $("#telephone").val(d.telephone);
+                    $("#bank").val(d.bank);
+                    $("#bankNumber").val(d.bankNumber);
+                    $("#startDate").val(d.startDate);
+                    $("#totalMoney").val(d.totalMoney);
+                    $("#tax").val(d.tax);
+                    $("#taxMoney").val(d.taxMoney);
+                    $("#taxRate").val(d.taxRate);
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+<div class="single-form view-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoiceReturn" action="${ctx}/workinvoicereturn/workInvoiceReturn/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>退票信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>被退票号:</label>
+					<div class="layui-input-block  with-icon">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.number}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">退票申请编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceReturn.returnNumber}"/>
+							<span class="input-group-btn">
+							<label class="form-status"><c:choose><c:when test="${ empty workInvoiceReturn.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoiceReturn.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+						</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.project.projectName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目编号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.project.projectId}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.project.workContractInfo.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.office.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">委托方:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.project.workContractInfo.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目负责人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.project.leaderNameStr}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">发票类型:</label>
+					<c:if test="${workInvoiceReturn.invoiceDetail.workInvoice.invoiceType eq 1}">
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="专票"/>
+					</div>
+					</c:if>
+					<c:if test="${workInvoiceReturn.invoiceDetail.workInvoice.invoiceType eq 2}">
+						<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="普票"/>
+						</div>
+					</c:if>
+					<c:if test="${empty workInvoiceReturn.invoiceDetail.workInvoice.invoiceType}">
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.invoiceType}"/>
+					</div>
+					</c:if>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票单位:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.orUnicode}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">地址:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.address}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.telephone}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.bank}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.bankNumber}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${workInvoiceReturn.invoiceDetail.workInvoice.invoiceDate}" pattern="yyyy年MM月dd日"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">价税合计:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.totalMoney}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税率:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.tax}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">金额:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.taxMoney}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税额:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.taxRate}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>退票原因:</label>
+					<div class="layui-input-block">
+						<textarea htmlEscape="false" rows="4" readonly="true"    class="form-control required">${workInvoiceReturn.reason}</textarea>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>财务受理信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>作废/退票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<c:if test="${1 eq workInvoiceReturn.cancleReturn}">退票</c:if><c:if test="${2 eq workInvoiceReturn.cancleReturn}">作废</c:if>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>原票是否退回:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="<c:if test="${1 eq workInvoiceReturn.returnType}">是</c:if><c:if test="${2 eq workInvoiceReturn.returnType}">否</c:if>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票代码:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="${workInvoiceReturn.code}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票号:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="${workInvoiceReturn.number}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control required layui-input" value="${workInvoiceReturn.uname}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control required layui-input" value="<fmt:formatDate value="${workInvoiceReturn.returnDate}" pattern="yyyy年MM月dd日"/>"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 383 - 0
src/main/webapp/webpage/modules/workinvoicereturn/workInvoiceReturnfpglyAudit.jsp

@@ -0,0 +1,383 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票管理管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 1) {
+                  $("#flag").val("yes");
+              }else {
+                  $("#flag").val("no");
+              }
+              if(  obj == 1 && ($("#code").val() == null || $("#code").val() == '')&& $('input[name="cancleReturn"]:checked').val() == '1'){
+                  //console.log(obj+ "--"+$('input[name="cancleReturn"]:checked').val());
+                  top.layer.alert('请填写发票代码!', {icon: 0});
+                  return;
+              }
+              if(  obj == 1 && ($("#number").val() == null || $("#number").val() == '') && $('input[name="cancleReturn"]:checked').val() == '1'){
+                  top.layer.alert('请填写发票号!', {icon: 0});
+                  return;
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+
+            if("${workInvoiceReturn.cancleReturn}" == "2"){
+                $("#cancleReturn1").iCheck('check')
+            }else{
+                $("#cancleReturn").iCheck('check')
+            }
+            if("${workInvoiceReturn.returnType}" == "2"){
+                $("#returnType1").iCheck('check')
+            }else{
+                $("#returnType").iCheck('check')
+            }
+
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+            laydate.render({
+                elem: '#returnDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            $('input[name="cancleReturn"]').on('ifChecked', function(event){
+                disUscc(event.target.defaultValue);
+            });
+            disUscc($('input[name="cancleReturn"]:checked').val());
+
+            if($("#invoiceType").val()=="专票"){
+                $("#code").attr("minlength","10");
+                $("#code").attr("maxlength","10");
+            }else if($("#invoiceType").val()=="普票"){
+                $("#code").attr("minlength","12");
+                $("#code").attr("maxlength","12");
+            }
+		});
+
+        function setValue(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/getWorkInvoice',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cName").val(d.cName);
+                    $("#clientName").val(d.clientName);
+                    $("#leaderName").val(d.leaderName);
+                    $("#officeName").val(d.officeName);
+                    $("#invoiceType").val(d.invoiceType);
+                    $("#invoiceCName").val(d.invoiceCName);
+                    $("#orUnicode").val(d.orUnicode);
+                    $("#address").val(d.address);
+                    $("#telephone").val(d.telephone);
+                    $("#bank").val(d.bank);
+                    $("#bankNumber").val(d.bankNumber);
+                    $("#startDate").val(d.startDate);
+                    $("#totalMoney").val(d.totalMoney);
+                    $("#tax").val(d.tax);
+                    $("#taxMoney").val(d.taxMoney);
+                    $("#taxRate").val(d.taxRate);
+                }
+            })
+        }
+        function disUscc(hasUscc) {
+            if("1"==hasUscc){
+                $("#code").removeAttr("disabled");
+                $("#number").removeAttr("disabled");
+                if($("#invoiceType").val()=="专票"){
+                    $("#code").attr("minlength","10");
+                    $("#code").attr("maxlength","10");
+                }else if($("#invoiceType").val()=="普票"){
+                    $("#code").attr("minlength","12");
+                    $("#code").attr("maxlength","12");
+                }
+            }else {
+                $("#code").removeAttr("minlength");
+                $("#code").removeAttr("maxlength");
+                //去掉校验提示
+                $("#code").removeClass("error");
+                $("#code-error").hide();
+                $("#number").removeClass("error");
+                $("#number-error").hide();
+                $("#code").val("");
+                $("#number").val("");
+                $("#code").attr("disabled","true");
+                $("#number").attr("disabled","true");
+
+            }
+        }
+        function checkSame(obj){
+            if(!/^\d+(\.\d{1,2})?$/.test( obj)){
+                $("#number").val("");
+                parent.layer.msg("请输入数字",{icon:5});
+                return;
+            }
+            var oldValue = $("oldNumber").val();
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/checkSame',
+                data:{
+                    "number":obj,"oldNumber":oldValue
+                },
+                success:function(data){
+                    //console.log("========data"+data);
+                    if("false" == data){
+                        $("#number").val("");
+                        parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+                        return;
+                    }
+                }
+            })
+        }
+        function check(obj){
+            if(!/^\d+(\.\d{1,2})?$/.test( obj)){
+                $("#code").val("");
+                parent.layer.msg("请输入数字",{icon:5});
+                return;
+            }
+        }
+	</script>
+</head>
+<body >
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoiceReturn" action="${ctx}/workinvoicereturn/workInvoiceReturn/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>退票信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>被退票号:</label>
+					<div class="layui-input-block  with-icon">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.number}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">退票申请编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceReturn.returnNumber}"/>
+							<span class="input-group-btn">
+							<label class="form-status"><c:choose><c:when test="${ empty workInvoiceReturn.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoiceReturn.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+						</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.project.projectName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目编号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.project.projectId}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.project.workContractInfo.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.office.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">委托方:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.project.workContractInfo.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目负责人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.project.leaderNameStr}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">发票类型:</label>
+						<div class="layui-input-block">
+							<input id="invoiceType" htmlEscape="false"  readonly="true" class="form-control layui-input" value="<c:choose><c:when test="${workInvoiceReturn.invoiceDetail.workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoiceReturn.invoiceDetail.workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+						</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票单位:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.orUnicode}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">地址:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.address}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.telephone}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.bank}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.workInvoice.bankNumber}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${workInvoiceReturn.invoiceDetail.workInvoice.invoiceDate}" pattern="yyyy年MM月dd日"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">价税合计:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.totalMoney}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税率:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.tax}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">金额:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.taxMoney}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税额:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturn.invoiceDetail.taxRate}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>退票原因:</label>
+					<div class="layui-input-block">
+						<textarea htmlEscape="false" rows="4" readonly="true"    class="form-control required">${workInvoiceReturn.reason}</textarea>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label">审批意见:</label>
+					<div class="layui-input-block">
+						<form:textarea path="act.comment" htmlEscape="false" rows="5"   maxlength="20" class="form-control"/>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row first lw16">
+				<div class="form-group-label"><h2>财务受理信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>作废/退票:</label>
+					<div class="layui-input-block">
+						<input type="radio" class="i-checks" name="cancleReturn" checked id="cancleReturn" value="1">
+						<label for="cancleReturn">退票</label>
+						<input type="radio" class="i-checks" name="cancleReturn" id="cancleReturn1" value="2">
+						<label for="cancleReturn1">作废</label>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>原票是否退回:</label>
+					<div class="layui-input-block">
+						<input type="radio" class="i-checks" name="returnType" checked id="returnType" value="1">
+						<label for="returnType">是</label>
+						<input type="radio" class="i-checks" name="returnType" id="returnType1" value="2">
+						<label for="returnType1">否</label>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票代码:</label>
+					<div class="layui-input-block">
+						<form:input id ="code" path="code" htmlEscape="false" onchange="check(this.value)" class="form-control number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票号:</label>
+					<div class="layui-input-block">
+						<%--<form:input id ="number" path="number" htmlEscape="false" class="form-control required layui-input"/>--%>
+
+						<input id="number" name="number" onchange="checkSame(this.value)" type="text" htmlEscape="false" minlength="8" maxlength="8" value="${workInvoiceReturn.number}" class="form-control number layui-input"/>
+						<input type="hidden" id="oldNumber" value="${workInvoiceReturn.number}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票人:</label>
+					<div class="layui-input-block">
+						<form:input id ="uname" path="uname" htmlEscape="false"  readonly="true" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票时间:</label>
+					<div class="layui-input-block">
+						<input class="form-control layer-date reuired laydate-icon layui-input laydate-icondate required" id="returnDate" name="returnDate" value="<fmt:formatDate
+							value="${workInvoiceReturn.returnDate}" pattern="yyyy-MM-dd"/>">
+					</div>
+				</div>
+			</div>
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>审批流程</h2></div>
+                <div class="layui-item layui-col-xs12 form-table-container" >
+                    <act:flowChart procInsId="${workInvoiceReturn.act.procInsId}"/>
+                    <act:histoicFlow procInsId="${workInvoiceReturn.act.procInsId}" />
+                </div>
+            </div>
+
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 299 - 0
src/main/webapp/webpage/modules/workinvoicereturnalter/workInvoiceReturnAlterAudit.jsp

@@ -0,0 +1,299 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票管理管理</title>
+	<meta name="decorator" content="default"/>
+	<script src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 1) {
+                  $("#flag").val("yes");
+              }else {
+                  $("#flag").val("no");
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+
+            if("${workInvoiceReturnAlter.cancleReturn}" == "2"){
+                $("#cancleReturn1").iCheck('check')
+            }else{
+                $("#cancleReturn").iCheck('check')
+            }
+            if("${workInvoiceReturnAlter.returnType}" == "2"){
+                $("#returnType1").iCheck('check')
+            }else{
+                $("#returnType").iCheck('check')
+            }
+
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+
+        function setValue(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/getWorkInvoice',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cName").val(d.cName);
+                    $("#clientName").val(d.clientName);
+                    $("#leaderName").val(d.leaderName);
+                    $("#officeName").val(d.officeName);
+                    $("#invoiceType").val(d.invoiceType);
+                    $("#invoiceCName").val(d.invoiceCName);
+                    $("#orUnicode").val(d.orUnicode);
+                    $("#address").val(d.address);
+                    $("#telephone").val(d.telephone);
+                    $("#bank").val(d.bank);
+                    $("#bankNumber").val(d.bankNumber);
+                    $("#startDate").val(d.startDate);
+                    $("#totalMoney").val(d.totalMoney);
+                    $("#tax").val(d.tax);
+                    $("#taxMoney").val(d.taxMoney);
+                    $("#taxRate").val(d.taxRate);
+                }
+            })
+        }
+	</script>
+</head>
+<body >
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoiceReturnAlter" action="${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>退票信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>被退票号:</label>
+					<div class="layui-input-block  with-icon">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.number}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">退票申请编号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceReturnAlter.returnNumber}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.project.projectName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目编号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.project.projectId}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.project.workContractInfo.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.office.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">委托方:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.project.workContractInfo.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目负责人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.project.leaderNameStr}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">发票类型:</label>
+						<c:if test="${workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceType eq 1}">
+							<div class="layui-input-block">
+								<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="专票"/>
+							</div>
+						</c:if>
+						<c:if test="${workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceType eq 2}">
+							<div class="layui-input-block">
+								<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="普票"/>
+							</div>
+						</c:if>
+						<c:if test="${empty workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceType}">
+							<div class="layui-input-block">
+								<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceType}"/>
+							</div>
+						</c:if>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票单位:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.orUnicode}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">地址:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.address}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.telephone}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.bank}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.bankNumber}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceDate}" pattern="yyyy年MM月dd日"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">价税合计:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.totalMoney}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税率:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.tax}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">金额:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.taxMoney}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税额:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.taxRate}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>退票原因:</label>
+					<div class="layui-input-block">
+						<textarea htmlEscape="false" rows="4" readonly="true"    class="form-control required">${workInvoiceReturnAlter.reason}</textarea>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label">审批意见:</label>
+					<div class="layui-input-block">
+						<form:textarea path="act.comment" htmlEscape="false" rows="5"   maxlength="20" class="form-control"/>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>财务受理信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>作废/退票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<c:if test="${1 eq workInvoiceReturnAlter.cancleReturn}">退票</c:if><c:if test="${2 eq workInvoiceReturnAlter.cancleReturn}">作废</c:if>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>原票是否退回:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="<c:if test="${1 eq workInvoiceReturnAlter.returnType}">是</c:if><c:if test="${2 eq workInvoiceReturnAlter.returnType}">否</c:if>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票代码:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.code}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票号:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.number}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control required layui-input" value="${workInvoiceReturnAlter.uname}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control required layui-input" value="<fmt:formatDate value="${workInvoiceReturnAlter.returnDate}" pattern="yyyy年MM月dd日"/>"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>审批流程</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<act:flowChart procInsId="${workInvoiceReturnAlter.act.procInsId}"/>
+					<act:histoicFlow procInsId="${workInvoiceReturnAlter.act.procInsId}" />
+				</div>
+			</div>
+
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 334 - 0
src/main/webapp/webpage/modules/workinvoicereturnalter/workInvoiceReturnAlterForm.jsp

@@ -0,0 +1,334 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票管理管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 2){
+                  $("#inputForm").attr("action","${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/store");
+              }else{
+                  $("#inputForm").attr("action","${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/save");
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+
+            if("${workInvoiceReturnAlter.cancleReturn}" == "2"){
+                $("#cancleReturn1").iCheck('check')
+            }else{
+                $("#cancleReturn").iCheck('check')
+            }
+            if("${workInvoiceReturnAlter.returnType}" == "2"){
+                $("#returnType1").iCheck('check')
+            }else{
+                $("#returnType").iCheck('check')
+            }
+
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+
+            laydate.render({
+                elem: '#returnDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            $('input[name="cancleReturn"]').on('ifChecked', function(event){
+                disUscc(event.target.defaultValue);
+            });
+            disUscc($('input[name="cancleReturn"]:checked').val());
+            if($("#invoiceType").val()=="专票"){
+                $("#code").attr("minlength","10");
+                $("#code").attr("maxlength","10");
+            }else if($("#invoiceType").val()=="普票"){
+                $("#code").attr("minlength","12");
+                $("#code").attr("maxlength","12");
+            }
+		});
+
+        function setValue(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/getWorkInvoice',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cName").val(d.cName);
+                    $("#clientName").val(d.clientName);
+                    $("#leaderName").val(d.leaderName);
+                    $("#officeName").val(d.officeName);
+                    $("#invoiceType").val(d.invoiceType);
+                    $("#wid").val(d.wid);
+                    $("#invoiceCName").val(d.invoiceCName);
+                    $("#orUnicode").val(d.orUnicode);
+                    $("#address").val(d.address);
+                    $("#telephone").val(d.telephone);
+                    $("#bank").val(d.bank);
+                    $("#bankNumber").val(d.bankNumber);
+                    $("#startDate").val(d.startDate);
+                    $("#totalMoney").val(d.totalMoney);
+                    $("#tax").val(d.tax);
+                    $("#taxMoney").val(d.taxMoney);
+                    $("#taxRate").val(d.taxRate);
+                }
+            })
+        }
+        function disUscc(hasUscc) {
+            if("1"==hasUscc){
+                $("#code").attr("class","form-control layui-input required");
+                $("#number").attr("class","form-control layui-input required");
+            }else {
+                $("#code").attr("class","form-control layui-input ");
+                $("#number").attr("class","form-control layui-input ");
+            }
+        }
+        function checkSame(obj){
+            if(!/^\d+(\.\d{1,2})?$/.test( obj)){
+                $("#number").val("");
+                parent.layer.msg("请输入数字",{icon:5});
+                return;
+            }
+            var oldValue = $("oldNumber").val();
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/checkSame',
+                data:{
+                    "number":obj,"oldNumber":oldValue
+                },
+                success:function(data){
+                    //console.log("========data"+data);
+                    if("false" == data){
+                        $("#number").val("");
+                        parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+                        return;
+                    }
+                }
+            })
+        }
+        function check(obj){
+            if(!/^\d+(\.\d{1,2})?$/.test( obj)){
+                $("#code").val("");
+                parent.layer.msg("请输入数字",{icon:5});
+                return;
+            }
+        }
+	</script>
+</head>
+<body >
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoiceReturnAlter" action="${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+			<%--<form:hidden path="invoiceDetail.id"/>--%>
+			<form:hidden path="workInvoiceReturn.id"/>
+			<form:hidden id="wid" path="invoiceDetail.workInvoice.id"/>
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>退票信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>被退票号:</label>
+					<div class="layui-input-block">
+						<form:hidden path="invoiceDetail.id" value="${workInvoiceReturnAlter.invoiceDetail.id}"/>
+						<form:input path="invoiceDetail.number" value="${workInvoiceReturnAlter.invoiceDetail.number}" htmlEscape="false" readonly="true"   class="form-control layui-input"/>
+						<%--<sys:gridselectInvoiceDetail url="${ctx}/workinvoicedetail/workInvoiceDetail/selectinvoices" id="invoiceDetail" name="invoiceDetail.id"  value="${workInvoiceReturnAlter.invoiceDetail.id}"  title="选择开票单位" labelName="invoiceDetail.number"
+													 labelValue="${workInvoiceReturnAlter.invoiceDetail.number}" cssClass="form-control required layui-input" fieldLabels="单位" fieldKeys="number" searchLabel="发票号" searchKey="number" ></sys:gridselectInvoiceDetail>--%>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">退票申请编号:</label>
+					<div class="layui-input-block">
+						<form:input path="returnNumber" htmlEscape="false" readonly="true"   class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目名称:</label>
+					<div class="layui-input-block">
+						<form:input id ="cInfoName" path="invoiceDetail.workInvoice.project.projectName" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目编号:</label>
+					<div class="layui-input-block">
+						<form:input id ="pNumber" path="invoiceDetail.workInvoice.project.projectId" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同名称:</label>
+					<div class="layui-input-block">
+						<form:input id ="cName" path="invoiceDetail.workInvoice.project.workContractInfo.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<form:input id ="officeName" path="invoiceDetail.workInvoice.office.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">委托方:</label>
+					<div class="layui-input-block">
+						<form:input id ="clientName" path="invoiceDetail.workInvoice.project.workContractInfo.client.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目负责人:</label>
+					<div class="layui-input-block">
+						<form:input id ="leaderName" path="invoiceDetail.workInvoice.project.leaderNameStr" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">发票类型:</label>
+						<div class="layui-input-block">
+							<input htmlEscape="false" id="invoiceType"  readonly="true" class="form-control layui-input" value="<c:choose><c:when test="${workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+						</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票单位:</label>
+					<div class="layui-input-block">
+						<form:input id ="invoiceCName" path="invoiceDetail.workInvoice.client.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<form:input id ="orUnicode" path="invoiceDetail.workInvoice.orUnicode" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">地址:</label>
+					<div class="layui-input-block">
+						<form:input id ="address" path="invoiceDetail.workInvoice.address" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<form:input id ="telephone" path="invoiceDetail.workInvoice.telephone" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block">
+						<form:input id ="bank" path="invoiceDetail.workInvoice.bank" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<form:input id ="bankNumber" path="invoiceDetail.workInvoice.bankNumber" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input id ="startDate"   name="startDate" readonly="true" value="<fmt:formatDate
+							value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">价税合计:</label>
+					<div class="layui-input-block">
+						<form:input id ="totalMoney" path="invoiceDetail.totalMoney" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税率:</label>
+					<div class="layui-input-block">
+						<form:input id ="tax" path="invoiceDetail.tax" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">金额:</label>
+					<div class="layui-input-block">
+						<form:input id ="taxMoney" path="invoiceDetail.taxMoney" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税额:</label>
+					<div class="layui-input-block">
+						<form:input id ="taxRate" path="invoiceDetail.taxRate" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>退票原因:</label>
+					<div class="layui-input-block">
+						<form:textarea path="reason" htmlEscape="false" rows="4"    class="form-control required"/>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>财务受理信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>作废/退票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<c:if test="${1 eq workInvoiceReturnAlter.cancleReturn}">退票</c:if><c:if test="${2 eq workInvoiceReturnAlter.cancleReturn}">作废</c:if>"/>
+						<input type="hidden" name="cancleReturn" value="${workInvoiceReturnAlter.cancleReturn}">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>原票是否退回:</label>
+					<div class="layui-input-block">
+						<input type="radio" class="i-checks" name="returnType" checked id="returnType" value="1">
+						<label for="returnType">是</label>
+						<input type="radio" class="i-checks" name="returnType" id="returnType1" value="2">
+						<label for="returnType1">否</label>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票代码:</label>
+					<div class="layui-input-block">
+						<form:input id ="code" path="code" htmlEscape="false" onchange="check(this.value)"  class="form-control required number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票号:</label>
+					<div class="layui-input-block">
+						<input id="number" name="number" onchange="checkSame(this.value)" type="text" htmlEscape="false" minlength="8" maxlength="8" value="${workInvoiceReturnAlter.number}" class="form-control required number layui-input"/>
+						<input type="hidden" id="oldNumber" value="${workInvoiceReturnAlter.number}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票人:</label>
+					<div class="layui-input-block">
+						<form:input id ="uname" path="uname" htmlEscape="false"  readonly="true" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票时间:</label>
+					<div class="layui-input-block">
+						<input class="form-control layer-date reuired laydate-icon layui-input laydate-icondate required" id="returnDate" name="returnDate" value="<fmt:formatDate
+							value="${workInvoiceReturnAlter.returnDate}" pattern="yyyy-MM-dd"/>">
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 348 - 0
src/main/webapp/webpage/modules/workinvoicereturnalter/workInvoiceReturnAlterList.jsp

@@ -0,0 +1,348 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票管理管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		$(document).ready(function() {
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#updateDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#beginContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#endContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+		});
+
+        function openDialogre(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url ,
+                skin:"three-btns",
+                btn: ['送审','暂存','关闭'],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        top.layer.close(index);//关闭对话框。
+//                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                    return false;
+                },
+                btn3: function(index){
+                }
+            });
+        }
+        function openDialogreplay(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url ,
+                skin:"two-btns",
+                btn: ['送审','关闭'],
+                yes: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+
+                    if(iframeWin.contentWindow.doSubmit() ){
+                        top.layer.close(index);//关闭对话框。
+                        //setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+
+                },
+                cancel: function(index){
+                }
+            });
+        }
+	</script>
+	<style>
+		body{
+			background-color:transparent;
+			filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+			color:#ffffff;
+			background-color:rgba(255,255,255,0);
+			height:100%;
+		}
+	</style>
+</head>
+<body>
+	<div class="wrapper wrapper-content">
+		<sys:message content="${message}"/>
+		<div class="layui-row">
+			<div class="full-width fl">
+				<div class="list-form-tab contentShadow shadowLTR" id="tabDiv">
+					<ul class="list-tabs" >
+						<li><a href="${ctx}/workinvoicereturn/workInvoiceReturn/list">退票信息</a></li>
+						<li class="active"><a href="${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/list">退票变更</a></li>
+					</ul>
+				</div>
+			</div>
+			<div class="full-width fl">
+				<div class="layui-row contentShadow shadowLR" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="workInvoiceReturnAlter" action="${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/list" method="post" class="form-inline">
+					<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+					<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+					<%--<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->--%>
+
+					<div class="commonQuery lw8">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">实际开票单位:</label>
+							<div class="layui-input-block">
+								<form:input path="invoiceDetail.workInvoice.client.name" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">被退票号:</label>
+							<div class="layui-input-block">
+								<form:input path="invoiceDetail.number" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item athird">
+							<div class="input-group">
+								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+								<button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
+								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" class="lw8" style="clear:both;display:none;">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">变更日期:</label>
+							<div class="layui-input-block">
+								<input id="beginContractDate" name="beginContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workInvoiceReturnAlter.beginContractDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+								<span class="group-sep">-</span>
+								<input id="endContractDate" name="endContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workInvoiceReturnAlter.endContractDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">退票申请编号:</label>
+							<div class="layui-input-block">
+								<form:input path="returnNumber" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">发票号:</label>
+							<div class="layui-input-block">
+								<form:input path="number" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">所属部门:</label>
+							<div class="layui-input-block">
+								<form:input path="invoiceDetail.workInvoice.office.name" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">状态:</label>
+							<div class="layui-input-block with-icon">
+								<form:select path="status" class="form-control simple-select">
+									<form:option value="" label=""/>
+									<form:options items="${fns:getDictList('audit_change_state')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+								</form:select>
+							</div>
+						</div>
+					</div>
+				</form:form>
+				</div>
+			</div>
+			<div class="full-width fl">
+				<div class="layui-form contentDetails contentShadow shadowLBR">
+					<div class="nav-btns">
+						<button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i> 刷新</button>
+						<div style="clear: both;"></div>
+					</div>
+					<table class="oa-table layui-table" id="contentTable"></table>
+
+					<!-- 分页代码 -->
+					<table:page page="${page}"></table:page>
+					<div style="clear: both;"></div>
+				</div>
+			</div>
+		</div>
+		<div id="changewidth"></div>
+	</div>
+	<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+	<script>
+        layui.use('table', function(){
+            layui.table.render({
+                limit:${ page.pageSize }
+                ,elem: '#contentTable'
+                ,page: false
+                ,cols: [[
+                    // {checkbox: true, fixed: true},
+                    {field:'index',align:'center', title: '序号',width:40}
+                    ,{field:'returnNumber',align:'center', sort:true,title: '退票申请编号', minWidth:150,templet:function(d){
+                            return "<a class=\"attention-info\" title=\""+ d.returnNumber +"\"href=\"javascript:void(0);\" onclick=\"openDialogView('查看发票明细', '${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/form?id=" + d.id + "&tabId=1','95%', '95%')\">" + d.returnNumber + "</a>";
+                        }}
+                    ,{field:'invoiceNum',align:'center', sort:true,title: '被退票号', minWidth:150,templet:function(d){
+                            return "<span title='"+ d.invoiceNum +"'>" + d.invoiceNum + "</span>";
+                        }}
+                    ,{field:'type',align:'center', title: '作废/退票', width:100}
+                    ,{field:'tickNumber',align:'center', title: '发票号', minWidth:150,templet:function(d){
+                            return "<span title='"+ d.tickNumber +"'>" + d.tickNumber + "</span>";
+                        }}
+                    ,{field:'money',align:'center', sort:true,title: '价税合计(元)',  width:160,templet:function(d){
+                            return "<span title='"+ d.money2 +"'>" + d.money2 + "</span>";
+                        }}
+                    ,{field:'clientName', align:'center',title: '实际开票单位', minWidth:150,templet:function(d){
+                            return "<span title='"+ d.clientName +"'>" + d.clientName + "</span>";
+                        }}
+                    ,{field:'officeName', align:'center',title: '所属部门',width:200,templet:function(d){
+                            return "<span title='"+ d.officeName +"'>" + d.officeName + "</span>";
+                        }}
+                    ,{field:'updateDate', sort:true,align:'center',title: '变更日期',width:80}
+                    ,{align:'center', title: '状态',  width:70,templet:function(d){
+                            <%--var st = getAuditChangeState(d.status)--%>
+                            <%--var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";--%>
+                            <%--return xml;--%>
+                            var st = getAuditChangeState(d.status);
+                            if(st.action)
+                                var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                            else
+                                var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                            return xml;
+                        }}
+                    ,{align:'center',title:"操作",width:130,templet:function(d){
+                            ////对操作进行初始化
+                            var xml="";
+                            if(d.canedit1 != undefined && d.canedit1 =="1")
+                            {
+                                xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogre('修改报销单', '${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/form?id=" + d.id + "','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                            }
+                            if(d.canedit2 != undefined && d.canedit2 =="1")
+                            {
+                                xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('修改报销单', '${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/form?id=" + d.id + "&tabId=3','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                            }
+                            if(d.canedit3 != undefined && d.canedit3 =="1")
+                            {
+                                xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('重新申请报销单', '${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/form?id=" + d.id + "&tabId=4','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                            }
+                            if(d.candelete != undefined && d.candelete =="1")
+                            {
+                                xml += "<a href=\"${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/delete?id=" + d.id + "\" onclick=\"return confirmx('确认要删除该报销单吗?', this.href)\"   class=\"op-btn op-btn-delete\"><i class=\"fa fa-trash\"></i> 删除</a>";
+                            }
+                            if(d.cancancel != undefined && d.cancancel =="1")
+                            {
+                                xml += "<a href=\"${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/cancelInvalidate?id="+ d.id +"\" onclick=\"return confirmx('确认要强制撤回?', this.href)\" class=\"op-btn op-btn-cancel\" ><i class=\"glyphicon glyphicon-share-alt\"></i> 撤回</a>";
+                            }
+
+                            return xml;
+
+                        }}
+                ]]
+                ,data: [
+                    <c:if test="${ not empty page.list}">
+                    <c:forEach items="${page.list}" var="workInvoiceReturnAlter" varStatus="index">
+                    <c:if test="${index.index != 0}">,</c:if>
+                    {
+                        "index":"${index.index+1}"
+						,"id":"${workInvoiceReturnAlter.id}"
+                        ,"returnNumber":"${workInvoiceReturnAlter.returnNumber}"
+                        ,"invoiceNum":"${workInvoiceReturnAlter.invoiceDetail.number}"
+                        ,"type":"<c:if test="${'1' eq workInvoiceReturnAlter.cancleReturn}">退票</c:if><c:if test="${'2' eq workInvoiceReturnAlter.cancleReturn}">作废</c:if>"
+                        ,"tickNumber":"${workInvoiceReturnAlter.number}"
+                        ,"clientName":"${workInvoiceReturnAlter.invoiceDetail.workInvoice.client.name}"
+                        ,"officeName":"${workInvoiceReturnAlter.invoiceDetail.workInvoice.office.name}"
+                        ,"money":"${workInvoiceReturnAlter.invoiceDetail.totalMoney}"
+                        ,"money2":"<fmt:formatNumber value="${workInvoiceReturnAlter.invoiceDetail.totalMoney}" pattern="#,#00.00"/>"
+                        ,"updateDate":"<fmt:formatDate value="${workInvoiceReturnAlter.updateDate}" pattern="yyyy-MM-dd"/>"
+                        ,"status":"${workInvoiceReturnAlter.status}"
+                        <c:if test="${workInvoiceReturnAlter.status == '1'}">,"canedit1":"1"</c:if>
+                        <c:if test="${workInvoiceReturnAlter.status == '4' && fns:getUser().id == workInvoiceReturnAlter.createBy.id}">,"canedit2":"1"</c:if>
+                        <c:if test="${workInvoiceReturnAlter.status == '3' && fns:getUser().id == workInvoiceReturnAlter.createBy.id}">,"canedit3":"1"</c:if>
+                        <c:if test="${workInvoiceReturnAlter.status == '1' or workInvoiceReturnAlter.status == '3' or workInvoiceReturnAlter.status == '4'}">,"candelete":"1"</c:if>
+                        <c:if test="${workInvoiceReturnAlter.status == '2' && fns:getUser().id == workInvoiceReturnAlter.createBy.id}">,"cancancel":"1"</c:if>
+                    }
+                    </c:forEach>
+                    </c:if>
+                ]
+                // ,even: true
+                // ,height: 315
+            });
+
+        })
+        resizeListTable();
+	</script>
+	<script>
+        resizeListWindow2();
+        $(window).resize(function(){
+            resizeListWindow2();
+        });
+	</script>
+</body>
+</html>

+ 332 - 0
src/main/webapp/webpage/modules/workinvoicereturnalter/workInvoiceReturnAlterModify.jsp

@@ -0,0 +1,332 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票管理管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 2){
+                  $("#flag").val("no");
+              }else{
+                  $("#flag").val("yes");
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+
+            if("${workInvoiceReturnAlter.cancleReturn}" == "2"){
+                $("#cancleReturn1").iCheck('check')
+            }else{
+                $("#cancleReturn").iCheck('check')
+            }
+            if("${workInvoiceReturnAlter.returnType}" == "2"){
+                $("#returnType1").iCheck('check')
+            }else{
+                $("#returnType").iCheck('check')
+            }
+
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+            $('input[name="cancleReturn"]').on('ifChecked', function(event){
+                disUscc(event.target.defaultValue);
+            });
+            disUscc($('input[name="cancleReturn"]:checked').val());
+            if($("#invoiceType").val()=="专票"){
+                $("#code").attr("minlength","10");
+                $("#code").attr("maxlength","10");
+            }else if($("#invoiceType").val()=="普票"){
+                $("#code").attr("minlength","12");
+                $("#code").attr("maxlength","12");
+            }
+		});
+
+        function setValue(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/getWorkInvoice',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cName").val(d.cName);
+                    $("#clientName").val(d.clientName);
+                    $("#leaderName").val(d.leaderName);
+                    $("#officeName").val(d.officeName);
+                    $("#invoiceType").val(d.invoiceType);
+                    $("#invoiceCName").val(d.invoiceCName);
+                    $("#orUnicode").val(d.orUnicode);
+                    $("#address").val(d.address);
+                    $("#telephone").val(d.telephone);
+                    $("#bank").val(d.bank);
+                    $("#bankNumber").val(d.bankNumber);
+                    $("#startDate").val(d.startDate);
+                    $("#totalMoney").val(d.totalMoney);
+                    $("#tax").val(d.tax);
+                    $("#taxMoney").val(d.taxMoney);
+                    $("#taxRate").val(d.taxRate);
+                }
+            })
+        }
+        function disUscc(hasUscc) {
+            if("1"==hasUscc){
+                $("#code").attr("class","form-control layui-input required");
+                $("#number").attr("class","form-control layui-input required");
+            }else {
+                $("#code").attr("class","form-control layui-input ");
+                $("#number").attr("class","form-control layui-input ");
+            }
+        }
+        function checkSame(obj){
+            if(!/^\d+(\.\d{1,2})?$/.test( obj)){
+                $("#number").val("");
+                parent.layer.msg("请输入数字",{icon:5});
+                return;
+            }
+            var oldValue = $("oldNumber").val();
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/checkSame',
+                data:{
+                    "number":obj,"oldNumber":oldValue
+                },
+                success:function(data){
+                    //console.log("========data"+data);
+                    if("false" == data){
+                        $("#number").val("");
+                        parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+                        return;
+                    }
+                }
+            })
+        }
+        function check(obj){
+            if(!/^\d+(\.\d{1,2})?$/.test( obj)){
+                $("#code").val("");
+                parent.layer.msg("请输入数字",{icon:5});
+                return;
+            }
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoiceReturnAlter" action="${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>退票信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>被退票号:</label>
+					<div class="layui-input-block">
+						<form:hidden path="invoiceDetail.id" value="${workInvoiceReturnAlter.invoiceDetail.id}"/>
+						<form:input path="invoiceDetail.number" value="${workInvoiceReturnAlter.invoiceDetail.number}" htmlEscape="false" readonly="true"   class="form-control layui-input"/>
+							<%--<sys:gridselectInvoiceDetail url="${ctx}/workinvoicedetail/workInvoiceDetail/selectinvoices" id="invoiceDetail" name="invoiceDetail.id"  value="${workInvoiceReturnAlter.invoiceDetail.id}"  title="选择开票单位" labelName="invoiceDetail.number"
+                                                         labelValue="${workInvoiceReturnAlter.invoiceDetail.number}" cssClass="form-control required layui-input" fieldLabels="单位" fieldKeys="number" searchLabel="发票号" searchKey="number" ></sys:gridselectInvoiceDetail>--%>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">退票申请编号:</label>
+					<div class="layui-input-block">
+						<form:input path="returnNumber" htmlEscape="false" readonly="true"   class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目名称:</label>
+					<div class="layui-input-block">
+						<form:input id ="cInfoName" path="invoiceDetail.workInvoice.project.projectName" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目编号:</label>
+					<div class="layui-input-block">
+						<form:input id ="pNumber" path="invoiceDetail.workInvoice.project.projectId" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同名称:</label>
+					<div class="layui-input-block">
+						<form:input id ="cName" path="invoiceDetail.workInvoice.project.workContractInfo.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<form:input id ="officeName" path="invoiceDetail.workInvoice.office.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">委托方:</label>
+					<div class="layui-input-block">
+						<form:input id ="clientName" path="invoiceDetail.workInvoice.project.workContractInfo.client.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目负责人:</label>
+					<div class="layui-input-block">
+						<form:input id ="leaderName" path="invoiceDetail.workInvoice.project.leaderNameStr" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">发票类型:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" id="invoiceType"  readonly="true" class="form-control layui-input" value="<c:choose><c:when test="${workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票单位:</label>
+					<div class="layui-input-block">
+						<form:input id ="invoiceCName" path="invoiceDetail.workInvoice.client.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<form:input id ="orUnicode" path="invoiceDetail.workInvoice.orUnicode" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">地址:</label>
+					<div class="layui-input-block">
+						<form:input id ="address" path="invoiceDetail.workInvoice.address" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<form:input id ="telephone" path="invoiceDetail.workInvoice.telephone" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block">
+						<form:input id ="bank" path="invoiceDetail.workInvoice.bank" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<form:input id ="bankNumber" path="invoiceDetail.workInvoice.bankNumber" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input id ="startDate"   name="startDate" readonly="true" value="<fmt:formatDate
+							value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">价税合计:</label>
+					<div class="layui-input-block">
+						<form:input id ="totalMoney" path="invoiceDetail.totalMoney" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税率:</label>
+					<div class="layui-input-block">
+						<form:input id ="tax" path="invoiceDetail.tax" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">金额:</label>
+					<div class="layui-input-block">
+						<form:input id ="taxMoney" path="invoiceDetail.taxMoney" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税额:</label>
+					<div class="layui-input-block">
+						<form:input id ="taxRate" path="invoiceDetail.taxRate" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>退票原因:</label>
+					<div class="layui-input-block">
+						<form:textarea path="reason" htmlEscape="false" rows="4"    class="form-control required"/>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>财务受理信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>作废/退票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<c:if test="${1 eq workInvoiceReturnAlter.cancleReturn}">退票</c:if><c:if test="${2 eq workInvoiceReturnAlter.cancleReturn}">作废</c:if>"/>
+						<input type="hidden" name="cancleReturn" value="${workInvoiceReturnAlter.cancleReturn}">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>原票是否退回:</label>
+					<div class="layui-input-block">
+						<input type="radio" class="i-checks" name="returnType" checked id="returnType" value="1">
+						<label for="returnType">是</label>
+						<input type="radio" class="i-checks" name="returnType" id="returnType1" value="2">
+						<label for="returnType1">否</label>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票代码:</label>
+					<div class="layui-input-block">
+						<form:input id ="code" path="code" htmlEscape="false" onchange="check(this.value)" minlength="10" maxlength="12" class="form-control required number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票号:</label>
+					<div class="layui-input-block">
+						<input id="number" name="number" onchange="checkSame(this.value)" type="text" htmlEscape="false" minlength="8" maxlength="8" value="${workInvoiceReturnAlter.number}" class="form-control required number layui-input"/>
+						<input type="hidden" id="oldNumber" value="${workInvoiceReturnAlter.number}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票人:</label>
+					<div class="layui-input-block">
+						<form:input id ="uname" path="uname" htmlEscape="false"  readonly="true" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票时间:</label>
+					<div class="layui-input-block">
+						<input class="form-control layer-date reuired laydate-icon layui-input laydate-icondate required" id="returnDate" name="returnDate" value="<fmt:formatDate
+							value="${workInvoiceReturnAlter.returnDate}" pattern="yyyy-MM-dd"/>">
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 15 - 0
src/main/webapp/webpage/modules/workinvoicereturnalter/workInvoiceReturnAlterTask.jsp

@@ -0,0 +1,15 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票变更流程追踪</title>
+	<meta name="decorator" content="default"/>
+</head>
+<body class="gray-bg">
+	<div class="container form layui-form">
+        <act:flowChart procInsId="${processInstanceId}"/>
+        <act:histoicFlow procInsId="${processInstanceId}"/>
+	</div>
+</body>
+</html>
+

+ 278 - 0
src/main/webapp/webpage/modules/workinvoicereturnalter/workInvoiceReturnAlterView.jsp

@@ -0,0 +1,278 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>退票管理管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 2){
+                  $("#inputForm").attr("action","${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/store");
+              }else{
+                  $("#inputForm").attr("action","${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/save");
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+
+            if("${workInvoiceReturnAlter.cancleReturn}" == "2"){
+                $("#cancleReturn1").iCheck('check')
+            }else{
+                $("#cancleReturn").iCheck('check')
+            }
+            if("${workInvoiceReturnAlter.returnType}" == "2"){
+                $("#returnType1").iCheck('check')
+            }else{
+                $("#returnType").iCheck('check')
+            }
+
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+
+        function setValue(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoicedetail/workInvoiceDetail/getWorkInvoice',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cName").val(d.cName);
+                    $("#clientName").val(d.clientName);
+                    $("#leaderName").val(d.leaderName);
+                    $("#officeName").val(d.officeName);
+                    $("#invoiceType").val(d.invoiceType);
+                    $("#invoiceCName").val(d.invoiceCName);
+                    $("#orUnicode").val(d.orUnicode);
+                    $("#address").val(d.address);
+                    $("#telephone").val(d.telephone);
+                    $("#bank").val(d.bank);
+                    $("#bankNumber").val(d.bankNumber);
+                    $("#startDate").val(d.startDate);
+                    $("#totalMoney").val(d.totalMoney);
+                    $("#tax").val(d.tax);
+                    $("#taxMoney").val(d.taxMoney);
+                    $("#taxRate").val(d.taxRate);
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+<div class="single-form view-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoiceReturnAlter" action="${ctx}/workinvoicereturnalter/workInvoiceReturnAlter/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>退票信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>被退票号:</label>
+					<div class="layui-input-block  with-icon">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.number}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">退票申请编号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoiceReturnAlter.returnNumber}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.project.projectName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目编号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.project.projectId}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.project.workContractInfo.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.office.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">委托方:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.project.workContractInfo.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目负责人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.project.leaderNameStr}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">发票类型:</label>
+						<c:if test="${workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceType eq 1}">
+							<div class="layui-input-block">
+								<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="专票"/>
+							</div>
+						</c:if>
+						<c:if test="${workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceType eq 2}">
+							<div class="layui-input-block">
+								<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="普票"/>
+							</div>
+						</c:if>
+						<c:if test="${empty workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceType}">
+							<div class="layui-input-block">
+								<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceType}"/>
+							</div>
+						</c:if>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票单位:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.orUnicode}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">地址:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.address}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.telephone}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.bank}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.bankNumber}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${workInvoiceReturnAlter.invoiceDetail.workInvoice.invoiceDate}" pattern="yyyy年MM月dd日"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">价税合计:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.totalMoney}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税率:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.tax}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">金额:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.taxMoney}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">税额:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.invoiceDetail.taxRate}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>退票原因:</label>
+					<div class="layui-input-block">
+						<textarea htmlEscape="false" rows="4" readonly="true"    class="form-control required">${workInvoiceReturnAlter.reason}</textarea>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>财务受理信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>作废/退票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<c:if test="${1 eq workInvoiceReturnAlter.cancleReturn}">退票</c:if><c:if test="${2 eq workInvoiceReturnAlter.cancleReturn}">作废</c:if>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>原票是否退回:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="<c:if test="${1 eq workInvoiceReturnAlter.returnType}">是</c:if><c:if test="${2 eq workInvoiceReturnAlter.returnType}">否</c:if>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票代码:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.code}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票号:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="${workInvoiceReturnAlter.number}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control required layui-input" value="${workInvoiceReturnAlter.uname}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>退票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control required layui-input" value="<fmt:formatDate value="${workInvoiceReturnAlter.returnDate}" pattern="yyyy年MM月dd日"/>"/>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 105 - 0
src/main/webapp/webpage/modules/workitem/workItemForm.jsp

@@ -0,0 +1,105 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>物品一览表管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+			
+		});
+	</script>
+</head>
+<body class="hideScroll">
+		<form:form id="inputForm" modelAttribute="workItem" action="${ctx}/workitem/workItem/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<sys:message content="${message}"/>	
+		<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+		   <tbody>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">备注信息:</label></td>
+					<td class="width-35">
+						<form:textarea path="remarks" htmlEscape="false" rows="4"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>所属部门:</label></td>
+					<td class="width-35">
+						<form:input path="officeId" htmlEscape="false"    class="form-control required"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>所属公司:</label></td>
+					<td class="width-35">
+						<form:input path="companyId" htmlEscape="false"    class="form-control required"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>物品目录Id:</label></td>
+					<td class="width-35">
+						<form:input path="catalogueItemId" htmlEscape="false"    class="form-control required"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>是否是固定资产(0否1是):</label></td>
+					<td class="width-35">
+						<form:input path="isAssets" htmlEscape="false"    class="form-control required"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>物品数量:</label></td>
+					<td class="width-35">
+						<form:input path="itemCount" htmlEscape="false"    class="form-control required"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>固定资产状态(1正常2借用3领用4报废):</label></td>
+					<td class="width-35">
+						<form:input path="state" htmlEscape="false"    class="form-control required"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>固定资产编号:</label></td>
+					<td class="width-35">
+						<form:input path="number" htmlEscape="false"    class="form-control required"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>使用人:</label></td>
+					<td class="width-35">
+						<form:input path="endUser" htmlEscape="false"    class="form-control required"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>使用时间:</label></td>
+					<td class="width-35">
+						<form:input path="userDate" htmlEscape="false"    class="form-control required"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>使用部门:</label></td>
+					<td class="width-35">
+						<form:input path="userOfficeId" htmlEscape="false"    class="form-control required"/>
+					</td>
+					<td class="width-15 active"></td>
+		   			<td class="width-35" ></td>
+		  		</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 234 - 0
src/main/webapp/webpage/modules/workitem/workItemList.jsp

@@ -0,0 +1,234 @@
+<%@ page import="com.jeeplus.modules.sys.utils.UserUtils" %>
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>领用管理</title>
+	<meta name="decorator" content="default"/>
+
+
+	<style>
+		.widthClass{
+			display: inline-block;
+		}
+		.shows .input-group{
+			width: 48%!important;
+		}
+	</style>
+	<style>
+		body{
+			background-color:transparent;
+			filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+			color:#ffffff;
+			background-color:rgba(255,255,255,0);
+			height:100%;
+		}
+	</style>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+	<sys:message content="${message}"/>
+	<div class="layui-row">
+		<div class="full-width fl">
+			<div class="contentShadow layui-row" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="workItem" action="${ctx}/workitem/workItem/" method="post" class="form-inline">
+					<%--以下三行照抄--%>
+					<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+					<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+					<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+					<div class="commonQuery ">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">物品名称:</label>
+							<div class="layui-input-block">
+								<input id="name" name="itemName" type="text"  maxlength="60" class=" form-control layui-input " value="${workItem.itemName}"/>
+								</input>
+							</div>
+						</div>
+						<div class="layui-item query athird lw9">
+							<label class="layui-form-label double-line ">是否固定资产:</label>
+							<div class="layui-input-block">
+								<form:select path="isAssets" class="form-control simple-select">
+									<form:option value="" label=""/>
+									<form:option value="1" label="是"/>
+									<form:option value="0" label="否"/>
+								</form:select>
+							</div>
+						</div>
+						<div class="layui-item athird">
+							<div class="input-group">
+								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+								<button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()()">重置</button>
+								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" style="clear:both;display:none;">
+
+						<div class="layui-item query athird lw9">
+							<label class="layui-form-label">固定资产编号:</label>
+							<div class="layui-input-block">
+								<input id="number" name="number" type="text"  maxlength="64" class=" form-control  layui-input laydate-icon" value="${workItem.number}" />
+								</input>
+							</div>
+						</div>
+
+						<div class="layui-item query athird lw9">
+							<label class="layui-form-label">固定资产状态:</label>
+							<div class="layui-input-block">
+								<form:select path="state" class=" form-control  simple-select">
+									<form:option value="" label=""/>
+									<form:option value="1" label="正常"/>
+									<form:option value="2" label="借用"/>
+									<form:option value="3" label="领用"/>
+									<form:option value="4" label="报废"/>
+								</form:select>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">使用人:</label>
+							<div class="layui-input-block">
+								<input id="endUserName" name="endUserName" type="text"  maxlength="64" class=" form-control  layui-input laydate-icon" value="${workItem.endUserName}" />
+								</input>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">使用日期:</label>
+							<div class="layui-input-block">
+								<input id="beginDate" placeholder="开始时间" name="beginDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workItem.beginDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+								<span class="group-sep">-</span>
+								<input id="endDate" placeholder="结束时间" name="endDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workItem.endDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+							</div>
+						</div>
+
+						<div class="layui-item query athird">
+							<label class="layui-form-label">所属部门:</label>
+							<div class="layui-input-block with-icon">
+								<sys:treeselect id="userOfficeId" name="userOfficeId" value="${workItem.userOfficeId}" labelName="userOfficeName" labelValue="${workItem.userOfficeName}"
+												title="部门" url="/sys/office/treeDataAll?type=2" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
+							</div>
+						</div>
+						<div style="clear:both;"></div>
+					</div>
+				</form:form>
+			</div>
+		</div>
+
+		<div class="full-width fl">
+			<div class="contentShadow layui-form contentDetails">
+				<div class="nav-btns">
+					<button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i>&nbsp;刷新</button>
+					<button class="nav-btn" data-toggle="tooltip" data-placement="left" onclick="print()" title="打印"><i class="glyphicon "></i>&nbsp;打印</button>
+					<div style="clear: both;"></div>
+				</div>
+				<table class="oa-table layui-table" id="contentTable">
+				</table>
+
+				<!-- 分页代码 -->
+				<table:page page="${page}"></table:page>
+				<div style="clear: both;"></div>
+			</div>
+		</div>
+	</div>
+</div>
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script>
+    layui.use('table', function(){
+        layui.table.render({
+            limit:${ page.pageSize }
+            ,elem: '#contentTable'
+            ,page: false
+            ,cols: [[
+                {checkbox: true, fixed: true},
+                {field:'itemName',align:'center',minWidth:150, title: '物品名称'},
+                {field:'itemNumber',align:'center',  title: '物品编号',width:150, templet:function(d){
+                        return "<span title='"+ d.itemNumber +"'>" + d.itemNumber + "</span>";
+                    }}
+                ,{field:'itemType',align:'center', title: '物品分类', width:150, templet:function(d){
+                        return "<span title='"+ d.itemType +"'>" + d.itemType + "</span>";
+                    }}
+                ,{field:'itemModel',align:'center', title: '规格型号', width:150, templet:function(d){
+                        return "<span title='"+ d.itemModel +"'>" + d.itemModel + "</span>";
+                    }}
+                ,{field:'itemPrimaryUnit', align:'center',width:150,title: '计量单位', templet:function(d){
+                        return "<span title='"+ d.itemPrimaryUnit +"'>" + d.itemPrimaryUnit + "</span>";
+                    }}
+                ,{field:'itemCount', align:'center',title: '数量', width:80}
+                ,{field:'isAssets', align:'center',title: '是否固定资产',width:150}
+                ,{field:'number', align:'center',title: '固定资产编号',width:150}
+                ,{field:'state', align:'center',title: '固定资产状态',width:150}
+                ,{field:'endUserName', align:'center',title: '使用人',width:150}
+                ,{field:'userDate', align:'center',title: '使用日期',width:150}
+                ,{field:'userOfficeName', align:'center',title: '所属部门',width:150}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="workItem" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+
+                    "itemName":"${workItem.itemName}"
+                    ,"itemNumber":"${workItem.workCatalogueItem.number}"
+                    ,"itemType":"${fns:getMainDictLabel(workItem.workCatalogueItem.type, 'item_type', '')}"
+                    ,"itemModel":"${workItem.workCatalogueItem.model}"
+                    ,"itemPrimaryUnit":"${fns:getMainDictLabel(workItem.workCatalogueItem.primaryUnit, 'full_count_unit', '')}"
+                    ,"itemCount":"${workItem.itemCount}"
+                    ,"isAssets":<c:if test="${workItem.isAssets eq '1'}">"是"</c:if><c:if test="${workItem.isAssets eq '0'}">"否"</c:if>
+                    ,"number":"${workItem.number}"
+                    ,"state":<c:if test="${workItem.state eq '1'}">"正常"</c:if> <c:if test="${workItem.state eq '2'}">"借用"</c:if><c:if test="${workItem.state eq '3'}">"领用"</c:if> <c:if test="${workItem.state eq '4'}">"报废"</c:if>
+                    ,"endUserName":"${workItem.endUserName}"
+                    ,"userDate":"<fmt:formatDate value="${workItem.userDate}" pattern="yyyy-MM-dd"/>"
+                    ,"userOfficeName":"${workItem.userOfficeName}"
+                }
+                </c:forEach>
+                </c:if>
+            ]
+
+        });
+
+    })
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+<script type="text/javascript">
+    $(document).ready(function() {
+        laydate.render({
+            elem: '#beginDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+            format: 'yyyy-MM-dd',
+            type : 'date'
+        });
+
+        laydate.render({
+            elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+            format: 'yyyy-MM-dd',
+            type : 'date'
+        });
+        //搜索框收放
+        $('#moresee').click(function () {
+            if ($('#moresees').is(':visible')) {
+                $('#moresees').slideUp(0, resizeListWindow1);
+                $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+            } else {
+                $('#moresees').slideDown(0, resizeListWindow1);
+                $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+            }
+        });
+    });
+        function switchInput(obj) {
+            $("#" + obj).show();
+            $("#" + obj).siblings().hide();
+        }
+function print(){
+    top.layer.msg('打印功能尚未开发!',{icon: 2,time: 2500,area: ['200px', '100px'], });
+}
+</script>
+</body>
+</html>

+ 380 - 0
src/main/webapp/webpage/modules/workitemcollar/workItemCollarAudit.jsp

@@ -0,0 +1,380 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>报销单管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(obj == 1){
+                    $('#flag').val('yes');
+                }else{
+                    $('#flag').val('no');
+                }
+                $("#inputForm").submit();
+                return true;
+            }
+
+            return false;
+        }
+        var validateForm;
+        $(document).ready(function() {
+
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                rules:{
+                },
+                messages:{
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+          /*  laydate.render({
+                elem: '#collarDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                format: 'yyyy-MM-dd',
+                type : 'date'
+            });*/
+        });
+        function getNowFormatDate() {
+            var date = new Date();
+            var seperator1 = "-";
+            var seperator2 = ":";
+            var month = date.getMonth() + 1;
+            var strDate = date.getDate();
+            month = (month < 10)?"0"+month:month;
+            strDate = (strDate < 10)?"0"+strDate:strDate;
+            var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate;
+            return currentdate;
+        }
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workMonthlyPlanThisList tr").length;
+            //tpl = tpl.replace("workMonthlyPlanThisList[0]_workClientInfoId","workMonthlyPlanThisList["+idx1+"].workClientInfoId");
+
+            bornTemplete(list, idx, tpl, row, idx1);
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+
+        }
+        function delRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            if (id.val() == ""){
+                delFlag.val("1");
+                $(obj).parent().parent().remove();
+            }else if(delFlag.val() == "0"){
+                delFlag.val("1");
+                $(obj).html("&divide;").attr("title", "撤销删除");
+                $(obj).parent().parent().addClass("error");
+                $(obj).parent().parent().addClass("hide");
+            }else if(delFlag.val() == "1"){
+                delFlag.val("0");
+                $(obj).html("&times;").attr("title", "删除");
+                $(obj).parent().parent().removeClass("error");
+            }
+        }
+        function setAssetsInfo(data){
+            for(var i=0;i<data.length;i++){
+                var idArr = $("#workItemCollarItemList tr:visible .itemId");
+                if(data[i].id!=''&&!hasInArr(data[i].id,idArr)){
+                    addRow('#workItemCollarItemList', workItemCollarItemListRowIdx, workItemCollarItemListTpl);
+                    workItemCollarItemListRowIdx = workItemCollarItemListRowIdx + 1;
+                    var row = workItemCollarItemListRowIdx - 1 ;
+                    $("#"+"workItemCollarItemList"+row+"_workAssetsId").val(data[i].id);
+                    $("#"+"workItemCollarItemList"+row+"_1").val(data[i].number);
+                    $("#"+"workItemCollarItemList"+row+"_2").val(data[i].itemName);
+                    $("#"+"workItemCollarItemList"+row+"_3").val(data[i].itemNumber);
+                    $("#"+"workItemCollarItemList"+row+"_4").val(data[i].type);
+                    $("#"+"workItemCollarItemList"+row+"_5").val(data[i].model);
+                    $("#"+"workItemCollarItemList"+row+"_6").val(data[i].primaryUnit);
+                }
+            }
+        }
+        function hasInArr(id,idArr) {
+            for(var i=0;i<idArr.length;i++){
+                if(id==$(idArr[i]).val()){
+                    return true;
+                }
+            }
+            return false;
+        }
+	</script>
+	<style>
+		/*超过5个汉字,调整label的长度,以下是配套的*/
+		.layui-item .layui-form-label{
+			width:90px;
+		}
+		.form-group .layui-item .layui-input-block,
+		.query .layui-input-block {
+			margin-left: 116px;
+		}
+	</style>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workItemCollar" action="${ctx}/workitemcollar/workItemCollar/saveAudit" method="post" class="form-horizontal" >
+			<form:hidden path="id"/>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用人:</label>
+					<div class="layui-input-block">
+						<form:input id="leader" path="userName" readonly="true" htmlEscape="false" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<form:input path="number" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+							<span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty workItemCollar.state}">${fns:getDictLabel(workItemCollar.state, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用日期:</label>
+					<div class="layui-input-block">
+						<input id="collarDate" name="collarDate"  readonly="readonly" type="text"  maxlength="20" class="laydate-icondate form-control layer-date  layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workItemCollar.collarDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用部门:</label>
+					<div class="layui-input-block">
+						<form:input id="officeName" readonly="true" path="officeName" htmlEscape="false" class="form-control   layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">领用事由:</label>
+					<div class="layui-input-block">
+						<form:textarea path="collarFor" cssStyle="resize: none" readonly="true"  htmlEscape="false" rows="4"    maxlength="255" class="form-control "/>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>物品申请明细</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px">物品编号</th>
+							<th width="200px">物品名称</th>
+							<th width="150px">物品分类</th>
+							<th width="200px">规格型号</th>
+							<th width="200px">计量单位</th>
+							<th width="200px">是否固定资产</th>
+							<th width="200px">申请数量</th>
+							<th width="200px">发放数量</th>
+
+						</tr>
+						</thead>
+						<tbody id="workItemCollarCatalogList">
+						<c:if test="${not empty workItemCollar.workItemCollarCatalogList}">
+							<c:forEach items="${workItemCollar.workItemCollarCatalogList}" var="workItemCollarCatalog" varStatus="index">
+								<tr id="workItemCollarCatalogList${index.index}">
+									<td class="hide">
+										<input id="workItemCollarCatalogList${index.index}_id" name="workItemCollarCatalogList[${index.index}].id" type="hidden" value="${workItemCollarCatalog.id}"/>
+										<input id="workItemCollarCatalogList${index.index}_workCatalogueItemid" name="workItemCollarCatalogList[${index.index}].workCatalogueItem.id" type="hidden" value="${workItemCollarCatalog.workCatalogueItem.id}"/>
+										<input id="workItemCollarCatalogList${index.index}_delFlag" name="workItemCollarCatalogList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_1"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.number" type="text" value="${workItemCollarCatalog.workCatalogueItem.number}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_2"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.name" type="text" value="${workItemCollarCatalog.workCatalogueItem.name}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_3"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.type" type="text" value="${fns:getMainDictLabel(workItemCollarCatalog.workCatalogueItem.type, 'item_type', '')}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_4"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.model" type="text" value="${workItemCollarCatalog.workCatalogueItem.model}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_5"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.primaryUnit" type="text" value="${fns:getMainDictLabel(workItemCollarCatalog.workCatalogueItem.primaryUnit, 'full_count_unit', '')}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_6" readonly="true"    name="workItemCollarCatalogList[${index.index}].workCatalogueItem.isAssets" type="text" value="${workItemCollarCatalog.workCatalogueItem.isAssets}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_7"    name="workItemCollarCatalogList[${index.index}].applyNum" type="text" value="${workItemCollarCatalog.applyNum}"  readonly="true"   class="form-control  number required"/>
+									</td>
+									<c:choose>
+									<c:when test="${workItemCollarCatalog.workCatalogueItem.isAssets eq '否' and workItemCollar.act.taskDefKey eq 'xzzg'}">
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_8"   name="workItemCollarCatalogList[${index.index}].grantNum" type="text"  maxlength="6"   class="form-control required number"/>
+									</td>
+									</c:when>
+										<c:otherwise>
+											<td>
+												<input id="workItemCollarCatalogList${index.index}_8"   name="workItemCollarCatalogList[${index.index}].grantNum" type="text" value="${workItemCollarCatalog.grantNum}"  readonly="true"   class="form-control number"/>
+											</td>
+										</c:otherwise>
+									</c:choose>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>固定资产明细</h2></div>
+				<c:choose>
+					<c:when test="${workItemCollar.act.taskDefKey eq 'xzzg'}">
+						<div class="layui-item nav-btns">
+                        <sys:gridselectAssets url="${ctx}/workitem/workItem/selectItem" id="contentData1" title="选择物品一览"
+                                       fieldLabels="" fieldKeys=""  searchLabel="" searchKey="name"></sys:gridselectAssets>
+                       </div>
+					</c:when>
+					<c:otherwise>
+					</c:otherwise>
+				</c:choose>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable1" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px">固定资产编号</th>
+							<th width="200px">物品名称</th>
+							<th width="150px">物品编号</th>
+							<th width="150px">物品分类</th>
+							<th width="200px">规格型号</th>
+							<th width="200px">计量单位</th>
+							<th width="200px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="workItemCollarItemList">
+						<c:if test="${not empty workItemCollar.workItemCollarItemList}">
+							<c:forEach items="${workItemCollar.workItemCollarItemList}" var="workItemCollarItem" varStatus="index">
+								<tr id="workItemCollarItemList${index.index}">
+									<td class="hide">
+										<input id="workItemCollarItemList${index.index}_id" name="workItemCollarItemList[${index.index}].id" type="hidden" value="${workItemCollarItem.id}"/>
+										<input id="workItemCollarItemList${index.index}_workAssetsId" name="workItemCollarItemList[${index.index}].itemId" type="hidden" value="${workItemCollarItem.itemId}" class="itemId"/>
+										<input id="workItemCollarItemList${index.index}_delFlag" name="workItemCollarItemList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_1"  readonly="true"   name="workItemCollarItemList[${index.index}].itemNumber" type="text" value="${workItemCollarItem.itemNumber}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_2"  readonly="true"   name="workItemCollarItemList[${index.index}].itemName" type="text" value="${workItemCollarItem.itemName}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_3"  readonly="true"   name="workItemCollarItemList[${index.index}].itemCatalogNumber" type="text"  value="${workItemCollarItem.itemCatalogNumber}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_4"  readonly="true"   name="workItemCollarItemList[${index.index}].itemType" type="text"  value="${workItemCollarItem.itemType}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_5"  readonly="true"   name="workItemCollarItemList[${index.index}].itemModel" type="text" value="${workItemCollarItem.itemModel}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_6"  readonly="true"   name="workItemCollarItemList[${index.index}].itemPrimaryUnit" type="text"  value="${workItemCollarItem.itemPrimaryUnit}"  class="form-control "/>
+									</td>
+									<td class="text-center op-td" >
+										<span class="op-btn op-btn-delete" id="workItemCollarItemList${index.index}_span" onclick="delRow(this, '#workItemCollarItemList${index.index}')" title="删除"><i class="glyphicon glyphicon-remove " style="vertical-align: middle"></i>&nbsp;删除</span>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+					<script type="text/template" id="workItemCollarItemListTpl">//<!--
+                                    <tr id="workItemCollarItemList{{idx}}">
+                                        <td class="hide">
+                                            <input id="workItemCollarItemList{{idx}}_id" name="workItemCollarItemList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                            <input id="workItemCollarItemList{{idx}}_workAssetsId" name="workItemCollarItemList[{{idx}}].itemId" type="hidden" value="{{row.itemId}}"  class="itemId"/>
+                                            <input id="workItemCollarItemList{{idx}}_delFlag" name="workItemCollarItemList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                        <td>
+                                            <input id="workItemCollarItemList{{idx}}_1"   name="workItemCollarItemList[{{idx}}].itemNumber" type="text" value="{{row.itemNumber}}"  readonly="true"   class="form-control "/>
+                                        </td>
+                                        <td>
+                                            <input id="workItemCollarItemList{{idx}}_2"  name="workItemCollarItemList[{{idx}}].itemName" type="text" value="{{row.itemName}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                        <td>
+                                            <input id="workItemCollarItemList{{idx}}_3"  name="workItemCollarItemList[{{idx}}].itemCatalogNumber" type="text" value="{{row.itemCatalogNumber}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarItemList{{idx}}_4"  name="workItemCollarItemList[{{idx}}].itemType" type="text" value="{{row.itemType}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarItemList{{idx}}_5"  name="workItemCollarItemList[{{idx}}].itemModel" type="text" value="{{row.itemModel}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarItemList{{idx}}_6"  name="workItemCollarItemList[{{idx}}].itemPrimaryUnit" type="text" value="{{row.itemPrimaryUnit}}"   readonly="true"  class="form-control "/>
+                                        </td>
+
+                                        <td class="text-center op-td" >
+                                            {{#delBtn}}<span class="op-btn op-btn-delete" id="workItemCollarItemList{{idx}}_span" onclick="delRow(this, '#workItemCollarItemList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"  style="vertical-align: middle"></i>&nbsp;删除</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+                        var workItemCollarItemListRowIdx = ${fn:length(workItemCollar.workItemCollarItemList)}, workItemCollarItemListTpl = $("#workItemCollarItemListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                        if($("#id").val()){
+                            workItemCollarItemListIdx = ${fn:length(workItemCollar.workItemCollarItemList)};
+                        }
+                        $(document).ready(function() {
+                        });
+					</script>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>审批意见</h2></div>
+				<div class="layui-item layui-col-xs12 with-textarea" >
+					<label class="layui-form-label">审批意见:</label>
+					<div class="layui-input-block">
+						<form:textarea path="act.comment" class="form-control" rows="4" maxlength="127" />
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>审批流程</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<act:flowChart procInsId="${workItemCollar.act.procInsId}"/>
+					<act:histoicFlow procInsId="${workItemCollar.act.procInsId}"/>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+
+</body>
+</html>

+ 443 - 0
src/main/webapp/webpage/modules/workitemcollar/workItemCollarForm.jsp

@@ -0,0 +1,443 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>报销单管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        var count = 0;
+        $(document).ready(function() {
+            checkContentKeyUp('collarFor',255);
+            if($("#collarDate").val()==null || $("#collarDate").val()==''){
+                $("#collarDate").val(getNowFormatDate());
+            }
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                rules:{
+                },
+                messages:{
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+            laydate.render({
+                elem: '#collarDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                format: 'yyyy-MM-dd',
+                type : 'date'
+            });
+
+
+        });
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            var idArr = $("#workItemCollarCatalogList tr:visible");
+            if(idArr.length<1){
+                parent.layer.msg("请添加物品申请明细!", {icon: 5});
+                return false;
+            }
+            if(obj == 2){
+                $("#inputForm").attr("action","${ctx}/workitemcollar/workItemCollar/store");
+            }else{
+                $("#inputForm").attr("action","${ctx}/workitemcollar/workItemCollar/save");
+            }
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }else {
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+
+            return false;
+        }
+
+        function deleteRow(obj,index){
+            $(obj).parent().parent().remove();
+            str[index] = " ";
+            mon[index] = 0;
+
+        }
+        function getNowFormatDate() {
+            var date = new Date();
+            var seperator1 = "-";
+            var seperator2 = ":";
+            var month = date.getMonth() + 1;
+            var strDate = date.getDate();
+            month = (month < 10)?"0"+month:month;
+            strDate = (strDate < 10)?"0"+strDate:strDate;
+            var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate;
+            return currentdate;
+        }
+
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workItemCollarCatalogList tr").length;
+            //tpl = tpl.replace("workMonthlyPlanThisList[0]_workClientInfoId","workMonthlyPlanThisList["+idx1+"].workClientInfoId");
+
+            bornTemplete(list, idx, tpl, row, idx1);
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+
+        }
+        function delRow(obj, prefix){
+            var id = $(prefix+"_id");
+                var delFlag = $(prefix+"_delFlag");
+                if (id.val() == ""){
+                    delFlag.val("1");
+                    $(obj).parent().parent().remove();
+                }else if(delFlag.val() == "0"){
+                    delFlag.val("1");
+                    $(obj).html("&divide;").attr("title", "撤销删除");
+                    $(obj).parent().parent().addClass("error");
+                    $(obj).parent().parent().addClass("hide");
+                }else if(delFlag.val() == "1"){
+                    delFlag.val("0");
+                    $(obj).html("&times;").attr("title", "删除");
+                    $(obj).parent().parent().removeClass("error");
+                }
+        }
+
+
+        function isNumber(val){
+            if(val === "" || val ==null){
+                return false;
+            }
+            var regPos = /^\d+(\.\d+)?$/; //非负浮点数
+            var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
+            if(regPos.test(val) || regNeg.test(val)){
+                return true;
+            }else{
+                return false;
+            }
+
+        }
+        function setCatalogInfo(data){
+            for(var i=0;i<data.length;i++){
+                var idArr = $("#workItemCollarCatalogList tr:visible .workCatalogueItemId");
+                if(data[i].id!=''&&!hasInArr(data[i].id,idArr)){
+                    addRow('#workItemCollarCatalogList', workItemCollarCatalogListRowIdx, workItemCollarCatalogListTpl);
+                    workItemCollarCatalogListRowIdx = workItemCollarCatalogListRowIdx + 1;
+                    var row = workItemCollarCatalogListRowIdx - 1 ;
+                    $("#"+"workItemCollarCatalogList"+row+"_workCatalogueItemid").val(data[i].id);
+                    $("#"+"workItemCollarCatalogList"+row+"_1").val(data[i].number);
+                    $("#"+"workItemCollarCatalogList"+row+"_2").val(data[i].name);
+                    $("#"+"workItemCollarCatalogList"+row+"_3").val(data[i].type);
+                    $("#"+"workItemCollarCatalogList"+row+"_4").val(data[i].model);
+                    $("#"+"workItemCollarCatalogList"+row+"_5").val(data[i].primaryUnit);
+                    $("#"+"workItemCollarCatalogList"+row+"_6").val(data[i].isAssets);
+                    $("#"+"workItemCollarCatalogList"+row+"_8").val(0);
+				}
+			}
+        }
+        function hasInArr(id,idArr) {
+            for(var i=0;i<idArr.length;i++){
+                if(id==$(idArr[i]).val()){
+                    return true;
+                }
+            }
+            return false;
+        }
+        function setAssetsInfo(d){
+            addRow('#workItemCollarItemList', workItemCollarItemListRowIdx, workItemCollarItemListTpl);workItemCollarItemListRowIdx = workItemCollarItemListRowIdx + 1;
+            var row = workItemCollarItemListRowIdx - 1 ;
+            $("#"+"workItemCollarItemList"+row+"_workAssetsId").val(d.id);
+            $("#"+"workItemCollarItemList"+row+"_1").val(d.number);
+            $("#"+"workItemCollarItemList"+row+"_2").val(d.itemName);
+            $("#"+"workItemCollarItemList"+row+"_3").val(d.itemNumber);
+            $("#"+"workItemCollarItemList"+row+"_4").val(d.type);
+            $("#"+"workItemCollarItemList"+row+"_5").val(d.model);
+            $("#"+"workItemCollarItemList"+row+"_6").val(d.primaryUnit);
+        }
+
+	</script>
+	<style>
+		/*超过5个汉字,调整label的长度,以下是配套的*/
+		.layui-item .layui-form-label{
+			width:90px;
+		}
+		.form-group .layui-item .layui-input-block,
+		.query .layui-input-block {
+			margin-left: 116px;
+		}
+	</style>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workItemCollar" action="${ctx}/workitemcollar/workItemCollar/save" method="post" class="form-horizontal" >
+			<form:hidden path="id"/>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用人:</label>
+					<div class="layui-input-block">
+						<form:input id="leader" path="userName" readonly="true" htmlEscape="false" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<form:input path="number" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+							<span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty workItemCollar.state}">${fns:getDictLabel(workItemCollar.state, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用日期:</label>
+					<div class="layui-input-block">
+						<input id="collarDate" name="collarDate" type="text"  maxlength="20" class="laydate-icondate form-control layer-date  layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workItemCollar.collarDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用部门:</label>
+					<div class="layui-input-block">
+						<form:input id="officeName" readonly="true" path="officeName" htmlEscape="false" class="form-control   layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">领用事由:</label>
+					<div class="layui-input-block">
+						<form:textarea path="collarFor" htmlEscape="false" rows="4" onkeyup="checkContentKeyUp('collarFor',255);"   maxlength="255" class="form-control "/>
+					</div>
+					<span id="contentMsg" style="float: right"></span>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>物品申请明细</h2></div>
+				<div class="layui-item nav-btns">
+					<sys:gridselectCatalog url="${ctx}/workcatalogueitem/workCatalogueItem/selectCatalog" id="contentData" title="选择物品目录"
+										fieldLabels="" fieldKeys=""  searchLabel="" searchKey="name"></sys:gridselectCatalog>
+
+				</div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px">物品编号</th>
+							<th width="200px">物品名称</th>
+							<th width="150px">物品分类</th>
+							<th width="200px">规格型号</th>
+							<th width="200px">计量单位</th>
+							<th width="200px">是否固定资产</th>
+							<th width="200px"><font color="red">*</font>申请数量</th>
+							<th width="200px">发放数量</th>
+							<th width="200px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="workItemCollarCatalogList">
+						<c:if test="${not empty workItemCollar.workItemCollarCatalogList}">
+							<c:forEach items="${workItemCollar.workItemCollarCatalogList}" var="workItemCollarCatalog" varStatus="index">
+								<tr id="workItemCollarCatalogList${index.index}">
+									<td class="hide">
+										<input id="workItemCollarCatalogList${index.index}_id" name="workItemCollarCatalogList[${index.index}].id" type="hidden" value="${workItemCollarCatalog.id}"/>
+										<input id="workItemCollarCatalogList${index.index}_workCatalogueItemid" name="workItemCollarCatalogList[${index.index}].workCatalogueItem.id" type="hidden" value="${workItemCollarCatalog.workCatalogueItem.id}" class="workCatalogueItemId"/>
+										<input id="workItemCollarCatalogList${index.index}_delFlag" name="workItemCollarCatalogList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_1"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.number" type="text" value="${workItemCollarCatalog.workCatalogueItem.number}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_2"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.name" type="text" value="${workItemCollarCatalog.workCatalogueItem.name}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_3"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.type" type="text" value="${fns:getMainDictLabel(workItemCollarCatalog.workCatalogueItem.type, 'item_type', '')}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_4"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.model" type="text" value="${workItemCollarCatalog.workCatalogueItem.model}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_5"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.primaryUnit" type="text" value="${fns:getMainDictLabel(workItemCollarCatalog.workCatalogueItem.primaryUnit, 'full_count_unit', '')}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_6" readonly="true"    name="workItemCollarCatalogList[${index.index}].workCatalogueItem.isAssets" type="text" value="${workItemCollarCatalog.workCatalogueItem.isAssets}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_7"    name="workItemCollarCatalogList[${index.index}].applyNum" type="text" value="${workItemCollarCatalog.applyNum}" maxlength="6"    class="form-control  number required"/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_8"   name="workItemCollarCatalogList[${index.index}].grantNum" type="text" value="${workItemCollarCatalog.grantNum}" readonly="true"   class="form-control number"/>
+									</td>
+									<td class="text-center op-td" >
+										<span class="op-btn op-btn-delete" id="workItemCollarCatalogList${index.index}_span" onclick="delRow(this, '#workItemCollarCatalogList${index.index}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+					<script type="text/template" id="workItemCollarCatalogListTpl">//<!--
+                                    <tr id="workItemCollarCatalogList{{idx}}">
+                                        <td class="hide">
+                                            <input id="workItemCollarCatalogList{{idx}}_id" name="workItemCollarCatalogList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                            <input id="workItemCollarCatalogList{{idx}}_workCatalogueItemid" name="workItemCollarCatalogList[{{idx}}].workCatalogueItem.id" type="hidden" value="{{row.workCatalogueItem.id}}" class="workCatalogueItemId"/>
+                                            <input id="workItemCollarCatalogList{{idx}}_delFlag" name="workItemCollarCatalogList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                        <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_1"   name="workItemCollarCatalogList[{{idx}}].workCatalogueItem.number" type="text" value="{{row.workCatalogueItem.number}}"  readonly="true"   class="form-control "/>
+                                        </td>
+                                        <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_2"  name="workItemCollarCatalogList[{{idx}}].workCatalogueItem.name" type="text" value="{{row.workCatalogueItem.name}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_3"  name="workItemCollarCatalogList[{{idx}}].workCatalogueItem.type" type="text" value="{{row.workCatalogueItem.type}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_4"  name="workItemCollarCatalogList[{{idx}}].workCatalogueItem.model" type="text" value="{{row.workCatalogueItem.model}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_5"  name="workItemCollarCatalogList[{{idx}}].workCatalogueItem.primaryUnit" type="text" value="{{row.workCatalogueItem.primaryUnit}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_6"  name="workItemCollarCatalogList[{{idx}}].workCatalogueItem.isAssets" type="text" value="{{row.workCatalogueItem.isAssets}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_7"  name="workItemCollarCatalogList[{{idx}}].applyNum" type="text" value="{{row.applyNum}}"  maxlength="6"  class="form-control number required"/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_8"  name="workItemCollarCatalogList[{{idx}}].grantNum" type="text" value="0"  readonly="true"   class="form-control "/>
+                                        </td>
+                                        <td class="text-center op-td" >
+                                            {{#delBtn}}<span class="op-btn op-btn-delete" id="workItemCollarCatalogList{{idx}}_span" onclick="delRow(this, '#workItemCollarCatalogList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+                        var workItemCollarCatalogListRowIdx = ${fn:length(workItemCollar.workItemCollarCatalogList)}, workItemCollarCatalogListTpl = $("#workItemCollarCatalogListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                        if($("#id").val()){
+                            workItemCollarCatalogListIdx = ${fn:length(workItemCollar.workItemCollarCatalogList)};
+                        }
+                        $(document).ready(function() {
+                        });
+					</script>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>固定资产明细</h2></div>
+				<%--<div class="layui-item nav-btns">
+					<sys:gridselectAssets url="${ctx}/workitem/workItem/selectItem" id="contentData1" title="选择物品一览"
+										   fieldLabels="" fieldKeys=""  searchLabel="" searchKey="name"></sys:gridselectAssets>
+
+				</div>--%>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable1" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px">固定资产编号</th>
+							<th width="200px">物品名称</th>
+							<th width="150px">物品编号</th>
+							<th width="150px">物品分类</th>
+							<th width="200px">规格型号</th>
+							<th width="200px">计量单位</th>
+						</tr>
+						</thead>
+						<tbody id="workItemCollarItemList">
+						<c:if test="${not empty workItemCollar.workItemCollarItemList}">
+							<c:forEach items="${workItemCollar.workItemCollarItemList}" var="workItemCollarItem" varStatus="index">
+								<tr id="workItemCollarItemList${index.index}">
+									<td class="hide">
+										<input id="workItemCollarItemList${index.index}_id" name="workItemCollarItemList[${index.index}].id" type="hidden" value="${workItemCollarItem.id}"/>
+										<input id="workItemCollarItemList${index.index}_workAssetsId" name="workItemCollarItemList[${index.index}].itemId" type="hidden" value="${workItemCollarItem.itemId}"/>
+										<input id="workItemCollarItemList${index.index}_delFlag" name="workItemCollarItemList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_1"  readonly="true"   name="workItemCollarItemList[${index.index}].itemNumber" type="text" value="${workItemCollarItem.itemNumber}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_2"  readonly="true"   name="workItemCollarItemList[${index.index}].itemName" type="text" value="${workItemCollarItem.itemName}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_3"  readonly="true"   name="workItemCollarItemList[${index.index}].itemCatalogNumber" type="text"  value="${workItemCollarItem.itemCatalogNumber}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_4"  readonly="true"   name="workItemCollarItemList[${index.index}].itemType" type="text"  value="${workItemCollarItem.itemType}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_5"  readonly="true"   name="workItemCollarItemList[${index.index}].itemModel" type="text" value="${workItemCollarItem.itemModel}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_6"  readonly="true"   name="workItemCollarItemList[${index.index}].itemPrimaryUnit" type="text"  value="${workItemCollarItem.itemPrimaryUnit}"  class="form-control "/>
+									</td>
+
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+					<script type="text/template" id="workItemCollarItemListTpl">//<!--
+                                    <tr id="workItemCollarItemList{{idx}}">
+                                        <td class="hide">
+                                            <input id="workItemCollarItemList{{idx}}_id" name="workItemCollarItemList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                            <input id="workItemCollarItemList{{idx}}_workAssetsId" name="workItemCollarItemList[{{idx}}].itemId" type="hidden" value="{{row.itemId}}"/>
+                                            <input id="workItemCollarItemList{{idx}}_delFlag" name="workItemCollarItemList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                        <td>
+                                            <input id="workItemCollarItemList{{idx}}_1"   name="workItemCollarItemList[{{idx}}].itemNumber" type="text" value="{{row.itemNumber}}"  readonly="true"   class="form-control "/>
+                                        </td>
+                                        <td>
+                                            <input id="workItemCollarItemList{{idx}}_2"  name="workItemCollarItemList[{{idx}}].itemName" type="text" value="{{row.itemName}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                        <td>
+                                            <input id="workItemCollarItemList{{idx}}_3"  name="workItemCollarItemList[{{idx}}].itemCatalogNumber" type="text" value="{{row.itemCatalogNumber}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarItemList{{idx}}_4"  name="workItemCollarItemList[{{idx}}].itemType" type="text" value="{{row.itemType}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarItemList{{idx}}_5"  name="workItemCollarItemList[{{idx}}].itemModel" type="text" value="{{row.itemModel}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarItemList{{idx}}_6"  name="workItemCollarItemList[{{idx}}].itemPrimaryUnit" type="text" value="{{row.itemPrimaryUnit}}"   readonly="true"  class="form-control "/>
+                                        </td>
+
+                                        <td class="text-center op-td" >
+                                            {{#delBtn}}<span class="op-btn op-btn-delete" id="workItemCollarItemList{{idx}}_span" onclick="delRow(this, '#workItemCollarItemList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+                        var workItemCollarItemListRowIdx = ${fn:length(workItemCollar.workItemCollarItemList)}, workItemCollarItemListTpl = $("#workItemCollarItemListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                        if($("#id").val()){
+                            workItemCollarItemListIdx = ${fn:length(workItemCollar.workItemCollarItemList)};
+                        }
+                        $(document).ready(function() {
+                        });
+					</script>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+
+</body>
+</html>

+ 309 - 0
src/main/webapp/webpage/modules/workitemcollar/workItemCollarList.jsp

@@ -0,0 +1,309 @@
+<%@ page import="com.jeeplus.modules.sys.utils.UserUtils" %>
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>借用管理</title>
+	<meta name="decorator" content="default"/>
+	<style>
+		.widthClass{
+			display: inline-block;
+		}
+		.shows .input-group{
+			width: 48%!important;
+		}
+	</style>
+	<style>
+		body{
+			background-color:transparent;
+			filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+			color:#ffffff;
+			background-color:rgba(255,255,255,0);
+			height:100%;
+		}
+	</style>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+	<sys:message content="${message}"/>
+	<div class="layui-row">
+		<div class="full-width fl">
+			<div class="contentShadow layui-row" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="workItemCollar" action="${ctx}/workitemcollar/workItemCollar/" method="post" class="form-inline">
+					<%--以下三行照抄--%>
+					<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+					<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+					<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+					<div class="commonQuery">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">领用人:</label>
+							<div class="layui-input-block">
+								<input id="leader" name="userName" type="text"  maxlength="64" class=" form-control  layui-input laydate-icon" value="${workItemCollar.leader}" />
+								</input>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">领用日期:</label>
+							<div class="layui-input-block">
+								<input id="beginDate" placeholder="开始时间" name="beginDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workItemCollar.beginDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+								<span class="group-sep">-</span>
+								<input id="endDate" placeholder="结束时间" name="endDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workItemCollar.endDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+							</div>
+						</div>
+						<div class="layui-item athird">
+							<div class="input-group">
+								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+								<button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
+								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" style="clear:both;display:none;">
+						<div class="layui-item query athird ">
+							<label class="layui-form-label">状态:</label>
+							<div class="layui-input-block">
+								<form:select path="state" class=" form-control  simple-select">
+									<form:option value="" label=""/>
+									<form:options items="${fns:getDictList('audit_state')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+								</form:select>
+							</div>
+						</div>
+						<div style="clear:both;"></div>
+					</div>
+				</form:form>
+			</div>
+		</div>
+
+		<div class="full-width fl">
+			<div class="contentShadow layui-form contentDetails">
+				<div class="nav-btns">
+					<%--此处按钮样式包括 nav-btn-add nav-btn-refresh nav-btn-import nav-btn-export nav-btn-query nav-btn-reset--%>
+					<shiro:hasPermission name="workitemcollar:workItemCollar:add">
+						<a href="javascript:void(0)" onclick="openDialog('新增领用', '${ctx}/workitemcollar/workItemCollar/form?tabId=1','95%','95%')" class="nav-btn nav-btn-add" ><i class="fa fa-plus"></i>&nbsp;添加</a>
+					</shiro:hasPermission>
+					<%--<shiro:hasPermission name="workitemcollar:workItemCollar:export">
+						<table:exportExcel url="${ctx}/workitemcollar/workItemCollar/export"></table:exportExcel><!-- 导出按钮 -->
+					</shiro:hasPermission>--%>
+					<button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i>&nbsp;刷新</button>
+					<div style="clear: both;"></div>
+				</div>
+				<table class="oa-table layui-table" id="contentTable"></table>
+
+				<!-- 分页代码 -->
+				<table:page page="${page}"></table:page>
+				<div style="clear: both;"></div>
+			</div>
+		</div>
+	</div>
+	<div id="changewidth"></div>
+</div>
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script>
+    layui.use('table', function(){
+        layui.table.render({
+            limit:${ page.pageSize }
+            ,elem: '#contentTable'
+            ,page: false
+            ,cols: [[
+                {field:'number',align:'center',sort: true, width:150,title: '领用编号', templet:function(d){
+                        var xml = "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看领用', '${ctx}/workitemcollar/workItemCollar/view?id=" + d.id + "','95%','95%')\">" +
+                            "<span title=" + d.number + ">" + d.number + "</span></a>";
+                        return xml;
+                    }},
+                {field:'collarDate', align:'center',width:150,title: '领用日期'},
+                {field:'userName',align:'center',width:150, title: '领用人',templet:function(d){
+                        return "<span title='"+ d.userName +"'>" + d.userName + "</span>";
+                    }},
+                {field:'collarFor',align:'center',minWidth:150, title: '领用事由',templet:function(d){
+                        return "<span title='"+ d.collarFor +"'>" + d.collarFor + "</span>";
+                    }},
+                {field:'state',align:'center',width:80, title: '领用状态',templet:function(d){
+                        var st = getAuditState(d.state);
+                        if(st.action)
+                            var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workitemcollar/workItemCollar/getProcess?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        else
+                            var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        return xml;
+                    }}
+                ,{align:'caozuo',align:'center',title:"操作",width:160,templet:function(d){
+                        var xml = "";
+                        if(d.canedit != undefined && d.canedit == "1"){
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialog('修改领用', '${ctx}/workitemcollar/workItemCollar/form?id=" + d.id+"','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i>修改</a>"
+                        }
+                        if(d.canmodify != undefined && d.canmodify =="1"){
+                            xml+="<a href=\"#\" onclick=\"openDialogremodify('修改领用', '${ctx}/workitemcollar/workItemCollar/modify?id=" + d.id + "','95%', '95%','','重新申请,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.candelete != undefined && d.candelete == "1"){
+                            xml +="<a href=\"${ctx}/workitemcollar/workItemCollar/delete?id=" + d.id+"\" onclick=\"return confirmx('确认要删除该领用吗?', this.href)\"   class=\"op-btn op-btn-delete\"><i class=\"fa fa-trash\"></i> 删除</a>";
+                        }
+                        if(d.cancancel != undefined && d.cancancel =="1"){
+                            xml+="<a href=\"${ctx}/workitemcollar/workItemCollar/revoke?id=" + d.id + "&processInstanceId=" + d.procId + "\" onclick=\"return confirmx('确认要撤回该领用申请吗?', this.href)\" class=\"op-btn op-btn-cancel\" ><i class=\"glyphicon glyphicon-share-alt\"></i> 撤回</a>";
+                        }
+                        return xml;
+                    }}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="workItemCollar" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "id":"${workItemCollar.id}"
+                    ,"number":"${workItemCollar.number}"
+                    ,"collarDate":"<fmt:formatDate value="${workItemCollar.collarDate}" pattern="yyyy-MM-dd"/>"
+                    ,"userName":"${workItemCollar.userName}"
+                    ,"collarFor":"${workItemCollar.collarFor}"
+                    ,"state":"${workItemCollar.state}"
+                    ,"procId":"${workItemCollar.processInstanceId}"
+                    <c:if test="${flag == '1' or fns:getUser().id == workItemCollar.createBy.id}">
+                    <shiro:hasPermission name="workitemcollar:workItemCollar:edit">,"canedit":<c:choose><c:when test="${workItemCollar.state == 1 or workItemCollar.state == 3}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    ,"canmodify":<c:choose><c:when test="${workItemCollar.state == 4}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    </shiro:hasPermission>
+                    <shiro:hasPermission name="workitemcollar:workItemCollar:del">,"candelete":<c:choose><c:when test="${workItemCollar.state == 1 or workItemCollar.state == 3 or workItemCollar.state == 4}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose></shiro:hasPermission>
+                    ,"cancancel":<c:choose><c:when test="${workItemCollar.state == 2}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    </c:if>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+        });
+
+    })
+    resizeListTable();
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+<script type="text/javascript">
+    $(document).ready(function() {
+        $("#cus_name").show();
+        $("#cus_name").siblings().hide();
+        //搜索框收放
+        $('#moresee').click(function(){
+            if($('#moresees').is(':visible'))
+            {
+                $('#moresees').slideUp(0,resizeListWindow1);
+                $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+            }else{
+                $('#moresees').slideDown(0,resizeListWindow1);
+                $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+            }
+        });
+
+        laydate.render({
+            elem: '#beginDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+            format: 'yyyy-MM-dd',
+            type : 'date'
+        });
+
+        laydate.render({
+            elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+            format: 'yyyy-MM-dd',
+            type : 'date'
+        });
+
+    });
+    function switchInput(obj){
+        $("#"+obj).show();
+        $("#"+obj).siblings().hide();
+    }
+
+    function openDialogremodify(title,url,width,height,target){
+
+        if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+            width='auto';
+            height='auto';
+        }else{//如果是PC端,根据用户设置的width和height显示。
+
+        }
+        top.layer.open({
+            type: 2,
+            area: [width, height],
+            title: title,
+            skin: 'two-btns',
+            maxmin: true, //开启最大化最小化按钮
+            content: url ,
+            btn: ['重新申请','关闭'],
+            yes: function(index, layero){
+                var body = top.layer.getChildFrame('body', index);
+                var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                var inputForm = body.find('#inputForm');
+                var top_iframe;
+                if(target){
+                    top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                }else{
+                    top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                }
+                inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+
+                if(iframeWin.contentWindow.doSubmit() ){
+                    top.layer.close(index);//关闭对话框。
+                    //setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                }
+
+            }
+
+        });
+    }
+    function openDialog(title,url,width,height,target) {
+        if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+            width = 'auto';
+            height = 'auto';
+        } else {//如果是PC端,根据用户设置的width和height显示。
+        }
+        top.layer.open({
+            type: 2,
+            area: [width, height],
+            title: title,
+            maxmin: true, //开启最大化最小化按钮
+            content: url,
+            skin: 'three-btns',
+            btn: ['送审', '暂存', '关闭'],
+            btn1: function(index, layero){
+                var body = top.layer.getChildFrame('body', index);
+                var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                var inputForm = body.find('#inputForm');
+                var top_iframe;
+                if(target){
+                    top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                }else{
+                    top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                }
+                inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                if(iframeWin.contentWindow.doSubmit(1) ){
+                    // top.layer.close(index);//关闭对话框。
+                    setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                }
+            },
+            btn2:function(index,layero){
+                var body = top.layer.getChildFrame('body', index);
+                var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                var inputForm = body.find('#inputForm');
+                var top_iframe;
+                if(target){
+                    top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                }else{
+                    top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                }
+                inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                if(iframeWin.contentWindow.doSubmit(2) ){
+                    // top.layer.close(index);//关闭对话框。
+                    setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                }else {
+                    return false;
+                }
+            },
+            btn3: function (index) {
+            }
+        });
+    }
+</script>
+</body>
+</html>

+ 446 - 0
src/main/webapp/webpage/modules/workitemcollar/workItemCollarModifyApply.jsp

@@ -0,0 +1,446 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>报销单管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            var idArr = $("#workItemCollarCatalogList tr:visible");
+            if(idArr.length<1){
+                parent.layer.msg("请添加物品申请明细!", {icon: 5});
+                return false;
+            }
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }
+
+            return false;
+        }
+        var validateForm;
+        var count = 0;
+        $(document).ready(function() {
+            checkContentKeyUp('collarFor',255);
+            if($("#collarDate").val()==null || $("#collarDate").val()==''){
+                $("#collarDate").val(getNowFormatDate());
+            }
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                rules:{
+                },
+                messages:{
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+            laydate.render({
+                elem: '#collarDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                format: 'yyyy-MM-dd',
+                type : 'date'
+            });
+
+
+        });
+
+        function deleteRow(obj,index){
+            $(obj).parent().parent().remove();
+            str[index] = " ";
+            mon[index] = 0;
+
+        }
+        function getNowFormatDate() {
+            var date = new Date();
+            var seperator1 = "-";
+            var seperator2 = ":";
+            var month = date.getMonth() + 1;
+            var strDate = date.getDate();
+            month = (month < 10)?"0"+month:month;
+            strDate = (strDate < 10)?"0"+strDate:strDate;
+            var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate;
+            return currentdate;
+        }
+
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workMonthlyPlanThisList tr").length;
+            //tpl = tpl.replace("workMonthlyPlanThisList[0]_workClientInfoId","workMonthlyPlanThisList["+idx1+"].workClientInfoId");
+
+            bornTemplete(list, idx, tpl, row, idx1);
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+
+        }
+        function delRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            if (id.val() == ""){
+                delFlag.val("1");
+                $(obj).parent().parent().remove();
+            }else if(delFlag.val() == "0"){
+                delFlag.val("1");
+                $(obj).html("&divide;").attr("title", "撤销删除");
+                $(obj).parent().parent().addClass("error");
+                $(obj).parent().parent().addClass("hide");
+            }else if(delFlag.val() == "1"){
+                delFlag.val("0");
+                $(obj).html("&times;").attr("title", "删除");
+                $(obj).parent().parent().removeClass("error");
+            }
+        }
+
+
+        function isNumber(val){
+            if(val === "" || val ==null){
+                return false;
+            }
+            var regPos = /^\d+(\.\d+)?$/; //非负浮点数
+            var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
+            if(regPos.test(val) || regNeg.test(val)){
+                return true;
+            }else{
+                return false;
+            }
+
+        }
+        function setCatalogInfo(data){
+            for(var i=0;i<data.length;i++){
+                var idArr = $("#workItemCollarCatalogList tr:visible .workCatalogueItemId");
+                if(data[i].id!=''&&!hasInArr(data[i].id,idArr)){
+                    addRow('#workItemCollarCatalogList', workItemCollarCatalogListRowIdx, workItemCollarCatalogListTpl);
+                    workItemCollarCatalogListRowIdx = workItemCollarCatalogListRowIdx + 1;
+                    var row = workItemCollarCatalogListRowIdx - 1 ;
+                    $("#"+"workItemCollarCatalogList"+row+"_workCatalogueItemid").val(data[i].id);
+                    $("#"+"workItemCollarCatalogList"+row+"_1").val(data[i].number);
+                    $("#"+"workItemCollarCatalogList"+row+"_2").val(data[i].name);
+                    $("#"+"workItemCollarCatalogList"+row+"_3").val(data[i].type);
+                    $("#"+"workItemCollarCatalogList"+row+"_4").val(data[i].model);
+                    $("#"+"workItemCollarCatalogList"+row+"_5").val(data[i].primaryUnit);
+                    $("#"+"workItemCollarCatalogList"+row+"_6").val(data[i].isAssets);
+                    $("#"+"workItemCollarCatalogList"+row+"_8").val(0);
+                }
+            }
+        }
+        function hasInArr(id,idArr) {
+            for(var i=0;i<idArr.length;i++){
+                if(id==$(idArr[i]).val()){
+                    return true;
+                }
+            }
+            return false;
+        }
+        function setAssetsInfo(d){
+            addRow('#workItemCollarItemList', workItemCollarItemListRowIdx, workItemCollarItemListTpl);workItemCollarItemListRowIdx = workItemCollarItemListRowIdx + 1;
+            var row = workItemCollarItemListRowIdx - 1 ;
+            $("#"+"workItemCollarItemList"+row+"_workAssetsId").val(d.id);
+            $("#"+"workItemCollarItemList"+row+"_1").val(d.number);
+            $("#"+"workItemCollarItemList"+row+"_2").val(d.itemName);
+            $("#"+"workItemCollarItemList"+row+"_3").val(d.itemNumber);
+            $("#"+"workItemCollarItemList"+row+"_4").val(d.type);
+            $("#"+"workItemCollarItemList"+row+"_5").val(d.model);
+            $("#"+"workItemCollarItemList"+row+"_6").val(d.primaryUnit);
+        }
+
+	</script>
+	<style>
+		/*超过5个汉字,调整label的长度,以下是配套的*/
+		.layui-item .layui-form-label{
+			width:90px;
+		}
+		.form-group .layui-item .layui-input-block,
+		.query .layui-input-block {
+			margin-left: 116px;
+		}
+	</style>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workItemCollar" action="${ctx}/workitemcollar/workItemCollar/save" method="post" class="form-horizontal" >
+			<form:hidden path="id"/>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用人:</label>
+					<div class="layui-input-block">
+						<form:input id="leader" path="userName" readonly="true" htmlEscape="false" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<form:input path="number" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+							<span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty workItemCollar.state}">${fns:getDictLabel(workItemCollar.state, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用日期:</label>
+					<div class="layui-input-block">
+						<input id="collarDate" name="collarDate" type="text"  maxlength="20" class="laydate-icondate form-control layer-date  layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workItemCollar.collarDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用部门:</label>
+					<div class="layui-input-block">
+						<form:input id="officeName" readonly="true" path="officeName" htmlEscape="false" class="form-control   layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">领用事由:</label>
+					<div class="layui-input-block">
+						<form:textarea path="collarFor" htmlEscape="false" rows="4" onkeyup="checkContentKeyUp('collarFor',255);"   maxlength="255" class="form-control "/>
+					</div>
+					<span id="contentMsg" style="float: right"></span>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>物品申请明细</h2></div>
+				<div class="layui-item nav-btns">
+					<sys:gridselectCatalog url="${ctx}/workcatalogueitem/workCatalogueItem/selectCatalog" id="contentData" title="选择物品目录"
+										   fieldLabels="" fieldKeys=""  searchLabel="" searchKey="name"></sys:gridselectCatalog>
+
+				</div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px">物品编号</th>
+							<th width="200px">物品名称</th>
+							<th width="150px">物品分类</th>
+							<th width="200px">规格型号</th>
+							<th width="200px">计量单位</th>
+							<th width="200px">是否固定资产</th>
+							<th width="200px"><font color="red">*</font>申请数量</th>
+							<th width="200px">发放数量</th>
+							<th width="200px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="workItemCollarCatalogList">
+						<c:if test="${not empty workItemCollar.workItemCollarCatalogList}">
+							<c:forEach items="${workItemCollar.workItemCollarCatalogList}" var="workItemCollarCatalog" varStatus="index">
+								<tr id="workItemCollarCatalogList${index.index}">
+									<td class="hide">
+										<input id="workItemCollarCatalogList${index.index}_id" name="workItemCollarCatalogList[${index.index}].id" type="hidden" value="${workItemCollarCatalog.id}"/>
+										<input id="workItemCollarCatalogList${index.index}_workCatalogueItemid" name="workItemCollarCatalogList[${index.index}].workCatalogueItem.id" type="hidden" value="${workItemCollarCatalog.workCatalogueItem.id}" class="workCatalogueItemId"/>
+										<input id="workItemCollarCatalogList${index.index}_delFlag" name="workItemCollarCatalogList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_1"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.number" type="text" value="${workItemCollarCatalog.workCatalogueItem.number}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_2"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.name" type="text" value="${workItemCollarCatalog.workCatalogueItem.name}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_3"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.type" type="text" value="${fns:getDictLabel(workItemCollarCatalog.workCatalogueItem.type, 'item_type', '')}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_4"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.model" type="text" value="${workItemCollarCatalog.workCatalogueItem.model}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_5"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.primaryUnit" type="text" value="${fns:getDictLabel(workItemCollarCatalog.workCatalogueItem.primaryUnit, 'full_count_unit', '')}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_6" readonly="true"    name="workItemCollarCatalogList[${index.index}].workCatalogueItem.isAssets" type="text" value="${workItemCollarCatalog.workCatalogueItem.isAssets}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_7"    name="workItemCollarCatalogList[${index.index}].applyNum" type="text" value="${workItemCollarCatalog.applyNum}"     class="form-control  number required"/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_8"   name="workItemCollarCatalogList[${index.index}].grantNum" type="text" value="${workItemCollarCatalog.grantNum}" readonly="true"   class="form-control number"/>
+									</td>
+									<td class="text-center op-td" >
+										<span class="op-btn op-btn-delete" id="workItemCollarCatalogList${index.index}_span" onclick="delRow(this, '#workItemCollarCatalogList${index.index}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+					<script type="text/template" id="workItemCollarCatalogListTpl">//<!--
+                                    <tr id="workItemCollarCatalogList{{idx}}">
+                                        <td class="hide">
+                                            <input id="workItemCollarCatalogList{{idx}}_id" name="workItemCollarCatalogList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                            <input id="workItemCollarCatalogList{{idx}}_workCatalogueItemid" name="workItemCollarCatalogList[{{idx}}].workCatalogueItem.id" type="hidden" value="{{row.workCatalogueItem.id}}" class="workCatalogueItemId"/>
+                                            <input id="workItemCollarCatalogList{{idx}}_delFlag" name="workItemCollarCatalogList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                        <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_1"   name="workItemCollarCatalogList[{{idx}}].workCatalogueItem.number" type="text" value="{{row.workCatalogueItem.number}}"  readonly="true"   class="form-control "/>
+                                        </td>
+                                        <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_2"  name="workItemCollarCatalogList[{{idx}}].workCatalogueItem.name" type="text" value="{{row.workCatalogueItem.name}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_3"  name="workItemCollarCatalogList[{{idx}}].workCatalogueItem.type" type="text" value="{{row.workCatalogueItem.type}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_4"  name="workItemCollarCatalogList[{{idx}}].workCatalogueItem.model" type="text" value="{{row.workCatalogueItem.model}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_5"  name="workItemCollarCatalogList[{{idx}}].workCatalogueItem.primaryUnit" type="text" value="{{row.workCatalogueItem.primaryUnit}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_6"  name="workItemCollarCatalogList[{{idx}}].workCatalogueItem.isAssets" type="text" value="{{row.workCatalogueItem.isAssets}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_7"  name="workItemCollarCatalogList[{{idx}}].applyNum" type="text" value="{{row.applyNum}}"    class="form-control number required"/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarCatalogList{{idx}}_8"  name="workItemCollarCatalogList[{{idx}}].grantNum" type="text" value="{{row.grantNum}}"  readonly="true"   class="form-control "/>
+                                        </td>
+                                        <td class="text-center op-td" >
+                                            {{#delBtn}}<span class="op-btn op-btn-delete" id="workItemCollarCatalogList{{idx}}_span" onclick="delRow(this, '#workItemCollarCatalogList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+                        var workItemCollarCatalogListRowIdx = ${fn:length(workItemCollar.workItemCollarCatalogList)}, workItemCollarCatalogListTpl = $("#workItemCollarCatalogListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                        if($("#id").val()){
+                            workItemCollarCatalogListIdx = ${fn:length(workItemCollar.workItemCollarCatalogList)};
+                        }
+                        $(document).ready(function() {
+                        });
+					</script>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>固定资产明细</h2></div>
+				<%--<div class="layui-item nav-btns">
+					<sys:gridselectAssets url="${ctx}/workitem/workItem/selectItem" id="contentData1" title="选择物品一览"
+										  fieldLabels="" fieldKeys=""  searchLabel="" searchKey="name"></sys:gridselectAssets>
+
+				</div>--%>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable1" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px">固定资产编号</th>
+							<th width="200px">物品名称</th>
+							<th width="150px">物品编号</th>
+							<th width="150px">物品分类</th>
+							<th width="200px">规格型号</th>
+							<th width="200px">计量单位</th>
+							<th width="200px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="workItemCollarItemList">
+						<c:if test="${not empty workItemCollar.workItemCollarItemList}">
+							<c:forEach items="${workItemCollar.workItemCollarItemList}" var="workItemCollarItem" varStatus="index">
+								<tr id="workItemCollarItemList${index.index}">
+									<td class="hide">
+										<input id="workItemCollarItemList${index.index}_id" name="workItemCollarItemList[${index.index}].id" type="hidden" value="${workItemCollarItem.id}"/>
+										<input id="workItemCollarItemList${index.index}_workAssetsId" name="workItemCollarItemList[${index.index}].itemId" type="hidden" value="${workItemCollarItem.itemId}"/>
+										<input id="workItemCollarItemList${index.index}_delFlag" name="workItemCollarItemList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_1"  readonly="true"   name="workItemCollarItemList[${index.index}].itemNumber" type="text" value="${workItemCollarItem.itemNumber}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_2"  readonly="true"   name="workItemCollarItemList[${index.index}].itemName" type="text" value="${workItemCollarItem.itemName}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_3"  readonly="true"   name="workItemCollarItemList[${index.index}].itemCatalogNumber" type="text"  value="${workItemCollarItem.itemCatalogNumber}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_4"  readonly="true"   name="workItemCollarItemList[${index.index}].itemType" type="text"  value="${workItemCollarItem.itemType}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_5"  readonly="true"   name="workItemCollarItemList[${index.index}].itemModel" type="text" value="${workItemCollarItem.itemModel}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_6"  readonly="true"   name="workItemCollarItemList[${index.index}].itemPrimaryUnit" type="text"  value="${workItemCollarItem.itemPrimaryUnit}"  class="form-control "/>
+									</td>
+									<td class="text-center op-td" >
+										<span class="op-btn op-btn-delete" id="workItemCollarItemList${index.index}_span" onclick="delRow(this, '#workItemCollarItemList${index.index}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+					<script type="text/template" id="workItemCollarItemListTpl">//<!--
+                                    <tr id="workItemCollarItemList{{idx}}">
+                                        <td class="hide">
+                                            <input id="workItemCollarItemList{{idx}}_id" name="workItemCollarItemList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                            <input id="workItemCollarItemList{{idx}}_workAssetsId" name="workItemCollarItemList[{{idx}}].itemId" type="hidden" value="{{row.itemId}}"/>
+                                            <input id="workItemCollarItemList{{idx}}_delFlag" name="workItemCollarItemList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                        <td>
+                                            <input id="workItemCollarItemList{{idx}}_1"   name="workItemCollarItemList[{{idx}}].itemNumber" type="text" value="{{row.itemNumber}}"  readonly="true"   class="form-control "/>
+                                        </td>
+                                        <td>
+                                            <input id="workItemCollarItemList{{idx}}_2"  name="workItemCollarItemList[{{idx}}].itemName" type="text" value="{{row.itemName}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                        <td>
+                                            <input id="workItemCollarItemList{{idx}}_3"  name="workItemCollarItemList[{{idx}}].itemCatalogNumber" type="text" value="{{row.itemCatalogNumber}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarItemList{{idx}}_4"  name="workItemCollarItemList[{{idx}}].itemType" type="text" value="{{row.itemType}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarItemList{{idx}}_5"  name="workItemCollarItemList[{{idx}}].itemModel" type="text" value="{{row.itemModel}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workItemCollarItemList{{idx}}_6"  name="workItemCollarItemList[{{idx}}].itemPrimaryUnit" type="text" value="{{row.itemPrimaryUnit}}"   readonly="true"  class="form-control "/>
+                                        </td>
+
+                                        <td class="text-center op-td" >
+                                            {{#delBtn}}<span class="op-btn op-btn-delete" id="workItemCollarItemList{{idx}}_span" onclick="delRow(this, '#workItemCollarItemList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+                        var workItemCollarItemListRowIdx = 0, workItemCollarItemListTpl = $("#workItemCollarItemListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                        if($("#id").val()){
+                            workItemCollarItemListIdx = ${fn:length(workItemCollar.workItemCollarItemList)};
+                        }
+                        $(document).ready(function() {
+                        });
+					</script>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+
+</body>
+</html>

+ 15 - 0
src/main/webapp/webpage/modules/workitemcollar/workItemCollarTask.jsp

@@ -0,0 +1,15 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>流程追踪</title>
+	<meta name="decorator" content="default"/>
+</head>
+<body class="gray-bg">
+<div class="container form layui-form">
+	<act:flowChart procInsId="${processInstanceId}"/>
+	<act:histoicFlow procInsId="${processInstanceId}"/>
+</div>
+</body>
+</html>
+

+ 221 - 0
src/main/webapp/webpage/modules/workitemcollar/workItemCollarView.jsp

@@ -0,0 +1,221 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>报销单管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        var count = 0;
+        $(document).ready(function() {
+
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                rules:{
+                },
+                messages:{
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+           /* laydate.render({
+                elem: '#collarDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                format: 'yyyy-MM-dd',
+                type : 'date'
+            });*/
+
+
+        });
+	</script>
+	<style>
+		/*超过5个汉字,调整label的长度,以下是配套的*/
+		.layui-item .layui-form-label{
+			width:90px;
+		}
+		.form-group .layui-item .layui-input-block,
+		.query .layui-input-block {
+			margin-left: 116px;
+		}
+	</style>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<form:form id="inputForm" modelAttribute="workItemCollar" action="${ctx}/workitemcollar/workItemCollar/save" method="post" class="form-horizontal" >
+			<form:hidden path="id"/>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用人:</label>
+					<div class="layui-input-block">
+						<form:input id="leader" path="userName" readonly="true" htmlEscape="false" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<form:input path="number" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+							<span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty workItemCollar.state}">${fns:getDictLabel(workItemCollar.state, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用日期:</label>
+					<div class="layui-input-block">
+						<input id="collarDate" name="collarDate"  readonly="readonly" type="text"  maxlength="20" class="laydate-icondate form-control layer-date  layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workItemCollar.collarDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>领用部门:</label>
+					<div class="layui-input-block">
+						<form:input id="officeName" readonly="true" path="officeName" htmlEscape="false" class="form-control   layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">领用事由:</label>
+					<div class="layui-input-block">
+						<form:textarea path="collarFor" cssStyle="resize: none" readonly="true"  htmlEscape="false" rows="4"    maxlength="255" class="form-control "/>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>物品申请明细</h2></div>
+				<%--<div class="layui-item nav-btns">
+					<sys:gridselectCatalog url="${ctx}/workcatalogueitem/workCatalogueItem/selectCatalog" id="contentData" title="选择物品目录"
+										fieldLabels="" fieldKeys=""  searchLabel="" searchKey="name"></sys:gridselectCatalog>
+
+				</div>--%>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px">物品编号</th>
+							<th width="200px">物品名称</th>
+							<th width="150px">物品分类</th>
+							<th width="200px">规格型号</th>
+							<th width="200px">计量单位</th>
+							<th width="200px">是否固定资产</th>
+							<th width="200px">申请数量</th>
+							<th width="200px">发放数量</th>
+
+						</tr>
+						</thead>
+						<tbody id="workItemCollarCatalogList">
+						<c:if test="${not empty workItemCollar.workItemCollarCatalogList}">
+							<c:forEach items="${workItemCollar.workItemCollarCatalogList}" var="workItemCollarCatalog" varStatus="index">
+								<tr id="workItemCollarCatalogList${index.index}">
+									<td class="hide">
+										<input id="workItemCollarCatalogList${index.index}_id" name="workItemCollarCatalogList[${index.index}].id" type="hidden" value="${workItemCollarCatalog.id}"/>
+										<input id="workItemCollarCatalogList${index.index}_workCatalogueItemid" name="workItemCollarCatalogList[${index.index}].workCatalogueItem.id" type="hidden" value="${workItemCollarCatalog.workCatalogueItem.id}"/>
+										<input id="workItemCollarCatalogList${index.index}_delFlag" name="workItemCollarCatalogList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_1"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.number" type="text" value="${workItemCollarCatalog.workCatalogueItem.number}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_2"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.name" type="text" value="${workItemCollarCatalog.workCatalogueItem.name}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_3"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.type" type="text" value="${fns:getMainDictLabel(workItemCollarCatalog.workCatalogueItem.type, 'item_type', '')}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_4"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.model" type="text" value="${workItemCollarCatalog.workCatalogueItem.model}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_5"  readonly="true"   name="workItemCollarCatalogList[${index.index}].workCatalogueItem.primaryUnit" type="text" value="${fns:getMainDictLabel(workItemCollarCatalog.workCatalogueItem.primaryUnit, 'full_count_unit', '')}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_6" readonly="true"    name="workItemCollarCatalogList[${index.index}].workCatalogueItem.isAssets" type="text" value="${workItemCollarCatalog.workCatalogueItem.isAssets}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_7"    name="workItemCollarCatalogList[${index.index}].applyNum" type="text" value="${workItemCollarCatalog.applyNum}"  readonly="true"   class="form-control  number required"/>
+									</td>
+									<td>
+										<input id="workItemCollarCatalogList${index.index}_8"   name="workItemCollarCatalogList[${index.index}].grantNum" type="text" value="${workItemCollarCatalog.grantNum}" readonly="true"   class="form-control number"/>
+									</td>
+
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>固定资产明细</h2></div>
+				<%--<div class="layui-item nav-btns">
+					<sys:gridselectAssets url="${ctx}/workitem/workItem/selectItem" id="contentData1" title="选择物品一览"
+										   fieldLabels="" fieldKeys=""  searchLabel="" searchKey="name"></sys:gridselectAssets>
+
+				</div>--%>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable1" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px">固定资产编号</th>
+							<th width="200px">物品名称</th>
+							<th width="150px">物品编号</th>
+							<th width="150px">物品分类</th>
+							<th width="200px">规格型号</th>
+							<th width="200px">计量单位</th>
+						</tr>
+						</thead>
+						<tbody id="workItemCollarItemList">
+						<c:if test="${not empty workItemCollar.workItemCollarItemList}">
+							<c:forEach items="${workItemCollar.workItemCollarItemList}" var="workItemCollarItem" varStatus="index">
+								<tr id="workItemCollarItemList${index.index}">
+									<td class="hide">
+										<input id="workItemCollarItemList${index.index}_id" name="workItemCollarItemList[${index.index}].id" type="hidden" value="${workItemCollarItem.id}"/>
+										<input id="workItemCollarItemList${index.index}_workAssetsId" name="workItemCollarItemList[${index.index}].itemId" type="hidden" value="${workItemCollarItem.itemId}"/>
+										<input id="workItemCollarItemList${index.index}_delFlag" name="workItemCollarItemList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_1"  readonly="true"   name="workItemCollarItemList[${index.index}].itemNumber" type="text" value="${workItemCollarItem.itemNumber}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_2"  readonly="true"   name="workItemCollarItemList[${index.index}].itemName" type="text" value="${workItemCollarItem.itemName}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_3"  readonly="true"   name="workItemCollarItemList[${index.index}].itemCatalogNumber" type="text"  value="${workItemCollarItem.itemCatalogNumber}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_4"  readonly="true"   name="workItemCollarItemList[${index.index}].itemType" type="text"  value="${workItemCollarItem.itemType}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_5"  readonly="true"   name="workItemCollarItemList[${index.index}].itemModel" type="text" value="${workItemCollarItem.itemModel}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workItemCollarItemList${index.index}_6"  readonly="true"   name="workItemCollarItemList[${index.index}].itemPrimaryUnit" type="text"  value="${workItemCollarItem.itemPrimaryUnit}"  class="form-control "/>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+
+</body>
+</html>

+ 152 - 0
src/main/webapp/webpage/modules/workitempre/workItemPreForm.jsp

@@ -0,0 +1,152 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>项目预审管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+			
+					laydate({
+			            elem: '#applicationTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+			            event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+			        });
+					laydate({
+			            elem: '#auditTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+			            event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+			        });
+					laydate({
+			            elem: '#readinessTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+			            event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+			        });
+		});
+	</script>
+</head>
+<body class="hideScroll">
+		<form:form id="inputForm" modelAttribute="workItemPre" action="${ctx}/workitempre/workItemPre/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<sys:message content="${message}"/>	
+		<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+		   <tbody>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>项目名称:</label></td>
+					<td class="width-35">
+						<form:input path="name" htmlEscape="false"    class="form-control required"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">资格预审编号:</label></td>
+					<td class="width-35">
+						<form:input path="inquiryNum" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">项目类型:</label></td>
+					<td class="width-35">
+						<form:select path="itemType" class="form-control ">
+							<form:option value="" label=""/>
+							<form:options items="${fns:getDictList('item_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+						</form:select>
+					</td>
+					<td class="width-15 active"><label class="pull-right">项目来源:</label></td>
+					<td class="width-35">
+						<form:select path="itemSource" class="form-control ">
+							<form:option value="" label=""/>
+							<form:options items="${fns:getDictList('item_source')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+						</form:select>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>招标人:</label></td>
+					<td class="width-35">
+						<form:input path="tenderee" htmlEscape="false"    class="form-control required"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">联系人:</label></td>
+					<td class="width-35">
+						<form:input path="linkman" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>联系电话:</label></td>
+					<td class="width-35">
+						<form:input path="linkphone" htmlEscape="false"    class="form-control required"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">报名时间:</label></td>
+					<td class="width-35">
+						<input id="applicationTime" name="applicationTime" type="text" maxlength="20" class="laydate-icon form-control layer-date "
+							value="<fmt:formatDate value="${workItemPre.applicationTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">项目组成员id:</label></td>
+					<td class="width-35">
+						<sys:treeselect id="user" name="user.id" value="${workItemPre.user.id}" labelName="user.name" labelValue="${workItemPre.user.name}"
+							title="用户" url="/sys/office/treeData?type=3" cssClass="form-control " allowClear="true" notAllowSelectParent="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">资审时间:</label></td>
+					<td class="width-35">
+						<input id="auditTime" name="auditTime" type="text" maxlength="20" class="laydate-icon form-control layer-date "
+							value="<fmt:formatDate value="${workItemPre.auditTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">购买领用招标文件日期:</label></td>
+					<td class="width-35">
+						<input id="readinessTime" name="readinessTime" type="text" maxlength="20" class="laydate-icon form-control layer-date "
+							value="<fmt:formatDate value="${workItemPre.readinessTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">文件费用(元):</label></td>
+					<td class="width-35">
+						<form:input path="documentFee" htmlEscape="false"    class="form-control  number"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">装订文件费用(元):</label></td>
+					<td class="width-35">
+						<form:input path="bookFee" htmlEscape="false"    class="form-control  number"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">是否对外协作:</label></td>
+					<td class="width-35">
+						<form:select path="isCooperation" class="form-control ">
+							<form:option value="" label=""/>
+							<form:options items="${fns:getDictList('is_cooperation')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+						</form:select>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>项目情况:</label></td>
+					<td class="width-35">
+						<form:textarea path="itemStatus" htmlEscape="false" rows="4"    class="form-control required"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">备注:</label></td>
+					<td class="width-35">
+						<form:textarea path="remarks" htmlEscape="false" rows="4"    class="form-control "/>
+					</td>
+				</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 166 - 0
src/main/webapp/webpage/modules/workitempre/workItemPreList.jsp

@@ -0,0 +1,166 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>项目预审管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		$(document).ready(function() {
+	        laydate({
+	            elem: '#beginAuditTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+	            event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+	        });
+	        laydate({
+	            elem: '#endAuditTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+	            event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+	        });
+					
+		
+		});
+	</script>
+</head>
+<body class="gray-bg">
+	<div class="wrapper wrapper-content">
+	<div class="ibox">
+	<div class="ibox-title">
+		<h5>项目预审列表 </h5>
+		<div class="ibox-tools">
+			<a class="collapse-link">
+				<i class="fa fa-chevron-up"></i>
+			</a>
+			<a class="dropdown-toggle" data-toggle="dropdown" href="javascript:void(0)">
+				<i class="fa fa-wrench"></i>
+			</a>
+			<ul class="dropdown-menu dropdown-user">
+				<li><a href="javascript:void(0)">选项1</a>
+				</li>
+				<li><a href="javascript:void(0)">选项2</a>
+				</li>
+			</ul>
+			<a class="close-link">
+				<i class="fa fa-times"></i>
+			</a>
+		</div>
+	</div>
+    
+    <div class="ibox-content">
+	<sys:message content="${message}"/>
+	
+	<!--查询条件-->
+	<div class="row">
+	<div class="col-sm-12">
+	<form:form id="searchForm" modelAttribute="workItemPre" action="${ctx}/workitempre/workItemPre/" method="post" class="form-inline">
+		<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+		<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+		<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+		<div class="form-group">
+			<span>项目名称:</span>
+				<form:input path="name" htmlEscape="false" maxlength="255"  class=" form-control input-sm"/>
+			<span>项目类型:</span>
+				<form:select path="itemType"  class="form-control m-b">
+					<form:option value="" label=""/>
+					<form:options items="${fns:getDictList('item_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+				</form:select>
+			<span>招标人:</span>
+				<form:input path="tenderee" htmlEscape="false" maxlength="255"  class=" form-control input-sm"/>
+			<span>资审时间:</span>
+				<input id="beginAuditTime" name="beginAuditTime" type="text" maxlength="20" class="laydate-icon form-control layer-date input-sm"
+					value="<fmt:formatDate value="${workItemPre.beginAuditTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/> - 
+				<input id="endAuditTime" name="endAuditTime" type="text" maxlength="20" class="laydate-icon form-control layer-date input-sm"
+					value="<fmt:formatDate value="${workItemPre.endAuditTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+		 </div>	
+	</form:form>
+	<br/>
+	</div>
+	</div>
+	
+	<!-- 工具栏 -->
+	<div class="row">
+	<div class="col-sm-12">
+		<div class="pull-left">
+			<shiro:hasPermission name="workitempre:workItemPre:add">
+				<table:addRow url="${ctx}/workitempre/workItemPre/form" title="项目预审"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workitempre:workItemPre:edit">
+			    <table:editRow url="${ctx}/workitempre/workItemPre/form" title="项目预审" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workitempre:workItemPre:del">
+				<table:delRow url="${ctx}/workitempre/workItemPre/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workitempre:workItemPre:import">
+				<table:importExcel url="${ctx}/workitempre/workItemPre/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workitempre:workItemPre:export">
+	       		<table:exportExcel url="${ctx}/workitempre/workItemPre/export"></table:exportExcel><!-- 导出按钮 -->
+	       	</shiro:hasPermission>
+	       <button class="btn btn-white btn-sm " data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i> 刷新</button>
+		
+			</div>
+		<div class="pull-right">
+			<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="search()" ><i class="fa fa-search"></i> 查询</button>
+			<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="reset()" ><i class="fa fa-refresh"></i> 重置</button>
+		</div>
+	</div>
+	</div>
+	
+	<!-- 表格 -->
+	<table id="contentTable" class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+		<thead>
+			<tr>
+				<th> <input type="checkbox" class="i-checks"></th>
+				<th  class="sort-column name">项目名称</th>
+				<th  class="sort-column inquiryNum">资格预审编号</th>
+				<th  class="sort-column tenderee">招标人</th>
+				<th  class="sort-column linkman">联系人</th>
+				<th  class="sort-column auditTime">资审时间</th>
+				<th  class="sort-column isCooperation">是否对外协作</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="workItemPre">
+			<tr>
+				<td> <input type="checkbox" id="${workItemPre.id}" class="i-checks"></td>
+				<td><a  href="javascript:void(0)" onclick="openDialogView('查看项目预审', '${ctx}/workitempre/workItemPre/form?id=${workItemPre.id}','80%','80%')">
+					${workItemPre.name}
+				</a></td>
+				<td>
+					${workItemPre.inquiryNum}
+				</td>
+				<td>
+					${workItemPre.tenderee}
+				</td>
+				<td>
+					${workItemPre.linkman}
+				</td>
+				<td>
+					<fmt:formatDate value="${workItemPre.auditTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
+				</td>
+				<td>
+					${fns:getDictLabel(workItemPre.isCooperation, 'is_cooperation', '')}
+				</td>
+				<td>
+					<shiro:hasPermission name="workitempre:workItemPre:view">
+						<a href="javascript:void(0)" onclick="openDialogView('查看项目预审', '${ctx}/workitempre/workItemPre/form?id=${workItemPre.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="workitempre:workItemPre:edit">
+    					<a href="javascript:void(0)" onclick="openDialog('修改项目预审', '${ctx}/workitempre/workItemPre/form?id=${workItemPre.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="workitempre:workItemPre:del">
+						<a href="${ctx}/workitempre/workItemPre/delete?id=${workItemPre.id}" onclick="return confirmx('确认要删除该项目预审吗?', this.href)"   class="btn btn-danger btn-xs"><i class="fa fa-trash"></i> 删除</a>
+					</shiro:hasPermission>
+				</td>
+			</tr>
+		</c:forEach>
+		</tbody>
+	</table>
+	
+		<!-- 分页代码 -->
+	<table:page page="${page}"></table:page>
+	<br/>
+	<br/>
+	</div>
+	</div>
+</div>
+</body>
+</html>

+ 117 - 0
src/main/webapp/webpage/modules/workitemstock/workItemStockForm.jsp

@@ -0,0 +1,117 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>采购验收物品管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+			
+		});
+	</script>
+</head>
+<body class="hideScroll">
+		<form:form id="inputForm" modelAttribute="workItemStock" action="${ctx}/workitemstock/workItemStock/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<sys:message content="${message}"/>	
+		<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+		   <tbody>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">备注信息:</label></td>
+					<td class="width-35">
+						<form:textarea path="remarks" htmlEscape="false" rows="4"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">采购申请主键:</label></td>
+					<td class="width-35">
+						<form:input path="stockId" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">物品目录id:</label></td>
+					<td class="width-35">
+						<form:input path="catalogueItemId" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">数量:</label></td>
+					<td class="width-35">
+						<form:input path="count" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">单价:</label></td>
+					<td class="width-35">
+						<form:input path="price" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">合计:</label></td>
+					<td class="width-35">
+						<form:input path="totalPrice" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">采购合同:</label></td>
+					<td class="width-35">
+						<form:input path="contractId" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">供应商:</label></td>
+					<td class="width-35">
+						<form:input path="supplierName" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">是否固定资产:</label></td>
+					<td class="width-35">
+						<form:input path="isAssets" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">物品编号:</label></td>
+					<td class="width-35">
+						<form:input path="number" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">物品名称:</label></td>
+					<td class="width-35">
+						<form:input path="name" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">物品分类:</label></td>
+					<td class="width-35">
+						<form:input path="type" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">规格型号:</label></td>
+					<td class="width-35">
+						<form:input path="model" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">计量单位:</label></td>
+					<td class="width-35">
+						<form:input path="primaryUnit" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 174 - 0
src/main/webapp/webpage/modules/workitemstock/workItemStockList.jsp

@@ -0,0 +1,174 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>采购验收物品管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		$(document).ready(function() {
+		});
+	</script>
+</head>
+<body class="gray-bg">
+	<div class="wrapper wrapper-content">
+	<div class="ibox">
+	<div class="ibox-title">
+		<h5>采购验收物品列表 </h5>
+		<div class="ibox-tools">
+			<a class="collapse-link">
+				<i class="fa fa-chevron-up"></i>
+			</a>
+			<a class="dropdown-toggle" data-toggle="dropdown" href="#">
+				<i class="fa fa-wrench"></i>
+			</a>
+			<ul class="dropdown-menu dropdown-user">
+				<li><a href="#">选项1</a>
+				</li>
+				<li><a href="#">选项2</a>
+				</li>
+			</ul>
+			<a class="close-link">
+				<i class="fa fa-times"></i>
+			</a>
+		</div>
+	</div>
+    
+    <div class="ibox-content">
+	<sys:message content="${message}"/>
+	
+	<!--查询条件-->
+	<div class="row">
+	<div class="col-sm-12">
+	<form:form id="searchForm" modelAttribute="workItemStock" action="${ctx}/workitemstock/workItemStock/" method="post" class="form-inline">
+		<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+		<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+		<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+		<div class="form-group">
+		 </div>	
+	</form:form>
+	<br/>
+	</div>
+	</div>
+	
+	<!-- 工具栏 -->
+	<div class="row">
+	<div class="col-sm-12">
+		<div class="pull-left">
+			<shiro:hasPermission name="workitemstock:workItemStock:add">
+				<table:addRow url="${ctx}/workitemstock/workItemStock/form" title="采购验收物品"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workitemstock:workItemStock:edit">
+			    <table:editRow url="${ctx}/workitemstock/workItemStock/form" title="采购验收物品" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workitemstock:workItemStock:del">
+				<table:delRow url="${ctx}/workitemstock/workItemStock/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workitemstock:workItemStock:import">
+				<table:importExcel url="${ctx}/workitemstock/workItemStock/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workitemstock:workItemStock:export">
+	       		<table:exportExcel url="${ctx}/workitemstock/workItemStock/export"></table:exportExcel><!-- 导出按钮 -->
+	       	</shiro:hasPermission>
+	       <button class="btn btn-white btn-sm " data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i> 刷新</button>
+		
+			</div>
+		<div class="pull-right">
+			<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="search()" ><i class="fa fa-search"></i> 查询</button>
+			<button  class="btn btn-primary btn-rounded btn-outline btn-sm " onclick="reset()" ><i class="fa fa-refresh"></i> 重置</button>
+		</div>
+	</div>
+	</div>
+	
+	<!-- 表格 -->
+	<table id="contentTable" class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+		<thead>
+			<tr>
+				<th> <input type="checkbox" class="i-checks"></th>
+				<th  class="sort-column remarks">备注信息</th>
+				<th  class="sort-column stockId">采购申请主键</th>
+				<th  class="sort-column catalogueItemId">物品目录id</th>
+				<th  class="sort-column count">数量</th>
+				<th  class="sort-column price">单价</th>
+				<th  class="sort-column totalPrice">合计</th>
+				<th  class="sort-column contractId">采购合同</th>
+				<th  class="sort-column supplierName">供应商</th>
+				<th  class="sort-column isAssets">是否固定资产</th>
+				<th  class="sort-column number">物品编号</th>
+				<th  class="sort-column name">物品名称</th>
+				<th  class="sort-column type">物品分类</th>
+				<th  class="sort-column model">规格型号</th>
+				<th  class="sort-column primaryUnit">计量单位</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="workItemStock">
+			<tr>
+				<td> <input type="checkbox" id="${workItemStock.id}" class="i-checks"></td>
+				<td><a  href="#" onclick="openDialogView('查看采购验收物品', '${ctx}/workitemstock/workItemStock/form?id=${workItemStock.id}','800px', '500px')">
+					${workItemStock.remarks}
+				</a></td>
+				<td>
+					${workItemStock.stockId}
+				</td>
+				<td>
+					${workItemStock.catalogueItemId}
+				</td>
+				<td>
+					${workItemStock.count}
+				</td>
+				<td>
+					${workItemStock.price}
+				</td>
+				<td>
+					${workItemStock.totalPrice}
+				</td>
+				<td>
+					${workItemStock.contractId}
+				</td>
+				<td>
+					${workItemStock.supplierName}
+				</td>
+				<td>
+					${workItemStock.isAssets}
+				</td>
+				<td>
+					${workItemStock.number}
+				</td>
+				<td>
+					${workItemStock.name}
+				</td>
+				<td>
+					${workItemStock.type}
+				</td>
+				<td>
+					${workItemStock.model}
+				</td>
+				<td>
+					${workItemStock.primaryUnit}
+				</td>
+				<td>
+					<shiro:hasPermission name="workitemstock:workItemStock:view">
+						<a href="#" onclick="openDialogView('查看采购验收物品', '${ctx}/workitemstock/workItemStock/form?id=${workItemStock.id}','800px', '500px')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="workitemstock:workItemStock:edit">
+    					<a href="#" onclick="openDialog('修改采购验收物品', '${ctx}/workitemstock/workItemStock/form?id=${workItemStock.id}','800px', '500px')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="workitemstock:workItemStock:del">
+						<a href="${ctx}/workitemstock/workItemStock/delete?id=${workItemStock.id}" onclick="return confirmx('确认要删除该采购验收物品吗?', this.href)"   class="btn btn-danger btn-xs"><i class="fa fa-trash"></i> 删除</a>
+					</shiro:hasPermission>
+				</td>
+			</tr>
+		</c:forEach>
+		</tbody>
+	</table>
+	
+		<!-- 分页代码 -->
+	<table:page page="${page}"></table:page>
+	<br/>
+	<br/>
+	</div>
+	</div>
+</div>
+</body>
+</html>