Enford 5 lat temu
rodzic
commit
5520a5d96d
100 zmienionych plików z 19411 dodań i 0 usunięć
  1. 58 0
      src/main/webapp/webpage/modules/oa/audits-evectionForm.jsp
  2. 57 0
      src/main/webapp/webpage/modules/oa/audits-goOutForm.jsp
  3. 47 0
      src/main/webapp/webpage/modules/oa/audits-leaveForm.jsp
  4. 56 0
      src/main/webapp/webpage/modules/oa/audits-workOvertimeForm.jsp
  5. 118 0
      src/main/webapp/webpage/modules/oa/audits-workSealForm.jsp
  6. 173 0
      src/main/webapp/webpage/modules/oa/leaveAudit.jsp
  7. 301 0
      src/main/webapp/webpage/modules/oa/leaveForm.jsp
  8. 108 0
      src/main/webapp/webpage/modules/oa/leaveHistoricList.jsp
  9. 220 0
      src/main/webapp/webpage/modules/oa/leaveList.jsp
  10. 181 0
      src/main/webapp/webpage/modules/oa/leaveTodoList.jsp
  11. 115 0
      src/main/webapp/webpage/modules/oa/leaveView.jsp
  12. 118 0
      src/main/webapp/webpage/modules/oa/manageCalendar.jsp
  13. 511 0
      src/main/webapp/webpage/modules/oa/manageCalendarDetails.jsp
  14. 573 0
      src/main/webapp/webpage/modules/oa/manageCalendarDetailsAll.jsp
  15. 442 0
      src/main/webapp/webpage/modules/oa/manageCalendarDetailsSelf.jsp
  16. 146 0
      src/main/webapp/webpage/modules/oa/oaAttendanceForm.jsp
  17. 195 0
      src/main/webapp/webpage/modules/oa/oaAttendanceList.jsp
  18. 128 0
      src/main/webapp/webpage/modules/oa/oaAttendanceRuleForm.jsp
  19. 164 0
      src/main/webapp/webpage/modules/oa/oaAttendanceRuleList.jsp
  20. 390 0
      src/main/webapp/webpage/modules/oa/oaNotifyAudit.jsp
  21. 399 0
      src/main/webapp/webpage/modules/oa/oaNotifyForm.jsp
  22. 393 0
      src/main/webapp/webpage/modules/oa/oaNotifyList.jsp
  23. 213 0
      src/main/webapp/webpage/modules/oa/oaNotifyListMyself.jsp
  24. 400 0
      src/main/webapp/webpage/modules/oa/oaNotifyModifyApply.jsp
  25. 335 0
      src/main/webapp/webpage/modules/oa/oaNotifyView.jsp
  26. 82 0
      src/main/webapp/webpage/modules/oa/reportCalendarDetails.jsp
  27. 152 0
      src/main/webapp/webpage/modules/oa/testAuditAudit.jsp
  28. 152 0
      src/main/webapp/webpage/modules/oa/testAuditForm.jsp
  29. 101 0
      src/main/webapp/webpage/modules/oa/testAuditList.jsp
  30. 128 0
      src/main/webapp/webpage/modules/oa/testAuditView.jsp
  31. 172 0
      src/main/webapp/webpage/modules/oa_evection/oaEvectionAudit.jsp
  32. 266 0
      src/main/webapp/webpage/modules/oa_evection/oaEvectionForm.jsp
  33. 111 0
      src/main/webapp/webpage/modules/oa_evection/oaEvectionHistoricList.jsp
  34. 227 0
      src/main/webapp/webpage/modules/oa_evection/oaEvectionList.jsp
  35. 182 0
      src/main/webapp/webpage/modules/oa_evection/oaEvectionTodoList.jsp
  36. 180 0
      src/main/webapp/webpage/modules/oaall/oaAllAudit.jsp
  37. 186 0
      src/main/webapp/webpage/modules/oaall/oaAllForm.jsp
  38. 103 0
      src/main/webapp/webpage/modules/oaall/oaAllHistoricList.jsp
  39. 153 0
      src/main/webapp/webpage/modules/oaall/oaAllList.jsp
  40. 173 0
      src/main/webapp/webpage/modules/oaall/oaAllTodoList.jsp
  41. 15 0
      src/main/webapp/webpage/modules/oaall/oaAllTrack.jsp
  42. 158 0
      src/main/webapp/webpage/modules/oaall/oaAllView.jsp
  43. 220 0
      src/main/webapp/webpage/modules/oabuy/oaBuyAudit.jsp
  44. 385 0
      src/main/webapp/webpage/modules/oabuy/oaBuyForm.jsp
  45. 106 0
      src/main/webapp/webpage/modules/oabuy/oaBuyForms.jsp
  46. 103 0
      src/main/webapp/webpage/modules/oabuy/oaBuyHistoricList.jsp
  47. 153 0
      src/main/webapp/webpage/modules/oabuy/oaBuyList.jsp
  48. 172 0
      src/main/webapp/webpage/modules/oabuy/oaBuyTodoList.jsp
  49. 15 0
      src/main/webapp/webpage/modules/oabuy/oaBuyTrack.jsp
  50. 219 0
      src/main/webapp/webpage/modules/oabuy/oaBuyView.jsp
  51. 153 0
      src/main/webapp/webpage/modules/oaperformance/oaPerformanceAudit.jsp
  52. 178 0
      src/main/webapp/webpage/modules/oaperformance/oaPerformanceForm.jsp
  53. 85 0
      src/main/webapp/webpage/modules/oaperformance/oaPerformanceForms.jsp
  54. 103 0
      src/main/webapp/webpage/modules/oaperformance/oaPerformanceHistoricList.jsp
  55. 179 0
      src/main/webapp/webpage/modules/oaperformance/oaPerformanceList.jsp
  56. 174 0
      src/main/webapp/webpage/modules/oaperformance/oaPerformanceTodoList.jsp
  57. 15 0
      src/main/webapp/webpage/modules/oaperformance/oaPerformanceTrack.jsp
  58. 134 0
      src/main/webapp/webpage/modules/oaperformance/oaPerformanceView.jsp
  59. 285 0
      src/main/webapp/webpage/modules/officehonor/officehonorForm.jsp
  60. 256 0
      src/main/webapp/webpage/modules/officehonor/officehonorList.jsp
  61. 269 0
      src/main/webapp/webpage/modules/officehonor/officehonorView.jsp
  62. 254 0
      src/main/webapp/webpage/modules/officeintroduce/officeintroduceForm.jsp
  63. 252 0
      src/main/webapp/webpage/modules/officeintroduce/officeintroduceList.jsp
  64. 250 0
      src/main/webapp/webpage/modules/officeintroduce/officeintroduceView.jsp
  65. 280 0
      src/main/webapp/webpage/modules/officelicense/officeLicenseForm.jsp
  66. 252 0
      src/main/webapp/webpage/modules/officelicense/officeLicenseList.jsp
  67. 241 0
      src/main/webapp/webpage/modules/officelicense/officeLicenseView.jsp
  68. 310 0
      src/main/webapp/webpage/modules/officequalify/officequalifyForm.jsp
  69. 256 0
      src/main/webapp/webpage/modules/officequalify/officequalifyList.jsp
  70. 301 0
      src/main/webapp/webpage/modules/officequalify/officequalifyView.jsp
  71. 70 0
      src/main/webapp/webpage/modules/project/archivedirectoryForm.jsp
  72. 67 0
      src/main/webapp/webpage/modules/project/archivedirectoryForms.jsp
  73. 134 0
      src/main/webapp/webpage/modules/project/archivedirectoryList.jsp
  74. 211 0
      src/main/webapp/webpage/modules/project/bidInformationForm.jsp
  75. 200 0
      src/main/webapp/webpage/modules/project/bidInformationForms.jsp
  76. 166 0
      src/main/webapp/webpage/modules/project/bidInformationList.jsp
  77. 93 0
      src/main/webapp/webpage/modules/project/projectDepositAudit.jsp
  78. 89 0
      src/main/webapp/webpage/modules/project/projectDepositManagementForm.jsp
  79. 196 0
      src/main/webapp/webpage/modules/project/projectDepositManagementList.jsp
  80. 149 0
      src/main/webapp/webpage/modules/project/projectDepositReturnList.jsp
  81. 97 0
      src/main/webapp/webpage/modules/project/projectEvaluationRecordForm.jsp
  82. 158 0
      src/main/webapp/webpage/modules/project/projectEvaluationRecordList.jsp
  83. 94 0
      src/main/webapp/webpage/modules/project/projectForm.jsp
  84. 158 0
      src/main/webapp/webpage/modules/project/projectList.jsp
  85. 110 0
      src/main/webapp/webpage/modules/project/projectgeneralForm.jsp
  86. 166 0
      src/main/webapp/webpage/modules/project/projectgeneralList.jsp
  87. 75 0
      src/main/webapp/webpage/modules/project/workprojectgroupForm.jsp
  88. 138 0
      src/main/webapp/webpage/modules/project/workprojectgroupList.jsp
  89. 218 0
      src/main/webapp/webpage/modules/projectcontentinfo/basedDataForm.jsp
  90. 280 0
      src/main/webapp/webpage/modules/projectcontentinfo/basedDataList.jsp
  91. 149 0
      src/main/webapp/webpage/modules/projectcontentinfo/basedDataView.jsp
  92. 314 0
      src/main/webapp/webpage/modules/projectcontentinfo/projectReportDataList.jsp
  93. 247 0
      src/main/webapp/webpage/modules/projectcontentinfo/projectReportRecordAudit.jsp
  94. 292 0
      src/main/webapp/webpage/modules/projectcontentinfo/projectReportRecordForm.jsp
  95. 331 0
      src/main/webapp/webpage/modules/projectcontentinfo/projectReportRecordList.jsp
  96. 285 0
      src/main/webapp/webpage/modules/projectcontentinfo/projectReportRecordModifyApply.jsp
  97. 183 0
      src/main/webapp/webpage/modules/projectcontentinfo/projectReportRecordView.jsp
  98. 517 0
      src/main/webapp/webpage/modules/projectcontentinfo/projectcontentinfoForm.jsp
  99. 242 0
      src/main/webapp/webpage/modules/projectcontentinfo/projectcontentinfoIndex.jsp
  100. 0 0
      src/main/webapp/webpage/modules/projectcontentinfo/projectcontentinfoList.jsp

+ 58 - 0
src/main/webapp/webpage/modules/oa/audits-evectionForm.jsp

@@ -0,0 +1,58 @@
+<%@ 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 () {
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',"disabled");
+        })
+    </script>
+</head>
+<body>
+<div class="ibox-content">
+<form:form id="inputForm" modelAttribute="oaEvection" action="" method="post" class="form-horizontal">
+    <form:hidden path="id"/>
+    <c:set var="id" value="${oaEvection.id}" />
+    <c:set var="ids" value="${oaEvection.ids}" />
+
+    <sys:message content="${message}"/>
+    <div class="control-group">
+    <label class="control-label">开始时间:</label>
+    <div class="controls">
+        ${oaEvection.startTime}
+    </div>
+    </div>
+    <div class="control-group">
+    <label class="control-label">结束时间:</label>
+    <div class="controls">
+        ${oaEvection.endTime}
+    </div>
+    </div>
+    <div class="control-group">
+    <label class="control-label">出差天数:</label>
+    <div class="controls">
+         ${oaEvection.dateCount}
+    <span class="help-inline"></span>
+    </div>
+    </div>
+    <div class="control-group">
+    <label class="control-label">出差地点:</label>
+    <div class="controls">
+         ${oaEvection.address}
+    <span class="help-inline"></span>
+    </div>
+    </div>
+    <div class="control-group">
+    <label class="control-label">出差事由:</label>
+    <div class="controls">
+            ${oaEvection.reason}
+    <span class="help-inline"></span>
+    </div>
+    </div>
+    </form:form>
+</div>
+</body>
+</html>

+ 57 - 0
src/main/webapp/webpage/modules/oa/audits-goOutForm.jsp

@@ -0,0 +1,57 @@
+<%@ 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 () {
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',"disabled");
+        })
+    </script>
+</head>
+<body>
+<div class="ibox-content">
+<form:form id="inputForm" modelAttribute="goOut" action="" method="post" class="form-horizontal">
+    <form:hidden path="id"/>
+    <c:set var="id" value="${goOut.id}" />
+    <c:set var="ids" value="${goOut.ids}" />
+    <sys:message content="${message}"/>
+    <div class="control-group">
+    <label class="control-label">开始时间:</label>
+    <div class="controls">
+        ${goOut.startTime}
+    </div>
+    </div>
+    <div class="control-group">
+    <label class="control-label">结束时间:</label>
+    <div class="controls">
+       ${goOut.endTime}
+    </div>
+    </div>
+    <div class="control-group">
+    <label class="control-label">外出天数:</label>
+    <div class="controls">
+        ${goOut.gooutDay}
+    <span class="help-inline"></span>
+    </div>
+    </div>
+    <div class="control-group">
+    <label class="control-label">外出时长:</label>
+    <div class="controls">
+        ${goOut.gooutTime}
+    <span class="help-inline"></span>
+    </div>
+    </div>
+    <div class="control-group">
+    <label class="control-label">外出事由:</label>
+    <div class="controls">
+            ${goOut.gooutReason}
+    <span class="help-inline"></span>
+    </div>
+    </div>
+    </form:form>
+</div>
+</body>
+</html>

+ 47 - 0
src/main/webapp/webpage/modules/oa/audits-leaveForm.jsp

@@ -0,0 +1,47 @@
+<%@ 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 () {
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',"disabled");
+        })
+    </script>
+</head>
+<body>
+<div class="ibox-content">
+    <form:form id="inputForm" modelAttribute="leave" action="" method="post" class="form-horizontal">
+        <fieldset>
+            <legend>${leave.act.taskName}</legend>
+            <div class="control-group">
+                <label class="control-label">请假类型:</label>
+                <div class="controls">
+                        ${fns:getDictLabel(leave.leaveType, 'oa_leave_type', '')}
+                </div>
+            </div>
+            <div class="control-group">
+                <label class="control-label">开始时间:</label>
+                <div class="controls">
+                        ${leave.startTime}
+                </div>
+            </div>
+            <div class="control-group">
+                <label class="control-label">结束时间:</label>
+                <div class="controls">
+                   ${leave.endTime}
+                </div>
+            </div>
+            <div class="control-group">
+                <label class="control-label">请假原因:</label>
+                <div class="controls">
+                        ${leave.reason}
+                </div>
+            </div>
+        </fieldset>
+    </form:form>
+</div>
+</body>
+</html>

+ 56 - 0
src/main/webapp/webpage/modules/oa/audits-workOvertimeForm.jsp

@@ -0,0 +1,56 @@
+<%@ 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 () {
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',"disabled");
+        })
+    </script>
+</head>
+<body>
+<div class="ibox-content">
+<form:form id="inputForm" modelAttribute="workOvertimeForm" action="" method="post" class="form-horizontal">
+    <form:hidden path="id"/>
+    <c:set var="id" value="${workOvertimeForm.id}" />
+    <c:set var="ids" value="${workOvertimeForm.ids}" />
+    <sys:message content="${message}"/>
+    <div class="control-group">
+    <label class="control-label">开始时间:</label>
+    <div class="controls">
+            ${workOvertimeForm.startTime}
+    </div>
+    </div>
+    <div class="control-group">
+    <label class="control-label">结束时间:</label>
+    <div class="controls">
+            ${workOvertimeForm.endTime}
+    </div>
+    </div>
+    <div class="control-group">
+    <label class="control-label">加班时长:</label>
+    <div class="controls">
+            ${workOvertimeForm.longTime}
+    <span class="help-inline"></span>
+    </div>
+    </div>
+    <div class="control-group">
+    <label class="control-label">加班事由:</label>
+    <div class="controls">
+            ${workOvertimeForm.reason}
+    <span class="help-inline"></span>
+    </div>
+    </div>
+    <div class="control-group">
+    <label class="control-label">是否节假日:</label>
+    <div class="controls">
+            ${fns:getDictLabel(workOvertimeForm.isHolidays, 'is_holidays', '')}
+    </div>
+    </div>
+    </form:form>
+</div>
+</body>
+</html>

+ 118 - 0
src/main/webapp/webpage/modules/oa/audits-workSealForm.jsp

@@ -0,0 +1,118 @@
+<%@ 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 () {
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',"disabled");
+        })
+    </script>
+</head>
+<body>
+<div class="ibox-content">
+<form:form id="inputForm" modelAttribute="workSealForm" action="" method="post" class="form-horizontal">
+    <form:hidden path="id"/>
+    <c:set var="id" value="${workSealForm.id}" />
+    <c:set var="ids" value="${workSealForm.ids}" />
+    <sys:message content="${message}"/>
+    <div class="control-group">
+        <label class="control-label">用印文件名称:</label>
+        <div class="controls">
+            ${workSealForm.documentName}
+        <span class="help-inline"></span>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label">文件个数:</label>
+        <div class="controls">
+            ${workSealForm.documentCount}
+        <span class="help-inline"></span>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label">申请时间:</label>
+        <div class="controls">
+                ${workSealForm.applicationDate}
+        <span class="help-inline"></span>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label">印章类型:</label>
+        <div class="controls">
+                ${fns:getMainDictLabel(workSealForm.sealType, 'seal_type', '')}
+        <span class="help-inline"></span>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label">经办人:</label>
+        <div class="controls">
+                ${workSealForm.user.name}
+        <span class="help-inline"></span>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label">用印部门:</label>
+        <div class="controls">
+            ${workSealForm.office.name}
+            <span class="help-inline"></span>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label">用印原因:</label>
+        <div class="controls">
+             ${workSealForm.reason}
+             <span class="help-inline"></span>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label">附件信息:</label>
+        <div id="fileid" class="controls">
+            <table id="workReportList"  style="text-align: center;width: 100%;margin-top:10px;"  class="table table-striped table-bordered table-condensed" >
+                <thead>
+                <tr>
+                    <%--<td>序号</td>--%><td>文件名</td><td>上传人</td><td>上传时间</td><td>操作</td>
+                </tr>
+                </thead>
+                <tbody id="file_attachment_report">
+                <c:forEach items="${workSealForm.workAttachments}" var="attachment" varStatus="status">
+                    <tr>
+                       <%-- <td>${status.index + 1}</td>--%>
+                        <c:choose>
+                            <c:when test="${fn:containsIgnoreCase(attachment.attachmentName,'jpg')
+                                                               or fn:containsIgnoreCase(attachment.attachmentName,'png')
+                                                               or fn:containsIgnoreCase(attachment.attachmentName,'gif')
+                                                               or fn:containsIgnoreCase(attachment.attachmentName,'bmp')
+                                                               or fn:containsIgnoreCase(attachment.attachmentName,'jpeg')}">
+                                <td><img src="${attachment.url}" width="50" height="50" alt="${fns:abbr(attachment.attachmentName,30)}"/></td>
+                            </c:when>
+                            <c:otherwise>
+                                <c:choose>
+                                    <c:when test="${fn:containsIgnoreCase(attachment.attachmentName,'pdf')}">
+                                        <td><a href="javascript:void(0)" onclick="preview('预览','${attachment.url}','80%','80%','1')"><span title="${attachment.attachmentName}">${fns:abbr(attachment.attachmentName,30)}</span></a></td>
+                                    </c:when>
+                                    <c:otherwise>
+                                        <td><a href="javascript:void(0)" onclick="preview('预览','${attachment.url}','80%','80%')"><span title="${attachment.attachmentName}">${fns:abbr(attachment.attachmentName,30)}</span></a></td>
+                                    </c:otherwise>
+                                </c:choose>
+                            </c:otherwise>
+                        </c:choose>
+                        <td>${attachment.attachmentUser}</td>
+                        <td><fmt:formatDate value="${attachment.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+                        <td>
+                            <a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${attachment.url}');" class="btn btn-success btn-xs">下载</a>
+                            <%--<a href="${ctx}/workfullmanage/workFullManage/downLoadAttach?file=${attachment.url}" class="btn btn-success btn-xs">下载</a>
+                           --%>
+                            <a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/workengineeringproject/workEngineeringProject/deleteFileFromAliyun?attachmentId=${attachment.id}&id=${workEngineeringProject.id}&type=2')" class="btn btn-danger btn-xs" >删除</a>
+                        </td>
+                    </tr>
+                </c:forEach>
+                </tbody>
+            </table>
+    </div>
+    </form:form>
+</div>
+</body>
+</html>

+ 173 - 0
src/main/webapp/webpage/modules/oa/leaveAudit.jsp

@@ -0,0 +1,173 @@
+<%@ 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);
+					}
+				}
+			});
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',<%=request.getAttribute("disabled")%>);
+            if (${requestScope.disabled eq 'false'}) {
+                $("#leaveType").attr('disabled',true);
+                $("#startTime").attr('disabled',true);
+                $("#endTime").attr('disabled',true);
+                $("#reason").attr('disabled',true);
+			}
+		});
+	</script>
+</head>
+<body class="gray-bg">
+	<div class="wrapper wrapper-content">
+	<div class="ibox">
+	<div class="ibox-title">
+		<h5>审批详情</h5>
+	</div>
+	<div class="ibox-content">
+	<form:form id="inputForm" modelAttribute="leave" action="${ctx}/oa/leave/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="${leave.act.status}" />
+		<div class="control-group">
+			<label class="control-label">请假类型:</label>
+			<div class="controls" style="margin-top: 8px;">
+				<c:choose>
+					<c:when test="${!disabled}">
+						<input id="leaveType" name="leaveType" type="text" disabled="true" class="form-control required" value="${fns:getDictLabel(leave.leaveType, 'oa_leave_type', '')}"/>
+					</c:when>
+					<c:otherwise>
+						${fns:getDictLabel(leave.leaveType, 'oa_leave_type', '')}
+					</c:otherwise>
+				</c:choose>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">开始时间:</label>
+			<div class="controls" style="margin-top: 8px;">
+				<c:choose>
+					<c:when test="${!disabled}">
+						<input id="startTime" name="startTime" type="text" disabled="true" maxlength="20" class="laydate-icon form-control layer-date required"
+							   value="${leave.startTime}"/></c:when>
+					<c:otherwise>
+						${leave.startTime}
+					</c:otherwise>
+				</c:choose>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">结束时间:</label>
+			<div class="controls" style="margin-top: 8px;">
+				<c:choose>
+					<c:when test="${!disabled}">
+						<input id="endTime" name="endTime" type="text" disabled="true" maxlength="20" class="laydate-icon form-control layer-date required"
+							   value="${leave.endTime}"/></c:when>
+					<c:otherwise>
+						${leave.endTime}
+					</c:otherwise>
+				</c:choose>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">请假原因:</label>
+			<div class="controls" style="margin-top: 8px;">
+				<c:choose>
+					<c:when test="${!disabled}">
+						<form:textarea id="reason" path="reason" class="form-control required" rows="5" maxlength="20"/>
+					</c:when>
+					<c:otherwise>
+						${leave.reason}
+					</c:otherwise>
+				</c:choose>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">图片:</label>
+			<div class="controls">
+				<table style="text-align: center;width: 100%;margin-top:10px;" class="table table-striped table-bordered table-condensed" >
+					<tr>
+						<%--<td>序号</td>--%><td>文件名</td><td>上传人</td><td>上传时间</td><td>操作</td>
+					</tr>
+					<c:if test="${not empty leave.workattachmentList}">
+						<c:forEach items="${leave.workattachmentList}" var="attachment" varStatus="varStatus">
+							<tr>
+								<%--<td>${varStatus.index+1}</td>--%>
+								<c:if test="${fn:containsIgnoreCase(attachment.attachmentName,'jpg')
+												   or fn:containsIgnoreCase(attachment.attachmentName,'png')
+												   or fn:containsIgnoreCase(attachment.attachmentName,'gif')
+												   or fn:containsIgnoreCase(attachment.attachmentName,'jpeg')}">
+									<td><img src="${attachment.url}" onclick="openDialogView(' ','${ctx}/sys/picturepreview/picturePreview?url=${attachment.url}','860px','600px')" width="50" height="50" alt="${attachment.attachmentName}"/></td>
+								</c:if>
+								<td>${fns:getUserById(attachment.attachmentUser).name}</td>
+								<td><fmt:formatDate value="${attachment.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+									<td>
+										<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${attachment.url}');" class="btn btn-success btn-xs">下载</a>
+
+										<%--<a href="${ctx}/workfullmanage/workFullManage/downLoadAttach?file=${attachment.url}" class="btn btn-success btn-xs">下载</a>
+									--%></td>
+							</tr>
+						</c:forEach>
+					</c:if>
+				</table>
+			</div>
+		</div>
+		<c:if test="${not empty status}">
+			<div class="control-group" id="comment">
+				<label class="control-label">审批意见:</label>
+				<div class="controls">
+					<form:textarea path="act.comment" class="form-control" rows="5" maxlength="127"/>
+				</div>
+			</div>
+			<%--<div class="form-actions">
+					<c:if test="${leave.act.taskDefKey eq 'audit1'}">
+						<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>--%>
+		</c:if>
+		<act:flowChart procInsId="${leave.act.procInsId}"/>
+		<act:histoicFlow procInsId="${leave.act.procInsId}"/>
+	</form:form>
+</div>
+	</div>
+	</div>
+</body>
+</html>
+

+ 301 - 0
src/main/webapp/webpage/modules/oa/leaveForm.jsp

@@ -0,0 +1,301 @@
+<%@ 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 type="text/css">
+		img{width: 50px;height: 50px;}
+	</style>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+        function btnAdd(obj) {
+            if (obj == "btna") {
+                $("#adda").hide();
+                $("#addidb").show();
+                $("#addb").show();
+            }else if (obj == "btnb") {
+                $("#addb").hide();
+                $("#addidc").show();
+                $("#addc").show();
+            }else if (obj == "btnc") {
+                $("#addc").hide();
+                $("#addidd").show();
+                $("#addd").show();
+            }else if (obj == "btnd") {
+                $("#addd").hide();
+                $("#addide").show();
+            }else {
+                $("#messageBox").text("输入有误,请先更正。");
+			}
+        }
+		$(document).ready(function() {
+
+			$("#name").focus();
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+                    var len = $("#showPeo span").length;
+                    if(len<=0){
+                        parent.layer.msg("请选择审批人!",{icon:5});
+                        return false;
+                    }
+					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);
+					}
+				}
+			});
+
+
+            //只做查看时,禁用掉以下标签
+            if('${sessionScope.state}' =='disabled'){
+                $('input,textarea,select').attr('disabled','<%=session.getAttribute("state")%>');
+			}else if('${sessionScope.state}' !='disabled'){
+                $('input,textarea,select').removeAttr('disabled');
+			}
+		});
+		function selectPeople(objId,objName){
+            var showPeo = $("#showPeo").html();
+            var len = $("#showPeo span").length;
+            if(len > 4){
+                parent.layer.msg("最多添加5个审批人",{icon:5})
+				return;
+			}
+            var arr = [];
+            var a = $("#showPeo span").each(function(){
+                var dataId = $(this).attr("data-id");
+                arr.push(dataId)
+			})
+			if(arr.indexOf(objId) != -1){
+				parent.layer.msg("该审批人已被选择,不能重复选择!!!",{icon:5})
+				return ;
+			}
+            showPeo = showPeo + '<span class="badge badge-success fontSpan" data-id="'+objId+'">'+objName+'&nbsp;&nbsp;&nbsp;' +
+						'<i onclick=deletePeo(this) class="fa fa-close"></i><input type="hidden" name=adds['+len+'] value="'+objId+'"></span>';
+            $("#showPeo").html(showPeo)
+		}
+		//删除选择的人员
+		function deletePeo(obj){
+			$(obj).parent().remove()
+		}
+	</script>
+	<style>
+		.fontSpan{
+			font-size: 13px;
+		}
+	</style>
+	<script type="text/javascript">
+        //上传图片
+        function this_upload_image_button(index){
+            var length = $("#this_upload_image_div :file").length;
+            var this_item_id = 'this_upload_image_'+index;
+            var last_item_id = $('img[id^=this_upload_image_]:last').attr('id');
+            if(length==6 && this_item_id==last_item_id){
+                top.layer.alert('最多上传5张图片',{icon:0,title:'系统提示'});
+                return;
+            }
+            $("#this_upload_file_"+index).click();
+        }
+        function this_upload_show_image(index){
+            var obj =$("#this_upload_file_"+index)[0].files[0];
+            var fileType = obj.type;
+            var url ;
+            if(fileType.endsWith("png")||fileType.endsWith("bmp")||fileType.endsWith("jpg")||fileType.endsWith("jpeg")){
+                url = window.URL.createObjectURL(obj);
+            }else {
+                //需要置空
+                var file = $("#this_upload_file_"+index);
+                file.after(file.clone().val(""));
+                file.remove();
+                top.layer.alert('请上传*.png,*.bmp,*.jpg/jpeg格式的图片',{icon:0,title:'系统提示'});
+                return false ;
+            }
+            $("#this_upload_image_"+index).attr("src",url);
+            var length = $("#this_upload_image_div :file").length;
+            var this_item_id = 'this_upload_image_'+index;
+            var last_item_id = $('img[id^=this_upload_image_]:last').attr('id');
+            if( this_item_id==last_item_id &&  length < 6 ){
+                this_upload_image_append(index);
+                this_add_x(index);
+            }
+        }
+        function this_upload_image_append(index){
+            var div1 = "<div id='this_upload_div_"+(index+1)+"' style='float:left;position:relative;width: 57px;height: 57px;'>";
+            var img = '<img  id="this_upload_image_'+(index+1)+'" class="upload_ico" width="50px" height="50px"  onclick="this_upload_image_button('+(index+1)+')" src = "${pageContext.request.contextPath}/static/uploadify/upload_ico.png" style="cursor:pointer;"/>';
+            var input = '<input id="this_upload_file_'+(index+1)+'" type="file" style="display:none;" name="this_upload_files" onChange="this_upload_show_image('+(index+1)+')" /><br>';
+            var div2 = "</div>";
+
+            $("#this_upload_image_div").append(div1+img+input+div2);
+        }
+        function this_close_img(index) {
+            $("#this_upload_div_"+index).remove();
+            var length = $("#this_upload_image_div :file").length;
+            if(length == 0){
+                this_add_div();
+            }else if(length == 1){
+                var x = $("#this_upload_image_div").find("span").text();
+                if("x" != x){
+                    this_add_div();
+                }
+            }
+        }
+        function this_add_x(index) {
+            var span = '<span id="this_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="this_close_img('+index+');">x</span>';
+            $("#this_upload_image_div").find("img:eq(-2)").before(span);
+        }
+        function this_add_div() {
+            var this_upload_div_1 =
+                '<div id="this_upload_div_1" style="float: left;position:relative;width: 57px;height: 57px;" >'+
+                '<img  id="this_upload_image_1" class="upload_ico" style="cursor:pointer;"  src="${pageContext.request.contextPath}/static/uploadify/upload_ico.png"  onclick="this_upload_image_button(1)"/>'+
+                '<input id="this_upload_file_1" type="file" style="display:none"  name="this_upload_files"  onchange="this_upload_show_image(1)" /><br>'+
+                '</div>';
+            $("#this_upload_image_div").html("").append(this_upload_div_1);
+        }
+
+
+	</script>
+</head>
+<body class="gray-bg">
+	<div class="wrapper wrapper-content">
+	<div class="ibox">
+		<c:if test="${sessionScope.state!='disabled'}">
+		<div id="div" name="div" class="ibox-title" style="height: 70px;">
+		<h5>
+			<ul class="nav nav-tabs">
+				<li><a href="${ctx}/oa/leave/list">请假信息</a></li>
+				<li><a href="${ctx}/oa/leave/leaveTodoList">待办任务</a></li>
+				<li><a href="${ctx}/oa/leave/leaveHistoricList">已办任务</a></li>
+				<shiro:hasPermission name="oa:leave:edit"><li class="active"><a href="${ctx}/oa/leave/form?ids=0">请假申请</a></li></shiro:hasPermission>
+			</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>
+			<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>
+	</c:if>
+	<div class="ibox-content">
+	<form:form id="inputForm" modelAttribute="leave" action="${ctx}/oa/leave/save" enctype="multipart/form-data" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<c:set var="id" value="${leave.id}" />
+		<c:set var="ids" value="${leave.ids}" />
+		<sys:message content="${message}"/>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>请假类型:</label>
+			<div class="controls">
+				<form:select path="leaveType"  cssClass="form-control input-sm" >
+					<form:options items="${fns:getDictList('oa_leave_type')}" itemLabel="label" itemValue="value" htmlEscape="false" />
+				</form:select>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>开始时间:</label>
+			<div class="controls">
+				<input class="form-control layer-date laydate-icon required" id="startTime" name="startTime" readonly="readonly" value="<fmt:formatDate value="${leave.startTime}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>结束时间:</label>
+			<div class="controls">
+				<input class="form-control layer-date laydate-icon required" id="endTime" name="endTime" readonly="readonly" value="<fmt:formatDate value="${leave.endTime}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>请假天数:</label>
+			<div class="controls">
+				<input id="leaveDays" name="leaveDays" type="text" class="form-control required" value="${leave.leaveDays}"/>
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>请假时长:</label>
+			<div class="controls">
+				<input id="leaveTime" name="leaveTime" type="text" class="form-control required" value="${leave.leaveTime}"/>
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>请假原因:</label>
+			<div class="controls">
+				<form:textarea path="reason" class="form-control required" rows="5" maxlength="20"/>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">图片:</label>
+			<div class="controls">
+				<span id="this_upload_msg">请上传*.png,*.bmp,*.jpg/jpeg格式的图片</span><br>
+				<div id="this_upload_image_div">
+					<div id="this_upload_div_1" style="float: left;position:relative;width: 57px;height: 57px;">
+						<img alt="_blank" id="this_upload_image_1" class="upload_ico" style="cursor:pointer;"  src="${pageContext.request.contextPath}/static/uploadify/upload_ico.png"  onclick="this_upload_image_button(1)"/>
+						<input id="this_upload_file_1" type="file" style="display:none"  name="this_upload_files"  onchange="this_upload_show_image(1)"  class="form-control required"/><br>
+					</div>
+				</div>
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<c:if test="${empty id}">
+			<div class="control-group">
+				<label class="control-label">抄送人:</label>
+				<div id="CCId" class="controls">
+					<sys:treeselect id="CCId" name="CCId" value="${leave.CCId}" labelName="idNames" labelValue="${leave.idNames}"
+									title="用户" url="/sys/office/treeDataAll?type=3&isAll=false" cssClass="form-control" allowClear="true" checked="true" notAllowSelectParent="true"/>
+					<span class="help-inline"></span>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label"><font color="red">*</font>审批人:</label>
+				<div id="addida" class="controls">
+					<sys:treeselectleave id="ida" name="ida" value="${leave.ida}" labelName="idNamea" labelValue="${leave.idNamea}"
+						title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control required" allowClear="true" notAllowSelectParent="true"/>
+						<span class="help-inline"></span>
+				</div>
+				<div id="showPeo" class="controls">
+				</div>
+
+			</div>
+			<c:if test="${not empty ids}">
+				<div class="form-actions">
+					<input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp;
+					<input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+				</div>
+			</c:if>
+		</c:if>
+	</form:form>
+</div>
+	</div>
+	</div>
+<%
+	session.removeAttribute("state");
+%>
+</body>
+</html>
+

+ 108 - 0
src/main/webapp/webpage/modules/oa/leaveHistoricList.jsp

@@ -0,0 +1,108 @@
+<%@ 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>
+</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}/oa/leave/list">请假信息</a></li>
+					<li><a href="${ctx}/oa/leave/leaveTodoList">待办任务</a></li>
+					<li class="active"><a href="${ctx}/oa/leave/leaveHistoricList">已办任务</a></li>
+					<shiro:hasPermission name="oa:leave:edit"><li><a href="${ctx}/oa/leave/form?ids=0">请假申请</a></li></shiro:hasPermission>
+				</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}/oa/leave/leaveHistoricList" 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 class="form-control layer-date laydate-icon required" id="beginDate" name="beginDate" readonly="readonly" value="<fmt:formatDate value="${act.beginDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							 -- 
+							<input class="form-control layer-date laydate-icon required" id="endDate" name="endDate" readonly="readonly" value="<fmt:formatDate value="${act.endDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+						</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;">流程发起人</th>
+					<th style="text-align: center;">流程名称</th>
+					<th style="text-align: center;">流程版本</th>
+					<th style="text-align: center;">开始时间</th>
+					<th style="text-align: center;">结束时间</th>
+					<th style="text-align: center;">请假天数</th>
+					<th style="text-align: center;">请假时长</th>
+					<th style="text-align: center;">请假原因</th>
+					<th style="text-align: center;">创建时间</th>
+				</tr>
+				</thead>
+				<tbody>
+				<c:forEach items="${list}" var="leave">
+					<c:set var="task" value="${leave.act.task}" />
+					<c:set var="vars" value="${leave.act.vars}" />
+					<c:set var="procDef" value="${leave.act.procDef}" />
+					<c:set var="status" value="${leave.act.status}" />
+					<tr>
+						<td>${leave.act.vars.map.applyUserId}</td>
+						<td>${procDef.name}</td>
+						<td><b title='流程版本号'>V: ${procDef.version}</b></td>
+						<td>${leave.startTime}</td>
+						<td>${leave.endTime}</td>
+						<td>${leave.leaveDays}</td>
+						<td>${leave.leaveTime}</td>
+						<td><%--${leave.reason}--%>
+							<span title="${leave.reason}">${fns:abbr(leave.reason, 30)}</span>
+						</td>
+						<td><fmt:formatDate value="${leave.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+	</div>
+</div>
+</body>
+</html>

+ 220 - 0
src/main/webapp/webpage/modules/oa/leaveList.jsp

@@ -0,0 +1,220 @@
+<%@ 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">
+        function page(n,s){
+            location = '${ctx}/oa/leave/list/?pageNo='+n+'&pageSize='+s;
+        }
+        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
+                    }
+                },
+                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 class="active"><a href="${ctx}/oa/leave/list">请假信息</a></li>
+					<li><a href="${ctx}/oa/leave/leaveTodoList">待办任务</a></li>
+					<li><a href="${ctx}/oa/leave/leaveHistoricList">已办任务</a></li>
+					<shiro:hasPermission name="oa:leave:edit"><li><a href="${ctx}/oa/leave/form?ids=0">请假申请</a></li></shiro:hasPermission>
+				</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="leave" action="${ctx}/oa/leave/list" 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();"/><!-- 支持排序 -->
+						<a href="#" id="moresee" class="fa fa-chevron-down" style="float: right;">更多</a>
+						<div class="form-group">
+							<label>创建时间:</label>
+							<input class="form-control layer-date laydate-icon required" id="createDateStart" name="createDateStart" readonly="readonly" value="<fmt:formatDate value="${leave.createDateStart}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							 -- 
+							<input class="form-control layer-date laydate-icon required" id="createDateEnd" name="createDateEnd" readonly="readonly" value="<fmt:formatDate value="${leave.createDateEnd}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+
+							&nbsp;&nbsp;
+							<label>审核状态:</label>
+							<form:select path="status"  class="form-control m-b">
+								<form:option value="" label=""/>
+								<form:options items="${fns:getDictList('act_status')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+							</form:select>
+						</div>
+					</form:form>
+					<br/>
+				</div>
+			</div>
+
+			<!-- 工具栏 -->
+			<div class="row">
+				<div class="col-sm-12">
+					<div class="pull-left">
+
+	<%--					<shiro:hasPermission name="oa:leave:add">
+							<table:addRow url="${ctx}/oa/leave/form" title="请假信息"></table:addRow><!-- 增加按钮 -->
+						</shiro:hasPermission>
+						<shiro:hasPermission name="oa:leave:edit">
+							<table:editRow url="${ctx}/oa/leave/form" title="请假信息" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+						</shiro:hasPermission>
+--%>
+						<shiro:hasPermission name="oa:leave:import">
+							<table:importExcel url="${ctx}/oa/leave/import"></table:importExcel><!-- 导入按钮 -->
+						</shiro:hasPermission>
+						<shiro:hasPermission name="oa:leave:export">
+							<table:exportExcel url="${ctx}/oa/leave/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 style="text-align: center;"> 序号</th>
+						<th style="text-align: center;">创建人</th>
+						<th style="text-align: center;">开始时间</th>
+						<th style="text-align: center;">结束时间</th>
+						<th style="text-align: center;">请假天数</th>
+						<th style="text-align: center;">请假时长</th>
+						<th style="text-align: center;">请假原因</th>
+						<th style="text-align: center;">审批状态</th>
+						<th style="text-align: center;">创建时间</th>
+						<th style="text-align: center;">操作</th>
+					</tr>
+				</thead>
+				<tbody>
+				<tbody>
+				<c:forEach items="${page.list}" var="leave" varStatus="status">
+					<c:set var="task" value="${leave.task }" />
+					<c:set var="pi" value="${leave.processInstance }" />
+					<c:set var="hpi" value="${leave.historicProcessInstance }" />
+					<tr>
+						<td> ${status.index+1}</td>
+						<td>${leave.createBy.name}</td>
+						<td>${leave.startTime}</td>
+						<td>${leave.endTime}</td>
+						<td>${leave.leaveDays}</td>
+						<td>${leave.leaveTime}</td>
+						<td><%--${leave.reason}--%>
+							<span title="${leave.reason}">${fns:abbr(leave.reason, 30)}</span>
+						</td>
+						<c:if test="${not empty task}">
+							<td>${fns:getDictLabel(leave.status, 'act_status', '')}</td>
+							<td><fmt:formatDate value="${leave.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+							<td>
+								<div style="text-align: center">
+								<c:if test="${not empty task.assignee}">
+									<shiro:hasPermission name="oa:leave:view">
+										<a href="javascript:void(0)" onclick="openDialogView('详情', '${ctx}/oa/leave/form?id=${leave.id}&readAttr=disabled&name=view','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+									</shiro:hasPermission>&nbsp;&nbsp;
+                                    <c:if test="${leave.createBy.id eq fns:getUser().id}">
+                                        <c:if test="${leave.status!=3 && leave.status!=4 && leave.status!=5}">
+                                            <a href="${ctx}/oa/leave/revoke?id=${leave.id}&processInstanceId=${leave.processInstanceId}&reason=${leave.reason}" onclick="return confirmx('确认要撤回该信息吗?', this.href)" class="btn btn-warning btn-xs"><i class="glyphicon glyphicon-share-alt"></i> 撤回</a>
+                                        </c:if>
+                                    </c:if>
+									<a href="javascript:void(0)" onclick="openDialogre('任务办理', '${ctx}/oa/leave/applyOnLeave?taskId=${task.id}&taskName=${fns:urlEncode(task.name)}&taskDefKey=${task.taskDefinitionKey}&procInsId=${task.processInstanceId}&procDefId=${task.processDefinitionId}&status=1','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 任务办理</a>
+								</c:if>
+								</div>
+							</td>
+						</c:if>
+						<c:if test="${empty task}">
+							<td>${fns:getDictLabel(leave.status, 'act_status', '')}</td>
+							<td><fmt:formatDate value="${leave.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+							<td>
+								<div style="text-align: center">
+								<shiro:hasPermission name="oa:leave:view">
+									<a href="javascript:void(0)" onclick="openDialogView('详情', '${ctx}/oa/leave/form?id=${leave.id}&readAttr=disabled&name=view','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+								</shiro:hasPermission>&nbsp;&nbsp;
+                                <c:if test="${leave.createBy.id eq fns:getUser().id}">
+                                    <c:if test="${leave.status!=3 && leave.status!=4 && leave.status!=5}">
+                                               <a href="${ctx}/oa/leave/revoke?id=${leave.id}&processInstanceId=${leave.processInstanceId}&reason=${leave.reason}" onclick="return confirmx('确认要撤回该信息吗?', this.href)" class="btn btn-warning btn-xs"><i class="glyphicon glyphicon-share-alt"></i> 撤回</a>
+                                    </c:if>
+                                </c:if>
+								</div>
+                            </td>
+						</c:if>
+
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+	</div>
+</div>
+</body>
+</html>

+ 181 - 0
src/main/webapp/webpage/modules/oa/leaveTodoList.jsp

@@ -0,0 +1,181 @@
+<%@ 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">
+        function page(n,s){
+            location = '${ctx}/oa/leave/list/?pageNo='+n+'&pageSize='+s;
+        }
+
+        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
+                    }
+                },
+                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}/oa/leave/list">请假信息</a></li>
+					<li class="active"><a href="${ctx}/oa/leave/leaveTodoList">待办任务</a></li>
+					<li><a href="${ctx}/oa/leave/leaveHistoricList">已办任务</a></li>
+					<shiro:hasPermission name="oa:leave:edit"><li><a href="${ctx}/oa/leave/form?ids=0">请假申请</a></li></shiro:hasPermission>
+				</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}/oa/leave/leaveTodoList" 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 class="form-control layer-date laydate-icon required" id="beginDate" name="beginDate" readonly="readonly" value="<fmt:formatDate value="${act.beginDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							 -- 
+							<input class="form-control layer-date laydate-icon required" id="endDate" name="endDate" readonly="readonly" value="<fmt:formatDate value="${act.endDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+						</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;">流程发起人</th>
+					<th style="text-align: center;">当前环节</th>
+					<th style="text-align: center;">流程名称</th>
+					<th style="text-align: center;">流程版本</th>
+					<th style="text-align: center;">开始时间</th>
+					<th style="text-align: center;">结束时间</th>
+					<th style="text-align: center;">请假天数</th>
+					<th style="text-align: center;">请假时长</th>
+					<th style="text-align: center;">请假原因</th>
+					<th style="text-align: center;">创建时间</th>
+					<th style="text-align: center;">操作</th>
+				</tr>
+				</thead>
+				<tbody>
+				<c:forEach items="${list}" var="leave">
+					<c:set var="task" value="${leave.act.task}" />
+					<c:set var="vars" value="${leave.act.vars}" />
+					<c:set var="procDef" value="${leave.act.procDef}" /><%--
+				<c:set var="procExecUrl" value="${act.procExecUrl}" /> --%>
+					<c:set var="status" value="${leave.act.status}" />
+					<tr>
+						<td>${leave.act.vars.map.applyUserId}</td>
+						<td>
+							${task.name}
+						</td>
+					<%--<td>${task.description}</td>--%>
+						<td>${procDef.name}</td>
+						<td><b title='流程版本号'>V: ${procDef.version}</b></td>
+						<td>${leave.startTime}</td>
+						<td>${leave.endTime}</td>
+						<td>${leave.leaveDays}</td>
+						<td>${leave.leaveTime}</td>
+						<td><%--${leave.reason}--%>
+							<span title="${leave.reason}">${fns:abbr(leave.reason, 30)}</span>
+						</td>
+						<td><fmt:formatDate value="${leave.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+						<td>
+							<div style="text-align: center">
+							<c:if test="${not empty task.assignee}"><%--
+							<a href="${ctx}${procExecUrl}/exec/${task.taskDefinitionKey}?procInsId=${task.processInstanceId}&act.taskId=${task.id}">办理</a> --%>
+								<%--<a href="${ctx}/oa/leave/applyOnLeave?taskId=${task.id}&taskName=${fns:urlEncode(task.name)}&taskDefKey=${task.taskDefinitionKey}&procInsId=${task.processInstanceId}&procDefId=${task.processDefinitionId}&status=${status}" class="btn btn-success btn-xs">任务办理</a>
+								--%><a href="javascript:void(0)" onclick="openDialogre('任务办理', '${ctx}/oa/leave/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-success btn-xs" ><i class="fa fa-edit"></i> 任务办理</a>
+							</c:if>
+							</div>
+						</td>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+	</div>
+</div>
+</body>
+</html>

+ 115 - 0
src/main/webapp/webpage/modules/oa/leaveView.jsp

@@ -0,0 +1,115 @@
+<%@ 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);
+					}
+				}
+			});
+
+			laydate({
+	            elem: '#startTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+	            event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+	        });
+			laydate({
+	            elem: '#endTime', //目标元素。由于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>当前步骤--[${leave.act.taskName}] </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">
+	<form:form id="inputForm" modelAttribute="leave" action="${ctx}/oa/leave/saveAudit" method="post" class="form-horizontal">
+			<fieldset>
+			<legend>${leave.act.taskName}</legend>
+		<div class="control-group">
+			<label class="control-label">请假类型:</label>
+			<div class="controls">
+				<form:select path="leaveType"  cssClass="form-control input-sm" >
+					<form:options items="${fns:getDictList('oa_leave_type')}" itemLabel="label" itemValue="value" htmlEscape="false" />
+				</form:select>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">开始时间:</label>
+			<div class="controls">
+				<input id="startTime" name="startTime" type="text" readonly="readonly" maxlength="20" class="laydate-icon form-control layer-date required"
+				value="${leave.startTime}"/>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">结束时间:</label>
+			<div class="controls">
+				<input id="endTime" name="endTime" type="text" readonly="readonly" maxlength="20" class="laydate-icon form-control layer-date required"
+				value="${leave.endTime}"/>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">请假原因:</label>
+			<div class="controls">
+				<form:textarea path="reason" class="form-control required" rows="5" maxlength="20"/>
+			</div>
+		</div>
+	
+		<div class="form-actions">
+			<input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+		</div>
+		<act:flowChart procInsId="${leave.act.procInsId}"/>
+		<act:histoicFlow procInsId="${leave.act.procInsId}"/>
+		
+			</fieldset>
+	</form:form>
+</div>
+	</div>
+	</div>
+</body>
+</html>
+

+ 118 - 0
src/main/webapp/webpage/modules/oa/manageCalendar.jsp

@@ -0,0 +1,118 @@
+<%@ 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: '#year-month', //目标元素。由于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="report" action="${ctx}/oa/manageCalendar/getManageCalendarInfoByMonth?date=${param.date}" method="get" class="form-inline">
+                        <input type="hidden" name="userId" value="${user.id}"/>
+                        <a href="#" id="moresee" class="fa fa-chevron-down" style="float: right;">更多</a>
+                        <div class="form-group">
+                            <label>创建时间:</label>
+                            <input id="year-month"  name="date"  type="text" readonly="readonly" maxlength="20" style="width:240px;" class="laydate-icondate form-control layer-date input-sm"
+                                   value="<fmt:formatDate value="${report.date}" 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" class="sort-column remarks">日期</th>
+                    <th style="text-align: center" class="sort-column versions">记录</th>
+                    <th style="text-align: center" class="sort-column content">操作</th>
+                </tr>
+                </thead>
+                <tbody>
+                <c:choose>
+                    <c:when test="${empty thisMonthRecordList}">
+                        <tr>
+                            <td colspan="3" align="center">无记录</td>
+                        </tr>
+                    </c:when>
+                    <c:otherwise>
+                        <c:forEach items="${thisMonthRecordList}" var="report">
+                            <c:if test="${report.reportNum >= 0}">
+                                <tr>
+                                    <td>
+                                            ${report.date}
+                                    </td>
+                                    <td>
+                                            ${report.reportNum}&nbsp;条
+                                    </td>
+                                    <td>
+                                        <div style="text-align: center">
+                                        <a target="_self" href="${ctx}/oa/manageCalendar/getManageCalendarInfoByDate?userId=${user.id}&date=${report.date}">查看详情</a>
+                                        </div>
+                                    </td>
+                                </tr>
+                            </c:if>
+                        </c:forEach>
+                    </c:otherwise>
+                </c:choose>
+                </tbody>
+
+            </table>
+
+        <br/>
+        <br/>
+        </div>
+        </div>
+    </div>
+<div>
+</div>
+</body>
+</html>

+ 511 - 0
src/main/webapp/webpage/modules/oa/manageCalendarDetails.jsp

@@ -0,0 +1,511 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+
+<html>
+<head>
+    <title>管理日历每日统计</title>
+    <meta name="decorator" content="default"/>
+    <style type="text/css">
+        img{width: 50px; height: 50px;}
+    </style>
+    <script type="text/javascript">
+        $(function () {
+            $("img").each(function () {
+                var num = 1 ;
+
+                $(this).click(function () {
+                    var flag = num%2;
+                    if(flag == 1){
+                        $(this).css("width","100%");
+                        $(this).css("height","100%");
+                        num++;
+                    }else if(flag ==0){
+                        $(this).css("width","50px");
+                        $(this).css("height","50px");
+                        num++;
+                    }
+                })
+            });
+        })
+    </script>
+    <script type="text/javascript">
+        $(function () {
+
+            $(".diffSelect").bind("change",function () {
+                var selectVal = $(".diffSelect").val();
+                if(0==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).show();
+                    });
+                }
+                if(1==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("报告")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(2==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("外勤")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(3==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        ($(this).find("td:eq(3)").text().indexOf("考勤")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("正常上班")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("正常下班")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("早退")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("迟到")>=0
+                        ) ?$(this).show():$(this).hide();
+                    })
+                }
+                if(4==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        ($(this).find("td:eq(3)").text().indexOf("审核")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("用印")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("请假")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("出差")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("加班")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("外出")>=0
+                        ) ?$(this).show():$(this).hide();
+                    })
+                }
+                if(31==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("迟到")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(32==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("正常上班")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(33==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("早退")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(34==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("正常下班")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(41==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("用印")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(42==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("请假")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(43==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("出差")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(44==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("加班")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(45==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("外出")>=0?$(this).show():$(this).hide();
+                    })
+                }
+            })
+
+        })
+
+
+
+    </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">
+            <table class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+                <tr>
+                    <td>分类查看</td>
+                    <td>
+                        <select class="diffSelect">
+                            <option value="0">查看所有</option>
+                            <option value="1">工作日志列表</option>
+                            <option value="2">外勤签到列表</option>
+                            <option value="3">考勤列表</option>
+                            <option value="4">审核列表</option>
+                            <option value="31">当天迟到人员列表</option>
+                            <option value="32">当天正常上班人员列表</option>
+                            <option value="33">当天早退人员列表</option>
+                            <option value="34">当天正常下班人员列表</option>
+                            <option value="41">当天用印人员列表</option>
+                            <option value="42">当天请假人员列表</option>
+                            <option value="43">当天出差人员列表</option>
+                            <option value="44">当天加班人员列表</option>
+                            <option value="45">当天外出人员列表</option>
+                        </select>
+                    </td>
+                </tr>
+            </table>
+        </div>
+        <div class="ibox-content">
+        <table class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+            <tr>
+                <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;" class="">创建时间</th>
+                <th style="text-align: center;" class="">更新时间</th>
+                <th style="text-align: center;" class="">详情</th>
+            </tr>
+        <c:forEach items="${manageCalendarDetailsList}" var="details">
+            <!-- 工作日志-->
+            <c:if test="${!empty details.workReports}">
+                <c:forEach items="${details.workReports.workReport}" var="wr" varStatus="id_workReport">
+                    <tr>
+                        <td hidden="hidden">
+                                ${wr.userId}
+                        </td>
+                        <td>
+                            <img src="${wr.photo}" >
+                        </td>
+                        <td>
+                                ${wr.userName}
+                        </td>
+                        <td>
+                            工作日志
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${wr.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${wr.updateDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <a onclick="openDialogView('查看工作日志', '${ctx}/work/report/workReport/form?id=${wr.workReportBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"><i class="fa fa-search-plus"></i>查看详情</a>
+                            </div>
+                            <%--<input value="${wr.workReportBean.id}" hidden="hidden">--%>
+                        </td>
+                    </tr>
+                </c:forEach>
+            </c:if>
+            <!-- 外勤签到-->
+            <c:if test="${!empty details.workOutSignIns}">
+                <c:forEach items="${details.workOutSignIns.workOutSignIn}" var="sign">
+                    <tr>
+                        <td hidden="hidden">
+                            ${sign.userId}
+                        </td>
+                        <td>
+                            <img src="${sign.photo}" >
+                        </td>
+                        <td>
+                            ${sign.userName}
+                        </td>
+                        <td>
+                            外勤签到
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${sign.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${sign.updateDate}" pattern="yyyy-MM-dd HH:mm:ss" />
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${sign.workOutSignInBean}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看外勤签到信息', '${ctx}/workoutsignin/workOutSignIn/form?id=${sign.workOutSignInBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+            </c:if>
+
+            <!-- 审核-->
+            <c:if test="${!empty details.audits}">
+                <c:forEach items="${details.audits.workSealFrom}" var="seal">
+                    <tr>
+                        <td hidden="hidden">
+                                ${seal.userId}
+                        </td>
+                        <td>
+                            <img src="${seal.photo}" >
+                        </td>
+                        <td>
+                                ${seal.userName}
+                        </td>
+                        <td>
+                            用印
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${seal.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${seal.updateDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${seal.workSealFormBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看用印信息', '${ctx}/oa/manageCalendar/workSealForm?id=${seal.workSealFormBean.id}','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.audits.leave}" var="lev">
+                    <tr>
+                        <td hidden="hidden">
+                                ${lev.userId}
+                        </td>
+                        <td>
+                            <img src="${lev.photo}" >
+                        </td>
+                        <td>
+                                ${lev.userName}
+                        </td>
+                        <td>
+                            请假
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${lev.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${lev.updateDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${lev.leaveBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看请假信息', '${ctx}/oa/manageCalendar/leaveForm?id=${lev.leaveBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.audits.oaEvection}" var="evection">
+                    <tr>
+                        <td hidden="hidden">
+                                ${evection.userId}
+                        </td>
+                        <td>
+                            <img src="${evection.photo}" >
+                        </td>
+                        <td>
+                                ${evection.userName}
+                        </td>
+                        <td>
+                            出差
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${evection.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${evection.updateDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${evection.oaEvectionBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看出差信息', '${ctx}/oa/manageCalendar/evectionForm?id=${evection.oaEvectionBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.audits.workOvertimeForm}" var="workOvertime">
+                    <tr>
+                        <td hidden="hidden">
+                                ${workOvertime.userId}
+                        </td>
+                        <td>
+                            <img src="${workOvertime.photo}" >
+                        </td>
+                        <td>
+                                ${workOvertime.userName}
+                        </td>
+                        <td>
+                            加班
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${workOvertime.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${workOvertime.updateDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${workOvertime.workOvertimeFormBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看加班信息', '${ctx}/oa/manageCalendar/workOvertimeForm?id=${workOvertime.workOvertimeFormBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.audits.workGoOut}" var="out">
+                    <tr>
+                        <td hidden="hidden">
+                                ${out.userId}
+                        </td>
+                        <td>
+                            <img src="${out.photo}" >
+                        </td>
+                        <td>
+                                ${out.userName}
+                        </td>
+                        <td>
+                            外出
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${out.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${out.updateDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${out.goOutBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看外出信息', '${ctx}/oa/manageCalendar/goOutForm?id=${out.goOutBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+            </c:if>
+            <!-- 考勤-->
+            <c:if test="${!empty details.attendances}">
+                <c:forEach items="${details.attendances.late}" var="lat">
+                    <tr>
+                        <td hidden="hidden">
+                                ${lat.userId}
+                        </td>
+                        <td>
+                            <img src="${lat.photo}" >
+                        </td>
+                        <td>
+                                ${lat.userName}
+                        </td>
+                        <td>
+                            迟到
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${lat.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${lat.updateDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input   value="${lat.oaAttendanceBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看考勤信息', '${ctx}/oa/oaAttendance/form?id=${lat.oaAttendanceBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs">查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.attendances.onDuty}" var="on">
+                    <tr>
+                        <td hidden="hidden">
+                                ${on.userId}
+                        </td>
+                        <td>
+                            <img src="${on.photo}" >
+                        </td>
+                        <td>
+                                ${on.userName}
+                        </td>
+                        <td>
+                            正常上班
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${on.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${on.updateDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${on.oaAttendanceBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看考勤信息', '${ctx}/oa/oaAttendance/form?id=${on.oaAttendanceBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs">查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.attendances.leaveEarly}" var="early">
+                    <tr>
+                        <td hidden="hidden">
+                                ${early.userId}
+                        </td>
+                        <td>
+                            <img src="${early.photo}" >
+                        </td>
+                        <td>
+                                ${early.userName}
+                        </td>
+                        <td>
+                            早退
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${early.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${early.updateDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${early.oaAttendanceBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看考勤信息', '${ctx}/oa/oaAttendance/form?id=${early.oaAttendanceBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs">查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.attendances.offDut}" var="off">
+                    <tr>
+                        <td hidden="hidden">
+                                ${off.userId}
+                        </td>
+                        <td>
+                            <img src="${off.photo}" >
+                        </td>
+                        <td>
+                                ${off.userName}
+                        </td>
+                        <td>
+                            正常下班
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${off.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${off.updateDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${off.oaAttendanceBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看考勤信息', '${ctx}/oa/oaAttendance/form?id=${off.oaAttendanceBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs">查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+            </c:if>
+        </c:forEach>
+        </table>
+        </div>
+    </div>
+</div>
+</body>
+</html>

+ 573 - 0
src/main/webapp/webpage/modules/oa/manageCalendarDetailsAll.jsp

@@ -0,0 +1,573 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+
+<html>
+<head>
+    <title>管理日历每日统计</title>
+    <meta name="decorator" content="default"/>
+    <style type="text/css">
+        img{width: 50px; height: 50px;}
+    </style>
+    <script type="text/javascript">
+        $(document).ready(function() {
+            if($("#beginDate").val()==null || $("#beginDate").val()==''){
+                $("#beginDate").val(getNowFormatDate());
+            }
+            if($("#endDate").val()==null || $("#endDate").val()==''){
+                $("#endDate").val(getNowFormatDate());
+            }
+            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 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 () {
+            $("img").each(function () {
+                var num = 1 ;
+
+                $(this).click(function () {
+                    var flag = num%2;
+                    if(flag == 1){
+                        $(this).css("width","100%");
+                        $(this).css("height","100%");
+                        num++;
+                    }else if(flag ==0){
+                        $(this).css("width","50px");
+                        $(this).css("height","50px");
+                        num++;
+                    }
+                })
+            });
+        })
+    </script>
+    <script type="text/javascript">
+        $(function () {
+
+            $(".diffSelect").bind("change",function () {
+                var selectVal = $(".diffSelect").val();
+                if(0==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).show();
+                    });
+                }
+                if(1==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("报告")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(2==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("外勤")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(3==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        ($(this).find("td:eq(3)").text().indexOf("考勤")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("正常上班")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("正常下班")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("早退")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("迟到")>=0
+                        ) ?$(this).show():$(this).hide();
+                    })
+                }
+                if(4==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        ($(this).find("td:eq(3)").text().indexOf("审核")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("用印")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("请假")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("出差")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("加班")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("外出")>=0
+                        ) ?$(this).show():$(this).hide();
+                    })
+                }
+                if(31==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("迟到")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(32==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("正常上班")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(33==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("早退")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(34==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("正常下班")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(41==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("用印")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(42==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("请假")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(43==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("出差")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(44==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("加班")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(45==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("外出")>=0?$(this).show():$(this).hide();
+                    })
+                }
+            })
+
+        })
+
+
+
+    </script>
+</head>
+<body class="gray-bg">
+<div class="wrapper wrapper-content">
+    <div class="ibox">
+        <div class="full-width fl">
+            <div class="contentShadow layui-row" id="queryDiv">
+                <form:form id="searchForm" modelAttribute="calendarCountEntity" action="${ctx}/work/report/workReport/reportlist" 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:select path="type" class=" form-control  simple-select">
+                                    <form:option value="" label=""/>
+                                    <form:option value="1" label="工作日志"/>
+                                    <form:option value="2" label="请假"/>
+                                </form:select>
+                            </div>
+                        </div>
+                        <div class="layui-item query athird">
+                            <label class="layui-form-label">日期:</label>
+                            <div class="layui-input-block">
+                                <input id="beginDate" name="startDate" placeholder="开始时间" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+                                />
+                                </input>
+                                <span class="group-sep">-</span>
+                                <input id="endDate" name="endDate" placeholder="结束时间"  type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+                                />
+                                </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>
+                </form:form>
+            </div>
+        </div>
+        <div class="ibox-content">
+        <table class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+            <tr>
+                <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;" class="">职级</th>
+                <th style="text-align: center;" class="">类型</th>
+                <th style="text-align: center;" class="">日期</th>
+                <th style="text-align: center;" class="">操作</th>
+            </tr>
+        <c:forEach items="${manageCalendarDetailsList}" var="details">
+            <!-- 工作日志-->
+            <c:if test="${!empty details.workReports}">
+                <c:forEach items="${details.workReports.workReport}" var="wr" varStatus="id_workReport">
+                    <tr>
+                        <td hidden="hidden">
+                                ${wr.userId}
+                        </td>
+                        <td>
+                                ${wr.userName}
+                        </td>
+                        <td>
+                                ${wr.no}
+                        </td>
+                       <%-- <td>
+                            ${wr.officeName}
+                        </td>--%>
+                        <td>
+                               无
+                        </td>
+                        <td>
+                            工作日志
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${wr.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <a onclick="openDialogView('查看工作报告', '${ctx}/work/report/workReport/form?id=${wr.workReportBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"></i>查看详情</a>
+                            </div>
+                            <%--<input value="${wr.workReportBean.id}" hidden="hidden">--%>
+                        </td>
+                    </tr>
+                </c:forEach>
+            </c:if>
+            <!-- 外勤签到-->
+            <c:if test="${!empty details.workOutSignIns}">
+                <c:forEach items="${details.workOutSignIns.workOutSignIn}" var="sign">
+                    <tr>
+                        <td hidden="hidden">
+                            ${sign.userId}
+                        </td>
+                        <td>
+                                ${sign.userName}
+                        </td>
+                        <td>
+                                ${sign.no}
+                        </td>
+                       <%-- <td>
+                                ${sign.officeName}
+                        </td>--%>
+                        <td>
+                            无
+                        </td>
+                        <td>
+                            外勤签到
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${sign.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${sign.workOutSignInBean}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看外勤签到信息', '${ctx}/workoutsignin/workOutSignIn/form?id=${sign.workOutSignInBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+            </c:if>
+
+            <!-- 审核-->
+            <c:if test="${!empty details.audits}">
+                <c:forEach items="${details.audits.workSealFrom}" var="seal">
+                    <tr>
+                        <td hidden="hidden">
+                                ${seal.userId}
+                        </td>
+                        <td>
+                                ${seal.userName}
+                        </td>
+                        <td>
+                                ${seal.no}
+                        </td>
+                        <%--<td>
+                                ${seal.officeName}
+                        </td>--%>
+                        <td>
+                            无
+                        </td>
+                        <td>
+                            用印
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${seal.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${seal.workSealFormBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看用印信息', '${ctx}/oa/manageCalendar/workSealForm?id=${seal.workSealFormBean.id}','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.audits.leave}" var="lev">
+                    <tr>
+                        <td hidden="hidden">
+                                ${lev.userId}
+                        </td>
+                        <td>
+                                ${lev.userName}
+                        </td>
+                        <td>
+                                ${lev.no}
+                        </td>
+                        <%--<td>
+                                ${lev.officeName}
+                        </td>--%>
+                        <td>
+                            无
+                        </td>
+                        <td>
+                            请假
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${lev.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${lev.leaveBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看请假信息', '${ctx}/oa/manageCalendar/leaveForm?id=${lev.leaveBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.audits.oaEvection}" var="evection">
+                    <tr>
+                        <td hidden="hidden">
+                                ${evection.userId}
+                        </td>
+                        <td>
+                                ${evection.userName}
+                        </td>
+                        <td>
+                                ${evection.no}
+                        </td>
+                       <%-- <td>
+                                ${evection.officeName}
+                        </td>--%>
+                        <td>
+                            无
+                        </td>
+                        <td>
+                            出差
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${evection.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${evection.oaEvectionBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看出差信息', '${ctx}/oa/manageCalendar/evectionForm?id=${evection.oaEvectionBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.audits.workOvertimeForm}" var="workOvertime">
+                    <tr>
+                        <td hidden="hidden">
+                                ${workOvertime.userId}
+                        </td>
+                        <td>
+                                ${workOvertime.userName}
+                        </td>
+                        <td>
+                                ${workOvertime.no}
+                        </td>
+                       <%-- <td>
+                                ${workOvertime.officeName}
+                        </td>--%>
+                        <td>
+                            无
+                        </td>
+                        <td>
+                            加班
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${workOvertime.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${workOvertime.workOvertimeFormBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看加班信息', '${ctx}/oa/manageCalendar/workOvertimeForm?id=${workOvertime.workOvertimeFormBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.audits.workGoOut}" var="out">
+                    <tr>
+                        <td hidden="hidden">
+                                ${out.userId}
+                        </td>
+                        <td>
+                                ${out.userName}
+                        </td>
+                        <td>
+                                ${out.no}
+                        </td>
+                       <%-- <td>
+                                ${out.officeName}
+                        </td>--%>
+                        <td>
+                            无
+                        </td>
+                        <td>
+                            外出
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${out.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${out.goOutBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看外出信息', '${ctx}/oa/manageCalendar/goOutForm?id=${out.goOutBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+            </c:if>
+            <!-- 考勤-->
+            <c:if test="${!empty details.attendances}">
+                <c:forEach items="${details.attendances.late}" var="lat">
+                    <tr>
+                        <td hidden="hidden">
+                                ${lat.userId}
+                        </td>
+                        <td>
+                                ${lat.userName}
+                        </td>
+                        <td>
+                                ${lat.no}
+                        </td>
+                       <%-- <td>
+                                ${lat.officeName}
+                        </td>--%>
+                        <td>
+                            无
+                        </td>
+                        <td>
+                            迟到
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${lat.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input   value="${lat.oaAttendanceBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看考勤信息', '${ctx}/oa/oaAttendance/form?id=${lat.oaAttendanceBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs">查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.attendances.onDuty}" var="on">
+                    <tr>
+                        <td hidden="hidden">
+                                ${on.userId}
+                        </td>
+                        <td>
+                                ${on.userName}
+                        </td>
+                        <td>
+                                ${on.no}
+                        </td>
+                        <%--<td>
+                                ${on.officeName}
+                        </td>--%>
+                        <td>
+                            无
+                        </td>
+                        <td>
+                            正常上班
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${on.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${on.oaAttendanceBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看考勤信息', '${ctx}/oa/oaAttendance/form?id=${on.oaAttendanceBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs">查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.attendances.leaveEarly}" var="early">
+                    <tr>
+                        <td hidden="hidden">
+                                ${early.userId}
+                        </td>
+                        <td>
+                                ${early.userName}
+                        </td>
+                        <td>
+                                ${early.no}
+                        </td>
+                       <%-- <td>
+                                ${early.officeName}
+                        </td>--%>
+                        <td>
+                            无
+                        </td>
+                        <td>
+                            早退
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${early.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${early.oaAttendanceBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看考勤信息', '${ctx}/oa/oaAttendance/form?id=${early.oaAttendanceBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs">查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.attendances.offDut}" var="off">
+                    <tr>
+                        <td hidden="hidden">
+                                ${off.userId}
+                        </td>
+                        <td>
+                                ${off.userName}
+                        </td>
+                        <td>
+                                ${off.no}
+                        </td>
+                       <%-- <td>
+                                ${off.officeName}
+                        </td>--%>
+                        <td>
+                            无
+                        </td>
+                        <td>
+                            正常下班
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${off.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${off.oaAttendanceBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看考勤信息', '${ctx}/oa/oaAttendance/form?id=${off.oaAttendanceBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs">查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+            </c:if>
+        </c:forEach>
+        </table>
+        </div>
+    </div>
+</div>
+</body>
+</html>

+ 442 - 0
src/main/webapp/webpage/modules/oa/manageCalendarDetailsSelf.jsp

@@ -0,0 +1,442 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+
+<html>
+<head>
+    <title>管理日历每日统计</title>
+    <meta name="decorator" content="default"/>
+    <style type="text/css">
+        img{width: 50px; height: 50px;}
+    </style>
+    <script type="text/javascript">
+        $(document).ready(function() {
+            if($("#beginDate").val()==null || $("#beginDate").val()==''){
+                $("#beginDate").val(getNowFormatDate());
+            }
+            if($("#endDate").val()==null || $("#endDate").val()==''){
+                $("#endDate").val(getNowFormatDate());
+            }
+            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 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 () {
+
+            $(".diffSelect").bind("change",function () {
+                var selectVal = $(".diffSelect").val();
+                if(0==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).show();
+                    });
+                }
+                if(1==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("报告")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(2==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("外勤")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(3==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        ($(this).find("td:eq(3)").text().indexOf("考勤")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("正常上班")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("正常下班")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("早退")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("迟到")>=0
+                        ) ?$(this).show():$(this).hide();
+                    })
+                }
+                if(4==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        ($(this).find("td:eq(3)").text().indexOf("审核")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("用印")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("请假")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("出差")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("加班")>=0
+                            || $(this).find("td:eq(3)").text().indexOf("外出")>=0
+                        ) ?$(this).show():$(this).hide();
+                    })
+                }
+                if(31==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("迟到")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(32==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("正常上班")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(33==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("早退")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(34==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("正常下班")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(41==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("用印")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(42==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("请假")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(43==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("出差")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(44==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("加班")>=0?$(this).show():$(this).hide();
+                    })
+                }
+                if(45==selectVal){
+                    $("table:eq(1) tr").each(function () {
+                        $(this).find("td:eq(3)").text().indexOf("外出")>=0?$(this).show():$(this).hide();
+                    })
+                }
+            })
+
+        })
+
+
+
+    </script>
+</head>
+<body class="gray-bg">
+<div class="wrapper wrapper-content">
+    <div class="ibox">
+        <div class="full-width fl">
+            <div class="contentShadow layui-row" id="queryDiv">
+                <form:form id="searchForm" modelAttribute="calendarCountEntity" action="${ctx}/work/report/workReport/reportlist?flat=1" 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:select path="type" class=" form-control  simple-select">
+                                    <form:option value="" label=""/>
+                                    <form:option value="1" label="工作日志"/>
+                                    <form:option value="2" label="请假"/>
+                                </form:select>
+                            </div>
+                        </div>
+                        <div class="layui-item query athird">
+                            <label class="layui-form-label">日期:</label>
+                            <div class="layui-input-block">
+                                <input id="beginDate" name="startDate" placeholder="开始时间" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+                                       />
+                                </input>
+                                <span class="group-sep">-</span>
+                                <input id="endDate" name="endDate" placeholder="结束时间"  type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+                                      />
+                                </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>
+                </form:form>
+            </div>
+        </div>
+        <div class="ibox-content">
+            <%--<table class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+                <tr>
+                    <td>分类查看</td>
+                    <td>
+                        <select class="diffSelect">
+                            <option value="0">查看所有</option>
+                            <option value="1">工作报告列表</option>
+                            <option value="2">外勤签到列表</option>
+                            <option value="3">考勤列表</option>
+                            <option value="4">审核列表</option>
+                            <option value="31">当天迟到人员列表</option>
+                            <option value="32">当天正常上班人员列表</option>
+                            <option value="33">当天早退人员列表</option>
+                            <option value="34">当天正常下班人员列表</option>
+                            <option value="41">当天用印人员列表</option>
+                            <option value="42">当天请假人员列表</option>
+                            <option value="43">当天出差人员列表</option>
+                            <option value="44">当天加班人员列表</option>
+                            <option value="45">当天外出人员列表</option>
+                        </select>
+                    </td>
+                </tr>
+            </table>--%>
+        </div>
+        <div class="ibox-content">
+        <table class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+            <tr>
+                <th style="text-align: center;min-width: 200px" class="">类型</th>
+                <th style="text-align: center;min-width: 200px" class="">日期</th>
+                <th style="text-align: center;min-width: 200px" class="">操作</th>
+            </tr>
+        <c:forEach items="${manageCalendarDetailsList}" var="details">
+            <!-- 工作日志-->
+            <c:if test="${!empty details.workReports}">
+                <c:forEach items="${details.workReports.workReport}" var="wr" varStatus="id_workReport">
+                    <tr>
+                        <td hidden="hidden">
+                                ${wr.userId}
+                        </td>
+                        <td>
+                            工作日志
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${wr.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <a onclick="openDialogView('查看工作报告', '${ctx}/work/report/workReport/form?id=${wr.workReportBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs">查看详情</a>
+                            </div>
+                            <%--<input value="${wr.workReportBean.id}" hidden="hidden">--%>
+                        </td>
+                    </tr>
+                </c:forEach>
+            </c:if>
+            <!-- 外勤签到-->
+            <c:if test="${!empty details.workOutSignIns}">
+                <c:forEach items="${details.workOutSignIns.workOutSignIn}" var="sign">
+                    <tr>
+                        <td hidden="hidden">
+                            ${sign.userId}
+                        </td>
+                        <td>
+                            外勤签到
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${sign.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${sign.workOutSignInBean}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看外勤签到信息', '${ctx}/workoutsignin/workOutSignIn/form?id=${sign.workOutSignInBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+            </c:if>
+
+            <!-- 审核-->
+            <c:if test="${!empty details.audits}">
+                <c:forEach items="${details.audits.workSealFrom}" var="seal">
+                    <tr>
+                        <td hidden="hidden">
+                                ${seal.userId}
+                        </td>
+                        <td>
+                            用印
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${seal.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${seal.workSealFormBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看用印信息', '${ctx}/oa/manageCalendar/workSealForm?id=${seal.workSealFormBean.id}','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.audits.leave}" var="lev">
+                    <tr>
+                        <td hidden="hidden">
+                                ${lev.userId}
+                        </td>
+                        <td>
+                            请假
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${lev.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${lev.leaveBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看请假信息', '${ctx}/oa/manageCalendar/leaveForm?id=${lev.leaveBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.audits.oaEvection}" var="evection">
+                    <tr>
+                        <td hidden="hidden">
+                                ${evection.userId}
+                        </td>
+                        <td>
+                            出差
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${evection.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${evection.oaEvectionBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看出差信息', '${ctx}/oa/manageCalendar/evectionForm?id=${evection.oaEvectionBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.audits.workOvertimeForm}" var="workOvertime">
+                    <tr>
+                        <td hidden="hidden">
+                                ${workOvertime.userId}
+                        </td>
+                        <td>
+                            加班
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${workOvertime.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${workOvertime.workOvertimeFormBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看加班信息', '${ctx}/oa/manageCalendar/workOvertimeForm?id=${workOvertime.workOvertimeFormBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.audits.workGoOut}" var="out">
+                    <tr>
+                        <td hidden="hidden">
+                                ${out.userId}
+                        </td>
+                        <td>
+                            外出
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${out.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${out.goOutBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看外出信息', '${ctx}/oa/manageCalendar/goOutForm?id=${out.goOutBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"> 查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+            </c:if>
+            <!-- 考勤-->
+            <c:if test="${!empty details.attendances}">
+                <c:forEach items="${details.attendances.late}" var="lat">
+                    <tr>
+                        <td hidden="hidden">
+                                ${lat.userId}
+                        </td>
+                        <td>
+                            迟到
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${lat.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input   value="${lat.oaAttendanceBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看考勤信息', '${ctx}/oa/oaAttendance/form?id=${lat.oaAttendanceBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs">查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.attendances.onDuty}" var="on">
+                    <tr>
+                        <td hidden="hidden">
+                                ${on.userId}
+                        </td>
+                        <td>
+                            正常上班
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${on.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${on.oaAttendanceBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看考勤信息', '${ctx}/oa/oaAttendance/form?id=${on.oaAttendanceBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs">查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.attendances.leaveEarly}" var="early">
+                    <tr>
+                        <td hidden="hidden">
+                                ${early.userId}
+                        </td>
+                        <td>
+                            早退
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${early.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${early.oaAttendanceBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看考勤信息', '${ctx}/oa/oaAttendance/form?id=${early.oaAttendanceBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs">查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                <c:forEach items="${details.attendances.offDut}" var="off">
+                    <tr>
+                        <td hidden="hidden">
+                                ${off.userId}
+                        </td>
+                        <td>
+                            正常下班
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${off.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <input  value="${off.oaAttendanceBean.id}" hidden="hidden"/>
+                            <a onclick="openDialogView('查看考勤信息', '${ctx}/oa/oaAttendance/form?id=${off.oaAttendanceBean.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs">查看详情</a>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+            </c:if>
+        </c:forEach>
+        </table>
+        </div>
+    </div>
+</div>
+</body>
+</html>

+ 146 - 0
src/main/webapp/webpage/modules/oa/oaAttendanceForm.jsp

@@ -0,0 +1,146 @@
+<%@ 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: '#startTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+			            event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+			        });
+					laydate({
+			            elem: '#endTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+			            event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+			        });
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',<%=request.getAttribute("disabled")%>);
+		});
+	</script>
+</head>
+<body class="hideScroll">
+		<form:form id="inputForm" modelAttribute="oaAttendance" action="${ctx}/oa/oaAttendance/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">
+						<c:choose>
+							<c:when test="${requestScope.disabled == 'true'}">
+								${oaAttendance.company.name}
+							</c:when>
+							<c:otherwise>
+								<sys:treeselect id="company" name="company.id" value="${oaAttendance.company.id}" labelName="company.name" labelValue="${oaAttendance.company.name}"
+									title="部门" url="/sys/office/treeData?type=2" cssClass="form-control " allowClear="true" notAllowSelectParent="true"/>
+							</c:otherwise>
+						</c:choose>
+					</td>
+					<td class="width-15 active"><label class="pull-right">考勤规则:</label></td>
+					<td class="width-35">
+						<c:choose>
+							<c:when test="${requestScope.disabled eq 'true'}">
+								${oaAttendance.rule.startTime}
+								--
+								${oaAttendance.rule.endTime}
+								&nbsp;&nbsp;
+								(${oaAttendance.rule.workdays})
+							</c:when>
+							<c:otherwise>
+								<sys:gridselect url="${ctx}/oa/oaAttendance/selectrule" id="rule" name="rule.id"  value="${oaAttendance.rule.id}"  title="选择考勤规则" labelName="rule.id"
+								 labelValue="${oaAttendance.rule.id}" cssClass="form-control required" fieldLabels="id|name" fieldKeys="" searchLabel="id" searchKey="id" ></sys:gridselect>
+							</c:otherwise>
+						</c:choose>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">用户:</label></td>
+					<td class="width-35">
+						<c:choose>
+							<c:when test="${requestScope.disabled == 'true'}">
+								${oaAttendance.user.name}
+							</c:when>
+							<c:otherwise>
+								<sys:treeselect id="user" name="user.id" value="${oaAttendance.user.id}" labelName="user.name" labelValue="${oaAttendance.user.name}"
+									title="用户" url="/sys/office/treeData?type=3" cssClass="form-control " allowClear="true" notAllowSelectParent="true"/>
+							</c:otherwise>
+						</c:choose>
+					</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 "/>--%>
+							${oaAttendance.remarks}
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">上班时间:</label></td>
+					<td class="width-35">
+						<c:choose>
+							<c:when test="${requestScope.disabled == 'true'}">
+								<fmt:formatDate value="${oaAttendance.startTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
+							</c:when>
+							<c:otherwise>
+								<input id="startTime" name="startTime" type="text" maxlength="20" class="laydate-icon form-control layer-date "
+									   value="<fmt:formatDate value="${oaAttendance.startTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+							</c:otherwise>
+						</c:choose>
+					</td>
+					<td class="width-15 active"><label class="pull-right">上班情况:</label></td>
+					<td class="width-35">
+						<c:if test="${oaAttendance.morning==1}">正常打卡</c:if>
+						<c:if test="${oaAttendance.morning==2}"><strong style="color: red">迟到</strong></c:if>
+						<c:if test="${oaAttendance.morning==5}"><strong style="color: red">待打卡</strong></c:if>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">下班时间:</label></td>
+					<td class="width-35">
+						<c:choose>
+							<c:when test="${requestScope.disabled == 'true'}">
+								<fmt:formatDate value="${oaAttendance.endTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
+							</c:when>
+							<c:otherwise>
+								<input id="endTime" name="endTime" type="text" maxlength="20" class="laydate-icon form-control layer-date "
+									   value="<fmt:formatDate value="${oaAttendance.endTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+							</c:otherwise>
+						</c:choose>
+					</td>
+					<td class="width-15 active"><label class="pull-right">下班情况:</label></td>
+					<td class="width-35">
+						<c:if test="${oaAttendance.afternoon==1}">正常打卡</c:if>
+						<c:if test="${oaAttendance.afternoon==3}"><strong style="color: red">早退</strong></c:if>
+						<c:if test="${oaAttendance.afternoon==5}"><strong style="color: red">待打卡</strong></c:if>
+					</td>
+				</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 195 - 0
src/main/webapp/webpage/modules/oa/oaAttendanceList.jsp

@@ -0,0 +1,195 @@
+<%@ 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() {
+			$(".oaAttendance_startTime").each(function () {
+				var time = $(this).text().trim();
+				if(time.length==0){
+				    time = $(this).next("td").text().trim();
+				}
+				var date = new Date(time);
+                //var dataType = Object.prototype.toString.call(date);
+				var weeks = ['日','一','二','三','四','五','六'];
+                var week = weeks[date.getDay()];
+                var rules = $(this).siblings(".oaAttendance_rule").text().trim();
+                rules = rules.replace(week,"<strong style='color: red;'>"+week+"</strong>");
+                $(this).siblings(".oaAttendance_rule").html(rules);
+            });
+
+            laydate.render({
+                elem: '#fromThisDay', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+            laydate.render({
+                elem: '#toThisDay', //目标元素。由于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="oaAttendance" action="${ctx}/oa/oaAttendance/" 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();"/><!-- 支持排序 -->
+		<a href="#" id="moresee" class="fa fa-chevron-down" style="float: right;">更多</a>
+		<div class="form-group">
+			<span>姓名:</span>
+			<%--<form:input path="user.name"  htmlEscape="false" maxlength="64"  class=" form-control input-sm"/>--%>
+			<input name="user.name" value="${username}" class="form-control input-sm"/>
+			<span>开始日期:</span>
+			<input id="fromThisDay"  name="fromThisDay"  type="text" readonly="" maxlength="20" style="width:180px;" class="laydate-icondate form-control layer-date input-sm"
+				   value="<fmt:formatDate value="${fromThisDay}" pattern="yyyy-MM-dd"/>">
+			<span>结束日期:</span>
+			<input id="toThisDay"  name="toThisDay"  type="text" readonly="" maxlength="20" style="width:180px;" class="laydate-icondate form-control layer-date input-sm"
+				   value="<fmt:formatDate value="${toThisDay}" pattern="yyyy-MM-dd"/>">
+		</div>
+	</form:form>
+	<br/>
+	</div>
+	</div>
+	
+	<!-- 工具栏 -->
+	<div class="row">
+	<div class="col-sm-12">
+		<div class="pull-left">
+			<shiro:hasPermission name="oa:oaAttendance:add">
+				<table:addRow url="${ctx}/oa/oaAttendance/form" title="考勤信息"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="oa:oaAttendance:edit">
+			    <table:editRow url="${ctx}/oa/oaAttendance/form" title="考勤信息" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="oa:oaAttendance:del">
+				<table:delRow url="${ctx}/oa/oaAttendance/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="oa:oaAttendance:import">
+				<table:importExcel url="${ctx}/oa/oaAttendance/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="oa:oaAttendance:export">
+	       		<table:exportExcel url="${ctx}/oa/oaAttendance/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 style="text-align: center;"  class="sort-column company.name">公司</th>
+				<th style="text-align: center;"  class="sort-column rule.id">考勤规则</th>
+				<th style="text-align: center;"  class="sort-column user.name">用户</th>
+				<th style="text-align: center;"  class="sort-column startTime">上班时间</th>
+				<th style="text-align: center;"  class="sort-column endTime">下班时间</th>
+				<th style="text-align: center;" class="sort-column morning">上班情况</th>
+				<th style="text-align: center;" class="sort-column afternoon">下班情况</th>
+				<th style="text-align: center;"  class="sort-column remarks">备注信息</th>
+				<th style="text-align: center;">操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="oaAttendance">
+			<tr>
+				<%--<td> <input type="checkbox" id="${oaAttendance.id}"  class="i-checks"></td>--%>
+				<td>
+					<%--${oaAttendance.company.name}--%>
+					<span title="${oaAttendance.company.name}">${fns:abbr(oaAttendance.company.name, 30)}</span>
+				</td>
+				<td class="oaAttendance_rule">
+					${oaAttendance.rule.startTime}
+					--
+					${oaAttendance.rule.endTime}
+					&nbsp;&nbsp;
+					(${oaAttendance.rule.workdays})
+				</td>
+				<td>
+					${oaAttendance.user.name}
+				</td>
+				<td class="oaAttendance_startTime">
+					<fmt:formatDate value="${oaAttendance.startTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
+				</td>
+				<td>
+					<fmt:formatDate value="${oaAttendance.endTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
+				</td>
+				<td>
+					<c:if test="${oaAttendance.morning==1}">正常打卡</c:if>
+					<c:if test="${oaAttendance.morning==2}"><strong style="color: red">迟到</strong></c:if>
+					<c:if test="${oaAttendance.morning==5}"><strong style="color: red">待打卡</strong></c:if>
+				</td>
+				<td>
+					<c:if test="${oaAttendance.afternoon==1}">正常打卡</c:if>
+					<c:if test="${oaAttendance.afternoon==3}"><strong style="color: red">早退</strong></c:if>
+					<c:if test="${oaAttendance.afternoon==5}"><strong style="color: red">待打卡</strong></c:if>
+				</td>
+				<td>
+					${oaAttendance.remarks}
+				</td>
+
+				<td>
+					<div style="text-align: center">
+					<shiro:hasPermission name="oa:oaAttendance:view">
+						<a href="javascript:void(0)" onclick="openDialogView('查看考勤信息', '${ctx}/oa/oaAttendance/form?id=${oaAttendance.id}&morning=${oaAttendance.morning}&afternoon=${oaAttendance.afternoon}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+				<%--	<shiro:hasPermission name="oa:oaAttendance:edit">
+    					<a href="javascript:void(0)" onclick="openDialog('修改考勤信息', '${ctx}/oa/oaAttendance/form?id=${oaAttendance.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="oa:oaAttendance:del">
+						<a href="${ctx}/oa/oaAttendance/delete?id=${oaAttendance.id}" onclick="return confirmx('确认要删除该考勤信息吗?', this.href)"   class="btn btn-danger btn-xs"><i class="fa fa-trash"></i> 删除</a>
+					</shiro:hasPermission>--%>
+					</div>
+				</td>
+
+			</tr>
+		</c:forEach>
+		</tbody>
+	</table>
+	
+		<!-- 分页代码 -->
+	<table:page page="${page}"></table:page>
+	<br/>
+	<br/>
+	</div>
+	</div>
+</div>
+</body>
+</html>

+ 128 - 0
src/main/webapp/webpage/modules/oa/oaAttendanceRuleForm.jsp

@@ -0,0 +1,128 @@
+<%@ 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);
+					}
+				}
+			});
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',<%=request.getAttribute("disabled")%>);
+		});
+	</script>
+</head>
+<body class="hideScroll">
+		<form:form id="inputForm" modelAttribute="oaAttendanceRule" action="${ctx}/oa/oaAttendanceRule/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">
+						<c:choose>
+							<c:when test="${!disabled}">
+								<sys:treeselect id="company" name="company.id" value="${oaAttendanceRule.company.id}" labelName="company.name" labelValue="${oaAttendanceRule.company.name}"
+												title="部门" url="/sys/office/treeData?type=2" cssClass="form-control " allowClear="true" notAllowSelectParent="true"/>
+							</c:when>
+							<c:otherwise>
+								${oaAttendanceRule.company.name}
+							</c:otherwise>
+						</c:choose>
+					</td>
+					<td class="width-15 active"><label class="pull-right">上班时间:</label></td>
+					<td class="width-35">
+						<c:choose>
+							<c:when test="${!disabled}">
+								<form:input path="startTime" htmlEscape="false"    class="form-control "/></c:when>
+							<c:otherwise>
+								${oaAttendanceRule.startTime}
+							</c:otherwise>
+						</c:choose>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">下班时间:</label></td>
+					<td class="width-35">
+						<c:choose>
+							<c:when test="${!disabled}">
+								<form:input path="endTime" htmlEscape="false"    class="form-control "/></c:when>
+							<c:otherwise>
+								${oaAttendanceRule.endTime}
+							</c:otherwise>
+						</c:choose>
+					</td>
+					<td class="width-15 active"><label class="pull-right">工作日:</label></td>
+					<td class="width-35">
+						<c:choose>
+							<c:when test="${!disabled}">
+								<form:input path="workdays" htmlEscape="false"    class="form-control "/></c:when>
+							<c:otherwise>
+								${oaAttendanceRule.workdays}
+							</c:otherwise>
+						</c:choose>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">考勤地点:</label></td>
+					<td class="width-35">
+						<%--<form:input path="place" htmlEscape="false"    class="form-control "/>--%>
+						${rule_place}
+					</td>
+					<td class="width-15 active"><label class="pull-right">考勤WIFI:</label></td>
+					<td class="width-35">
+						<%--<form:input path="wifi" htmlEscape="false"    class="form-control "/>--%>
+						${rule_wifi_name} &nbsp;&nbsp;&nbsp;${rule_wifi}
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">备注信息:</label></td>
+					<td class="width-35">
+						<c:choose>
+							<c:when test="${!disabled}">
+								<form:input path="remarks" htmlEscape="false"    class="form-control "/></c:when>
+							<c:otherwise>
+								${oaAttendanceRule.remarks}
+							</c:otherwise>
+						</c:choose>
+					</td>
+					<td class="width-15 active"><label class="pull-right">名称:</label></td>
+					<td class="width-35">
+						<c:choose>
+							<c:when test="${!disabled}">
+								<form:input path="name" htmlEscape="false"    class="form-control "/></c:when>
+							<c:otherwise>
+								${oaAttendanceRule.name}
+							</c:otherwise>
+						</c:choose>
+					</td>
+				</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 164 - 0
src/main/webapp/webpage/modules/oa/oaAttendanceRuleList.jsp

@@ -0,0 +1,164 @@
+<%@ 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="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="oaAttendanceRule" action="${ctx}/oa/oaAttendanceRule/" 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();"/><!-- 支持排序 -->
+	</form:form>
+	<br/>
+	</div>
+	</div>
+	
+	<!-- 工具栏 -->
+	<div class="row">
+	<div class="col-sm-12">
+		<div class="pull-left">
+<%--
+			<shiro:hasPermission name="oa:oaAttendanceRule:add">
+				<table:addRow url="${ctx}/oa/oaAttendanceRule/form" title="考勤规则"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="oa:oaAttendanceRule:edit">
+			    <table:editRow url="${ctx}/oa/oaAttendanceRule/form" title="考勤规则" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="oa:oaAttendanceRule:del">
+				<table:delRow url="${ctx}/oa/oaAttendanceRule/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+--%>
+
+			<shiro:hasPermission name="oa:oaAttendanceRule:import">
+				<table:importExcel url="${ctx}/oa/oaAttendanceRule/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="oa:oaAttendanceRule:export">
+	       		<table:exportExcel url="${ctx}/oa/oaAttendanceRule/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 style="text-align: center;"> <input type="checkbox" class="i-checks"></th>
+				<th style="text-align: center;"  class="sort-column company.name">公司</th>
+				<th style="text-align: center;"  class="sort-column startTime">上班时间</th>
+				<th style="text-align: center;"  class="sort-column endTime">下班时间</th>
+				<th style="text-align: center;"  class="sort-column workdays">工作日</th>
+				<th style="text-align: center;"  class="sort-column place">考勤地点</th>
+				<th style="text-align: center;"  class="sort-column wifi">考勤WIFI</th>
+				<th style="text-align: center;"  class="sort-column wifi">wifi名称</th>
+				<th style="text-align: center;"  class="sort-column createDate">创建时间</th>
+<%--				<th  class="sort-column remarks">备注信息</th>
+				<th  class="sort-column name">名称</th>--%>
+				<th style="text-align: center;">操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${outterList}"  var="str" >
+		<c:forEach items="${page.list}" var="oaAttendanceRule">
+			<tr>
+				<td> <input type="checkbox" id="${oaAttendanceRule.id}" class="i-checks"></td>
+				<td>
+				<%--	<a  href="javascript:void(0)" onclick="openDialogView('查看考勤规则', '${ctx}/oa/oaAttendanceRule/form?id=${oaAttendanceRule.id}&readAttr=disabled','80%','80%')">
+					</a>--%>
+					<%--${oaAttendanceRule.company.name}--%>
+					<span title="${oaAttendanceRule.company.name}">${fns:abbr(oaAttendanceRule.company.name, 30)}</span>
+				</td>
+				<td>
+					${oaAttendanceRule.startTime}
+				</td>
+				<td>
+					${oaAttendanceRule.endTime}
+				</td>
+				<td>
+					${oaAttendanceRule.workdays}
+				</td>
+				<c:forTokens items="${str}" delims="+" var="subStr" varStatus="index">
+					<td>
+						${subStr}
+					</td>
+				</c:forTokens>
+				<td>
+					<fmt:formatDate value="${oaAttendanceRule.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+				</td>
+<%--				<td>
+					${oaAttendanceRule.remarks}
+				</td>
+				<td>
+					${oaAttendanceRule.name}
+				</td>--%>
+				<td>
+					<div style="text-align: center">
+					<shiro:hasPermission name="oa:oaAttendanceRule:view">
+						<a href="javascript:void(0)" onclick="openDialogView('查看考勤规则', '${ctx}/oa/oaAttendanceRule/form?id=${oaAttendanceRule.id}&place_wifi_name=${str}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+			<%--
+					<shiro:hasPermission name="oa:oaAttendanceRule:edit">
+    					<a href="javascript:void(0)" onclick="openDialog('修改考勤规则', '${ctx}/oa/oaAttendanceRule/form?id=${oaAttendanceRule.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="oa:oaAttendanceRule:del">
+						<a href="${ctx}/oa/oaAttendanceRule/delete?id=${oaAttendanceRule.id}" onclick="return confirmx('确认要删除该考勤规则吗?', this.href)"   class="btn btn-danger btn-xs"><i class="fa fa-trash"></i> 删除</a>
+					</shiro:hasPermission>
+			--%>
+					</div>
+				</td>
+			</tr>
+		</c:forEach>
+		</c:forEach>
+		</tbody>
+	</table>
+	
+		<!-- 分页代码 -->
+	<table:page page="${page}"></table:page>
+	<br/>
+	<br/>
+	</div>
+	</div>
+</div>
+</body>
+</html>

+ 390 - 0
src/main/webapp/webpage/modules/oa/oaNotifyAudit.jsp

@@ -0,0 +1,390 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>通知管理</title>
+    <meta name="decorator" content="default"/>
+    <style type="text/css">
+        img {width: 50px; height: 50px;}
+    </style>
+    <%--<script type="text/javascript" src="${ctxStatic}/ckeditor/ckeditor.js"></script>--%>
+    <script type="text/javascript" language="JavaScript" for="window" event="onload">
+        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);
+                    }
+                }
+            });
+            //只做查看时,禁用掉以下标签
+            <%--$('input,textarea,select').attr('disabled',<%=request.getAttribute("disabled")%>);--%>
+
+        });
+    </script>
+    <script type="text/javascript">
+        function insertTitle(tValue){
+            var list = "${oaNotify.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 = "107";
+                console.log(file);
+                var timestamp = new Date().getTime();
+
+                var storeAs = "attachment-file/oaNotify/" + 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);
+            }
+        }
+
+        function changeUser(ids,names,parents) {
+            var split = ids.split(',');
+            var split2 = names.split(',');
+            $("#userTableList").html("");
+            userIdx=0;
+            for(var i=0;i<split.length;i++){
+                var id = split[i];
+                if(id==''||id==null){
+                    continue;
+                }
+                var obj = {'id':id,'name':split2[i],'officeName':parents[i]};
+                addRow('#userTableList',userIdx,userTpl,obj);
+                userIdx+=1;
+            }
+        }
+
+        function changeOffice(ids,names,parentIds) {
+            $("#officeTableList").html("");
+            officeIdx=0;
+            for(var i=0;i<ids.length;i++){
+                var obj = {'id':ids[i],'name':parentIds[i]};
+                addRow('#officeTableList',officeIdx,officeTpl,obj);
+                officeIdx+=1;
+            }
+        }
+        function getSelectOfficeIds() {
+            var selectedIds = "";
+            var pidArr = $("#officeTableList tr .officeId");
+            for(var i=0;i<pidArr.length;i++){
+                selectedIds+=$(pidArr[i]).val();
+                selectedIds+=",";
+            }
+            return selectedIds;
+        }
+        function getSelectUserIds() {
+            var selectedIds = "";
+            var pidArr = $("#userTableList tr .userId");
+            for(var i=0;i<pidArr.length;i++){
+                selectedIds+=$(pidArr[i]).val();
+                selectedIds+=",";
+            }
+            return selectedIds;
+        }
+
+    </script>
+
+</head>
+<body >
+<div class="single-form">
+    <div class="container  view-form">
+        <form:form id="inputForm" modelAttribute="oaNotify" enctype="multipart/form-data" action="${ctx}/oa/oaNotify/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">公告标题:</label>
+                    <div class="layui-input-block">
+                        <input htmlEscape="false" readonly="true" maxlength="30" class="form-control required layui-input"
+                               value="${oaNotify.title}"/>
+                    </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" maxlength="30" class="form-control layui-input"/>
+                            <span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty oaNotify.status}">${fns:getDictLabel(oaNotify.status, '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">公告类型:</label>
+                    <div class="layui-input-block">
+                        <input htmlEscape="false" readonly="true" maxlength="30" class="form-control required layui-input"
+                               value="${fns:getMainDictLabel(oaNotify.type, 'oa_notify_type', '')}"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">创建日期:</label>
+                    <div class="layui-input-block">
+                        <input id="createDate" name="createDate" htmlEscape="false" readonly="true"
+                               class="laydate-icondate form-control layer-date layui-input laydate-icon"
+                               value="<fmt:formatDate value="${oaNotify.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                    </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" htmlEscape="false" readonly="true"
+                               class="laydate-icondate form-control layer-date layui-input laydate-icon required"
+                               value="<fmt:formatDate value="${oaNotify.startDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">结束日期:</label>
+                    <div class="layui-input-block">
+                        <input id="endDate" name="endDate" htmlEscape="false" readonly="true"
+                               class="laydate-icondate form-control layer-date layui-input laydate-icon required"
+                               value="<fmt:formatDate value="${oaNotify.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">创建人:</label>
+                    <div class="layui-input-block">
+                        <form:input id="cBName" path="createBy.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="office" path="office.name" htmlEscape="false" readonly="true"
+                                    class="form-control  layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12" style="padding-bottom: 20px;">
+                    <label class="layui-form-label"><span class="require-item">*</span>内容:</label>
+                    <div class="layui-input-block">
+                        <div class="wrapForm">
+                            <div class="mask">
+                                <form:textarea path="contents" disabled="true" htmlEscape="false" colspan="3" rows="6" maxlength="550"
+                                               class="form-control "/>
+                                <form:hidden id="content" path="content" htmlEscape="false" maxlength="64"
+                                             class="form-control required"/>
+                                <sys:ckeditorView replace="contents" uploadPath="/oa/oa"/>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+                    <div class="form-group layui-row">
+                        <div class="form-group-label"><h2>公告范围-部门</h2></div>
+                        <table id="officeTable" class="table table-bordered table-condensed details">
+                            <thead>
+                            <tr>
+                                <th>部门</th>
+                            </tr>
+                            </thead>
+                            <tbody id="officeTableList">
+                            </tbody>
+                        </table>
+                        <script type="text/template" id="officeTpl">//<!--
+                    <tr id="officeList{{idx}}">
+                        <td>
+                            {{row.name}}
+                        </td>
+                    </tr>//-->
+                        </script>
+                    </div>
+                    <div class="form-group layui-row">
+                        <div class="form-group-label"><h2>公告范围-成员</h2></div>
+                        <table id="userTable" class="table table-bordered table-condensed details">
+                            <thead>
+                            <tr>
+                                <th>姓名</th>
+                                <th>部门</th>
+                            </tr>
+                            </thead>
+                            <tbody id="userTableList">
+                            </tbody>
+                        </table>
+                        <script type="text/template" id="userTpl">//<!--
+                    <tr id="userList{{idx}}">
+                        <td>
+                        {{row.name}}
+                        </td>
+                        <td>
+                        {{row.officeName}}
+                        </td>
+                    </tr>//-->
+                        </script>
+                        <script type="text/javascript">
+                            var userIdx = 0, userTpl = $("#userTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, "");
+                            var officeIdx = 0, officeTpl = $("#officeTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, "");
+
+                            $(document).ready(function () {
+                                var data = ${fns:toJson(oaNotify.officeList)};
+                                if (data != null) {
+                                    for (var i = 0; i < data.length; i++) {
+                                        addRow('#officeTableList', officeIdx, officeTpl, data[i]);
+                                        officeIdx = officeIdx + 1;
+                                    }
+                                }
+                                var dataBank = ${fns:toJson(oaNotify.userList)};
+                                if (dataBank != null) {
+                                    for (var i = 0; i < dataBank.length; i++) {
+                                        addRow('#userTableList', userIdx, userTpl, dataBank[i]);
+                                        userIdx = userIdx + 1;
+                                    }
+                                }
+                            });
+
+                            function addRow(list, idx, tpl, row) {
+                                var idx1 = 0;
+                                if ('#userTableList' == list) {
+                                    idx1 = $("#userTableList tr").length
+                                } else if ('#officeTableList' == list) {
+                                    idx1 = $("#officeTableList 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, idx1: idx1
+                                }));
+                                $(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, idx) {
+                                $(obj).parent().parent().remove();
+                            }
+                        </script>
+                    </div>
+
+                <div class="form-group layui-row">
+                    <div class="form-group-label"><h2>公告附件</h2></div>
+                    <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="100px">操作</th>
+                            </tr>
+                            </thead>
+                            <tbody id="file_attachment">
+
+                            <c:forEach items="${oaNotify.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="${oaNotify.act.procInsId}"/>
+                    <act:histoicFlow procInsId="${oaNotify.act.procInsId}"/>
+                </div>
+            </div>
+
+            <div class="form-group layui-row page-end"></div>
+        </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 399 - 0
src/main/webapp/webpage/modules/oa/oaNotifyForm.jsp

@@ -0,0 +1,399 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>通知管理</title>
+    <meta name="decorator" content="default"/>
+    <style type="text/css">
+        img {width: 50px; height: 50px;}
+    </style>
+    <script type="text/javascript" src="${ctxStatic}/ckeditor/ckeditor.js"></script>
+    <script type="text/javascript" language="JavaScript" for="window" event="onload">
+        var validateForm;
+        function doSubmit(i){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            //var remarks = CKEDITOR.instances.content.getData();
+            var content = CKEDITOR.instances.contents.document.getBody().getText();
+            $("#content").val(content);
+            console.log(content+","+(content == null)+(content == undefined)+(content == ""));
+            if(content == null || content == undefined || content == "" || content == "\n"){
+                parent.layer.msg('公告内容不能为空',{icon:5});
+                return false;
+            }
+            if(validateForm.form()){
+                if(i==2){
+                    $("#inputForm").attr("action","${ctx}/oa/oaNotify/tstore");
+                }
+                $("#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);
+                    }
+                }
+            });
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',<%=request.getAttribute("disabled")%>);
+            laydate.render({
+                elem: '#startDate', //目标元素。由于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'
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+
+        });
+    </script>
+    <script type="text/javascript">
+        function insertTitle(tValue){
+            var list = "${oaNotify.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 = "107";
+                console.log(file);
+                var timestamp = new Date().getTime();
+
+                var storeAs = "attachment-file/oaNotify/" + 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);
+            }
+        }
+
+        function changeUser(ids,names,parents) {
+            var split = ids.split(',');
+            var split2 = names.split(',');
+            $("#userTableList").html("");
+            userIdx=0;
+            for(var i=0;i<split.length;i++){
+                var id = split[i];
+                if(id==''||id==null){
+                    continue;
+                }
+                var obj = {'id':id,'name':split2[i],'officeName':parents[i]};
+                addRow('#userTableList',userIdx,userTpl,obj);
+                userIdx+=1;
+            }
+        }
+
+        function changeOffice(ids,names,parentIds) {
+            $("#officeTableList").html("");
+            officeIdx=0;
+            for(var i=0;i<ids.length;i++){
+                var obj = {'id':ids[i],'name':parentIds[i]};
+                addRow('#officeTableList',officeIdx,officeTpl,obj);
+                officeIdx+=1;
+            }
+        }
+        function getSelectOfficeIds() {
+            var selectedIds = "";
+            var pidArr = $("#officeTableList tr .officeId");
+            for(var i=0;i<pidArr.length;i++){
+                selectedIds+=$(pidArr[i]).val();
+                selectedIds+=",";
+            }
+            return selectedIds;
+        }
+        function getSelectUserIds() {
+            var selectedIds = "";
+            var pidArr = $("#userTableList tr .userId");
+            for(var i=0;i<pidArr.length;i++){
+                selectedIds+=$(pidArr[i]).val();
+                selectedIds+=",";
+            }
+            return selectedIds;
+        }
+
+    </script>
+
+</head>
+<body >
+<div class="single-form">
+    <div class="container">
+        <form:form id="inputForm" modelAttribute="oaNotify" enctype="multipart/form-data" action="${ctx}/oa/oaNotify/save" method="post" class="form-horizontal">
+            <form:hidden path="id"/>
+            <sys:message content="${message}"/>
+
+            <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" maxlength="30" 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">
+                        <div class="input-group">
+                            <form:input path="number" htmlEscape="false" readonly="true" maxlength="30" class="form-control layui-input"/>
+                            <span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty oaNotify.status}">${fns:getDictLabel(oaNotify.status, '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:select path="type" class="form-control required simple-select">
+                            <form:options items="${fns:getMainDictList('oa_notify_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                        </form:select>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">创建日期:</label>
+                    <div class="layui-input-block">
+                        <input id="createDate" name="createDate"  htmlEscape="false" readonly="true" class="laydate-icondate form-control layer-date layui-input laydate-icon"
+                               value="<fmt:formatDate value="${oaNotify.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                    </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="startDate" name="startDate" style="background-color: #ffffff;" readonly="true" htmlEscape="false"  class="laydate-icondate form-control layer-date layui-input laydate-icon required"
+                               value="<fmt:formatDate value="${oaNotify.startDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                    </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="endDate" name="endDate" style="background-color: #ffffff;" readonly="true" htmlEscape="false"  class="laydate-icondate form-control layer-date layui-input laydate-icon required"
+                               value="<fmt:formatDate value="${oaNotify.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">创建人:</label>
+                    <div class="layui-input-block">
+                        <form:input id="cBName" path="createBy.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="office" path="office.topCompany" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12" style="padding-bottom: 20px;">
+                    <label class="layui-form-label"><span class="require-item">*</span>内容:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="contents" htmlEscape="false"  colspan="3" rows="6"  maxlength="550" class="form-control "/>
+                        <form:hidden id="content" path="content" htmlEscape="false" maxlength="64" class="form-control required"/>
+                        <sys:ckeditor replace="contents" uploadPath="/oa/oa"/>
+                    </div>
+                </div>
+            </div>
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>公告范围-部门</h2></div>
+                <div class="layui-item nav-btns">
+                    <sys:treeselectoffices id="offices" name="" value="" labelName="memberNameStr" labelValue=""
+                                           retnParent="true" checked="true" notAllowSelectParent="true" title="部门" url="/sys/office/treeData?type=2"  cssClass="form-control required" allowClear="true"/>
+                </div>
+                <table id="officeTable" class="table table-bordered table-condensed details">
+                    <thead>
+                    <tr>
+                        <th class="hide"></th>
+                        <th>部门</th>
+                        <th>操作</th>
+                    </tr>
+                    </thead>
+                    <tbody id="officeTableList">
+                    </tbody>
+                </table>
+                <script type="text/template" id="officeTpl">//<!--
+                    <tr id="officeList{{idx}}">
+                        <td class="hide">
+                            <input id="officeList{{idx}}_id" name="officeList[{{idx}}].id" readonly="true" value="{{row.id}}" type="hidden" class="form-control officeId"/>
+                        </td>
+                        <td>
+                            {{row.name}}
+                        </td>
+                        <td class="text-center op-td">
+                                    <a href=javascript:void(0); onclick="delRow(this, '#officeList{{idx}}')"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 取消</a>
+                        </td>
+                    </tr>//-->
+                </script>
+            </div>
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>公告范围-成员</h2></div>
+                <div class="layui-item nav-btns">
+                    <sys:treeselectusers id="users" name="" value="" labelName="memberNameStr" labelValue=""
+                                         retnParent="true" title="用户" url="/sys/office/treeData?type=3" checked="true" cssClass="form-control required" allowClear="true" notAllowSelectParent="true"/>
+                </div>
+                <table id="userTable" class="table table-bordered table-condensed details">
+                    <thead>
+                    <tr>
+                        <th class="hide"></th>
+                        <th>姓名</th>
+                        <th>部门</th>
+                        <th>操作</th>
+                    </tr>
+                    </thead>
+                    <tbody id="userTableList">
+                    </tbody>
+                </table>
+                <script type="text/template" id="userTpl">//<!--
+                    <tr id="userList{{idx}}">
+                        <td class="hide">
+                            <input id="userList{{idx}}_id" name="userList[{{idx}}].id" readonly="true" value="{{row.id}}" type="hidden" class="form-control userId"/>
+                        </td>
+                        <td>
+                        {{row.name}}
+                        </td>
+                        <td>
+                        {{row.officeName}}
+                        </td>
+                        <td class="text-center op-td">
+                                    <a href=javascript:void(0); onclick="delRow(this, '#userList{{idx}}')"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 取消</a>
+                        </td>
+                    </tr>//-->
+                </script>
+                <script type="text/javascript">
+                    var userIdx = 0, userTpl = $("#userTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                    var officeIdx = 0, officeTpl = $("#officeTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+
+                    $(document).ready(function() {
+                        var data = ${fns:toJson(oaNotify.officeList)};
+                        if (data!=null) {
+                            for (var i = 0; i < data.length; i++) {
+                                addRow('#officeTableList', officeIdx, officeTpl, data[i]);
+                                officeIdx = officeIdx + 1;
+                            }
+                        }
+                        var dataBank = ${fns:toJson(oaNotify.userList)};
+                        if (dataBank!=null) {
+                            for (var i = 0; i < dataBank.length; i++) {
+                                addRow('#userTableList', userIdx, userTpl, dataBank[i]);
+                                userIdx = userIdx + 1;
+                            }
+                        }
+                    });
+
+                    function addRow(list, idx, tpl, row){
+                        var idx1 = 0;
+                        if('#userTableList'==list){
+                            idx1 = $("#userTableList tr").length
+                        }else if('#officeTableList'==list){
+                            idx1 = $("#officeTableList 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, idx1:idx1
+                        }));
+                        $(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,idx){
+                        $(obj).parent().parent().remove();
+                    }
+                </script>
+            </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="${oaNotify.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>
+            <div class="form-group layui-row page-end"></div>
+        </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 393 - 0
src/main/webapp/webpage/modules/oa/oaNotifyList.jsp

@@ -0,0 +1,393 @@
+<%@ 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" src="${ctxStatic}/ckeditor/ckeditor.js"></script>
+	<script type="text/javascript">
+
+		$(function () {
+			$(".btn btn-white btn-sm").bind("click",function () {
+
+            })
+        });
+
+        $(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: '#createStartDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'datetime'
+            });
+            laydate.render({
+                elem: '#createEndDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'datetime'
+            });
+        });
+
+        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>
+
+	<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="oaNotify" action="${ctx}/oa/oaNotify/${oaNotify.self?'self':''}" 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 with-icon">
+							<form:input path="title" htmlEscape="false" maxlength="200"  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:select path="type"  class="form-control simple-select">
+								<form:option value="" label=""/>
+								<form:options items="${fns:getMainDictList('oa_notify_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+							</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">
+						<label class="layui-form-label">公告编号:</label>
+						<div class="layui-input-block with-icon">
+							<form:input path="number" htmlEscape="false" maxlength="200"  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 class="form-control layer-date laydate-icon layui-input laydate-icondate" id="createStartDate" name="createStartDate" value="<fmt:formatDate value="${oaNotify.createStartDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+						</div>
+					</div>
+					<div class="layui-item query athird">
+						<label class="layui-form-label">——&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label>
+						<div class="layui-input-block">
+							<input class="form-control layer-date laydate-icon layui-input laydate-icondate" id="createEndDate" name="createEndDate" value="<fmt:formatDate value="${oaNotify.createEndDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+						</div>
+					</div>
+					<div class="layui-item query athird">
+						<label class="layui-form-label">公告内容:</label>
+						<div class="layui-input-block with-icon">
+							<form:input path="content" htmlEscape="false" maxlength="200"  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="createBy.name" htmlEscape="false" maxlength="200"  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:radiobuttons path="status" class="i-checks" items="${fns:getDictList('oa_notify_status')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+						</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">
+					<shiro:hasPermission name="oa:oaNotify:add">
+						<table:addRow url="${ctx}/oa/oaNotify/form" title="通知" height="95%;" width="95%;"></table:addRow><!-- 增加按钮 -->
+					</shiro:hasPermission>
+					<shiro:hasPermission name="oa:oaNotify:import">
+						<table:importExcel url="${ctx}/oa/oaNotify/import"></table:importExcel><!-- 导入按钮 -->
+					</shiro:hasPermission>
+					<shiro:hasPermission name="oa:oaNotify:export">
+						<table:exportExcel url="${ctx}/oa/oaNotify/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',  width:40,title: '序号'}
+                ,{field:'number',align:'center', title: '公告编号', minWidth:150,templet:function(d){
+                    var xml = "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看公告', '${ctx}/oa/oaNotify/form?id=" + d.id + "&view=view','95%','95%')\">" +
+                        "<span title=" + d.number + ">" + d.number + "</span></a>";
+                    return xml;
+                }}
+                ,{field:'title',align:'center', title: '公告标题', minWidth:150,templet:function(d){
+                    var xml = "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看公告', '${ctx}/oa/oaNotify/form?id=" + d.id + "&view=view','95%','95%')\">" +
+                        "<span title=" + d.title + ">" + d.title + "</span></a>";
+                    return xml;
+                }}
+                ,{field:'type',align:'center', title: '公告类型', width:80}
+                ,{field:'content',align:'center', title: '公告内容', minWidth:200,templet:function(d){
+                    return "<span title='"+ d.content +"'>" + d.content + "</span>";
+                }}
+                ,{field:'startDate', align:'center',title: '开始时间',width:150}
+                ,{field:'endDate', align:'center',title: '结束时间',width:150}
+                /*,{field:'vtatus', align:'center',title: '查阅状态', width:80}*/
+                ,{field:'createBy', align:'center',title: '创建人', width:80,templet:function(d){
+                        return "<span title='"+ d.createBy +"'>" + d.createBy + "</span>";
+                    }}
+                ,{field:'createDate', align:'center',title: '创建时间',width:150}
+                ,{align:'center', title: '公告状态',  width:70,templet:function(d){
+                        var st = getAuditState(d.status)
+                        var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/oa/oaNotify/getProcess?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        return xml;
+                    }}
+                // ,{fixed: 'right',align:'center', toolbar: '#op',title:"操作"}
+                ,{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}/oa/oaNotify/form?id="+ d.id +"','95%', '95%')\"   class=\"op-btn op-btn-edit\"><i class=\"fa fa-edit\"></i> 修改</a>";
+                        if(d.candel != undefined && d.candel == "1")
+                            xml += "<a href=\"${ctx}/oa/oaNotify/delete?id="+ d.id +"\" onclick=\"return confirmx('确认要关闭该公告吗?', this.href)\"   class=\"op-btn op-btn-delete\"><i class=\"fa fa-trash\"></i> 关闭</a>";
+                        if(d.canmodify != undefined && d.canmodify =="1"){
+                            xml+="<a href=\"#\" onclick=\"openDialogre('修改公告', '${ctx}/oa/oaNotify/modify?id=" + d.id + "','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.cancancel != undefined && d.cancancel =="1"){
+                            xml+="<a href=\"${ctx}/oa/oaNotify/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>";
+                        }
+                        if(d.canrecall != undefined && d.canrecall =="1"){
+                            xml+="<a href=\"#\" onclick=\"openDialogre('修改公告', '${ctx}/oa/oaNotify/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}/oa/oaNotify/logicDelete?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="oaNotify" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${oaNotify.id}"
+                    ,"number":"${oaNotify.number}"
+                    ,"title":"<c:out value="${oaNotify.title}" escapeXml="true"/>"
+                    ,"type":"${fns:getMainDictLabel(oaNotify.type, 'oa_notify_type', '')}"
+                    ,"content":"<c:out value="${oaNotify.content}" escapeXml="true"/>"
+                    ,"status":"${oaNotify.status}"
+    				,"startDate":"<fmt:formatDate value="${oaNotify.startDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
+            		,"endDate":"<fmt:formatDate value="${oaNotify.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
+                    ,"vtatus":"${oaNotify.readNum} / ${oaNotify.readNum + oaNotify.unReadNum}"
+                    ,"createBy":"${oaNotify.createBy.name}"
+                    ,"createDate":"<fmt:formatDate value="${oaNotify.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
+                    ,"procId":"${oaNotify.processInstanceId}"
+					<c:if test="${not empty oaNotify.candel}">,"candel":"1"</c:if>
+
+                    <shiro:hasPermission name="oa:oaNotify:edit">,"canedit":<c:choose><c:when test="${oaNotify.status == 1}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    ,"canmodify":<c:choose><c:when test="${oaNotify.status == 4}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    ,"canrecall":<c:choose><c:when test="${oaNotify.status == 3}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    </shiro:hasPermission>
+                    <shiro:hasPermission name="oa:oaNotify:del">,"candelete":<c:choose><c:when test="${oaNotify.status == 1 or oaNotify.status == 3 or oaNotify.status == 4}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose></shiro:hasPermission>
+                    ,"cancancel":<c:choose><c:when test="${oaNotify.status == 2 }">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+
+    resizeListTable();
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+</body>
+</html>

+ 213 - 0
src/main/webapp/webpage/modules/oa/oaNotifyListMyself.jsp

@@ -0,0 +1,213 @@
+<%@ 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" src="${ctxStatic}/ckeditor/ckeditor.js"></script>
+	<script type="text/javascript">
+
+		$(function () {
+			$(".btn btn-white btn-sm").bind("click",function () {
+
+            })
+        });
+        $(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: '#createStartDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'datetime'
+            });
+            laydate.render({
+                elem: '#createEndDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'datetime'
+            });
+        });
+	</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 layui-row" id="queryDiv">
+			<form:form id="searchForm" modelAttribute="oaNotify" action="${ctx}/oa/oaNotify/self" 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 with-icon">
+							<form:input path="title" htmlEscape="false" maxlength="200"  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:select path="type"  class="form-control simple-select">
+								<form:option value="" label=""/>
+								<form:options items="${fns:getMainDictList('oa_notify_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+							</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">
+						<label class="layui-form-label">公告编号:</label>
+						<div class="layui-input-block with-icon">
+							<form:input path="number" htmlEscape="false" maxlength="200"  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 class="form-control layer-date laydate-icon layui-input laydate-icondate" id="createStartDate" name="createStartDate" value="<fmt:formatDate value="${oaNotify.createStartDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+						</div>
+					</div>
+					<div class="layui-item query athird">
+						<label class="layui-form-label">——&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label>
+						<div class="layui-input-block">
+							<input class="form-control layer-date laydate-icon layui-input laydate-icondate" id="createEndDate" name="createEndDate" value="<fmt:formatDate value="${oaNotify.createEndDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+						</div>
+					</div>
+					<div class="layui-item query athird">
+						<label class="layui-form-label">公告内容:</label>
+						<div class="layui-input-block with-icon">
+							<form:input path="content" htmlEscape="false" maxlength="200"  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="createBy.name" htmlEscape="false" maxlength="200"  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:radiobuttons path="status" class="i-checks" items="${fns:getDictList('oa_notify_status')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+						</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>
+					<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',  width:40,title: '序号'}
+                ,{field:'number',align:'center', title: '公告编号', minWidth:150,templet:function(d){
+                    var xml = "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看公告', '${ctx}/oa/oaNotify/form?id=" + d.id + "&view=view','95%','95%')\">" +
+                        "<span title=" + d.number + ">" + d.number + "</span></a>";
+                    return xml;
+                }}
+                ,{field:'title',align:'center', title: '公告标题', minWidth:150,templet:function(d){
+                    var xml = "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看公告', '${ctx}/oa/oaNotify/form?id=" + d.id + "&view=view','95%','95%')\">" +
+                        "<span title=" + d.title + ">" + d.title + "</span></a>";
+                    return xml;
+                }}
+                ,{field:'type',align:'center', title: '公告类型', width:80}
+                ,{field:'content',align:'center', title: '公告内容', minWidth:200,templet:function(d){
+                    return "<span title='"+ d.title +"'>" + d.title + "</span>";
+                }}
+                ,{field:'status',align:'center', title: '公告状态', width:80}
+                ,{field:'startDate', align:'center',title: '开始时间',width:150}
+                ,{field:'endDate', align:'center',title: '结束时间',width:150}
+                /*,{field:'vtatus', align:'center',title: '查阅状态', width:80}*/
+                ,{field:'createBy', align:'center',title: '创建人', width:80,templet:function(d){
+                    return "<span title='"+ d.createBy +"'>" + d.createBy + "</span>";
+                }}
+                ,{field:'createDate', align:'center',title: '创建时间',width:150}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="oaNotify" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${oaNotify.id}"
+                    ,"number":"${oaNotify.number}"
+                    ,"title":"<c:out value="${oaNotify.title}" escapeXml="true"/>"
+                    ,"type":"${fns:getMainDictLabel(oaNotify.type, 'oa_notify_type', '')}"
+                    ,"content":"<c:out value="${oaNotify.content}" escapeXml="true"/>"
+                    ,"status":"${fns:getDictLabel(oaNotify.status, 'oa_notify_status', '')}"
+                    ,"startDate":"<fmt:formatDate value="${oaNotify.startDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
+                    ,"endDate":"<fmt:formatDate value="${oaNotify.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
+                    /*,"vtatus":"${oaNotify.readNum} / ${oaNotify.readNum + oaNotify.unReadNum}"*/
+                    ,"createBy":"${oaNotify.createBy.name}"
+                    ,"createDate":"<fmt:formatDate value="${oaNotify.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+
+    resizeListTable();
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+</body>
+</html>

+ 400 - 0
src/main/webapp/webpage/modules/oa/oaNotifyModifyApply.jsp

@@ -0,0 +1,400 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>通知管理</title>
+    <meta name="decorator" content="default"/>
+    <style type="text/css">
+        img {width: 50px; height: 50px;}
+    </style>
+    <script type="text/javascript" src="${ctxStatic}/ckeditor/ckeditor.js"></script>
+    <script type="text/javascript" language="JavaScript" for="window" event="onload">
+        var validateForm;
+        function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            var content = CKEDITOR.instances.contents.document.getBody().getText();
+            $("#content").val(content);
+            if(content == null || content == undefined || content == "" || content == "\n"){
+                parent.layer.msg('公告内容不能为空',{icon:5});
+                return false;
+            }
+            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);
+                    }
+                }
+            });
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',<%=request.getAttribute("disabled")%>);
+            laydate.render({
+                elem: '#startDate', //目标元素。由于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'
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+
+        });
+    </script>
+    <script type="text/javascript">
+        function insertTitle(tValue){
+            var list = "${oaNotify.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 = "107";
+                console.log(file);
+                var timestamp = new Date().getTime();
+
+                var storeAs = "attachment-file/oaNotify/" + 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);
+            }
+        }
+
+        function changeUser(ids,names,parents) {
+            var split = ids.split(',');
+            var split2 = names.split(',');
+            $("#userTableList").html("");
+            userIdx=0;
+            for(var i=0;i<split.length;i++){
+                var id = split[i];
+                if(id==''||id==null){
+                    continue;
+                }
+                var obj = {'id':id,'name':split2[i],'officeName':parents[i]};
+                addRow('#userTableList',userIdx,userTpl,obj);
+                userIdx+=1;
+            }
+        }
+
+        function changeOffice(ids,names,parentIds) {
+            $("#officeTableList").html("");
+            officeIdx=0;
+            for(var i=0;i<ids.length;i++){
+                var obj = {'id':ids[i],'name':parentIds[i]};
+                addRow('#officeTableList',officeIdx,officeTpl,obj);
+                officeIdx+=1;
+            }
+        }
+        function getSelectOfficeIds() {
+            var selectedIds = "";
+            var pidArr = $("#officeTableList tr .officeId");
+            for(var i=0;i<pidArr.length;i++){
+                selectedIds+=$(pidArr[i]).val();
+                selectedIds+=",";
+            }
+            return selectedIds;
+        }
+        function getSelectUserIds() {
+            var selectedIds = "";
+            var pidArr = $("#userTableList tr .userId");
+            for(var i=0;i<pidArr.length;i++){
+                selectedIds+=$(pidArr[i]).val();
+                selectedIds+=",";
+            }
+            return selectedIds;
+        }
+
+    </script>
+
+</head>
+<body >
+<div class="single-form">
+    <div class="container">
+        <form:form id="inputForm" modelAttribute="oaNotify" enctype="multipart/form-data" action="${ctx}/oa/oaNotify/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" maxlength="30" 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">
+                        <div class="input-group">
+                            <form:input path="number" htmlEscape="false" readonly="true" maxlength="30" class="form-control layui-input"/>
+                            <span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty oaNotify.status}">${fns:getDictLabel(oaNotify.status, '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:select path="type" class="form-control required simple-select">
+                            <form:options items="${fns:getMainDictList('oa_notify_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                        </form:select>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">创建日期:</label>
+                    <div class="layui-input-block">
+                        <input id="createDate" name="createDate"  htmlEscape="false" readonly="true" class="laydate-icondate form-control layer-date layui-input laydate-icon"
+                               value="<fmt:formatDate value="${oaNotify.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                    </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="startDate" name="startDate" style="background-color: #ffffff;" readonly="true" htmlEscape="false"  class="laydate-icondate form-control layer-date layui-input laydate-icon required"
+                               value="<fmt:formatDate value="${oaNotify.startDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                    </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="endDate" name="endDate" style="background-color: #ffffff;" readonly="true" htmlEscape="false"  class="laydate-icondate form-control layer-date layui-input laydate-icon required"
+                               value="<fmt:formatDate value="${oaNotify.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">创建人:</label>
+                    <div class="layui-input-block">
+                        <form:input id="cBName" path="createBy.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="office" path="office.name" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12" style="padding-bottom: 20px;">
+                    <label class="layui-form-label"><span class="require-item">*</span>内容:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="contents" htmlEscape="false"  colspan="3" rows="6"  maxlength="550" class="form-control "/>
+                        <form:hidden id="content" path="content" htmlEscape="false" maxlength="64" class="form-control required"/>
+                        <sys:ckeditor replace="contents" uploadPath="/oa/oa"/>
+                    </div>
+                </div>
+            </div>
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>公告范围-部门</h2></div>
+                <div class="layui-item nav-btns">
+                    <sys:treeselectoffices id="offices" name="" value="" labelName="memberNameStr" labelValue=""
+                                           retnParent="true" checked="true" notAllowSelectParent="true" title="部门" url="/sys/office/treeData?type=2"  cssClass="form-control required" allowClear="true"/>
+                </div>
+                <table id="officeTable" class="table table-bordered table-condensed details">
+                    <thead>
+                    <tr>
+                        <th class="hide"></th>
+                        <th>部门</th>
+                        <th>操作</th>
+                    </tr>
+                    </thead>
+                    <tbody id="officeTableList">
+                    </tbody>
+                </table>
+                <script type="text/template" id="officeTpl">//<!--
+                    <tr id="officeList{{idx}}">
+                        <td class="hide">
+                            <input id="officeList{{idx}}_id" name="officeList[{{idx}}].id" readonly="true" value="{{row.id}}" type="hidden" class="form-control officeId"/>
+                        </td>
+                        <td>
+                            {{row.name}}
+                        </td>
+                        <td class="text-center op-td">
+                                    <a href=javascript:void(0); onclick="delRow(this, '#officeList{{idx}}')"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 取消</a>
+                        </td>
+                    </tr>//-->
+                </script>
+            </div>
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>公告范围-成员</h2></div>
+                <div class="layui-item nav-btns">
+                    <sys:treeselectusers id="users" name="" value="" labelName="memberNameStr" labelValue=""
+                                         retnParent="true" title="用户" url="/sys/office/treeData?type=3" checked="true" cssClass="form-control required" allowClear="true" notAllowSelectParent="true"/>
+                </div>
+                <table id="userTable" class="table table-bordered table-condensed details">
+                    <thead>
+                    <tr>
+                        <th class="hide"></th>
+                        <th>姓名</th>
+                        <th>部门</th>
+                        <th>操作</th>
+                    </tr>
+                    </thead>
+                    <tbody id="userTableList">
+                    </tbody>
+                </table>
+                <script type="text/template" id="userTpl">//<!--
+                    <tr id="userList{{idx}}">
+                        <td class="hide">
+                            <input id="userList{{idx}}_id" name="userList[{{idx}}].id" readonly="true" value="{{row.id}}" type="hidden" class="form-control userId"/>
+                        </td>
+                        <td>
+                        {{row.name}}
+                        </td>
+                        <td>
+                        {{row.officeName}}
+                        </td>
+                        <td class="text-center op-td">
+                                    <a href=javascript:void(0); onclick="delRow(this, '#userList{{idx}}')"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 取消</a>
+                        </td>
+                    </tr>//-->
+                </script>
+                <script type="text/javascript">
+                    var userIdx = 0, userTpl = $("#userTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                    var officeIdx = 0, officeTpl = $("#officeTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+
+                    $(document).ready(function() {
+                        var data = ${fns:toJson(oaNotify.officeList)};
+                        if (data!=null) {
+                            for (var i = 0; i < data.length; i++) {
+                                addRow('#officeTableList', officeIdx, officeTpl, data[i]);
+                                officeIdx = officeIdx + 1;
+                            }
+                        }
+                        var dataBank = ${fns:toJson(oaNotify.userList)};
+                        if (dataBank!=null) {
+                            for (var i = 0; i < dataBank.length; i++) {
+                                addRow('#userTableList', userIdx, userTpl, dataBank[i]);
+                                userIdx = userIdx + 1;
+                            }
+                        }
+                    });
+
+                    function addRow(list, idx, tpl, row){
+                        var idx1 = 0;
+                        if('#userTableList'==list){
+                            idx1 = $("#userTableList tr").length
+                        }else if('#officeTableList'==list){
+                            idx1 = $("#officeTableList 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, idx1:idx1
+                        }));
+                        $(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,idx){
+                        $(obj).parent().parent().remove();
+                    }
+                </script>
+            </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="${oaNotify.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>
+            <div class="form-group layui-row page-end"></div>
+        </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 335 - 0
src/main/webapp/webpage/modules/oa/oaNotifyView.jsp

@@ -0,0 +1,335 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp" %>
+<html>
+<head>
+    <title>通知管理</title>
+    <meta name="decorator" content="default"/>
+</head>
+<body>
+<style>
+    .wrapForm {
+        width: 100%;
+        height: 530px;
+        margin-top: -93px;
+    }
+    .mask{
+        width: 100%;
+        height:100%;
+    }
+    .layui-input-block{
+        border-top: 1px solid #cccccc;
+        overflow: hidden;
+        border-radius: 3px;
+    }
+</style>
+<div class="single-form">
+    <div class="container view-form">
+        <form:form id="inputForm" modelAttribute="oaNotify" class="form-horizontal">
+        <form:hidden path="id"/>
+        <sys:message content="${message}"/>
+
+        <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">
+                    <input htmlEscape="false" readonly="true" maxlength="30" class="form-control required layui-input"
+                           value="${oaNotify.title}"/>
+                </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" maxlength="30" class="form-control layui-input"/>
+                        <span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty oaNotify.status}">${fns:getDictLabel(oaNotify.status, '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">公告类型:</label>
+                <div class="layui-input-block">
+                    <input htmlEscape="false" readonly="true" maxlength="30" class="form-control required layui-input"
+                           value="${fns:getMainDictLabel(oaNotify.type, 'oa_notify_type', '')}"/>
+                </div>
+            </div>
+            <div class="layui-item layui-col-sm6">
+                <label class="layui-form-label">创建日期:</label>
+                <div class="layui-input-block">
+                    <input id="createDate" name="createDate" htmlEscape="false" readonly="true"
+                           class="laydate-icondate form-control layer-date layui-input laydate-icon"
+                           value="<fmt:formatDate value="${oaNotify.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                </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" htmlEscape="false" readonly="true"
+                           class="laydate-icondate form-control layer-date layui-input laydate-icon required"
+                           value="<fmt:formatDate value="${oaNotify.startDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                </div>
+            </div>
+            <div class="layui-item layui-col-sm6">
+                <label class="layui-form-label">结束日期:</label>
+                <div class="layui-input-block">
+                    <input id="endDate" name="endDate" htmlEscape="false" readonly="true"
+                           class="laydate-icondate form-control layer-date layui-input laydate-icon required"
+                           value="<fmt:formatDate value="${oaNotify.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                </div>
+            </div>
+            <div class="layui-item layui-col-sm6">
+                <label class="layui-form-label">创建人:</label>
+                <div class="layui-input-block">
+                    <form:input id="cBName" path="createBy.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="office" path="office.name" htmlEscape="false" readonly="true"
+                                class="form-control  layui-input"/>
+                </div>
+            </div>
+            <div class="layui-item layui-col-sm12" style="padding-bottom: 20px;">
+                <label class="layui-form-label"><span class="require-item">*</span>内容:</label>
+                <div class="layui-input-block">
+                    <div class="wrapForm">
+                        <div class="mask">
+                            <form:textarea path="contents" disabled="true" htmlEscape="false" colspan="3" rows="6" maxlength="550"
+                                           class="form-control "/>
+                            <form:hidden id="content" path="content" htmlEscape="false" maxlength="64"
+                                         class="form-control required"/>
+                            <sys:ckeditorView replace="contents" uploadPath="/oa/oa"/>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <c:if test="${oaNotify.createBy.id eq fns:getUser().id}">
+                <div class="form-group layui-row">
+                    <div class="form-group-label"><h2>公告范围-部门</h2></div>
+                    <table id="officeTable" class="table table-bordered table-condensed details">
+                        <thead>
+                        <tr>
+                            <th>部门</th>
+                        </tr>
+                        </thead>
+                        <tbody id="officeTableList">
+                        </tbody>
+                    </table>
+                    <script type="text/template" id="officeTpl">//<!--
+                    <tr id="officeList{{idx}}">
+                        <td>
+                            {{row.name}}
+                        </td>
+                    </tr>//-->
+                    </script>
+                </div>
+                <div class="form-group layui-row">
+                    <div class="form-group-label"><h2>公告范围-成员</h2></div>
+                    <table id="userTable" class="table table-bordered table-condensed details">
+                        <thead>
+                        <tr>
+                            <th>姓名</th>
+                            <th>部门</th>
+                        </tr>
+                        </thead>
+                        <tbody id="userTableList">
+                        </tbody>
+                    </table>
+                    <script type="text/template" id="userTpl">//<!--
+                    <tr id="userList{{idx}}">
+                        <td>
+                        {{row.name}}
+                        </td>
+                        <td>
+                        {{row.officeName}}
+                        </td>
+                    </tr>//-->
+                    </script>
+                    <script type="text/javascript">
+                        var userIdx = 0, userTpl = $("#userTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, "");
+                        var officeIdx = 0, officeTpl = $("#officeTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, "");
+
+                        $(document).ready(function () {
+                            var data = ${fns:toJson(oaNotify.officeList)};
+                            if (data != null) {
+                                for (var i = 0; i < data.length; i++) {
+                                    addRow('#officeTableList', officeIdx, officeTpl, data[i]);
+                                    officeIdx = officeIdx + 1;
+                                }
+                            }
+                            var dataBank = ${fns:toJson(oaNotify.userList)};
+                            if (dataBank != null) {
+                                for (var i = 0; i < dataBank.length; i++) {
+                                    addRow('#userTableList', userIdx, userTpl, dataBank[i]);
+                                    userIdx = userIdx + 1;
+                                }
+                            }
+                        });
+
+                        function addRow(list, idx, tpl, row) {
+                            var idx1 = 0;
+                            if ('#userTableList' == list) {
+                                idx1 = $("#userTableList tr").length
+                            } else if ('#officeTableList' == list) {
+                                idx1 = $("#officeTableList 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, idx1: idx1
+                            }));
+                            $(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, idx) {
+                            $(obj).parent().parent().remove();
+                        }
+                    </script>
+                </div>
+            </c:if>
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>公告附件</h2></div>
+                <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="100px">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="file_attachment">
+
+                        <c:forEach items="${oaNotify.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>
+            <!--在“我的公告”中只能查看到个人接收的,只改变未读状态为已读,不显示所有的查看状态;
+            在“公告管理”中只有管理员权限才能查看,显示该条公告的所有查看状态;
+            -->
+                <%-- <c:choose>
+                     <c:when test="${toReadMyNotify}">
+                     </c:when>
+                     <c:otherwise>
+                         <!-- 发布状态 -->
+                         <c:if test="${oaNotify.status eq '1'}">
+                         <div class="form-group layui-row">
+                             <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">
+                                     <input htmlEscape="false" readonly="true" class="form-control required layui-input" value="${oaNotify.readNum}"/>
+                                 </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 required layui-input" value="${oaNotify.unReadNum}"/>
+                                 </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 required layui-input" value="${oaNotify.readNum + oaNotify.unReadNum}"/>
+                                 </div>
+                             </div>
+                             <div class="layui-item layui-col-xs12" style="padding:0 16px;">
+                                 <table id="contentTable" class="table table-bordered table-condensed details">
+                                     <thead>
+                                     <tr>
+                                         <th>接受人</th>
+                                         <th>接受部门</th>
+                                         <th>阅读状态</th>
+                                         <th>阅读时间</th>
+                                     </tr>
+                                     </thead>
+                                     <tbody>
+                                     <c:forEach items="${oaNotify.oaNotifyRecordList}" var="oaNotifyRecord">
+                                         <tr>
+                                             <td>
+                                                     ${oaNotifyRecord.user.name}
+                                             </td>
+                                             <td>
+                                                     ${oaNotifyRecord.user.office.name}
+                                             </td>
+                                             <td>
+                                                     ${fns:getDictLabel(oaNotifyRecord.readFlag, 'oa_notify_read', '')}
+                                             </td>
+                                             <td>
+                                                 <fmt:formatDate value="${oaNotifyRecord.readDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                                             </td>
+                                         </tr>
+                                     </c:forEach>
+                                     </tbody>
+                                 </table>
+                             </div>
+                         </div>
+                         </c:if>
+                     </c:otherwise>
+                 </c:choose>--%>
+            <div class="form-group layui-row page-end"></div>
+            </form:form>
+        </div>
+    </div>
+</body>
+</html>

+ 82 - 0
src/main/webapp/webpage/modules/oa/reportCalendarDetails.jsp

@@ -0,0 +1,82 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+
+<html>
+<head>
+    <title>管理日历每日统计</title>
+    <meta name="decorator" content="default"/>
+    <style type="text/css">
+        img{width: 50px; height: 50px;}
+    </style>
+    <script type="text/javascript">
+        $(function () {
+            $("img").each(function () {
+                var num = 1 ;
+
+                $(this).click(function () {
+                    var flag = num%2;
+                    if(flag == 1){
+                        $(this).css("width","100%");
+                        $(this).css("height","100%");
+                        num++;
+                    }else if(flag ==0){
+                        $(this).css("width","50px");
+                        $(this).css("height","50px");
+                        num++;
+                    }
+                })
+            });
+        })
+    </script>
+</head>
+<body class="gray-bg">
+<div class="wrapper wrapper-content">
+    <div class="ibox">
+        <div class="ibox-content">
+        <table class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+            <tr>
+                <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;" class="">创建时间</th>
+                <th style="text-align: center;" class="">更新时间</th>
+                <th style="text-align: center;" class="">详情</th>
+            </tr>
+            <!-- 工作日志-->
+            <c:if test="${!empty list}">
+                <c:forEach items="${list}" var="wr" varStatus="id_workReport">
+                    <tr>
+                        <td hidden="hidden">
+                                ${wr.userId}
+                        </td>
+                        <td>
+                            <img src="${wr.photo}" >
+                        </td>
+                        <td>
+                                ${wr.userName}
+                        </td>
+                        <td>
+                            工作日志
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${wr.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <fmt:formatDate value="${wr.updateDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <a onclick="openDialogView('查看工作报告', '${ctx}/work/report/workReport/form?id=${wr.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs"><i class="fa fa-search-plus"></i>查看详情</a>
+                            </div>
+                            <%--<input value="${wr.workReportBean.id}" hidden="hidden">--%>
+                        </td>
+                    </tr>
+                </c:forEach>
+            </c:if>
+
+        </table>
+        </div>
+    </div>
+</div>
+</body>
+</html>

+ 152 - 0
src/main/webapp/webpage/modules/oa/testAuditAudit.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() {
+			$("#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="wrapper wrapper-content">
+	<div class="ibox">
+	<div class="ibox-title">
+		<h5><shiro:hasPermission name="oa:testAudit:edit">${testAudit.act.taskName}</shiro:hasPermission><shiro:lacksPermission name="oa:testAudit:edit">查看</shiro:lacksPermission> </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">
+	<form:form id="inputForm" modelAttribute="testAudit" action="${ctx}/oa/testAudit/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>${testAudit.act.taskName}</legend>
+			<table id="contentTable" class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+				<tr>
+					<td class="tit">姓名</td><td>${testAudit.user.name}</td>
+					<td class="tit">部门</td><td>${testAudit.office.name}</td>
+					<td class="tit">岗位职级</td><td>${testAudit.post}</td>
+				</tr>
+				<tr>
+					<td class="tit">调整原因</td>
+					<td colspan="5">${testAudit.content}</td>
+				</tr>
+				<tr>
+					<td class="tit" rowspan="3">调整原因</td>
+					<td class="tit">薪酬档级</td>
+					<td>${testAudit.olda}</td>
+					<td class="tit" rowspan="3">拟调整标准</td>
+					<td class="tit">薪酬档级</td>
+					<td>${testAudit.newa}</td>
+				</tr>
+				<tr>
+					<td class="tit">月工资额</td>
+					<td>${testAudit.oldb}</td>
+					<td class="tit">月工资额</td>
+					<td>${testAudit.newb}</td>
+				</tr>
+				<tr>
+					<td class="tit">年薪金额</td>
+					<td>${testAudit.oldc}</td>
+					<td class="tit">年薪金额</td>
+					<td>${testAudit.newc}</td>
+				</tr>
+				<tr>
+					<td class="tit">月增资</td>
+					<td colspan="2">${testAudit.addNum}</td>
+					<td class="tit">执行时间</td>
+					<td colspan="2">${testAudit.exeDate}</td>
+				</tr>
+				<tr>
+					<td class="tit">人力资源部意见</td>
+					<td colspan="5">
+						${testAudit.hrText}
+					</td>
+				</tr>
+				<tr>
+					<td class="tit">分管领导意见</td>
+					<td colspan="5">
+						${testAudit.leadText}
+					</td>
+				</tr>
+				<tr>
+					<td class="tit">集团主要领导意见</td>
+					<td colspan="5">
+						${testAudit.mainLeadText}
+					</td>
+				</tr>
+				<tr>
+					<td class="tit">您的意见</td>
+					<td colspan="5">
+						<form:textarea path="act.comment" class="form-control required" rows="5" maxlength="20"/>
+					</td>
+				</tr>
+			</table>
+		</fieldset>
+		<div class="form-actions">
+				<c:if test="${testAudit.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="${testAudit.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="${testAudit.act.procInsId}"/>
+		<act:histoicFlow procInsId="${testAudit.act.procInsId}" />
+	</form:form>
+	
+	</div>
+	</div>
+	</div>
+</body>
+</html>

+ 152 - 0
src/main/webapp/webpage/modules/oa/testAuditForm.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() {
+			$("#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="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">
+	<form:form id="inputForm" modelAttribute="testAudit" action="${ctx}/oa/testAudit/save" 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}"/>
+			<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+				<tr>
+					<td class="tit">姓名</td><td>
+						<sys:treeselect id="user" name="user.id" value="${testAudit.user.id}" labelName="user.name" labelValue="${testAudit.user.name}" 
+							title="用户" url="/sys/office/treeData?type=3" cssClass="form-control required"
+							allowClear="true" notAllowSelectParent="true"/>
+					</td><td class="tit">部门</td><td>
+						<sys:treeselect id="office" name="office.id" value="${testAudit.office.id}" labelName="office.name" labelValue="${testAudit.office.name}" 
+							title="用户" url="/sys/office/treeData?type=2" cssClass="form-control required"
+							allowClear="true" notAllowSelectParent="true" />
+					</td><td class="tit">岗位职级</td><td>
+						<form:input path="post" htmlEscape="false" class="form-control " maxlength="50"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="tit">调整原因</td>
+					<td colspan="5">
+						<form:textarea path="content"  rows="5" maxlength="200" class="form-control required"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="tit" rowspan="3">调整原因</td>
+					<td class="tit" width="15%">薪酬档级</td>
+					<td><form:input path="olda" class="form-control" htmlEscape="false" maxlength="50"/></td>
+					<td class="tit" width="15%" rowspan="3">拟调整标准</td>
+					<td class="tit" width="15%">薪酬档级</td>
+					<td><form:input path="newa" class="form-control" htmlEscape="false" maxlength="50"/></td>
+				</tr>
+				<tr>
+					<td class="tit">月工资额</td>
+					<td><form:input path="oldb" class="form-control" htmlEscape="false" maxlength="50"/></td>
+					<td class="tit">月工资额</td>
+					<td><form:input path="newb" class="form-control" htmlEscape="false" maxlength="50"/></td>
+				</tr>
+				<tr>
+					<td class="tit">年薪金额</td>
+					<td><form:input path="oldc" class="form-control" htmlEscape="false" maxlength="50"/></td>
+					<td class="tit">年薪金额</td>
+					<td><form:input path="newc" class="form-control" htmlEscape="false" maxlength="50"/></td>
+				</tr>
+				<tr>
+					<td class="tit">月增资</td>
+					<td colspan="2"><form:input path="addNum" class="form-control" htmlEscape="false" maxlength="50"/></td>
+					<td class="tit">执行时间</td>
+					<td colspan="2"><form:input path="exeDate" class="form-control" htmlEscape="false" maxlength="50"/></td>
+				</tr>
+				<tr>
+					<td class="tit">人力资源部意见</td>
+					<td colspan="5">
+						${testAudit.hrText}
+					</td>
+				</tr>
+				<tr>
+					<td class="tit">分管领导意见</td>
+					<td colspan="5">
+						${testAudit.leadText}
+					</td>
+				</tr>
+				<tr>
+					<td class="tit">集团主要领导意见</td>
+					<td colspan="5">
+						${testAudit.mainLeadText}
+					</td>
+				</tr>
+			</table>
+		<div class="form-actions">
+				<input id="btnSubmit" class="btn btn-primary" type="submit" value="提交申请" onclick="$('#flag').val('yes')"/>&nbsp;
+				<c:if test="${not empty testAudit.id}">
+					<input id="btnSubmit2" 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>
+		<c:if test="${not empty testAudit.id}">
+			<act:flowChart procInsId="${testAudit.act.procInsId}"/>
+			<act:histoicFlow procInsId="${testAudit.act.procInsId}" />
+		</c:if>
+	</form:form>
+	</div>
+	</div>
+	</div>
+</body>
+</html>
+

+ 101 - 0
src/main/webapp/webpage/modules/oa/testAuditList.jsp

@@ -0,0 +1,101 @@
+<%@ 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="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="testAudit" action="${ctx}/oa/testAudit/" 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>
+			<sys:treeselect id="user" name="user.id" value="${testAudit.user.id}" labelName="user.name" labelValue="${testAudit.user.name}" 
+			title="用户" url="/sys/office/treeData?type=3" cssClass="form-control input-sm" allowClear="true" notAllowSelectParent="true"/>
+		 </div>	
+	</form:form>
+	<br/>
+	</div>
+	</div>
+	
+	<!-- 工具栏 -->
+	<div class="row">
+	<div class="col-sm-12">
+		<div class="pull-left">
+			<shiro:hasPermission name="oa:testAudit:edit">
+				<table:addRow url="${ctx}/oa/testAudit/form" title="审批申请流程" width="1000px" height="600px"></table:addRow><!-- 增加按钮 -->
+			</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>姓名</th><th>部门</th><th>岗位职级</th><th>调整原因</th><th>申请时间</th><shiro:hasPermission name="oa:testAudit:edit"><th>操作</th></shiro:hasPermission></tr></thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="testAudit">
+			<tr>
+				<td><a onclick="openDialogView('审批详情', '${ctx}/oa/testAudit/form?id=${testAudit.id}','1000px', '600px')" href="javascript:void(0)">${testAudit.user.name}</a></td>
+				<td>${testAudit.office.name}</td>
+				<td>${testAudit.post}</td>
+				<td>${testAudit.content}</td>
+				<td><fmt:formatDate value="${testAudit.createDate}" type="both" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+				<shiro:hasPermission name="oa:testAudit:edit"><td>
+    				<a onclick="openDialogView('审批详情', '${ctx}/oa/testAudit/form?id=${testAudit.id}','1000px', '600px')" href="javascript:void(0)">详情</a>
+					<a href="${ctx}/oa/testAudit/delete?id=${testAudit.id}" onclick="return confirmx('确认要删除该审批吗?', this.href)">删除</a>
+				</td></shiro:hasPermission>
+			</tr>
+		</c:forEach>
+		</tbody>
+	</table>
+		<!-- 分页代码 -->
+	<table:page page="${page}"></table:page>
+	<br/>
+	<br/>
+	</div>
+	</div>
+</div>
+</body>
+</html>

+ 128 - 0
src/main/webapp/webpage/modules/oa/testAuditView.jsp

@@ -0,0 +1,128 @@
+<%@ 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="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">
+	<form:form class="form-horizontal">
+		<sys:message content="${message}"/>
+			<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+				<tr>
+					<td class="tit">姓名</td><td>${testAudit.user.name}</td>
+					<td class="tit">部门</td><td>${testAudit.office.name}</td>
+					<td class="tit">岗位职级</td><td>${testAudit.post}</td>
+				</tr>
+				<tr>
+					<td class="tit">调整原因</td>
+					<td colspan="5">${testAudit.content}</td>
+				</tr>
+				<tr>
+					<td class="tit" rowspan="3">调整原因</td>
+					<td class="tit">薪酬档级</td>
+					<td>${testAudit.olda}</td>
+					<td class="tit" rowspan="3">拟调整标准</td>
+					<td class="tit">薪酬档级</td>
+					<td>${testAudit.newa}</td>
+				</tr>
+				<tr>
+					<td class="tit">月工资额</td>
+					<td>${testAudit.oldb}</td>
+					<td class="tit">月工资额</td>
+					<td>${testAudit.newb}</td>
+				</tr>
+				<tr>
+					<td class="tit">年薪金额</td>
+					<td>${testAudit.oldc}</td>
+					<td class="tit">年薪金额</td>
+					<td>${testAudit.newc}</td>
+				</tr>
+				<tr>
+					<td class="tit">月增资</td>
+					<td colspan="2">${testAudit.addNum}</td>
+					<td class="tit">执行时间</td>
+					<td colspan="2">${testAudit.exeDate}</td>
+				</tr>
+				<tr>
+					<td class="tit">人力资源部意见</td>
+					<td colspan="5">
+						${testAudit.hrText}
+					</td>
+				</tr>
+				<tr>
+					<td class="tit">分管领导意见</td>
+					<td colspan="5">
+						${testAudit.leadText}
+					</td>
+				</tr>
+				<tr>
+					<td class="tit">集团主要领导意见</td>
+					<td colspan="5">
+						${testAudit.mainLeadText}
+					</td>
+				</tr>
+			</table>
+		<div class="form-actions">
+			<input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+		</div>
+		<act:flowChart procInsId="${testAudit.act.procInsId}"/>
+		<act:histoicFlow procInsId="${testAudit.act.procInsId}" />
+	</form:form>
+	</div>
+	</div>
+	</div>
+</body>
+</html>

+ 172 - 0
src/main/webapp/webpage/modules/oa_evection/oaEvectionAudit.jsp

@@ -0,0 +1,172 @@
+<%@ 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;
+		}
+		
+		$('#btnPresent').click(function () { 
+
+			$.ajax({
+	             url:"${ctx}/oa_evection/oaEvection/present",
+	             data:$('#loginForm').serialize(),
+	             type:"post",
+	             success:function(data){
+	        
+	             }					
+		});
+		});	
+			
+		$(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);
+					}
+				}
+			});
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',<%=request.getAttribute("disabled")%>);
+            if (${requestScope.disabled eq 'false'}) {
+                $("#startTime").attr('disabled',true);
+                $("#endTime").attr('disabled',true);
+                $("#reason").attr('disabled',true);
+            }
+		});
+	</script>
+</head>
+
+<body class="gray-bg">
+
+  <div class="wrapper wrapper-content">
+	<div class="ibox">
+	<div class="ibox-title">
+		<h5>出差详情 </h5>
+	</div>
+		<div class="ibox-content">
+		<form:form id="inputForm" modelAttribute="oaEvection" action="${ctx}/oa_evection/oaEvection/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="${oaEvection.act.status}" />
+			<div class="control-group">
+			<label class="control-label">开始时间:</label>
+			<div class="controls" style="margin-top: 8px;">
+				<c:choose>
+					<c:when test="${!disabled}">
+						<input id="startTime" name="startTime" type="text" disabled="true" maxlength="20" class="laydate-icon form-control layer-date required"
+							   value="${oaEvection.startTime}"/></c:when>
+					<c:otherwise>
+						${oaEvection.startTime}
+					</c:otherwise>
+				</c:choose>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">结束时间:</label>
+			<div class="controls" style="margin-top: 8px;">
+				<c:choose>
+					<c:when test="${!disabled}">
+						<input id="endTime" name="endTime" type="text" disabled="true" maxlength="20" class="laydate-icon form-control layer-date required"
+							   value="${oaEvection.endTime}"/></c:when>
+					<c:otherwise>
+						${oaEvection.endTime}
+					</c:otherwise>
+				</c:choose>
+			</div>
+		</div>
+            <div class="control-group">
+                <label class="control-label">出差事由:</label>
+                <div class="controls" style="margin-top: 8px;">
+                    <c:choose>
+						<c:when test="${!disabled}">
+							<form:textarea id="reason" path="reason" disabled="true" class="form-control required" rows="3" maxlength="20"/>
+						</c:when>
+						<c:otherwise>
+							${oaEvection.reason}
+						</c:otherwise>
+					</c:choose>
+				</div>
+            </div>
+			<div class="control-group">
+				<label class="control-label">图片:</label>
+				<div class="controls">
+					<table style="text-align: center;width: 100%;margin-top:10px;" class="table table-striped table-bordered table-condensed" >
+						<tr>
+							<%--<td>序号</td>--%><td>文件名</td><td>上传人</td><td>上传时间</td><td>操作</td>
+						</tr>
+						<c:if test="${not empty oaEvection.workattachmentList}">
+							<c:forEach items="${oaEvection.workattachmentList}" var="attachment" varStatus="varStatus">
+								<tr>
+									<%--<td>${varStatus.index+1}</td>--%>
+									<c:if test="${fn:containsIgnoreCase(attachment.attachmentName,'jpg')
+												   or fn:containsIgnoreCase(attachment.attachmentName,'png')
+												   or fn:containsIgnoreCase(attachment.attachmentName,'gif')
+												   or fn:containsIgnoreCase(attachment.attachmentName,'jpeg')}">
+										<td><img src="${attachment.url}" onclick="openDialogView(' ','${ctx}/sys/picturepreview/picturePreview?url=${attachment.url}','860px','600px')" width="50" height="50" alt="${attachment.attachmentName}"/></td>
+									</c:if>
+									<td>${fns:getUserById(attachment.attachmentUser).name}</td>
+									<td><fmt:formatDate value="${attachment.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+										<td>
+											<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${attachment.url}');" class="btn btn-success btn-xs">下载</a>
+
+											<%--<a href="${ctx}/workfullmanage/workFullManage/downLoadAttach?file=${attachment.url}" class="btn btn-success btn-xs">下载</a>
+									--%>	</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+					</table>
+				</div>
+			</div>
+			<c:if test="${not empty status}">
+				<div class="control-group">
+					<label class="control-label">审批意见:</label>
+					<div class="controls">
+						<form:textarea path="act.comment" class="form-control" rows="3" maxlength="127"/>
+					</div>
+				</div>
+				<%--<div class="form-actions">
+				<c:if test="${oaEvection.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>--%>
+			</c:if>
+			<act:flowChart procInsId="${oaEvection.act.procInsId}"/>
+			<act:histoicFlow procInsId="${oaEvection.act.procInsId}"/>
+	</form:form>
+	</div>
+	</div>
+	</div>
+</body>
+</html>

+ 266 - 0
src/main/webapp/webpage/modules/oa_evection/oaEvectionForm.jsp

@@ -0,0 +1,266 @@
+<%@ 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 type="text/css">
+		img{width: 50px;height: 50px;}
+	</style>
+	<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){
+                    var len = $("#showPeo span").length;
+                    if(len<=0){
+                        parent.layer.msg("请选择审批人!",{icon:5});
+                        return false;
+                    }
+                    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);
+                    }
+                }
+            });
+            //只做查看时,禁用掉以下标签
+            if('${sessionScope.state}' =='disabled'){
+                $('input,textarea,select').attr('disabled','<%=session.getAttribute("state")%>');
+            }else if('${sessionScope.state}' !='disabled'){
+                $('input,textarea,select').removeAttr('disabled');
+            }
+        });
+        function selectPeople(objId,objName){
+            var showPeo = $("#showPeo").html();
+            var len = $("#showPeo span").length;
+            if(len > 4){
+                parent.layer.msg("最多添加5个审批人",{icon:5})
+                return;
+            }
+            var arr = [];
+            var a = $("#showPeo span").each(function(){
+                var dataId = $(this).attr("data-id");
+                arr.push(dataId)
+            })
+            if(arr.indexOf(objId) != -1){
+                parent.layer.msg("该审批人已被选择,不能重复选择!!!",{icon:5})
+                return ;
+            }
+            showPeo = showPeo + '<span class="badge badge-success fontSpan" data-id="'+objId+'">'+objName+'&nbsp;&nbsp;&nbsp;' +
+                '<i onclick=deletePeo(this) class="fa fa-close"></i><input type="hidden" name=adds['+len+'] value="'+objId+'"></span>';
+            $("#showPeo").html(showPeo)
+        }
+        //删除选择的人员
+        function deletePeo(obj){
+            $(obj).parent().remove()
+        }
+	</script>
+	<script type="text/javascript">
+        //上传图片
+        function this_upload_image_button(index){
+            var length = $("#this_upload_image_div :file").length;
+            var this_item_id = 'this_upload_image_'+index;
+            var last_item_id = $('img[id^=this_upload_image_]:last').attr('id');
+            if(length==6 && this_item_id==last_item_id){
+                top.layer.alert('最多上传5张图片',{icon:0,title:'系统提示'});
+                return;
+            }
+            $("#this_upload_file_"+index).click();
+        }
+        function this_upload_show_image(index){
+            var obj =$("#this_upload_file_"+index)[0].files[0];
+            var fileType = obj.type;
+            var url ;
+            if(fileType.endsWith("png")||fileType.endsWith("bmp")||fileType.endsWith("jpg")||fileType.endsWith("jpeg")){
+                url = window.URL.createObjectURL(obj);
+            }else {
+                //需要置空
+                var file = $("#this_upload_file_"+index);
+                file.after(file.clone().val(""));
+                file.remove();
+                top.layer.alert('请上传*.png,*.bmp,*.jpg/jpeg格式的图片',{icon:0,title:'系统提示'});
+                return false ;
+            }
+            $("#this_upload_image_"+index).attr("src",url);
+            var length = $("#this_upload_image_div :file").length;
+            var this_item_id = 'this_upload_image_'+index;
+            var last_item_id = $('img[id^=this_upload_image_]:last').attr('id');
+            if( this_item_id==last_item_id &&  length < 6 ){
+                this_upload_image_append(index);
+                this_add_x(index);
+            }
+        }
+        function this_upload_image_append(index){
+            var div1 = "<div id='this_upload_div_"+(index+1)+"' style='float:left;position:relative;width: 57px;height: 57px;'>";
+            var img = '<img  id="this_upload_image_'+(index+1)+'" class="upload_ico" width="50px" height="50px"  onclick="this_upload_image_button('+(index+1)+')" src = "${pageContext.request.contextPath}/static/uploadify/upload_ico.png" style="cursor:pointer;"/>';
+            var input = '<input id="this_upload_file_'+(index+1)+'" type="file" style="display:none;" name="this_upload_files" onChange="this_upload_show_image('+(index+1)+')" /><br>';
+            var div2 = "</div>";
+
+            $("#this_upload_image_div").append(div1+img+input+div2);
+        }
+        function this_close_img(index) {
+            $("#this_upload_div_"+index).remove();
+            var length = $("#this_upload_image_div :file").length;
+            if(length == 0){
+                this_add_div();
+            }else if(length == 1){
+                var x = $("#this_upload_image_div").find("span").text();
+                if("x" != x){
+                    this_add_div();
+                }
+            }
+        }
+        function this_add_x(index) {
+            var span = '<span id="this_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="this_close_img('+index+');">x</span>';
+            $("#this_upload_image_div").find("img:eq(-2)").before(span);
+        }
+        function this_add_div() {
+            var this_upload_div_1 =
+                '<div id="this_upload_div_1" style="float: left;position:relative;width: 57px;height: 57px;" >'+
+                '<img  id="this_upload_image_1" class="upload_ico" style="cursor:pointer;"  src="${pageContext.request.contextPath}/static/uploadify/upload_ico.png"  onclick="this_upload_image_button(1)"/>'+
+                '<input id="this_upload_file_1" type="file" style="display:none"  name="this_upload_files"  onchange="this_upload_show_image(1)" /><br>'+
+                '</div>';
+            $("#this_upload_image_div").html("").append(this_upload_div_1);
+        }
+
+
+	</script>
+</head>
+<body class="gray-bg">
+<div class="wrapper wrapper-content">
+	<div class="ibox">
+		<c:if test="${sessionScope.state!='disabled'}">
+		<div class="ibox-title" style="height: 70px;">
+			<h5>
+				<ul class="nav nav-tabs">
+					<li><a href="${ctx}/oa_evection/oaEvection/list">出差信息</a></li>
+					<li><a href="${ctx}/oa_evection/oaEvection/oaEvectionTodoList">待办任务</a></li>
+					<li><a href="${ctx}/oa_evection/oaEvection/oaEvectionHistoricList">已办任务</a></li>
+					<shiro:hasPermission name="oa:evection:edit"><li  class="active"><a href="${ctx}/oa_evection/oaEvection/form?ids=0">出差申请</a></li></shiro:hasPermission>
+				</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>
+				<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>
+		</c:if>
+		<div class="ibox-content">
+			<form:form id="inputForm" modelAttribute="oaEvection" action="${ctx}/oa_evection/oaEvection/save" enctype="multipart/form-data" method="post" class="form-horizontal">
+				<form:hidden path="id"/>
+				<c:set var="id" value="${oaEvection.id}" />
+				<c:set var="ids" value="${oaEvection.ids}" />
+
+				<sys:message content="${message}"/>
+				<div class="control-group">
+					<label class="control-label"><font color="red">*</font>开始时间:</label>
+					<div class="controls">
+						<input class="form-control layer-date laydate-icon required" id="startTime" name="startTime" readonly="readonly" value="<fmt:formatDate value="${oaEvection.startTime}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+					</div>
+				</div>
+				<div class="control-group">
+					<label class="control-label"><font color="red">*</font>结束时间:</label>
+					<div class="controls">
+						<input class="form-control layer-date laydate-icon required" id="endTime" name="endTime" readonly="readonly" value="<fmt:formatDate value="${oaEvection.endTime}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+					</div>
+				</div>
+				<div class="control-group">
+					<label class="control-label"><font color="red">*</font>出差天数:</label>
+					<div class="controls">
+						<input id="dateCount" name="dateCount" type="text" class="form-control required" value="${oaEvection.dateCount}"/>
+						<span class="help-inline"></span>
+					</div>
+				</div>
+				<div class="control-group">
+					<label class="control-label"><font color="red">*</font>出差地点:</label>
+					<div class="controls">
+						<input id="address" name="address" type="text" class="form-control required" value="${oaEvection.address}"/>
+						<span class="help-inline"></span>
+					</div>
+				</div>
+				<div class="control-group">
+					<label class="control-label"><font color="red">*</font>出差事由:</label>
+					<div class="controls">
+						<form:textarea path="reason" class="form-control required" rows="3" maxlength="20"/>
+					</div>
+				</div>
+				<div class="control-group">
+					<label class="control-label">图片:</label>
+					<div class="controls">
+						<span id="this_upload_msg">请上传*.png,*.bmp,*.jpg/jpeg格式的图片</span><br>
+						<div id="this_upload_image_div">
+							<div id="this_upload_div_1" style="float: left;position:relative;width: 57px;height: 57px;">
+								<img alt="_blank" id="this_upload_image_1" class="upload_ico" style="cursor:pointer;"  src="${pageContext.request.contextPath}/static/uploadify/upload_ico.png"  onclick="this_upload_image_button(1)"/>
+								<input id="this_upload_file_1" type="file" style="display:none"  name="this_upload_files"  onchange="this_upload_show_image(1)"  class="form-control required"/><br>
+							</div>
+						</div>
+
+
+						<span class="help-inline"></span>
+					</div>
+				</div>
+				<c:if test="${empty id}">
+					<div class="control-group">
+						<label class="control-label">抄送人:</label>
+						<div id="CCId" class="controls">
+							<sys:treeselect id="CCId" name="CCId" value="${oaEvection.CCId}" labelName="idNames" labelValue="${oaEvection.idNames}"
+											title="用户" url="/sys/office/treeDataAll?type=3&isAll=false" cssClass="form-control" allowClear="true" checked="true" notAllowSelectParent="true"/>
+							<span class="help-inline"></span>
+						</div>
+					</div>
+					<div class="control-group">
+						<label class="control-label"><font color="red">*</font>审批人:</label>
+						<div id="addida" class="controls">
+							<sys:treeselectleave id="ida" name="ida" value="${oaEvection.ida}" labelName="idNamea" labelValue="${oaEvection.idNamea}"
+											title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control required" allowClear="true" notAllowSelectParent="true"/>
+							<span class="help-inline"></span>
+						</div>
+						<div id="showPeo" class="controls">
+						</div>
+					</div>
+				<c:if test="${not empty ids}">
+					<div class="form-actions">
+						<input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp;
+						<input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+					</div>
+				</c:if>
+			</c:if>
+			</form:form>
+		</div>
+	</div>
+</div>
+<%
+	session.removeAttribute("state");
+%>
+</body>
+</html>
+

+ 111 - 0
src/main/webapp/webpage/modules/oa_evection/oaEvectionHistoricList.jsp

@@ -0,0 +1,111 @@
+<%@ 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>
+</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}/oa_evection/oaEvection/list">出差信息</a></li>
+					<li><a href="${ctx}/oa_evection/oaEvection/oaEvectionTodoList">待办任务</a></li>
+					<li class="active"><a href="${ctx}/oa_evection/oaEvection/oaEvectionHistoricList">已办任务</a></li>
+					<shiro:hasPermission name="oa:evection:edit"><li><a href="${ctx}/oa_evection/oaEvection/form?ids=0">出差申请</a></li></shiro:hasPermission>
+				</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}/oa_evection/oaEvection/oaEvectionHistoricList" 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 class="form-control layer-date laydate-icon required" id="beginDate" name="beginDate" readonly="readonly" value="<fmt:formatDate value="${act.beginDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							 -- 
+							<input class="form-control layer-date laydate-icon required" id="endDate" name="endDate" readonly="readonly" value="<fmt:formatDate value="${act.endDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+						</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;">流程发起人</th>
+					<th style="text-align: center;">流程名称</th>
+					<th style="text-align: center;">流程版本</th>
+					<th style="text-align: center;">开始时间</th>
+					<th style="text-align: center;">结束时间</th>
+					<th style="text-align: center;">出差天数</th>
+					<th style="text-align: center;">出差地点</th>
+					<th style="text-align: center;">出差原因</th>
+					<th style="text-align: center;">创建时间</th>
+				</tr>
+				</thead>
+				<tbody>
+				<c:forEach items="${list}" var="oaEvection">
+					<c:set var="task" value="${oaEvection.act.task}" />
+					<c:set var="vars" value="${oaEvection.act.vars}" />
+					<c:set var="procDef" value="${oaEvection.act.procDef}" />
+					<c:set var="status" value="${oaEvection.act.status}" />
+					<tr>
+						<td>${oaEvection.act.vars.map.applyUserId}</td>
+						<td>${procDef.name}</td>
+						<td><b title='流程版本号'>V: ${procDef.version}</b></td>
+						<td>${oaEvection.startTime}</td>
+						<td>${oaEvection.endTime}</td>
+						<td>${oaEvection.dateCount}</td>
+						<td><%--${oaEvection.address}--%>
+							<span title="${oaEvection.address}">${fns:abbr(oaEvection.address, 30)}</span>
+						</td>
+						<td><%--${oaEvection.reason}--%>
+							<span title="${oaEvection.reason}">${fns:abbr(oaEvection.reason, 30)}</span>
+						</td>
+						<td><fmt:formatDate value="${oaEvection.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></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>

+ 227 - 0
src/main/webapp/webpage/modules/oa_evection/oaEvectionList.jsp

@@ -0,0 +1,227 @@
+<%@ 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">
+        function page(n,s){
+            location = '${ctx}/oa_evection/oaEvection/list/?pageNo='+n+'&pageSize='+s;
+        }
+        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
+                    }
+                },
+                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 class="active"><a href="${ctx}/oa_evection/oaEvection/list">出差信息</a></li>
+					<li><a href="${ctx}/oa_evection/oaEvection/oaEvectionTodoList">待办任务</a></li>
+					<li><a href="${ctx}/oa_evection/oaEvection/oaEvectionHistoricList">已办任务</a></li>
+					<shiro:hasPermission name="oa:evection:edit"><li><a href="${ctx}/oa_evection/oaEvection/form?ids=0">出差申请</a></li></shiro:hasPermission>
+				</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="oaEvection" action="${ctx}/oa_evection/oaEvection/list" 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();"/><!-- 支持排序 -->
+						<a href="#" id="moresee" class="fa fa-chevron-down" style="float: right;">更多</a>
+						<div class="form-group">
+							<label>创建时间:</label>
+							<input class="form-control layer-date laydate-icon required" id="createDateStart" name="createDateStart" readonly="readonly" value="<fmt:formatDate value="${oaEvection.createDateStart}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							 -- 
+							<input class="form-control layer-date laydate-icon required" id="createDateEnd" name="createDateEnd" readonly="readonly" value="<fmt:formatDate value="${oaEvection.createDateEnd}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							&nbsp;&nbsp;
+							<label>审核状态:</label>
+							<form:select path="status"  class="form-control m-b">
+								<form:option value="" label=""/>
+								<form:options items="${fns:getDictList('act_status')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+							</form:select>
+						</div>
+					</form:form>
+					<br/>
+				</div>
+			</div>
+
+			<!-- 工具栏 -->
+			<div class="row">
+				<div class="col-sm-12">
+					<div class="pull-left">
+<%--
+						<shiro:hasPermission name="oa:evection:add">
+							<table:addRow url="${ctx}/oa_evection/oaEvection/form" title="出差信息"></table:addRow><!-- 增加按钮 -->
+						</shiro:hasPermission>
+						<shiro:hasPermission name="oa:evection:edit">
+							<table:editRow url="${ctx}/oa_evection/oaEvection/form" title="出差信息" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+						</shiro:hasPermission>
+--%>
+
+						<shiro:hasPermission name="oa:evection:import">
+							<table:importExcel url="${ctx}/oa_evection/oaEvection/import"></table:importExcel><!-- 导入按钮 -->
+						</shiro:hasPermission>
+						<shiro:hasPermission name="oa:evection:export">
+							<table:exportExcel url="${ctx}/oa_evection/oaEvection/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 style="text-align: center;"> 序号</th>
+					<th style="text-align: center;">创建人</th>
+					<th style="text-align: center;">开始时间</th>
+					<th style="text-align: center;">结束时间</th>
+					<th style="text-align: center;">出差天数</th>
+					<th style="text-align: center;">出差地点</th>
+					<th style="text-align: center;">出差原因</th>
+					<th style="text-align: center;">审批状态</th>
+					<th style="text-align: center;">创建时间</th>
+					<th style="text-align: center;">操作</th>
+				</tr>
+				</thead>
+				<tbody>
+				<tbody>
+				<c:forEach items="${page.list}" var="oaEvection"  varStatus="status">
+					<c:set var="task" value="${oaEvection.task }" />
+					<c:set var="pi" value="${oaEvection.processInstance }" />
+					<c:set var="hpi" value="${oaEvection.historicProcessInstance }" />
+					<tr>
+						<td> ${status.index+1}</td>
+						<td>${oaEvection.createBy.name}</td>
+						<td>${oaEvection.startTime}</td>
+						<td>${oaEvection.endTime}</td>
+						<td>${oaEvection.dateCount}</td>
+						<td><%--${oaEvection.address}--%>
+							<span title="${oaEvection.address}">${fns:abbr(oaEvection.address, 30)}</span>
+						</td>
+						<td><%--${oaEvection.reason}--%>
+							<span title="${oaEvection.reason}">${fns:abbr(oaEvection.reason, 30)}</span>
+						</td>
+						<c:if test="${not empty task}">
+							<td>${fns:getDictLabel(oaEvection.status, 'act_status', '')}</td>
+							<td><fmt:formatDate value="${oaEvection.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+							<td>
+								<div style="text-align: center">
+								<%--<c:if test="${empty task.assignee}">
+									<a href="javascript:claim('${task.id}');" title="签收任务">${fns:abbr(not empty oaEvection.act.vars.map.title ? act.vars.map.title : task.id, 60)}</a>
+								</c:if>--%>
+								<shiro:hasPermission name="oa:evection:view">
+									<a href="javascript:void(0)" onclick="openDialogView('详情', '${ctx}/oa_evection/oaEvection/form?id=${oaEvection.id}&readAttr=disabled&name=view','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+								</shiro:hasPermission>&nbsp;&nbsp;
+									<c:if test="${oaEvection.createBy.id eq fns:getUser().id}">
+										<c:if test="${oaEvection.status!=3 && oaEvection.status!=4 && oaEvection.status!=5}">
+											<a href="${ctx}/oa_evection/oaEvection/revoke?id=${oaEvection.id}&processInstanceId=${oaEvection.processInstanceId}&reason=${oaEvection.reason}" onclick="return confirmx('确认要撤回该信息吗?', this.href)" class="btn btn-warning btn-xs"><i class="glyphicon glyphicon-share-alt"></i> 撤回</a>
+										</c:if>
+									</c:if>
+								<c:if test="${not empty task.assignee}">
+									<%--<a href="${ctx}/oa_evection/oaEvection/applyOnEvection?taskId=${task.id}&taskName=${fns:urlEncode(task.name)}&taskDefKey=${task.taskDefinitionKey}&procInsId=${task.processInstanceId}&procDefId=${task.processDefinitionId}&status=1" class="btn btn-success btn-xs">任务办理</a>
+									--%><a href="javascript:void(0)" onclick="openDialogre('任务办理', '${ctx}/oa_evection/oaEvection/applyOnEvection?taskId=${task.id}&taskName=${fns:urlEncode(task.name)}&taskDefKey=${task.taskDefinitionKey}&procInsId=${task.processInstanceId}&procDefId=${task.processDefinitionId}&status=1','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 任务办理</a>
+
+								</c:if>
+								</div>
+							</td>
+						</c:if>
+						<c:if test="${empty task}">
+							<td>${fns:getDictLabel(oaEvection.status, 'act_status', '')}</td>
+							<td><fmt:formatDate value="${oaEvection.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+							<td>
+								<div style="text-align: center">
+								<shiro:hasPermission name="oa:evection:view">
+								<a href="javascript:void(0)" onclick="openDialogView('详情', '${ctx}/oa_evection/oaEvection/form?id=${oaEvection.id}&readAttr=disabled&name=view','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+							    </shiro:hasPermission>
+								<c:if test="${oaEvection.createBy.id eq fns:getUser().id}">
+									<c:if test="${oaEvection.status!=3 && oaEvection.status!=4 && oaEvection.status!=5}">
+										<a href="${ctx}/oa_evection/oaEvection/revoke?id=${oaEvection.id}&processInstanceId=${oaEvection.processInstanceId}&reason=${oaEvection.reason}" onclick="return confirmx('确认要撤回该信息吗?', this.href)" class="btn btn-warning btn-xs"><i class="glyphicon glyphicon-share-alt"></i> 撤回</a>
+									</c:if>
+								</c:if>
+								</div>
+							</td>
+						</c:if>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+	</div>
+</div>
+</body>
+</html>

+ 182 - 0
src/main/webapp/webpage/modules/oa_evection/oaEvectionTodoList.jsp

@@ -0,0 +1,182 @@
+<%@ 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">
+        function page(n,s){
+            location = '${ctx}/oa_evection/oaEvection/list/?pageNo='+n+'&pageSize='+s;
+        }
+        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
+                    }
+                },
+                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}/oa_evection/oaEvection/list">出差信息</a></li>
+					<li class="active"><a href="${ctx}/oa_evection/oaEvection/oaEvectionTodoList">待办任务</a></li>
+					<li><a href="${ctx}/oa_evection/oaEvection/oaEvectionHistoricList">已办任务</a></li>
+					<shiro:hasPermission name="oa:evection:edit"><li><a href="${ctx}/oa_evection/oaEvection/form?ids=0">出差申请</a></li></shiro:hasPermission>
+				</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}/oa_evection/oaEvection/oaEvectionTodoList" 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 class="form-control layer-date laydate-icon required" id="beginDate" name="beginDate" readonly="readonly" value="<fmt:formatDate value="${act.beginDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							 -- 
+							<input class="form-control layer-date laydate-icon required" id="endDate" name="endDate" readonly="readonly" value="<fmt:formatDate value="${act.endDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+
+						</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;">流程发起人</th>
+					<th style="text-align: center;">当前环节</th>
+					<th style="text-align: center;">流程名称</th>
+					<th style="text-align: center;">流程版本</th>
+					<th style="text-align: center;">开始时间</th>
+					<th style="text-align: center;">结束时间</th>
+					<th style="text-align: center;">出差天数</th>
+					<th style="text-align: center;">出差地点</th>
+					<th style="text-align: center;">出差原因</th>
+					<th style="text-align: center;">创建时间</th>
+					<th style="text-align: center;">操作</th>
+				</tr>
+				</thead>
+				<tbody>
+				<c:forEach items="${list}" var="oaEvection">
+					<c:set var="task" value="${oaEvection.act.task}" />
+					<c:set var="vars" value="${oaEvection.act.vars}" />
+					<c:set var="procDef" value="${oaEvection.act.procDef}" />
+					<c:set var="status" value="${oaEvection.act.status}" />
+					<tr>
+						<td>${oaEvection.act.vars.map.applyUserId}</td>
+						<td>
+							${task.name}
+						</td>
+						<td>${procDef.name}</td>
+						<td><b title='流程版本号'>V: ${procDef.version}</b></td>
+						<td>${oaEvection.startTime}</td>
+						<td>${oaEvection.endTime}</td>
+						<td>${oaEvection.dateCount}</td>
+						<td><%--${oaEvection.address}--%>
+							<span title="${oaEvection.address}">${fns:abbr(oaEvection.address, 30)}</span>
+						</td>
+						<td><%--${oaEvection.reason}--%>
+							<span title="${oaEvection.reason}">${fns:abbr(oaEvection.reason, 30)}</span>
+						</td>
+						<td><fmt:formatDate value="${task.createTime}" type="both"/></td>
+						<td>
+							<div style="text-align: center">
+							<c:if test="${not empty task.assignee}">
+							<%--<a href="${ctx}${procExecUrl}/exec/${task.taskDefinitionKey}?procInsId=${task.processInstanceId}&act.taskId=${task.id}">办理</a>--%>
+								<%--<a href="${ctx}/oa_evection/oaEvection/applyOnEvection?taskId=${task.id}&taskName=${fns:urlEncode(task.name)}&taskDefKey=${task.taskDefinitionKey}&procInsId=${task.processInstanceId}&procDefId=${task.processDefinitionId}&status=${status}" class="btn btn-success btn-xs">任务办理</a>
+								--%><a href="javascript:void(0)" onclick="openDialogre('任务办理', '${ctx}/oa_evection/oaEvection/applyOnEvection?taskId=${task.id}&taskName=${fns:urlEncode(task.name)}&taskDefKey=${task.taskDefinitionKey}&procInsId=${task.processInstanceId}&procDefId=${task.processDefinitionId}&status=1','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 任务办理</a>
+
+							</c:if>
+							</div>
+						</td>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+	</div>
+</div>
+</body>
+</html>

+ 180 - 0
src/main/webapp/webpage/modules/oaall/oaAllAudit.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"/>
+	<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);
+					}
+				}
+			});
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',<%=request.getAttribute("disabled")%>);
+            if (${requestScope.disabled eq 'false'}) {
+                $("#leaveType").attr('disabled',true);
+                $("#startTime").attr('disabled',true);
+                $("#endTime").attr('disabled',true);
+                $("#reason").attr('disabled',true);
+			}
+		});
+	</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">
+	<form:form id="inputForm" modelAttribute="oaAll" action="${ctx}/oaall/oaAll/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="${oaAll.act.status}" />
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>申请内容:</label>
+			<div class="controls" style="margin-top: 7px;">
+				${oaAll.applyContent}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>申请内容:</label>
+			<div class="controls" style="margin-top: 7px;">
+				${oaAll.approveDetail}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>附件:</label>
+			<div class="controls">
+				<table id="upTable" class="table table-striped table-bordered table-condensed">
+					<thead>
+					<tr>
+						<th class="hide"></th>
+						<%--<th>序号</th>--%>
+						<th>文件名</th>
+						<th>上传人</th>
+						<th>上传时间</th>
+						<th width="100">操作</th>
+					</tr>
+					</thead>
+					<tbody id="file_attachment">
+						<c:choose>
+							<c:when test="${not empty oaAll.workAttachments}">
+								<c:forEach items="${oaAll.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" alt="${workClientAttachment.attachmentName}"/></td>
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','80%','80%','1')">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<td><a href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','80%','80%')">${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>
+											<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="btn btn-success btn-xs">下载</a>
+
+											<%--<a href="${ctx}/workfullmanage/workFullManage/downLoadAttach?file=${workClientAttachment.url}" class="btn btn-success btn-xs">下载</a>--%>
+										</td>
+									</tr>
+								</c:forEach>
+							</c:when>
+							<c:otherwise>
+								<tr>
+									<td colspan="5" align="center">暂无数据</td>
+								</tr>
+							</c:otherwise>
+						</c:choose>
+					</tbody>
+				</table>
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group" id="comment">
+			<label class="control-label">审批意见:</label>
+			<div class="controls">
+				<form:textarea path="act.comment" class="form-control" rows="5" maxlength="127"/>
+			</div>
+		</div>
+		<%--<div class="form-actions">
+				<c:if test="${oaAll.act.taskDefKey eq 'audit1'}">
+					<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="${oaAll.act.procInsId}"/>
+		<act:histoicFlow procInsId="${oaAll.act.procInsId}"/>
+	</form:form>
+</div>
+	</div>
+	</div>
+</body>
+</html>
+

+ 186 - 0
src/main/webapp/webpage/modules/oaall/oaAllForm.jsp

@@ -0,0 +1,186 @@
+<%@ 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){
+                    var len = $("#showPeo span").length;
+                    if(len<=0){
+                        parent.layer.msg("请选择审批人!",{icon:5});
+                        return false;
+                    }
+					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);
+					}
+				}
+			});
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+		});
+        function selectPeople(objId,objName){
+            var showPeo = $("#showPeo").html();
+            var len = $("#showPeo span").length;
+            if(len > 4){
+                parent.layer.msg("最多添加5个审批人",{icon:5})
+                return;
+            }
+            var arr = [];
+            var a = $("#showPeo span").each(function(){
+                var dataId = $(this).attr("data-id");
+                arr.push(dataId)
+            })
+            if(arr.indexOf(objId) != -1){
+                parent.layer.msg("该审批人已被选择,不能重复选择!!!",{icon:5})
+                return ;
+            }
+            showPeo = showPeo + '<span class="badge badge-success fontSpan" data-id="'+objId+'">'+objName+'&nbsp;&nbsp;&nbsp;' +
+                '<i onclick=deletePeo(this) class="fa fa-close"></i><input type="hidden" name=adds['+len+'] value="'+objId+'"></span>';
+            $("#showPeo").html(showPeo)
+        }
+        //删除选择的人员
+        function deletePeo(obj){
+            $(obj).parent().remove()
+        }
+        function insertTitle(tValue){
+            var files = $("#attachment_file")[0].files;
+            for(var i = 0;i<files.length;i++) {
+                var file = files[i];
+            var attachmentId = $("#id").val();
+            var attachmentFlag = "5";
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workClientInfo/"+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,"0");
+        }}
+
+	</script>
+</head>
+<body class="hideScroll">
+<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}/oaall/oaAll/list">通用审批信息</a></li>
+				<li><a href="${ctx}/oaall/oaAll/leaveTodoList">待办任务</a></li>
+				<li><a href="${ctx}/oaall/oaAll/leaveHistoricList">已办任务</a></li>
+				<li class="active"><a href="${ctx}/oaall/oaAll/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">
+		<form:form id="inputForm" modelAttribute="oaAll" action="${ctx}/oaall/oaAll/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<sys:message content="${message}"/>
+			<div class="control-group">
+				<label class="control-label"><font color="red">*</font>申请内容:</label>
+				<div class="controls">
+					<textarea id="applyContent" name="applyContent" maxlength="20" class="form-control required" rows="3" aria-required="true"></textarea>
+					<span class="help-inline"></span>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label"><font color="red">*</font>审批详情:</label>
+				<div class="controls">
+					<textarea id="approveDetail" name="approveDetail" maxlength="20" class="form-control required" rows="3" aria-required="true"></textarea>
+					<span class="help-inline"></span>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label">附件:</label>
+				<div class="controls">
+					<div style="display: inline-block">
+						<div id="addFile_attachment" style="display: none">
+							<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);"/>
+						<a id="attachment_btn" class="btn btn-info btn-xs" ><i class="fa fa-plus"></i> 添加附件</a>
+						<span id="attachment_title"></span>
+					</div>
+					<br><br>
+					<table id="upTable" class="table table-striped table-bordered table-condensed">
+						<thead>
+						<tr>
+							<th class="hide"></th>
+							<%--<th>序号</th>--%>
+							<th>文件名</th>
+							<th>上传人</th>
+							<th>上传时间</th>
+							<th width="100">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_attachment">
+						</tbody>
+					</table>
+					<span class="help-inline"></span>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label">抄送人:</label>
+				<div id="CCId" class="controls">
+					<sys:treeselect id="CCId" name="CCId" value="${leave.CCId}" labelName="idNames" labelValue="${leave.idNames}"
+									title="用户" url="/sys/office/treeDataAll?type=3&isAll=false" cssClass="form-control required" notAllowSelectParent="true" checked="true"/>
+					<span class="help-inline"></span>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label">审批人:</label>
+				<div id="addida" class="controls">
+					<sys:treeselectleave id="ida" name="ida" value="${leave.ida}" labelName="idNamea" labelValue="${leave.idNamea}"
+										 title="用户" url="/sys/office/treeDataAll?type=3&isAll=false" cssClass="form-control" notAllowSelectParent="true"/>
+					<span class="help-inline"></span>
+				</div>
+				<div id="showPeo" class="controls">
+				</div>
+
+			</div>
+			<div class="form-actions">
+				<input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp;
+				<input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+			</div>
+		</form:form>
+	</div>
+</div>
+</div>
+</body>
+</html>

+ 103 - 0
src/main/webapp/webpage/modules/oaall/oaAllHistoricList.jsp

@@ -0,0 +1,103 @@
+<%@ 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>
+</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}/oaall/oaAll/list">通用审批信息</a></li>
+					<li><a href="${ctx}/oaall/oaAll/leaveTodoList">待办任务</a></li>
+					<li class="active"><a href="${ctx}/oaall/oaAll/leaveHistoricList">已办任务</a></li>
+					<li><a href="${ctx}/oaall/oaAll/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}/oa/leave/leaveHistoricList" 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 class="form-control layer-date laydate-icon required" id="beginDate" name="beginDate" readonly="readonly" value="<fmt:formatDate value="${act.beginDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							 -- 
+							<input class="form-control layer-date laydate-icon required" id="endDate" name="endDate" readonly="readonly" value="<fmt:formatDate value="${act.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+						</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;">流程发起人</th>
+					<th style="text-align: center;">流程名称</th>
+					<th style="text-align: center;">流程版本</th>
+					<th style="text-align: center;">申请内容</th>
+					<th style="text-align: center;">审批详情</th>
+					<th style="text-align: center;">创建时间</th>
+					<th style="text-align: center;">操作</th>
+				</tr>
+				</thead>
+				<tbody>
+				<c:forEach items="${list}" var="oaAll">
+					<c:set var="task" value="${oaAll.act.task}" />
+					<c:set var="vars" value="${oaAll.act.vars}" />
+					<c:set var="procDef" value="${oaAll.act.procDef}" />
+					<c:set var="status" value="${oaAll.act.status}" />
+					<tr>
+						<td>${oaAll.act.vars.map.applyUserId}</td>
+						<td>${procDef.name}</td>
+						<td><b title='流程版本号'>V: ${procDef.version}</b></td>
+						<td>${oaAll.applyContent}</td>
+						<td>${oaAll.approveDetail}</td>
+						<td><fmt:formatDate value="${oaAll.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+						<td>
+						</td>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+	</div>
+</div>
+</body>
+</html>

+ 153 - 0
src/main/webapp/webpage/modules/oaall/oaAllList.jsp

@@ -0,0 +1,153 @@
+<%@ 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">
+		$(document).ready(function() {
+		});
+	</script>
+</head>
+<body class="gray-bg">
+	<div class="wrapper wrapper-content">
+	<div class="ibox">
+	<div class="ibox-title">
+		<h5>
+			<ul class="nav nav-tabs">
+				<li  class="active"><a href="${ctx}/oaall/oaAll/list">通用审批信息</a></li>
+				<li><a href="${ctx}/oaall/oaAll/leaveTodoList">待办任务</a></li>
+				<li><a href="${ctx}/oaall/oaAll/leaveHistoricList">已办任务</a></li>
+				<li><a href="${ctx}/oaall/oaAll/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>
+			<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="oaAll" action="${ctx}/oaall/oaAll/" 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();"/><!-- 支持排序 -->
+		<a href="#" id="moresee" class="fa fa-chevron-down" style="float: right;">更多</a>
+		<div class="form-group">
+			<label>创建时间:</label>
+			<input class="form-control layer-date laydate-icon required" id="createDateStart" name="createDateStart" readonly="readonly" value="<fmt:formatDate value="${oaAll.createDateStart}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+			 -- 
+			<input class="form-control layer-date laydate-icon required" id="createDateEnd" name="createDateEnd" readonly="readonly" value="<fmt:formatDate value="${oaAll.createDateEnd}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+
+			&nbsp;&nbsp;
+			<label>审核状态:</label>
+			<form:select path="status"  class="form-control m-b">
+				<form:option value="" label=""/>
+				<form:options items="${fns:getDictList('act_status')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+			</form:select>
+		</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;"> <input type="checkbox" class="i-checks"></th>
+				<th style="text-align: center;"  class="sort-column applyContent">申请内容</th>
+				<th style="text-align: center;"  class="sort-column approveDetail">审批详情</th>
+				<th style="text-align: center;"  class="sort-column ceateBy.id">申请人</th>
+				<th style="text-align: center;"  class="sort-column createDate">创建时间</th>
+				<th style="text-align: center;"  class="sort-column status">审核状态</th>
+				<th style="text-align: center;"  class="sort-column ''">流程追踪</th>
+				<th style="text-align: center;">操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:choose>
+			<c:when test="${not empty page.list}">
+				<c:forEach items="${page.list}" var="oaAll">
+					<tr>
+						<td> <input type="checkbox" id="${oaAll.id}" class="i-checks"></td>
+						<td>
+							<a  href="javascript:void(0)" onclick="openDialogView('查看通用审批信息', '${ctx}/oaall/oaAll/form?id=${oaAll.id}&tabId=0','80%','80%')">
+								${oaAll.applyContent}
+							</a>
+						</td>
+						<td>${oaAll.approveDetail}</td>
+						<td>${oaAll.createBy.name}</td>
+						<td><fmt:formatDate value="${oaAll.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+						<td>${fns:getDictLabel(oaAll.status, 'act_status', '')}</td>
+						<td>
+							<div style="text-align: center">
+							<a href="javascript:void(0)" onclick="openDialogView('详情', '${ctx}/oaall/oaAll/getProcess?id=${oaAll.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 流程追踪</a>
+							</div>
+						</td>
+						<td>
+							<div style="text-align: center">
+							<c:if test="${oaAll.status == 1 or oaAll.status == 2}">
+								<a href="${ctx}/oaall/oaAll/revoke?id=${oaAll.id}&processInstanceId=${oaAll.processInstanceId}" class="btn btn-warning btn-xs" ><i class="glyphicon glyphicon-share-alt"></i> 撤回</a>
+							</c:if>
+							<c:if test="${oaAll.status == 4 or oaAll.status == 5}">
+								<a href="${ctx}/oaall/oaAll/delete?id=${oaAll.id}" onclick="return confirmx('确认要删除该通用审批功能吗?', this.href)"   class="btn btn-danger btn-xs"><i class="fa fa-trash"></i> 删除</a>
+							</c:if>
+							</div>
+						</td>
+
+					</tr>
+				</c:forEach>
+			</c:when>
+			<c:otherwise>
+				<tr>
+					<td colspan="8" align="center">暂无数据</td>
+				</tr>
+			</c:otherwise>
+		</c:choose>
+
+		</tbody>
+	</table>
+	
+		<!-- 分页代码 -->
+	<table:page page="${page}"></table:page>
+	<br/>
+	<br/>
+	</div>
+	</div>
+</div>
+</body>
+</html>

+ 173 - 0
src/main/webapp/webpage/modules/oaall/oaAllTodoList.jsp

@@ -0,0 +1,173 @@
+<%@ 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">
+        function page(n,s){
+            location = '${ctx}/oa/leave/list/?pageNo='+n+'&pageSize='+s;
+        }
+        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
+                    }
+                },
+                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}/oaall/oaAll/list">通用审批信息</a></li>
+					<li  class="active"><a href="${ctx}/oaall/oaAll/leaveTodoList">待办任务</a></li>
+					<li><a href="${ctx}/oaall/oaAll/leaveHistoricList">已办任务</a></li>
+					<li><a href="${ctx}/oaall/oaAll/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}/oa/leave/leaveTodoList" 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 class="form-control layer-date laydate-icon required" id="beginDate" name="beginDate" readonly="readonly" value="<fmt:formatDate value="${act.beginDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							 -- 
+							<input class="form-control layer-date laydate-icon required" id="endDate" name="endDate" readonly="readonly" value="<fmt:formatDate value="${act.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+						</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;">流程发起人</th>
+					<th style="text-align: center;">当前环节</th>
+					<th style="text-align: center;">流程名称</th>
+					<th style="text-align: center;">流程版本</th>
+					<th style="text-align: center;">申请内容</th>
+					<th style="text-align: center;">审批详情</th>
+					<th style="text-align: center;">创建时间</th>
+					<th style="text-align: center;">操作</th>
+				</tr>
+				</thead>
+				<tbody>
+				<c:forEach items="${list}" var="oaAll">
+					<c:set var="task" value="${oaAll.act.task}" />
+					<c:set var="vars" value="${oaAll.act.vars}" />
+					<c:set var="procDef" value="${oaAll.act.procDef}" /><%--
+				<c:set var="procExecUrl" value="${act.procExecUrl}" /> --%>
+					<c:set var="status" value="${oaAll.act.status}" />
+					<tr>
+						<td>${oaAll.act.vars.map.applyUserId}</td>
+						<td>
+							${task.name}
+						</td>
+						<td>${procDef.name}</td>
+						<td><b title='流程版本号'>V: ${procDef.version}</b></td>
+						<td>${oaAll.applyContent}</td>
+						<td>${oaAll.approveDetail}</td>
+						<td><fmt:formatDate value="${oaAll.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+						<td>
+							<div style="text-align: center">
+							<c:if test="${not empty task.assignee}"><%--
+							<a href="${ctx}${procExecUrl}/exec/${task.taskDefinitionKey}?procInsId=${task.processInstanceId}&act.taskId=${task.id}">办理</a> --%>
+								<%--<a href="${ctx}/oa/leave/applyOnLeave?taskId=${task.id}&taskName=${fns:urlEncode(task.name)}&taskDefKey=${task.taskDefinitionKey}&procInsId=${task.processInstanceId}&procDefId=${task.processDefinitionId}&status=${status}" class="btn btn-success btn-xs">任务办理</a>
+--%>
+								<a href="javascript:void(0)" onclick="openDialogre('任务办理', '${ctx}/oa/leave/applyOnLeave?taskId=${task.id}&taskName=${fns:urlEncode(task.name)}&taskDefKey=${task.taskDefinitionKey}&procInsId=${task.processInstanceId}&procDefId=${task.processDefinitionId}&status=1','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 任务办理</a>
+
+							</c:if>
+							</div>
+						</td>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+	</div>
+</div>
+</body>
+</html>

+ 15 - 0
src/main/webapp/webpage/modules/oaall/oaAllTrack.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>
+

+ 158 - 0
src/main/webapp/webpage/modules/oaall/oaAllView.jsp

@@ -0,0 +1,158 @@
+<%@ 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);
+					}
+				}
+			});
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',<%=request.getAttribute("disabled")%>);
+            if (${requestScope.disabled eq 'false'}) {
+                $("#leaveType").attr('disabled',true);
+                $("#startTime").attr('disabled',true);
+                $("#endTime").attr('disabled',true);
+                $("#reason").attr('disabled',true);
+			}
+		});
+	</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">
+	<form:form id="inputForm" modelAttribute="oaAll" action="${ctx}/oaall/oaAll/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}"/>
+		<c:set var="status" value="${oaAll.act.status}" />
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>申请内容:</label>
+			<div class="controls" style="margin-top: 7px;">
+				${oaAll.applyContent}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>申请内容:</label>
+			<div class="controls" style="margin-top: 7px;">
+				${oaAll.approveDetail}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>附件:</label>
+			<div class="controls">
+				<table id="upTable" class="table table-striped table-bordered table-condensed">
+					<thead>
+					<tr>
+						<th class="hide"></th>
+						<%--<th>序号</th>--%>
+						<th>文件名</th>
+						<th>上传人</th>
+						<th>上传时间</th>
+						<th width="100">操作</th>
+					</tr>
+					</thead>
+					<tbody id="file_attachment">
+						<c:choose>
+							<c:when test="${not empty oaAll.workAttachments}">
+								<c:forEach items="${oaAll.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" alt="${workClientAttachment.attachmentName}"/></td>
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','80%','80%','1')">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<td><a href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','80%','80%')">${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>
+											<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="btn btn-success btn-xs">下载</a>
+
+											<%--<a href="${ctx}/workfullmanage/workFullManage/downLoadAttach?file=${workClientAttachment.url}" class="btn btn-success btn-xs">下载</a>
+										--%></td>
+									</tr>
+								</c:forEach>
+							</c:when>
+							<c:otherwise>
+								<tr>
+									<td colspan="5" align="center">暂无数据</td>
+								</tr>
+							</c:otherwise>
+						</c:choose>
+					</tbody>
+				</table>
+			</div>
+		</div>
+	</form:form>
+</div>
+	</div>
+	</div>
+</body>
+</html>
+

+ 220 - 0
src/main/webapp/webpage/modules/oabuy/oaBuyAudit.jsp

@@ -0,0 +1,220 @@
+<%@ 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);
+					}
+				}
+			});
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',<%=request.getAttribute("disabled")%>);
+            if (${requestScope.disabled eq 'false'}) {
+                $("#leaveType").attr('disabled',true);
+                $("#startTime").attr('disabled',true);
+                $("#endTime").attr('disabled',true);
+                $("#reason").attr('disabled',true);
+			}
+		});
+	</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">
+	<form:form id="inputForm" modelAttribute="oaBuy" action="${ctx}/oabuy/oaBuy/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="${oaBuy.act.status}" />
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>申请内容:</label>
+			<div class="controls" style="margin-top: 7px;">
+				${oaBuy.applyContent}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>采购类型:</label>
+			<div class="controls" style="margin-top: 7px;">
+						${fns:getDictLabel(oaBuy.buySort, 'buy_sort', '')}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">采购明细:</label>
+			<div class="controls">
+				<tr>
+					<td class="width-15 active"></td>
+					<td class="width-75"  colspan="3">
+						<div></div>
+						<table style="margin-top:10px;" id="contentTable" class="table table-striped table-bordered table-condensed">
+							<thead>
+							<tr>
+								<th>序号</th>
+								<th>名称</th>
+								<th>规格</th>
+								<th>数量</th>
+								<th>单位</th>
+								<th>价格</th>
+							</tr>
+							</thead>
+							<tbody id="buyDetailsList">
+							<c:forEach items="${oaBuy.buyDetailsList}" var="buyDetails" varStatus="status">
+								<tr>
+									<td>${status.index + 1}</td>
+									<td>${buyDetails.name}</td>
+									<td>${buyDetails.format}</td>
+									<td>${buyDetails.amount}</td>
+									<td>${buyDetails.unit}</td>
+									<td>${buyDetails.price}</td>
+								</tr>
+							</c:forEach>
+							<c:if test="${linkManSize == 0}">
+								<tr>
+									<td colspan="8">暂无数据</td>
+								</tr>
+							</c:if>
+							</tbody>
+						</table>
+					</td>
+				</tr></div>
+		</div>
+
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>附件:</label>
+			<div class="controls">
+				<table id="upTable" class="table table-striped table-bordered table-condensed">
+					<thead>
+					<tr>
+						<th class="hide"></th>
+						<%--<th>序号</th>--%>
+						<th>文件名</th>
+						<th>上传人</th>
+						<th>上传时间</th>
+						<th width="100">操作</th>
+					</tr>
+					</thead>
+					<tbody id="file_attachment">
+						<c:choose>
+							<c:when test="${not empty oaBuy.workAttachments}">
+								<c:forEach items="${oaBuy.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" alt="${workClientAttachment.attachmentName}"/></td>
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','80%','80%','1')">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<td><a href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','80%','80%')">${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>
+											<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="btn btn-success btn-xs">下载</a>
+
+											<%--<a href="${ctx}/workfullmanage/workFullManage/downLoadAttach?file=${workClientAttachment.url}" class="btn btn-success btn-xs">下载</a>--%>
+										</td>
+									</tr>
+								</c:forEach>
+							</c:when>
+							<c:otherwise>
+								<tr>
+									<td colspan="5" align="center">暂无数据</td>
+								</tr>
+							</c:otherwise>
+						</c:choose>
+					</tbody>
+				</table>
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group" id="comment">
+			<label class="control-label">审批意见:</label>
+			<div class="controls">
+				<form:textarea path="act.comment" class="form-control" rows="5" maxlength="127"/>
+			</div>
+		</div>
+		<%--<div class="form-actions">
+				<c:if test="${oaBuy.act.taskDefKey eq 'audit1'}">
+					<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="${oaBuy.act.procInsId}"/>
+		<act:histoicFlow procInsId="${oaBuy.act.procInsId}"/>
+	</form:form>
+</div>
+	</div>
+	</div>
+</body>
+</html>
+

+ 385 - 0
src/main/webapp/webpage/modules/oabuy/oaBuyForm.jsp

@@ -0,0 +1,385 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>采购管理</title>
+	<meta name="decorator" content="default"/>
+	<style type="text/css">
+		.btn-file{
+			margin-top:8px;
+		}
+	</style>
+	<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){
+
+                    var len = $("#showPeo span").length;
+                    if(len<=0){
+                        parent.layer.msg("请选择审批人!",{icon:5});
+                        return false;
+                    }
+					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);
+					}
+				}
+			});
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+
+            laydate({
+                elem: '#deliverDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+		});
+        function selectPeople(objId,objName){
+            var showPeo = $("#showPeo").html();
+            var len = $("#showPeo span").length;
+            if(len > 4){
+                parent.layer.msg("最多添加5个审批人",{icon:5})
+                return;
+            }
+            var arr = [];
+            var a = $("#showPeo span").each(function(){
+                var dataId = $(this).attr("data-id");
+                arr.push(dataId)
+            })
+            if(arr.indexOf(objId) != -1){
+                parent.layer.msg("该审批人已被选择,不能重复选择!!!",{icon:5})
+                return ;
+            }
+            showPeo = showPeo + '<span class="badge badge-success fontSpan" data-id="'+objId+'">'+objName+'&nbsp;&nbsp;&nbsp;' +
+                '<i onclick=deletePeo(this) class="fa fa-close"></i><input type="hidden" name=adds['+len+'] value="'+objId+'"></span>';
+            $("#showPeo").html(showPeo)
+        }
+        //删除选择的人员
+        function deletePeo(obj){
+            $(obj).parent().remove()
+        }
+        function insertTitle(tValue){
+
+            var files = $("#attachment_file")[0].files;
+            for(var i = 0;i<files.length;i++) {
+                var file = files[i];
+            var attachmentId = $("#id").val();
+            var attachmentFlag = "69";
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workClientInfo/"+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,"0");
+        }}
+
+
+       /* function addRow(list, idx, buyDetailsTpl, row) {
+            if (idx < 1) {
+                $(list).append(Mustache.render(buyDetailsTpl, {
+                    idx: idx, delBtn: true, row: row
+                }));
+                $(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");
+                        }
+                    }
+                });
+            }
+        }*/
+        /**
+         * 只允许输入汉字
+         * @param value
+         */
+        function testOurBank(value){
+            if(!/^[\u4e00-\u9fa5]*$/.test( value )){
+                parent.layer.msg("必须输入汉字",{icon:6});
+            }
+        }
+        /**
+         * 只允许输入数字
+         * @param value
+         */
+        function testBankNumber(value){
+            if(!/^\d*$/.test( value )){
+                parent.layer.msg("价格必须输入数字",{icon:6});
+            }
+        }
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#buyDetailsList tr").length;
+            if(list == '#buyDetailsList' && 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 = $("#buyDetailsList tr").length; //tr 总数
+            for(var i = 0;i < idx1;i++){
+                $("#buyDetailsList tr").eq(i).find("td").eq(1).html(i + 1);
+            }
+            var idx2 = $("#buyDetailsList tr").length; //tr 总数
+            for(var i = 0;i < idx1;i++){
+                $("#buyDetailsList tr").eq(i).find("td").eq(1).html(i + 1);
+            }
+        }
+	</script>
+</head>
+<body class="hideScroll">
+<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}/oabuy/oaBuy/list">采购申请信息</a></li>
+				<li><a href="${ctx}/oabuy/oaBuy/oaBuyTodoList">待办任务</a></li>
+				<li><a href="${ctx}/oabuy/oaBuy/oaBuyHistoricList">已办任务</a></li>
+				<li class="active"><a href="${ctx}/oabuy/oaBuy/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">
+		<form:form id="inputForm" modelAttribute="oaBuy" action="${ctx}/oabuy/oaBuy/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<sys:message content="${message}"/>
+			<div class="control-group">
+				<label class="control-label"><font color="red">*</font>申请事由:</label>
+				<div class="controls">
+					<textarea id="applyContent" name="applyContent" maxlength="20" class="form-control required" rows="3" aria-required="true"></textarea>
+					<span class="help-inline"></span>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label">采购类型:</label>
+				<div class="controls">
+				<td class="width-35">
+					<form:select path="buySort" class="form-control ">
+						<form:option value="" label=""/>
+						<form:options items="${fns:getDictList('buy_sort')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+					</form:select>
+				</td>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label">交付日期:</label>
+				<div class="controls">
+					<input class="form-control layer-date laydate-icon required" id="deliverDate" name="deliverDate"
+						    value="<fmt:formatDate value="${oaBuy.deliverDate}" pattern="yyyy-MM-dd"/>
+								" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label">采购明细:</label>
+				<div class="controls">
+					<tr>
+						<td class="width-15 active"></td>
+						<td class="width-75"  colspan="3">
+							<div id="kh">
+								<a class="btn btn-info btn-xs" onclick="addRow('#buyDetailsList', buyDetailsRowIdx, buyDetailsTpl);buyDetailsRowIdx = buyDetailsRowIdx + 1;" title="新增"><i class="fa fa-plus"></i> 增加明细</a>
+							</div>
+							<div>
+								<table id="bankinfo" class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+								<thead>
+								<tr>
+									<th class="">序号</th>
+									<th class="">名称</th>
+									<th class="">规格</th>
+									<th class="">数量</th>
+									<th class="">单位</th>
+									<th class="">价格</th>
+									<th>操作</th>
+								</tr>
+								</thead>
+								<tbody id="buyDetailsList">
+								</tbody>
+							</table>
+								<script type="text/template" id="buyDetailsTpl">//<!--
+                                <tr id="buyDetailsList{{idx}}">
+                                    <td class="hide">
+                                        <input id="buyDetailsList{{idx}}_id" name="buyDetailsList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                        <input id="buyDetailsList{{idx}}_delFlag" name="buyDetailsList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                    </td>
+                                    <td>
+                                        {{order}}
+                                    </td>
+                                    <td>
+                                        <input id="buyDetailsList{{idx}}_name" name="buyDetailsList[{{idx}}].name" type="text" value="{{row.name}}"    class="form-control "/>
+                                    </td>
+									 <td>
+                                        <input id="buyDetailsList{{idx}}_format"  name="buyDetailsList[{{idx}}].format" type="text" value="{{row.format}}"    class="form-control "/>
+                                    </td>
+                                    <td>
+                                        <input id="buyDetailsList{{idx}}_amount" name="buyDetailsList[{{idx}}].amount" type="text" value="{{row.amount}}"    class="form-control "/>
+                                    </td>
+									<td>
+                                        <input id="buyDetailsList{{idx}}_unit"  name="buyDetailsList[{{idx}}].unit" type="text" value="{{row._unit}}"    class="form-control "/>
+                                    </td>
+                                     <td>
+                                        <input id="buyDetailsList{{idx}}_price" onblur="testBankNumber(this.value)" name="buyDetailsList[{{idx}}].price" type="text" value="{{row.price}}"    class="form-control "/>
+                                    </td>
+                                    <td class="text-center" width="10">
+                                        {{#delBtn}}<span class="close" onclick="delRow(this, '#buyDetailsList{{idx}}')" title="删除">&times;</span>{{/delBtn}}
+                                    </td>
+                                </tr>//-->
+								</script>
+							<script type="text/javascript">
+								var buyDetailsRowIdx = 0, buyDetailsTpl = $("#buyDetailsTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+								$(document).ready(function() {
+									var data = ${fns:toJson(oaBuy.buyDetailsList)};
+									for (var i=0; i<data.length; i++){
+										addRow('#buyDetailsList', buyDetailsRowIdx, buyDetailsTpl, data[i]);
+										buyDetailsRowIdx = buyDetailsRowIdx + 1;
+									}
+								});
+							</script>
+						</div>
+						</td>
+					</tr>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label">支付方式:</label>
+				<div class="controls">
+				<td class="width-15 active"></td>
+				<td class="width-35">
+					<form:select path="payStyle" class="form-control ">
+						<form:option value="" label=""/>
+						<form:options items="${fns:getDictList('pay_style')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+					</form:select>
+				</td>
+				</div>
+			</div>
+
+			<div class="control-group">
+				<label class="control-label">图片:</label>
+				<div class="controls">
+					<div style="display: inline-block">
+						<div id="addFile_attachment" style="display: none">
+							<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);"/>
+						<a id="attachment_btn" class="btn btn-info btn-xs" ><i class="fa fa-plus"></i> 添加附件</a>
+						<span id="attachment_title"></span>
+					</div>
+					<br><br>
+					<table id="upTable" class="table table-striped table-bordered table-condensed">
+						<thead>
+						<tr>
+							<th class="hide"></th>
+							<%--<th>序号</th>--%>
+							<th>文件名</th>
+							<th>上传人</th>
+							<th>上传时间</th>
+							<th width="100">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_attachment">
+						</tbody>
+					</table>
+					<span class="help-inline"></span>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label"><font color="red">*</font>抄送人:</label>
+				<div id="CCId" class="controls">
+					<sys:treeselect id="CCId" name="CCId" value="${leave.CCId}" labelName="idNames" labelValue="${leave.idNames}"
+									title="用户" url="/sys/office/treeDataAll?type=3&isAll=false" cssClass="form-control required" notAllowSelectParent="true" checked="true"/>
+					<span class="help-inline"></span>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label"><font color="red">*</font>审批人:</label>
+				<div id="addida" class="controls">
+					<sys:treeselectleave id="ida" name="ida" value="${leave.ida}" labelName="idNamea" labelValue="${leave.idNamea}"
+										 title="用户" url="/sys/office/treeDataAll?type=3&isAll=false" cssClass="form-control" notAllowSelectParent="true"/>
+					<span class="help-inline"></span>
+				</div>
+				<div id="showPeo" class="controls">
+				</div>
+
+			</div>
+			<div class="control-group">
+				<label class="control-label">备注信息:</label>
+				<div class="controls">
+					<td class="width-15 active"></td>
+					<td class="width-35">
+						<form:textarea path="remarks" htmlEscape="false" rows="4"    class="form-control "/>
+					</td>
+				</div>
+			</div>
+			<div class="form-actions">
+				<input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp;
+				<input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+			</div>
+		</form:form>
+	</div>
+</div>
+</div>
+</body>
+</html>

+ 106 - 0
src/main/webapp/webpage/modules/oabuy/oaBuyForms.jsp

@@ -0,0 +1,106 @@
+<%@ 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: '#deliverDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+			            event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+			        });
+		});
+	</script>
+</head>
+<body class="hideScroll">
+		<form:form id="inputForm" modelAttribute="oaBuy" action="${ctx}/oabuy/oaBuy/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="status" 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="officeId" 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="processInstanceId" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">申请事由:</label></td>
+					<td class="width-35">
+						<form:input path="applyContent" 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="buySort" class="form-control ">
+							<form:option value="" label=""/>
+							<form:options items="${fns:getDictList('')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+						</form:select>
+					</td>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>交付日期:</label></td>
+					<td class="width-35">
+						<input id="deliverDate" name="deliverDate" type="text" maxlength="20" class="laydate-icon form-control layer-date required"
+							value="<fmt:formatDate value="${oaBuy.deliverDate}" 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">
+						<form:select path="payStyle" class="form-control ">
+							<form:option value="" label=""/>
+							<form:options items="${fns:getDictList('')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+						</form:select>
+					</td>
+					<td class="width-15 active"></td>
+		   			<td class="width-35" ></td>
+		  		</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 103 - 0
src/main/webapp/webpage/modules/oabuy/oaBuyHistoricList.jsp

@@ -0,0 +1,103 @@
+<%@ 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>
+</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}/oabuy/oaBuy/list">采购申请信息</a></li>
+					<li><a href="${ctx}/oabuy/oaBuy/oaBuyTodoList">待办任务</a></li>
+					<li class="active"><a href="${ctx}/oabuy/oaBuy/oaBuyHistoricList">已办任务</a></li>
+					<li ><a href="${ctx}/oabuy/oaBuy/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}/oabuy/oaBuy/oaBuyHistoricList" 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 class="form-control layer-date laydate-icon required" id="beginDate" name="beginDate" readonly="readonly" value="<fmt:formatDate value="${act.beginDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							 -- 
+							<input class="form-control layer-date laydate-icon required" id="endDate" name="endDate" readonly="readonly" value="<fmt:formatDate value="${act.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+						</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;">流程发起人</th>
+					<th style="text-align: center;">流程名称</th>
+					<th style="text-align: center;">流程版本</th>
+					<th style="text-align: center;">申请事由</th>
+					<th style="text-align: center;">创建时间</th>
+					<th style="text-align: center;">操作</th>
+				</tr>
+				</thead>
+				<tbody>
+				<c:forEach items="${list}" var="oaBuy">
+					<c:set var="task" value="${oaBuy.act.task}" />
+					<c:set var="vars" value="${oaBuy.act.vars}" />
+					<c:set var="procDef" value="${oaBuy.act.procDef}" />
+					<c:set var="status" value="${oaBuy.act.status}" />
+					<tr>
+						<td>${oaBuy.act.vars.map.applyUserId}</td>
+						<td>${procDef.name}</td>
+						<td><b title='流程版本号'>V: ${procDef.version}</b></td>
+						<td><a  href="javascript:void(0)" onclick="openDialogView('查看采购申请信息', '${ctx}/oabuy/oaBuy/form?id=${oaBuy.id}&tabId=0','80%','80%')">
+								${oaBuy.applyContent}
+						</a></td>
+						<td><fmt:formatDate value="${oaBuy.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+						<td>
+						</td>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+	</div>
+</div>
+</body>
+</html>

+ 153 - 0
src/main/webapp/webpage/modules/oabuy/oaBuyList.jsp

@@ -0,0 +1,153 @@
+<%@ 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">
+		$(document).ready(function() {
+		});
+	</script>
+</head>
+<body class="gray-bg">
+	<div class="wrapper wrapper-content">
+	<div class="ibox">
+	<div class="ibox-title">
+		<h5>
+			<ul class="nav nav-tabs">
+				<li class="active"><a href="${ctx}/oabuy/oaBuy/list">采购申请信息</a></li>
+				<li><a href="${ctx}/oabuy/oaBuy/oaBuyTodoList">待办任务</a></li>
+				<li><a href="${ctx}/oabuy/oaBuy/oaBuyHistoricList">已办任务</a></li>
+				<li ><a href="${ctx}/oabuy/oaBuy/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>
+			<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="oaBuy" action="${ctx}/oabuy/oaBuy/" 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();"/><!-- 支持排序 -->
+		<a href="#" id="moresee" class="fa fa-chevron-down" style="float: right;">更多</a>
+		<div class="form-group">
+			<label>创建时间:</label>
+			<input class="form-control layer-date laydate-icon required" id="createDateStart" name="createDateStart" readonly="readonly" value="<fmt:formatDate value="${oaBuy.createDateStart}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+			 -- 
+			<input class="form-control layer-date laydate-icon required" id="createDateEnd" name="createDateEnd" readonly="readonly" value="<fmt:formatDate value="${oaBuy.createDateEnd}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+
+			&nbsp;&nbsp;
+			<label>审核状态:</label>
+			<form:select path="status"  class="form-control m-b">
+				<form:option value="" label=""/>
+				<form:options items="${fns:getDictList('act_status')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+			</form:select>
+		</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=""> <input type="checkbox" class="i-checks"></th>
+				<th style="text-align: center;"  class="sort-column applyContent">申请事由</th>
+				<th style="text-align: center;"  class="sort-column buySort">采购类型</th>
+				<th style="text-align: center;"  class="sort-column ceateBy.id">申请人</th>
+				<th style="text-align: center;"  class="sort-column createDate">创建时间</th>
+				<th style="text-align: center;"  class="sort-column status">审核状态</th>
+				<th style="text-align: center;"  class="sort-column ''">流程追踪</th>
+				<th style="text-align: center;">操作</th>
+			</tr>
+			</thead>
+			<tbody>
+			<c:choose>
+				<c:when test="${not empty page.list}">
+					<c:forEach items="${page.list}" var="oaBuy">
+						<tr>
+							<td> <input type="checkbox" id="${oaBuy.id}" class="i-checks"></td>
+							<td>
+								<a  href="javascript:void(0)" onclick="openDialogView('查看采购申请信息', '${ctx}/oabuy/oaBuy/form?id=${oaBuy.id}&tabId=0','80%','80%')">
+										${oaBuy.applyContent}
+								</a>
+							</td>
+							<td>${fns:getDictLabel(oaBuy.buySort, 'buy_sort', '')}</td>
+							<td>${oaBuy.createBy.name}</td>
+							<td><fmt:formatDate value="${oaBuy.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+							<td>${fns:getDictLabel(oaBuy.status, 'act_status', '')}</td>
+							<td>
+								<div style="text-align: center">
+								<a href="javascript:void(0)" onclick="openDialogView('详情', '${ctx}/oabuy/oaBuy/getProcess?id=${oaBuy.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 流程追踪</a>
+								</div>
+							</td>
+							<td>
+								<div style="text-align: center">
+								<c:if test="${oaBuy.status == 1 or oaBuy.status == 2}">
+									<a href="${ctx}/oabuy/oaBuy/revoke?id=${oaBuy.id}&processInstanceId=${oaBuy.processInstanceId}" class="btn btn-warning btn-xs" ><i class="glyphicon glyphicon-share-alt"></i> 撤回</a>
+								</c:if>
+								<c:if test="${oaBuy.status == 4 or oaBuy.status == 5}">
+									<a href="${ctx}/oabuy/oaBuy/delete?id=${oaBuy.id}" onclick="return confirmx('确认要删除该采购申请功能吗?', this.href)"   class="btn btn-danger btn-xs"><i class="fa fa-trash"></i> 删除</a>
+								</c:if>
+								</div>
+							</td>
+
+						</tr>
+					</c:forEach>
+				</c:when>
+				<c:otherwise>
+					<tr>
+						<td colspan="8" align="center">暂无数据</td>
+					</tr>
+				</c:otherwise>
+			</c:choose>
+
+			</tbody>
+		</table>
+	
+		<!-- 分页代码 -->
+	<table:page page="${page}"></table:page>
+	<br/>
+	<br/>
+	</div>
+	</div>
+</div>
+</body>
+</html>

+ 172 - 0
src/main/webapp/webpage/modules/oabuy/oaBuyTodoList.jsp

@@ -0,0 +1,172 @@
+<%@ 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">
+        function page(n,s){
+            location = '${ctx}/oabuy/oaBuy/list/?pageNo='+n+'&pageSize='+s;
+        }
+        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
+                    }
+                },
+                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}/oabuy/oaBuy/list">采购申请信息</a></li>
+					<li class="active"><a href="${ctx}/oabuy/oaBuy/oaBuyTodoList">待办任务</a></li>
+					<li><a href="${ctx}/oabuy/oaBuy/oaBuyHistoricList">已办任务</a></li>
+					<li ><a href="${ctx}/oabuy/oaBuy/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}/oabuy/oaBuy/oaBuyTodoList" 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 class="form-control layer-date laydate-icon required" id="beginDate" name="beginDate" readonly="readonly" value="<fmt:formatDate value="${act.beginDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							 -- 
+							<input class="form-control layer-date laydate-icon required" id="endDate" name="endDate" readonly="readonly" value="<fmt:formatDate value="${act.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+						</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;">流程发起人</th>
+					<th style="text-align: center;">当前环节</th>
+					<th style="text-align: center;">流程名称</th>
+					<th style="text-align: center;">流程版本</th>
+					<th style="text-align: center;">申请事由</th>
+					<th style="text-align: center;">创建时间</th>
+					<th style="text-align: center;">操作</th>
+				</tr>
+				</thead>
+				<tbody>
+				<c:forEach items="${list}" var="oaBuy">
+					<c:set var="task" value="${oaBuy.act.task}" />
+					<c:set var="vars" value="${oaBuy.act.vars}" />
+					<c:set var="procDef" value="${oaBuy.act.procDef}" /><%--
+				<c:set var="procExecUrl" value="${act.procExecUrl}" /> --%>
+					<c:set var="status" value="${oaBuy.act.status}" />
+					<tr>
+						<td>${oaBuy.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}/oabuy/oaBuy/form?id=${oaBuy.id}&tabId=0','80%','80%')">
+								${oaBuy.applyContent}
+						</a></td>
+						<td><fmt:formatDate value="${oaBuy.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+						<td>
+							<div style="text-align: center">
+							<c:if test="${not empty task.assignee}"><%--
+							<a href="${ctx}${procExecUrl}/exec/${task.taskDefinitionKey}?procInsId=${task.processInstanceId}&act.taskId=${task.id}">办理</a> --%>
+								<%--<a href="${ctx}/oabuy/oaBuy/applyOnLeave?taskId=${task.id}&taskName=${fns:urlEncode(task.name)}&taskDefKey=${task.taskDefinitionKey}&procInsId=${task.processInstanceId}&procDefId=${task.processDefinitionId}&status=${status}" class="btn btn-success btn-xs">任务办理</a>
+								--%>
+								<a href="javascript:void(0)" onclick="openDialogre('任务办理', '${ctx}/oabuy/oaBuy/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-success btn-xs" ><i class="fa fa-edit"></i> 任务办理</a>
+
+							</div>
+						</td>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+	</div>
+</div>
+</body>
+</html>

+ 15 - 0
src/main/webapp/webpage/modules/oabuy/oaBuyTrack.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>
+

+ 219 - 0
src/main/webapp/webpage/modules/oabuy/oaBuyView.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() {
+			$("#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);
+					}
+				}
+			});
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',<%=request.getAttribute("disabled")%>);
+            if (${requestScope.disabled eq 'false'}) {
+                $("#leaveType").attr('disabled',true);
+                $("#startTime").attr('disabled',true);
+                $("#endTime").attr('disabled',true);
+                $("#reason").attr('disabled',true);
+			}
+		});
+	</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">
+	<form:form id="inputForm" modelAttribute="oaBuy" action="${ctx}/oabuy/oaBuy/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}"/>
+		<c:set var="status" value="${oaBuy.act.status}" />
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>申请内容:</label>
+			<div class="controls" style="margin-top: 7px;">
+				${oaBuy.applyContent}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>采购类型:</label>
+			<div class="controls" style="margin-top: 7px;">
+					${fns:getDictLabel(oaBuy.buySort, 'buy_sort', '')}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>交付日期:</label>
+			<div class="controls" style="margin-top: 7px;">
+				<fmt:formatDate value="${oaBuy.deliverDate}" pattern="yyyy-MM-dd"/>
+				<span class="help-inline"></span>
+			</div>
+		</div>
+
+		<div class="control-group">
+			<label class="control-label">采购明细:</label>
+			<div class="controls">
+				<tr>
+				<td class="width-15 active"></td>
+				<td class="width-75"  colspan="3">
+					<div></div>
+					<table style="margin-top:10px;" id="contentTable" class="table table-striped table-bordered table-condensed">
+						<thead>
+						<tr>
+							<th>序号</th>
+							<th>名称</th>
+							<th>规格</th>
+							<th>数量</th>
+							<th>单位</th>
+							<th>价格</th>
+						</tr>
+						</thead>
+						<tbody id="buyDetailsList">
+						<c:forEach items="${oaBuy.buyDetailsList}" var="buyDetails" varStatus="status">
+							<tr>
+								<td>${status.index + 1}</td>
+								<td>${buyDetails.name}</td>
+								<td>${buyDetails.format}</td>
+								<td>${buyDetails.amount}</td>
+								<td>${buyDetails.unit}</td>
+								<td>${buyDetails.price}</td>
+							</tr>
+						</c:forEach>
+						<c:if test="${linkManSize == 0}">
+							<tr>
+								<td colspan="8">暂无数据</td>
+							</tr>
+						</c:if>
+						</tbody>
+					</table>
+				</td>
+				</tr></div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">支付方式:</label>
+			<div class="controls" style="margin-top: 7px;">
+						${fns:getDictLabel(oaBuy.payStyle, 'pay_style', '')}
+							<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">备注信息:</label>
+			<div class="controls" style="margin-top: 7px;">
+					${oaBuy.remarks}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>附件:</label>
+			<div class="controls">
+				<table id="upTable" class="table table-striped table-bordered table-condensed">
+					<thead>
+					<tr>
+						<th class="hide"></th>
+						<%--<th>序号</th>--%>
+						<th>文件名</th>
+						<th>上传人</th>
+						<th>上传时间</th>
+						<th width="100">操作</th>
+					</tr>
+					</thead>
+					<tbody id="file_attachment">
+						<c:choose>
+							<c:when test="${not empty oaBuy.workAttachments}">
+								<c:forEach items="${oaBuy.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" alt="${workClientAttachment.attachmentName}"/></td>
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','80%','80%','1')">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<td><a href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','80%','80%')">${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>
+											<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="btn btn-success btn-xs">下载</a>
+
+											<%--<a href="${ctx}/workfullmanage/workFullManage/downLoadAttach?file=${workClientAttachment.url}" class="btn btn-success btn-xs">下载</a>--%>
+										</td>
+									</tr>
+								</c:forEach>
+							</c:when>
+							<c:otherwise>
+								<tr>
+									<td colspan="5" align="center">暂无数据</td>
+								</tr>
+							</c:otherwise>
+						</c:choose>
+					</tbody>
+				</table>
+			</div>
+		</div>
+	</form:form>
+</div>
+	</div>
+	</div>
+</body>
+</html>
+

+ 153 - 0
src/main/webapp/webpage/modules/oaperformance/oaPerformanceAudit.jsp

@@ -0,0 +1,153 @@
+<%@ 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);
+					}
+				}
+			});
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',<%=request.getAttribute("disabled")%>);
+            if (${requestScope.disabled eq 'false'}) {
+                $("#leaveType").attr('disabled',true);
+                $("#startTime").attr('disabled',true);
+                $("#endTime").attr('disabled',true);
+                $("#reason").attr('disabled',true);
+			}
+		});
+	</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">
+	<form:form id="inputForm" modelAttribute="oaPerformance" action="${ctx}/oaperformance/oaPerformance/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="${oaPerformance.act.status}" />
+
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>上月工作任务:</label>
+			<div class="controls">
+					${oaPerformance.lastWork}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>实际完成任务:</label>
+			<div class="controls">
+					${oaPerformance.finishWork}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>任务达成率:</label>
+			<div class="controls">
+					${oaPerformance.finishRate}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+
+
+		<div class="control-group">
+			<label class="control-label">上月工作自评:</label>
+			<div class="controls" style="margin-top: 7px;">
+				${oaPerformance.lastPerformance}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>本月工作任务:</label>
+			<div class="controls">
+					${oaPerformance.nowWork}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+
+		<div class="control-group">
+			<label class="control-label">本月工作计划:</label>
+			<div class="controls" style="margin-top: 7px;">
+					${oaPerformance.nowPlan}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group" id="comment">
+			<label class="control-label">审批意见:</label>
+			<div class="controls">
+				<form:textarea path="act.comment" class="form-control" rows="5" maxlength="127"/>
+			</div>
+		</div>
+		<%--<div class="form-actions">
+				<c:if test="${oaPerformance.act.taskDefKey eq 'audit1'}">
+					<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="${oaPerformance.act.procInsId}"/>
+		<act:histoicFlow procInsId="${oaPerformance.act.procInsId}"/>
+	</form:form>
+</div>
+	</div>
+	</div>
+</body>
+</html>
+

+ 178 - 0
src/main/webapp/webpage/modules/oaperformance/oaPerformanceForm.jsp

@@ -0,0 +1,178 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>绩效自评</title>
+	<meta name="decorator" content="default"/>
+	<style type="text/css">
+		.btn-file{
+			margin-top:8px;
+		}
+	</style>
+	<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){
+                    var len = $("#showPeo span").length;
+                    if(len<=0){
+                        parent.layer.msg("请选择审批人!",{icon:5});
+                        return false;
+                    }
+					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 selectPeople(objId,objName){
+            var showPeo = $("#showPeo").html();
+            var len = $("#showPeo span").length;
+            if(len > 4){
+                parent.layer.msg("最多添加5个审批人",{icon:5})
+                return;
+            }
+            var arr = [];
+            var a = $("#showPeo span").each(function(){
+                var dataId = $(this).attr("data-id");
+                arr.push(dataId)
+            })
+            if(arr.indexOf(objId) != -1){
+                parent.layer.msg("该审批人已被选择,不能重复选择!!!",{icon:5})
+                return ;
+            }
+            showPeo = showPeo + '<span class="badge badge-success fontSpan" data-id="'+objId+'">'+objName+'&nbsp;&nbsp;&nbsp;' +
+                '<i onclick=deletePeo(this) class="fa fa-close"></i><input type="hidden" name=adds['+len+'] value="'+objId+'"></span>';
+            $("#showPeo").html(showPeo)
+        }
+        //删除选择的人员
+        function deletePeo(obj){
+            $(obj).parent().remove()
+        }
+
+	</script>
+</head>
+<body class="hideScroll">
+<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}/oaperformance/oaPerformance/list">绩效自评</a></li>
+				<li><a href="${ctx}/oaperformance/oaPerformance/oaPerformanceTodoList">待办任务</a></li>
+				<li><a href="${ctx}/oaperformance/oaPerformance/oaPerformanceHistoricList">已办任务</a></li>
+				<li class="active"><a href="${ctx}/oaperformance/oaPerformance/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">
+		<form:form id="inputForm" modelAttribute="oaPerformance" action="${ctx}/oaperformance/oaPerformance/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<sys:message content="${message}"/>
+			<div class="control-group">
+				<label class="control-label"><font color="red">*</font>上月工作任务:</label>
+				<div class="controls">
+					<textarea id="lastWork" name="lastWork" maxlength="200" class="form-control required" rows="3" aria-required="true"></textarea>
+					<span class="help-inline"></span>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label"><font color="red">*</font>实际完成任务:</label>
+				<div class="controls">
+					<textarea id="finishWork" name="finishWork" maxlength="200" class="form-control required" rows="3" aria-required="true"></textarea>
+					<span class="help-inline"></span>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label"><font color="red">*</font>任务达成率:</label>
+				<div class="controls">
+					<input id="finishRate" name="finishRate" maxlength="20" class="form-control required" rows="3" aria-required="true"></input>
+					<span class="help-inline"></span>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label"><font color="red">*</font>上月工作自评:</label>
+				<div class="controls">
+					<textarea id="lastPerformance" name="lastPerformance" maxlength="200" class="form-control required" rows="3" aria-required="true"></textarea>
+					<span class="help-inline"></span>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label"><font color="red">*</font>本月工作任务:</label>
+				<div class="controls">
+					<textarea id="nowWork" name="nowWork" maxlength="200" class="form-control required" rows="3" aria-required="true"></textarea>
+					<span class="help-inline"></span>
+				</div>
+			</div>
+
+			<div class="control-group">
+				<label class="control-label"><font color="red">*</font>本月工作计划:</label>
+				<div class="controls">
+					<textarea id="nowPlan" name="nowPlan" maxlength="200" class="form-control required" rows="3" aria-required="true"></textarea>
+					<span class="help-inline"></span>
+				</div>
+			</div>
+
+			<div class="control-group">
+				<label class="control-label"><font color="red">*</font>抄送人:</label>
+				<div id="CCId" class="controls">
+					<sys:treeselect id="CCId" name="CCId" value="${leave.CCId}" labelName="idNames" labelValue="${leave.idNames}"
+									title="用户" url="/sys/office/treeDataAll?type=3&isAll=false" cssClass="form-control required" notAllowSelectParent="true" checked="true"/>
+					<span class="help-inline"></span>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label"><font color="red">*</font>审批人:</label>
+				<div id="addida" class="controls">
+					<sys:treeselectleave id="ida" name="ida" value="${leave.ida}" labelName="idNamea" labelValue="${leave.idNamea}"
+										 title="用户" url="/sys/office/treeDataAll?type=3&isAll=false" cssClass="form-control" notAllowSelectParent="true"/>
+					<span class="help-inline"></span>
+				</div>
+				<div id="showPeo" class="controls">
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label">备注信息:</label>
+				<div class="controls">
+					<td class="width-15 active"></td>
+					<td class="width-35">
+						<form:textarea path="remarks" htmlEscape="false" rows="4"    class="form-control "/>
+					</td>
+				</div>
+			</div>
+			<div class="form-actions">
+				<input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp;
+				<input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+			</div>
+		</form:form>
+	</div>
+</div>
+</div>
+</body>
+</html>

+ 85 - 0
src/main/webapp/webpage/modules/oaperformance/oaPerformanceForms.jsp

@@ -0,0 +1,85 @@
+<%@ 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="oaPerformance" action="${ctx}/oaperformance/oaPerformance/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:textarea path="lastWork" htmlEscape="false" rows="4"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">实际完成任务:</label></td>
+					<td class="width-35">
+						<form:textarea path="finishWork" 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="finishRate" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">上月工作自评:</label></td>
+					<td class="width-35">
+						<form:textarea path="lastPerformance" htmlEscape="false" rows="4"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">本月工作任务:</label></td>
+					<td class="width-35">
+						<form:textarea path="nowWork" htmlEscape="false" rows="4"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">本月工作计划:</label></td>
+					<td class="width-35">
+						<form:textarea path="nowPlan" htmlEscape="false" rows="4"    class="form-control "/>
+					</td>
+					<td class="width-15 active"></td>
+		   			<td class="width-35" ></td>
+		  		</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 103 - 0
src/main/webapp/webpage/modules/oaperformance/oaPerformanceHistoricList.jsp

@@ -0,0 +1,103 @@
+<%@ 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>
+</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}/oaperformance/oaPerformance/list">绩效自评</a></li>
+					<li><a href="${ctx}/oaperformance/oaPerformance/oaPerformanceTodoList">待办任务</a></li>
+					<li class="active"><a href="${ctx}/oaperformance/oaPerformance/oaPerformanceHistoricList">已办任务</a></li>
+					<li ><a href="${ctx}/oaperformance/oaPerformance/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}/oaperformance/oaPerformance/oaPerformanceHistoricList" 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 class="form-control layer-date laydate-icon required" id="beginDate" name="beginDate" readonly="readonly" value="<fmt:formatDate value="${act.beginDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							 -- 
+							<input class="form-control layer-date laydate-icon required" id="endDate" name="endDate" readonly="readonly" value="<fmt:formatDate value="${act.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+						</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;">流程发起人</th>
+					<th style="text-align: center;">流程名称</th>
+					<th style="text-align: center;">流程版本</th>
+					<th style="text-align: center;">自评</th>
+					<th style="text-align: center;">创建时间</th>
+					<th style="text-align: center;">操作</th>
+				</tr>
+				</thead>
+				<tbody>
+				<c:forEach items="${list}" var="oaPerformance">
+					<c:set var="task" value="${oaPerformance.act.task}" />
+					<c:set var="vars" value="${oaPerformance.act.vars}" />
+					<c:set var="procDef" value="${oaPerformance.act.procDef}" />
+					<c:set var="status" value="${oaPerformance.act.status}" />
+					<tr>
+						<td>${oaPerformance.act.vars.map.applyUserId}</td>
+						<td>${procDef.name}</td>
+						<td><b title='流程版本号'>V: ${procDef.version}</b></td>
+						<td><a  href="javascript:void(0)" onclick="openDialogView('查看绩效自评', '${ctx}/oaperformance/oaPerformance/form?id=${oaPerformance.id}&tabId=0','80%','80%')">
+								${oaPerformance.lastPerformance}
+						</a></td>
+						<td><fmt:formatDate value="${oaPerformance.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+						<td>
+						</td>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+	</div>
+</div>
+</body>
+</html>

+ 179 - 0
src/main/webapp/webpage/modules/oaperformance/oaPerformanceList.jsp

@@ -0,0 +1,179 @@
+<%@ 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">
+		$(document).ready(function() {
+		});
+	</script>
+</head>
+<body class="gray-bg">
+	<div class="wrapper wrapper-content">
+	<div class="ibox">
+	<div class="ibox-title">
+		<h5>
+			<ul class="nav nav-tabs">
+				<li class="active"><a href="${ctx}/oaperformance/oaPerformance/list">绩效自评</a></li>
+				<li><a href="${ctx}/oaperformance/oaPerformance/oaPerformanceTodoList">待办任务</a></li>
+				<li><a href="${ctx}/oaperformance/oaPerformance/oaPerformanceHistoricList">已办任务</a></li>
+				<li ><a href="${ctx}/oaperformance/oaPerformance/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>
+			<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="oaPerformance" action="${ctx}/oaperformance/oaPerformance/" 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();"/><!-- 支持排序 -->
+		<a href="#" id="moresee" class="fa fa-chevron-down" style="float: right;">更多</a>
+		<div class="form-group">
+			<label>创建时间:</label>
+			<input class="form-control layer-date laydate-icon required" id="createDateStart" name="createDateStart" readonly="readonly" value="<fmt:formatDate value="${oaPerformance.createDateStart}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+			 -- 
+			<input class="form-control layer-date laydate-icon required" id="createDateEnd" name="createDateEnd" readonly="readonly" value="<fmt:formatDate value="${oaPerformance.createDateEnd}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+
+			&nbsp;&nbsp;
+			<label>审核状态:</label>
+			<form:select path="status"  class="form-control m-b">
+				<form:option value="" label=""/>
+				<form:options items="${fns:getDictList('act_status')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+			</form:select>
+		 </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> <input type="checkbox" class="i-checks"></th>
+				<%--<th  class="sort-column lastWork">上月工作任务</th>
+				<th  class="sort-column finishWork">实际完成任务</th>
+				<th  class="sort-column finishRate">任务达成率</th>--%>
+				<th style="text-align: center;"  class="sort-column lastPerformance">上月工作自评</th>
+				<th style="text-align: center;"  class="sort-column ceateBy.id">申请人</th>
+				<th style="text-align: center;"  class="sort-column createDate">创建时间</th>
+				<th style="text-align: center;"  class="sort-column status">申请状态</th>
+				<th style="text-align: center;"  class="sort-column ''">流程追踪</th>
+				<th style="text-align: center;">操作</th>
+				<%--<th  class="sort-column nowWork">本月工作任务</th>
+				<th  class="sort-column nowPlan">本月工作计划</th>--%>
+			</tr>
+		</thead>
+		<tbody>
+		<c:choose>
+		<c:when test="${not empty page.list}">
+		<c:forEach items="${page.list}" var="oaPerformance">
+			<tr>
+				<td> <input type="checkbox" id="${oaPerformance.id}" class="i-checks"></td>
+				<td><a  href="javascript:void(0)" onclick="openDialogView('查看绩效自评', '${ctx}/oaperformance/oaPerformance/form?id=${oaPerformance.id}&tabId=0','80%','80%')">
+					${oaPerformance.lastPerformance}
+				</a></td>
+				<td>${oaPerformance.createBy.name}</td>
+				<td><fmt:formatDate value="${oaPerformance.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+				<td>${fns:getDictLabel(oaPerformance.status, 'act_status', '')}</td>
+				<td>
+					<a href="javascript:void(0)" onclick="openDialogView('详情', '${ctx}/oaperformance/oaPerformance/getProcess?id=${oaPerformance.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 流程追踪</a>
+				</td>
+				<td>
+					<div style="text-align: center">
+					<c:if test="${oaPerformance.status == 1 or oaPerformance.status == 2}">
+						<a href="${ctx}/oaperformance/oaPerformance/revoke?id=${oaPerformance.id}&processInstanceId=${oaPerformance.processInstanceId}" class="btn btn-warning btn-xs" ><i class="glyphicon glyphicon-share-alt"></i> 撤回</a>
+					</c:if>
+					<c:if test="${oaPerformance.status == 4 or oaPerformance.status == 5}">
+						<a href="${ctx}/oaperformance/oaPerformance/delete?id=${oaPerformance.id}" onclick="return confirmx('确认要删除该绩效自评申请功能吗?', this.href)"   class="btn btn-danger btn-xs"><i class="fa fa-trash"></i> 删除</a>
+					</c:if>
+					</div>
+				</td>
+				<%--<td>
+					${oaPerformance.lastWork}
+				</td>
+				<td>
+					${oaPerformance.finishWork}
+				</td>
+				<td>
+					${oaPerformance.finishRate}
+				</td>
+				<td>
+					${oaPerformance.lastPerformance}
+				</td>
+				<td>
+					${oaPerformance.nowWork}
+				</td>
+				<td>
+					${oaPerformance.nowPlan}
+				</td>--%>
+				<%--<td>
+					<shiro:hasPermission name="oaperformance:oaPerformance:view">
+						<a href="javascript:void(0)" onclick="openDialogView('查看绩效自评', '${ctx}/oaperformance/oaPerformance/form?id=${oaPerformance.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="oaperformance:oaPerformance:edit">
+    					<a href="javascript:void(0)" onclick="openDialog('修改绩效自评', '${ctx}/oaperformance/oaPerformance/form?id=${oaPerformance.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="oaperformance:oaPerformance:del">
+						<a href="${ctx}/oaperformance/oaPerformance/delete?id=${oaPerformance.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>
+		</c:when>
+			<c:otherwise>
+				<tr>
+					<td colspan="8" align="center">暂无数据</td>
+				</tr>
+			</c:otherwise>
+		</c:choose>
+		</tbody>
+	</table>
+	
+		<!-- 分页代码 -->
+	<table:page page="${page}"></table:page>
+	<br/>
+	<br/>
+	</div>
+	</div>
+</div>
+</body>
+</html>

+ 174 - 0
src/main/webapp/webpage/modules/oaperformance/oaPerformanceTodoList.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 src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>
+	<script type="text/javascript">
+        function page(n,s){
+            location = '${ctx}/oaperformance/oaPerformance/list/?pageNo='+n+'&pageSize='+s;
+        }
+        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
+                    }
+                },
+                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}/oaperformance/oaPerformance/list">绩效自评</a></li>
+					<li class="active"><a href="${ctx}/oaperformance/oaPerformance/oaPerformanceTodoList">待办任务</a></li>
+					<li><a href="${ctx}/oaperformance/oaPerformance/oaPerformanceHistoricList">已办任务</a></li>
+					<li ><a href="${ctx}/oaperformance/oaPerformance/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}/oaperformance/oaPerformance/oaPerformanceTodoList" 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 class="form-control layer-date laydate-icon required" id="beginDate" name="beginDate" readonly="readonly" value="<fmt:formatDate value="${act.beginDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							 -- 
+							<input class="form-control layer-date laydate-icon required" id="endDate" name="endDate" readonly="readonly" value="<fmt:formatDate value="${act.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+						</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;">流程发起人</th>
+					<th style="text-align: center;">当前环节</th>
+					<th style="text-align: center;">流程名称</th>
+					<th style="text-align: center;">流程版本</th>
+					<th style="text-align: center;">自评</th>
+					<th style="text-align: center;">创建时间</th>
+					<th style="text-align: center;">操作</th>
+				</tr>
+				</thead>
+				<tbody>
+				<c:forEach items="${list}" var="oaPerformance">
+					<c:set var="task" value="${oaPerformance.act.task}" />
+					<c:set var="vars" value="${oaPerformance.act.vars}" />
+					<c:set var="procDef" value="${oaPerformance.act.procDef}" /><%--
+				<c:set var="procExecUrl" value="${act.procExecUrl}" /> --%>
+					<c:set var="status" value="${oaPerformance.act.status}" />
+					<tr>
+						<td>${oaPerformance.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}/oaperformance/oaPerformance/form?id=${oaPerformance.id}&tabId=0','80%','80%')">
+									${oaPerformance.lastPerformance}
+							</a>
+						</td>
+						<td><fmt:formatDate value="${oaPerformance.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+						<td>
+							<div style="text-align: center">
+							<c:if test="${not empty task.assignee}"><%--
+							<a href="${ctx}${procExecUrl}/exec/${task.taskDefinitionKey}?procInsId=${task.processInstanceId}&act.taskId=${task.id}">办理</a> --%>
+								<%--<a href="${ctx}/oaperformance/oaPerformance/applyOnLeave?taskId=${task.id}&taskName=${fns:urlEncode(task.name)}&taskDefKey=${task.taskDefinitionKey}&procInsId=${task.processInstanceId}&procDefId=${task.processDefinitionId}&status=${status}" class="btn btn-success btn-xs">任务办理</a>
+								--%><a href="javascript:void(0)" onclick="openDialogre('任务办理', '${ctx}/oaperformance/oaPerformance/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-success btn-xs" ><i class="fa fa-edit"></i> 任务办理</a>
+
+							</c:if>
+							</div>
+						</td>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+	</div>
+</div>
+</body>
+</html>

+ 15 - 0
src/main/webapp/webpage/modules/oaperformance/oaPerformanceTrack.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>
+

+ 134 - 0
src/main/webapp/webpage/modules/oaperformance/oaPerformanceView.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">
+		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);
+					}
+				}
+			});
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',<%=request.getAttribute("disabled")%>);
+            if (${requestScope.disabled eq 'false'}) {
+                $("#leaveType").attr('disabled',true);
+                $("#startTime").attr('disabled',true);
+                $("#endTime").attr('disabled',true);
+                $("#reason").attr('disabled',true);
+			}
+		});
+	</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">
+	<form:form id="inputForm" modelAttribute="oaPerformance" action="${ctx}/oaperformance/oaPerformance/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}"/>
+		<c:set var="status" value="${oaPerformance.act.status}" />
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>上月工作任务:</label>
+			<div class="controls" style="margin-top: 7px;">
+				${oaPerformance.lastWork}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>实际完成任务:</label>
+			<div class="controls" style="margin-top: 7px;">
+					${oaPerformance.finishWork}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>任务达成率:</label>
+			<div class="controls" style="margin-top: 7px;">
+					${oaPerformance.finishRate}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>上月工作自评:</label>
+			<div class="controls" style="margin-top: 7px;">
+					${oaPerformance.lastPerformance}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+		<label class="control-label"><font color="red">*</font>本月工作任务:</label>
+		<div class="controls" style="margin-top: 7px;">
+				${oaPerformance.nowWork}
+			<span class="help-inline"></span>
+		</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>本月工作计划:</label>
+			<div class="controls" style="margin-top: 7px;">
+					${oaPerformance.nowPlan}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">备注信息:</label>
+			<div class="controls" style="margin-top: 7px;">
+					${oaPerformance.remarks}
+				<span class="help-inline"></span>
+			</div>
+		</div>
+	</form:form>
+</div>
+	</div>
+	</div>
+</body>
+</html>
+

+ 285 - 0
src/main/webapp/webpage/modules/officehonor/officehonorForm.jsp

@@ -0,0 +1,285 @@
+<%@ 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 type="text/css">
+		img{width: 50px;height: 50px;}
+		label.error{
+			top:40px;
+			left:0;
+		}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if($("#file_attachment tr").length==0){
+                    top.layer.alert('请上传荣誉附件!', {icon: 0});
+                    return;
+                }
+                if($("#file_attachment tr").length>1){
+                    top.layer.alert('仅可以上传一个附件!', {icon: 0});
+                    return;
+                }
+                $("#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: '#issuedDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+            laydate.render({
+                elem: '#uploadDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+
+            $("#attachment_btn").click(function () {
+                if($("#file_attachment tr").length>0){
+                    top.layer.alert('仅可以上传一个附件', {icon: 0});
+                    return;
+                }
+                $("#attachment_file").click();
+            });
+        });
+        function insertTitle(tValue){
+            var list = "${officehonor.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];
+            console.log("文件大小"+file.size);
+            if(file.size >200000){
+                top.layer.alert('文件大小限制在200K以内!', {icon: 0});
+                return;
+            }
+            var attachmentId = "";
+            var attachmentFlag = "110";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/officehonor/"+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);}
+        }
+
+
+
+        //------------------上传图片-暂弃----------------------
+        /*function next_upload_image_button(index){
+            $("#next_upload_file_"+index).click();
+        }
+
+        function next_upload_show_image(index){
+            var obj =$("#next_upload_file_"+index)[0].files[0];
+            var fileType = obj.type;
+            var url ;
+            if(fileType.endsWith("png")||fileType.endsWith("bmp")||fileType.endsWith("jpg")||fileType.endsWith("jpeg")||fileType.endsWith("gif")){
+                url = window.URL.createObjectURL(obj);
+            }else {
+                $("#next_upload_msg").css({"color":"red"});
+                next_close_img(index);
+                return false ;
+            }
+            $("#next_upload_msg").removeAttr("style");
+            $("#next_upload_image_"+index).attr("src",url);
+            var length = $("#next_upload_image_div :file").length;
+            if( index == length &&  length < 1 ){
+                next_upload_image_append(index);
+                next_add_x(index);
+            }else if(index == length && length ==1){
+                var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+                $("#next_upload_image_1").before(span);
+            }
+        }
+        function next_upload_image_append(index){
+            var div1 = "<div id='next_upload_div_"+(index+1)+"' style='float:left;position:relative;width: 57px;height: 57px;'>";
+            var img = '<img  id="next_upload_image_'+(index+1)+'" class="upload_ico" width="50px" height="50px"  onclick="next_upload_image_button('+(index+1)+')" src = "${pageContext.request.contextPath}/static/uploadify/upload_ico.png" style="cursor:pointer;"/>';
+            var input = '<input id="next_upload_file_'+(index+1)+'" type="file" style="display:none;" name="next_upload_files" onChange="next_upload_show_image('+(index+1)+')" /><br>';
+            var div2 = "</div>";
+
+            $("#next_upload_image_div").append(div1+img+input+div2);
+        }
+        function next_close_img(index) {
+            $("#next_upload_div_"+index).remove();
+            var length = $("#next_upload_image_div :file").length;
+            if(length == 0){
+                next_add_div();
+            }else if(length == 1){
+                var x = $("#next_upload_image_div").find("span").text();
+                if("x" != x){
+                    next_add_div();
+                }
+            }
+        }
+        function next_add_x(index) {
+            var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+            $("#next_upload_image_div").find("img:eq(-2)").before(span);
+        }
+        function next_add_div() {
+            var next_upload_div_1 =
+                '<div id="next_upload_div_1" style="float: left;position:relative;width: 57px;height: 57px;" >'+
+                '<img  id="next_upload_image_1" class="upload_ico" style="cursor:pointer;"  src="${pageContext.request.contextPath}/static/uploadify/upload_ico.png"  onclick="next_upload_image_button(1)"/>'+
+                '<input id="next_upload_file_1" type="file" style="display:none"  name="next_upload_files"  onchange="next_upload_show_image(1)" /><br>'+
+                '</div>';
+            $("#next_upload_image_div").html("").append(next_upload_div_1);
+        }*/
+        /*-------------------------------*/
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="officehonor" action="${ctx}/officehonor/officehonor/save" method="post"  class="form-horizontal"><%--enctype="multipart/form-data"--%>
+			<form:hidden path="id"/>
+			<form:hidden path="office.id" value="<%= UserUtils.getSelectOffice().getParent().getId()%>"/>
+			<sys:message content="${message}"/>
+			<div class="form-group layui-row first lw8">
+				<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">
+						<form:input path="companyName" 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  path="num" 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:select path="honorType" class="form-control required simple-select">
+							<form:option value="" label=""/>
+							<form:options items="${fns:getDictList('honor_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+						</form:select>
+					</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="name" htmlEscape="false" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">颁发日期:</label>
+					<div class="layui-input-block">
+						<input class="laydate-icondate layui-input form-control layer-date laydate-icon" id="issuedDate" name="issuedDate"
+							   value="<fmt:formatDate value="${officehonor.issuedDate}" 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="issuedAgency" htmlEscape="false" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">上传日期:</label>
+					<div class="layui-input-block">
+						<input class="laydate-icondate layui-input form-control layer-date laydate-icon" readonly="true" name="uploadDate"
+							   value="<fmt:formatDate value="${officehonor.uploadDate}" 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="remarks" 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">
+					<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" 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="${officehonor.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}">
+									</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>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 256 - 0
src/main/webapp/webpage/modules/officehonor/officehonorList.jsp

@@ -0,0 +1,256 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>企业荣誉管理</title>
+	<meta name="decorator" content="default"/>
+	<style type="text/css">
+		img{width: 50px;height: 50px;}
+	</style>
+	<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");
+                }
+            });
+        });
+        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: 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
+                    }
+                },
+                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 layui-row" id="queryDiv">
+
+				<form:form id="searchForm" modelAttribute="officehonor" action="${ctx}/officehonor/officehonor/" 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 with-icon">
+								<sys:treeselect id="officeId" name="office.id" value="${officehonor.office.id}" labelName="office.name" labelValue="${officehonor.office.name}"
+												title="机构" url="/sys/office/treeDataCompany"  cssClass="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="name" 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">
+                                    <form:input path="specialty" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+                                </div>
+                            </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="officehonor:officehonor:add">
+						<table:addRow url="${ctx}/officehonor/officehonor/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: [[
+                // {checkbox: true, fixed: true},
+                {field:'index',align:'center', title: '序号',width:40}
+                ,{field:'num',align:'center',sort:true ,title: '编号',minWidth:160,templet:function(d){
+                    var xml = "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看企业荣誉', '${ctx}/officehonor/officehonor/form?id=" + d.id + "&tabId=view','95%','95%')\">" +
+                        "<span title=" + d.num + ">" + d.num + "</span></a>";
+                    return xml;
+                }}
+                ,{field:'companyName',align:'center', title: '公司名称',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.companyName +"'>" + d.companyName + "</span>";
+                }}
+                ,{field:'name',align:'center', title: '荣誉名称',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.name +"'>" + d.name + "</span>";
+                }}
+                ,{field:'honorType',align:'center', title: '荣誉类型',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.honorType +"'>" + d.honorType + "</span>";
+                }}
+                ,{field:'issuedAgency', align:'center',title: '颁发机构',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.issuedAgency +"'>" + d.issuedAgency + "</span>";
+                }}
+                ,{field:'uploadDate',align:'center', sort:true ,title: '上传日期', minWidth:160}
+                ,{field:'upload',align:'center',title:"荣誉文件",minWidth:170,templet:function(d){
+                    ////对操作进行初始化
+                    var xml = "";
+                    if(d.edit1 != undefined && d.edit1 == "1")
+                        xml +="<img src="+d.url+" width="+50+" height="+50+" alt="+d.uName+">";
+
+                    if(d.edit2 != undefined && d.edit2 == "1")
+                        xml +="<a href=\"javascript:void(0)\"  >" + d.uName + "</a>";
+
+                    if(d.edit3 != undefined && d.edit3 == "1")
+                        xml +="<a href=\"javascript:void(0)\"  >" + d.uName + "</a>";
+                    return xml;
+                }}
+                /*    ,{field:'upload',align:'center',title:"资质文件",width:170,templet:function(d){
+                        ////对操作进行初始化
+                        var xml = "";
+                        if(d.edit1 != undefined && d.edit1 == "1")
+                            xml +="<img src="+d.url+" width="+50+" height="+50+" onclick=\"openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=" + d.url + ",'90%','90%')\" alt="+d.uName+">";
+
+                    if(d.edit2 != undefined && d.edit2 == "1")
+                        xml +="<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"preview('预览'," + d.url + " ,'90%','90%','1')\" >" + d.uName + "</a>";
+
+                    if(d.edit3 != undefined && d.edit3 == "1")
+                        xml +="<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"preview('预览'," + d.url + ",'90%','90%')\" >" + d.uName + "</a>";
+                    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}/officehonor/officehonor/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}/officehonor/officehonor/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="officehonor" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${officehonor.id}"
+                    ,"num":"${officehonor.num}"
+                    ,"companyName":"${officehonor.companyName}"
+                    ,"name":"${officehonor.name}"
+                    ,"honorType":"${officehonor.honorType}"
+                    ,"issuedAgency":"${officehonor.issuedAgency}"
+                    ,"url":"${officehonor.url}"
+                    ,"uName":"${officehonor.uName}"
+                    ,"uploadDate":"<fmt:formatDate value="${officehonor.uploadDate}" pattern="yyyy-MM-dd"/>"
+                    <shiro:hasPermission name="officehonor:officehonor:edit"><c:choose>
+                    <c:when test="${fns:getOffice().parent.type == '1' || fns:getOffice().parent.id == officehonor.office.id}">,"canedit1":"1"</c:when>
+                    </c:choose></shiro:hasPermission>
+                    <shiro:hasPermission name="officehonor:officehonor:del"><c:choose>
+                    <c:when test="${fns:getOffice().parent.type == '1' || fns:getOffice().parent.id == officehonor.office.id}">,"candelete":"1"</c:when>
+                    </c:choose></shiro:hasPermission>
+                    <c:choose>
+                    <c:when test="${fn:containsIgnoreCase(officehonor.uName,'jpg')
+                                                           or fn:containsIgnoreCase(officehonor.uName,'png')
+                                                           or fn:containsIgnoreCase(officehonor.uName,'gif')
+                                                           or fn:containsIgnoreCase(officehonor.uName,'bmp')
+                                                           or fn:containsIgnoreCase(officehonor.uName,'jpeg')}">,"edit1":"1"</c:when>
+                    <c:otherwise>
+                    <c:choose>
+                    <c:when test="${fn:containsIgnoreCase(officehonor.uName,'pdf')}">
+                    ,"edit2":"1"</c:when>
+                    <c:otherwise>
+                    ,"edit3":"1"</c:otherwise>
+                    </c:choose>
+                    </c:otherwise>
+                    </c:choose>
+
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+
+    resizeListTable();
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+</body>
+</html>

+ 269 - 0
src/main/webapp/webpage/modules/officehonor/officehonorView.jsp

@@ -0,0 +1,269 @@
+<%@ 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 type="text/css">
+		img{width: 50px;height: 50px;}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if($("#file_attachment tr").length==0){
+                    top.layer.alert('请上传资质附件!', {icon: 0});
+                    return;
+                }
+                $("#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: '#issuedDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+            laydate.render({
+                elem: '#uploadDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+
+            $("#attachment_btn").click(function () {
+                if($("#file_attachment tr").length>0){
+                    top.layer.alert('仅可以上传一个附件', {icon: 0});
+                    return;
+                }
+                $("#attachment_file").click();
+            });
+        });
+        function insertTitle(tValue){
+            var list = "${officehonor.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 = "110";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/officehonor/"+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);}
+        }
+
+
+
+        //------------------上传图片-暂弃----------------------
+        /*function next_upload_image_button(index){
+            $("#next_upload_file_"+index).click();
+        }
+
+        function next_upload_show_image(index){
+            var obj =$("#next_upload_file_"+index)[0].files[0];
+            var fileType = obj.type;
+            var url ;
+            if(fileType.endsWith("png")||fileType.endsWith("bmp")||fileType.endsWith("jpg")||fileType.endsWith("jpeg")||fileType.endsWith("gif")){
+                url = window.URL.createObjectURL(obj);
+            }else {
+                $("#next_upload_msg").css({"color":"red"});
+                next_close_img(index);
+                return false ;
+            }
+            $("#next_upload_msg").removeAttr("style");
+            $("#next_upload_image_"+index).attr("src",url);
+            var length = $("#next_upload_image_div :file").length;
+            if( index == length &&  length < 1 ){
+                next_upload_image_append(index);
+                next_add_x(index);
+            }else if(index == length && length ==1){
+                var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+                $("#next_upload_image_1").before(span);
+            }
+        }
+        function next_upload_image_append(index){
+            var div1 = "<div id='next_upload_div_"+(index+1)+"' style='float:left;position:relative;width: 57px;height: 57px;'>";
+            var img = '<img  id="next_upload_image_'+(index+1)+'" class="upload_ico" width="50px" height="50px"  onclick="next_upload_image_button('+(index+1)+')" src = "${pageContext.request.contextPath}/static/uploadify/upload_ico.png" style="cursor:pointer;"/>';
+            var input = '<input id="next_upload_file_'+(index+1)+'" type="file" style="display:none;" name="next_upload_files" onChange="next_upload_show_image('+(index+1)+')" /><br>';
+            var div2 = "</div>";
+
+            $("#next_upload_image_div").append(div1+img+input+div2);
+        }
+        function next_close_img(index) {
+            $("#next_upload_div_"+index).remove();
+            var length = $("#next_upload_image_div :file").length;
+            if(length == 0){
+                next_add_div();
+            }else if(length == 1){
+                var x = $("#next_upload_image_div").find("span").text();
+                if("x" != x){
+                    next_add_div();
+                }
+            }
+        }
+        function next_add_x(index) {
+            var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+            $("#next_upload_image_div").find("img:eq(-2)").before(span);
+        }
+        function next_add_div() {
+            var next_upload_div_1 =
+                '<div id="next_upload_div_1" style="float: left;position:relative;width: 57px;height: 57px;" >'+
+                '<img  id="next_upload_image_1" class="upload_ico" style="cursor:pointer;"  src="${pageContext.request.contextPath}/static/uploadify/upload_ico.png"  onclick="next_upload_image_button(1)"/>'+
+                '<input id="next_upload_file_1" type="file" style="display:none"  name="next_upload_files"  onchange="next_upload_show_image(1)" /><br>'+
+                '</div>';
+            $("#next_upload_image_div").html("").append(next_upload_div_1);
+        }*/
+        /*-------------------------------*/
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<form:form id="inputForm" modelAttribute="officehonor" action="${ctx}/officehonor/officehonor/save" method="post"  class="form-horizontal"><%--enctype="multipart/form-data"--%>
+			<form:hidden path="id"/>
+			<form:hidden path="office.id" value="<%= UserUtils.getSelectOffice().getParent().getId()%>"/>
+			<sys:message content="${message}"/>
+			<div class="form-group layui-row first lw8">
+				<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">
+						<input htmlEscape="false"   readonly="true" class="form-control layui-input" value="${officehonor.companyName}"/>
+					</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="${officehonor.num}"/>
+					</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="${fns:getDictLabel(officehonor.honorType, 'honor_type','')}"/>
+					</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="${officehonor.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">颁发日期:</label>
+					<div class="layui-input-block">
+						<input class="laydate-icondate layui-input form-control layer-date laydate-icon" name="issuedDate"
+							   value="<fmt:formatDate value="${officehonor.issuedDate}" 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">
+						<input htmlEscape="false"   readonly="true" class="form-control layui-input" value="${officehonor.issuedAgency}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">上传日期:</label>
+					<div class="layui-input-block">
+						<input class="laydate-icondate layui-input form-control layer-date laydate-icon" name="uploadDate"
+							   value="<fmt:formatDate value="${officehonor.uploadDate}" 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">
+						<textarea  htmlEscape="false" rows="4" readonly="true"    class="form-control ">${officehonor.remarks}</textarea>
+					</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="${officehonor.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}">
+									</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>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 254 - 0
src/main/webapp/webpage/modules/officeintroduce/officeintroduceForm.jsp

@@ -0,0 +1,254 @@
+<%@ 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 type="text/css">
+		img{width: 50px;height: 50px;}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if($("#file_attachment tr").length==0){
+                    top.layer.alert('请上传企业介绍附件!', {icon: 0});
+                    return;
+                }
+                if($("#file_attachment tr").length>1){
+                    top.layer.alert('仅可以上传一个附件!', {icon: 0});
+                    return;
+                }
+                $("#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: '#uploadDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+
+            $("#attachment_btn").click(function () {
+                if($("#file_attachment tr").length>0){
+                    top.layer.alert('仅可以上传一个附件', {icon: 0});
+                    return;
+                }
+                $("#attachment_file").click();
+            });
+        });
+        function insertTitle(tValue){
+            var list = "${officeintroduce.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];
+            console.log("文件大小"+file.size);
+            if(file.size >200000){
+                top.layer.alert('文件大小限制在200K以内!', {icon: 0});
+                return;
+            }
+            var attachmentId = "";
+            var attachmentFlag = "111";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/officeintroduce/"+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);}
+        }
+
+
+
+        //------------------上传图片-暂弃----------------------
+        /*function next_upload_image_button(index){
+            $("#next_upload_file_"+index).click();
+        }
+
+        function next_upload_show_image(index){
+            var obj =$("#next_upload_file_"+index)[0].files[0];
+            var fileType = obj.type;
+            var url ;
+            if(fileType.endsWith("png")||fileType.endsWith("bmp")||fileType.endsWith("jpg")||fileType.endsWith("jpeg")||fileType.endsWith("gif")){
+                url = window.URL.createObjectURL(obj);
+            }else {
+                $("#next_upload_msg").css({"color":"red"});
+                next_close_img(index);
+                return false ;
+            }
+            $("#next_upload_msg").removeAttr("style");
+            $("#next_upload_image_"+index).attr("src",url);
+            var length = $("#next_upload_image_div :file").length;
+            if( index == length &&  length < 1 ){
+                next_upload_image_append(index);
+                next_add_x(index);
+            }else if(index == length && length ==1){
+                var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+                $("#next_upload_image_1").before(span);
+            }
+        }
+        function next_upload_image_append(index){
+            var div1 = "<div id='next_upload_div_"+(index+1)+"' style='float:left;position:relative;width: 57px;height: 57px;'>";
+            var img = '<img  id="next_upload_image_'+(index+1)+'" class="upload_ico" width="50px" height="50px"  onclick="next_upload_image_button('+(index+1)+')" src = "${pageContext.request.contextPath}/static/uploadify/upload_ico.png" style="cursor:pointer;"/>';
+            var input = '<input id="next_upload_file_'+(index+1)+'" type="file" style="display:none;" name="next_upload_files" onChange="next_upload_show_image('+(index+1)+')" /><br>';
+            var div2 = "</div>";
+
+            $("#next_upload_image_div").append(div1+img+input+div2);
+        }
+        function next_close_img(index) {
+            $("#next_upload_div_"+index).remove();
+            var length = $("#next_upload_image_div :file").length;
+            if(length == 0){
+                next_add_div();
+            }else if(length == 1){
+                var x = $("#next_upload_image_div").find("span").text();
+                if("x" != x){
+                    next_add_div();
+                }
+            }
+        }
+        function next_add_x(index) {
+            var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+            $("#next_upload_image_div").find("img:eq(-2)").before(span);
+        }
+        function next_add_div() {
+            var next_upload_div_1 =
+                '<div id="next_upload_div_1" style="float: left;position:relative;width: 57px;height: 57px;" >'+
+                '<img  id="next_upload_image_1" class="upload_ico" style="cursor:pointer;"  src="${pageContext.request.contextPath}/static/uploadify/upload_ico.png"  onclick="next_upload_image_button(1)"/>'+
+                '<input id="next_upload_file_1" type="file" style="display:none"  name="next_upload_files"  onchange="next_upload_show_image(1)" /><br>'+
+                '</div>';
+            $("#next_upload_image_div").html("").append(next_upload_div_1);
+        }*/
+        /*-------------------------------*/
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="officeintroduce" action="${ctx}/officeintroduce/officeintroduce/save" method="post"  class="form-horizontal"><%--enctype="multipart/form-data"--%>
+			<form:hidden path="id"/>
+			<form:hidden path="office.id" value="<%= UserUtils.getSelectOffice().getParent().getId()%>"/>
+			<sys:message content="${message}"/>
+			<div class="form-group layui-row first lw8">
+				<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">
+						<form:input path="companyName" 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  path="num" htmlEscape="false"   readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label lw8"><span class="require-item">*</span>介绍名称:</label>
+					<div class="layui-input-block lw8">
+						<form:input path="introduce" htmlEscape="false" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">上传日期:</label>
+					<div class="layui-input-block">
+						<input class="laydate-icondate layui-input form-control layer-date laydate-icon" readonly="true" name="uploadDate"
+							   value="<fmt:formatDate value="${officeintroduce.uploadDate}" 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="remarks" 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">
+					<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" 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="${officeintroduce.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}">
+									</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>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 252 - 0
src/main/webapp/webpage/modules/officeintroduce/officeintroduceList.jsp

@@ -0,0 +1,252 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>企业介绍管理</title>
+	<meta name="decorator" content="default"/>
+	<style type="text/css">
+		img{width: 50px;height: 50px;}
+	</style>
+	<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");
+                }
+            });
+        });
+        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: 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
+                    }
+                },
+                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 layui-row" id="queryDiv">
+
+				<form:form id="searchForm" modelAttribute="officeintroduce" action="${ctx}/officeintroduce/officeintroduce/" 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 with-icon">
+								<sys:treeselect id="officeId" name="office.id" value="${officeintroduce.office.id}" labelName="office.name" labelValue="${officeintroduce.office.name}"
+												title="机构" url="/sys/office/treeDataCompany"  cssClass="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="introduce" 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">
+                                    <form:input path="specialty" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+                                </div>
+                            </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="officeintroduce:officeintroduce:add">
+						<table:addRow url="${ctx}/officeintroduce/officeintroduce/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: [[
+                // {checkbox: true, fixed: true},
+                {field:'index',align:'center', title: '序号',width:40}
+                ,{field:'num',align:'center',sort:true ,title: '编号',minWidth:160,templet:function(d){
+                    var xml = "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看企业介绍', '${ctx}/officeintroduce/officeintroduce/form?id=" + d.id + "&tabId=view','95%','95%')\">" +
+                        "<span title=" + d.num + ">" + d.num + "</span></a>";
+                    return xml;
+                }}
+                ,{field:'companyName',align:'center', title: '公司名称',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.companyName +"'>" + d.companyName + "</span>";
+                }}
+                ,{field:'introduce',align:'center', title: '企业介绍名称',minWidth:260,templet:function(d){
+                    return "<span title='"+ d.introduce +"'>" + d.introduce + "</span>";
+                }}
+                ,{field:'remarks',align:'center', title: '备注',minWidth:260,templet:function(d){
+                    return "<span title='"+ d.remarks +"'>" + d.remarks + "</span>";
+                }}
+                ,{field:'uploadDate',align:'center', sort:true ,title: '上传日期', minWidth:160}
+                ,{field:'upload',align:'center',title:"企业介绍文件",minWidth:170,templet:function(d){
+                    ////对操作进行初始化
+                    var xml = "";
+                    if(d.edit1 != undefined && d.edit1 == "1")
+                        xml +="<img src="+d.url+" width="+50+" height="+50+" alt="+d.uName+">";
+
+                    if(d.edit2 != undefined && d.edit2 == "1")
+                        xml +="<a href=\"javascript:void(0)\"  >" + d.uName + "</a>";
+
+                    if(d.edit3 != undefined && d.edit3 == "1")
+                        xml +="<a href=\"javascript:void(0)\"  >" + d.uName + "</a>";
+                    return xml;
+                }}
+                /*    ,{field:'upload',align:'center',title:"资质文件",width:170,templet:function(d){
+                        ////对操作进行初始化
+                        var xml = "";
+                        if(d.edit1 != undefined && d.edit1 == "1")
+                            xml +="<img src="+d.url+" width="+50+" height="+50+" onclick=\"openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=" + d.url + ",'90%','90%')\" alt="+d.uName+">";
+
+                    if(d.edit2 != undefined && d.edit2 == "1")
+                        xml +="<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"preview('预览'," + d.url + " ,'90%','90%','1')\" >" + d.uName + "</a>";
+
+                    if(d.edit3 != undefined && d.edit3 == "1")
+                        xml +="<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"preview('预览'," + d.url + ",'90%','90%')\" >" + d.uName + "</a>";
+                    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}/officeintroduce/officeintroduce/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}/officeintroduce/officeintroduce/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="officeintroduce" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${officeintroduce.id}"
+                    ,"num":"${officeintroduce.num}"
+                    ,"companyName":"${officeintroduce.companyName}"
+                    ,"introduce":"${officeintroduce.introduce}"
+                    ,"url":"${officeintroduce.url}"
+                    ,"remarks":"${officeintroduce.remarks}"
+                    ,"uName":"${officeintroduce.uName}"
+                    ,"uploadDate":"<fmt:formatDate value="${officeintroduce.uploadDate}" pattern="yyyy-MM-dd"/>"
+                    <shiro:hasPermission name="officeintroduce:officeintroduce:edit"><c:choose>
+                    <c:when test="${fns:getOffice().parent.type == '1' || fns:getOffice().parent.id == officeintroduce.office.id}">,"canedit1":"1"</c:when>
+                    </c:choose></shiro:hasPermission>
+                    <shiro:hasPermission name="officeintroduce:officeintroduce:del"><c:choose>
+                    <c:when test="${fns:getOffice().parent.type == '1' || fns:getOffice().parent.id == officeintroduce.office.id}">,"candelete":"1"</c:when>
+                    </c:choose></shiro:hasPermission>
+                    <c:choose>
+                    <c:when test="${fn:containsIgnoreCase(officeintroduce.uName,'jpg')
+                                                           or fn:containsIgnoreCase(officeintroduce.uName,'png')
+                                                           or fn:containsIgnoreCase(officeintroduce.uName,'gif')
+                                                           or fn:containsIgnoreCase(officeintroduce.uName,'bmp')
+                                                           or fn:containsIgnoreCase(officeintroduce.uName,'jpeg')}">,"edit1":"1"</c:when>
+                    <c:otherwise>
+                    <c:choose>
+                    <c:when test="${fn:containsIgnoreCase(officeintroduce.uName,'pdf')}">
+                    ,"edit2":"1"</c:when>
+                    <c:otherwise>
+                    ,"edit3":"1"</c:otherwise>
+                    </c:choose>
+                    </c:otherwise>
+                    </c:choose>
+
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+
+    resizeListTable();
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+</body>
+</html>

+ 250 - 0
src/main/webapp/webpage/modules/officeintroduce/officeintroduceView.jsp

@@ -0,0 +1,250 @@
+<%@ 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 type="text/css">
+		img{width: 50px;height: 50px;}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if($("#file_attachment tr").length==0){
+                    top.layer.alert('请上传资质附件!', {icon: 0});
+                    return;
+                }
+                $("#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: '#issuedDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+            laydate.render({
+                elem: '#uploadDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+
+            $("#attachment_btn").click(function () {
+                if($("#file_attachment tr").length>0){
+                    top.layer.alert('仅可以上传一个附件', {icon: 0});
+                    return;
+                }
+                $("#attachment_file").click();
+            });
+        });
+        function insertTitle(tValue){
+            var list = "${officeintroduce.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 = "111";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/officeintroduce/"+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);}
+        }
+
+
+
+        //------------------上传图片-暂弃----------------------
+        /*function next_upload_image_button(index){
+            $("#next_upload_file_"+index).click();
+        }
+
+        function next_upload_show_image(index){
+            var obj =$("#next_upload_file_"+index)[0].files[0];
+            var fileType = obj.type;
+            var url ;
+            if(fileType.endsWith("png")||fileType.endsWith("bmp")||fileType.endsWith("jpg")||fileType.endsWith("jpeg")||fileType.endsWith("gif")){
+                url = window.URL.createObjectURL(obj);
+            }else {
+                $("#next_upload_msg").css({"color":"red"});
+                next_close_img(index);
+                return false ;
+            }
+            $("#next_upload_msg").removeAttr("style");
+            $("#next_upload_image_"+index).attr("src",url);
+            var length = $("#next_upload_image_div :file").length;
+            if( index == length &&  length < 1 ){
+                next_upload_image_append(index);
+                next_add_x(index);
+            }else if(index == length && length ==1){
+                var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+                $("#next_upload_image_1").before(span);
+            }
+        }
+        function next_upload_image_append(index){
+            var div1 = "<div id='next_upload_div_"+(index+1)+"' style='float:left;position:relative;width: 57px;height: 57px;'>";
+            var img = '<img  id="next_upload_image_'+(index+1)+'" class="upload_ico" width="50px" height="50px"  onclick="next_upload_image_button('+(index+1)+')" src = "${pageContext.request.contextPath}/static/uploadify/upload_ico.png" style="cursor:pointer;"/>';
+            var input = '<input id="next_upload_file_'+(index+1)+'" type="file" style="display:none;" name="next_upload_files" onChange="next_upload_show_image('+(index+1)+')" /><br>';
+            var div2 = "</div>";
+
+            $("#next_upload_image_div").append(div1+img+input+div2);
+        }
+        function next_close_img(index) {
+            $("#next_upload_div_"+index).remove();
+            var length = $("#next_upload_image_div :file").length;
+            if(length == 0){
+                next_add_div();
+            }else if(length == 1){
+                var x = $("#next_upload_image_div").find("span").text();
+                if("x" != x){
+                    next_add_div();
+                }
+            }
+        }
+        function next_add_x(index) {
+            var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+            $("#next_upload_image_div").find("img:eq(-2)").before(span);
+        }
+        function next_add_div() {
+            var next_upload_div_1 =
+                '<div id="next_upload_div_1" style="float: left;position:relative;width: 57px;height: 57px;" >'+
+                '<img  id="next_upload_image_1" class="upload_ico" style="cursor:pointer;"  src="${pageContext.request.contextPath}/static/uploadify/upload_ico.png"  onclick="next_upload_image_button(1)"/>'+
+                '<input id="next_upload_file_1" type="file" style="display:none"  name="next_upload_files"  onchange="next_upload_show_image(1)" /><br>'+
+                '</div>';
+            $("#next_upload_image_div").html("").append(next_upload_div_1);
+        }*/
+        /*-------------------------------*/
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<form:form id="inputForm" modelAttribute="officeintroduce" action="${ctx}/officeintroduce/officeintroduce/save" method="post"  class="form-horizontal"><%--enctype="multipart/form-data"--%>
+			<form:hidden path="id"/>
+			<form:hidden path="office.id" value="<%= UserUtils.getSelectOffice().getParent().getId()%>"/>
+			<sys:message content="${message}"/>
+			<div class="form-group layui-row first lw8">
+				<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">
+						<input htmlEscape="false"   readonly="true" class="form-control layui-input" value="${officeintroduce.companyName}"/>
+					</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="${officeintroduce.num}"/>
+					</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="${officeintroduce.introduce}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">上传日期:</label>
+					<div class="layui-input-block">
+						<input class="laydate-icondate layui-input form-control layer-date laydate-icon" name="uploadDate"
+							   value="<fmt:formatDate value="${officeintroduce.uploadDate}" 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">
+						<textarea  htmlEscape="false" rows="4" readonly="true"    class="form-control ">${officeintroduce.remarks}</textarea>
+					</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="${officeintroduce.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}">
+									</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>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 280 - 0
src/main/webapp/webpage/modules/officelicense/officeLicenseForm.jsp

@@ -0,0 +1,280 @@
+<%@ 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 type="text/css">
+		img{width: 50px;height: 50px;}
+		label.error{
+			top:40px;
+			left:0;
+		}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if($("#file_attachment tr").length==0){
+                    top.layer.alert('请上传证照附件!', {icon: 0});
+                    return;
+                }
+                if($("#file_attachment tr").length>1){
+                    top.layer.alert('仅可以上传一个附件!', {icon: 0});
+                    return;
+                }
+                $("#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: '#firstDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+            laydate.render({
+                elem: '#continueDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+            laydate.render({
+                elem: '#uploadDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+
+            $("#attachment_btn").click(function () {
+                if($("#file_attachment tr").length>0){
+                    top.layer.alert('仅可以上传一个附件', {icon: 0});
+                    return;
+                }
+                $("#attachment_file").click();
+            });
+        });
+        function insertTitle(tValue){
+            var list = "${officeLicense.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];
+            console.log("文件大小"+file.size);
+            if(file.size >200000){
+                top.layer.alert('文件大小限制在200K以内!', {icon: 0});
+                return;
+			}
+            var attachmentId = "";
+            var attachmentFlag = "112";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/officeLicense/"+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);}
+        }
+
+
+
+        //------------------上传图片-暂弃----------------------
+        /*function next_upload_image_button(index){
+            $("#next_upload_file_"+index).click();
+        }
+
+        function next_upload_show_image(index){
+            var obj =$("#next_upload_file_"+index)[0].files[0];
+            var fileType = obj.type;
+            var url ;
+            if(fileType.endsWith("png")||fileType.endsWith("bmp")||fileType.endsWith("jpg")||fileType.endsWith("jpeg")||fileType.endsWith("gif")){
+                url = window.URL.createObjectURL(obj);
+            }else {
+                $("#next_upload_msg").css({"color":"red"});
+                next_close_img(index);
+                return false ;
+            }
+            $("#next_upload_msg").removeAttr("style");
+            $("#next_upload_image_"+index).attr("src",url);
+            var length = $("#next_upload_image_div :file").length;
+            if( index == length &&  length < 1 ){
+                next_upload_image_append(index);
+                next_add_x(index);
+            }else if(index == length && length ==1){
+                var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+                $("#next_upload_image_1").before(span);
+            }
+        }
+        function next_upload_image_append(index){
+            var div1 = "<div id='next_upload_div_"+(index+1)+"' style='float:left;position:relative;width: 57px;height: 57px;'>";
+            var img = '<img  id="next_upload_image_'+(index+1)+'" class="upload_ico" width="50px" height="50px"  onclick="next_upload_image_button('+(index+1)+')" src = "${pageContext.request.contextPath}/static/uploadify/upload_ico.png" style="cursor:pointer;"/>';
+            var input = '<input id="next_upload_file_'+(index+1)+'" type="file" style="display:none;" name="next_upload_files" onChange="next_upload_show_image('+(index+1)+')" /><br>';
+            var div2 = "</div>";
+
+            $("#next_upload_image_div").append(div1+img+input+div2);
+        }
+        function next_close_img(index) {
+            $("#next_upload_div_"+index).remove();
+            var length = $("#next_upload_image_div :file").length;
+            if(length == 0){
+                next_add_div();
+            }else if(length == 1){
+                var x = $("#next_upload_image_div").find("span").text();
+                if("x" != x){
+                    next_add_div();
+                }
+            }
+        }
+        function next_add_x(index) {
+            var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+            $("#next_upload_image_div").find("img:eq(-2)").before(span);
+        }
+        function next_add_div() {
+            var next_upload_div_1 =
+                '<div id="next_upload_div_1" style="float: left;position:relative;width: 57px;height: 57px;" >'+
+                '<img  id="next_upload_image_1" class="upload_ico" style="cursor:pointer;"  src="${pageContext.request.contextPath}/static/uploadify/upload_ico.png"  onclick="next_upload_image_button(1)"/>'+
+                '<input id="next_upload_file_1" type="file" style="display:none"  name="next_upload_files"  onchange="next_upload_show_image(1)" /><br>'+
+                '</div>';
+            $("#next_upload_image_div").html("").append(next_upload_div_1);
+        }*/
+        /*-------------------------------*/
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="officeLicense" action="${ctx}/officelicense/officeLicense/save" method="post"  class="form-horizontal"><%--enctype="multipart/form-data"--%>
+			<form:hidden path="id"/>
+			<form:hidden path="office.id" value="<%= UserUtils.getSelectOffice().getParent().getId()%>"/>
+			<sys:message content="${message}"/>
+			<div class="form-group layui-row first lw8">
+				<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">
+						<form:input path="companyName" 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  path="num" 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 path="name" htmlEscape="false" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label double-line"><span class="require-item">*</span>是否有电子章:</label>
+					<div class="layui-input-block">
+						<form:select path="isChapter" class="form-control required simple-select">
+							<form:option value="" label=""/>
+							<form:options items="${fns:getDictList('is_chapter')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+						</form:select>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">上传日期:</label>
+					<div class="layui-input-block">
+						<input class="laydate-icondate layui-input form-control layer-date laydate-icon" readonly="true" name="uploadDate"
+							   value="<fmt:formatDate value="${officeLicense.uploadDate}" 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="remarks" 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">
+					<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" 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="${officeLicense.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}">
+									</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>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 252 - 0
src/main/webapp/webpage/modules/officelicense/officeLicenseList.jsp

@@ -0,0 +1,252 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>企业证照管理</title>
+	<meta name="decorator" content="default"/>
+	<style type="text/css">
+		img{width: 50px;height: 50px;}
+	</style>
+	<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");
+                }
+            });
+        });
+        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: 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
+                    }
+                },
+                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 layui-row" id="queryDiv">
+
+				<form:form id="searchForm" modelAttribute="officeLicense" action="${ctx}/officelicense/officeLicense/" 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 with-icon">
+								<sys:treeselect id="officeId" name="office.id" value="${officeLicense.office.id}" labelName="office.name" labelValue="${officeLicense.office.name}"
+													title="机构" url="/sys/office/treeDataCompany"  cssClass="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="name" 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">
+                                    <form:input path="specialty" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+                                </div>
+                            </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="officelicense:officeLicense:add">
+						<table:addRow url="${ctx}/officelicense/officeLicense/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: [[
+                // {checkbox: true, fixed: true},
+                {field:'index',align:'center', title: '序号',minWidth:40}
+                ,{field:'num',align:'center',sort:true ,title: '编号',minWidth:160,templet:function(d){
+                    var xml = "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看企业证照', '${ctx}/officelicense/officeLicense/form?id=" + d.id + "&tabId=view','95%','95%')\">" +
+                        "<span title=" + d.num + ">" + d.num + "</span></a>";
+                    return xml;
+                }}
+                ,{field:'companyName',align:'center', title: '公司名称',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.companyName +"'>" + d.companyName + "</span>";
+                }}
+                ,{field:'name',align:'center', title: '证照名称',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.name +"'>" + d.name + "</span>";
+                }}
+                ,{field:'isChapter',align:'center', title: '是否有电子签章',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.isChapter +"'>" + d.isChapter + "</span>";
+                }}
+                ,{field:'uploadDate',align:'center', sort:true ,title: '上传日期', minWidth:160}
+                ,{field:'upload',align:'center',title:"证照文件",minWidth:170,templet:function(d){
+                    ////对操作进行初始化
+                    var xml = "";
+                    if(d.edit1 != undefined && d.edit1 == "1")
+                        xml +="<img src="+d.url+" width="+50+" height="+50+" alt="+d.uName+">";
+
+                    if(d.edit2 != undefined && d.edit2 == "1")
+                        xml +="<a href=\"javascript:void(0)\"  >" + d.uName + "</a>";
+
+                    if(d.edit3 != undefined && d.edit3 == "1")
+                        xml +="<a href=\"javascript:void(0)\"  >" + d.uName + "</a>";
+                    return xml;
+                }}
+                /*    ,{field:'upload',align:'center',title:"资质文件",width:170,templet:function(d){
+                        ////对操作进行初始化
+                        var xml = "";
+                        if(d.edit1 != undefined && d.edit1 == "1")
+                            xml +="<img src="+d.url+" width="+50+" height="+50+" onclick=\"openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=" + d.url + ",'90%','90%')\" alt="+d.uName+">";
+
+                    if(d.edit2 != undefined && d.edit2 == "1")
+                        xml +="<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"preview('预览'," + d.url + " ,'90%','90%','1')\" >" + d.uName + "</a>";
+
+                    if(d.edit3 != undefined && d.edit3 == "1")
+                        xml +="<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"preview('预览'," + d.url + ",'90%','90%')\" >" + d.uName + "</a>";
+                    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}/officelicense/officeLicense/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}/officelicense/officeLicense/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="officeLicense" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${officeLicense.id}"
+                    ,"num":"${officeLicense.num}"
+                    ,"companyName":"${officeLicense.companyName}"
+                    ,"name":"${officeLicense.name}"
+                    ,"isChapter":"${fns:getDictLabel(officeLicense.isChapter, 'is_chapter','')}"
+                    ,"url":"${officeLicense.url}"
+                    ,"uName":"${officeLicense.uName}"
+                    ,"uploadDate":"<fmt:formatDate value="${officeLicense.uploadDate}" pattern="yyyy-MM-dd"/>"
+                    <shiro:hasPermission name="officelicense:officeLicense:edit"><c:choose>
+                    <c:when test="${fns:getOffice().parent.type == '1' || fns:getOffice().parent.id == officeLicense.office.id}">,"canedit1":"1"</c:when>
+                    </c:choose></shiro:hasPermission>
+                    <shiro:hasPermission name="officelicense:officeLicense:del"><c:choose>
+                    <c:when test="${fns:getOffice().parent.type == '1' || fns:getOffice().parent.id == officeLicense.office.id}">,"candelete":"1"</c:when>
+                    </c:choose></shiro:hasPermission>
+                    <c:choose>
+                    <c:when test="${fn:containsIgnoreCase(officeLicense.uName,'jpg')
+                                                           or fn:containsIgnoreCase(officeLicense.uName,'png')
+                                                           or fn:containsIgnoreCase(officeLicense.uName,'gif')
+                                                           or fn:containsIgnoreCase(officeLicense.uName,'bmp')
+                                                           or fn:containsIgnoreCase(officeLicense.uName,'jpeg')}">,"edit1":"1"</c:when>
+                    <c:otherwise>
+                    <c:choose>
+                    <c:when test="${fn:containsIgnoreCase(officeLicense.uName,'pdf')}">
+                    ,"edit2":"1"</c:when>
+                    <c:otherwise>
+                    ,"edit3":"1"</c:otherwise>
+                    </c:choose>
+                    </c:otherwise>
+                    </c:choose>
+
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+
+    resizeListTable();
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+</body>
+</html>

+ 241 - 0
src/main/webapp/webpage/modules/officelicense/officeLicenseView.jsp

@@ -0,0 +1,241 @@
+<%@ 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 type="text/css">
+		img{width: 50px;height: 50px;}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if($("#file_attachment tr").length==0){
+                    top.layer.alert('请上传证照附件!', {icon: 0});
+                    return;
+                }
+                $("#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: '#issuedDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+            laydate.render({
+                elem: '#uploadDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+
+            $("#attachment_btn").click(function () {
+                if($("#file_attachment tr").length>0){
+                    top.layer.alert('仅可以上传一个附件', {icon: 0});
+                    return;
+                }
+                $("#attachment_file").click();
+            });
+        });
+
+
+
+        //------------------上传图片-暂弃----------------------
+        /*function next_upload_image_button(index){
+            $("#next_upload_file_"+index).click();
+        }
+
+        function next_upload_show_image(index){
+            var obj =$("#next_upload_file_"+index)[0].files[0];
+            var fileType = obj.type;
+            var url ;
+            if(fileType.endsWith("png")||fileType.endsWith("bmp")||fileType.endsWith("jpg")||fileType.endsWith("jpeg")||fileType.endsWith("gif")){
+                url = window.URL.createObjectURL(obj);
+            }else {
+                $("#next_upload_msg").css({"color":"red"});
+                next_close_img(index);
+                return false ;
+            }
+            $("#next_upload_msg").removeAttr("style");
+            $("#next_upload_image_"+index).attr("src",url);
+            var length = $("#next_upload_image_div :file").length;
+            if( index == length &&  length < 1 ){
+                next_upload_image_append(index);
+                next_add_x(index);
+            }else if(index == length && length ==1){
+                var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+                $("#next_upload_image_1").before(span);
+            }
+        }
+        function next_upload_image_append(index){
+            var div1 = "<div id='next_upload_div_"+(index+1)+"' style='float:left;position:relative;width: 57px;height: 57px;'>";
+            var img = '<img  id="next_upload_image_'+(index+1)+'" class="upload_ico" width="50px" height="50px"  onclick="next_upload_image_button('+(index+1)+')" src = "${pageContext.request.contextPath}/static/uploadify/upload_ico.png" style="cursor:pointer;"/>';
+            var input = '<input id="next_upload_file_'+(index+1)+'" type="file" style="display:none;" name="next_upload_files" onChange="next_upload_show_image('+(index+1)+')" /><br>';
+            var div2 = "</div>";
+
+            $("#next_upload_image_div").append(div1+img+input+div2);
+        }
+        function next_close_img(index) {
+            $("#next_upload_div_"+index).remove();
+            var length = $("#next_upload_image_div :file").length;
+            if(length == 0){
+                next_add_div();
+            }else if(length == 1){
+                var x = $("#next_upload_image_div").find("span").text();
+                if("x" != x){
+                    next_add_div();
+                }
+            }
+        }
+        function next_add_x(index) {
+            var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+            $("#next_upload_image_div").find("img:eq(-2)").before(span);
+        }
+        function next_add_div() {
+            var next_upload_div_1 =
+                '<div id="next_upload_div_1" style="float: left;position:relative;width: 57px;height: 57px;" >'+
+                '<img  id="next_upload_image_1" class="upload_ico" style="cursor:pointer;"  src="${pageContext.request.contextPath}/static/uploadify/upload_ico.png"  onclick="next_upload_image_button(1)"/>'+
+                '<input id="next_upload_file_1" type="file" style="display:none"  name="next_upload_files"  onchange="next_upload_show_image(1)" /><br>'+
+                '</div>';
+            $("#next_upload_image_div").html("").append(next_upload_div_1);
+        }*/
+        /*-------------------------------*/
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<form:form id="inputForm" modelAttribute="officeLicense" action="${ctx}/officelicense/officeLicense/save" method="post"  class="form-horizontal"><%--enctype="multipart/form-data"--%>
+			<form:hidden path="id"/>
+			<form:hidden path="office.id" value="<%= UserUtils.getSelectOffice().getParent().getId()%>"/>
+			<sys:message content="${message}"/>
+			<div class="form-group layui-row first lw8">
+				<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">
+						<input htmlEscape="false"   readonly="true" class="form-control layui-input" value="${officeLicense.companyName}"/>
+					</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="${officeLicense.num}"/>
+					</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="${officeLicense.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label double-line"><span class="require-item">*</span>是否有电子章:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"   readonly="true" class="form-control layui-input" value="${fns:getDictLabel(officeLicense.isChapter, 'is_chapter','')}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">上传日期:</label>
+					<div class="layui-input-block">
+						<input class="laydate-icondate layui-input form-control layer-date laydate-icon" name="uploadDate"
+							   value="<fmt:formatDate value="${officeLicense.uploadDate}" 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">
+						<textarea  htmlEscape="false" rows="4" readonly="true"    class="form-control ">${officeLicense.remarks}</textarea>
+					</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="${officeLicense.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}">
+									</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>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 310 - 0
src/main/webapp/webpage/modules/officequalify/officequalifyForm.jsp

@@ -0,0 +1,310 @@
+<%@ 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 type="text/css">
+		img{width: 50px;height: 50px;}
+	</style>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if($("#file_attachment tr").length==0){
+                  top.layer.alert('请上传资质附件!', {icon: 0});
+                  return;
+              }
+              if($("#file_attachment tr").length>1){
+                  top.layer.alert('仅可以上传一个附件!', {icon: 0});
+                  return;
+              }
+			  $("#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: '#firstDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+			            event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+			        });
+					laydate.render({
+			            elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+			            event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+			        });
+					laydate.render({
+			            elem: '#continueDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+			            event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+			        });
+            laydate.render({
+                elem: '#uploadDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+
+            $("#attachment_btn").click(function () {
+                if($("#file_attachment tr").length>0){
+                    top.layer.alert('仅可以上传一个附件', {icon: 0});
+                    return;
+                }
+                $("#attachment_file").click();
+            });
+		});
+        function insertTitle(tValue){
+            var list = "${officequalify.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];
+            console.log("文件大小"+file.size);
+            if(file.size >200000){
+                top.layer.alert('文件大小限制在200K以内!', {icon: 0});
+                return;
+            }
+            var attachmentId = "";
+            var attachmentFlag = "109";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/officequalify/"+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);}
+        }
+
+
+
+        //------------------上传图片-暂弃----------------------
+        /*function next_upload_image_button(index){
+            $("#next_upload_file_"+index).click();
+        }
+
+        function next_upload_show_image(index){
+            var obj =$("#next_upload_file_"+index)[0].files[0];
+            var fileType = obj.type;
+            var url ;
+            if(fileType.endsWith("png")||fileType.endsWith("bmp")||fileType.endsWith("jpg")||fileType.endsWith("jpeg")||fileType.endsWith("gif")){
+                url = window.URL.createObjectURL(obj);
+            }else {
+                $("#next_upload_msg").css({"color":"red"});
+                next_close_img(index);
+                return false ;
+            }
+            $("#next_upload_msg").removeAttr("style");
+            $("#next_upload_image_"+index).attr("src",url);
+            var length = $("#next_upload_image_div :file").length;
+            if( index == length &&  length < 1 ){
+                next_upload_image_append(index);
+                next_add_x(index);
+            }else if(index == length && length ==1){
+                var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+                $("#next_upload_image_1").before(span);
+            }
+        }
+        function next_upload_image_append(index){
+            var div1 = "<div id='next_upload_div_"+(index+1)+"' style='float:left;position:relative;width: 57px;height: 57px;'>";
+            var img = '<img  id="next_upload_image_'+(index+1)+'" class="upload_ico" width="50px" height="50px"  onclick="next_upload_image_button('+(index+1)+')" src = "${pageContext.request.contextPath}/static/uploadify/upload_ico.png" style="cursor:pointer;"/>';
+            var input = '<input id="next_upload_file_'+(index+1)+'" type="file" style="display:none;" name="next_upload_files" onChange="next_upload_show_image('+(index+1)+')" /><br>';
+            var div2 = "</div>";
+
+            $("#next_upload_image_div").append(div1+img+input+div2);
+        }
+        function next_close_img(index) {
+            $("#next_upload_div_"+index).remove();
+            var length = $("#next_upload_image_div :file").length;
+            if(length == 0){
+                next_add_div();
+            }else if(length == 1){
+                var x = $("#next_upload_image_div").find("span").text();
+                if("x" != x){
+                    next_add_div();
+                }
+            }
+        }
+        function next_add_x(index) {
+            var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+            $("#next_upload_image_div").find("img:eq(-2)").before(span);
+        }
+        function next_add_div() {
+            var next_upload_div_1 =
+                '<div id="next_upload_div_1" style="float: left;position:relative;width: 57px;height: 57px;" >'+
+                '<img  id="next_upload_image_1" class="upload_ico" style="cursor:pointer;"  src="${pageContext.request.contextPath}/static/uploadify/upload_ico.png"  onclick="next_upload_image_button(1)"/>'+
+                '<input id="next_upload_file_1" type="file" style="display:none"  name="next_upload_files"  onchange="next_upload_show_image(1)" /><br>'+
+                '</div>';
+            $("#next_upload_image_div").html("").append(next_upload_div_1);
+        }*/
+        /*-------------------------------*/
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="officequalify" action="${ctx}/officequalify/officequalify/save" method="post"  class="form-horizontal"><%--enctype="multipart/form-data"--%>
+			<form:hidden path="id"/>
+			<form:hidden path="office.id" value="<%= UserUtils.getSelectOffice().getParent().getId()%>"/>
+		<sys:message content="${message}"/>
+			<div class="form-group layui-row first lw8">
+				<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">
+						<form:input path="companyName" 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  path="num" 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 path="name" htmlEscape="false" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">资质等级:</label>
+					<div class="layui-input-block">
+						<%--<form:select path="qualifyGrade" class="form-control ">
+							<form:option value="" label=""/>
+							<form:options items="${fns:getDictList('qualify_grade')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+						</form:select>--%>
+						<form:input path="qualifyGrade" 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 path="specialty" 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">
+						<input class="laydate-icondate layui-input form-control layer-date laydate-icon" id="firstDate" name="firstDate"
+							   value="<fmt:formatDate value="${officequalify.firstDate}" 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="laydate-icondate layui-input form-control layer-date laydate-icon" id="endDate" name="endDate"
+							   value="<fmt:formatDate value="${officequalify.endDate}" 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="laydate-icondate layui-input form-control layer-date laydate-icon" id="continueDate" name="continueDate"
+							   value="<fmt:formatDate value="${officequalify.continueDate}" 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="issuedAgency" htmlEscape="false" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">上传日期:</label>
+					<div class="layui-input-block">
+						<input class="laydate-icondate layui-input form-control layer-date laydate-icon" readonly="true" name="uploadDate"
+							   value="<fmt:formatDate value="${officequalify.uploadDate}" 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="remarks" 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">
+					<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" 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="${officequalify.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}">
+									</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>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 256 - 0
src/main/webapp/webpage/modules/officequalify/officequalifyList.jsp

@@ -0,0 +1,256 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>企业资质管理</title>
+	<meta name="decorator" content="default"/>
+	<style type="text/css">
+		img{width: 50px;height: 50px;}
+	</style>
+	<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");
+                }
+            });
+		});
+        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: 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
+                    }
+                },
+                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 layui-row" id="queryDiv">
+
+	<form:form id="searchForm" modelAttribute="officequalify" action="${ctx}/officequalify/officequalify/" 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 with-icon">
+					<sys:treeselect id="officeId" name="office.id" value="${officequalify.office.id}" labelName="office.name" labelValue="${officequalify.office.name}"
+									title="机构" url="/sys/office/treeDataCompany"  cssClass="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="name" 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">
+					<form:input path="specialty" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+				</div>
+			</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="officequalify:officequalify:add">
+							<table:addRow url="${ctx}/officequalify/officequalify/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: [[
+                // {checkbox: true, fixed: true},
+                {field:'index',align:'center', title: '序号',width:40}
+                ,{field:'num',align:'center',sort:true ,title: '编号',minWidth:160,templet:function(d){
+                    var xml = "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看企业资质', '${ctx}/officequalify/officequalify/form?id=" + d.id + "&tabId=view','95%','95%')\">" +
+                        "<span title=" + d.num + ">" + d.num + "</span></a>";
+                    return xml;
+                }}
+                ,{field:'companyName',align:'center', title: '公司名称',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.companyName +"'>" + d.companyName + "</span>";
+                }}
+                ,{field:'name',align:'center', title: '资质名称',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.name +"'>" + d.name + "</span>";
+                }}
+                ,{field:'qualifyGrade',align:'center', title: '资质等级',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.qualifyGrade +"'>" + d.qualifyGrade + "</span>";
+                }}
+                ,{field:'specialty', align:'center',title: '专业',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.specialty +"'>" + d.specialty + "</span>";
+                }}
+                ,{field:'uploadDate',align:'center', sort:true ,title: '上传日期', minWidth:160}
+                ,{field:'upload',align:'center',title:"资质文件",minWidth:170,templet:function(d){
+                    ////对操作进行初始化
+                    var xml = "";
+                    if(d.edit1 != undefined && d.edit1 == "1")
+                        xml +="<img src="+d.url+" width="+50+" height="+50+" alt="+d.uName+">";
+
+                    if(d.edit2 != undefined && d.edit2 == "1")
+                        xml +="<a href=\"javascript:void(0)\"  >" + d.uName + "</a>";
+
+                    if(d.edit3 != undefined && d.edit3 == "1")
+                        xml +="<a href=\"javascript:void(0)\"  >" + d.uName + "</a>";
+                    return xml;
+                }}
+            /*    ,{field:'upload',align:'center',title:"资质文件",width:170,templet:function(d){
+                    ////对操作进行初始化
+                    var xml = "";
+                    if(d.edit1 != undefined && d.edit1 == "1")
+                        xml +="<img src="+d.url+" width="+50+" height="+50+" onclick=\"openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=" + d.url + ",'90%','90%')\" alt="+d.uName+">";
+
+                    if(d.edit2 != undefined && d.edit2 == "1")
+                        xml +="<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"preview('预览'," + d.url + " ,'90%','90%','1')\" >" + d.uName + "</a>";
+
+                    if(d.edit3 != undefined && d.edit3 == "1")
+                        xml +="<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"preview('预览'," + d.url + ",'90%','90%')\" >" + d.uName + "</a>";
+                    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}/officequalify/officequalify/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}/officequalify/officequalify/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="officequalify" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${officequalify.id}"
+                    ,"num":"${officequalify.num}"
+                    ,"companyName":"${officequalify.companyName}"
+                    ,"name":"${officequalify.name}"
+                    ,"qualifyGrade":"${officequalify.qualifyGrade}"
+                    ,"specialty":"${officequalify.specialty}"
+                    ,"url":"${officequalify.url}"
+                    ,"uName":"${officequalify.uName}"
+                    ,"uploadDate":"<fmt:formatDate value="${officequalify.uploadDate}" pattern="yyyy-MM-dd"/>"
+                    <shiro:hasPermission name="officequalify:officequalify:edit"><c:choose>
+                    	<c:when test="${fns:getOffice().parent.type == '1' || fns:getOffice().parent.id == officequalify.office.id}">,"canedit1":"1"</c:when>
+                    </c:choose></shiro:hasPermission>
+                    <shiro:hasPermission name="officequalify:officequalify:del"><c:choose>
+                    	<c:when test="${fns:getOffice().parent.type == '1' || fns:getOffice().parent.id == officequalify.office.id}">,"candelete":"1"</c:when>
+                    </c:choose></shiro:hasPermission>
+                    <c:choose>
+						<c:when test="${fn:containsIgnoreCase(officequalify.uName,'jpg')
+															   or fn:containsIgnoreCase(officequalify.uName,'png')
+															   or fn:containsIgnoreCase(officequalify.uName,'gif')
+															   or fn:containsIgnoreCase(officequalify.uName,'bmp')
+															   or fn:containsIgnoreCase(officequalify.uName,'jpeg')}">,"edit1":"1"</c:when>
+						<c:otherwise>
+							<c:choose>
+								<c:when test="${fn:containsIgnoreCase(officequalify.uName,'pdf')}">
+                   					 ,"edit2":"1"</c:when>
+								<c:otherwise>
+                   					 ,"edit3":"1"</c:otherwise>
+							</c:choose>
+						</c:otherwise>
+                    </c:choose>
+
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+
+    resizeListTable();
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+</body>
+</html>

+ 301 - 0
src/main/webapp/webpage/modules/officequalify/officequalifyView.jsp

@@ -0,0 +1,301 @@
+<%@ 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 type="text/css">
+		img{width: 50px;height: 50px;}
+	</style>
+	<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: '#firstDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+            laydate.render({
+                elem: '#continueDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+            laydate.render({
+                elem: '#uploadDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+
+            $("#attachment_btn").click(function () {
+                if($("#file_attachment tr").length>0){
+                    top.layer.alert('仅可以上传一个附件', {icon: 0});
+                    return;
+                }
+                $("#attachment_file").click();
+            });
+        });
+        function insertTitle(tValue){
+            var list = "${officequalify.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 = "109";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/officequalify/"+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);}
+        }
+
+
+
+        //------------------上传图片-暂弃----------------------
+        function next_upload_image_button(index){
+            $("#next_upload_file_"+index).click();
+        }
+
+        function next_upload_show_image(index){
+            var obj =$("#next_upload_file_"+index)[0].files[0];
+            var fileType = obj.type;
+            var url ;
+            if(fileType.endsWith("png")||fileType.endsWith("bmp")||fileType.endsWith("jpg")||fileType.endsWith("jpeg")||fileType.endsWith("gif")){
+                url = window.URL.createObjectURL(obj);
+            }else {
+                $("#next_upload_msg").css({"color":"red"});
+                next_close_img(index);
+                return false ;
+            }
+            $("#next_upload_msg").removeAttr("style");
+            $("#next_upload_image_"+index).attr("src",url);
+            var length = $("#next_upload_image_div :file").length;
+            if( index == length &&  length < 1 ){
+                next_upload_image_append(index);
+                next_add_x(index);
+            }else if(index == length && length ==1){
+                var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+                $("#next_upload_image_1").before(span);
+            }
+        }
+        function next_upload_image_append(index){
+            var div1 = "<div id='next_upload_div_"+(index+1)+"' style='float:left;position:relative;width: 57px;height: 57px;'>";
+            var img = '<img  id="next_upload_image_'+(index+1)+'" class="upload_ico" width="50px" height="50px"  onclick="next_upload_image_button('+(index+1)+')" src = "${pageContext.request.contextPath}/static/uploadify/upload_ico.png" style="cursor:pointer;"/>';
+            var input = '<input id="next_upload_file_'+(index+1)+'" type="file" style="display:none;" name="next_upload_files" onChange="next_upload_show_image('+(index+1)+')" /><br>';
+            var div2 = "</div>";
+
+            $("#next_upload_image_div").append(div1+img+input+div2);
+        }
+        function next_close_img(index) {
+            $("#next_upload_div_"+index).remove();
+            var length = $("#next_upload_image_div :file").length;
+            if(length == 0){
+                next_add_div();
+            }else if(length == 1){
+                var x = $("#next_upload_image_div").find("span").text();
+                if("x" != x){
+                    next_add_div();
+                }
+            }
+        }
+        function next_add_x(index) {
+            var span = '<span id="next_upload_close_'+index+'" class="close_ico" style="cursor:pointer; position: absolute;top:-1px;right: -1px; display:inline-block;z-index:1;color: red;" onclick="next_close_img('+index+');">x</span>';
+            $("#next_upload_image_div").find("img:eq(-2)").before(span);
+        }
+        function next_add_div() {
+            var next_upload_div_1 =
+                '<div id="next_upload_div_1" style="float: left;position:relative;width: 57px;height: 57px;" >'+
+                '<img  id="next_upload_image_1" class="upload_ico" style="cursor:pointer;"  src="${pageContext.request.contextPath}/static/uploadify/upload_ico.png"  onclick="next_upload_image_button(1)"/>'+
+                '<input id="next_upload_file_1" type="file" style="display:none"  name="next_upload_files"  onchange="next_upload_show_image(1)" /><br>'+
+                '</div>';
+            $("#next_upload_image_div").html("").append(next_upload_div_1);
+        }
+        /*-------------------------------*/
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<form:form id="inputForm" modelAttribute="officequalify" action="${ctx}/officequalify/officequalify/save" method="post" enctype="multipart/form-data"  class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="office.id" value="<%= UserUtils.getSelectCompany().getId()%>"/>
+			<sys:message content="${message}"/>
+			<div class="form-group layui-row first lw8">
+				<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">
+						<input htmlEscape="false"   readonly="true" class="form-control layui-input" value="${officequalify.companyName}"/>
+					</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="${officequalify.num}"/>
+					</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="${officequalify.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">资质等级:</label>
+					<div class="layui-input-block">
+							<%--<form:select path="qualifyGrade" class="form-control ">
+                                <form:option value="" label=""/>
+                                <form:options items="${fns:getDictList('qualify_grade')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                            </form:select>--%>
+								<input htmlEscape="false"   readonly="true" class="form-control layui-input" value="${officequalify.qualifyGrade}"/>
+					</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="${officequalify.specialty}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">初次取得日期:</label>
+					<div class="layui-input-block">
+						<input name="firstDate"  htmlEscape="false" readonly="true"
+							   class="form-control  layui-input" value="<fmt:formatDate value="${officequalify.firstDate}"
+				   			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 name="endDate"  htmlEscape="false" readonly="true"
+							   class="form-control  layui-input" value="<fmt:formatDate value="${officequalify.endDate}"
+				   			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 name="continueDate"  htmlEscape="false" readonly="true"
+							   class="form-control  layui-input" value="<fmt:formatDate value="${officequalify.continueDate}"
+				   			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">
+						<input  htmlEscape="false" readonly="true" class="form-control  layui-input" value="${officequalify.issuedAgency}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">上传日期:</label>
+					<div class="layui-input-block">
+						<input name="uploadDate"  htmlEscape="false" readonly="true"
+							   class="form-control  layui-input" value="<fmt:formatDate value="${officequalify.uploadDate}"
+				   			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">
+						<textarea  htmlEscape="false" rows="4" readonly="true"    class="form-control ">${officequalify.remarks}</textarea>
+					</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="${officequalify.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}">
+									</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>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 70 - 0
src/main/webapp/webpage/modules/project/archivedirectoryForm.jsp

@@ -0,0 +1,70 @@
+<%@ 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="archivedirectory" action="${ctx}/project/archivedirectory/save?bidInformationId=${archivedirectory.bidInformationId}" 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: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="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="pageNumber" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">备注:</label></td>
+					<td class="width-35">
+						<form:input path="remarks" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+		 	</tbody>
+		</table>
+			<div style="margin-top: 260px; margin-left: 711px">
+			<input type="submit" value="保存" class="btn btn-success btn-xs" style="height: 30px;width: 57px"/>
+			</div>
+	</form:form>
+</body>
+</html>

+ 67 - 0
src/main/webapp/webpage/modules/project/archivedirectoryForms.jsp

@@ -0,0 +1,67 @@
+<%@ 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="archivedirectory" action="${ctx}/project/archivedirectory/save?bidInformationId=${archivedirectory.bidInformationId}" 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:input path="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 path="number" 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 path="pageNumber" 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 path="remarks" htmlEscape="false" readonly="true" class="form-control "/>
+            </td>
+        </tr>
+        </tbody>
+    </table>
+</form:form>
+</body>
+</html>

+ 134 - 0
src/main/webapp/webpage/modules/project/archivedirectoryList.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="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="archivedirectory" action="${ctx}/project/archivedirectory/" 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="project:archivedirectory:add">--%>
+				<table:addRow url="${ctx}/project/archivedirectory/form" title="归档目录"></table:addRow><!-- 增加按钮 -->
+		<%--	</shiro:hasPermission>--%>
+		<%--	<shiro:hasPermission name="project:archivedirectory:edit">--%>
+			    <table:editRow url="${ctx}/project/archivedirectory/form" title="归档目录" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+		<%--	</shiro:hasPermission>--%>
+			<%--<shiro:hasPermission name="project:archivedirectory:del">--%>
+				<table:delRow url="${ctx}/project/archivedirectory/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			<%--</shiro:hasPermission>
+			<shiro:hasPermission name="project:archivedirectory:import">--%>
+				<table:importExcel url="${ctx}/project/archivedirectory/import"></table:importExcel><!-- 导入按钮 -->
+		<%--	</shiro:hasPermission>
+			<shiro:hasPermission name="project:archivedirectory:export">--%>
+	       		<table:exportExcel url="${ctx}/project/archivedirectory/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 name">名称</th>
+				<th  class="sort-column number">数量</th>
+				<th  class="sort-column pageNumber">页码</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="archivedirectory">
+			<tr>
+				<td> <input type="checkbox" id="${archivedirectory.id}" class="i-checks"></td>
+				<td><a  href="javascript:void(0)" onclick="openDialogView('查看归档目录', '${ctx}/project/archivedirectory/form?id=${archivedirectory.id}','80%','80%')">
+					${archivedirectory.remarks}
+				</a></td>
+				<td>
+					${archivedirectory.name}
+				</td>
+				<td>
+					${archivedirectory.number}
+				</td>
+				<td>
+					${archivedirectory.pageNumber}
+				</td>
+				<td>
+				<%--	<shiro:hasPermission name="project:archivedirectory:view">--%>
+						<a href="javascript:void(0)" onclick="openDialogView('查看归档目录', '${ctx}/project/archivedirectory/form?id=${archivedirectory.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+				<%--	</shiro:hasPermission>
+					<shiro:hasPermission name="project:archivedirectory:edit">--%>
+    					<a href="javascript:void(0)" onclick="openDialog('修改归档目录', '${ctx}/project/archivedirectory/form?id=${archivedirectory.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    			<%--	</shiro:hasPermission>
+    				<shiro:hasPermission name="project:archivedirectory:del">--%>
+						<a href="${ctx}/project/archivedirectory/delete?id=${archivedirectory.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>

+ 211 - 0
src/main/webapp/webpage/modules/project/bidInformationForm.jsp

@@ -0,0 +1,211 @@
+<%@ 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: '#timeOfWinningBid', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'date'
+            });
+            laydate.render({
+                elem: '#bidOpeningTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'date'
+            });
+
+			laydate.render({
+                elem: '#filingTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'date'
+            });
+            laydate.render({
+                elem: '#firstAcceptanceTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'date'
+            });
+            laydate.render({
+                elem: '#finalArchivingTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'date'
+            });
+		});
+	</script>
+</head>
+<body class="hideScroll">
+		<form:form id="inputForm" modelAttribute="bidInformation" action="${ctx}/project/bidInformation/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-85" colspan="3">
+				   <form:input path="project.projectName" htmlEscape="false" readonly="true" class="form-control required"/>
+			   </td>
+		   </tr>
+
+		   <tr>
+			   <td class="width-15 active"><label class="pull-right">项目编号:</label></td>
+			   <td class="width-35">
+				   <form:input path="project.projectNumber" 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 path="workprojectgroup.leader" 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">
+					<input id="bidOpeningTime" name="bidOpeningTime" type="text" maxlength="20" class="laydate-icondate form-control layer-date input-sm"/>
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">中标通知书编号<font color="red">*</font>:</label></td>
+			   <td class="width-35">
+				   <input type="text" name="winningBidNumber" class="form-control required"/>
+			   </td>
+		   </tr>
+
+		   <tr>
+			   <td class="width-15 active"><label class="pull-right">中央投资网是否上传:</label></td>
+			   <td class="width-35">
+				   <input type="radio" value="1" name="centralInvestmentOnline" onclick="display(this.value)" checked="checked">是
+				   <input type="radio" value="0" name="centralInvestmentOnline" onclick="display(this.value)" checked="checked">否
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">中标通知书发放时间:</label></td>
+			   <td class="width-35">
+				   <input id="timeOfWinningBid" name="timeOfWinningBid" type="text" maxlength="20" class="laydate-icondate form-control layer-date input-sm"/>
+			   </td>
+		   </tr>
+
+		   <tr>
+			   <td class="width-15 active"><label class="pull-right">招标人是否承存档:</label></td>
+			   <td class="width-35">
+				   <input type="radio" value="1" name="tendereeArchives" onclick="display(this.value)" checked="checked">是
+				   <input type="radio" value="0" name="tendereeArchives" onclick="display(this.value)" checked="checked">否
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">备案时间:</label></td>
+			   <td class="width-35">
+				   <input id="filingTime" name="filingTime" type="text" maxlength="20" class="laydate-icondate form-control layer-date input-sm"/>
+			   </td>
+		   </tr>
+
+		   <tr>
+			   <td class="width-15 active"><label class="pull-right">纸质归档:</label></td>
+			   <td class="width-35">
+				   <input type="radio" value="1" name="paperArchiving" onclick="display(this.value)" checked="checked">是
+				   <input type="radio" value="0" name="paperArchiving" onclick="display(this.value)" checked="checked">否
+			   </td>
+			   <td class="width-15 active"><label class="pull-right">首次接收时间:</label></td>
+			   <td class="width-35">
+				   <input id="firstAcceptanceTime" name="firstAcceptanceTime" type="text" maxlength="20" class="laydate-icondate form-control layer-date input-sm"/>
+			   </td>
+		   </tr>
+
+		   <tr>
+			   <td class="width-15 active"><label class="pull-right"></label></td>
+			   <td class="width-35"></td>
+			   <td class="width-15 active"><label class="pull-right">最终归档时间:</label></td>
+			   <td class="width-35">
+				   <input id="finalArchivingTime" name="finalArchivingTime" type="text" maxlength="20" class="laydate-icondate form-control layer-date input-sm"/>
+			   </td>
+		   </tr>
+		 	</tbody>
+			<tbody>
+			<tr>
+
+				<td colspan="4">
+					<div>
+						<shiro:hasPermission name="project:archivedirectory:add">
+							<a href="javascript:void(0)" onclick="openDialogView('附件信息', '${ctx}/project/archivedirectory/form?bidInformationId=${bidInformation.id}','80%','80%')" class="btn btn-white btn-sm" ><i class="fa fa-search-plus"></i>添加</a>
+						</shiro:hasPermission>
+						<shiro:hasPermission name="project:archivedirectory:del">
+							<table:delRow url="${ctx}/project/archivedirectory/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+						</shiro:hasPermission>
+					</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 ordernumber">序号</th>
+								<th  class="sort-column name">名称</th>
+								<th  class="sort-column number">数量</th>
+								<th  class="sort-column pageNumber">页码</th>
+								<th  class="sort-column remarks">备注</th>
+								<th>操作</th>
+							</tr>
+							</thead>
+							<tbody>
+							   <c:forEach items="${archivedirectoryList}" var="archivedirectory">
+								<tr>
+									<td><input type="checkbox" id="${archivedirectory.id}" class="i-checks"></td>
+									<td>${archivedirectory.seq}</td>
+									<td>${archivedirectory.name}</td>
+									<td>${archivedirectory.number}</td>
+									<td>${archivedirectory.remarks}</td>
+									<td>${archivedirectory.pageNumber}</td>
+									<td>
+										<shiro:hasPermission name="project:archivedirectory:view">
+											<a href="javascript:void(0)" onclick="openDialogView('附件信息', '${ctx}/project/archivedirectory/forms?id=${archivedirectory.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+										</shiro:hasPermission>
+										<shiro:hasPermission name="project:archivedirectory:edit">
+											<a href="javascript:void(0)" onclick="openDialogView('附件信息', '${ctx}/project/archivedirectory/form?id=${archivedirectory.id}&&bidInformationId=${bidInformation.id}','80%','80%')" class="btn btn-warning btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+										</shiro:hasPermission>
+										<shiro:hasPermission name="project:archivedirectory:del">
+											<a href="${ctx}/project/archivedirectory/delete?id=${archivedirectory.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>
+					</div>
+				</td>
+			</tr>
+			</tbody>
+			<br>
+			<tbody>
+			<tr>
+				<td colspan="8">
+					<div style="height: 100px">
+						<br>
+						附件上传&nbsp;&nbsp;&nbsp;
+						<a href="javascript:void(0)" onclick="openDialogView('附件信息', '${ctx}/project/bidInformation/form?id=${archivedirectory.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-plus"></i> 添加附件</a>
+					</div>
+				</td>
+			</tr>
+			</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 200 - 0
src/main/webapp/webpage/modules/project/bidInformationForms.jsp

@@ -0,0 +1,200 @@
+<%@ 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: '#timeOfWinningBid', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'date'
+            });
+            laydate.render({
+                elem: '#bidOpeningTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'date'
+            });
+
+            laydate.render({
+                elem: '#filingTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'date'
+            });
+            laydate.render({
+                elem: '#firstAcceptanceTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'date'
+            });
+            laydate.render({
+                elem: '#finalArchivingTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'date'
+            });
+        });
+    </script>
+</head>
+<body class="hideScroll">
+<form:form id="inputForm" modelAttribute="bidInformation" action="${ctx}/project/bidInformation/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-85" colspan="3">
+                <form:input path="project.projectName" htmlEscape="false" readonly="true" class="form-control required"/>
+            </td>
+        </tr>
+
+        <tr>
+            <td class="width-15 active"><label class="pull-right">项目编号:</label></td>
+            <td class="width-35">
+                <form:input path="project.projectNumber" 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 path="workprojectgroup.leader" 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">
+                <input id="bidOpeningTime" name="bidOpeningTime" type="text" maxlength="20" class="laydate-icondate form-control layer-date input-sm"
+                       value="${bidInformation.bidOpeningTime}"/>
+            </td>
+            <td class="width-15 active"><label class="pull-right">中标通知书编号<font color="red">*</font>:</label></td>
+            <td class="width-35">
+                <form:input path="winningBidNumber" htmlEscape="false" readonly="true" class="form-control required"/>
+            </td>
+        </tr>
+
+        <tr>
+            <td class="width-15 active"><label class="pull-right">中央投资网是否上传:</label></td>
+            <td class="width-35">
+                <input type="radio" name="centralInvestmentOnline" ${bidInformation.centralInvestmentOnline==1?"checked":""}>是
+                <input type="radio" name="centralInvestmentOnline" ${bidInformation.centralInvestmentOnline==0?"checked":""}>否
+            </td>
+            <td class="width-15 active"><label class="pull-right">中标通知书发放时间:</label></td>
+            <td class="width-35">
+                <input id="timeOfWinningBid" name="timeOfWinningBid" type="text" maxlength="20" class="laydate-icondate form-control layer-date input-sm"
+                       value="${bidInformation.timeOfWinningBid}"/>
+            </td>
+        </tr>
+
+        <tr>
+            <td class="width-15 active"><label class="pull-right">招标人是否承存档:</label></td>
+            <td class="width-35">
+                <input type="radio" name="tendereeArchives" ${bidInformation.tendereeArchives==1?"checked":""}>是
+                <input type="radio" name="tendereeArchives" ${bidInformation.tendereeArchives==0?"checked":""}>否
+            </td>
+            <td class="width-15 active"><label class="pull-right">备案时间:</label></td>
+            <td class="width-35">
+                <input id="filingTime" name="filingTime" type="text" maxlength="20" class="laydate-icondate form-control layer-date input-sm"
+                       value="${bidInformation.filingTime}"/>
+            </td>
+        </tr>
+
+        <tr>
+            <td class="width-15 active"><label class="pull-right">纸质归档:</label></td>
+            <td class="width-35">
+                <input type="radio" name="paperArchiving" ${bidInformation.paperArchiving==1?"checked":""}>是
+                <input type="radio" name="paperArchiving" ${bidInformation.paperArchiving==0?"checked":""}>否
+            </td>
+            <td class="width-15 active"><label class="pull-right">首次接收时间:</label></td>
+            <td class="width-35">
+                <input id="firstAcceptanceTime" name="firstAcceptanceTime" type="text" maxlength="20" class="laydate-icondate form-control layer-date input-sm"
+                       value="${bidInformation.firstAcceptanceTime}"/>
+            </td>
+        </tr>
+
+        <tr>
+            <td class="width-15 active"><label class="pull-right"></label></td>
+            <td class="width-35"></td>
+            <td class="width-15 active"><label class="pull-right">最终归档时间:</label></td>
+            <td class="width-35">
+                <input id="finalArchivingTime" name="finalArchivingTime" type="text" maxlength="20" class="laydate-icondate form-control layer-date input-sm"
+                       value="${bidInformation.finalArchivingTime}"/>
+            </td>
+        </tr>
+        </tbody>
+        <tbody>
+        <tr>
+
+            <td colspan="4">
+                <div>
+                    <table id="contentTable" class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+                        <thead>
+                        <tr>
+                            <th  class="sort-column ordernumber">序号</th>
+                            <th  class="sort-column name">名称</th>
+                            <th  class="sort-column number">数量</th>
+                            <th  class="sort-column pageNumber">页码</th>
+                            <th  class="sort-column remarks">备注</th>
+                            <th>操作</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <c:forEach items="${archivedirectoryList}" var="archivedirectory">
+                            <tr>
+                                <td>${archivedirectory.seq}</td>
+                                <td>${archivedirectory.name}</td>
+                                <td>${archivedirectory.number}</td>
+                                <td>${archivedirectory.remarks}</td>
+                                <td>${archivedirectory.pageNumber}</td>
+                                <td>
+                                    <shiro:hasPermission name="project:archivedirectory:view">
+                                        <a href="javascript:void(0)" onclick="openDialogView('附件信息', '${ctx}/project/archivedirectory/forms?id=${archivedirectory.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+                                    </shiro:hasPermission>
+                                </td>
+                            </tr>
+                        </c:forEach>
+                        </tbody>
+                    </table>
+                </div>
+            </td>
+        </tr>
+        </tbody>
+        <br>
+        <tbody>
+        <tr>
+            <td colspan="8">
+                <div style="height: 100px">
+                    <br>
+                    附件上传&nbsp;&nbsp;&nbsp;
+                    <a href="javascript:void(0)" onclick="openDialogView('附件信息', '${ctx}/project/bidInformation/form?id=${archivedirectory.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-plus"></i> 添加附件</a>
+                </div>
+            </td>
+        </tr>
+        </tbody>
+    </table>
+</form:form>
+</body>
+</html>

+ 166 - 0
src/main/webapp/webpage/modules/project/bidInformationList.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() {
+            $("#cus_name").show();
+            $("#cus_name").siblings().hide();
+
+            laydate.render({
+                elem: '#cus_createDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+                ,type: 'date'
+            });
+        });
+        function switchInput(obj){
+            $("#"+obj).show();
+            $("#"+obj).siblings().hide();
+        }
+	</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="bidInformation" action="${ctx}/project/bidInformation/" 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">
+						<select id="cusname"  class="form-control" onChange="switchInput(this.value)">
+							<option value="">-- 请选择 --</option>
+							<option value="cus_name">项目名称</option>
+							<option value="cus_number">项目编号</option>
+							<option value="cus_client">客户单位</option>
+							<option value="cus_createDate">登记日期</option>
+							<option value="cus_leader">项目负责人</option>
+							<option value="cus_status">归档状态</option>
+						</select>
+						<div style="display: inline">
+							<form:input path="project.projectName" id="cus_name" htmlEscape="false" maxlength="255"  class=" form-control input-sm"/>
+							<form:input path="project.projectNumber" id="cus_number" htmlEscape="false" maxlength="255"  class=" form-control input-sm"/>
+							<form:input path="workClientInfo.name" id="cus_client" htmlEscape="false" maxlength="255"  class=" form-control input-sm"/>
+							<input id="cus_createDate"  name="project.createDate"  type="text" readonly="readonly" maxlength="20" style="width:200px;" class="laydate-icondate form-control layer-date input-sm"
+								   value="<fmt:formatDate value="${bidInformation.project.createDate}" pattern="yyyy-MM-dd"/>"/>
+							<form:input path="workprojectgroup.leader" id="cus_leader" htmlEscape="false" maxlength="255"  class=" form-control input-sm"/>
+							<form:select path="status" id="cus_status"  class="form-control m-b">
+								<form:option value="" label=""/>
+								<form:options items="${fns:getDictList('status')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+							</form:select>
+						</div>
+					</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> <input type="checkbox" class="i-checks"></th>
+				<th  class="sort-column project.projectNumber">项目编号</th>
+				<th  class="sort-column project.projectName">项目名称</th>
+				<th  class="sort-column workClientInfo.name">客户单位</th>
+				<th  class="sort-column project.createDate">登记日期</th>
+				<th  class="sort-column workprojectgroup.leader">项目负责人</th>
+				<th  class="sort-column projectStatus">项目归档</th>
+				<th  class="sort-column status">归档状态</th>
+				<th  class="sort-column processInstanceId">流程追踪</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="bidInformation">
+			<tr>
+				<td> <input type="checkbox" id="${bidInformation.id}" class="i-checks"></td>
+				<td>
+					${bidInformation.project.projectNumber}
+				</td>
+				<td>
+					${bidInformation.project.projectName}
+				</td>
+				<td>
+			        ${bidInformation.workClientInfo.name}
+				</td>
+				<td>
+					<fmt:formatDate value="${bidInformation.project.createDate}" pattern="yyyy-MM-dd"/>
+				</td>
+				<td>
+					${bidInformation.workprojectgroup.leader}
+				</td>
+				<td>
+					<%--<c:if test="${bidInformation.status==0 || bidInformation.status==1}">--%>
+					<%--	<shiro:hasPermission name=" project:bidInformation:add">--%>
+						   <a href="javascript:void(0)" onclick="openDialogView('项目归档', '${ctx}/project/bidInformation/form?id=${bidInformation.id}','80%','80%')" class="btn btn-success btn-xs" >项目归档</a>
+					<%--	</shiro:hasPermission>--%>
+				<%--	</c:if>--%>
+				</td>
+				<td>
+					${fns:getDictLabel(bidInformation.status, 'status', '')}
+				</td>
+				<td>
+					<a href="javascript:void(0)" onclick="openDialogView('流程追踪', '${ctx}/project/bidInformation/form?id=${bidInformation.id}','80%','80%')" class="btn btn-danger btn-xs" >流程追踪</a>
+				</td>
+				<td>
+				<%--	<shiro:hasPermission name="project:bidInformation:view">--%>
+					   <a href="javascript:void(0)" onclick="openDialogView('归档信息', '${ctx}/project/bidInformation/forms?id=${bidInformation.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+				<%--	</shiro:hasPermission>--%>
+				</td>
+			</tr>
+		</c:forEach>
+		</tbody>
+	</table>
+	
+		<!-- 分页代码 -->
+	<table:page page="${page}"></table:page>
+	<br/>
+	<br/>
+	</div>
+	</div>
+</div>
+</body>
+</html>

+ 93 - 0
src/main/webapp/webpage/modules/project/projectDepositAudit.jsp

@@ -0,0 +1,93 @@
+<%@ 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);
+					}
+				}
+			});
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled','disabled');
+            $("#remake").removeAttr('disabled');
+		});
+	</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">
+	<form:form id="inputForm" modelAttribute="projectDepositManagement" action="${ctx}/project/projectDepositManagement/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<sys:message content="${message}"/>
+		<div class="control-group">
+			<label class="control-label">项目名称:</label>
+			<div class="controls">
+				<sys:gridselect url="${ctx}/project/project/selectProject" id="projectName" name="projectName"  value="${projectName.id}"  title="选择项目名称" labelName="clientName"
+								labelValue="${projectDepositManagement.project.projectName}" cssClass="form-control required" fieldLabels="项目" fieldKeys="projectName" searchLabel="项目名称" searchKey="projectName"></sys:gridselect>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">递交单位:</label>
+			<div class="controls">
+				<sys:gridselect url="${ctx}/workprequalification/workPrequalification/selectbiddingCompany" id="clientId" name="clientId"  value="${workPrequalification.biddingCompany.id}"  title="选择招标单位" labelName="clientName"
+								labelValue="${projectDepositManagement.clientName}" cssClass="form-control required" fieldLabels="客户" fieldKeys="name" searchLabel="客户名称" searchKey="name" ></sys:gridselect>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">保证金金额:</label>
+			<div class="controls">
+				<form:input id="depositAmount" path="depositAmount" htmlEscape="false" class="form-control "/>
+			</div>
+		</div>
+	</form:form>
+</div>
+	</div>
+	</div>
+</body>
+</html>
+

+ 89 - 0
src/main/webapp/webpage/modules/project/projectDepositManagementForm.jsp

@@ -0,0 +1,89 @@
+<%@ 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: '#openbidTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+
+            //只做查看时,禁用掉以下标签
+            if (${requestScope.disabled.length()>0}) {
+                $('input,textarea,select').attr('disabled','disabled');
+                if(${requestScope.status eq 'edit'}){
+                    $("#depositAmount").removeAttr('disabled');
+                    $("#id").removeAttr('disabled');
+                }
+            }
+
+        });
+	</script>
+</head>
+<body class="hideScroll">
+<form:form id="inputForm" modelAttribute="projectDepositManagement" action="${ctx}/project/projectDepositManagement/save" method="post" class="form-horizontal">
+	<%--<form:hidden path="id"/>--%>
+	<form:input id="id" path="id" htmlEscape="false"  type="hidden"  class="form-control "/>
+	<sys:message content="${message}"/>
+	<c:set var="id" value="${projectDepositManagement.id}" />
+	<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">
+						<%--<input id="projectName" name="projectName" type="text" class="form-control required" value="${projectDepositManagement.projectName}"/>--%>
+					<sys:gridselect url="${ctx}/project/project/selectProject" id="projectName" name="projectName"  value="${projectName.id}"  title="选择项目名称" labelName="clientName"
+									labelValue="${projectDepositManagement.project.projectName}" cssClass="form-control required" fieldLabels="项目" fieldKeys="projectName" searchLabel="项目名称" searchKey="projectName"></sys:gridselect>
+				</td>
+				<td class="width-15 active"><label class="pull-right">递交单位:</label></td>
+				<td class="width-75"  colspan="3">
+					<sys:gridselect url="${ctx}/workprequalification/workPrequalification/selectbiddingCompany" id="clientId" name="clientId"  value="${workPrequalification.biddingCompany.id}"  title="选择招标单位" labelName="clientName"
+									labelValue="${projectDepositManagement.clientName}" cssClass="form-control required" fieldLabels="客户" fieldKeys="name" searchLabel="客户名称" searchKey="name" ></sys:gridselect>
+				</td>
+			</tr>
+			<tr>
+				<td class="width-15 active"><label class="pull-right">保证金金额:</label></td>
+				<td class="width-35">
+					<form:input id="depositAmount" path="depositAmount" htmlEscape="false"    class="form-control "/>
+				</td>
+				<c:if test="${not empty id}">
+					<td class="width-15 active"><label class="pull-right">开标时间:</label></td>
+					<td class="width-35">
+						<input id="openbidTime"  name="beginDate"  type="text" readonly="readonly" maxlength="20" style="width:200px;" class="laydate-icondate form-control layer-date input-sm"
+							   value="<fmt:formatDate value="${projectDepositManagement.openbidTime}" pattern="yyyy-MM-dd"/>"/>
+					</td>
+				</c:if>
+			</tr>
+		</tbody>
+	</table>
+</form:form>
+</body>
+</html>

+ 196 - 0
src/main/webapp/webpage/modules/project/projectDepositManagementList.jsp

@@ -0,0 +1,196 @@
+<%@ 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" src="${ctxStatic}/ckeditor/ckeditor.js"></script>
+	<script type="text/javascript">
+		$(document).ready(function() {
+            laydate.render({
+                elem: '#openbidTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+            $("#name").show();
+            $("#name").siblings().hide();
+		});
+        function switchInput(obj){
+            $("#"+obj).show();
+            $("#"+obj).siblings().hide();
+        }
+	</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="projectDepositManagement" action="${ctx}/project/projectDepositManagement/list" 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">
+			<span>项目名称:</span>
+			<form:input path="project.projectName" htmlEscape="false" maxlength="50" class=" form-control input-sm"/>
+				<span>递交单位:</span>
+			<form:input path="clientName" htmlEscape="false" maxlength="50" class=" form-control input-sm"/>
+			<label>当前状态:</label>
+			<form:select path="status"  class="form-control m-b">
+				<form:option value="" label=""/>
+				<form:options items="${fns:getDictList('deposit_status')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+			</form:select>
+		</div>
+	</form:form>
+	<br/>
+	</div>
+	</div>
+	
+	<!-- 工具栏 -->
+	<div class="row">
+	<div class="col-sm-12">
+		<div class="pull-left">
+			<shiro:hasPermission name="project:projectDepositManagement:add">
+				<table:addRow url="${ctx}/project/projectDepositManagement/form" title="保证金管理"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectDepositManagement:edit">
+			    <table:editRow url="${ctx}/project/projectDepositManagement/form" title="保证金管理" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectDepositManagement:del">
+				<table:delRow url="${ctx}/project/projectDepositManagement/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectDepositManagement:import">
+				<table:importExcel url="${ctx}/project/projectDepositManagement/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectDepositManagement:export">
+	       		<table:exportExcel url="${ctx}/project/projectDepositManagement/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 project.projectName">项目名称</th>
+				<th  class="sort-column clientName">递交单位</th>
+				<th  class="sort-column depositAmount">保证金金额</th>
+				<th  class="sort-column openbidTime">开标时间</th>
+				<%--<th  class="sort-column projectId">项目主键</th>--%>
+				<th  class="sort-column status">当前状态</th>
+				<th  class="sort-column processInstanceId">
+					<%--<c:if test="${projectDepositManagement.createBy.id eq fns:getUser().id}">
+						到账处理
+					</c:if>
+					<c:if test="${fn:contains(role.enname,'systems')}">
+						确认到账
+					</c:if>--%>
+					<c:choose>
+						<c:when test="${userId eq fns:getUser().id}">
+							到账处理
+						</c:when>
+						<c:otherwise>
+							确认到账
+						</c:otherwise>
+					</c:choose>
+				</th>
+				<th  class="sort-column processInstanceId">流程追踪</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="projectDepositManagement">
+			<c:set var="enname" value="${role.enname}" />
+			<tr>
+				<td> <input type="checkbox" id="${projectDepositManagement.id}" class="i-checks"></td>
+				<td>
+						${projectDepositManagement.project.projectName}
+				</td>
+				<td>
+						${projectDepositManagement.clientName}
+				</td>
+				<%--<td><a  href="javascript:void(0)" onclick="openDialogView('查看保证金管理', '${ctx}/project/projectDepositManagement/form?id=${projectDepositManagement.id}','80%','80%')">
+					${projectDepositManagement.remarks}
+				</a></td>--%>
+				<td>
+					${projectDepositManagement.depositAmount}
+				</td>
+				<td>
+					<fmt:formatDate value="${projectDepositManagement.openbidTime}" pattern="yyyy.MM.dd"/>
+				</td>
+				<td>
+					${fns:getDictLabel(projectDepositManagement.status, 'deposit_status', '')}
+				</td>
+				<td>
+					<c:if test="${userId eq fns:getUser().id && projectDepositManagement.status eq '1'}">
+						<%--<a href="javascript:void(0)" onclick="openDialog('到账处理', '${ctx}/project/projectDepositManagement/formArrival?id=${projectDepositManagement.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 到账处理</a>--%>
+						<a href="${ctx}/project/projectDepositManagement/formArrival?id=${projectDepositManagement.id}" onclick="return confirmx('是否保证金确认到账?', this.href)"   class="btn btn-success btn-xs"><i class="fa fa-edit"></i> 到账处理</a>
+					</c:if>
+					<c:if test="${fn:contains(enname,'account') && projectDepositManagement.status eq '2'}">
+						<a href="javascript:void(0)" onclick="openDialog('确认到账', '${ctx}/project/projectDepositManagement/formArrival?id=${projectDepositManagement.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 确认到账</a>
+					</c:if>
+				</td>
+				<td>
+					<c:if test="${not empty projectDepositManagement.processInstanceId}">
+						<a href="javascript:void(0)" onclick="openDialog('流程追踪', '${ctx}/project/projectDepositManagement/formArrival?id=${projectDepositManagement.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 流程追踪</a>
+					</c:if>
+					</td>
+				<td>
+					<shiro:hasPermission name="project:projectDepositManagement:view">
+						<a href="javascript:void(0)" onclick="openDialogView('查看保证金管理', '${ctx}/project/projectDepositManagement/form?id=${projectDepositManagement.id}&readAttr=disabled&name=view','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<c:if test="${projectDepositManagement.status eq '1'}">
+						<shiro:hasPermission name="project:projectDepositManagement:edit">
+							<a href="javascript:void(0)" onclick="openDialog('修改保证金管理', '${ctx}/project/projectDepositManagement/form?id=${projectDepositManagement.id}&readAttr=disabled&name=edit','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+						</shiro:hasPermission>
+						<shiro:hasPermission name="project:projectDepositManagement:del">
+							<a href="${ctx}/project/projectDepositManagement/delete?id=${projectDepositManagement.id}" onclick="return confirmx('确认要删除该保证金管理吗?', this.href)"   class="btn btn-danger btn-xs"><i class="fa fa-trash"></i> 删除</a>
+						</shiro:hasPermission>
+					</c:if>
+				</td>
+			</tr>
+		</c:forEach>
+		</tbody>
+	</table>
+	
+		<!-- 分页代码 -->
+	<table:page page="${page}"></table:page>
+	<br/>
+	<br/>
+	</div>
+	</div>
+</div>
+</body>
+</html>

+ 149 - 0
src/main/webapp/webpage/modules/project/projectDepositReturnList.jsp

@@ -0,0 +1,149 @@
+<%@ 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="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="projectDepositManagement" action="${ctx}/project/projectDepositReturn/" 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="depositAmount" 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="project:projectDepositReturn:add">
+				<table:addRow url="${ctx}/project/projectDepositReturn/form" title="保证金管理"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectDepositReturn:edit">
+			    <table:editRow url="${ctx}/project/projectDepositReturn/form" title="保证金管理" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectDepositReturn:del">
+				<table:delRow url="${ctx}/project/projectDepositReturn/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectDepositReturn:import">
+				<table:importExcel url="${ctx}/project/projectDepositReturn/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectDepositReturn:export">
+	       		<table:exportExcel url="${ctx}/project/projectDepositReturn/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 project.projectName">项目名称</th>
+				<th  class="sort-column project.projectName">递交单位</th>
+				<th  class="sort-column depositAmount">保证金金额</th>
+				<th  class="sort-column openbidTime">开标时间</th>
+				<%--<th  class="sort-column projectId">项目主键</th>--%>
+				<th  class="sort-column status">当前状态</th>
+				<th  class="sort-column processInstanceId">到账处理</th>
+				<th  class="sort-column processInstanceId">流程追踪</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="projectDepositManagement">
+			<tr>
+				<td> <input type="checkbox" id="${projectDepositManagement.id}" class="i-checks"></td>
+				<td>
+						${projectDepositManagement.project.projectName}
+				</td>
+				<%--<td><a  href="javascript:void(0)" onclick="openDialogView('查看保证金管理', '${ctx}/project/projectDepositManagement/form?id=${projectDepositManagement.id}','80%','80%')">
+					${projectDepositManagement.remarks}
+				</a></td>--%>
+				<td>
+					${projectDepositManagement.depositAmount}
+				</td>
+				<td>
+					${projectDepositManagement.openbidTime}
+				</td>
+				<td>
+					${projectDepositManagement.status}
+				</td>
+				<td>
+
+				</td>
+				<td>
+
+				</td>
+				<td>
+					<shiro:hasPermission name="project:projectDepositReturn:view">
+						<a href="javascript:void(0)" onclick="openDialogView('查看保证金管理', '${ctx}/project/projectDepositReturn/form?id=${projectDepositManagement.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="project:projectDepositReturn:edit">
+    					<a href="javascript:void(0)" onclick="openDialog('修改保证金管理', '${ctx}/project/projectDepositReturn/form?id=${projectDepositManagement.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="project:projectDepositReturn:del">
+						<a href="${ctx}/project/projectDepositReturn/delete?id=${projectDepositManagement.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>

+ 97 - 0
src/main/webapp/webpage/modules/project/projectEvaluationRecordForm.jsp

@@ -0,0 +1,97 @@
+<%@ 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="projectEvaluationRecord" action="${ctx}/project/projectEvaluationRecord/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="clientId" 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="bidsuccessMoney" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">工期:</label></td>
+					<td class="width-35">
+						<form:input path="duration" 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="projectManager" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">开标时间:</label></td>
+					<td class="width-35">
+						<form:input path="openbidMime" 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="openbidPlace" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">评标时间:</label></td>
+					<td class="width-35">
+						<form:input path="assessbidTime" 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="assessbidPlace" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">项目主键:</label></td>
+					<td class="width-35">
+						<form:input path="projectId" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 158 - 0
src/main/webapp/webpage/modules/project/projectEvaluationRecordList.jsp

@@ -0,0 +1,158 @@
+<%@ 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="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="projectEvaluationRecord" action="${ctx}/project/projectEvaluationRecord/" 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="project:projectEvaluationRecord:add">
+				<table:addRow url="${ctx}/project/projectEvaluationRecord/form" title="招标代理评价记录表"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectEvaluationRecord:edit">
+			    <table:editRow url="${ctx}/project/projectEvaluationRecord/form" title="招标代理评价记录表" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectEvaluationRecord:del">
+				<table:delRow url="${ctx}/project/projectEvaluationRecord/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectEvaluationRecord:import">
+				<table:importExcel url="${ctx}/project/projectEvaluationRecord/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectEvaluationRecord:export">
+	       		<table:exportExcel url="${ctx}/project/projectEvaluationRecord/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 clientId">中标单位</th>
+				<th  class="sort-column bidsuccessMoney">中标金额</th>
+				<th  class="sort-column duration">工期</th>
+				<th  class="sort-column projectManager">中标项目经理</th>
+				<th  class="sort-column openbidMime">开标时间</th>
+				<th  class="sort-column openbidPlace">开标地点</th>
+				<th  class="sort-column assessbidTime">评标时间</th>
+				<th  class="sort-column assessbidPlace">评标地点</th>
+				<th  class="sort-column projectId">项目主键</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="projectEvaluationRecord">
+			<tr>
+				<td> <input type="checkbox" id="${projectEvaluationRecord.id}" class="i-checks"></td>
+				<td><a  href="javascript:void(0)" onclick="openDialogView('查看招标代理评价记录表', '${ctx}/project/projectEvaluationRecord/form?id=${projectEvaluationRecord.id}','80%','80%')">
+					${projectEvaluationRecord.remarks}
+				</a></td>
+				<td>
+					${projectEvaluationRecord.clientId}
+				</td>
+				<td>
+					${projectEvaluationRecord.bidsuccessMoney}
+				</td>
+				<td>
+					${projectEvaluationRecord.duration}
+				</td>
+				<td>
+					${projectEvaluationRecord.projectManager}
+				</td>
+				<td>
+					<fmt:formatDate value="${projectEvaluationRecord.openbidMime}" pattern="yyyy-MM-dd HH:mm:ss"/>
+				</td>
+				<td>
+					${projectEvaluationRecord.openbidPlace}
+				</td>
+				<td>
+					<fmt:formatDate value="${projectEvaluationRecord.assessbidTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
+				</td>
+				<td>
+					${projectEvaluationRecord.assessbidPlace}
+				</td>
+				<td>
+					${projectEvaluationRecord.projectId}
+				</td>
+				<td>
+					<shiro:hasPermission name="project:projectEvaluationRecord:view">
+						<a href="javascript:void(0)" onclick="openDialogView('查看招标代理评价记录表', '${ctx}/project/projectEvaluationRecord/form?id=${projectEvaluationRecord.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="project:projectEvaluationRecord:edit">
+    					<a href="javascript:void(0)" onclick="openDialog('修改招标代理评价记录表', '${ctx}/project/projectEvaluationRecord/form?id=${projectEvaluationRecord.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="project:projectEvaluationRecord:del">
+						<a href="${ctx}/project/projectEvaluationRecord/delete?id=${projectEvaluationRecord.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>

+ 94 - 0
src/main/webapp/webpage/modules/project/projectForm.jsp

@@ -0,0 +1,94 @@
+<%@ 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);
+					}
+				}
+			});
+            if(${disabled.length()>0}){$('input,textarea,select').attr("disabled","disabled");}
+
+		});
+	</script>
+</head>
+<body class="hideScroll">
+		<form:form id="inputForm" modelAttribute="project" action="${ctx}/project/project/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">
+							合同名称*<sys:gridselect url="${ctx}/project/project/selectcontractInfo"
+												 id="contractInfo" name="contractInfo"  value="${project.contractInfo.name}"
+												 title="选择合同信息"  cssClass="form-control required"
+												 labelName="contractInfo.name" labelValue="${project.contractInfo.name}"
+												 fieldLabels="name" fieldKeys="name"
+												 searchLabel="name" searchKey="name" ></sys:gridselect>
+							合同编号*<input value="${selectedContractInfoId}" htmlEscape="false"   class="form-control input-append"/>
+					</td>
+				</tr>
+		   		<tr>
+					<td class="width-15 active"><label class="pull-right">项目信息:</label></td>
+					<td class="width-35">
+
+					</td>
+				</tr>
+		   		<tr>
+					<td class="width-15 active"><label class="pull-right">项目概况:</label></td>
+					<td class="width-35">
+						<sys:gridselect url="${ctx}/project/project/selectprojectGeneral" id="projectGeneral" name="projectGeneral"  value="${project.projectGeneral.id}"  title="选择项目概况" labelName="projectGeneral.id"
+										labelValue="${project.projectGeneral.id}" cssClass="form-control required" fieldLabels="name" fieldKeys="name" searchLabel="id" searchKey="id" ></sys:gridselect>
+					</td>
+				</tr>
+		   		<tr>
+					<td class="width-15 active"><label class="pull-right">投标单位:</label></td>
+					<td class="width-35">
+						<sys:gridselect url="${ctx}/project/project/selectworkClientLinkman" id="workClientLinkman" name="workClientLinkman"  value="${project.workClientLinkman.id}"  title="选择投标单位" labelName="workClientLinkman.id"
+										labelValue="${project.workClientLinkman.id}" cssClass="form-control required" fieldLabels="name" fieldKeys="name" searchLabel="id" searchKey="id" ></sys:gridselect>
+					</td>
+				</tr>
+		   		<tr>
+					<td class="width-15 active"><label class="pull-right">评标记录:</label></td>
+					<td class="width-35">
+						<sys:gridselect url="${ctx}/project/project/selectprojectEvaluationRecord" id="projectEvaluationRecord" name="projectEvaluationRecord"  value="${project.projectEvaluationRecord.id}"  title="选择评标记录" labelName="projectEvaluationRecord.id"
+										labelValue="${project.projectEvaluationRecord.id}" cssClass="form-control required" fieldLabels="name" fieldKeys="name" searchLabel="id" searchKey="id" ></sys:gridselect>
+					</td>
+				</tr>
+		   		<tr>
+					<td class="width-15 active"><label class="pull-right">项目组信息:</label></td>
+					<td class="width-35">
+						<sys:gridselect url="${ctx}/project/project/selectworkprojectgroup" id="workprojectgroup" name="workprojectgroup"  value="${project.workprojectgroup.id}"  title="选择项目组信息" labelName="workprojectgroup.id"
+										labelValue="${project.workprojectgroup.id}" cssClass="form-control required" fieldLabels="name" fieldKeys="name" searchLabel="id" searchKey="id" ></sys:gridselect>
+					</td>
+				</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 158 - 0
src/main/webapp/webpage/modules/project/projectList.jsp

@@ -0,0 +1,158 @@
+<%@ 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="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="project" action="${ctx}/project/project/" 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:select path="status"  class="form-control m-b">
+					<form:option value="" label=""/>
+					<form:options items="${fns:getDictList('project_status')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+				</form:select>
+			<span>项目编号:</span>
+				<form:input path="projectNumber" htmlEscape="false" maxlength="64"  class=" form-control input-sm"/>
+			<span>项目名称:</span>
+				<form:input path="projectName" htmlEscape="false" maxlength="288"  class=" form-control input-sm"/>
+<%--			<span>招标方式:</span>
+				<form:select path="tendereeType"  class="form-control m-b">
+					<form:option value="" label=""/>
+					<form:options items="${fns:getDictList('tenderee_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+				</form:select>--%>
+		 </div>	
+	</form:form>
+	<br/>
+	</div>
+	</div>
+	
+	<!-- 工具栏 -->
+	<div class="row">
+	<div class="col-sm-12">
+		<div class="pull-left">
+			<shiro:hasPermission name="project:project:add">
+				<table:addRow url="${ctx}/project/project/form" title="项目"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:project:edit">
+			    <table:editRow url="${ctx}/project/project/form" title="项目" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:project:del">
+				<table:delRow url="${ctx}/project/project/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:project:import">
+				<table:importExcel url="${ctx}/project/project/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:project:export">
+	       		<table:exportExcel url="${ctx}/project/project/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 projectNumber">项目编号</th>
+				<th  class="sort-column projectName">项目名称</th>
+				<th  class="sort-column contractInfo">客户单位</th>
+				<th  class="sort-column createDate">登记日期</th>
+				<th  class="sort-column master">项目负责人</th>
+				<th  class="sort-column status">项目状态</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="project">
+			<tr>
+				<td> <input type="checkbox" id="${project.id}" class="i-checks"></td>
+				<td>
+					${project.projectNumber}
+				</td>
+				<td>
+					${project.projectName}
+				</td>
+				<td>
+					${project.contractInfo.client.name}
+				</td>
+				<td>
+					<fmt:formatDate value="${project.createDate}" pattern="yyyy.MM.dd"/>
+				</td>
+				<td>
+					${project.workprojectgroup.leader}
+				</td>
+				<td>
+					<c:if test="${project.status == 0}">项目登记</c:if>
+					<c:if test="${project.status == 1}">项目评标</c:if>
+					<c:if test="${project.status == 2}">项目归档</c:if>
+				</td>
+				<td>
+					<shiro:hasPermission name="project:project:view">
+						<a href="javascript:void(0)" onclick="openDialogView('查看项目', '${ctx}/project/project/form?id=${project.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="project:project:edit">
+    					<a href="javascript:void(0)" onclick="openDialog('修改项目', '${ctx}/project/project/form?id=${project.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="project:project:del">
+						<a href="${ctx}/project/project/delete?id=${project.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>

+ 110 - 0
src/main/webapp/webpage/modules/project/projectgeneralForm.jsp

@@ -0,0 +1,110 @@
+<%@ 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="projectgeneral" action="${ctx}/project/projectgeneral/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="demandDepartment" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">工程类型(0机电、1房建、2市政、3交通、4政府采购、5其他):</label></td>
+					<td class="width-35">
+						<form:select path="projectType" class="form-control ">
+							<form:option value="" label=""/>
+							<form:options items="${fns:getDictList('')}" 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:input path="constructionSite" 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="supervisionUnit" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">服务分类:</label></td>
+					<td class="width-35">
+						<form:input path="serviceClassification" 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="fundAttribute" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">资产性质:</label></td>
+					<td class="width-35">
+						<form:input path="assetNature" 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="tenderScope" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">标底或招标控制价(元):</label></td>
+					<td class="width-35">
+						<form:input path="bidPriceOrBidControlPriceMoney" 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="bidEvaluationOfficer" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">与评标活动有关工作人员:</label></td>
+					<td class="width-35">
+						<form:input path="bidEvaluationStaff" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 166 - 0
src/main/webapp/webpage/modules/project/projectgeneralList.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() {
+		});
+	</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="projectgeneral" action="${ctx}/project/projectgeneral/" 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="project:projectgeneral:add">
+				<table:addRow url="${ctx}/project/projectgeneral/form" title="项目概况"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectgeneral:edit">
+			    <table:editRow url="${ctx}/project/projectgeneral/form" title="项目概况" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectgeneral:del">
+				<table:delRow url="${ctx}/project/projectgeneral/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectgeneral:import">
+				<table:importExcel url="${ctx}/project/projectgeneral/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:projectgeneral:export">
+	       		<table:exportExcel url="${ctx}/project/projectgeneral/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 demandDepartment">需求部门</th>
+				<th  class="sort-column projectType">工程类型(0机电、1房建、2市政、3交通、4政府采购、5其他)</th>
+				<th  class="sort-column constructionSite">建设地点</th>
+				<th  class="sort-column supervisionUnit">监督单位</th>
+				<th  class="sort-column serviceClassification">服务分类</th>
+				<th  class="sort-column fundAttribute">资金属性</th>
+				<th  class="sort-column assetNature">资产性质</th>
+				<th  class="sort-column tenderScope">招标范围</th>
+				<th  class="sort-column bidPriceOrBidControlPriceMoney">标底或招标控制价(元)</th>
+				<th  class="sort-column bidEvaluationOfficer">评标委员会负责人</th>
+				<th  class="sort-column bidEvaluationStaff">与评标活动有关工作人员</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="projectgeneral">
+			<tr>
+				<td> <input type="checkbox" id="${projectgeneral.id}" class="i-checks"></td>
+				<td><a  href="javascript:void(0)" onclick="openDialogView('查看项目概况', '${ctx}/project/projectgeneral/form?id=${projectgeneral.id}','80%','80%')">
+					${projectgeneral.remarks}
+				</a></td>
+				<td>
+					${projectgeneral.demandDepartment}
+				</td>
+				<td>
+					${fns:getDictLabel(projectgeneral.projectType, '', '')}
+				</td>
+				<td>
+					${projectgeneral.constructionSite}
+				</td>
+				<td>
+					${projectgeneral.supervisionUnit}
+				</td>
+				<td>
+					${projectgeneral.serviceClassification}
+				</td>
+				<td>
+					${projectgeneral.fundAttribute}
+				</td>
+				<td>
+					${projectgeneral.assetNature}
+				</td>
+				<td>
+					${projectgeneral.tenderScope}
+				</td>
+				<td>
+					${projectgeneral.bidPriceOrBidControlPriceMoney}
+				</td>
+				<td>
+					${projectgeneral.bidEvaluationOfficer}
+				</td>
+				<td>
+					${projectgeneral.bidEvaluationStaff}
+				</td>
+				<td>
+					<shiro:hasPermission name="project:projectgeneral:view">
+						<a href="javascript:void(0)" onclick="openDialogView('查看项目概况', '${ctx}/project/projectgeneral/form?id=${projectgeneral.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="project:projectgeneral:edit">
+    					<a href="javascript:void(0)" onclick="openDialog('修改项目概况', '${ctx}/project/projectgeneral/form?id=${projectgeneral.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="project:projectgeneral:del">
+						<a href="${ctx}/project/projectgeneral/delete?id=${projectgeneral.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>

+ 75 - 0
src/main/webapp/webpage/modules/project/workprojectgroupForm.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="workprojectgroup" action="${ctx}/project/workprojectgroup/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="leader" 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="memberIds" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">清单编制:</label></td>
+					<td class="width-35">
+						<form:input path="listPreparation" 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="projectId" 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/project/workprojectgroupList.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="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="workprojectgroup" action="${ctx}/project/workprojectgroup/" 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="project:workprojectgroup:add">
+				<table:addRow url="${ctx}/project/workprojectgroup/form" title="项目组信息表"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:workprojectgroup:edit">
+			    <table:editRow url="${ctx}/project/workprojectgroup/form" title="项目组信息表" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:workprojectgroup:del">
+				<table:delRow url="${ctx}/project/workprojectgroup/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:workprojectgroup:import">
+				<table:importExcel url="${ctx}/project/workprojectgroup/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="project:workprojectgroup:export">
+	       		<table:exportExcel url="${ctx}/project/workprojectgroup/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 leader">项目组负责人</th>
+				<th  class="sort-column memberIds">项目组成员</th>
+				<th  class="sort-column listPreparation">清单编制</th>
+				<th  class="sort-column projectId">项目主键</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="workprojectgroup">
+			<tr>
+				<td> <input type="checkbox" id="${workprojectgroup.id}" class="i-checks"></td>
+				<td><a  href="javascript:void(0)" onclick="openDialogView('查看项目组信息表', '${ctx}/project/workprojectgroup/form?id=${workprojectgroup.id}','80%','80%')">
+					${workprojectgroup.remarks}
+				</a></td>
+				<td>
+					${workprojectgroup.leader}
+				</td>
+				<td>
+					${workprojectgroup.memberIds}
+				</td>
+				<td>
+					${workprojectgroup.listPreparation}
+				</td>
+				<td>
+					${workprojectgroup.projectId}
+				</td>
+				<td>
+					<shiro:hasPermission name="project:workprojectgroup:view">
+						<a href="javascript:void(0)" onclick="openDialogView('查看项目组信息表', '${ctx}/project/workprojectgroup/form?id=${workprojectgroup.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="project:workprojectgroup:edit">
+    					<a href="javascript:void(0)" onclick="openDialog('修改项目组信息表', '${ctx}/project/workprojectgroup/form?id=${workprojectgroup.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="project:workprojectgroup:del">
+						<a href="${ctx}/project/workprojectgroup/delete?id=${workprojectgroup.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>

+ 218 - 0
src/main/webapp/webpage/modules/projectcontentinfo/basedDataForm.jsp

@@ -0,0 +1,218 @@
+<%@ 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}/bootstrap-select-1.12.4/css/bootstrap-select.min.css" rel="stylesheet" />
+	<script src="${ctxStatic}/bootstrap-select-1.12.4/js/bootstrap-select.min.js"></script>
+	<style>
+		label.error{
+			top:40px;
+			left:0;
+		}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }
+
+            return false;
+        }
+        $(document).ready(function() {
+            if (${not empty projectcontentinfo.projectBasedData.type}){
+                $("#type").attr("readOnly","true");
+            }
+            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: '#provideDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+            $('#type').selectpicker('val',arr);
+        });
+
+        function insertTitle(tValue){
+            var files = $("#attachment_file")[0].files;            for(var i = 0;i<files.length;i++) {                var file = files[i];
+            var attachmentId = "";
+            var attachmentFlag = "84";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/basedData/"+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,"0");}
+        }
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container${container}">
+		<form:form id="inputForm" modelAttribute="projectcontentinfo" action="${ctx}/projectcontentinfo/projectcontentinfo/save?view=basedData" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="edit"/>
+			<form:hidden path="parentIds"/>
+			<form:hidden path="projectBasedData.id"/>
+			<sys:message content="${message}"/>
+
+			<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 width-icon">
+						<c:choose>
+							<c:when test="${empty projectcontentinfo.projectBasedData.type}">
+								<select name="projectBasedData.type" id="type" class="form-control simple-select required" >
+									<option value=""></option>
+									<c:forEach items="${fns:getDictList('project_document_type')}" var="item">
+										<option value="${item.value}">${item.label}</option>
+									</c:forEach>
+								</select>
+							</c:when>
+							<c:otherwise>
+								<input  htmlEscape="false" readonly="true" class="form-control  layui-input" value="${fns:getDictLabel(projectcontentinfo.projectBasedData.type, 'project_document_type', '')}"/>
+								<input id="type" name="projectBasedData.type" htmlEscape="false" type="hidden" readonly="true" class="form-control  layui-input" value="${projectcontentinfo.projectBasedData.type}"/>
+							</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">
+						<form:input  path="projectBasedData.number" 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 with-icon">
+						<form:input  path="projectBasedData.name" htmlEscape="false"  class="form-control 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="projectBasedData.provider" 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 id="provideDate" name="projectBasedData.provideDate" type="text" htmlEscape="false" readonly="true" class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${projectcontentinfo.projectBasedData.provideDate}" 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 id="uploadDate" name="projectBasedData.uploadDate"  htmlEscape="false" readonly="true" class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${projectcontentinfo.projectBasedData.uploadDate}" 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="${projectcontentinfo.projectBasedData.uploadUser.name}"/>
+						<form:input  path="projectBasedData.uploadUser.id" type="hidden" 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 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="${projectcontentinfo.projectBasedData.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}">
+									</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>
+			<%--<c:if test="${not empty projectcontentinfo.infoId}">--%>
+				<%--<div class="pull-right">--%>
+					<%--<button id="btnSubmit" class="btn btn-primary btn-rounded btn-outline btn-sm" type="submit" onclick="$('#edit').val('edit')"><i class="fa fa-chevron-up"></i> 提 交</button>--%>
+				<%--</div>--%>
+			<%--</c:if>--%>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 280 - 0
src/main/webapp/webpage/modules/projectcontentinfo/basedDataList.jsp

@@ -0,0 +1,280 @@
+<%@ 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() {
+            $("#cus_name").show();
+            $("#cus_name").siblings().hide();
+            //搜索框收放
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow3);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow3);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#beginDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+        });
+        function switchInput(obj){
+            $("#"+obj).show();
+            $("#"+obj).siblings().hide();
+        }
+        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,
+                skin: 'three-btns',
+                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){
+                }
+            });
+        }
+
+        // 确认对话框
+        function confirmxRefresh(mess, href){
+            top.layer.confirm(mess, {icon: 3, title:'系统提示'}, function(index){
+                //do something
+                if (typeof href == 'function') {
+                    href();
+                }else{
+                    resetTip(); //loading();
+                    $.ajax({
+                        url:href,
+                        data:$('#loginForm').serialize(),
+                        type:"post",
+                        success:function(data){
+                            if(data.status){
+                                parent.layer.msg('删除成功',{icon:1});
+                            }else {
+                                parent.layer.msg('删除失败',{icon:2});
+                            }
+                            parent.refreshTrees();
+                            location = '${ctx}/projectcontentinfo/projectcontentinfo/list?project.id=${projectRecords.id}';
+                        }
+                    });
+                }
+                top.layer.close(index);
+            });
+            return false;
+        }
+
+	</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="contentShadow shadowB full-width">
+			<div class=" layui-row" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="projectcontentinfo" action="${ctx}/projectcontentinfo/projectcontentinfo/list" method="post" class="form-inline">
+				<input id="id" name="id" type="hidden" value="${id}"/>
+				<input id="parentIds" name="parentIds" type="hidden" value="${parentIds}"/>
+				<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 lw6">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">资料名称:</label>
+							<div class="layui-input-block">
+								<form:input path="projectBasedData.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">
+								<input id="beginDate" placeholder="开始时间" name="projectBasedData.startDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${projectcontentinfo.projectBasedData.startDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+								<span class="group-sep">-</span>
+								<input id="endDate" placeholder="结束时间" name="projectBasedData.endDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${projectcontentinfo.projectBasedData.endDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+							</div>
+						</div>
+						<div class="layui-item athird">
+							<div class="input-group">
+								<c:if test="${empty change}">
+								<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>
+								</c:if>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" style="clear:both;display:none;" class="lw6">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">资料类别:</label>
+							<div class="layui-input-block">
+								<form:input path="projectBasedData.type" 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="projectBasedData.number" htmlEscape="false" maxlength="255"   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="projectBasedData.provider" htmlEscape="false" maxlength="255"   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="uploadUser" name="projectBasedData.uploadUser.id" value="${projectcontentinfo.projectBasedData.uploadUser.id}" labelName="projectBasedData.uploadUser.name" labelValue="${projectcontentinfo.projectBasedData.uploadUser.name}"
+												title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/></div>
+						</div>
+						<div style="clear:both;"></div>
+					</div>
+				</form:form>
+			</div>
+		</div>
+
+		<div class="contentShadow shadowT full-width fl">
+			<div class="layui-form contentDetails">
+				<div class="nav-btns">
+					<c:if test="${empty change}">
+						<a href="javascript:void(0)" onclick="openDialogre('新增依据性资料', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=basedData&dictType=${dictType}&id=${id}&parentIds=${parentIds}','95%','95%',false,'inputForm')" class="nav-btn nav-btn-add" ><i class="fa fa-plus"></i>&nbsp; 新增</a>
+						<button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i>&nbsp;刷新</button>
+					</c:if>
+						<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',  width:40,title: '序号'}
+                ,{field:'num',align:'center',width:150,title: '资料编号',templet:function(d){
+                        return "<span title='"+ d.num +"'>" + d.num + "</span>";
+                    }}
+                ,{field:'name',align:'center',minWidth:180, title: '资料名称',templet:function(d){
+                        var xml = "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看依据性资料', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=basedDataView&dictType=" + d.dictType +"&id="+ d.id + "&parentIds=" + d.pid + "&infoId=" + d.bid + "','95%','95%')\">" +
+                            "<span title=" + d.name + ">" + d.name + "</span></a>";
+                        return xml;
+                    }}
+                ,{field:'type',align:'center', title: '资料类别', width:120, sort: true,templet:function(d){
+                        return "<span title='"+ d.type +"'>" + d.type + "</span>";
+                    }}
+                ,{field:'provider',align:'center', title: '资料提供者', width:100,templet:function(d){
+                        return "<span title='"+ d.provider +"'>" + d.provider + "</span>";
+                    }}
+                ,{field:'uploader', align:'center',title: '上传人', width:80,templet:function(d){
+                        return "<span title='"+ d.uploader +"'>" + d.uploader + "</span>";
+                    }}
+                ,{field:'uploadDate', align:'center',title: '上传日期', width:80}
+                ,{field:'op',align:'center',title:"操作",width:130,templet:function(d){
+                        ////对操作进行初始化
+                        var xml = "";
+                        if(d.canedit != undefined && d.canedit == "1")
+						{
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogre('修改依据性资料', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=basedData&dictType="+ d.dictType + "&id=" + d.id + "&parentIds="+ d.pid + "&projectBasedData.id=" + d.bid + "','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                            xml +="<a href=\"${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId=" + d.bid + "&id=" + d.id + "&type=1\" onclick=\"return confirmxRefresh('确认要删除该依据性资料吗?', 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="projectBasedData" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"bid":"${projectBasedData.id}"
+					,"dictType":"${dictType}"
+					,"id":"${id}"
+					,"pid":"${parentIds}"
+                    ,"num":"${projectBasedData.number}"
+                    ,"name":"<c:out value="${projectBasedData.name}" escapeXml="true"/>"
+                    ,"type":"${fns:getDictLabel(projectBasedData.type, 'project_document_type', '')}"
+                    ,"provider":"${projectBasedData.provider}"
+                    ,"uploader":"<c:out value="${projectBasedData.uploadUser.name}" escapeXml="true"/>"
+                    ,"uploadDate":"<fmt:formatDate value="${projectBasedData.uploadDate}" pattern="yyyy-MM-dd"/>"
+					<c:if test="${projectBasedData.createBy.id eq fns:getUser().id && empty change}">,"canedit":"1"</c:if>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+    })
+
+    resizeListTable();
+    $("a").on("click",addLinkVisied);
+</script>
+<script>
+    resizeListWindow3();
+    $(window).resize(function(){
+        resizeListWindow3();
+    });
+</script>
+</body>
+</html>

+ 149 - 0
src/main/webapp/webpage/modules/projectcontentinfo/basedDataView.jsp

@@ -0,0 +1,149 @@
+<%@ 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: '#uploadDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#provideDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+        });
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container${container}  view-form">
+			<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="${fns:getDictLabel(projectcontentinfo.projectBasedData.type, 'project_document_type', '')}"/>
+					</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="${projectcontentinfo.projectBasedData.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 with-icon">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectcontentinfo.projectBasedData.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="${projectcontentinfo.projectBasedData.provider}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">提供日期:</label>
+					<div class="layui-input-block">
+						<input id="provideDate" name="projectBasedData.provideDate" type="text" htmlEscape="false" readonly="true" class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${projectcontentinfo.projectBasedData.provideDate}" 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 id="uploadDate" name="projectBasedData.uploadDate"  htmlEscape="false" readonly="true" class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${projectcontentinfo.projectBasedData.uploadDate}" 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="${projectcontentinfo.projectBasedData.uploadUser.name}"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>附件信息</h2></div>
+				<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="${projectcontentinfo.projectBasedData.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}">
+									</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 page-end"></div>
+	</div>
+</div>
+</body>
+</html>

+ 314 - 0
src/main/webapp/webpage/modules/projectcontentinfo/projectReportDataList.jsp

@@ -0,0 +1,314 @@
+<%@ 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">
+        $(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: '#startDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#createStartDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#createEndDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+        });
+
+        function reset() {
+            $("#searchForm").resetForm();
+        }
+	</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 layui-row" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="projectReportData" action="${ctx}/projectcontentinfo/projectReportData/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="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="number" htmlEscape="false" maxlength="255"  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;" class="lw9">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">工作内容类型:</label>
+							<div class="layui-input-block">
+								<form:select path="type"  htmlEscape="false"   class="form-control simple-select">
+									<form:option value="" label=""/>
+									<optgroup label="决策阶段"/>
+									<form:options items="${fns:getContentTypeList('1')}" itemLabel="typeName" itemValue="typeId"></form:options>
+									<optgroup label="设计阶段"/>
+									<form:options items="${fns:getContentTypeList('2')}" itemLabel="typeName" itemValue="typeId"></form:options>
+									<optgroup label="发承包阶段"/>
+									<form:options items="${fns:getContentTypeList('3')}" itemLabel="typeName" itemValue="typeId"></form:options>
+									<optgroup label="实施阶段"/>
+									<form:options items="${fns:getContentTypeList('4')}" itemLabel="typeName" itemValue="typeId"></form:options>
+									<optgroup label="竣工阶段"/>
+									<form:options items="${fns:getContentTypeList('5')}" itemLabel="typeName" itemValue="typeId"></form:options>
+									<optgroup label="运营阶段"/>
+									<form:options items="${fns:getContentTypeList('6')}" itemLabel="typeName" itemValue="typeId"></form:options>
+								</form:select>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">成果类型:</label>
+							<div class="layui-input-block">
+								<form:select path="achievementType" class="form-control simple-select">
+									<form:option value="" label=""/>
+									<form:options items="${fns:getMainDictList('achievement_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+								</form:select>
+							</div>
+						</div>
+						<%--<div class="layui-item query athird">
+							<label class="layui-form-label">签字造价师1:</label>
+							<div class="layui-input-block with-icon">
+								<sys:treeselect id="signCostOne" name="signCostOne.id" value="${projectReportData.signCostOne.id}" labelName="signCostOne.name" labelValue="${projectReportData.signCostOne.name}"
+												title="签字造价师1" 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">签字造价师2:</label>
+							<div class="layui-input-block with-icon">
+								<sys:treeselect id="signCostTwo" name="signCostTwo.id" value="${projectReportData.signCostTwo.id}" labelName="signCostTwo.name" labelValue="${projectReportData.signCostTwo.name}"
+												title="签字造价师2" 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="reviewStandard" class="form-control simple-select">
+									<form:option value="" label=""/>
+									<form:options items="${fns:getDictList('reviewStandard')}" 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: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 class="layui-item query athird">
+							<label class="layui-form-label">报告日期:</label>
+							<div class="layui-input-block">
+								<input class="form-control layer-date laydate-icon layui-input laydate-icondate" id="startDate" name="startDate" value="<fmt:formatDate value="${projectReportData.startDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">——&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label>
+							<div class="layui-input-block">
+								<input class="form-control layer-date laydate-icon layui-input laydate-icondate" id="endDate" name="endDate" value="<fmt:formatDate value="${projectReportData.endDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">负责人:</label>
+							<div class="layui-input-block with-icon">
+								<sys:treeselect id="master" name="master.id" value="${projectReportData.master.id}" labelName="master.name" labelValue="${projectReportData.master.name}"
+												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 with-icon">
+								<sys:treeselect id="office" name="officeId" value="${projectReportData.officeId}" labelName="officeName" labelValue="${projectReportData.officeName}"
+												title="归属部门" url="/sys/office/treeData?type=2" 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">
+								<input class="form-control layer-date laydate-icon layui-input laydate-icondate" id="createStartDate" name="createStartDate" value="<fmt:formatDate value="${projectReportData.createStartDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">——&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label>
+							<div class="layui-input-block">
+								<input class="form-control layer-date laydate-icon layui-input laydate-icondate" id="createEndDate" name="createEndDate" value="<fmt:formatDate value="${projectReportData.createEndDate}" pattern="yyyy-MM-dd"/>" onclick="laydate({istime: false, format: 'YYYY-MM-DD'})">
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">所属项目:</label>
+							<div class="layui-input-block">
+								<form:input path="project.projectName" htmlEscape="false" maxlength="255"  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="projectMaster" name="projectMasterId" value="${projectReportData.projectMasterId}" labelName="projectMaster" labelValue="${projectReportData.projectMaster}"
+												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:input path="contractNum" htmlEscape="false" maxlength="255"  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="clientName" htmlEscape="false" maxlength="255"  class=" form-control layui-input"/>
+							</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">
+					<shiro:hasPermission name="projectcontentinfo:projectReportData:export">
+						<table:exportExcel url="${ctx}/projectcontentinfo/projectReportData/export"></table:exportExcel><!-- 导出按钮 -->
+					</shiro:hasPermission>
+					<div style="clear: both;"></div>
+				</div>
+				<table class="oa-table layui-table" id="contentTable1"></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: '#contentTable1'
+            ,page: false
+            ,cols: [[
+                // {checkbox: true, fixed: true},
+                {field:'index',align:'center',fixed: 'left', title: '序号',width:40}
+                ,{field:'number',align:'center',fixed: true, title: '报告编号',width:200,templet:function(d){
+                    return "<a class=\"attention-info\" href=\"#\" onclick=\"openDialogView('查看报告', '${ctx}/projectcontentinfo/projectReportData/form?id=" + d.id + "','95%', '95%')\">" + d.number + "</a>";
+                }}
+                ,{field:'name',align:'center', title: '报告名称',width:200,templet:function(d){
+                    return "<a class=\"attention-info\" href=\"#\" onclick=\"openDialogView('查看报告', '${ctx}/projectcontentinfo/projectReportData/form?id=" + d.id + "','95%', '95%')\">" + d.name + "</a>";
+                }}
+                ,{field:'type', align:'center',title: '工作类型',width:200}
+                ,{field:'achievementType', align:'center',title: '成果类型',width:200}
+                /*,{field:'signCostOneName', align:'center',title: '签字造价师1',width:200}
+                ,{field:'signCostTwoName', align:'center',title: '签字造价师2',width:200}*/
+                ,{field:'reviewStandard', align:'center',title: '复核标准',width:200}
+                ,{field:'status', align:'center',title: '报告状态',width:200}
+                ,{field:'reportDate', align:'center',title: '报告日期',width:200}
+                ,{field:'fileStatus', align:'center',title: '归档状态',width:200}
+                ,{field:'master', align:'center',title: '负责人',width:200}
+                ,{field:'officeId', align:'center',title: '所属部门',width:200}
+                ,{field:'createDate', align:'center',title: '创建日期',width:200}
+                ,{field:'projectName', align:'center',title: '所属项目',width:200}
+                ,{field:'projectMaster', align:'center',title: '项目负责人',width:200}
+                ,{field:'contractNum', align:'center',title: '合同编号',width:200}
+                ,{field:'client', align:'center',title: '主委托方',width:200}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="projectReportData" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "id":"${projectReportData.id}",
+                    "index":"${index.index+1}"
+                    ,"number":"${projectReportData.number}"
+                    ,"name":"${projectReportData.name}"
+                    ,"type":"${fns:getContentTypeName(projectReportData.type,"")}"
+                    ,"achievementType":"${fns:getMainDictLabel(projectReportData.achievementType, 'achievement_type', '')}"
+                    /*,"signCostOneName":"${projectReportData.signCostOne.name}"
+                    ,"signCostTwoName":"${projectReportData.signCostTwo.name}"*/
+                    ,"reviewStandard":"${fns:getDictLabel(projectReportData.reviewStandard, 'reviewStandard', '')}"
+                    ,"status":"${fns:getDictLabel(projectReportData.status, 'audit_state', '')}"
+                    ,"reportDate":"<fmt:formatDate value="${projectReportData.reportDate}" pattern="yyyy-MM-dd"/>"
+                    ,"fileStatus":"${fns:getDictLabel(projectReportData.fileStatus, 'record_state', '')}"
+                    ,"master":"${projectReportData.master.name}"
+                    ,"officeId":"${projectReportData.officeName}"
+                    ,"createDate":"<fmt:formatDate value="${projectReportData.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
+                    ,"projectName":"${projectReportData.project.projectName}"
+                    ,"projectMaster":"${projectReportData.projectMaster}"
+                    ,"contractNum":"${projectReportData.contractNum}"
+                    ,"client":"${projectReportData.clientName}"
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+    resizeListTable();/*消除由于有竖向滚动条造成table出现横向滚动条*/
+    $("a").on("click",addLinkVisied);
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+</body>
+</html>

+ 247 - 0
src/main/webapp/webpage/modules/projectcontentinfo/projectReportRecordAudit.jsp

@@ -0,0 +1,247 @@
+<%@ 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;
+            }else {
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+
+            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="projectReportRecord" action="${ctx}/projectcontentinfo/projectReportRecord/auditSave" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="home"/>
+		<form:hidden path="numberCount"/>
+		<form:hidden id="reportId" path="report.id"/>
+		<form:hidden path="createBy.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}"/>
+			<div class="form-group layui-row first lw9">
+				<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">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.report.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="${projectReportRecord.recordNum}"/>
+							<span class="input-group-btn">
+								<label class="form-status">
+									<c:choose>
+										<c:when test="${not empty projectReportRecord.status}">${fns:getDictLabel(projectReportRecord.status, 'audit_record_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">签字造价师一:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control  layui-input" value="${projectReportRecord.signCostOne.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="${projectReportRecord.signCostTwo.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="${projectReportRecord.report.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="<fmt:formatDate value="${projectReportRecord.report.reportDate}" 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="${projectReportRecord.contractNum}"/>
+					</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="${projectReportRecord.contractName}"/>
+					</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="${projectReportRecord.clientName}"/>
+					</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="${projectReportRecord.projectNum}"/>
+					</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="${projectReportRecord.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="${projectReportRecord.createBy.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="<fmt:formatDate value="${projectReportRecord.createDate}" 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="${projectReportRecord.fileNum}"/>
+					</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="${projectReportRecord.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">归档时间:</label>
+					<div class="layui-input-block">
+						<input id="recordDate" name="recordDate"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="<fmt:formatDate value="${projectReportRecord.createDate}" 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">
+						<textarea path="remarks" htmlEscape="false" readonly="true" rows="3" maxlength="255" class="form-control" >${projectReportRecord.remarks}</textarea>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>附件信息</h2></div>
+				<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="${projectReportRecord.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}">
+									</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="${projectReportRecord.act.procInsId}"/>
+					<act:histoicFlow procInsId="${projectReportRecord.act.procInsId}"/>
+				</div>
+			</div>
+
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 292 - 0
src/main/webapp/webpage/modules/projectcontentinfo/projectReportRecordForm.jsp

@@ -0,0 +1,292 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>合同归档管理</title>
+	<meta name="decorator" content="default"/>
+	<style>
+		label.error:nth-child(2){
+			top:40px;
+			left:0;
+		}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(obj == 2){
+                    $("#inputForm").attr("action","${ctx}/projectcontentinfo/projectReportRecord/store");
+                }else{
+                    $("#inputForm").attr("action","${ctx}/projectcontentinfo/projectReportRecord/save");
+                }
+                $("#inputForm").submit();
+                return true;
+            }else {
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+            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);
+                    }
+                }
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+
+        });
+        function insertTitle(tValue){
+            var list = "${projectReportRecord.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 = "99";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workContractRd/"+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);}
+        }
+
+        function setValuee(obj){
+            $("#reportId").val(obj.id);
+            $("#reportnumber").val(obj.number);
+            $("#reportName").val(obj.name);
+            $("#reportDate").val(obj.reportDate);
+            $("#contractNum").val(obj.contractNum);
+            $("#contractName").val(obj.contractName);
+            $("#clientName").val(obj.clientName);
+            $("#projectName").val(obj.projectName);
+            $("#projectNum").val(obj.projectNum);
+            $.ajax({
+                type:'post',
+                url:'${ctx}/projectcontentinfo/projectReportRecord/getNumber',
+                data:{
+                    "reportId":obj.id
+                },
+                success:function(data){
+                    var numberCount = data.numberCount;
+                    $("#recordNum").val(obj.number+"-"+numberCount);
+                    $("#numberCount").val(numberCount);
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="projectReportRecord" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="numberCount"/>
+			<form:hidden id="reportId" path="report.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">
+						<sys:gridselectreportrecord url="${ctx}/projectcontentinfo/projectReportData/selectreportData" id="report" name="report.id"  value="${projectReportRecord.report.id}"  title="选择报告" labelName="report.number"
+													labelValue="${projectReportRecord.report.number}" cssClass="form-control layui-input " fieldLabels="${fns:urlEncode('报告')}" fieldKeys="name" searchLabel="${fns:urlEncode('报告名称')}" searchKey="name" ></sys:gridselectreportrecord>
+
+					</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 id="recordNum" path="recordNum" htmlEscape="false"   readonly="true" class="form-control layui-input required"/>
+							<span class="input-group-btn">
+								<label class="form-status">
+									<c:choose>
+										<c:when test="${not empty projectReportRecord.status}">${fns:getDictLabel(projectReportRecord.status, 'audit_record_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 with-icon">
+						<sys:treeselect id="signCostOne" name="signCostOne.id" value="${projectReportRecord.signCostOne.id}" labelName="signCostOne.name" labelValue="${projectReportRecord.signCostOne.name}"
+										title="签字造价师一" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input required" 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="signCostTwo" name="signCostTwo.id" value="${projectReportRecord.signCostTwo.id}" labelName="signCostTwo.name" labelValue="${projectReportRecord.signCostTwo.name}"
+										title="签字造价师二" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input required" 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">
+						<form:input id="reportName" path="report.name" 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="reportDate" name="report.reportDate"  htmlEscape="false" readonly="true" class="form-control  layui-input required" value="<fmt:formatDate value="${projectReportRecord.report.reportDate}" pattern="yyyy-MM-dd"/>"/>
+							<%--<input class="laydate-icondate form-control layui-input layer-date laydate-icon" id="createDate" name="createDate" value="<fmt:formatDate value="${projectReportRecord.createDate}" 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="contractNum" path="contractNum" 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 id="contractName" path="contractName" 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 id="clientName" path="clientName" htmlEscape="false" readonly="true" class="form-control  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 id="projectNum" path="projectNum" 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="projectName" path="projectName" 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 id="cBName" path="createBy.name" 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"  htmlEscape="false" readonly="true" class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${projectReportRecord.createDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">档案号:</label>
+					<div class="layui-input-block">
+						<form:input path="fileNum" 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 path="name" 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">
+						<input id="recordDate" name="recordDate"  htmlEscape="false" readonly="true" class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${projectReportRecord.createDate}" 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="remarks" htmlEscape="false" rows="4"    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">
+					<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="${projectReportRecord.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}">
+									</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>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 331 - 0
src/main/webapp/webpage/modules/projectcontentinfo/projectReportRecordList.jsp

@@ -0,0 +1,331 @@
+<%@ 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">
+        $(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: '#beginDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于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,
+                skin: 'three-btns',
+                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){
+                }
+            });
+        }
+        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,
+                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
+                    }
+
+                },
+                cancel: function(index){
+                }
+            });
+        }
+
+        function reset() {
+            $("#searchForm").resetForm();
+        }
+	</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 layui-row" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="projectReportRecord" action="${ctx}/projectcontentinfo/projectReportRecord/" 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="report.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">
+								<input id="beginDate" placeholder="开始时间" name="startDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${projectReportRecord.startDate}" 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="${projectReportRecord.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="reset()">重置</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;" class="lw9">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">报告名称:</label>
+							<div class="layui-input-block">
+								<form:input path="report.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="recordNum" htmlEscape="false" maxlength="255"  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="contractNum" htmlEscape="false" maxlength="255"  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="contractName" htmlEscape="false" maxlength="255"  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="clientName" htmlEscape="false" maxlength="255"  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="createBy" name="createBy.id" value="${projectReportRecord.createBy.id}" labelName="createBy.name" labelValue="${projectReportRecord.createBy.name}"
+												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="status" class="form-control simple-select">
+									<form:option value="" label=""/>
+									<form:options items="${fns:getDictList('audit_record_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">
+					<a href="javascript:void(0)" onclick="openDialogre('新增报告归档', '${ctx}/projectcontentinfo/projectReportRecord/form','95%','95%')" class="nav-btn nav-btn-add" ><i class="fa fa-plus"></i>&nbsp;添加</a>
+					<table:exportExcel url="${ctx}/projectcontentinfo/projectReportRecord/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>&nbsp;刷新</button>
+					<div style="clear: both;"></div>
+				</div>
+				<table class="oa-table layui-table" id="contentTable1"></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: '#contentTable1'
+            ,page: false
+            ,cols: [[
+                // {checkbox: true, fixed: true},
+                {field:'index',align:'center', title: '序号',width:60}
+                ,{field:'recordNum',align:'center', title: '归档申请编号',width:200,templet:function(d){
+                    return "<a class=\"attention-info\" href=\"#\" onclick=\"openDialogView('查看项目', '${ctx}/projectcontentinfo/projectReportRecord/form?id=" + d.id + "&view=view','95%', '95%')\">" + d.recordNum + "</a>";
+                }}
+                ,{field:'reportNum', align:'center',title: '报告编号',width:200}
+                ,{field:'reportName', align:'center',title: '报告名称',width:200}
+                ,{field:'contractName', align:'center',title: '合同名称',width:200}
+                ,{field:'contractNum', align:'center',title: '合同编号',width:200}
+                ,{field:'clientName', align:'center',title: '主委托方',width:200}
+                ,{field:'createDate', align:'center',title: '申请日期',width:200}
+                ,{field:'createBy', align:'center',title: '归档申请人',width:200}
+                ,{ title: '状态', align:'center',sort: true, width:100,templet:function(d){
+                    var st = getAuditRecordState(d.status)
+                    var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/projectcontentinfo/projectReportRecord/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                    return xml;
+                }}
+                // ,{fixed: 'right',align:'center', toolbar: '#op',title:"操作"}
+                ,{align:'center',title:"操作",width:200,templet:function(d){
+                    ////对操作进行初始化
+                    var xml = "";
+                    if(d.cancancel != undefined && d.cancancel == "1")
+                        xml += "<a href=\"${ctx}/projectcontentinfo/projectReportRecord/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.canedit1 != undefined && d.canedit1 == "1")
+                        xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogre('修改报告归档', '${ctx}/projectcontentinfo/projectReportRecord/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}/projectcontentinfo/projectReportRecord/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}/projectcontentinfo/projectReportRecord/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}/projectcontentinfo/projectReportRecord/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="projectReportRecord" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "id":"${projectReportRecord.id}"
+                    ,"index":"${index.index+1}"
+                    ,"recordNum":"${projectReportRecord.recordNum}"
+                    ,"reportNum":"${projectReportRecord.report.number}"
+                    ,"reportName":"${projectReportRecord.report.name}"
+                    ,"contractName":"${projectReportRecord.contractName}"
+                    ,"contractNum":"${projectReportRecord.contractNum}"
+                    ,"clientName":"${projectReportRecord.clientName}"
+                    ,"createDate":"<fmt:formatDate value="${projectReportRecord.createDate}" pattern="yyyy-MM-dd"/>"
+                    ,"createBy":"${projectReportRecord.createBy.name}"
+                    ,"status":"${projectReportRecord.status}"
+                    <c:if test="${fns:getUser().id == projectReportRecord.createBy.id && (projectReportRecord.status == '1' or projectReportRecord.status == '3' or projectReportRecord.status == '4')}">,"candelete":"1"</c:if>
+                    <c:if test="${projectReportRecord.status == '2' && fns:getUser().id == projectReportRecord.createBy.id}"> ,"cancancel":"1"</c:if>
+                    <c:if test="${fns:getUser().id == projectReportRecord.createBy.id && projectReportRecord.status == '1' }">,"canedit1":"1"</c:if>
+                    <c:if test="${fns:getUser().id == projectReportRecord.createBy.id && projectReportRecord.status == '4'  && fns:getUser().id == projectReportRecord.createBy.id}">,"canedit2":"1"</c:if>
+                    <c:if test="${projectReportRecord.status == '3' && fns:getUser().id == projectReportRecord.createBy.id}"> ,"canedit3":"1"</c:if>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+    resizeListTable();/*消除由于有竖向滚动条造成table出现横向滚动条*/
+    $("a").on("click",addLinkVisied);
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+</body>
+</html>

+ 285 - 0
src/main/webapp/webpage/modules/projectcontentinfo/projectReportRecordModifyApply.jsp

@@ -0,0 +1,285 @@
+<%@ 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;
+            }else {
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+            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);
+                    }
+                }
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+
+        });
+        function insertTitle(tValue){
+            var list = "${projectReportRecord.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 = "99";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workContractRd/"+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);}
+        }
+
+        function setValuee(obj){
+            $("#reportId").val(obj.id);
+            $("#reportnumber").val(obj.number);
+            $("#reportName").val(obj.name);
+            $("#reportDate").val(obj.reportDate);
+            $("#contractNum").val(obj.contractNum);
+            $("#contractName").val(obj.contractName);
+            $("#clientName").val(obj.clientName);
+            $("#projectName").val(obj.projectName);
+            $("#projectNum").val(obj.projectNum);
+            $.ajax({
+                type:'post',
+                url:'${ctx}/projectcontentinfo/projectReportRecord/getNumber',
+                data:{
+                    "reportId":obj.number
+                },
+                success:function(data){
+                    var numberCount = data.numberCount;
+                    $("#recordNum").val(obj.number+"-"+numberCount);
+                    $("#numberCount").val(numberCount);
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="projectReportRecord" action="${ctx}/projectcontentinfo/projectReportRecord/auditSave" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="home"/>
+			<form:hidden path="numberCount"/>
+			<form:hidden id="reportId" path="report.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 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:gridselectreportrecord url="${ctx}/projectcontentinfo/projectReportData/selectreportData" id="report" name="report.id"  value="${projectReportRecord.report.id}"  title="选择报告" labelName="report.number"
+													labelValue="${projectReportRecord.report.number}" cssClass="form-control layui-input required" fieldLabels="报告" fieldKeys="name" searchLabel="报告名称" searchKey="name" ></sys:gridselectreportrecord>
+
+					</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 id="recordNum" path="recordNum" htmlEscape="false"   readonly="true" class="form-control layui-input required"/>
+							<span class="input-group-btn">
+								<label class="form-status">
+									<c:choose>
+										<c:when test="${not empty projectReportRecord.status}">${fns:getDictLabel(projectReportRecord.status, 'audit_record_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 with-icon">
+						<sys:treeselect id="signCostOne" name="signCostOne.id" value="${projectReportRecord.signCostOne.id}" labelName="signCostOne.name" labelValue="${projectReportRecord.signCostOne.name}"
+										title="签字造价师一" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input required" 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="signCostTwo" name="signCostTwo.id" value="${projectReportRecord.signCostTwo.id}" labelName="signCostTwo.name" labelValue="${projectReportRecord.signCostTwo.name}"
+										title="签字造价师二" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input required" 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">
+						<form:input id="reportName" path="report.name" 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="reportDate" name="report.reportDate"  htmlEscape="false" readonly="true" class="form-control  layui-input required" value="<fmt:formatDate value="${projectReportRecord.report.reportDate}" pattern="yyyy-MM-dd"/>"/>
+							<%--<input class="laydate-icondate form-control layui-input layer-date laydate-icon" id="createDate" name="createDate" value="<fmt:formatDate value="${projectReportRecord.createDate}" 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="contractNum" path="contractNum" 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 id="contractName" path="contractName" 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 id="clientName" path="clientName" htmlEscape="false" readonly="true" class="form-control  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 id="projectNum" path="projectNum" 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="projectName" path="projectName" 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 id="cBName" path="createBy.name" 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"  htmlEscape="false" readonly="true" class="form-control  layui-input required" value="<fmt:formatDate value="${projectReportRecord.createDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">档案号:</label>
+					<div class="layui-input-block">
+						<form:input path="fileNum" 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 path="name" 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">
+						<input id="recordDate" name="recordDate"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="<fmt:formatDate value="${projectReportRecord.createDate}" 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="remarks" htmlEscape="false" rows="4"    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">
+					<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="${projectReportRecord.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}">
+									</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>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 183 - 0
src/main/webapp/webpage/modules/projectcontentinfo/projectReportRecordView.jsp

@@ -0,0 +1,183 @@
+<%@ 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">
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<div class="form-group layui-row first lw9">
+			<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">
+					<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.report.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="${projectReportRecord.recordNum}"/>
+						<span class="input-group-btn">
+								<label class="form-status">
+									<c:choose>
+										<c:when test="${not empty projectReportRecord.status}">${fns:getDictLabel(projectReportRecord.status, 'audit_record_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">签字造价师一:</label>
+				<div class="layui-input-block">
+					<input  htmlEscape="false" readonly="true" class="form-control  layui-input" value="${projectReportRecord.signCostOne.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="${projectReportRecord.signCostTwo.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="${projectReportRecord.report.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="<fmt:formatDate value="${projectReportRecord.report.reportDate}" 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="${projectReportRecord.contractNum}"/>
+				</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="${projectReportRecord.contractName}"/>
+				</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="${projectReportRecord.clientName}"/>
+				</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="${projectReportRecord.projectNum}"/>
+				</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="${projectReportRecord.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="${projectReportRecord.createBy.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="<fmt:formatDate value="${projectReportRecord.createDate}" 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="${projectReportRecord.fileNum}"/>
+				</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="${projectReportRecord.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">归档时间:</label>
+				<div class="layui-input-block">
+					<input id="recordDate" name="recordDate"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="<fmt:formatDate value="${projectReportRecord.createDate}" 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">
+					<textarea path="remarks" htmlEscape="false" readonly="true" rows="3" maxlength="20" class="form-control" >${projectReportRecord.remarks}</textarea>
+				</div>
+			</div>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>附件信息</h2></div>
+			<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="${projectReportRecord.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}">
+								</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 page-end"></div>
+	</div>
+</div>
+</body>
+</html>

+ 517 - 0
src/main/webapp/webpage/modules/projectcontentinfo/projectcontentinfoForm.jsp

@@ -0,0 +1,517 @@
+<%@ 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(){
+            initControlData();
+        });
+        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,
+                skin: 'three-btns',
+                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){
+                }
+            });
+        }
+        function openDialogreAudit(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: 'three-btns',
+                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){
+                }
+            });
+        }
+
+        function openDialogres(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: 'three-btns',
+                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){
+                }
+            });
+        }
+
+        // 确认对话框
+			function confirmxRefresh(mess, href){
+            top.layer.confirm(mess, {icon: 3, title:'系统提示'}, function(index){
+                //do something
+                if (typeof href == 'function') {
+                    href();
+                }else{
+                    resetTip(); //loading();
+                    $.ajax({
+                        url:href,
+                        data:$('#loginForm').serialize(),
+                        type:"post",
+                        success:function(data){
+                            if(data.status){
+                                parent.layer.msg('删除成功',{icon:1});
+                            }else {
+								parent.layer.msg('删除失败',{icon:2});
+                            }
+                            parent.refreshTrees();
+                            location = '${ctx}/projectcontentinfo/projectcontentinfo/list?project.id=${projectRecords.id}';
+                        }
+                    });
+                }
+                top.layer.close(index);
+            });
+            return false;
+        }
+		function openDialogWork1(title,url,width,height,target){
+			top.layer.open({
+				type: 2,
+				area: [width, height],
+				title: title,
+				maxmin: true, //开启最大化最小化按钮
+				content: url ,
+				btn: ['关闭'],
+				end:function(index){
+					top.layer.close(index)
+				}
+			});
+		}
+        function openDialogWork(title,url,width,height,target){
+            initControlData();
+            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: ['提交', '关闭'],
+                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){
+
+                },
+                end:function(index){
+                    top.layer.close(index)
+                }
+            });
+
+        }
+        /**
+         * 初始化控制数据
+         */
+        function initControlData(){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/projectcontroltable/projectControlTable/delControlData',
+                data:{
+                    "projectId":"${projectRecords.id}"
+                },
+                success:function(data){
+                    console.log(data);
+                }
+            })
+        }
+	</script>
+	<script>
+		function initRecordStatus(index,id,dataid,status)
+		{
+		    var elem = document.getElementById("status_td_" + index);
+            var st = getAuditState(status);
+            if(st.action)
+                var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/projectcontentinfo/projectcontentinfo/getProcessOne?id=" + id + "&projectReportData.id="+ dataid + "&type="+status+"','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>";
+
+            elem.innerHTML = xml;
+		}
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container${container}" id="container">
+		<sys:message content="${message}"/>
+			<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="${projectRecords.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="${projectRecords.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="${projectRecords.leaderNameStr}"/>
+					</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="${projectRecords.workContractInfo.client.name}"/>
+					</div>
+				</div>
+				<div class="form-group layui-row">
+					<div class="form-group-label"><h2>依据性资料明细</h2></div>
+					<div class="layui-item nav-btns">
+						<c:if test="${empty change}">
+							<a href="javascript:void(0)" onclick="openDialogre('新增依据性资料', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=basedData&dictType=${dictType}&id=${id}&parentIds=${parentIds}','95%','95%',false,'inputForm')" class="nav-btn nav-btn-add" ><i class="fa fa-plus"></i>&nbsp; 新增</a>
+						</c:if>
+					</div>
+					<div class="layui-item layui-col-xs12 form-table-container">
+						<table id="contentTableBase" class="table table-bordered table-condensed details">
+							<thead>
+							<tr>
+								<th class="hide"></th>
+								<th >资料编号</th>
+								<th >资料名称</th>
+								<th width="100">资料类别</th>
+								<th width="90">上传人</th>
+								<th width="90">上传日期</th>
+								<th width="130">操作</th>
+							</tr>
+							</thead>
+							<tbody id="workBaseDataList">
+							<c:choose>
+								<c:when test="${not empty projectBasedDatas}">
+									<c:forEach items="${projectBasedDatas}" var="projectBasedData" varStatus="idx">
+										<tr>
+											<td class="hide">
+												<input type="hidden" id="workBaseDataList${idx.index}_id" value="${projectBasedData.id}">
+											</td>
+											<td title="${projectBasedData.number}" style="text-align:center;">
+													${projectBasedData.number}
+											</td>
+											<td title="${projectBasedData.name}" style="text-align:center;">
+													${projectBasedData.name}
+											</td>
+											<td title="${fns:getDictLabel(projectBasedData.type, 'project_document_type', '')}" style="text-align:center;">
+													${fns:getDictLabel(projectBasedData.type, 'project_document_type', '')}
+											</td>
+											<td title="${projectBasedData.uploadUser.name}" style="text-align:center;">
+													${projectBasedData.uploadUser.name}
+											</td>
+											<td style="text-align:center;">
+												<fmt:formatDate value="${projectBasedData.uploadDate}" pattern="yyyy-MM-dd"/>
+											</td>
+											<td style="text-align:center;" class="op-td">
+												<div class="op-btn-box">
+													<c:if test="${projectBasedData.createBy.id eq fns:getUser().id && empty change}">
+														<a href="javascript:void(0)" onclick="openDialogre('修改依据性资料', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=basedData&dictType=${dictType}&id=${id}&parentIds=${parentIds}&projectBasedData.id=${projectBasedData.id}','95%','95%',false,'inputForm')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>
+														<a href="${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId=${projectBasedData.id}&id=${id}&type=1" onclick="return confirmxRefresh('确认要删除该依据性资料吗?', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>
+													</c:if>
+												</div>
+											</td>
+										</tr>
+									</c:forEach>
+								</c:when>
+								<c:otherwise>
+									<tr>
+										<td colspan="6">
+											暂无数据
+										</td>
+									</tr>
+								</c:otherwise>
+							</c:choose>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<div class="form-group layui-row">
+					<div class="form-group-label"><h2>工作内容列表</h2></div>
+					<div class="layui-item nav-btns">
+						<c:if test="${empty change}">
+						<a href="javascript:void(0)" onclick="openDialogWork('新增工作内容', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=content&dictType=${dictType}&id=${id}&parentIds=${parentIds}','95%','95%',false,'inputForm')" class="nav-btn nav-btn-add" ><i class="fa fa-plus"></i>&nbsp; 新增</a>
+						</c:if>
+					</div>
+					<div class="layui-item layui-col-xs12 form-table-container">
+						<table id="contentTable2" class="table table-bordered table-condensed details">
+							<thead>
+							<tr>
+								<th>内容编号</th>
+								<th>内容名称</th>
+								<th width="80">内容类型</th>
+								<th width="90">负责人</th>
+								<th width="90">创建日期</th>
+								<th width="130">操作</th>
+							</tr>
+							</thead>
+							<tbody>
+							<c:choose>
+								<c:when test="${not empty projectContentDatas}">
+									<c:forEach items="${projectContentDatas}" var="projectContentData" varStatus="idx">
+										<tr>
+											<td title="${projectContentData.number}">
+													${projectContentData.number}
+											</td>
+											<td><a title="${projectContentData.name}" href="#" onclick="openDialogView('查看工作内容详情', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=contentView&dictType=${dictType}&id=${id}&parentIds=${parentIds}&infoId=${projectContentData.id}','95%','95%')">
+													${projectContentData.name}</a>
+											</td>
+											<td title="${fns:getContentTypeName(projectContentData.type,"")}">
+													${fns:getContentTypeName(projectContentData.type,"")}
+											</td>
+											<td title="${projectContentData.master.name}">
+													${projectContentData.master.name}
+											</td>
+											<td>
+												<fmt:formatDate value="${projectContentData.createDate}" pattern="yyyy-MM-dd"/>
+											</td>
+											<td class="op-td">
+												<div class="op-btn-box">
+													<c:if test="${fns:getUser().id == projectContentData.createBy.id && empty change}">
+														<a href="#" onclick="openDialog('修改工作内容详情', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=content&dictType=${dictType}&id=${id}&parentIds=${parentIds}&infoId=${projectContentData.id}','95%','95%')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>
+														<a href="${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId=${projectContentData.id}&id=${id}&type=2" onclick="return confirmxRefresh('确认要删除该工作内容详情吗?', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>
+													</c:if>
+												</div>
+											</td>
+										</tr>
+									</c:forEach>
+								</c:when>
+								<c:otherwise>
+									<tr>
+										<td colspan="6">
+											暂无数据
+										</td>
+									</tr>
+								</c:otherwise>
+							</c:choose>
+							</tbody>
+						</table>
+					</div>
+				</div>
+				<div class="form-group layui-row">
+					<div class="form-group-label"><h2>报告列表</h2></div>
+					<div class="layui-item nav-btns">
+						<c:if test="${empty change}">
+							<a href="javascript:void(0)" onclick="openDialogWork1('领取报告号', '${ctx}/projectreportnum/projectReportNum/list','60%','95%',false,'inputForm')" class="nav-btn nav-btn-add" ><i class="fa fa-plus"></i>&nbsp; 领取报告号</a>
+						</c:if>
+						<c:if test="${empty change}">
+							<a href="javascript:void(0)" onclick="openDialogres('新增报告文件', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=report&dictType=${dictType}&id=${id}&parentIds=${parentIds}','95%','95%',false,'inputForm')" class="nav-btn nav-btn-add" ><i class="fa fa-plus"></i>&nbsp; 新增报告</a>
+						</c:if>
+						</div>
+					<div class="layui-item layui-col-xs12 form-table-container">
+						<table id="upTable" class="table table-bordered table-condensed details">
+							<thead>
+							<tr>
+								<th>报告编号</th>
+								<th>报告名称</th>
+								<th width="110">工作内容类型</th>
+								<th width="80">签章类型</th>
+								<th width="90">创建日期</th>
+								<th width="80">状态</th>
+								<th width="130">操作</th>
+							</tr>
+							</thead>
+							<tbody>
+							<c:choose>
+								<c:when test="${not empty projectReportDatas}">
+									<c:forEach items="${projectReportDatas}" var="projectReportData" varStatus="index">
+										<tr>
+											<td><a title="${projectReportData.number}" href="javascript:void(0)" onclick="openDialogView('查看报告详情', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=reportView&dictType=${dictType}&id=${id}&parentIds=${parentIds}&infoId=${projectReportData.id}','95%', '95%')">
+													${projectReportData.number}
+											</a></td>
+											<td>
+												<a title="${projectReportData.name}" href="javascript:void(0)" onclick="openDialogView('查看报告详情', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=reportView&dictType=${dictType}&id=${id}&parentIds=${parentIds}&infoId=${projectReportData.id}','95%', '95%')">
+														${projectReportData.name}
+												</a>
+											</td>
+											<td title="${fns:getContentTypeName(projectReportData.type,"")}">
+													${fns:getContentTypeName(projectReportData.type,"")}
+											</td>
+											<td title="${projectReportData.reportType}">
+													${projectReportData.reportType}
+											</td>
+											<td>
+												<fmt:formatDate value="${projectReportData.reportDate}" pattern="yyyy-MM-dd"/>
+											</td>
+											<td class="op-td">
+												<%--<c:choose>--%>
+													<%--<c:when test="${empty projectReportData.status || projectReportData.status eq 1}">--%>
+														<%--<div style="text-align: center">--%>
+															<%--<a href="javascript:void(0)" class="op-btn op-btn-trace" >${fns:getDictLabel(projectReportData.status, 'audit_state', '')}</a>--%>
+														<%--</div>--%>
+													<%--</c:when>--%>
+													<%--<c:otherwise>--%>
+														<%--<div style="text-align: center">--%>
+															<%--<a href="javascript:void(0)" onclick="openDialogView('流程追踪', '${ctx}/projectcontentinfo/projectcontentinfo/getProcessOne?id=${id}&projectReportData.id=${projectReportData.id}&type=1','95%','95%')" class="op-btn op-btn-trace" >${fns:getDictLabel(projectReportData.status, 'audit_state', '')}</a>--%>
+														<%--</div>--%>
+													<%--</c:otherwise>--%>
+												<%--</c:choose>--%>
+                                                <div style="text-align: center" id="status_td_${index.index+1}">
+                                                </div>
+												<script>
+                                                    initRecordStatus(${index.index+1},"${id}","${projectReportData.id}","${projectReportData.status}");
+												</script>
+											</td>
+											<td class="op-td">
+												<div class="op-btn-box">
+													<c:if test="${projectReportData.createBy.id eq fns:getUser().id && empty change}">
+														<c:if test="${projectReportData.status eq '1'}">
+															<a href="javascript:void(0)" onclick="openDialogres('修改报告', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=report&dictType=${dictType}&id=${id}&parentIds=${parentIds}&projectReportData.id=${projectReportData.id}','95%','95%',false,'inputForm')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>
+															<a href="${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId=${projectReportData.id}&id=${id}&type=8" onclick="return confirmxRefresh('确认要删除该工作内容报告吗?', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>
+														</c:if>
+														<c:if test="${projectReportData.status eq '3'}">
+															<a href="javascript:void(0)" onclick="openDialogreAudit('修改报告', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=report&dictType=${dictType}&id=${id}&parentIds=${parentIds}&projectReportData.id=${projectReportData.id}','95%','95%',false,'inputForm')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>
+															<a href="${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId=${projectReportData.id}&id=${id}&type=8" onclick="return confirmxRefresh('确认要删除该工作内容报告吗?', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>
+														</c:if>
+														<c:if test="${projectReportData.status eq '2' }">
+															<a href="${ctx}/projectcontentinfo/projectcontentinfo/cancelInvalidate?infoId=${projectReportData.id}&id=${id}&type=8" onclick="return confirmx('确认要撤回该工作内容报告吗?', this.href)"    class="op-btn op-btn-cancel"><i class="glyphicon glyphicon-share-alt"></i> 撤回</a>
+														</c:if>
+														<c:if test="${projectReportData.status eq '4'}">
+															<a href="javascript:void(0)" onclick="openDialogreAudit('修改报告', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=reportModify&dictType=${dictType}&id=${id}&parentIds=${parentIds}&projectReportData.id=${projectReportData.id}','95%','95%',false,'inputForm')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>
+															<a href="${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId=${projectReportData.id}&id=${id}&type=8" onclick="return confirmxRefresh('确认要删除该工作内容报告吗?', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>
+														</c:if>
+														<c:if test="${projectReportData.status eq '5'}">
+															<a href="javascript:void(0)" onclick="openDialogres('报告变更', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=reportChange&dictType=${dictType}&id=${id}&parentIds=${parentIds}&projectReportData.id=${projectReportData.id}','95%','95%',false,'inputForm')" class="op-btn op-btn-revert" ><i class="fa fa-edit"></i> 变更</a>
+															<a href="javascript:void(0)" onclick="openDialogres('报告作废', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=reportInvalid&dictType=${dictType}&id=${id}&parentIds=${parentIds}&projectReportData.id=${projectReportData.id}','95%','95%',false,'inputForm')" class="op-btn op-btn-invalid"><i class="fa fa-trash-o"></i> 作废</a>
+														</c:if>
+													</c:if>
+												</div>
+											</td>
+										</tr>
+									</c:forEach>
+								</c:when>
+								<c:otherwise>
+									<tr>
+										<td colspan="7">
+											暂无数据
+										</td>
+									</tr>
+								</c:otherwise>
+							</c:choose>
+							</tbody>
+						</table>
+					</div>
+				</div>
+			</div>
+	</div>
+</div>
+</body>
+</html>

+ 242 - 0
src/main/webapp/webpage/modules/projectcontentinfo/projectcontentinfoIndex.jsp

@@ -0,0 +1,242 @@
+	<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>用户管理</title>
+	<meta name="decorator" content="default"/>
+	<%@include file="/webpage/include/treeview.jsp" %>
+	<style type="text/css">
+	</style>
+	<script type="text/javascript">
+        function refresh(){//刷新
+            window.location="${ctx}/projectcontentinfo/projectcontentinfo/?project.id=${projectId}";
+        }
+        function refreshTrees(){
+            $.getJSON("${ctx}/projectcontentinfo/projectcontentinfo/treeData?projectId=${projectId}",function(data){
+                $.fn.zTree.init($("#ztree"), setting, data).expandAll(true);
+            });
+        }
+        window.onload = function() {
+            function allclose(){
+                $('#ztree_1_switch').removeClass('noline_open').addClass('noline_close');
+                $('#ztree_1_ico').removeClass('ico_open').addClass('ico_close');
+                $('#ztree_1_ul').css('display','none');
+			}
+			function allopen(){
+                $('#ztree_1_switch').removeClass('noline_close').addClass('noline_open');
+                $('#ztree_1_ico').removeClass('ico_close').addClass('ico_open');
+                $('#ztree_1_ul').css('display','block');
+                var secondLevel = $('#ztree_1_ul').children();
+                var lel2 = secondLevel.find('a.level1');
+                var arr2 = [];
+                for (var i = 0, length = lel2.length; i < length; i++) {
+                    arr2.push(lel2[i]);
+                    $(arr2[i].nextSibling).css('display','block');
+                    $(arr2[i]).find('span').eq(1).removeClass('noline_close').addClass('noline_open');
+                    $(arr2[i]).find('span').eq(2).removeClass('ico_close').addClass('ico_open');
+                }
+                var lel3 = $('a.level2');
+                var arr3 = [];
+                for (var i = 0, length = lel3.length; i < length; i++) {
+                    arr3.push(lel3[i]);
+                    $(arr3[i].nextSibling).css('display','block');
+                    $(arr3[i]).find('span').eq(1).removeClass('noline_close').addClass('noline_open');
+                    $(arr3[i]).find('span').eq(2).removeClass('ico_close').addClass('ico_open');
+                }
+                var lel4 = $('a.level3');
+                var arr4 = [];
+                for (var i = 0, length = lel4.length; i < length; i++) {
+                    arr4.push(lel4[i]);
+                    $(arr4[i].nextSibling).css('display','block');
+                    $(arr4[i]).find('span').eq(1).removeClass('noline_close').addClass('noline_open');
+                    $(arr4[i]).find('span').eq(2).removeClass('ico_close').addClass('ico_open');
+                }
+                var lel5 = $('a.level4');
+                var arr5 = [];
+                for (var i = 0, length = lel5.length; i < length; i++) {
+                    arr5.push(lel5[i]);
+                    $(arr5[i].nextSibling).css('display','block');
+                    $(arr5[i]).find('span').eq(1).removeClass('noline_close').addClass('noline_open');
+                    $(arr5[i]).find('span').eq(2).removeClass('ico_close').addClass('ico_open');
+                }
+			}
+            allopen();
+            var secondLevel = $('#ztree_1_ul').children();
+            var lel2 = secondLevel.find('a.level1');
+            var arr2 = [];
+            for (var i = 0, length = lel2.length; i < length; i++) {
+                arr2.push(lel2[i]);
+                $(arr2[i].nextSibling).css('display','none');
+                $(arr2[i]).find('span').eq(1).removeClass('noline_open').addClass('noline_close');
+                $(arr2[i]).find('span').eq(2).removeClass('ico_open').addClass('ico_close');
+            }
+			$('.selected').on('click',function () {
+				$('.sels').slideToggle();
+            });
+
+            $('.sels').on('click','li',function (e) {
+                var choosesel = $(e.target).text().trim();
+               $('.selected').text(choosesel);
+               $('.sels').slideUp();
+               if(choosesel=='全部收起'){
+                   allclose();
+			   } else if(choosesel=='2级'){
+                   allopen();
+				   var secondLevel = $('#ztree_1_ul').children();
+                   var lel2 = secondLevel.find('a.level1');
+                   var arr2 = [];
+                   for (var i = 0, length = lel2.length; i < length; i++) {
+                       arr2.push(lel2[i]);
+                       $(arr2[i].nextSibling).css('display','none');
+                       $(arr2[i]).find('span').eq(1).removeClass('noline_open').addClass('noline_close');
+                       $(arr2[i]).find('span').eq(2).removeClass('ico_open').addClass('ico_close');
+                   }
+			   }else if(choosesel=='3级'){
+                   allopen();
+                   var lel3 = $('a.level2');
+                   var arr3 = [];
+                   for (var i = 0, length = lel3.length; i < length; i++) {
+                       arr3.push(lel3[i]);
+                       $(arr3[i].nextSibling).css('display','none');
+                       $(arr3[i]).find('span').eq(1).removeClass('noline_open').addClass('noline_close');
+                       $(arr3[i]).find('span').eq(2).removeClass('ico_open').addClass('ico_close');
+                   }
+               }else if(choosesel=='4级'){
+                   allopen();
+                   var lel4 = $('a.level3');
+                   var arr4 = [];
+                   for (var i = 0, length = lel4.length; i < length; i++) {
+                       arr4.push(lel4[i]);
+                       $(arr4[i].nextSibling).css('display','none');
+                       $(arr4[i]).find('span').eq(1).removeClass('noline_open').addClass('noline_close');
+                       $(arr4[i]).find('span').eq(2).removeClass('ico_open').addClass('ico_close');
+                   }
+               }else if(choosesel=='5级'){
+                   allopen();
+                   var lel5 = $('a.level4');
+                   var arr5 = [];
+                   for (var i = 0, length = lel5.length; i < length; i++) {
+                       arr5.push(lel5[i]);
+                       $(arr5[i].nextSibling).css('display','none');
+                       $(arr5[i]).find('span').eq(1).removeClass('noline_open').addClass('noline_close');
+                       $(arr5[i]).find('span').eq(2).removeClass('ico_open').addClass('ico_close');
+                   }
+               }else if(choosesel=='全部展开'){
+                   allopen();
+               }
+
+
+            })
+        }
+	</script>
+	<style>
+		*{
+			box-sizing: border-box;
+		}
+		body{
+			background-color:transparent;
+			filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+			color:#ffffff;
+			background-color:rgba(255,255,255,0);
+			height:100%;
+		}
+		#left{
+			position: relative;
+		}
+		.newsel{
+			position: absolute;
+			top: 0;
+			right:3px;
+			background: #fff;
+			border: 1px solid #ccc;
+			width: 80px;
+			overflow: hidden;
+			text-align: center;
+			cursor: pointer;
+		}
+		.selected{
+			width: 100%;
+			height: 30px;
+			line-height: 30px;
+			background: #0f92fb;
+			color: #fff;
+		}
+		.sels{
+			display: none;
+		}
+		.sels li{
+			height: 30px;
+			line-height: 30px;
+			border-top: 1px solid #ccc;
+		}
+	</style>
+</head>
+<body class="gray-bg">
+
+<div class="wrapper wrapper-content full-width" id="divId">
+	<sys:message content="${message}"/>
+	<div id="content" class="pr full-height full-width">
+		<div id="left"  class="contentShadow fl contents">
+			<div><a href="${ctx}/projectcontentinfo/projectcontentinfo/list" class="nav-btn nav-btn-refresh" style="float: left">返回</a></div>
+			<div class="newsel">
+				<p class="selected">2级</p>
+				<ul class="sels">
+					<li>全部收起</li>
+					<li>2级</li>
+					<li>3级</li>
+					<li>4级</li>
+					<li>5级</li>
+					<li>全部展开</li>
+				</ul>
+			</div>
+			<br/>
+			<div class="ztreeContainer">
+				<div id="ztree" class="ztree leftBox-content"></div>
+			</div>
+		</div>
+		<div id="right"  class="fl contents">
+			<div class="layui-row contentShadow full-height tran-bg">
+				<iframe id="userContent" name="userContent" src="${ctx}/projectcontentinfo/projectcontentinfo/list?project.id=${projectId}&id=${id}&view=${view}" width="100%" height="100%" frameborder="0"></iframe>
+
+			</div>
+		</div>
+	</div>
+</div>
+<script type="text/javascript">
+    function addDiyDom(treeId, treeNode) {
+        var spaceWidth = 15;
+        var switchObj = $("#" + treeNode.tId + "_switch"),
+            icoObj = $("#" + treeNode.tId + "_ico");
+        switchObj.remove();
+        icoObj.before(switchObj);
+
+        if (treeNode.level > 0) {
+            var spaceStr = "<span style='display: inline-block;width:" + (spaceWidth * treeNode.level)+ "px'></span>";
+            switchObj.before(spaceStr);
+        }
+    }
+
+    var setting = {data:{simpleData:{enable:true,idKey:"id",pIdKey:"pId",rootPId:'0'}},
+        callback:{onClick:function(event, treeId, treeNode){
+            var id = treeNode.id == '0' ? '' :treeNode.id;
+            if (treeNode.level != '4'){
+                $('#userContent').attr("src","${ctx}/projectcontentinfo/projectcontentinfo/list?id="+id+"&parentIds="+treeNode.pIds);
+            }
+        }
+        }
+        ,view:{
+            showLine: false,
+            showIcon: false,
+            addDiyDom: addDiyDom
+        }
+    };
+
+    function refreshTree(){
+        $.getJSON("${ctx}/projectcontentinfo/projectcontentinfo/treeData?projectId=${projectId}",function(data){
+            $.fn.zTree.init($("#ztree"), setting, data).expandAll(true);
+        });
+    }
+    refreshTree();
+</script>
+</body>
+</html>

+ 0 - 0
src/main/webapp/webpage/modules/projectcontentinfo/projectcontentinfoList.jsp


Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików