Enford 5 gadi atpakaļ
vecāks
revīzija
527a0f8e30
49 mainītis faili ar 10589 papildinājumiem un 0 dzēšanām
  1. 112 0
      src/main/webapp/webpage/modules/workjobgrade/workJobGradeForm.jsp
  2. 127 0
      src/main/webapp/webpage/modules/workjobgrade/workJobGradeList.jsp
  3. 111 0
      src/main/webapp/webpage/modules/workjobgrade/workJobGradeView.jsp
  4. 252 0
      src/main/webapp/webpage/modules/workloan/workLoanAudit.jsp
  5. 256 0
      src/main/webapp/webpage/modules/workloan/workLoanForm.jsp
  6. 340 0
      src/main/webapp/webpage/modules/workloan/workLoanList.jsp
  7. 249 0
      src/main/webapp/webpage/modules/workloan/workLoanModify.jsp
  8. 271 0
      src/main/webapp/webpage/modules/workloan/workLoanView.jsp
  9. 20 0
      src/main/webapp/webpage/modules/workloan/workTrack.jsp
  10. 189 0
      src/main/webapp/webpage/modules/worklog/workLogForm.jsp
  11. 184 0
      src/main/webapp/webpage/modules/worklog/workLogFormView.jsp
  12. 166 0
      src/main/webapp/webpage/modules/worklog/workMeetFormView.jsp
  13. 65 0
      src/main/webapp/webpage/modules/workmeeting/workmeetinginfoForm.jsp
  14. 130 0
      src/main/webapp/webpage/modules/workmeeting/workmeetinginfoList.jsp
  15. 75 0
      src/main/webapp/webpage/modules/workmeeting/workmeetinguserForm.jsp
  16. 138 0
      src/main/webapp/webpage/modules/workmeeting/workmeetinguserList.jsp
  17. 228 0
      src/main/webapp/webpage/modules/workmonthlyplan/gridselect.jsp
  18. 554 0
      src/main/webapp/webpage/modules/workmonthlyplan/workMonthlyPlanFormAdd.jsp
  19. 430 0
      src/main/webapp/webpage/modules/workmonthlyplan/workMonthlyPlanFormEdit.jsp
  20. 202 0
      src/main/webapp/webpage/modules/workmonthlyplan/workMonthlyPlanFormView.jsp
  21. 319 0
      src/main/webapp/webpage/modules/workmonthlyplan/workMonthlyPlanList.jsp
  22. 105 0
      src/main/webapp/webpage/modules/workmonthlyplan/workMonthlyPlanQuote.jsp
  23. 210 0
      src/main/webapp/webpage/modules/workofficechange/workOfficeChangeAudit.jsp
  24. 487 0
      src/main/webapp/webpage/modules/workofficechange/workOfficeChangeForm.jsp
  25. 313 0
      src/main/webapp/webpage/modules/workofficechange/workOfficeChangeList.jsp
  26. 498 0
      src/main/webapp/webpage/modules/workofficechange/workOfficeChangeModifyApply.jsp
  27. 15 0
      src/main/webapp/webpage/modules/workofficechange/workOfficeChangeTask.jsp
  28. 77 0
      src/main/webapp/webpage/modules/workofficechange/workOfficeChangeUserForm.jsp
  29. 142 0
      src/main/webapp/webpage/modules/workofficechange/workOfficeChangeUserList.jsp
  30. 169 0
      src/main/webapp/webpage/modules/workofficechange/workOfficeChangeView.jsp
  31. 263 0
      src/main/webapp/webpage/modules/workout/workOutAudit.jsp
  32. 380 0
      src/main/webapp/webpage/modules/workout/workOutForm.jsp
  33. 330 0
      src/main/webapp/webpage/modules/workout/workOutList.jsp
  34. 375 0
      src/main/webapp/webpage/modules/workout/workOutModify.jsp
  35. 238 0
      src/main/webapp/webpage/modules/workout/workOutView.jsp
  36. 15 0
      src/main/webapp/webpage/modules/workout/workTrack.jsp
  37. 114 0
      src/main/webapp/webpage/modules/workoutsignin/workOutSignInForm.jsp
  38. 129 0
      src/main/webapp/webpage/modules/workoutsignin/workOutSignInList.jsp
  39. 243 0
      src/main/webapp/webpage/modules/workovertime/workOvertimeAudit.jsp
  40. 281 0
      src/main/webapp/webpage/modules/workovertime/workOvertimeForm.jsp
  41. 324 0
      src/main/webapp/webpage/modules/workovertime/workOvertimeList.jsp
  42. 278 0
      src/main/webapp/webpage/modules/workovertime/workOvertimeModify.jsp
  43. 218 0
      src/main/webapp/webpage/modules/workovertime/workOvertimeView.jsp
  44. 15 0
      src/main/webapp/webpage/modules/workovertime/workTrack.jsp
  45. 170 0
      src/main/webapp/webpage/modules/workovertimeform/workOvertimeAudit.jsp
  46. 269 0
      src/main/webapp/webpage/modules/workovertimeform/workOvertimeFormForm.jsp
  47. 221 0
      src/main/webapp/webpage/modules/workovertimeform/workOvertimeFormList.jsp
  48. 112 0
      src/main/webapp/webpage/modules/workovertimeform/workOvertimeHistoricList.jsp
  49. 180 0
      src/main/webapp/webpage/modules/workovertimeform/workOvertimeTodoList.jsp

+ 112 - 0
src/main/webapp/webpage/modules/workjobgrade/workJobGradeForm.jsp

@@ -0,0 +1,112 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>职级类型管理</title>
+	<meta name="decorator" content="default"/>
+    <script type="text/javascript">
+        var validateForm;
+        function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }
+
+            return false;
+        }
+        $(document).ready(function() {
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+        });
+
+        function setParentInfo(ids,names,nos,salarys){
+            var $no = $("#no");
+            var val = $no.val();
+            $no.val(nos[0]+val);
+        }
+
+        function formatNum(obj) {
+            var val = $(obj).val();
+            if(val==null||val==''|| isNaN(val))return;
+            var money = parseFloat((val + "").replace(/[^\d\.-]/g, "")).toFixed(2) + "";
+            var l = money.split(".")[0].split("").reverse(),
+                r = money.split(".")[1];
+            t = "";
+            for(i = 0; i < l.length; i ++ )
+            {
+                t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
+            }
+            $(obj).val(t.split("").reverse().join("") + "." + r);
+        }
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+		<form:form id="inputForm" modelAttribute="workJobGrade" action="${ctx}/workjobgrade/workJobGrade/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+            <div class="form-group layui-row first">
+                <div class="form-group-label"><h2>基本信息</h2></div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>职级名称:</label>
+                    <div class="layui-input-block">
+                        <form:input path="name" htmlEscape="false" 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">
+                        <form:input path="no" htmlEscape="false" class="form-control required layui-input digits"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">父 节 点:</label>
+                    <div class="layui-input-block with-icon">
+                        <sys:treeselectJobGrade id="parent" name="parent.id" value="${workJobGrade.parent.id}" labelName="parent.name" labelValue="${workJobGrade.parent.name}"
+                                              title="职级类型" url="/workjobgrade/workJobGrade/treeData" extId="${workJobGrade.id}" cssClass="form-control layui-input" allowClear="true"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">末级标记:</label>
+                    <div class="layui-input-block">
+                        <form:input path="isLeaf" 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">
+                        <input name="pay" htmlEscape="false" onchange="formatNum(this)" value="<fmt:formatNumber pattern="#,##0.00#" value="${workJobGrade.pay}"/>" class="form-control layui-input required number"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">禁用状态:</label>
+                    <div class="layui-input-block">
+                        <form:input path="state" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12 with-textarea">
+                    <label class="layui-form-label">职级描述:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="remarks" htmlEscape="false"  rows="3" style="resize:none;" class="form-control"/>
+                    </div>
+                </div>
+            </div>
+	    </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 127 - 0
src/main/webapp/webpage/modules/workjobgrade/workJobGradeList.jsp

@@ -0,0 +1,127 @@
+<%@ 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/treetable.jsp" %>
+    <script type="text/javascript">
+        $(document).ready(function() {
+            $("#treeTable").treeTable({expandLevel : 5},{ expandable: true });
+        });
+    </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="workJobGrade" action="${ctx}/workjobgrade/workJobGrade/" method="post" class="form-inline">
+                <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="name" htmlEscape="false" class=" form-control layui-input"></form:input>
+                        </div>
+                    </div>
+                    <div class="layui-item query athird">
+                        <label class="layui-form-label">类型编号:</label>
+                        <div class="layui-input-block">
+                            <form:input path="no" htmlEscape="false" class=" form-control layui-input"></form:input>
+                        </div>
+                    </div>
+                    <div class="layui-item athird">
+                        <div class="input-group">
+                            <button id="searchReset" style="margin-right: 10px;" 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="full-width fl">
+            <div class="contentShadow layui-form contentDetails">
+                <div class="nav-btns">
+                    <shiro:hasPermission name="workjobgrade:workJobGrade:add">
+                        <table:addRow url="${ctx}/workjobgrade/workJobGrade/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 id="treeTable" class="table table-bordered table-hover list-table">
+                    <thead>
+                    <tr>
+                        <th width="20%">类型编号</th>
+                        <th width="20%">职级名称</th>
+                        <th width="20%">父节点</th>
+                        <th width="20%">禁用状态</th>
+                        <th width="20%">操作</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <c:forEach items="${list}" var="workJobGrade">
+                        <tr id="${workJobGrade.id}" pid="${workJobGrade.parent.id}">
+                            <td>
+                                    ${workJobGrade.no}
+                            </td>
+                            <td style="text-align: center">
+                                <a  href="#" onclick="openDialogView('查看职级类型', '${ctx}/workjobgrade/workJobGrade/view?id=${workJobGrade.id}','95%', '95%')">
+                                        ${workJobGrade.name}
+                                </a>
+                            </td>
+                            <td style="text-align: center">
+                                    ${workJobGrade.parent.name}
+                            </td>
+                            <td style="text-align: center">
+                                    ${workJobGrade.state}
+                            </td>
+                            <td class="op-td text-center">
+                                <div class="op-btn-box">
+                                        <a href="#" onclick="openDialogView('查看职级类型', '${ctx}/workjobgrade/workJobGrade/view?id=${workJobGrade.id}','95%', '95%')" class="op-btn op-btn-view" ><i class="fa fa-search-plus"></i> 查看</a>
+                                    <shiro:hasPermission name="workjobgrade:workJobGrade:edit">
+                                        <a href="#" onclick="openDialog('修改职级类型', '${ctx}/workjobgrade/workJobGrade/form?id=${workJobGrade.id}','95%', '95%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+                                        <c:if test="${workJobGrade.parentId != '0'}">
+                                            <c:if test="${workJobGrade.state eq '启用'}">
+                                                <a href="javascript:location.href='${ctx}/workjobgrade/workJobGrade/change?id=${workJobGrade.id}&state='+encodeURIComponent('${workJobGrade.state}');" onclick="return confirmx('确认要移除该职级类型吗?', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 移除</a>
+                                            </c:if>
+                                            <c:if test="${workJobGrade.state eq '禁用'}">
+                                                <a href="javascript:location.href='${ctx}/workjobgrade/workJobGrade/change?id=${workJobGrade.id}&state='+encodeURIComponent('${workJobGrade.state}');" onclick="return confirmx('确认要恢复该职级类型吗?', this.href)"   class="op-btn op-btn-submit"><i class="fa fa-undo"></i> 恢复</a>
+                                            </c:if>
+                                        </c:if>
+                                    </shiro:hasPermission>
+                                </div>
+                            </td>
+                        </tr>
+                    </c:forEach>
+                    </tbody>
+                </table>
+
+                <!-- 分页代码 -->
+                <%--<table:page page="${page}"></table:page>--%>
+
+            </div>
+        </div>
+    </div>
+</div>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+</body>
+</html>

+ 111 - 0
src/main/webapp/webpage/modules/workjobgrade/workJobGradeView.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 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);
+                    }
+                }
+            });
+        });
+
+        function setParentInfo(ids,names,nos,salarys){
+            var $no = $("#no");
+            var val = $no.val();
+            $no.val(nos[0]+val);
+        }
+
+        function formatNum(obj) {
+            var val = $(obj).val();
+            if(val==null||val==''|| isNaN(val))return;
+            var money = parseFloat((val + "").replace(/[^\d\.-]/g, "")).toFixed(2) + "";
+            var l = money.split(".")[0].split("").reverse(),
+                r = money.split(".")[1];
+            t = "";
+            for(i = 0; i < l.length; i ++ )
+            {
+                t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
+            }
+            $(obj).val(t.split("").reverse().join("") + "." + r);
+        }
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+    <div class="container view-form">
+		<form:form id="inputForm" modelAttribute="workJobGrade" action="${ctx}/workjobgrade/workJobGrade/save" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+            <div class="form-group layui-row first">
+                <div class="form-group-label"><h2>基本信息</h2></div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>职级名称:</label>
+                    <div class="layui-input-block">
+                        <form:input path="name" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>类型编号:</label>
+                    <div class="layui-input-block">
+                        <form:input path="no" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">父 节 点:</label>
+                    <div class="layui-input-block">
+                        <input  htmlEscape="false" readonly="true" readonly="true" value="${workJobGrade.parent.name}" 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="isLeaf" 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">
+                        <input name="pay" htmlEscape="false" readonly onchange="formatNum(this)" value="<fmt:formatNumber pattern="#,##0.00#" value="${workJobGrade.pay}"/>" class="form-control layui-input required number"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">禁用状态:</label>
+                    <div class="layui-input-block">
+                        <form:input path="state" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12 with-textarea">
+                    <label class="layui-form-label">职级描述:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="remarks" htmlEscape="false" readonly="true" rows="3" style="resize:none;" class="form-control"/>
+                    </div>
+                </div>
+            </div>
+	    </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 252 - 0
src/main/webapp/webpage/modules/workloan/workLoanAudit.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"/>
+	<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);
+                    }
+                }
+            });
+
+
+            $("input[name='type']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                console.log(radioVal+"----------radioVal");
+                if(radioVal == 2){
+                    $("#projectRecordsName").attr("class","form-control layui-input required");
+                    //  $("#bank").addClass("required");
+                    $(".type").show();
+                }else{
+                    $("#projectRecordsName").attr("class","form-control layui-input");
+                    $(".type").hide();
+                    // $("#bankNo").removeClass("required");
+                }
+            });
+            if("${workLoan.type}" == "2"){
+                $("#ext1").iCheck('check');
+                $("#projectRecordsName").attr("class","form-control layui-input required");
+                $(".type").show();
+            }else{
+                $("#ext").iCheck('check');
+                $("#projectRecordsName").attr("class","form-control layui-input");
+                $(".type").hide();
+            }
+        });
+
+        /*function setValuesss(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workcontractrecord/workContractRecord/getPNumberr',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#recordNum").val(d.recordNum);
+                    $("#contractNum").val(d.contractNum);
+                    $("#cName").val(d.cName);
+                    $("#contractType").val(d.contractType);
+                }
+            })
+        }*/
+
+
+        function selectUserInfo(id) {
+            $.ajax({
+                type:'post',
+                data:{
+                    "id":id
+                },
+                url:'${ctx}/workregularapply/workRegularApply/userInfo',
+                success:function(data){
+                    setUserInfo(data);
+                }
+            })
+        }
+        function setUserInfo(obj){
+            $("#officeName").val(obj.office.name);
+            $("#bankCard").val(obj.bankCard);
+            //借款人所有未还借款
+        }
+        function setValue(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workloan/workLoan/getProjectInfo',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#contractPrice").val(d.contractPrice);
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+<div class="single-form view-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workLoan" action="${ctx}/workloan/workLoan/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}"/>
+			<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"><span class="require-item">*</span>借款人:</label>
+						<div class="layui-input-block with-icon">
+							<div class="input-group">
+								<input htmlEscape="false"   readonly="true" class="form-control layui-input" value="${workLoan.workStaffBasicInfo.name}"/>
+							</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">
+						<div class="input-group">
+							<input  htmlEscape="false"   readonly="true" class="form-control layui-input" value="${workLoan.num}"/>
+							<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workLoan.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workLoan.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<form:input id="officeName" path="workStaffBasicInfo.office.name" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行卡号:</label>
+					<div class="layui-input-block">
+						<form:input id="bankCard" path="workStaffBasicInfo.bankCard" 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">
+						<input  htmlEscape="false"   readonly="true" class="form-control layui-input" value="${fns:getDictLabel(workLoan.type, 'loan_type','')}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 type">
+					<label class="layui-form-label">借款项目:</label>
+					<div class="layui-input-block with-icon">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="${workLoan.projectRecords.projectName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 type">
+					<label class="layui-form-label">合同金额:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="<fmt:formatNumber value="${workLoan.projectRecords.workContractInfo.contractPrice}" pattern="#,#0.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 type">
+					<label class="layui-form-label double-line">合同未还款累计:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="<fmt:formatNumber value="${workLoan.contractNotRepay}" pattern="#,#0.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>借款金额:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="<fmt:formatNumber value="${workLoan.money}" pattern="#,#0.00"/>"/>
+					</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:formatNumber value="${workLoan.notRepay}" pattern="#,#0.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">申请人:</label>
+					<div class="layui-input-block">
+						<form:input path="createBy.name" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>借款日期:</label>
+					<div class="layui-input-block">
+						<input  type="text" readonly="true"   class="laydate-icondate form-control layer-date layui-input laydate-icon required"
+							   value="<fmt:formatDate value="${workLoan.loanDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+					</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:formatNumber value="${workLoan.repay}" pattern="#,#0.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">还款状态:</label>
+					<div class="layui-input-block">
+						<input id="repayState" htmlEscape="false" readonly="true" class="form-control  layui-input" value="${fns:getDictLabel(workLoan.repayState, 'repay_state','')}"/>
+					</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 ">${workLoan.remarks}</textarea>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row lw8">
+				<div class="form-group-label"><h2>审批意见</h2></div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">审批意见:</label>
+					<div class="layui-input-block">
+						<form:textarea path="act.comment" class="form-control" rows="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="${workLoan.act.procInsId}"/>
+					<act:histoicFlow procInsId="${workLoan.act.procInsId}"/>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 256 - 0
src/main/webapp/webpage/modules/workloan/workLoanForm.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"/>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(obj == 2){
+                    $("#inputForm").attr("action","${ctx}/workloan/workLoan/store");
+                }else{
+                    $("#inputForm").attr("action","${ctx}/workloan/workLoan/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);
+                    }
+                }
+            });
+
+             laydate.render({
+				elem: '#loanDate',
+                event: 'focus',
+		   		type : 'date'
+            	});
+
+            $("input[name='type']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                console.log(radioVal+"----------radioVal");
+                if(radioVal == 2){
+                    $("#projectRecordsName").attr("class","form-control layui-input required");
+                    $(".type").show();
+                    //  $("#bank").addClass("required");
+                }else{
+                    $("#projectRecordsName").attr("class","form-control layui-input");
+                    $(".type").hide();
+                    // $("#bankNo").removeClass("required");
+                }
+            });
+            if("${workLoan.type}" == "2"){
+                $("#ext1").iCheck('check');
+                $("#projectRecordsName").attr("class","form-control layui-input required");
+                $(".type").show();
+            }else{
+                $("#ext").iCheck('check');
+                $("#projectRecordsName").attr("class","form-control layui-input");
+                $(".type").hide();
+            }
+        });
+
+        /*function setValuesss(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workcontractrecord/workContractRecord/getPNumberr',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#recordNum").val(d.recordNum);
+                    $("#contractNum").val(d.contractNum);
+                    $("#cName").val(d.cName);
+                    $("#contractType").val(d.contractType);
+                }
+            })
+        }*/
+
+
+        function selectUserInfo(id) {
+            $.ajax({
+                type:'post',
+                data:{
+                    "id":id
+                },
+                url:'${ctx}/workregularapply/workRegularApply/userInfo',
+                success:function(data){
+                    setUserInfo(data);
+                }
+            })
+        }
+        function setUserInfo(obj){
+            $("#officeName").val(obj.office.name);
+            $("#bankCard").val(obj.bankCard);
+            $("#projectRecordsId").val("");
+            $("#projectRecordsName").val("");
+            $("#contractPrice").val("");
+            $("#contractNotRepay").val("");
+
+            //借款人所有未还借款
+            $.ajax({
+                type:'post',
+                data:{
+                    "id":obj.id
+                },
+                url:'${ctx}/workloan/workLoan/userInfo',
+                success:function(data){
+                    $("#notRepay").val(data.notRepay);
+                }
+            })
+        }
+        function setValue(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workloan/workLoan/getProjectInfo',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#contractPrice").val(d.contractPrice);
+                    $("#contractNotRepay").val(d.contractNotRepay);
+
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workLoan" action="${ctx}/workloan/workLoan/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+
+			<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"><span class="require-item">*</span>借款人:</label>
+						<div class="layui-input-block with-icon">
+							<div class="input-group">
+								<sys:gridSelectUserRship id="sId" name="workStaffBasicInfo.id" value="${workLoan.workStaffBasicInfo.id}" labelName="workStaffBasicInfo.name" labelValue="${workLoan.workStaffBasicInfo.name}"
+														 title="用户" url="${ctx}/sys/office/gridSelectUser" cssClass="form-control required layui-input" isAll="true" type="2"  isSingle="true"></sys:gridSelectUserRship>
+							</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">
+						<div class="input-group">
+							<form:input id="num" path="num" htmlEscape="false"   readonly="true" class="form-control layui-input"/>
+							<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workLoan.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workLoan.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<form:input id="officeName" path="workStaffBasicInfo.office.name" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行卡号:</label>
+					<div class="layui-input-block">
+						<form:input id="bankCard" path="workStaffBasicInfo.bankCard" 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">
+						<input type="radio" class="i-checks" name="type" checked id="ext" value="1">
+						<label for="ext">行政借款</label>
+						<input type="radio" class="i-checks" name="type" id="ext1" value="2">
+						<label for="ext1">项目借款</label>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 type">
+					<label class="layui-form-label">借款项目:</label>
+					<div class="layui-input-block with-icon">
+						<sys:gridloanproject url="${ctx}/workloan/workLoan/selectproject" id="projectRecords" name="projectRecords.id"  value="${workLoan.projectRecords.id}"  title="选择项目" labelName="projectRecords.projectName"
+												   labelValue="${workLoan.projectRecords.projectName}" cssClass="form-control layui-input" fieldLabels="工程" fieldKeys="projectName" searchLabel="工程名称" searchKey="projectName" ></sys:gridloanproject>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 type">
+					<label class="layui-form-label">合同金额:</label>
+					<div class="layui-input-block">
+						<form:input id="contractPrice" path="projectRecords.workContractInfo.contractPrice" htmlEscape="false"  readonly="true"  class="form-control number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 type">
+					<label class="layui-form-label double-line">合同未还款累计:</label>
+					<div class="layui-input-block">
+						<form:input id="contractNotRepay" path="contractNotRepay" htmlEscape="false"  readonly="true"  class="form-control number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>借款金额:</label>
+					<div class="layui-input-block">
+						<form:input path="money" htmlEscape="false"    class="form-control number required 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="notRepay" htmlEscape="false"  readonly="true"  class="form-control number 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="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"><span class="require-item">*</span>借款日期:</label>
+					<div class="layui-input-block">
+						<input id="loanDate" name="loanDate" type="text" class="laydate-icondate form-control layer-date layui-input laydate-icon required"
+							   value="<fmt:formatDate value="${workLoan.loanDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">还款金额:</label>
+					<div class="layui-input-block">
+						<form:input path="repay" htmlEscape="false"  readonly="true"  class="form-control number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">还款状态:</label>
+					<div class="layui-input-block">
+						<input id="repayState" htmlEscape="false" readonly="true" class="form-control  layui-input" value="${fns:getDictLabel(workLoan.repayState, 'repay_state','')}"/>
+						<input name="repayState"  htmlEscape="false" type="hidden" class="form-control  layui-input" value="${workLoan.repayState}"/>
+					</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 page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 340 - 0
src/main/webapp/webpage/modules/workloan/workLoanList.jsp

@@ -0,0 +1,340 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>借款管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        $(document).ready(function() {
+            //搜索框收放
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow1);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow1);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#beginContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+
+
+            laydate.render({
+                elem: '#endContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+        });
+        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
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        top.layer.close(index);//关闭对话框。
+//                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                    return false;
+                },
+                btn3: function(index){
+                }
+            });
+        }
+        function openDialogreplay(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: false, //开启最大化最小化按钮
+                skin: 'two-btns',
+                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){
+                }
+            });
+        }
+	</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="workLoan" action="${ctx}/workloan/workLoan/" method="post" class="form-inline">
+					<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+					<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+					<%--<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->--%>
+
+					<div class="commonQuery lw8">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">借款人:</label>
+							<div class="layui-input-block">
+								<form:input path="workStaffBasicInfo.name" htmlEscape="false" class="form-control  layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">借款日期:</label>
+							<div class="layui-input-block">
+								<input id="beginContractDate" name="beginContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workLoan.beginContractDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+								<span class="group-sep">-</span>
+								<input id="endContractDate" name="endContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workLoan.endContractDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+							</div>
+						</div>
+						<div class="layui-item athird">
+							<div class="input-group">
+								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+								<button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
+								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" 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="workStaffBasicInfo.office.name" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">借款项目:</label>
+							<div class="layui-input-block">
+								<form:input path="projectRecords.projectName" 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:select path="type"  class="form-control simple-select">
+									<form:option value="" label=""/>
+									<form:options items="${fns:getDictList('loan_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+								</form:select>
+							</div>
+							<div style="clear:both;"></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 style="clear:both;"></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="workloan:workLoan:add">
+						<button class="nav-btn nav-btn-add" title="借款" onclick="openDialogre('借款','${ctx}/workloan/workLoan/form','95%','95%')"><i class="fa fa-plus"></i>&nbsp;添加</button>
+					</shiro:hasPermission>
+
+					<button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i>&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}/workloan/workLoan/form?id=" + d.id + "&tabId=1','95%','95%')\">" +
+                        "<span title=" + d.num + ">" + d.num + "</span></a>";
+                    return xml;
+                }}
+                ,{field:'staffName',align:'center', title: '借款人',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.staffName +"'>" + d.staffName + "</span>";
+                }}
+                ,{field:'staffOffice',align:'center', title: '所属部门',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.staffOffice +"'>" + d.staffOffice + "</span>";
+                }}
+                ,{field:'type',align:'center', title: '借款类型',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.type +"'>" + d.type + "</span>";
+                }}
+                ,{field:'project', align:'center',title: '借款项目',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.project +"'>" + d.project + "</span>";
+                }}
+                ,{field:'money', align:'center',title: '借款金额',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.money +"'>" + d.money + "</span>";
+                }}
+                ,{field:'loanDate', align:'center',sort:true,title: '借款日期',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.loanDate +"'>" + d.loanDate + "</span>";
+                }}
+                ,{field:'repayState',align:'center', title: '还款状态', minWidth:160}
+                ,{field:'status',align:'center', title: '状态', width:70,templet:function(d){
+                    var st = getAuditState(d.status);
+                    if(st.action)
+                        var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workloan/workLoan/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                    else
+                        var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                    return xml;
+                }}
+                // ,{fixed: 'right',align:'center', toolbar: '#op',title:"操作"}
+                ,{field:'op',align:'center',title:"操作",minWidth:160,templet:function(d){
+                    ////对操作进行初始化
+                    var xml = "";
+                    if(d.repay != undefined && d.repay == "1")
+                        xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('还款', '${ctx}/workrepay/workRepay/form?loanId="+ d.id + "','95%','95%')\"   class=\"op-btn op-btn-revert\"><i class=\"fa fa-edit\"></i>还款</a>";
+                    if(d.cancancel != undefined && d.cancancel == "1")
+                        xml += "<a href=\"${ctx}/workloan/workLoan/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}/workloan/workLoan/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}/workloan/workLoan/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}/workloan/workLoan/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}/workloan/workLoan/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="workLoan" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${workLoan.id}"
+                    ,"num":"${workLoan.num}"
+                    ,"staffName":"${workLoan.workStaffBasicInfo.name}"
+                    ,"staffOffice":"${workLoan.workStaffBasicInfo.office.name}"
+                    ,"type":"${fns:getDictLabel(workLoan.type, 'loan_type', '')}"
+                    ,"project":"${workLoan.projectRecords.projectName}"
+                    ,"money":"<fmt:formatNumber value="${workLoan.money}" pattern="#,#0.00"/>"
+                    ,"loanDate":"<fmt:formatDate value="${workLoan.loanDate}" pattern="yyyy-MM-dd"/>"
+                    ,"repayState":"${fns:getDictLabel(workLoan.repayState, 'repay_state', '')}"
+                    ,"status":"${workLoan.status}"
+                    <c:if test="${fns:getUser().id == workLoan.createBy.id}">
+                    <c:if test="${workLoan.status == '2' }">,"cancancel":"1"</c:if>
+                    <c:if test="${workLoan.status == '5' && workLoan.repayState != '1'}">,"repay":"1"</c:if>
+                    <shiro:hasPermission name="workloan:workLoan:edit"><c:choose>
+                    <c:when test="${workLoan.status == '1' }">,"canedit1":"1"</c:when>
+                    <c:when test="${workLoan.status == '4'}">,"canedit2":"1"</c:when>
+                    <c:when test="${workLoan.status == '3'}">,"canedit3":"1"</c:when>
+                    </c:choose></shiro:hasPermission>
+                    <shiro:hasPermission name="workloan:workLoan:del"><c:choose>
+                    <c:when test="${(workLoan.status == '1' or workLoan.status == '3' or workLoan.status == '4')}">,"candelete":"1"</c:when>
+                    </c:choose></shiro:hasPermission>
+                    </c:if>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+
+    resizeListTable();
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+</body>
+</html>

+ 249 - 0
src/main/webapp/webpage/modules/workloan/workLoanModify.jsp

@@ -0,0 +1,249 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>借款管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(obj == 2){
+                    $("#flag").val("no");
+                }else{
+                    $("#flag").val("yes");
+                }
+                $("#inputForm").submit();
+                return true;
+            }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);
+                    }
+                }
+            });
+
+             laydate.render({
+				elem: '#loanDate',
+                event: 'focus',
+		   		type : 'date'
+            	});
+
+            $("input[name='type']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                console.log(radioVal+"----------radioVal");
+                if(radioVal == 2){
+                    $("#projectRecordsName").attr("class","form-control layui-input required");
+                    $(".type").show();
+                    //  $("#bank").addClass("required");
+                }else{
+                    $("#projectRecordsName").attr("class","form-control layui-input");
+                    $(".type").hide();
+                    // $("#bankNo").removeClass("required");
+                }
+            });
+            if("${workLoan.type}" == "2"){
+                $("#ext1").iCheck('check');
+                $("#projectRecordsName").attr("class","form-control layui-input required");
+                $(".type").show();
+            }else{
+                $("#ext").iCheck('check');
+                $("#projectRecordsName").attr("class","form-control layui-input");
+                $(".type").hide();
+            }
+        });
+
+        /*function setValuesss(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workcontractrecord/workContractRecord/getPNumberr',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#recordNum").val(d.recordNum);
+                    $("#contractNum").val(d.contractNum);
+                    $("#cName").val(d.cName);
+                    $("#contractType").val(d.contractType);
+                }
+            })
+        }*/
+
+
+        function selectUserInfo(id) {
+            $.ajax({
+                type:'post',
+                data:{
+                    "id":id
+                },
+                url:'${ctx}/workregularapply/workRegularApply/userInfo',
+                success:function(data){
+                    setUserInfo(data);
+                }
+            })
+        }
+        function setUserInfo(obj){
+            $("#officeName").val(obj.office.name);
+            $("#bankCard").val(obj.bankCard);
+            $("#projectRecordsId").val("");
+            $("#projectRecordsName").val("");
+            $("#contractPrice").val("");
+            $("#contractNotRepay").val("");
+            //借款人所有未还借款
+        }
+        function setValue(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workloan/workLoan/getProjectInfo',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#contractPrice").val(d.contractPrice);
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workLoan" action="${ctx}/workloan/workLoan/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 lw8">
+				<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">
+							<div class="input-group">
+								<sys:gridSelectUserRship id="sId" name="workStaffBasicInfo.id" value="${workLoan.workStaffBasicInfo.id}" labelName="workStaffBasicInfo.name" labelValue="${workLoan.workStaffBasicInfo.name}"
+														 title="用户" url="${ctx}/sys/office/gridSelectUser" cssClass="form-control required layui-input" isAll="true" type="2"  isSingle="true"></sys:gridSelectUserRship>
+							</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">
+						<div class="input-group">
+							<form:input id="num" path="num" htmlEscape="false"   readonly="true" class="form-control layui-input"/>
+							<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workLoan.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workLoan.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<form:input id="officeName" path="workStaffBasicInfo.office.name" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行卡号:</label>
+					<div class="layui-input-block">
+						<form:input id="bankCard" path="workStaffBasicInfo.bankCard" 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">
+						<input type="radio" class="i-checks" name="type" checked id="ext" value="1">
+						<label for="ext">行政借款</label>
+						<input type="radio" class="i-checks" name="type" id="ext1" value="2">
+						<label for="ext1">项目借款</label>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 type">
+					<label class="layui-form-label">借款项目:</label>
+					<div class="layui-input-block with-icon">
+						<sys:gridloanproject url="${ctx}/workloan/workLoan/selectproject" id="projectRecords" name="projectRecords.id"  value="${workLoan.projectRecords.id}"  title="选择项目" labelName="projectRecords.projectName"
+												   labelValue="${workLoan.projectRecords.projectName}" cssClass="form-control layui-input" fieldLabels="工程" fieldKeys="projectName" searchLabel="工程名称" searchKey="projectName" ></sys:gridloanproject>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 type">
+					<label class="layui-form-label">合同金额:</label>
+					<div class="layui-input-block">
+						<form:input id="contractPrice" path="projectRecords.workContractInfo.contractPrice" htmlEscape="false"  readonly="true"  class="form-control number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 type">
+					<label class="layui-form-label double-line">合同未还款累计:</label>
+					<div class="layui-input-block">
+						<form:input id="contractNotRepay" path="contractNotRepay" htmlEscape="false"  readonly="true"  class="form-control number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>借款金额:</label>
+					<div class="layui-input-block">
+						<form:input path="money" htmlEscape="false"    class="form-control number required 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="notRepay" htmlEscape="false"  readonly="true"  class="form-control number 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="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"><span class="require-item">*</span>借款日期:</label>
+					<div class="layui-input-block">
+						<input id="loanDate" name="loanDate" type="text" class="laydate-icondate form-control layer-date layui-input laydate-icon required"
+							   value="<fmt:formatDate value="${workLoan.loanDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">还款金额:</label>
+					<div class="layui-input-block">
+						<form:input path="repay" htmlEscape="false"  readonly="true"  class="form-control number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">还款状态:</label>
+					<div class="layui-input-block">
+						<input id="repayState" htmlEscape="false" readonly="true" class="form-control  layui-input" value="${fns:getDictLabel(workLoan.repayState, 'repay_state','')}"/>
+						<input name="repayState"  htmlEscape="false" type="hidden" class="form-control  layui-input" value="${workLoan.repayState}"/>
+					</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 page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 271 - 0
src/main/webapp/webpage/modules/workloan/workLoanView.jsp

@@ -0,0 +1,271 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>借款管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(obj == 1){
+                    $('#flag').val('yes');
+                }else{
+                    $('#flag').val('no');
+                }
+                $("#inputForm").submit();
+                return true;
+            }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);
+                    }
+                }
+            });
+
+
+            $("input[name='type']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                console.log(radioVal+"----------radioVal");
+                if(radioVal == 2){
+                    $("#projectRecordsName").attr("class","form-control layui-input required");
+                    $(".type").show();
+                    //  $("#bank").addClass("required");
+                }else{
+                    $("#projectRecordsName").attr("class","form-control layui-input");
+                    // $("#bankNo").removeClass("required");
+                    $(".type").hide();
+                }
+            });
+            if("${workLoan.type}" == "2"){
+                $("#ext1").iCheck('check');
+                $("#projectRecordsName").attr("class","form-control layui-input required");
+                $(".type").show();
+            }else{
+                $("#ext").iCheck('check');
+                $("#projectRecordsName").attr("class","form-control layui-input");
+                $(".type").hide();
+            }
+        });
+
+        /*function setValuesss(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workcontractrecord/workContractRecord/getPNumberr',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#recordNum").val(d.recordNum);
+                    $("#contractNum").val(d.contractNum);
+                    $("#cName").val(d.cName);
+                    $("#contractType").val(d.contractType);
+                }
+            })
+        }*/
+
+
+        function selectUserInfo(id) {
+            $.ajax({
+                type:'post',
+                data:{
+                    "id":id
+                },
+                url:'${ctx}/workregularapply/workRegularApply/userInfo',
+                success:function(data){
+                    setUserInfo(data);
+                }
+            })
+        }
+        function setUserInfo(obj){
+            $("#officeName").val(obj.office.name);
+            $("#bankCard").val(obj.bankCard);
+            //借款人所有未还借款
+        }
+        function setValue(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workloan/workLoan/getProjectInfo',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#contractPrice").val(d.contractPrice);
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+<div class="single-form view-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workLoan" action="${ctx}/workloan/workLoan/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}"/>
+			<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"><span class="require-item">*</span>借款人:</label>
+						<div class="layui-input-block with-icon">
+							<div class="input-group">
+								<input htmlEscape="false"   readonly="true" class="form-control layui-input" value="${workLoan.workStaffBasicInfo.name}"/>
+							</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">
+						<div class="input-group">
+							<input  htmlEscape="false"   readonly="true" class="form-control layui-input" value="${workLoan.num}"/>
+							<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workLoan.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workLoan.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<form:input id="officeName" path="workStaffBasicInfo.office.name" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行卡号:</label>
+					<div class="layui-input-block">
+						<form:input id="bankCard" path="workStaffBasicInfo.bankCard" 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">
+						<input  htmlEscape="false"   readonly="true" class="form-control layui-input" value="${fns:getDictLabel(workLoan.type, 'loan_type','')}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 type">
+					<label class="layui-form-label">借款项目:</label>
+					<div class="layui-input-block with-icon">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="${workLoan.projectRecords.projectName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 type">
+					<label class="layui-form-label">合同金额:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="<fmt:formatNumber value="${workLoan.projectRecords.workContractInfo.contractPrice}" pattern="#,#0.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 type">
+					<label class="layui-form-label double-line">合同未还款累计:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="<fmt:formatNumber value="${workLoan.contractNotRepay}" pattern="#,#0.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>借款金额:</label>
+					<div class="layui-input-block">
+						<input  htmlEscape="false" readonly="true" class="form-control layui-input" value="<fmt:formatNumber value="${workLoan.money}" pattern="#,#0.00"/>"/>
+					</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:formatNumber value="${workLoan.notRepay}" pattern="#,#0.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">申请人:</label>
+					<div class="layui-input-block">
+						<form:input path="createBy.name" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>借款日期:</label>
+					<div class="layui-input-block">
+						<input  type="text" readonly="true"   class="laydate-icondate form-control layer-date layui-input laydate-icon required"
+							   value="<fmt:formatDate value="${workLoan.loanDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+					</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:formatNumber value="${workLoan.repay}" pattern="#,#0.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">还款状态:</label>
+					<div class="layui-input-block">
+						<input id="repayState" htmlEscape="false" readonly="true" class="form-control  layui-input" value="${fns:getDictLabel(workLoan.repayState, 'repay_state','')}"/>
+					</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 ">${workLoan.remarks}</textarea>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>发票明细</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container">
+					<table id="contentTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+							<th width="30%">还款来源</th>
+							<th width="18%">还款日期</th>
+							<th width="18%">还款金额</th>
+							<th width="18%">报销编号</th>
+						</tr>
+						</thead>
+						<tbody id="workAccountList">
+						<c:if test="${not empty workLoan.workRepays}">
+							<c:forEach items="${workLoan.workRepays}" var="workRepay" varStatus="index">
+								<tr id="workRepayList${index.index}">
+									<td title="${fns:getDictLabel(workRepay.source, 'repay_source','')}">
+											${fns:getDictLabel(workRepay.source, 'repay_source','')}
+									</td>
+									<td title="<fmt:formatDate value="${workRepay.repayDate}" pattern="yyyy-MM-dd"/>">
+										<fmt:formatDate value="${workRepay.repayDate}" pattern="yyyy-MM-dd"/>
+									</td>
+
+									<td title="<fmt:formatNumber value="${workRepay.money}" pattern="#,#0.00"/>">
+										<fmt:formatNumber value="${workRepay.money}" pattern="#,#0.00"/>
+									</td>
+									<td title="">
+											${workRepay.workReimbursement.number}
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 20 - 0
src/main/webapp/webpage/modules/workloan/workTrack.jsp

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

+ 189 - 0
src/main/webapp/webpage/modules/worklog/workLogForm.jsp

@@ -0,0 +1,189 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>日志模板</title>
+	<meta name="decorator" content="default"/>
+	 <link href="${ctxStatic}/summernotenew/summernote.css" rel="stylesheet">
+	 <link href="${ctxStatic}/summernotenew/summernote-bs3.css" rel="stylesheet">
+	<script src="${ctxStatic}/summernotenew/summernote.min.js"></script>
+	<script src="${ctxStatic}/summernotenew/lang/summernote-zh-CN.js"></script>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			if("${workLog.logType}" == "1"){
+				$("#logType1").iCheck('check')
+			}else if("${workLog.logType}" == "2"){
+				$("#logType2").iCheck('check')
+			}else if("${workLog.logType}" == "3"){
+				$("#logType3").iCheck('check')
+			}else if("${workLog.logType}" == "4"){
+				$("#logType5").iCheck('check')
+			}else if("${workLog.logType}" == "5"){
+				$("#logType5").iCheck('check')
+			}
+
+			if($("#startDate").val()==null || $("#startDate").val()==''){
+				$("#startDate").val(getNowFormatDate());
+			}
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+			
+				//富文本初始化
+			$('.summernote').summernote({
+                lang: 'zh-CN',
+				height:'300px'
+            });
+            getCurrentDocumentHei();
+
+			laydate.render({
+				elem: '#startDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+				format: 'yyyy-MM-dd',
+				type : 'date'
+			});
+
+			$("#attachment_btn").click(function () {
+				$("#attachment_file").click();
+			});
+		});
+        function getCurrentDocumentHei(){
+            var height = $(document).outerHeight();
+            parent.$("#controltype").attr("height",height +"px")
+		}
+
+		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 insertTitle(tValue){
+			var list = "${workClientInfo.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 = "5";
+				console.log(file);
+				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, size);
+			}
+		}
+	</script>
+	<style>
+		.note-editor .panel-heading{
+			padding:3px 5px;
+		}
+	</style>
+</head>
+<body>
+<div class="single-form">
+		<form:form id="inputForm" modelAttribute="workLog" action="${ctx}/worklog/workLog/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<sys:message content="${message}"/>
+			<input type="hidden" name="projectId" id="projectId">
+
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label  double-line">类型:</label>
+					<div class="layui-input-block">
+						<input type="radio" class="i-checks" name="logType" checked id="logType1" value="1">
+						<label for="logType1">日报</label>
+						<input type="radio" class="i-checks" name="logType" checked id="logType2" value="0">
+						<label for="logType2">周报</label>
+						<input type="radio" class="i-checks" name="logType" checked id="logType3" value="0">
+						<label for="logType3">月报</label>
+						<input type="radio" class="i-checks" name="logType" checked id="logType4" value="0">
+						<label for="logType4">季度</label>
+						<input type="radio" class="i-checks" name="logType" checked id="logType5" value="0">
+						<label for="logType5">年度</label>
+					</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" type="text"  maxlength="20" class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workLog.startDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 ">
+					<label class="layui-form-label">地区:</label>
+					<div class="layui-input-block  with-icon">
+						<sys:treeselect id="area" name="area.id" value="${workLog.area.id}" labelName="area.name" labelValue="${workLog.area.name}"
+										title="区域" url="/sys/area/treeData" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="ture"/>
+					</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="address" htmlEscape="false"   id="model"  class="form-control required layui-input" value="${workLog.address}"/>
+					</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="weather" class="form-control required  simple-select">
+							<form:option value="" label=""/>
+							<form:options items="${fns:getMainDictList('work_weather')}" 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="temperature" htmlEscape="false"   id="model"  class="form-control required layui-input" value="${workLog.temperature}"/>
+					</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="theme" htmlEscape="false"   id="model"  class="form-control required layui-input" value="${workLog.theme}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label"><span class="require-item">*</span>内容:</label>
+					<div class="layui-input-block">
+						<textarea id="content" name="content"  class="form-control summernote required" placeholder="内容" required>${workLog.content}</textarea>
+					</div>
+				</div>
+			</div>
+
+		</form:form>
+</div>
+</body>
+</html>

+ 184 - 0
src/main/webapp/webpage/modules/worklog/workLogFormView.jsp

@@ -0,0 +1,184 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>日志模板</title>
+	<meta name="decorator" content="default"/>
+	 <%--<link href="${ctxStatic}/summernotenew/summernote.css" rel="stylesheet">--%>
+	 <%--<link href="${ctxStatic}/summernotenew/summernote-bs3.css" rel="stylesheet">--%>
+	<%--<script src="${ctxStatic}/summernotenew/summernote.min.js"></script>--%>
+	<%--<script src="${ctxStatic}/summernotenew/lang/summernote-zh-CN.js"></script>--%>
+	<script src="${ctxStatic}/kindeditor/kindeditor-all.js"></script>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			<%--if("${workLog.logType}" == "1"){--%>
+				<%--$("#logType1").iCheck('check')--%>
+			<%--}else if("${workLog.logType}" == "2"){--%>
+				<%--$("#logType2").iCheck('check')--%>
+			<%--}else if("${workLog.logType}" == "3"){--%>
+				<%--$("#logType3").iCheck('check')--%>
+			<%--}else if("${workLog.logType}" == "4"){--%>
+				<%--$("#logType5").iCheck('check')--%>
+			<%--}else if("${workLog.logType}" == "5"){--%>
+				<%--$("#logType5").iCheck('check')--%>
+			<%--}--%>
+
+			// if($("#startDate").val()==null || $("#startDate").val()==''){
+			// 	$("#startDate").val(getNowFormatDate());
+			// }
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+			
+			// 	//富文本初始化
+			// $('.summernote').summernote({
+            //     lang: 'zh-CN',
+			// 	height:'300px'
+            // });
+            // getCurrentDocumentHei();
+
+			// laydate.render({
+			// 	elem: '#startDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+			// 	format: 'yyyy-MM-dd',
+			// 	type : 'date'
+			// });
+
+
+		});
+        // function getCurrentDocumentHei(){
+        //     var height = $(document).outerHeight();
+        //     parent.$("#controltype").attr("height",height +"px")
+		// }
+
+
+
+
+		}
+
+
+	</script>
+	<%--<style>--%>
+		<%--.note-editor .panel-heading{--%>
+			<%--padding:3px 5px;--%>
+		<%--}--%>
+	<%--</style>--%>
+</head>
+<body>
+<div class="single-form">
+		<form:form id="inputForm" modelAttribute="workLog" action="${ctx}/worklog/workLog/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<sys:message content="${message}"/>
+			<input type="hidden" name="projectId" id="projectId">
+
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>日志</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">类型:</label>
+					<div class="layui-input-block">
+						<input type="radio" class="i-checks" name="workLog.logType" checked id="logType1" value="日报">
+						<label for="logType1">日报</label>
+						<input type="radio" class="i-checks" name="workLog.logType" checked id="logType2" value="周报">
+						<label for="logType2">周报</label>
+						<input type="radio" class="i-checks" name="workLog.logType" checked id="logType3" value="月报">
+						<label for="logType3">月报</label>
+						<input type="radio" class="i-checks" name="workLog.logType" checked id="logType4" value="季度">
+						<label for="logType4">季度</label>
+						<input type="radio" class="i-checks" name="workLog.logType" checked id="logType5" value="年度">
+						<label for="logType5">年度</label>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">创建日期:</label>
+					<div class="layui-input-block">
+						<input id="startDate" name="workLog.startDate" type="text"  maxlength="20" class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${projectControlTable.workLog.startDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 ">
+					<label class="layui-form-label">地区:</label>
+					<div class="layui-input-block  with-icon">
+						<sys:treeselect id="area" name="workLog.area.id" value="${projectControlTable.workLog.area.id}" labelName="area.name" labelValue="${projectControlTable.workLog.area.name}"
+										title="区域" url="/sys/area/treeData" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="ture"/>
+					</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="address" name="workLog.address" htmlEscape="false"    class="form-control required layui-input" value="${projectControlTable.workLog.address}"/>
+					</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="weather" name="workLog.weather" htmlEscape="false"    class="form-control required layui-input" value="${projectControlTable.workLog.weather}"/>
+					</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="lowTem" name="workLog.lowTem" htmlEscape="false"   class="form-control required layui-input query-group" value="${projectControlTable.workLog.lowTem}"/>
+						<span class="group-sep">-</span>
+						<input id="highTem" name="workLog.highTem" htmlEscape="false"   class="form-control required layui-input query-group" value="${projectControlTable.workLog.highTem}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">风向:</label>
+					<div class="layui-input-block">
+						<input id="wind" name="workLog.wind" htmlEscape="false"    class="form-control  layui-input" value="${projectControlTable.workLog.wind}"/>
+					</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="theme" name="workLog.theme" htmlEscape="false"    class="form-control required layui-input" value="${projectControlTable.workLog.theme}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label"><span class="require-item">*</span>内容:</label>
+					<div class="layui-input-block">
+						<textarea id="content" name="workLog.content" style="width:700px;height:300px;" class="form-control  required" placeholder="内容" required>${projectControlTable.workLog.content}</textarea>
+					</div>
+				</div>
+				<script type="text/javascript">
+					var editor;
+					KindEditor.ready(function(K) {
+						editor = K.create('textarea[name="workLog.content"]', {
+							resizeType: 1,
+							//图片路径
+							filePostName: "uploadFile",
+							uploadJson: '${ctxp}/static/kindeditor/jsp/upload_json.jsp',
+							allowPreviewEmoticons: false,
+							afterBlur:function(){
+								this.sync('textarea[name="workLog.content"]');
+							}
+						});
+					});
+
+				</script>
+			</div>
+
+		</form:form>
+</div>
+</body>
+</html>

+ 166 - 0
src/main/webapp/webpage/modules/worklog/workMeetFormView.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"/>
+	 <%--<link href="${ctxStatic}/summernotenew/summernote.css" rel="stylesheet">--%>
+	 <%--<link href="${ctxStatic}/summernotenew/summernote-bs3.css" rel="stylesheet">--%>
+	<%--<script src="${ctxStatic}/summernotenew/summernote.min.js"></script>--%>
+	<%--<script src="${ctxStatic}/summernotenew/lang/summernote-zh-CN.js"></script>--%>
+	<script src="${ctxStatic}/kindeditor/kindeditor-all.js"></script>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+
+
+			// if($("#startDate").val()==null || $("#startDate").val()==''){
+			// 	$("#startDate").val(getNowFormatDate());
+			// }
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+			
+			// 	//富文本初始化
+			// $('.summernote').summernote({
+            //     lang: 'zh-CN',
+			// 	height:'300px'
+            // });
+            // getCurrentDocumentHei();
+
+			// laydate.render({
+			// 	elem: '#startDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+			// 	format: 'yyyy-MM-dd',
+			// 	type : 'date'
+			// });
+
+			// $("#attachment_btn").click(function () {
+			// 	$("#attachment_file").click();
+			// });
+		});
+        // function getCurrentDocumentHei(){
+        //     var height = $(document).outerHeight();
+        //     parent.$("#controltype").attr("height",height +"px")
+		// }
+
+
+
+
+
+
+	</script>
+	<%--<style>--%>
+		<%--.note-editor .panel-heading{--%>
+			<%--padding:3px 5px;--%>
+		<%--}--%>
+	<%--</style>--%>
+</head>
+<body>
+<div class="single-form">
+		<form:form id="inputForm" modelAttribute="workMeeting" action="${ctx}/workmeeting/workMeeting/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<sys:message content="${message}"/>
+			<input type="hidden" name="projectId" id="projectId">
+
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>会议</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">类型:</label>
+					<div class="layui-input-block">
+						<input id="logType" name="workLog.logType" htmlEscape="false"    class="form-control required layui-input" value="${projectControlTable.workLog.logType}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">创建日期:</label>
+					<div class="layui-input-block">
+						<input id="startDate" name="workLog.startDate" type="text"  maxlength="20" class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${projectControlTable.workLog.startDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 ">
+					<label class="layui-form-label">地区:</label>
+					<div class="layui-input-block  with-icon">
+						<sys:treeselect id="area" name="workLog.area.id" value="${projectControlTable.workLog.area.id}" labelName="area.name" labelValue="${projectControlTable.workLog.area.name}"
+										title="区域" url="/sys/area/treeData" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="ture"/>
+					</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="address" name="workLog.address" htmlEscape="false"    class="form-control required layui-input" value="${projectControlTable.workLog.address}"/>
+					</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="weather" name="workLog.weather" htmlEscape="false"    class="form-control required layui-input" value="${projectControlTable.workLog.weather}"/>
+					</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="lowTem" name="workLog.lowTem" htmlEscape="false"   class="form-control required layui-input query-group" value="${projectControlTable.workLog.lowTem}"/>
+						<span class="group-sep">-</span>
+						<input id="highTem" name="workLog.highTem" htmlEscape="false"   class="form-control required layui-input query-group" value="${projectControlTable.workLog.highTem}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">风向:</label>
+					<div class="layui-input-block">
+						<input id="wind1" name="workMeeting.wind" htmlEscape="false"    class="form-control  layui-input" value="${projectControlTable.workMeeting.wind}"/>
+					</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="theme" name="workLog.theme" htmlEscape="false"    class="form-control required layui-input" value="${projectControlTable.workLog.theme}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label"><span class="require-item">*</span>内容:</label>
+					<div class="layui-input-block">
+						<textarea id="content" name="workLog.content" style="width:700px;height:300px;" class="form-control  required" placeholder="内容" required>${projectControlTable.workLog.content}</textarea>
+					</div>
+				</div>
+				<script type="text/javascript">
+					var editor;
+					KindEditor.ready(function(K) {
+						editor = K.create('textarea[name="workLog.content"]', {
+							resizeType: 1,
+							//图片路径
+							filePostName: "uploadFile",
+							uploadJson: '${ctxp}/static/kindeditor/jsp/upload_json.jsp',
+							allowPreviewEmoticons: false,
+							afterBlur:function(){
+								this.sync('textarea[name="workLog.content"]');
+							}
+						});
+					});
+
+				</script>
+			</div>
+
+		</form:form>
+</div>
+</body>
+</html>

+ 65 - 0
src/main/webapp/webpage/modules/workmeeting/workmeetinginfoForm.jsp

@@ -0,0 +1,65 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>workmeeting管理</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="workmeetinginfo" action="${ctx}/workmeeting/workmeetinginfo/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="roomName" 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="status" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"></td>
+		   			<td class="width-35" ></td>
+		  		</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 130 - 0
src/main/webapp/webpage/modules/workmeeting/workmeetinginfoList.jsp

@@ -0,0 +1,130 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>workmeeting管理</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>workmeeting列表 </h5>
+		<div class="ibox-tools">
+			<a class="collapse-link">
+				<i class="fa fa-chevron-up"></i>
+			</a>
+			<a class="dropdown-toggle" data-toggle="dropdown" href="#">
+				<i class="fa fa-wrench"></i>
+			</a>
+			<ul class="dropdown-menu dropdown-user">
+				<li><a href="#">选项1</a>
+				</li>
+				<li><a href="#">选项2</a>
+				</li>
+			</ul>
+			<a class="close-link">
+				<i class="fa fa-times"></i>
+			</a>
+		</div>
+	</div>
+    
+    <div class="ibox-content">
+	<sys:message content="${message}"/>
+	
+	<!--查询条件-->
+	<div class="row">
+	<div class="col-sm-12">
+	<form:form id="searchForm" modelAttribute="workmeetinginfo" action="${ctx}/workmeeting/workmeetinginfo/" 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="workmeeting:workmeetinginfo:add">
+				<table:addRow url="${ctx}/workmeeting/workmeetinginfo/form" title="workmeeting"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workmeeting:workmeetinginfo:edit">
+			    <table:editRow url="${ctx}/workmeeting/workmeetinginfo/form" title="workmeeting" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workmeeting:workmeetinginfo:del">
+				<table:delRow url="${ctx}/workmeeting/workmeetinginfo/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workmeeting:workmeetinginfo:import">
+				<table:importExcel url="${ctx}/workmeeting/workmeetinginfo/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workmeeting:workmeetinginfo:export">
+	       		<table:exportExcel url="${ctx}/workmeeting/workmeetinginfo/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 roomName">房间名</th>
+				<th  class="sort-column status">房间状态</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="workmeetinginfo">
+			<tr>
+				<td> <input type="checkbox" id="${workmeetinginfo.id}" class="i-checks"></td>
+				<td><a  href="#" onclick="openDialogView('查看workmeeting', '${ctx}/workmeeting/workmeetinginfo/form?id=${workmeetinginfo.id}','80%','80%')">
+					${workmeetinginfo.remarks}
+				</a></td>
+				<td>
+					${workmeetinginfo.roomName}
+				</td>
+				<td>
+					${workmeetinginfo.status}
+				</td>
+				<td>
+					<shiro:hasPermission name="workmeeting:workmeetinginfo:view">
+						<a href="#" onclick="openDialogView('查看workmeeting', '${ctx}/workmeeting/workmeetinginfo/form?id=${workmeetinginfo.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="workmeeting:workmeetinginfo:edit">
+    					<a href="#" onclick="openDialog('修改workmeeting', '${ctx}/workmeeting/workmeetinginfo/form?id=${workmeetinginfo.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="workmeeting:workmeetinginfo:del">
+						<a href="${ctx}/workmeeting/workmeetinginfo/delete?id=${workmeetinginfo.id}" onclick="return confirmx('确认要删除该workmeeting吗?', 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/workmeeting/workmeetinguserForm.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="workmeetinguser" action="${ctx}/workmeeting/workmeetinguser/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">用户类型 (0:发起者;1:加入者):</label></td>
+					<td class="width-35">
+						<form:input path="type" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">用户id:</label></td>
+					<td class="width-35">
+						<form:input path="user" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">会议id:</label></td>
+					<td class="width-35">
+						<form:input path="meeting_id" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">用户状态(1:开会中;2:拒绝;3:退出;4;结束):</label></td>
+					<td class="width-35">
+						<form:input path="status" 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/workmeeting/workmeetinguserList.jsp

@@ -0,0 +1,138 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>会议用户信息管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		$(document).ready(function() {
+		});
+	</script>
+</head>
+<body class="gray-bg">
+	<div class="wrapper wrapper-content">
+	<div class="ibox">
+	<div class="ibox-title">
+		<h5>会议用户信息列表 </h5>
+		<div class="ibox-tools">
+			<a class="collapse-link">
+				<i class="fa fa-chevron-up"></i>
+			</a>
+			<a class="dropdown-toggle" data-toggle="dropdown" href="#">
+				<i class="fa fa-wrench"></i>
+			</a>
+			<ul class="dropdown-menu dropdown-user">
+				<li><a href="#">选项1</a>
+				</li>
+				<li><a href="#">选项2</a>
+				</li>
+			</ul>
+			<a class="close-link">
+				<i class="fa fa-times"></i>
+			</a>
+		</div>
+	</div>
+    
+    <div class="ibox-content">
+	<sys:message content="${message}"/>
+	
+	<!--查询条件-->
+	<div class="row">
+	<div class="col-sm-12">
+	<form:form id="searchForm" modelAttribute="workmeetinguser" action="${ctx}/workmeeting/workmeetinguser/" 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="workmeeting:workmeetinguser:add">
+				<table:addRow url="${ctx}/workmeeting/workmeetinguser/form" title="会议用户信息"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workmeeting:workmeetinguser:edit">
+			    <table:editRow url="${ctx}/workmeeting/workmeetinguser/form" title="会议用户信息" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workmeeting:workmeetinguser:del">
+				<table:delRow url="${ctx}/workmeeting/workmeetinguser/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workmeeting:workmeetinguser:import">
+				<table:importExcel url="${ctx}/workmeeting/workmeetinguser/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workmeeting:workmeetinguser:export">
+	       		<table:exportExcel url="${ctx}/workmeeting/workmeetinguser/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 type">用户类型 (0:发起者;1:加入者)</th>
+				<th  class="sort-column user">用户id</th>
+				<th  class="sort-column meeting_id">会议id</th>
+				<th  class="sort-column status">用户状态(1:开会中;2:拒绝;3:退出;4;结束)</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="workmeetinguser">
+			<tr>
+				<td> <input type="checkbox" id="${workmeetinguser.id}" class="i-checks"></td>
+				<td><a  href="#" onclick="openDialogView('查看会议用户信息', '${ctx}/workmeeting/workmeetinguser/form?id=${workmeetinguser.id}','80%','80%')">
+					${workmeetinguser.remarks}
+				</a></td>
+				<td>
+					${workmeetinguser.type}
+				</td>
+				<td>
+					${workmeetinguser.user}
+				</td>
+				<td>
+					${workmeetinguser.meeting_id}
+				</td>
+				<td>
+					${workmeetinguser.status}
+				</td>
+				<td>
+					<shiro:hasPermission name="workmeeting:workmeetinguser:view">
+						<a href="#" onclick="openDialogView('查看会议用户信息', '${ctx}/workmeeting/workmeetinguser/form?id=${workmeetinguser.id}','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="workmeeting:workmeetinguser:edit">
+    					<a href="#" onclick="openDialog('修改会议用户信息', '${ctx}/workmeeting/workmeetinguser/form?id=${workmeetinguser.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="workmeeting:workmeetinguser:del">
+						<a href="${ctx}/workmeeting/workmeetinguser/delete?id=${workmeetinguser.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>

+ 228 - 0
src/main/webapp/webpage/modules/workmonthlyplan/gridselect.jsp

@@ -0,0 +1,228 @@
+<%@ page import="com.jeeplus.modules.sys.utils.UserUtils" %>
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>计划管理</title>
+	<meta name="decorator" content="default"/>
+
+
+	<style>
+		.widthClass{
+			display: inline-block;
+		}
+		.shows .input-group{
+			width: 48%!important;
+		}
+	</style>
+	<style>
+		body{
+			background-color:transparent;
+			filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+			color:#ffffff;
+			background-color:rgba(255,255,255,0);
+			height:100%;
+		}
+	</style>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+	<sys:message content="${message}"/>
+	<div class="layui-row">
+		<div class="full-width fl">
+			<div class="contentShadow layui-row" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="workContractInfo" action="${url}" method="post" class="form-inline">
+					<input type="hidden" name="url" value="${url}"/>
+					<input type="hidden" name="fieldLabels" value="${fieldLabels}"/>
+					<input type="hidden" name="fieldKeys" value="${fieldKeys}"/>
+					<input type="hidden" name="searchLabel" value="${searchLabel}"/>
+					<input type="hidden" name="searchKey" value="${searchKey}"/>
+					<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 lw7">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">客户名称:</label>
+							<div class="layui-input-block with-icon">
+								<form:input path="client.name" htmlEscape="false" 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">
+								<form:input path="name" 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>
+				</form:form>
+			</div>
+		</div>
+
+		<div class="full-width fl">
+			<div class="contentShadow layui-form contentDetails">
+
+				<table class="oa-table layui-table" id="contentTable">
+					<thead>
+					<tr>
+						<th width="5%"></th>
+						<th width="15%">合同编号</th>
+						<th width="25%">合同名称</th>
+						<th width="15%">客户名称</th>
+						<th width="15%">工程分类</th>
+						<th width="10%">合同金额(元)</th>
+						<th width="15%">签订日期</th>
+					</tr>
+					</thead>
+					<tbody>
+					<c:forEach items="${page.list}" var="workContractInfo" varStatus="index">
+						<tr id="t${index.index}">
+							<td style="text-align:center;"> <input type="checkbox" id="${workContractInfo.id}" class="i-checks"></td>
+							<td class="codelabel">${workContractInfo.contractNum}</td>
+							<td class="codelabe2">${workContractInfo.name}</td>
+							<td class="codelabe3">${workContractInfo.client.name}</td>
+							<td class="codelabe4">${fns:getMainDictLabel(workContractInfo.contractType, 'contract_type', '')}</td>
+							<td class="codelabe5">${workContractInfo.contractPrice}</td>
+							<td class="codelabe6"><fmt:formatDate value="${workContractInfo.contractDate}" pattern="yyyy-MM-dd"/></td>
+						</tr>
+					</c:forEach>
+
+					</tbody>
+				</table>
+
+				<!-- 分页代码 -->
+				<table:page page="${page}"></table:page>
+				<div style="clear: both;"></div>
+			</div>
+		</div>
+	</div>
+</div>
+<%--<script>
+    layui.use('table', function(){
+        layui.table.render({
+            limit:${ page.pageSize }
+            ,elem: '#contentTable'
+            ,page: false
+            ,cols: [[
+                {field:'id',align:'center',checkbox:true, title: '序号',width:40}
+                ,{field:'clientName',align:'center', title: '客户名称',minWidth:200,templet:function(d){
+                        var xml = "<a class=\"attention-info\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看客户信息', '${ctx}/workclientinfo/workClientInfo/detail?id=" + d.id + "&wlId=" + d.linkman + "','95%','95%')\">" +
+                            "<span title=" + d.clientName + ">" + d.clientName.substr(0,40) + "</span></a>";
+                        return xml;
+                    }}
+                // ,{field:'clientProperty',align:'center', title: '客户性质',width:150}
+                // ,{field:'trade',align:'center', title: '所在行业', width:150}
+                // ,{field:'area', align:'center',title: '地区',width:200}
+                ,{field:'clientType', align:'center',title: '客户类型',minWidth:200,templet:function(d){
+                        return "<span title='"+ d.clientType +"'>" + d.clientType + "</span>";
+                    }}
+                ,{field:'code', align:'center',title: '统一社会信用代码',minWidth:250,templet:function(d){
+                        return "<span title='"+ d.code +"'>" + d.code + "</span>";
+                    }}
+                ,{field:'createDate',align:'center', title: '创建时间', width:85}
+
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="workClientInfo" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "id":"${workClientInfo.id}"
+                    ,"linkman":"${workClientInfo.workClientLinkman.id}"
+                    ,"clientName":"${workClientInfo.name}"
+                    ,"clientProperty":"${fns:getMainDictLabel(workClientInfo.companyType, 'company_type', '')}"
+                    ,"trade":"${fns:getDictLabel(workClientInfo.companyIndustry, 'company_industry', '')}"
+                    ,"area":"${workClientInfo.area.name}"
+                    ,"clientType":"<c:set value="${fn:split(workClientInfo.clientType, ',') }" var="clientTypes" /><c:forEach items="${clientTypes}" var="cType" varStatus="status">${fns:getMainDictLabel(cType, 'client_type', '')}<c:if test="${!status.last}">, </c:if></c:forEach>"
+                    ,"code":"${workClientInfo.uscCode}"
+                    ,"createDate":"<fmt:formatDate value="${workClientInfo.createDate}" pattern="yyyy-MM-dd"/>"
+
+                }
+                </c:forEach>
+                </c:if>
+            ]
+        });
+        var table = layui.table;
+        var $ = layui.$, active = {
+            getCheckData: function(){ //获取选中数据
+                var checkStatus = table.checkStatus('id')
+                    ,data = checkStatus.data;
+                layer.alert(JSON.stringify(data));
+            }
+        };
+    })
+
+    resizeListTable();/*消除由于有竖向滚动条造成table出现横向滚动条*/
+</script>--%>
+<script>
+</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'
+        });
+        $('#contentTable thead tr th input.i-checks').on('ifChecked', function(event){ //ifCreated 事件应该在插件初始化之前绑定
+            $('#contentTable tbody tr td input.i-checks').iCheck('check');
+        });
+
+        $('#contentTable thead tr th input.i-checks').on('ifUnchecked', function(event){ //ifCreated 事件应该在插件初始化之前绑定
+            $('#contentTable tbody tr td input.i-checks').iCheck('uncheck');
+        });
+
+
+    });
+
+    function getSelectedItem(){
+        var size = $("#contentTable tbody tr td input.i-checks:checked").size();
+        if(size == 0 ){
+            top.layer.alert('请至少选择一条数据!', {icon: 0, title:'警告'});
+            return "-1";
+        }
+        var arr=new Array();
+        $("#contentTable tbody tr td input.i-checks:checked").each(function () {
+            var id =  $(this).attr("id");
+            var contractNum = $(this).parent().parent().parent().find(".codelabel").html();
+            var name = $(this).parent().parent().parent().find(".codelabe2").html();
+            var clientName = $(this).parent().parent().parent().find(".codelabe3").html();
+            var contractPrice = $(this).parent().parent().parent().find(".codelabe5").html();
+            var data = {'id':id,'contractNum':contractNum,'name':name,'clientName':clientName,'contractPrice':contractPrice};
+            arr.push(data);
+        })
+        return arr;
+    }
+    function page(n,s){
+        if(n) $("#pageNo").val(n);
+        if(s) $("#pageSize").val(s);
+        $("#searchForm").attr("action","${url}");
+        $("#searchForm").submit();
+        return false;
+    }
+</script>
+</body>
+</html>

+ 554 - 0
src/main/webapp/webpage/modules/workmonthlyplan/workMonthlyPlanFormAdd.jsp

@@ -0,0 +1,554 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>报销单管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        var count = 0;
+        $(document).ready(function() {
+
+            if($("#createDate").val()==null || $("#createDate").val()==''){
+                $("#createDate").val(getNowFormatDate());
+            }
+            if($("#planMonthly").val()==null || $("#planMonthly").val()==''){
+                $("#planMonthly").val(getNowFormatDateMon());
+
+            }
+
+            //页面加载查询本部门最大月份
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workmonthlyplan/workMonthlyPlan/getThisMaxMonthly',
+                success:function(data){
+					laydate.render({
+                        elem: '#planMonthly', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                        format: 'yyyy-MM',
+                        min: data,
+                        type : 'month',
+                        change: function(value, date, endDate){
+                            var idx1 = $("#workMonthlyPlanThisList tr").length;
+                            if(idx1!=0){
+                                layer.confirm('改变计划月份需重新选择合同,您确定吗?', {btn: ['确定','取消']}, function() {
+
+                                    for(var i=0;i<workMonthlyPlanThisListRowIdx;i++){
+                                        delRow($("#workMonthlyPlanThisList"+i+"_span"),"#workMonthlyPlanThisList"+i);
+                                    }
+                                    $("#money1").val(0);
+                                    $("#money2").val(0);
+                                    $("#money3").val(0);
+                                    $("#money4").val(0);
+                                    $("#money5").val(0);
+                                    $("#planMonthly").val(value);
+                                    layer.closeAll('dialog');
+                                });
+							}
+                        }
+                    });
+                }
+            })
+
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                rules:{
+                },
+                messages:{
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+            laydate.render({
+                elem: '#createDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                format: 'yyyy-MM-dd',
+                type : 'date'
+            });
+
+
+        });
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            var idArr = $("#workMonthlyPlanThisList tr:visible");
+            if(idArr.length<1){
+                parent.layer.msg("请添加本月计划!", {icon: 5});
+                return false;
+            }
+			if(obj == 2){
+                $("#inputForm").attr("action","${ctx}/workmonthlyplan/workMonthlyPlan/save");
+            }else{
+                $("#inputForm").attr("action","${ctx}/workmonthlyplan/workMonthlyPlan/review");
+            }
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }else {
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+
+            return false;
+        }
+
+        function deleteRow(obj,index){
+            $(obj).parent().parent().remove();
+            str[index] = " ";
+            mon[index] = 0;
+            countMoney();
+        }
+        function countMoney(){
+            var m = 0;
+            $.each(mon,function (index,item) {
+                m += Number(item);
+            });
+            $("#mont").val(m);
+        }
+
+        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 getNowFormatDateMon() {
+            var date = new Date();
+            var seperator1 = "-";
+            var month = date.getMonth() + 1;
+            month = (month < 10)?"0"+month:month;
+            var currentdate = date.getFullYear() + seperator1 + month;
+            return currentdate;
+        }
+
+
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workMonthlyPlanThisList tr").length;
+          //tpl = tpl.replace("workMonthlyPlanThisList[0]_workClientInfoId","workMonthlyPlanThisList["+idx1+"].workClientInfoId");
+
+                bornTemplete(list, idx, tpl, row, idx1);
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+
+        }
+        function delRow(obj, prefix){
+            debugger;
+            var id = $(prefix+"_id");
+            var countmoneyArr=new Array();
+            var moneyArr=new Array();
+            moneyArr[0] = $("#money1").val();
+            moneyArr[1] = $("#money2").val();
+            moneyArr[2] = $("#money3").val();
+            moneyArr[3] = $("#money4").val();
+            moneyArr[4] = $("#money5").val();
+            countmoneyArr[0]= $(prefix+"_"+1).val();
+            countmoneyArr[1]= $(prefix+"_"+2).val();
+            countmoneyArr[2]= $(prefix+"_"+3).val();
+            countmoneyArr[3]= $(prefix+"_"+4).val();
+            countmoneyArr[4]= $(prefix+"_"+5).val();
+            for(var k=0;k<5;k++){
+                if (isNumber(countmoneyArr[k])){
+                    if(moneyArr[k]==""){
+                        moneyArr[k] = parseFloat(countmoneyArr[k]).toFixed(2);
+                    }else {
+                        moneyArr[k] = (parseFloat(moneyArr[k]) - parseFloat(countmoneyArr[k])).toFixed(2);
+                    }
+                }
+			}
+
+           // if(moneyArr[0]>=0&&moneyArr[1]>=0&&moneyArr[2]>=0&&moneyArr[3]>=0){
+                count++;
+                $("#money1").val(moneyArr[0]);
+                $("#money2").val(moneyArr[1]);
+                $("#money3").val(moneyArr[2]);
+                $("#money4").val(moneyArr[3]);
+                $("#money5").val(moneyArr[4]);
+                var delFlag = $(prefix+"_delFlag");
+                if (id.val() == ""){
+                    delFlag.val("1");
+                    $(obj).parent().parent().remove();
+                }else if(delFlag.val() == "0"){
+                    delFlag.val("1");
+                    $(obj).html("&divide;").attr("title", "撤销删除");
+                    $(obj).parent().parent().addClass("error");
+                    $(obj).parent().parent().addClass("hide");
+                }else if(delFlag.val() == "1"){
+                    delFlag.val("0");
+                    $(obj).html("&times;").attr("title", "删除");
+                    $(obj).parent().parent().removeClass("error");
+                }
+           /* }else{
+                //parent.layer.msg('删除失败',{icon:2});
+            }*/
+
+        }
+
+
+
+        function getMoney(value,j){
+            var money = "0.00";
+            //方法一使用id选择器进行计算。
+            //获取输入的数字
+            //自动计算出结果并填充在相应的输入框中
+            var size = $("#workMonthlyPlanThisList tr").length+count;
+            for (var i = 0;i<size;i++){
+                var _annualCollectionPlan = $("#workMonthlyPlanThisList"+i+"_"+j).val();
+
+                var delFlag = $("#workMonthlyPlanThisList"+i+"_delFlag").val();
+                if (_annualCollectionPlan!=undefined && isNumber(_annualCollectionPlan) && delFlag==0){
+                    if(money==""){
+                        money = parseFloat(_annualCollectionPlan).toFixed(2);
+                    }else {
+                        money = (parseFloat(money) + parseFloat(_annualCollectionPlan)).toFixed(2);
+                    }
+                }
+            }
+            $("#money"+j).val(money);
+          /*  if (money!='0.00') {
+                $("#money"+j).val(money);
+            }*/
+        }
+
+        function isNumber(val){
+            if(val === "" || val ==null){
+                return false;
+            }
+            var regPos = /^\d+(\.\d+)?$/; //非负浮点数
+            var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
+            if(regPos.test(val) || regNeg.test(val)){
+                return true;
+            }else{
+                return false;
+            }
+
+        }
+        //引用
+        function setClientInfo(item){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workmonthlyplan/workMonthlyPlan/getWorkMonthlyPlanThis',
+                data:{
+                    "id":item.id
+                },
+                success:function(data){
+                    for(var i=0;i<data.length;i++){
+                        var idArr = $("#workMonthlyPlanThisList tr:visible .workClientInfoId");
+                        if(data[i].id!=''&&!hasInArr(data[i].id,idArr)){
+                            addRow('#workMonthlyPlanThisList', workMonthlyPlanThisListRowIdx, workMonthlyPlanThisListTpl,data[i]);
+                            setInfo(data[i].workClientInfoId,workMonthlyPlanThisListRowIdx);
+                            workMonthlyPlanThisListRowIdx=workMonthlyPlanThisListRowIdx + 1
+						}
+					}
+                    $(".money").change();
+                }
+            })
+		};
+        //累计金额与本月前金额
+        function setInfo(clientId,idx){
+            var planMonthly=$("#planMonthly").val();
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workmonthlyplan/workMonthlyPlan/getBeforeThisMonthMoney',
+                data:{
+                    "clientId":clientId,"planMonthly":planMonthly
+                },
+                success:function(data){
+                    $("#workMonthlyPlanThisList"+idx+"_2").val(parseFloat(data.accumulativePrice/10000).toFixed(2));
+                    $("#workMonthlyPlanThisList"+idx+"_2").change();
+                    $("#workMonthlyPlanThisList"+idx+"_4").val(parseFloat(data.beforeThisMonthMoney/10000).toFixed(2));
+                    $("#workMonthlyPlanThisList"+idx+"_4").change();
+                }
+            })
+        };
+         //选择
+        function setContractInfo(obj){
+            for (var i=0; i<obj.length; i++){
+                var idArr = $("#workMonthlyPlanThisList tr:visible .workClientInfoId");
+                if(obj[i].id!=''&&!hasInArr(obj[i].id,idArr)){
+                    addRow('#workMonthlyPlanThisList', workMonthlyPlanThisListRowIdx, workMonthlyPlanThisListTpl);
+                    setInfo(obj[i].id,workMonthlyPlanThisListRowIdx);
+                    workMonthlyPlanThisListRowIdx=workMonthlyPlanThisListRowIdx + 1
+                    var row = workMonthlyPlanThisListRowIdx - 1 ;
+                    $("#"+"workMonthlyPlanThisList"+row+"_workClientInfoId").val(obj[i].id);
+                    $("#"+"workMonthlyPlanThisList"+row+"_contractName").val(obj[i].name);
+                    $("#"+"workMonthlyPlanThisList"+row+"_contractNum").val(obj[i].contractNum);
+                    $("#"+"workMonthlyPlanThisList"+row+"_clientName").val(obj[i].clientName);
+                    $("#"+"workMonthlyPlanThisList"+row+"_1").val(parseFloat(obj[i].contractPrice/10000).toFixed(2));
+                    $(".money").change();
+                }
+            }
+		}
+
+        function hasInArr(id,idArr) {
+            for(var i=0;i<idArr.length;i++){
+                if(id==$(idArr[i]).val()){
+                    return true;
+                }
+            }
+            return false;
+        }
+	</script>
+	<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+	<style>
+		/*超过5个汉字,调整label的长度,以下是配套的*/
+		.layui-item .layui-form-label{
+			width:90px;
+		}
+		.form-group .layui-item .layui-input-block,
+		.query .layui-input-block {
+			margin-left: 116px;
+		}
+	</style>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workMonthlyPlan" action="${ctx}/workMonthlyPlan/workMonthlyPlan/save" method="post" class="form-horizontal" >
+			<form:hidden path="id"/>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>计划月份:</label>
+					<div class="layui-input-block">
+						<input id="planMonthly" name="planMonthly" type="text"  maxlength="20"  class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workMonthlyPlan.planMonthly}" pattern="yyyy-MM"/>"/>
+
+					</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="officeName" htmlEscape="false"  readonly="true" id="officeName"  class="form-control layui-input" value = "${workMonthlyPlan.officeName}"/>
+							<input type="hidden" id="officeId" name="officeId" value="${workMonthlyPlan.officeId}">
+							<input type="hidden" id="companyId" name="companyId" value="${workMonthlyPlan.companyId}">
+							<span class="input-group-btn">
+                            <label class="form-status"><c:if test="${workMonthlyPlan.planStatus eq '0'}">未审定</c:if> <c:if test="${workMonthlyPlan.planStatus eq '1'}">已审定</c:if></label>
+                         </span>
+						</div>
+
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">创建人:</label>
+					<div class="layui-input-block">
+						<form:input path="name" htmlEscape="false"  readonly="true" id="name"  class="form-control required layui-input" value="${workMonthlyPlan.name}"/>
+					</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" type="text"  maxlength="20" class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workMonthlyPlan.createDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>本月计划表</h2></div>
+				<div class="layui-item nav-btns" >
+                    <sys:gridselectsInfo1 url="${ctx}/workmonthlyplan/workMonthlyPlan/clientInfoList" id="contentData1" title="选择合同"
+                                        fieldLabels="" fieldKeys=""  searchLabel="" searchKey="name"></sys:gridselectsInfo1>
+					<c:choose>
+						<c:when test="${fns:getUser().id == workMonthlyPlan.createBy.id or workMonthlyPlan.createBy.id ==null}">
+							<sys:gridselectPlan url="${ctx}/workmonthlyplan/workMonthlyPlan/selectcontentData" id="contentData" title="选择历史计划"
+												fieldLabels="" fieldKeys=""  searchLabel="" searchKey="name"></sys:gridselectPlan>
+
+                        </c:when>
+						<c:otherwise>
+						</c:otherwise>
+					</c:choose>
+					<label style="float:right;width: 80px">单位:万元</label>
+				</div>
+
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th ><font color="red">*</font>合同名称</th>
+                            <th width="150px"><font color="red">*</font>合同编号</th>
+                            <th width="140px"><font color="red">*</font>主委托方</th>
+                            <th width="100px"><font color="red">*</font>合同预计收费</th>
+							<th width="100px"><font color="red">*</font>合同累计收费</th>
+							<th width="120px"><font color="red">*</font>本年度预计收费</th>
+							<th width="100px"><font color="red">*</font>本年度已收费</th>
+							<th width="100px"><font color="red">*</font>本月计划收费</th>
+							<th width="100px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="workMonthlyPlanThisList">
+						<c:if test="${not empty workMonthlyPlan.workMonthlyPlanThisList}">
+							<c:forEach items="${workMonthlyPlan.workMonthlyPlanThisList}" var="workMonthlyPlanThis" varStatus="index">
+								<tr id="workMonthlyPlanThisList${index.index}">
+									<td class="hide">
+										<input id="workMonthlyPlanThisList${index.index}_id" name="workMonthlyPlanThisList[${index.index}].id" type="hidden" value="${workMonthlyPlanThis.id}"/>
+										<input id="workMonthlyPlanThisList${index.index}_workClientInfoId" name="workMonthlyPlanThisList[${index.index}].workClientInfoId" type="hidden" value="${workMonthlyPlanThis.workClientInfoId}" class="workClientInfoId"/>
+										<input id="workMonthlyPlanThisList${index.index}_delFlag" name="workMonthlyPlanThisList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+                                    <td>
+                                        <input id="workMonthlyPlanThisList${index.index}_contractName" readonly="true"   name="workMonthlyPlanThisList[${index.index}].contractName"  type="text" value="${workMonthlyPlanThis.contractName}"   class="form-control  required"/>
+                                    </td>
+                                    <td>
+                                        <input id="workMonthlyPlanThisList${index.index}_contractNum"  readonly="true"  name="workMonthlyPlanThisList[${index.index}].contractNum"  type="text" value="${workMonthlyPlanThis.contractNum}"   class="form-control  required"/>
+                                    </td>
+                                    <td>
+                                        <input id="workMonthlyPlanThisList${index.index}_clientName" readonly="true"   name="workMonthlyPlanThisList[${index.index}].clientName"  type="text" value="${workMonthlyPlanThis.clientName}"   class="form-control  required"/>
+                                    </td>
+
+                                    <td>
+                                        <input id="workMonthlyPlanThisList${index.index}_1" readonly="true"  onchange="getMoney(this.value,'1')"   name="workMonthlyPlanThisList[${index.index}].estimatePrice" maxlength="12" type="text" value="${workMonthlyPlanThis.estimatePrice}"   class="form-control  required"/>
+                                    </td>
+                                    <td>
+                                        <input id="workMonthlyPlanThisList${index.index}_2" readonly="true"  onchange="getMoney(this.value,'2')"   name="workMonthlyPlanThisList[${index.index}].accumulativePrice" maxlength="12" type="text" value="${workMonthlyPlanThis.accumulativePrice}"   class="form-control  required"/>
+                                    </td>
+
+									<td>
+										<input id="workMonthlyPlanThisList${index.index}_3"   onchange="getMoney(this.value,'3')"   name="workMonthlyPlanThisList[${index.index}].annualCollectionPlan" maxlength="12" type="text" value="${workMonthlyPlanThis.annualCollectionPlan}"   class="form-control  required"/>
+									</td>
+									<td>
+										<input id="workMonthlyPlanThisList${index.index}_4" readonly="true"  onchange="getMoney(this.value,'4')" readonly="true"  name="workMonthlyPlanThisList[${index.index}].beforeThisMonthMoney" maxlength="12" type="text" value="${workMonthlyPlanThis.beforeThisMonthMoney}"     class="form-control  number required"/>
+									</td>
+									<%--<td>
+										<input id="workMonthlyPlanThisList${index.index}_5" onchange="getMoney(this.value,'5')"  name="workMonthlyPlanThisList[${index.index}].remainingPlan" type="text" value="${workMonthlyPlanThis.remainingPlan}" readonly="true" maxlength="12"  class="form-control "/>
+									</td>--%>
+									<td>
+										<input id="workMonthlyPlanThisList${index.index}_5" onblur="setMoney(this.value,${index.index})"  onchange="getMoney(this.value,'5')"  name="workMonthlyPlanThisList[${index.index}].thisMonthPlanMoney" maxlength="12" type="text" value="${workMonthlyPlanThis.thisMonthPlanMoney}"     class="form-control required"/>
+									</td>
+									<td class="text-center op-td" >
+										<span class="op-btn op-btn-delete" id="workMonthlyPlanThisList${index.index}_span" onclick="delRow(this, '#workMonthlyPlanThisList${index.index}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+					<table id="contentMoneys" class="table table-bordered table-condensed can-edit summary">
+						<tr>
+							<td  style="vertical-align:middle;text-align: center;"><label><font color="red">*</font>合计(万元):</label></td>
+                            <td  width="150px">
+                                <form:input path="" id="" htmlEscape="false" readonly="true"  class="form-control"/>
+                            </td>
+                            <td  width="140px">
+                                <form:input path="" id="" htmlEscape="false" readonly="true"   class="form-control"/>
+                            </td>
+                            <td  width="100px">
+                                <form:input path="estimatePrice" id="money1"  htmlEscape="false" readonly="true"  maxlength="12"  class="form-control "/>
+                            </td>
+                            <td width="100px">
+                                <form:input path="accumulativePrice" id="money2"  htmlEscape="false"  readonly="true" maxlength="12"  class="form-control "/>
+                            </td>
+							<td width="120px">
+								<form:input path="yearSumMoney" id="money3"  htmlEscape="false" readonly="true"   maxlength="12"  class="form-control "/>
+							</td>
+							<td  width="100px">
+								<form:input path="beforeSumMoney" id="money4"   htmlEscape="false" readonly="true" maxlength="12"  class="form-control "/>
+							</td>
+
+							<td  width="100px">
+								<form:input path="thisSumMoney" id="money5"  htmlEscape="false" readonly="true" maxlength="12"  class="form-control "/>
+							</td>
+							<td  width="100px">
+								<form:input path="" id=""   htmlEscape="false" readonly="true"   class="form-control"/>
+							</td>
+						</tr>
+					</table>
+					<script type="text/template" id="workMonthlyPlanThisListTpl">//<!--
+                                    <tr id="workMonthlyPlanThisList{{idx}}">
+                                        <td class="hide">
+                                            <input id="workMonthlyPlanThisList{{idx}}_id" name="workMonthlyPlanThisList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                            <input id="workMonthlyPlanThisList{{idx}}_workClientInfoId" name="workMonthlyPlanThisList[{{idx}}].workClientInfoId" type="hidden" value="{{row.workClientInfoId}}" class="workClientInfoId"/>
+                                            <input id="workMonthlyPlanThisList{{idx}}_delFlag" name="workMonthlyPlanThisList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                       <td>
+                                            <input id="workMonthlyPlanThisList{{idx}}_contractName"  name="workMonthlyPlanThisList[{{idx}}].contractName"  type="text" value="{{row.contractName}}"  readonly="true"  class="form-control  required"/>
+                                        </td>
+                                        <td>
+                                            <input id="workMonthlyPlanThisList{{idx}}_contractNum"  name="workMonthlyPlanThisList[{{idx}}].contractNum"  type="text" value="{{row.contractNum}}"  readonly="true"  class="form-control required"/>
+                                        </td>
+                                        <td>
+                                            <input id="workMonthlyPlanThisList{{idx}}_clientName"   name="workMonthlyPlanThisList[{{idx}}].clientName"  type="text" value="{{row.clientName}}"  readonly="true"  class="form-control  required"/>
+                                        </td>
+
+                                        <td>
+                                            <input id="workMonthlyPlanThisList{{idx}}_1"  onchange="getMoney(this.value,'1')"  name="workMonthlyPlanThisList[{{idx}}].estimatePrice" maxlength="12" type="text" value="{{row.estimatePrice}}"  readonly="true" class="form-control number money required"/>
+                                        </td>
+                                        <td>
+                                            <input id="workMonthlyPlanThisList{{idx}}_2"  onchange="getMoney(this.value,'2')"  name="workMonthlyPlanThisList[{{idx}}].accumulativePrice" maxlength="12" type="text" value="{{row.accumulativePrice}}"  readonly="true"  class="form-control number money required"/>
+                                        </td>
+                                        <td>
+                                            <input id="workMonthlyPlanThisList{{idx}}_3"  onchange="getMoney(this.value,'3')"  name="workMonthlyPlanThisList[{{idx}}].annualCollectionPlan" maxlength="12" type="text" value="{{row.annualCollectionPlan}}"  placeholder=""  class="form-control number money required"/>
+                                        </td>
+                                        <td>
+                                            <input id="workMonthlyPlanThisList{{idx}}_4"  readonly="true" onchange="getMoney(this.value,4)" name="workMonthlyPlanThisList[{{idx}}].beforeThisMonthMoney" maxlength="12" type="text" value="{{row.beforeThisMonthMoney}}"  readonly="true"  class="form-control number money required"/>
+                                        </td>
+
+                                     <td>
+                                            <input id="workMonthlyPlanThisList{{idx}}_5"   onchange="getMoney(this.value,5)" name="workMonthlyPlanThisList[{{idx}}].thisMonthPlanMoney" type="text" value="{{row.thisMonthPlanMoney}}" maxlength="12" placeholder=""  class="form-control money number  required"/>
+                                        </td>
+                                        <td class="text-center op-td" >
+                                            {{#delBtn}}<span class="op-btn op-btn-delete" id="workMonthlyPlanThisList{{idx}}_span" onclick="delRow(this, '#workMonthlyPlanThisList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+                        var workMonthlyPlanThisListRowIdx = 0, workMonthlyPlanThisListTpl = $("#workMonthlyPlanThisListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+
+                        if($("#id").val()){
+                            workMonthlyPlanThisListRowIdx = ${fn:length(workMonthlyPlan.workMonthlyPlanThisList)};
+                        }
+                        $(document).ready(function() {
+                            /*       //年度收款计划-本月之前已收账款-本月计划收款
+        function setMoney(v,i){
+           /!* if(isNumber(v)&&v<0){
+
+			}*!/
+            var sunMoney=0;
+            var size = $("#workMonthlyPlanThisList tr").length;
+            var  td1=$("#workMonthlyPlanThisList"+i+"_1").val();
+            var  td2=$("#workMonthlyPlanThisList"+i+"_2").val();
+            var  td4=$("#workMonthlyPlanThisList"+i+"_4").val();
+            if(isNumber(td1)&& isNumber(td2)&& isNumber(td4)){
+                var  td3=parseFloat(td1)-parseFloat(td2)-parseFloat(td4);
+                $("#workMonthlyPlanThisList"+i+"_3").val(td3);
+                $("#workMonthlyPlanThisList"+i+"_3").change();
+
+			}
+
+        }*/
+                        });
+					</script>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+
+</body>
+</html>

+ 430 - 0
src/main/webapp/webpage/modules/workmonthlyplan/workMonthlyPlanFormEdit.jsp

@@ -0,0 +1,430 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>报销单管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        var count = 0;
+        $(document).ready(function() {
+
+            /*if($("#createDate").val()==null || $("#createDate").val()==''){
+                $("#createDate").val(getNowFormatDate());
+            }
+            if($("#planMonthly").val()==null || $("#planMonthly").val()==''){
+                $("#planMonthly").val(getNowFormatDateMon());
+
+            }*/
+
+          /*  var data = ${fns:toJson(workMonthlyPlan.workMonthlyPlanThisList)};
+            ;
+            for (var i=0; i<data.length; i++){
+                console.info(data[i]);
+                addRow('#workMonthlyPlanThisList', workMonthlyPlanThisListRowIdx, workMonthlyPlanThisListTpl,data[i]);
+            }
+            $(":input.money").change();*/
+
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                rules:{
+                },
+                messages:{
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+            laydate.render({
+                elem: '#planMonthly', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                format: 'yyyy-MM',
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#createDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                format: 'yyyy-MM-dd',
+                type : 'date'
+            });
+
+
+        });
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+
+            if(obj == 2){
+                $("#inputForm").attr("action","${ctx}/workmonthlyplan/workMonthlyPlan/save");
+            }else{
+                $("#inputForm").attr("action","${ctx}/workmonthlyplan/workMonthlyPlan/review");
+            }
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }else {
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+
+            return false;
+        }
+
+        function deleteRow(obj,index){
+            $(obj).parent().parent().remove();
+            str[index] = " ";
+            mon[index] = 0;
+            countMoney();
+        }
+        function countMoney(){
+            var m = 0;
+            $.each(mon,function (index,item) {
+                m += Number(item);
+            });
+            $("#mont").val(m);
+        }
+
+        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 getNowFormatDateMon() {
+            var date = new Date();
+            var seperator1 = "-";
+            var month = date.getMonth() + 1;
+            month = (month < 10)?"0"+month:month;
+            var currentdate = date.getFullYear() + seperator1 + month;
+            return currentdate;
+        }
+
+
+        function addRow(list, idx, tpl, row){
+
+            var idx1 = $("#workMonthlyPlanThisList tr").length;
+                bornTemplete(list, idx, tpl, row, idx1);
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+
+
+        }
+        function delRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var countmoneyArr=new Array();
+            var moneyArr=new Array();
+            moneyArr[0] = $("#money1").val();
+            moneyArr[1] = $("#money2").val();
+            moneyArr[2] = $("#money3").val();
+            moneyArr[3] = $("#money4").val();
+            countmoneyArr[0]= $(prefix+"_"+1).val();
+            countmoneyArr[1]= $(prefix+"_"+2).val();
+            countmoneyArr[2]= $(prefix+"_"+3).val();
+            countmoneyArr[3]= $(prefix+"_"+4).val();
+            for(var k=0;k<4;k++){
+                if (isNumber(countmoneyArr[k])){
+                    if(moneyArr[k]==""){
+                        moneyArr[k] = parseFloat(countmoneyArr[k]).toFixed(2);
+                    }else {
+                        moneyArr[k] = (parseFloat(moneyArr[k]) - parseFloat(countmoneyArr[k])).toFixed(2);
+                    }
+                }
+			}
+
+            if(moneyArr[0]>=0&&moneyArr[1]>=0&&moneyArr[2]>=0&&moneyArr[3]>=0){
+                count++;
+                $("#money1").val(moneyArr[0]);
+                $("#money2").val(moneyArr[1]);
+                $("#money3").val(moneyArr[2]);
+                $("#money4").val(moneyArr[3]);
+                var delFlag = $(prefix+"_delFlag");
+                if (id.val() == ""){
+                    delFlag.val("1");
+                    $(obj).parent().parent().remove();
+                }else if(delFlag.val() == "0"){
+                    delFlag.val("1");
+                    $(obj).html("&divide;").attr("title", "撤销删除");
+                    $(obj).parent().parent().addClass("error");
+                    $(obj).parent().parent().addClass("hide");
+                }else if(delFlag.val() == "1"){
+                    delFlag.val("0");
+                    $(obj).html("&times;").attr("title", "删除");
+                    $(obj).parent().parent().removeClass("error");
+                }
+            }else{
+                parent.layer.msg('删除失败',{icon:2});
+            }
+
+        }
+
+        function getMoney(value,j){
+            var money = "0.00";
+            //方法一使用id选择器进行计算。
+            //获取输入的数字
+            //自动计算出结果并填充在相应的输入框中
+            var size = $("#workMonthlyPlanThisList tr").length+count;
+
+            for (var i = 0;i<size;i++){
+                var _annualCollectionPlan = $("#workMonthlyPlanThisList"+i+"_"+j).val();
+
+                var delFlag = $("#workMonthlyPlanThisList"+i+"_delFlag").val();
+                if (_annualCollectionPlan!=undefined && isNumber(_annualCollectionPlan) && delFlag==0){
+                    if(money==""){
+                        money = parseFloat(_annualCollectionPlan).toFixed(2);
+                    }else {
+                        money = (parseFloat(money) + parseFloat(_annualCollectionPlan)).toFixed(2);
+                    }
+                }
+            }
+            if (money!='0.00') {
+                $("#money"+j).val(money);
+            }
+        }
+        //年度收款计划-本月之前已收账款-本月计划收款
+        function setMoney(v,i){
+            var sunMoney=0;
+            var size = $("#workMonthlyPlanThisList tr").length;
+            var  td1=$("#workMonthlyPlanThisList"+i+"_1").val();
+            var  td2=$("#workMonthlyPlanThisList"+i+"_2").val();
+            var  td4=$("#workMonthlyPlanThisList"+i+"_4").val();
+            if(isNumber(td1)&& isNumber(td2)&& isNumber(td4)){
+                var  td3=parseFloat(td1)-parseFloat(td2)-parseFloat(td4);
+                $("#workMonthlyPlanThisList"+i+"_3").val(td3);
+                $("#workMonthlyPlanThisList"+i+"_3").change();
+
+            }
+
+        }
+        function isNumber(val){
+            if(val === "" || val ==null){
+                return false;
+            }
+            var regPos = /^\d+(\.\d+)?$/; //非负浮点数
+            var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
+            if(regPos.test(val) || regNeg.test(val)){
+                return true;
+            }else{
+                return false;
+            }
+
+        }
+        function setClientInfo(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workmonthlyplan/workMonthlyPlan/getWorkMonthlyPlanThis',
+                data:{
+                    "id":obj.id
+                },
+                success:function(data){
+                    for (var i=0; i<data.workMonthlyPlanThisList.length; i++){
+                        addRow('#workMonthlyPlanThisList', workMonthlyPlanThisListRowIdx, workMonthlyPlanThisListTpl,data.workMonthlyPlanThisList[i]);
+                        $(":input.money").change();
+                    }
+
+                }
+            })
+
+        }
+	</script>
+	<style>
+		/*超过5个汉字,调整label的长度,以下是配套的*/
+		.layui-item .layui-form-label{
+			width:90px;
+		}
+		.form-group .layui-item .layui-input-block,
+		.query .layui-input-block {
+			margin-left: 116px;
+		}
+	</style>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workMonthlyPlan" action="${ctx}/workMonthlyPlan/workMonthlyPlan/save" method="post" class="form-horizontal" >
+			<form:hidden path="id"/>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>计划月份:</label>
+					<div class="layui-input-block">
+						<input id="planMonthly" name="planMonthly" type="text"  maxlength="20"  class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workMonthlyPlan.planMonthly}" pattern="yyyy-MM"/>"/>
+
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<form:input path="officeName" htmlEscape="false"  readonly="true" id="officeName"  class="form-control required layui-input" value = "${workMonthlyPlan.officeName}"/>
+						<input type="hidden" id="officeId" name="officeId" value="${workMonthlyPlan.officeId}">
+                        <input type="hidden" id="companyId" name="companyId" value="${workMonthlyPlan.companyId}">
+					</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"  readonly="true" id="name"  class="form-control required layui-input" value="${workMonthlyPlan.name}"/>
+					</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" type="text"  maxlength="20" class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workMonthlyPlan.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="planStatus" htmlEscape="false"  readonly="true" id="planStatus"  class="form-control required layui-input" value="${workMonthlyPlan.planStatus}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">修改日期:</label>
+					<div class="layui-input-block">
+
+						<input id="updateDate" name="updateDate" type="text"  readonly="true"  maxlength="20" class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workMonthlyPlan.updateDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>--%>
+				</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>本月计划表</h2></div>
+				<div class="layui-item nav-btns">
+
+					<a class="nav-btn nav-btn-add" onclick="addRow('#workMonthlyPlanThisList', workMonthlyPlanThisListRowIdx, workMonthlyPlanThisListTpl);workMonthlyPlanThisListRowIdx = workMonthlyPlanThisListRowIdx + 1;" title="新增"><i class="fa fa-plus"></i>&nbsp;新增</a>
+					<sys:gridselectPlan url="${ctx}/workmonthlyplan/workMonthlyPlan/selectcontentData" id="contentData" title="选择历史计划" fieldLabels="" fieldKeys=""  searchLabel="" searchKey="name"></sys:gridselectPlan>
+
+				</div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px"><font color="red">*</font>委托方</th>
+							<th width="200px"><font color="red">*</font>年度收款计划(元)</th>
+							<th width="150px"><font color="red">*</font>本月前已收账款</th>
+							<th width="200x">剩余计划(元)</th>
+							<th width="200x">本月计划收款(元)</th>
+							<th width="100px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="workMonthlyPlanThisList">
+						<c:if test="${not empty workMonthlyPlan.workMonthlyPlanThisList}">
+							<c:forEach items="${workMonthlyPlan.workMonthlyPlanThisList}" var="workMonthlyPlanThis" varStatus="index">
+								<tr id="workMonthlyPlanThisList${index.index}">
+									<td class="hide">
+										<input id="workMonthlyPlanThisList${index.index}_id" name="workMonthlyPlanThisList[${index.index}].id" type="hidden" value="${workMonthlyPlanThis.id}"/>
+										<input id="workMonthlyPlanThisList${index.index}_delFlag" name="workMonthlyPlanThisList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										    <sys:gridselectsInfo url="${ctx}/workclientinfo/workClientInfo/linkmanList" id="workMonthlyPlanThisList${index.index}_workClientInfoId" name="workMonthlyPlanThisList[${index.index}].workClientInfoId"  title="选择客户" value="${workMonthlyPlanThis.workClientInfoId}" labelValue="${workMonthlyPlanThis.clientName}"
+																 labelName="workMonthlyPlanThisList[${index.index}].clientName" cssClass="form-control required" fieldLabels="联系人" fieldKeys="name"  searchLabel="联系人" searchKey="name"></sys:gridselectsInfo>
+									</td>
+									<td>
+										<input id="workMonthlyPlanThisList${index.index}_1" onblur="setMoney(this.value,${index.index})"  onchange="getMoney(this.value,'1')"   name="workMonthlyPlanThisList[${index.index}].annualCollectionPlan" type="text" value="${workMonthlyPlanThis.annualCollectionPlan}"   class="form-control required"/>
+									</td>
+
+									<td>
+										<input id="workMonthlyPlanThisList${index.index}_2" onblur="setMoney(this.value,${index.index})"  onchange="getMoney(this.value,'2')"  name="workMonthlyPlanThisList[${index.index}].beforeThisMonthMoney" type="text" value="${workMonthlyPlanThis.beforeThisMonthMoney}"     class="form-control number required"/>
+									</td>
+									<td>
+										<input id="workMonthlyPlanThisList${index.index}_3" onchange="getMoney(this.value,'3')"  name="workMonthlyPlanThisList[${index.index}].remainingPlan" type="text" value="${workMonthlyPlanThis.remainingPlan}" readonly="true"   class="form-control"/>
+									</td>
+									<td>
+										<input id="workMonthlyPlanThisList${index.index}_4" onblur="setMoney(this.value,${index.index})"  onchange="getMoney(this.value,'4')"  name="workMonthlyPlanThisList[${index.index}].thisMonthPlanMoney" type="text" value="${workMonthlyPlanThis.thisMonthPlanMoney}"    class="form-control"/>
+									</td>
+									<td class="text-center op-td" >
+										<span class="op-btn op-btn-delete" onclick="delRow(this, '#workMonthlyPlanThisList${index.index}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+					<table id="contentMoneys" class="table table-bordered table-condensed can-edit summary">
+						<tr>
+							<td width="200px" style="vertical-align:middle;text-align: center;"><label><font color="red">*</font>合计(元):</label></td>
+							<td  width="200px">
+								<form:input path="yearSumMoney" id="money1"  htmlEscape="false" readonly="true"   class="form-control required"/>
+							</td>
+							<td  width="150px">
+								<form:input path="beforeSumMoney" id="money2"  htmlEscape="false" readonly="true"   class="form-control required"/>
+							</td>
+							<td  width="200px">
+								<form:input path="remainingSumMoney" id="money3"  htmlEscape="false" readonly="true"   class="form-control required"/>
+							</td>
+							<td  width="200px">
+								<form:input path="thisSumMoney" id="money4"  htmlEscape="false" readonly="true"   class="form-control required"/>
+							</td>
+							<td  width="100px">
+								<form:input path="" id="" htmlEscape="false" readonly="true"   class="form-control"/>
+							</td>
+						</tr>
+					</table>
+					<script type="text/template" id="workMonthlyPlanThisListTpl">//<!--
+                                    <tr id="workMonthlyPlanThisList{{idx}}">
+                                        <td class="hide">
+                                            <input id="workMonthlyPlanThisList{{idx}}_id" name="workMonthlyPlanThisList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                            <input id="workMonthlyPlanThisList{{idx}}_delFlag" name="workMonthlyPlanThisList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                        <td>
+
+                       <%-- <sys:gridselectclien1 url="${ctx}/workcontractinfo/workContractInfo/selectclientAhref" id="workMonthlyPlanThisList[{{idx}}].workClientInfoId" name="workMonthlyPlanThisList[{{idx}}].workClientInfoId"  value="${workContractInfo.client.id}"  title="选择客户" labelName="client.name"
+                                              labelValue="${workContractInfo.client.name}" cssClass="form-control layui-input required" fieldLabels="客户名称" fieldKeys="name" searchLabel="客户名称" searchKey="name" searchLabel1="联系人" searchKey1="workLinkName"></sys:gridselectclien1>--%>
+                                       <sys:gridselectsInfo url="${ctx}/workclientinfo/workClientInfo/linkmanList" id="workMonthlyPlanThisList{{idx}}_workClientInfoId" name="workMonthlyPlanThisList[{{idx}}].workClientInfoId"  title="选择客户" value="{{row.workClientInfoId}}" labelValue="{{row.clientName}}"
+																 labelName="workMonthlyPlanThisList[{{idx}}].clientName" cssClass="form-control required" fieldLabels="联系人" fieldKeys="name"  searchLabel="联系人" searchKey="name"></sys:gridselectsInfo>
+                                        </td>
+                                        <td>
+                                            <input id="workMonthlyPlanThisList{{idx}}_1" onblur="setMoney(this.value,{{idx}})"  onchange="getMoney(this.value,'1')"  name="workMonthlyPlanThisList[{{idx}}].annualCollectionPlan" type="text" value="{{row.annualCollectionPlan}}"  placeholder="请输入年度收款计划"  class="form-control number required money"/>
+                                        </td>
+
+                                        <td>
+                                            <input id="workMonthlyPlanThisList{{idx}}_2" onblur="setMoney(this.value,{{idx}})" onchange="getMoney(this.value,2)" name="workMonthlyPlanThisList[{{idx}}].beforeThisMonthMoney" type="text" value="{{row.beforeThisMonthMoney}}"  placeholder="请输入本月前已收账款"  class="form-control number required money"/>
+                                        </td>
+                                        <td>
+                                            <input id="workMonthlyPlanThisList{{idx}}_3" onchange="getMoney(this.value,3)" name="workMonthlyPlanThisList[{{idx}}].remainingPlan" type="text" value="{{row.remainingPlan}}"  placeholder="请输入剩余计划" readonly="true" class="form-control number money"/>
+                                        </td>
+                                     <td>
+                                            <input id="workMonthlyPlanThisList{{idx}}_4" onblur="setMoney(this.value,{{idx}})"  onchange="getMoney(this.value,4)" name="workMonthlyPlanThisList[{{idx}}].thisMonthPlanMoney" type="text" value="{{row.thisMonthPlanMoney}}"  placeholder="请输入本月计划收款(元)"  class="form-control number money"/>
+                                        </td>
+                                        <td class="text-center op-td" >
+                                            {{#delBtn}}<span class="op-btn op-btn-delete" onclick="delRow(this, '#workMonthlyPlanThisList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+                        var workMonthlyPlanThisListRowIdx = 0, workMonthlyPlanThisListTpl = $("#workMonthlyPlanThisListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+
+                        if($("#id").val()){
+                            workMonthlyPlanThisListRowIdx = ${fn:length(workMonthlyPlan.workMonthlyPlanThisList)};
+
+                        }
+                        $(document).ready(function() {
+
+                        });
+					</script>
+				</div>
+			</div>
+
+
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+
+</body>
+</html>

+ 202 - 0
src/main/webapp/webpage/modules/workmonthlyplan/workMonthlyPlanFormView.jsp

@@ -0,0 +1,202 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>报销单管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        var count = 0;
+        $(document).ready(function() {
+
+            /*if($("#createDate").val()==null || $("#createDate").val()==''){
+                $("#createDate").val(getNowFormatDate());
+            }
+            if($("#planMonthly").val()==null || $("#planMonthly").val()==''){
+                $("#planMonthly").val(getNowFormatDateMon());
+
+            }*/
+
+
+
+          /*  laydate.render({
+                elem: '#planMonthly', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                format: 'yyyy-MM',
+                type : 'date'
+            });*/
+           /* laydate.render({
+                elem: '#createDate', //目标元素。由于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 getNowFormatDateMon() {
+            var date = new Date();
+            var seperator1 = "-";
+            var month = date.getMonth() + 1;
+            month = (month < 10)?"0"+month:month;
+            var currentdate = date.getFullYear() + seperator1 + month;
+            return currentdate;
+        }
+
+	</script>
+	<style>
+		/*超过5个汉字,调整label的长度,以下是配套的*/
+		.layui-item .layui-form-label{
+			width:90px;
+		}
+		.form-group .layui-item .layui-input-block,
+		.query .layui-input-block {
+			margin-left: 116px;
+		}
+	</style>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<form:form id="inputForm" modelAttribute="workMonthlyPlan" action="${ctx}/workMonthlyPlan/workMonthlyPlan/save" method="post" class="form-horizontal" >
+			<form:hidden path="id"/>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>计划月份:</label>
+					<div class="layui-input-block">
+						<input id="planMonthly" name="planMonthly" type="text" readonly="true"  maxlength="20"  class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workMonthlyPlan.planMonthly}" pattern="yyyy-MM"/>"/>
+
+					</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="officeName" htmlEscape="false"  readonly="true" id="officeName"  class="form-control layui-input" value = "${workMonthlyPlan.officeName}"/>
+							<input type="hidden" id="officeId" name="officeId" value="${workMonthlyPlan.officeId}">
+							<input type="hidden" id="companyId" name="companyId" value="${workMonthlyPlan.companyId}">
+							<span class="input-group-btn">
+                            <label class="form-status"><c:if test="${workMonthlyPlan.planStatus eq '0'}">未审定</c:if> <c:if test="${workMonthlyPlan.planStatus eq '1'}">已审定</c:if></label>
+                         </span>
+						</div>
+						<%--<form:input path="officeName" htmlEscape="false"  readonly="true" id="officeName"  class="form-control required layui-input" value = "${workMonthlyPlan.officeName}"/>
+						<input type="hidden" id="officeId" name="officeId" value="${workMonthlyPlan.officeId}">
+                        <input type="hidden" id="companyId" name="companyId" value="${workMonthlyPlan.companyId}">--%>
+					</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"  readonly="true" id="name"  class="form-control required layui-input" value="${workMonthlyPlan.name}"/>
+					</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" type="text" readonly="true"  maxlength="20" class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workMonthlyPlan.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 path="planStatus" htmlEscape="false"  readonly="true" id="planStatus"  class="form-control required layui-input"  <c:if test="${workMonthlyPlan.planStatus eq '0'}">value="未审定"</c:if> <c:if test="${workMonthlyPlan.planStatus eq '1'}">value="已审定"</c:if>/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">修改日期:</label>
+					<div class="layui-input-block">
+
+						<input id="updateDate" name="updateDate" type="text"  readonly="true"  maxlength="20" class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workMonthlyPlan.updateDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>--%>
+				</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>本月计划表</h2></div>
+
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px">委托方</th>
+							<th width="200px">年度收款计划(元)</th>
+							<th width="150px">本月前已收账款</th>
+							<th width="200x">剩余计划(元)</th>
+							<th width="200x">本月计划收款(元)</th>
+						</tr>
+						</thead>
+						<tbody id="workMonthlyPlanThisList">
+						<c:if test="${not empty workMonthlyPlan.workMonthlyPlanThisList}">
+							<c:forEach items="${workMonthlyPlan.workMonthlyPlanThisList}" var="workMonthlyPlanThis" varStatus="index">
+								<tr id="workMonthlyPlanThisList${index.index}">
+									<td class="hide">
+										<input id="workMonthlyPlanThisList${index.index}_id" name="workMonthlyPlanThisList[${index.index}].id" type="hidden" value="${workMonthlyPlanThis.id}"/>
+										<input id="workMonthlyPlanThisList${index.index}_delFlag" name="workMonthlyPlanThisList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										<input id="workMonthlyPlanThisList${index.index}_clientName" name="workMonthlyPlanThisList[${index.index}].clientName" type="text" value="${workMonthlyPlanThis.clientName}"/>
+									</td>
+									<td>
+										<input id="workMonthlyPlanThisList${index.index}_annualCollectionPlan"   name="workMonthlyPlanThisList[${index.index}].annualCollectionPlan" type="text" value="${workMonthlyPlanThis.annualCollectionPlan}"   class="form-control required"/>
+									</td>
+
+									<td>
+										<input id="workMonthlyPlanThisList${index.index}_beforeThisMonthMoney"  name="workMonthlyPlanThisList[${index.index}].beforeThisMonthMoney" type="text" value="${workMonthlyPlanThis.beforeThisMonthMoney}"     class="form-control number required"/>
+									</td>
+									<td>
+										<input id="workMonthlyPlanThisList${index.index}_remainingPlan"  name="workMonthlyPlanThisList[${index.index}].remainingPlan" type="text" value="${workMonthlyPlanThis.remainingPlan}"    class="form-control"/>
+									</td>
+									<td>
+										<input id="workMonthlyPlanThisList${index.index}_thisMonthPlanMoney"  name="workMonthlyPlanThisList[${index.index}].thisMonthPlanMoney" type="text" value="${workMonthlyPlanThis.thisMonthPlanMoney}"    class="form-control"/>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+					<table id="contentMoneys" class="table table-bordered table-condensed can-edit summary">
+						<tr>
+							<td width="200px" style="vertical-align:middle;text-align: center;"><label><font color="red">*</font>合计(元):</label></td>
+							<td  width="200px">
+								<form:input path="yearSumMoney" id="money1"  htmlEscape="false" readonly="true"   class="form-control required"/>
+							</td>
+							<td  width="150px">
+								<form:input path="beforeSumMoney" id="money2"  htmlEscape="false" readonly="true"   class="form-control required"/>
+							</td>
+							<td  width="200px">
+								<form:input path="remainingSumMoney" id="money3"  htmlEscape="false" readonly="true"   class="form-control required"/>
+							</td>
+							<td  width="200px">
+								<form:input path="thisSumMoney" id="money4"  htmlEscape="false" readonly="true"   class="form-control required"/>
+							</td>
+
+						</tr>
+					</table>
+
+
+				</div>
+			</div>
+
+
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+
+</body>
+</html>

+ 319 - 0
src/main/webapp/webpage/modules/workmonthlyplan/workMonthlyPlanList.jsp

@@ -0,0 +1,319 @@
+<%@ page import="com.jeeplus.modules.sys.utils.UserUtils" %>
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>计划管理</title>
+	<meta name="decorator" content="default"/>
+
+
+	<style>
+		.widthClass{
+			display: inline-block;
+		}
+		.shows .input-group{
+			width: 48%!important;
+		}
+	</style>
+	<style>
+		body{
+			background-color:transparent;
+			filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+			color:#ffffff;
+			background-color:rgba(255,255,255,0);
+			height:100%;
+		}
+	</style>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+	<sys:message content="${message}"/>
+	<div class="layui-row">
+		<div class="full-width fl">
+			<div class="contentShadow layui-row" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="workMonthlyPlan" action="${ctx}/workmonthlyplan/workMonthlyPlan/" method="post" class="form-inline">
+					<%--以下三行照抄--%>
+					<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+					<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+					<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+					<div class="commonQuery">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">计划月份:</label>
+							<div class="layui-input-block">
+								<input id="planMonthly" name="planMonthly" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon"
+									   value="<fmt:formatDate value="${workMonthlyPlan.planMonthly}" pattern="yyyy-MM"/>"/>
+								</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="officeId" name="officeId" value="${workMonthlyPlan.officeId}" labelName="officeName" labelValue="${workMonthlyPlan.officeName}"
+												title="部门" url="/sys/office/treeDataAll?type=2" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
+							</div>
+						</div>
+						<div class="layui-item athird">
+							<div class="input-group">
+								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+								<button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()()">重置</button>
+								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" style="clear:both;display:none;">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">计划状态:</label>
+							<div class="layui-input-block">
+								<form:select path="planStatus" class="form-control simple-select">
+									<form:option value="" label=""/>
+									<form:option value="0" label="未审定"/>
+									<form:option value="1" label="已审定"/>
+								</form:select>
+							</div>
+						</div>
+
+						<div style="clear:both;"></div>
+					</div>
+				</form:form>
+			</div>
+		</div>
+
+		<div class="full-width fl">
+			<div class="contentShadow layui-form contentDetails">
+				<div class="nav-btns">
+					<%--此处按钮样式包括 nav-btn-add nav-btn-refresh nav-btn-import nav-btn-export nav-btn-query nav-btn-reset--%>
+					<shiro:hasPermission name="workmonthlyplan:workMonthlyPlan:add">
+						<button class="nav-btn nav-btn-add" title="月计划管理" onclick="openDialogreadd('月计划管理','${ctx}/workmonthlyplan/workMonthlyPlan/form?tabId=2','95%','95%')"><i class="fa fa-plus"></i>&nbsp;添加</button>
+					</shiro:hasPermission>
+					<%--<shiro:hasPermission name="workmonthlyplan:workMonthlyPlan:export">--%>
+							<table:exportExcel url="${ctx}/workmonthlyplan/workMonthlyPlan/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>
+<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:'planMonthly',align:'center',width:100, sort: true, title: '计划月份',templet:function(d){
+                        var xml = "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看月计划管理', '${ctx}/workmonthlyplan/workMonthlyPlan/form?id=" + d.id + "&tabId=1','95%','95%')\">"+
+                            "<span title=" + d.planMonthly + ">" + d.planMonthly + "</span></a>" ;
+                        return xml;
+                    }},
+                {field:'officeName',align:'center',  title: '所属部门',minWidth:100}
+                ,{field:'estimatePrice',align:'center', title: '合同预计收费', minWidth:140}
+                ,{field:'accumulativePrice',align:'center', title: '合同累计收费', minWidth:140}
+                ,{field:'yearSumMoney',align:'center', title: '本年度预计收费', minWidth:140}
+                ,{field:'beforeSumMoney',align:'center', title: '本年度已收费', minWidth:140}
+                ,{field:'thisSumMoney', align:'center',minWidth:140,title: '本月计划收费'}
+                ,{field:'planStatus', align:'center',title: '计划状态',width:100}
+                ,{align:'caozuo',align:'center',title:"操作",width:180,templet:function(d){
+                        ////对操作进行初始化
+                        var xml = "";
+                        if(d.canedit != undefined && d.canedit == "1"){
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreadd('修改计划管理', '${ctx}/workmonthlyplan/workMonthlyPlan/form?id="+ d.id + "&tabId=3','95%','95%')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>"
+                        }
+                        if(d.canmodify != undefined && d.canmodify == "1"){
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogre('审定计划管理', '${ctx}/workmonthlyplan/workMonthlyPlan/form?id="+ d.id + "&tabId=3','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}/workmonthlyplan/workMonthlyPlan/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="workMonthlyPlan" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "id":"${workMonthlyPlan.id}"
+                    ,"planMonthly":"<fmt:formatDate value="${workMonthlyPlan.planMonthly}" pattern="yyyy-MM"/>"
+                    ,"officeName":"${workMonthlyPlan.officeName}"
+                    ,"estimatePrice":"<fmt:formatNumber value="${workMonthlyPlan.estimatePrice}"/>"
+                    ,"accumulativePrice":"<fmt:formatNumber value="${workMonthlyPlan.accumulativePrice}" />"
+                    ,"yearSumMoney":"<fmt:formatNumber value="${workMonthlyPlan.yearSumMoney}"/>"<%-- pattern="#,#00.00"--%>
+                    ,"beforeSumMoney":"<fmt:formatNumber value="${workMonthlyPlan.beforeSumMoney}" />"
+					,"thisSumMoney":"<fmt:formatNumber value="${workMonthlyPlan.thisSumMoney}" />"
+					,"planStatus":<c:if test="${workMonthlyPlan.planStatus eq '0'}">"未审定"</c:if> <c:if test="${workMonthlyPlan.planStatus eq '1'}">"已审定"</c:if>
+                    <c:if test="${workMonthlyPlan.planStatus eq '0'}">
+                    <shiro:hasPermission name="workmonthlyplan:workMonthlyPlan:edit">
+					,"canedit":"1"
+                    </shiro:hasPermission>
+                    <shiro:hasPermission name="workmonthlyplan:workMonthlyPlan:review">
+                    ,"canmodify":"1"
+                    </shiro:hasPermission>
+                    <shiro:hasPermission name="workmonthlyplan:workMonthlyPlan:del">
+					,"candelete":"1"
+					</shiro:hasPermission>
+                    </c:if>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+<script type="text/javascript">
+    $(document).ready(function() {
+
+        laydate.render({
+            elem: '#planMonthly', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+            event: 'click',
+            type : 'month'
+        });
+    });
+    //搜索框收放
+    $('#moresee').click(function(){
+        if($('#moresees').is(':visible'))
+        {
+            $('#moresees').slideUp(0,resizeListWindow1);
+            $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+        }else{
+            $('#moresees').slideDown(0,resizeListWindow1);
+            $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+        }
+    });
+    function switchInput(obj){
+        $("#"+obj).show();
+        $("#"+obj).siblings().hide();
+    }
+    function reset(){
+        $("#searchForm").reset();
+    }
+    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 openDialogreadd(title,url,width,height,target){
+
+        if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+            width='auto';
+            height='auto';
+        }else{//如果是PC端,根据用户设置的width和height显示。
+
+        }
+        top.layer.open({
+            type: 2,
+            area: [width, height],
+            title: title,
+            skin: 'tow-btns',
+            maxmin: true, //开启最大化最小化按钮
+            content: url ,
+            btn: ['提交','关闭'],
+            yes: function(index, layero){
+                var body = top.layer.getChildFrame('body', index);
+                var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                var inputForm = body.find('#inputForm');
+                var top_iframe;
+                if(target){
+                    top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                }else{
+                    top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                }
+                inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                if(iframeWin.contentWindow.doSubmit(2) ){
+                    top.layer.close(index);//关闭对话框。
+                    setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                }
+            },
+           /* btn2:function(index,layero){
+                var body = top.layer.getChildFrame('body', index);
+                var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                var inputForm = body.find('#inputForm');
+                var top_iframe;
+                if(target){
+                    top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                }else{
+                    top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                }
+                inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                if(iframeWin.contentWindow.doSubmit(2) ){
+                    top.layer.close(index);//关闭对话框。
+                    setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                }
+                return false;
+            },*/
+            btn3: function(index){
+            }
+        });
+    }
+
+</script>
+</body>
+</html>

+ 105 - 0
src/main/webapp/webpage/modules/workmonthlyplan/workMonthlyPlanQuote.jsp

@@ -0,0 +1,105 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        $(document).ready(function() {
+
+            $('#contentTable thead tr th input.i-checks').on('ifChecked', function(event){ //ifCreated 事件应该在插件初始化之前绑定
+                $('#contentTable tbody tr td input.i-checks').iCheck('check');
+            });
+
+            $('#contentTable thead tr th input.i-checks').on('ifUnchecked', function(event){ //ifCreated 事件应该在插件初始化之前绑定
+                $('#contentTable tbody tr td input.i-checks').iCheck('uncheck');
+            });
+        });
+
+        function getSelectedItem(){
+
+            var size = $("#contentTable tbody tr td input.i-checks:checked").size();
+            if(size == 0 ){
+                top.layer.alert('请至少选择一条数据!', {icon: 0, title:'警告'});
+                return "-1";
+            }
+
+            if(size > 1 ){
+                top.layer.alert('只能选择一条数据!', {icon: 0, title:'警告'});
+                return "-1";
+            }
+            var id =  $("#contentTable tbody tr td input.i-checks:checkbox:checked").attr("id");
+            var number = $("#contentTable tbody tr td input.i-checks:checkbox:checked").parent().parent().parent().find(".codelabel1").html();
+            var name = $("#contentTable tbody tr td input.i-checks:checkbox:checked").parent().parent().parent().find(".codelabel2").html();
+            var typeName = $("#contentTable tbody tr td input.i-checks:checkbox:checked").parent().parent().parent().find(".codelabel3").html();
+            var masterName = $("#contentTable tbody tr td input.i-checks:checkbox:checked").parent().parent().parent().find(".codelabel4").html();
+            var createDate = $("#contentTable tbody tr td input.i-checks:checkbox:checked").parent().parent().parent().find(".codelabel5").html();
+            var masterId = $("#contentTable tbody tr td input.i-checks:checkbox:checked").parent().parent().parent().find(".codelabel6").html();
+            var type = $("#contentTable tbody tr td input.i-checks:checkbox:checked").parent().parent().parent().find(".codelabel7").html();
+            return {'id':id,'name':name,'number':number,'master':{'name':masterName,'id':masterId},'typeName':typeName,'type':type,'createDate':createDate};
+        }
+        function page(n,s){
+            if(n) $("#pageNo").val(n);
+            if(s) $("#pageSize").val(s);
+            $("#searchForm").attr("action","${url}");
+            $("#searchForm").submit();
+            return false;
+        }
+	</script>
+</head>
+<body class="gray-bg">
+<div class="">
+	<div class="ibox-content">
+		<!-- 查询条件 -->
+		<table id="contentTable" class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+			<thead>
+			<tr>
+				<th></th>
+				<th  class="sort-column planMonthly">计划月份</th>
+				<th  class=" officeName">所属部门</th>
+				<th  class=" estimatePrice">合同预计收费</th>
+				<th  class=" accumulativePrice">合同累计收费</th>
+				<th  class=" yearSumMoney">本年度预计收费</th>
+				<th  class=" beforeSumMoney">本年度已收费</th>
+				<th  class=" thisSumMoney">本月计划收费</th>
+			</tr>
+			</thead>
+			<tbody>
+			<c:forEach items="${list}" var="objPlan">
+				<tr>
+					<td style="text-align:center;"> <input type="checkbox" id="${objPlan.id}" class="i-checks"></td>
+					<td>
+						<fmt:formatDate value="${objPlan.planMonthly}" pattern="yyyy-MM"/>
+					</td>
+					<td>
+							${objPlan.officeName}
+					</td>
+					<td>
+						<fmt:formatNumber value="${objPlan.estimatePrice}"/>
+
+					</td>
+					<td>
+						<fmt:formatNumber value="${objPlan.accumulativePrice}" />
+
+					</td>
+					<td>
+						<fmt:formatNumber value="${objPlan.yearSumMoney}" />
+
+					</td>
+					<td>
+						<fmt:formatNumber value="${objPlan.beforeSumMoney}" />
+
+					</td>
+					<td>
+						<fmt:formatNumber value="${objPlan.thisSumMoney}" />
+					</td>
+				</tr>
+			</c:forEach>
+			</tbody>
+		</table>
+		<table:page page="${page}"></table:page>
+		<br/>
+		<br/>
+	</div>
+</div>
+</body>
+</html>

+ 210 - 0
src/main/webapp/webpage/modules/workofficechange/workOfficeChangeAudit.jsp

@@ -0,0 +1,210 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>调转部门管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(obj == 1){
+                    $('#flag').val('yes');
+                }else{
+                    $('#flag').val('no');
+                }
+                $("#inputForm").submit();
+                return true;
+            }
+
+            return false;
+        }
+        var validateForm;
+        var count = 0;
+        $(document).ready(function() {
+            if($("#changeDate").val()==null || $("#changeDate").val()==''){
+                $("#changeDate").val(getNowFormatDate());
+            }
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                rules:{
+                },
+                messages:{
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+        });
+
+        function getNowFormatDate() {
+            var date = new Date();
+            var seperator1 = "-";
+            var seperator2 = ":";
+            var month = date.getMonth() + 1;
+            var strDate = date.getDate();
+            month = (month < 10)?"0"+month:month;
+            strDate = (strDate < 10)?"0"+strDate:strDate;
+            var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate;
+            return currentdate;
+        }
+
+
+	</script>
+	<style>
+		/*超过5个汉字,调整label的长度,以下是配套的*/
+		.layui-item .layui-form-label{
+			width:90px;
+		}
+		.form-group .layui-item .layui-input-block,
+		.query .layui-input-block {
+			margin-left: 116px;
+		}
+	</style>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workOfficeChange" action="${ctx}/workofficechange/workOfficeChange/saveAudit" method="post" class="form-horizontal" >
+			<form:hidden path="id"/>
+			<form:hidden  path="changer"/>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>调入部门:</label>
+					<div class="layui-input-block">
+						<form:input id="changeOfficeName" readonly="true" path="changeOfficeName" 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">
+						<form:input id="roleName" readonly="true" path="roleName" htmlEscape="false" class="form-control   layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>调转编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<form:input path="number" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+							<span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty workOfficeChange.state}">${fns:getDictLabel(workOfficeChange.state, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>调转日期:</label>
+					<div class="layui-input-block">
+						<input id="changeDate" name="changeDate"  readonly="true" type="text"  maxlength="20" class="laydate-icondate form-control layer-date  layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workOfficeChange.changeDate}" 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="userName" readonly="true" path="userName" htmlEscape="false" class="form-control   layui-input"/>
+
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">调转事由:</label>
+					<div class="layui-input-block">
+						<form:textarea path="changeFor"  readonly="true" htmlEscape="false" rows="4"    maxlength="255" class="form-control "/>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>调转成员</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px">工号</th>
+							<th width="200px">姓名</th>
+							<th width="200px">部门</th>
+							<th width="200px">身份证号</th>
+							<th width="200px">员工状态</th>
+							<th width="200px">职级</th>
+							<th width="200px">新职级</th>
+						</tr>
+						</thead>
+						<tbody id="workOfficeChangeUserList">
+						<c:if test="${not empty workOfficeChange.workOfficeChangeUserList}">
+							<c:forEach items="${workOfficeChange.workOfficeChangeUserList}" var="workOfficeChangeUser" varStatus="index">
+								<tr id="workItemCollarCatalogList${index.index}">
+									<td class="hide">
+										<input id="workOfficeChangeUserList${index.index}_id" name="workOfficeChangeUserList[${index.index}].id" type="hidden" value="${workOfficeChangeUser.id}"/>
+										<input id="workOfficeChangeUserList${index.index}_basicInfoId" name="workOfficeChangeUserList[${index.index}].basicInfoId" type="hidden" value="${workOfficeChangeUser.basicInfoId}"/>
+										<input id="workOfficeChangeUserList${index.index}_userId" name="workOfficeChangeUserList[${index.index}].userId" type="hidden" value="${workOfficeChangeUser.userId}"/>
+										<input id="workOfficeChangeUserList${index.index}_after" name="workOfficeChangeUserList[${index.index}].jobGrade2.id" type="hidden" value="${workOfficeChangeUser.jobGrade2.id}"/>
+										<input id="workOfficeChangeUserList${index.index}_before" name="workOfficeChangeUserList[${index.index}].jobGrade1.id" type="hidden" value="${workOfficeChangeUser.jobGrade1.id}"/>
+										<input id="workOfficeChangeUserList${index.index}_delFlag" name="workOfficeChangeUserList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_1"  readonly="true"   type="text" value="${workOfficeChangeUser.workStaffBasicInfo.no}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_2"  readonly="true"   type="text" value="${workOfficeChangeUser.workStaffBasicInfo.name}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_3"  readonly="true"    type="text" value="${workOfficeChangeUser.workStaffBasicInfo.office.name}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_4"  readonly="true"    type="text" value="${workOfficeChangeUser.workStaffBasicInfo.idCard}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_5"  readonly="true"    type="text" value="${workOfficeChangeUser.workStaffBasicInfo.status}"  class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_6"  readonly="true"  name="workOfficeChangeUserList[${index.index}].jobGrade1.name"  type="text" value="${workOfficeChangeUser.jobGrade1.name}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_after"  readonly="true"  name="workOfficeChangeUserList[${index.index}].jobGrade2.name"  type="text" value="${workOfficeChangeUser.jobGrade2.name}"   class="form-control "/>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>审批意见</h2></div>
+				<div class="layui-item layui-col-xs12 with-textarea" >
+					<label class="layui-form-label">审批意见:</label>
+					<div class="layui-input-block">
+						<form:textarea path="act.comment" class="form-control" rows="4" maxlength="127" />
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>审批流程</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<act:flowChart procInsId="${workOfficeChange.act.procInsId}"/>
+					<act:histoicFlow procInsId="${workOfficeChange.act.procInsId}"/>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 487 - 0
src/main/webapp/webpage/modules/workofficechange/workOfficeChangeForm.jsp

@@ -0,0 +1,487 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>调转部门管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        var count = 0;
+        $(document).ready(function() {
+            checkContentKeyUp('changeFor',255);
+            if($("#changeDate").val()==null || $("#changeDate").val()==''){
+                $("#changeDate").val(getNowFormatDate());
+            }
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                rules:{
+                },
+                messages:{
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+         /*   laydate.render({
+                elem: '#changeDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                format: 'yyyy-MM-dd',
+                type : 'date'
+            });*/
+
+			$('#changeOfficeId').on("change",function(){
+				$("#roleId").empty()
+				var officeId = $(this).val()
+				$.ajax({
+					type: 'POST',
+					url: '${ctx}/sys/role/getByOfficeId',
+					data: {'id':officeId},
+					success: function(result){
+						var data1 = result.data
+						var html = "";
+						for (var e in data1) {
+							html += '<option value=' + data1[e].id+ '>' + data1[e].name + '</option>'
+						}
+						$("#roleId").append(html);
+					}
+				});
+			})
+
+        });
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            var idArr = $("#workOfficeChangeUserList tr:visible");
+            if(idArr.length<1){
+                parent.layer.msg("请选择调转成员!", {icon: 5});
+                return false;
+            }
+            if(obj == 2){
+                $("#inputForm").attr("action","${ctx}/workofficechange/workOfficeChange/store");
+            }else if(obj==1){
+                $("#inputForm").attr("action","${ctx}/workofficechange/workOfficeChange/save");
+            }else{
+                return false;
+			}
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }else {
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+
+            return false;
+        }
+
+        function deleteRow(obj,index){
+            $(obj).parent().parent().remove();
+            str[index] = " ";
+            mon[index] = 0;
+
+        }
+        function getNowFormatDate() {
+            var date = new Date();
+            var seperator1 = "-";
+            var seperator2 = ":";
+            var month = date.getMonth() + 1;
+            var strDate = date.getDate();
+            month = (month < 10)?"0"+month:month;
+            strDate = (strDate < 10)?"0"+strDate:strDate;
+            var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate;
+            return currentdate;
+        }
+
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workOfficeChangeUserList tr").length;
+            //tpl = tpl.replace("workMonthlyPlanThisList[0]_workClientInfoId","workMonthlyPlanThisList["+idx1+"].workClientInfoId");
+
+            bornTemplete(list, idx, tpl, row, idx1);
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+
+        }
+        function delRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            if (id.val() == ""){
+                delFlag.val("1");
+                $(obj).parent().parent().remove();
+            }else if(delFlag.val() == "0"){
+                delFlag.val("1");
+                $(obj).html("&divide;").attr("title", "撤销删除");
+                $(obj).parent().parent().addClass("error");
+                $(obj).parent().parent().addClass("hide");
+            }else if(delFlag.val() == "1"){
+                delFlag.val("0");
+                $(obj).html("&times;").attr("title", "删除");
+                $(obj).parent().parent().removeClass("error");
+            }
+        }
+
+
+        function isNumber(val){
+            if(val === "" || val ==null){
+                return false;
+            }
+            var regPos = /^\d+(\.\d+)?$/; //非负浮点数
+            var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
+            if(regPos.test(val) || regNeg.test(val)){
+                return true;
+            }else{
+                return false;
+            }
+
+        }
+        function hasInArr(id,idArr) {
+            for(var i=0;i<idArr.length;i++){
+                if(id==$(idArr[i]).val()){
+                    return true;
+                }
+            }
+            return false;
+        }
+        function setUserInfo(d){
+           $.ajax({
+                  type:'post',
+                  url:'${ctx}/workofficechange/workOfficeChange/getBasicInfo',
+                    data:{
+                        "ids":d
+                    },
+                    success:function(data){
+                        for(var i=0;i<data.length;i++){
+                            var idArr = $("#workOfficeChangeUserList tr:visible .basicInfoId");
+                            if(data[i].id!=''&&!hasInArr(data[i].id,idArr)){
+                                addRow('#workOfficeChangeUserList', workOfficeChangeUserListRowIdx, workOfficeChangeUserListTpl);
+                                workOfficeChangeUserListRowIdx = workOfficeChangeUserListRowIdx + 1;
+                            var row = workOfficeChangeUserListRowIdx - 1 ;
+                            $("#"+"workOfficeChangeUserList"+row+"_basicInfoId").val(data[i].id);
+                            $("#"+"workOfficeChangeUserList"+row+"_userId").val(data[i].userId);
+                            if(data[i].jobGrade!=null){
+                                $("#"+"workOfficeChangeUserList"+row+"_before").val(data[i].jobGrade.id);
+                                $("#"+"workOfficeChangeUserList"+row+"_6").val(data[i].jobGrade.name);
+							}
+                            $("#"+"workOfficeChangeUserList"+row+"_1").val(data[i].no);
+                            $("#"+"workOfficeChangeUserList"+row+"_2").val(data[i].name);
+                            $("#"+"workOfficeChangeUserList"+row+"_3").val(data[i].office.name);
+                            $("#"+"workOfficeChangeUserList"+row+"_4").val(data[i].idCard);
+                            $("#"+"workOfficeChangeUserList"+row+"_5").val(data[i].status);
+						}
+                        }
+                    }
+                });
+        }
+        function setExcelInfo(data){
+            for(var i=0;i<data.length;i++){
+                var idArr = $("#workOfficeChangeUserList tr:visible .basicInfoId");
+                if(data[i].id!=''&&!hasInArr(data[i].id,idArr)){
+                    addRow('#workOfficeChangeUserList', workOfficeChangeUserListRowIdx, workOfficeChangeUserListTpl);
+                    workOfficeChangeUserListRowIdx = workOfficeChangeUserListRowIdx + 1;
+                    var row = workOfficeChangeUserListRowIdx - 1 ;
+                    $("#"+"workOfficeChangeUserList"+row+"_basicInfoId").val(data[i].id);
+                    $("#"+"workOfficeChangeUserList"+row+"_userId").val(data[i].userId);
+                    if(data[i].jobGrade!=null){
+                        $("#"+"workOfficeChangeUserList"+row+"_before").val(data[i].jobGrade.id);
+                        $("#"+"workOfficeChangeUserList"+row+"_6").val(data[i].jobGrade.name);
+                    }
+                    $("#"+"workOfficeChangeUserList"+row+"_1").val(data[i].no);
+                    $("#"+"workOfficeChangeUserList"+row+"_2").val(data[i].name);
+                    $("#"+"workOfficeChangeUserList"+row+"_3").val(data[i].office.name);
+                    $("#"+"workOfficeChangeUserList"+row+"_4").val(data[i].idCard);
+                    $("#"+"workOfficeChangeUserList"+row+"_5").val(data[i].status);
+                    $("#"+"workOfficeChangeUserList"+row+"_afterId").val(data[i].bankName);
+                    $("#"+"workOfficeChangeUserList"+row+"_afterName").val(data[i].sqlStr);
+				}
+            }
+        }
+
+        function openDialogreUser(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: ['90%','90%'],
+                title:title,
+                skin:"two-btns",
+                name:'friend',
+                content: encodeURI("${ctx}/sys/office/gridSelectUser?url=${ctx}/sys/office/gridSelectUser&isAll=true&type=null&isSingle=false") ,
+                btn: ['确定', '关闭'],
+                yes: function(index, layero){
+                    var iframeWin = layero.find('iframe')[0].contentWindow; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var item = iframeWin.getSelectedItem();
+                    if(item == "-1"){
+                        return;
+                    }
+                    if(false){//单选
+                        selectUserInfo(item.userId);
+                    }else{//多选
+                        var ids = [], names = [];
+                        for (var i=0;i<item.length;i++){
+                            ids.push(item[i].id);
+                            names.push(item[i].name);
+                        }
+                        var arr=ids.join(",").replace(/u_/ig,"");
+                        setUserInfo(arr);
+                    }
+                    top.layer.close(index);//关闭对话框。
+
+                },
+                cancel: function(index){
+                }
+            });
+        }
+        function openDialogreExcel(title,url,width,height,target){
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 1,
+                area: [500, 300],
+                title:"导入数据",
+                skin: 'three-btns with-demo',
+                content:$("#importBox").html() ,
+                btn: ['下载模板','确定', '关闭'],
+                btn1: function(index, layero){
+                    window.location.href=url+'/template';
+                },
+                btn2: function(index, layero){
+                    var formData = new FormData();
+                    formData.append("file",top.$("#uploadFile")[0].files[0]);
+                    $.ajax({
+                        type: 'post',
+                        url:url,
+                        data: formData,
+                        dataType: "json",
+                        cache: false,
+                        processData: false,
+                        contentType: false,
+                    }).success(function (result) {
+                        setExcelInfo(result.data);
+                        top.layer.msg(result.message);
+                    }).error(function () {
+                        top.layer.msg("导入文件失败!");
+                    });
+                    top.layer.close(index);
+                },
+
+                btn3: function(index){
+                    top.layer.close(index);
+                }
+            });
+        }
+	</script>
+	<style>
+		/*超过5个汉字,调整label的长度,以下是配套的*/
+		.layui-item .layui-form-label{
+			width:90px;
+		}
+		.form-group .layui-item .layui-input-block,
+		.query .layui-input-block {
+			margin-left: 116px;
+		}
+	</style>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workOfficeChange" action="${ctx}/workofficechange/workOfficeChange/save" method="post" class="form-horizontal" >
+			<form:hidden path="id"/>
+			<form:hidden  path="changer"/>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>调入部门:</label>
+					<div class="layui-input-block with-icon">
+						<sys:treeselect id="changeOffice" name="changeOffice" value="${workOfficeChange.changeOffice}" labelName="changeOfficeName" labelValue="${workOfficeChange.changeOfficeName}"
+										title="部门" url="/sys/office/treeDataAllOffice?type=2" cssClass="form-control required layui-input" allowClear="true" notAllowSelectParent="true" />
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 ">
+					<label class="layui-form-label"><span class="require-item">*</span>岗位:</label>
+					<div class="layui-input-block ">
+						<select id="roleId" class="form-control simple-select required" name="roleId">
+						</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">
+						<div class="input-group">
+							<form:input path="number" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+							<span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty workOfficeChange.state}">${fns:getDictLabel(workOfficeChange.state, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>调转日期:</label>
+					<div class="layui-input-block">
+						<input id="changeDate" name="changeDate" readonly="true" type="text"  maxlength="20" class="laydate-icondate form-control layer-date  layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workOfficeChange.changeDate}" 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="userName" readonly="true" path="userName" htmlEscape="false" class="form-control   layui-input"/>
+
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>调转原因:</label>
+					<div class="layui-input-block">
+						<form:textarea path="changeFor" htmlEscape="false" rows="4" onkeyup="checkContentKeyUp('changeFor',255);"   maxlength="255" class="form-control required "/>
+					</div>
+					<span id="contentMsg" style="float: right"></span>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>调转成员</h2></div>
+				<div class="layui-item nav-btns" >
+					<%--<sys:gridSelectUser1 id="userId" name="userId" value="${workRegularApply.userId}" labelName="name" labelValue="${workRegularApply.workStaffBasicInfo.name}"
+										title="用户" url="${ctx}/sys/office/gridSelectUser" cssClass="form-control required layui-input" isAll="true" type="null"  isSingle="false"></sys:gridSelectUser1>--%>
+					<a href="javascript:void(0)" onclick="openDialogreUser('选择用户', '${ctx}/sys/office/gridSelectUser','90%','90%')" class="nav-btn nav-btn-add" ><i class="fa fa-plus"></i>&nbsp;选择</a>
+					<a href="javascript:void(0)" onclick="openDialogreExcel('导入数据', '${ctx}/workofficechange/workOfficeChangeUser/import','90%','90%')" class="nav-btn nav-btn-import" ><i class="fa fa-plus"></i>&nbsp;导入</a>
+						<%--<table:importExcelChangeOffice url="${ctx}/workofficechange/workOfficeChangeUser/import"></table:importExcelChangeOffice><!-- 导出按钮 -->--%>
+						<div id="importBox" class="hide">
+								<input id="uploadFile" name="file" type="file" style="width:330px"/>导入文件不能超过5M,仅允许导入“xls”或“xlsx”格式文件!<br/>  
+						</div>
+				</div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px">工号</th>
+							<th width="200px">姓名</th>
+							<th width="200px">部门</th>
+							<th width="200px">身份证号</th>
+							<th width="200px">员工状态</th>
+							<th width="200px">职级</th>
+							<th width="200px">新职级</th>
+							<th width="100px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="workOfficeChangeUserList">
+						<c:if test="${not empty workOfficeChange.workOfficeChangeUserList}">
+							<c:forEach items="${workOfficeChange.workOfficeChangeUserList}" var="workOfficeChangeUser" varStatus="index">
+								<tr id="workItemCollarCatalogList${index.index}">
+									<td class="hide">
+										<input id="workOfficeChangeUserList${index.index}_id" name="workOfficeChangeUserList[${index.index}].id" type="hidden" value="${workOfficeChangeUser.id}"/>
+										<input id="workOfficeChangeUserList${index.index}_basicInfoId" name="workOfficeChangeUserList[${index.index}].basicInfoId" type="hidden" value="${workOfficeChangeUser.basicInfoId}" class="basicInfoId"/>
+										<input id="workOfficeChangeUserList${index.index}_userId" name="workOfficeChangeUserList[${index.index}].userId" type="hidden" value="${workOfficeChangeUser.userId}"/>
+										<input id="workOfficeChangeUserList${index.index}_before" name="workOfficeChangeUserList[${index.index}].jobGrade1.id" type="hidden" value="${workOfficeChangeUser.jobGrade1.id}"/>
+										<input id="workOfficeChangeUserList${index.index}_delFlag" name="workOfficeChangeUserList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_1"  readonly="true"   type="text" value="${workOfficeChangeUser.workStaffBasicInfo.no}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_2"  readonly="true"   type="text" value="${workOfficeChangeUser.workStaffBasicInfo.name}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_3"  readonly="true"  name="workOfficeChangeUserList[${index.index}].workStaffBasicInfo.office.name"  type="text" value="${workOfficeChangeUser.workStaffBasicInfo.office.name}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_4"  readonly="true"    type="text" value="${workOfficeChangeUser.workStaffBasicInfo.idCard}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_5"  readonly="true"    type="text" value="${workOfficeChangeUser.workStaffBasicInfo.status}"  class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_6"  readonly="true"  name="workOfficeChangeUserList[${index.index}].jobGrade1.name"  type="text" value="${workOfficeChangeUser.jobGrade1.name}"   class="form-control "/>
+									</td>
+									<td>
+										<sys:treeselectJob id="workOfficeChangeUserList${index.index}_after" name="workOfficeChangeUserList[${index.index}].jobGrade2.id" value="${workOfficeChangeUser.jobGrade2.id}" labelName="workOfficeChangeUserList[${index.index}].jobGrade2.name" labelValue="${workOfficeChangeUser.jobGrade2.name}"
+														   title="职级类型" url="/workjobgrade/workJobGrade/treeData"  cssClass="form-control layui-input " allowClear="false" notAllowSelectParent="true"/>
+									</td>
+									<td class="text-center op-td" >
+										<span class="op-btn op-btn-delete" id="workOfficeChangeUserList${index.index}_span" onclick="delRow(this, '#workOfficeChangeUserList${index.index}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+					<script type="text/template" id="workOfficeChangeUserListTpl">//<!--
+                                    <tr id="workOfficeChangeUserList{{idx}}">
+                                        <td class="hide">
+                                            <input id="workOfficeChangeUserList{{idx}}_id" name="workOfficeChangeUserList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                            <input id="workOfficeChangeUserList{{idx}}_basicInfoId" name="workOfficeChangeUserList[{{idx}}].basicInfoId" type="hidden" value="{{row.workStaffBasicInfo.id}}" class="basicInfoId"/>
+                                            <input id="workOfficeChangeUserList{{idx}}_userId" name="workOfficeChangeUserList[{{idx}}].userId" type="hidden" value="{{row.workStaffBasicInfo.userId}}"/>
+                                            <input id="workOfficeChangeUserList{{idx}}_before" name="workOfficeChangeUserList[{{idx}}].jobGrade1.id" type="hidden" value="{{row.jobGrade1.id}}"/>
+                                            <input id="workOfficeChangeUserList{{idx}}_delFlag" name="workOfficeChangeUserList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                        <td>
+                                            <input id="workOfficeChangeUserList{{idx}}_1"   name="workOfficeChangeUserList[{{idx}}].workStaffBasicInfo.no" type="text" value="{{row.workStaffBasicInfo.no}}"  readonly="true"   class="form-control "/>
+                                        </td>
+                                        <td>
+                                            <input id="workOfficeChangeUserList{{idx}}_2"  name="workOfficeChangeUserList[{{idx}}].workStaffBasicInfo.name" type="text" value="{{row.workStaffBasicInfo.name}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workOfficeChangeUserList{{idx}}_3"  name="workOfficeChangeUserList[{{idx}}].workStaffBasicInfo.office.name" type="text" value="{{row.workStaffBasicInfo.office.name}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workOfficeChangeUserList{{idx}}_4"  name="workOfficeChangeUserList[{{idx}}].workStaffBasicInfo.idCard" type="text" value="{{row.workStaffBasicInfo.idCard}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workOfficeChangeUserList{{idx}}_5"  name="workOfficeChangeUserList[{{idx}}].workStaffBasicInfo.status" type="text" value="{{row.workStaffBasicInfo.status}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                        <td>
+                                            <input id="workOfficeChangeUserList{{idx}}_6"  name="workOfficeChangeUserList[{{idx}}].jobGrade1.name" type="text" value="{{row.jobGrade1.name}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <sys:treeselectJob id="workOfficeChangeUserList{{idx}}_after" name="workOfficeChangeUserList[{{idx}}].jobGrade2.id" value="${row.jobGrade2.id}" labelName="workOfficeChangeUserList[{{idx}}].jobGrade2.name" labelValue="${row.jobGrade2.name}"
+																title="职级类型" url="/workjobgrade/workJobGrade/treeData"  cssClass="form-control layui-input required" allowClear="true" notAllowSelectParent="true"/>
+                                        </td>
+                                        <td class="text-center op-td" >
+                                            {{#delBtn}}<span class="op-btn op-btn-delete" id="workOfficeChangeUserList{{idx}}_span" onclick="delRow(this, '#workOfficeChangeUserList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+                        var workOfficeChangeUserListRowIdx = ${fn:length(workOfficeChange.workOfficeChangeUserList)}, workOfficeChangeUserListTpl = $("#workOfficeChangeUserListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                        if($("#id").val()){
+                            workOfficeChangeUserListIdx = ${fn:length(workOfficeChange.workOfficeChangeUserList)};
+                        }
+                        $(document).ready(function() {
+                        });
+					</script>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 313 - 0
src/main/webapp/webpage/modules/workofficechange/workOfficeChangeList.jsp

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

+ 498 - 0
src/main/webapp/webpage/modules/workofficechange/workOfficeChangeModifyApply.jsp

@@ -0,0 +1,498 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>调转部门管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            var idArr = $("#workOfficeChangeUserList tr:visible");
+            if(idArr.length<1){
+                parent.layer.msg("请选择调转成员!", {icon: 5});
+                return false;
+            }
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }
+            return false;
+        }
+        var validateForm;
+        var count = 0;
+        $(document).ready(function() {
+            checkContentKeyUp('changeFor',255);
+            if($("#changeDate").val()==null || $("#changeDate").val()==''){
+                $("#changeDate").val(getNowFormatDate());
+            }
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                rules:{
+                },
+                messages:{
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+           /* laydate.render({
+                elem: '#changeDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                format: 'yyyy-MM-dd',
+                type : 'date'
+            });*/
+			var off = $("#changeOfficeId").val();
+			if(off != ''){
+				$.ajax({
+					type: 'POST',
+					url: '${ctx}/sys/role/getByOfficeId',
+					data: {'id':off},
+					success: function(result){
+						var role__id =  '${workOfficeChange.roleId}';
+						var data1 = result.data;
+						var html = "";
+						for (var e in data1) {
+							if(data1[e].id == role__id){
+								html += '<option value=' + data1[e].id+ ' selected>' + data1[e].name + '</option>'
+							}else{
+								html += '<option value=' + data1[e].id+ '>' + data1[e].name + '</option>'
+							}
+						}
+						$("#roleId").append(html);
+					}
+				});
+			}
+
+			$('#changeOfficeId').on("change",function(){
+				$("#roleId").empty()
+				var officeId = $(this).val()
+				$.ajax({
+					type: 'POST',
+					url: '${ctx}/sys/role/getByOfficeId',
+					data: {'id':officeId},
+					success: function(result){
+						var data1 = result.data
+						var html = "";
+						for (var e in data1) {
+							html += '<option value=' + data1[e].id+ '>' + data1[e].name + '</option>'
+						}
+						$("#roleId").append(html);
+					}
+				});
+			})
+        });
+
+        function deleteRow(obj,index){
+            $(obj).parent().parent().remove();
+            str[index] = " ";
+            mon[index] = 0;
+        }
+        function getNowFormatDate() {
+            var date = new Date();
+            var seperator1 = "-";
+            var seperator2 = ":";
+            var month = date.getMonth() + 1;
+            var strDate = date.getDate();
+            month = (month < 10)?"0"+month:month;
+            strDate = (strDate < 10)?"0"+strDate:strDate;
+            var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate;
+            return currentdate;
+        }
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workOfficeChangeUserList tr").length;
+            //tpl = tpl.replace("workMonthlyPlanThisList[0]_workClientInfoId","workMonthlyPlanThisList["+idx1+"].workClientInfoId");
+
+            bornTemplete(list, idx, tpl, row, idx1);
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        function delRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            if (id.val() == ""){
+                delFlag.val("1");
+                $(obj).parent().parent().remove();
+            }else if(delFlag.val() == "0"){
+                delFlag.val("1");
+                $(obj).html("&divide;").attr("title", "撤销删除");
+                $(obj).parent().parent().addClass("error");
+                $(obj).parent().parent().addClass("hide");
+            }else if(delFlag.val() == "1"){
+                delFlag.val("0");
+                $(obj).html("&times;").attr("title", "删除");
+                $(obj).parent().parent().removeClass("error");
+            }
+        }
+
+
+        function isNumber(val){
+            if(val === "" || val ==null){
+                return false;
+            }
+            var regPos = /^\d+(\.\d+)?$/; //非负浮点数
+            var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
+            if(regPos.test(val) || regNeg.test(val)){
+                return true;
+            }else{
+                return false;
+            }
+
+        }
+        function hasInArr(id,idArr) {
+            for(var i=0;i<idArr.length;i++){
+                if(id==$(idArr[i]).val()){
+                    return true;
+                }
+            }
+            return false;
+        }
+        function setUserInfo(d){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workofficechange/workOfficeChange/getBasicInfo',
+                data:{
+                    "ids":d
+                },
+                success:function(data){
+                    for(var i=0;i<data.length;i++){
+                        var idArr = $("#workOfficeChangeUserList tr:visible .basicInfoId");
+                        if(data[i].id!=''&&!hasInArr(data[i].id,idArr)){
+                            addRow('#workOfficeChangeUserList', workOfficeChangeUserListRowIdx, workOfficeChangeUserListTpl);
+                            workOfficeChangeUserListRowIdx = workOfficeChangeUserListRowIdx + 1;
+                            var row = workOfficeChangeUserListRowIdx - 1 ;
+                            $("#"+"workOfficeChangeUserList"+row+"_basicInfoId").val(data[i].id);
+                            $("#"+"workOfficeChangeUserList"+row+"_userId").val(data[i].userId);
+                            if(data[i].jobGrade!=null){
+                                $("#"+"workOfficeChangeUserList"+row+"_before").val(data[i].jobGrade.id);
+                                $("#"+"workOfficeChangeUserList"+row+"_6").val(data[i].jobGrade.name);
+                            }
+                            $("#"+"workOfficeChangeUserList"+row+"_1").val(data[i].no);
+                            $("#"+"workOfficeChangeUserList"+row+"_2").val(data[i].name);
+                            $("#"+"workOfficeChangeUserList"+row+"_3").val(data[i].office.name);
+                            $("#"+"workOfficeChangeUserList"+row+"_4").val(data[i].idCard);
+                            $("#"+"workOfficeChangeUserList"+row+"_5").val(data[i].status);
+                        }
+                    }
+                }
+            });
+        }
+        function setExcelInfo(data){
+            for(var i=0;i<data.length;i++){
+                var idArr = $("#workOfficeChangeUserList tr:visible .basicInfoId");
+                if(data[i].id!=''&&!hasInArr(data[i].id,idArr)){
+                    addRow('#workOfficeChangeUserList', workOfficeChangeUserListRowIdx, workOfficeChangeUserListTpl);
+                    workOfficeChangeUserListRowIdx = workOfficeChangeUserListRowIdx + 1;
+                    var row = workOfficeChangeUserListRowIdx - 1 ;
+                    $("#"+"workOfficeChangeUserList"+row+"_basicInfoId").val(data[i].id);
+                    $("#"+"workOfficeChangeUserList"+row+"_userId").val(data[i].userId);
+                    if(data[i].jobGrade!=null){
+                        $("#"+"workOfficeChangeUserList"+row+"_before").val(data[i].jobGrade.id);
+                        $("#"+"workOfficeChangeUserList"+row+"_6").val(data[i].jobGrade.name);
+                    }
+                    $("#"+"workOfficeChangeUserList"+row+"_1").val(data[i].no);
+                    $("#"+"workOfficeChangeUserList"+row+"_2").val(data[i].name);
+                    $("#"+"workOfficeChangeUserList"+row+"_3").val(data[i].office.name);
+                    $("#"+"workOfficeChangeUserList"+row+"_4").val(data[i].idCard);
+                    $("#"+"workOfficeChangeUserList"+row+"_5").val(data[i].status);
+                    $("#"+"workOfficeChangeUserList"+row+"_afterId").val(data[i].bankName);
+                    $("#"+"workOfficeChangeUserList"+row+"_afterName").val(data[i].sqlStr);
+                }
+            }
+        }
+
+        function openDialogreUser(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: ['90%','90%'],
+                title:title,
+                skin:"two-btns",
+                name:'friend',
+                content: encodeURI("${ctx}/sys/office/gridSelectUser?url=${ctx}/sys/office/gridSelectUser&isAll=true&type=null&isSingle=false") ,
+                btn: ['确定', '关闭'],
+                yes: function(index, layero){
+                    var iframeWin = layero.find('iframe')[0].contentWindow; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var item = iframeWin.getSelectedItem();
+                    if(item == "-1"){
+                        return;
+                    }
+                    if(false){//单选
+                        selectUserInfo(item.userId);
+                    }else{//多选
+                        var ids = [], names = [];
+                        for (var i=0;i<item.length;i++){
+                            ids.push(item[i].id);
+                            names.push(item[i].name);
+                        }
+                        var arr=ids.join(",").replace(/u_/ig,"");
+                        setUserInfo(arr);
+                    }
+                    top.layer.close(index);//关闭对话框。
+
+                },
+                cancel: function(index){
+                }
+            });
+        }
+        function openDialogreExcel(title,url,width,height,target){
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 1,
+                area: [500, 300],
+                title:"导入数据",
+                skin: 'three-btns with-demo',
+                content:$("#importBox").html() ,
+                btn: ['下载模板','确定', '关闭'],
+                btn1: function(index, layero){
+                    window.location.href=url+'/template';
+                },
+                btn2: function(index, layero){
+                    var formData = new FormData();
+                    formData.append("file",top.$("#uploadFile")[0].files[0]);
+                    $.ajax({
+                        type: 'post',
+                        url:url,
+                        data: formData,
+                        dataType: "json",
+                        cache: false,
+                        processData: false,
+                        contentType: false,
+                    }).success(function (result) {
+                        setExcelInfo(result.data);
+                        top.layer.msg(result.message);
+                    }).error(function () {
+                        top.layer.msg("导入文件失败!");
+                    });
+                    top.layer.close(index);
+                },
+
+                btn3: function(index){
+                    top.layer.close(index);
+                }
+            });
+        }
+	</script>
+	<style>
+		/*超过5个汉字,调整label的长度,以下是配套的*/
+		.layui-item .layui-form-label{
+			width:90px;
+		}
+		.form-group .layui-item .layui-input-block,
+		.query .layui-input-block {
+			margin-left: 116px;
+		}
+	</style>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workOfficeChange" action="${ctx}/workofficechange/workOfficeChange/saveAudit" method="post" class="form-horizontal" >
+			<form:hidden path="id"/>
+			<form:hidden  path="changer"/>
+			<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 with-icon">
+						<sys:treeselect id="changeOffice" name="changeOffice" value="${workOfficeChange.changeOffice}" labelName="changeOfficeName" labelValue="${workOfficeChange.changeOfficeName}"
+										title="部门" url="/sys/office/treeDataAllOffice?type=2" cssClass="form-control required layui-input" allowClear="true" notAllowSelectParent="true" />
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 ">
+					<label class="layui-form-label"><span class="require-item">*</span>岗位:</label>
+					<div class="layui-input-block ">
+						<select id="roleId" class="form-control simple-select required" name="roleId">
+						</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">
+						<div class="input-group">
+							<form:input path="number" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+							<span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty workOfficeChange.state}">${fns:getDictLabel(workOfficeChange.state, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>调转日期:</label>
+					<div class="layui-input-block">
+						<input id="changeDate" name="changeDate"  readonly="true" type="text"  maxlength="20" class="laydate-icondate form-control layer-date  layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workOfficeChange.changeDate}" 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="userName" readonly="true" path="userName" htmlEscape="false" class="form-control   layui-input"/>
+
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>调转事由:</label>
+					<div class="layui-input-block">
+						<form:textarea path="changeFor" htmlEscape="false" rows="4" onkeyup="checkContentKeyUp('changeFor',255);"   maxlength="255" class="form-control required"/>
+					</div>
+					<span id="contentMsg" style="float: right"></span>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>调转成员</h2></div>
+				<div class="layui-item nav-btns">
+					<a href="javascript:void(0)" onclick="openDialogreUser('选择用户', '${ctx}/sys/office/gridSelectUser','90%','90%')" class="nav-btn nav-btn-add" ><i class="fa fa-plus"></i>&nbsp;选择</a>
+					<a href="javascript:void(0)" onclick="openDialogreExcel('导入数据', '${ctx}/workofficechange/workOfficeChangeUser/import','90%','90%')" class="nav-btn nav-btn-import" ><i class="fa fa-plus"></i>&nbsp;导入</a>
+						<%--<table:importExcelChangeOffice url="${ctx}/workofficechange/workOfficeChangeUser/import"></table:importExcelChangeOffice><!-- 导出按钮 -->--%>
+					<div id="importBox" class="hide">
+						<input id="uploadFile" name="file" type="file" style="width:330px"/>导入文件不能超过5M,仅允许导入“xls”或“xlsx”格式文件!<br/>  
+					</div>
+				</div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px">工号</th>
+							<th width="200px">姓名</th>
+							<th width="200px">部门</th>
+							<th width="200px">身份证号</th>
+							<th width="200px">员工状态</th>
+							<th width="200px">职级</th>
+							<th width="200px">新职级</th>
+							<th width="100px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="workOfficeChangeUserList">
+						<c:if test="${not empty workOfficeChange.workOfficeChangeUserList}">
+							<c:forEach items="${workOfficeChange.workOfficeChangeUserList}" var="workOfficeChangeUser" varStatus="index">
+								<tr id="workItemCollarCatalogList${index.index}">
+									<td class="hide">
+										<input id="workOfficeChangeUserList${index.index}_id" name="workOfficeChangeUserList[${index.index}].id" type="hidden" value="${workOfficeChangeUser.id}"/>
+										<input id="workOfficeChangeUserList${index.index}_basicInfoId" name="workOfficeChangeUserList[${index.index}].basicInfoId" type="hidden" value="${workOfficeChangeUser.basicInfoId}" class="basicInfoId"/>
+										<input id="workOfficeChangeUserList${index.index}_userId" name="workOfficeChangeUserList[${index.index}].userId" type="hidden" value="${workOfficeChangeUser.userId}"/>
+										<input id="workOfficeChangeUserList${index.index}_before" name="workOfficeChangeUserList[${index.index}].jobGrade1.id" type="hidden" value="${workOfficeChangeUser.jobGrade1.id}"/>
+										<input id="workOfficeChangeUserList${index.index}_delFlag" name="workOfficeChangeUserList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_1"  readonly="true"   type="text" value="${workOfficeChangeUser.workStaffBasicInfo.no}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_2"  readonly="true"   type="text" value="${workOfficeChangeUser.workStaffBasicInfo.name}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_3"  readonly="true"  name="workOfficeChangeUserList[${index.index}].workStaffBasicInfo.office.name"  type="text" value="${workOfficeChangeUser.workStaffBasicInfo.office.name}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_4"  readonly="true"    type="text" value="${workOfficeChangeUser.workStaffBasicInfo.idCard}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_5"  readonly="true"    type="text" value="${workOfficeChangeUser.workStaffBasicInfo.status}"  class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_6"  readonly="true"  name="workOfficeChangeUserList[${index.index}].jobGrade1.name"  type="text" value="${workOfficeChangeUser.jobGrade1.name}"   class="form-control "/>
+									</td>
+									<td>
+										<sys:treeselectJob id="workOfficeChangeUserList${index.index}_after" name="workOfficeChangeUserList[${index.index}].jobGrade2.id" value="${workOfficeChangeUser.jobGrade2.id}" labelName="workOfficeChangeUserList[${index.index}].jobGrade2.name" labelValue="${workOfficeChangeUser.jobGrade2.name}"
+														   title="职级类型" url="/workjobgrade/workJobGrade/treeData"  cssClass="form-control layui-input " allowClear="false" notAllowSelectParent="true"/>
+									</td>
+									<td class="text-center op-td" >
+										<span class="op-btn op-btn-delete" id="workOfficeChangeUserList${index.index}_span" onclick="delRow(this, '#workOfficeChangeUserList${index.index}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+					<script type="text/template" id="workOfficeChangeUserListTpl">//<!--
+                                    <tr id="workOfficeChangeUserList{{idx}}">
+                                        <td class="hide">
+                                            <input id="workOfficeChangeUserList{{idx}}_id" name="workOfficeChangeUserList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                            <input id="workOfficeChangeUserList{{idx}}_basicInfoId" name="workOfficeChangeUserList[{{idx}}].basicInfoId" type="hidden" value="{{row.workStaffBasicInfo.id}}" class="basicInfoId"/>
+                                            <input id="workOfficeChangeUserList{{idx}}_userId" name="workOfficeChangeUserList[{{idx}}].userId" type="hidden" value="{{row.workStaffBasicInfo.userId}}"/>
+                                            <input id="workOfficeChangeUserList{{idx}}_before" name="workOfficeChangeUserList[{{idx}}].jobGrade1.id" type="hidden" value="{{row.jobGrade1.id}}"/>
+                                            <input id="workOfficeChangeUserList{{idx}}_delFlag" name="workOfficeChangeUserList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                        <td>
+                                            <input id="workOfficeChangeUserList{{idx}}_1"   name="workOfficeChangeUserList[{{idx}}].workStaffBasicInfo.no" type="text" value="{{row.workStaffBasicInfo.no}}"  readonly="true"   class="form-control "/>
+                                        </td>
+                                        <td>
+                                            <input id="workOfficeChangeUserList{{idx}}_2"  name="workOfficeChangeUserList[{{idx}}].workStaffBasicInfo.name" type="text" value="{{row.workStaffBasicInfo.name}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workOfficeChangeUserList{{idx}}_3"  name="workOfficeChangeUserList[{{idx}}].workStaffBasicInfo.office.name" type="text" value="{{row.workStaffBasicInfo.office.name}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workOfficeChangeUserList{{idx}}_4"  name="workOfficeChangeUserList[{{idx}}].workStaffBasicInfo.idCard" type="text" value="{{row.workStaffBasicInfo.idCard}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workOfficeChangeUserList{{idx}}_5"  name="workOfficeChangeUserList[{{idx}}].workStaffBasicInfo.status" type="text" value="{{row.workStaffBasicInfo.status}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <input id="workOfficeChangeUserList{{idx}}_6"  name="workOfficeChangeUserList[{{idx}}].jobGrade1.name" type="text" value="{{row.jobGrade1.name}}"   readonly="true"  class="form-control "/>
+                                        </td>
+                                         <td>
+                                            <sys:treeselectJob id="workOfficeChangeUserList{{idx}}_after" name="workOfficeChangeUserList[{{idx}}].jobGrade2.id" value="${row.jobGrade2.id}" labelName="workOfficeChangeUserList[{{idx}}].jobGrade2.name" labelValue="${row.jobGrade2.name}"
+																title="职级类型" url="/workjobgrade/workJobGrade/treeData"  cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
+                                        </td>
+                                        <td class="text-center op-td" >
+                                            {{#delBtn}}<span class="op-btn op-btn-delete" id="workOfficeChangeUserList{{idx}}_span" onclick="delRow(this, '#workOfficeChangeUserList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+                        var workOfficeChangeUserListRowIdx = ${fn:length(workOfficeChange.workOfficeChangeUserList)}, workOfficeChangeUserListTpl = $("#workOfficeChangeUserListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                        if($("#id").val()){
+                            workOfficeChangeUserListIdx = ${fn:length(workOfficeChange.workOfficeChangeUserList)};
+                        }
+                        $(document).ready(function() {
+                        });
+					</script>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 15 - 0
src/main/webapp/webpage/modules/workofficechange/workOfficeChangeTask.jsp

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

+ 77 - 0
src/main/webapp/webpage/modules/workofficechange/workOfficeChangeUserForm.jsp

@@ -0,0 +1,77 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>调转成员管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+			
+		});
+	</script>
+</head>
+<body class="hideScroll">
+		<form:form id="inputForm" modelAttribute="workOfficeChangeUser" action="${ctx}/workofficechange/workOfficeChangeUser/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="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="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="changeId" 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="userId" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">入职登记表主键:</label></td>
+					<td class="width-35">
+						<form:input path="basicInfoId" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 142 - 0
src/main/webapp/webpage/modules/workofficechange/workOfficeChangeUserList.jsp

@@ -0,0 +1,142 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>调转成员管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		$(document).ready(function() {
+		});
+	</script>
+</head>
+<body class="gray-bg">
+	<div class="wrapper wrapper-content">
+	<div class="ibox">
+	<div class="ibox-title">
+		<h5>调转成员列表 </h5>
+		<div class="ibox-tools">
+			<a class="collapse-link">
+				<i class="fa fa-chevron-up"></i>
+			</a>
+			<a class="dropdown-toggle" data-toggle="dropdown" href="#">
+				<i class="fa fa-wrench"></i>
+			</a>
+			<ul class="dropdown-menu dropdown-user">
+				<li><a href="#">选项1</a>
+				</li>
+				<li><a href="#">选项2</a>
+				</li>
+			</ul>
+			<a class="close-link">
+				<i class="fa fa-times"></i>
+			</a>
+		</div>
+	</div>
+    
+    <div class="ibox-content">
+	<sys:message content="${message}"/>
+	
+	<!--查询条件-->
+	<div class="row">
+	<div class="col-sm-12">
+	<form:form id="searchForm" modelAttribute="workOfficeChangeUser" action="${ctx}/workofficechange/workOfficeChangeUser/" 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="workofficechange:workOfficeChangeUser:add">
+				<table:addRow url="${ctx}/workofficechange/workOfficeChangeUser/form" title="调转成员"></table:addRow><!-- 增加按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workofficechange:workOfficeChangeUser:edit">
+			    <table:editRow url="${ctx}/workofficechange/workOfficeChangeUser/form" title="调转成员" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workofficechange:workOfficeChangeUser:del">
+				<table:delRow url="${ctx}/workofficechange/workOfficeChangeUser/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workofficechange:workOfficeChangeUser:import">
+				<table:importExcel url="${ctx}/workofficechange/workOfficeChangeUser/import"></table:importExcel><!-- 导入按钮 -->
+			</shiro:hasPermission>
+			<shiro:hasPermission name="workofficechange:workOfficeChangeUser:export">
+	       		<table:exportExcel url="${ctx}/workofficechange/workOfficeChangeUser/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 officeId">所属部门</th>
+				<th  class="sort-column companyId">所属公司</th>
+				<th  class="sort-column changeId">调转表主键</th>
+				<th  class="sort-column userId">用户表主键</th>
+				<th  class="sort-column basicInfoId">入职登记表主键</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="workOfficeChangeUser">
+			<tr>
+				<td> <input type="checkbox" id="${workOfficeChangeUser.id}" class="i-checks"></td>
+				<td><a  href="#" onclick="openDialogView('查看调转成员', '${ctx}/workofficechange/workOfficeChangeUser/form?id=${workOfficeChangeUser.id}','800px', '500px')">
+					${workOfficeChangeUser.remarks}
+				</a></td>
+				<td>
+					${workOfficeChangeUser.officeId}
+				</td>
+				<td>
+					${workOfficeChangeUser.companyId}
+				</td>
+				<td>
+					${workOfficeChangeUser.changeId}
+				</td>
+				<td>
+					${workOfficeChangeUser.userId}
+				</td>
+				<td>
+					${workOfficeChangeUser.basicInfoId}
+				</td>
+				<td>
+					<shiro:hasPermission name="workofficechange:workOfficeChangeUser:view">
+						<a href="#" onclick="openDialogView('查看调转成员', '${ctx}/workofficechange/workOfficeChangeUser/form?id=${workOfficeChangeUser.id}','800px', '500px')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="workofficechange:workOfficeChangeUser:edit">
+    					<a href="#" onclick="openDialog('修改调转成员', '${ctx}/workofficechange/workOfficeChangeUser/form?id=${workOfficeChangeUser.id}','800px', '500px')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+    				</shiro:hasPermission>
+    				<shiro:hasPermission name="workofficechange:workOfficeChangeUser:del">
+						<a href="${ctx}/workofficechange/workOfficeChangeUser/delete?id=${workOfficeChangeUser.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>

+ 169 - 0
src/main/webapp/webpage/modules/workofficechange/workOfficeChangeView.jsp

@@ -0,0 +1,169 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>调转部门管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        var count = 0;
+        $(document).ready(function() {
+            if($("#changeDate").val()==null || $("#changeDate").val()==''){
+                $("#changeDate").val(getNowFormatDate());
+            }
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                rules:{
+                },
+                messages:{
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+        });
+        function deleteRow(obj,index){
+            $(obj).parent().parent().remove();
+            str[index] = " ";
+            mon[index] = 0;
+
+        }
+        function getNowFormatDate() {
+            var date = new Date();
+            var seperator1 = "-";
+            var seperator2 = ":";
+            var month = date.getMonth() + 1;
+            var strDate = date.getDate();
+            month = (month < 10)?"0"+month:month;
+            strDate = (strDate < 10)?"0"+strDate:strDate;
+            var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate;
+            return currentdate;
+        }
+
+	</script>
+	<style>
+		/*超过5个汉字,调整label的长度,以下是配套的*/
+		.layui-item .layui-form-label{
+			width:90px;
+		}
+		.form-group .layui-item .layui-input-block,
+		.query .layui-input-block {
+			margin-left: 116px;
+		}
+	</style>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<form:form id="inputForm" modelAttribute="workOfficeChange" action="${ctx}/workofficechange/workOfficeChange/save" method="post" class="form-horizontal" >
+			<form:hidden path="id"/>
+			<form:hidden  path="changer"/>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>调入部门:</label>
+					<div class="layui-input-block">
+						<form:input id="changeOfficeName" readonly="true" path="changeOfficeName" htmlEscape="false" class="form-control   layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>调转编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<form:input path="number" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+							<span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty workOfficeChange.state}">${fns:getDictLabel(workOfficeChange.state, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>调转日期:</label>
+					<div class="layui-input-block">
+						<input id="changeDate" readonly="true" name="changeDate" type="text"  maxlength="20" class="laydate-icondate form-control layer-date  layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workOfficeChange.changeDate}" 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="userName" readonly="true" path="userName" htmlEscape="false" class="form-control   layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">调转事由:</label>
+					<div class="layui-input-block">
+						<form:textarea path="changeFor" readonly="true" htmlEscape="false" rows="4"    maxlength="255" class="form-control "/>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>调转成员</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable" class="table table-bordered table-condensed can-edit no-bottom-margin">
+						<thead>
+						<tr>
+							<th width="200px">工号</th>
+							<th width="200px">姓名</th>
+							<th width="150px">部门</th>
+							<th width="200px">身份证号</th>
+							<th width="200px">员工状态</th>
+							<th width="200px">职级</th>
+							<th width="200px">新职级</th>
+						</tr>
+						</thead>
+						<tbody id="workOfficeChangeUserList">
+						<c:if test="${not empty workOfficeChange.workOfficeChangeUserList}">
+							<c:forEach items="${workOfficeChange.workOfficeChangeUserList}" var="workOfficeChangeUser" varStatus="index">
+								<tr id="workItemCollarCatalogList${index.index}">
+									<td class="hide">
+										<input id="workOfficeChangeUserList${index.index}_id" name="workOfficeChangeUserList[${index.index}].id" type="hidden" value="${workOfficeChangeUser.id}"/>
+										<input id="workOfficeChangeUserList${index.index}_basicInfoId" name="workOfficeChangeUserList[${index.index}].basicInfoId" type="hidden" value="${workOfficeChangeUser.basicInfoId}"/>
+										<input id="workOfficeChangeUserList${index.index}_userId" name="workOfficeChangeUserList[${index.index}].userId" type="hidden" value="${workOfficeChangeUser.userId}"/>
+										<input id="workOfficeChangeUserList${index.index}_delFlag" name="workOfficeChangeUserList[${index.index}].delFlag" type="hidden" value="0"/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_1"  readonly="true"   type="text" value="${workOfficeChangeUser.workStaffBasicInfo.no}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_2"  readonly="true"   type="text" value="${workOfficeChangeUser.workStaffBasicInfo.name}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_3"  readonly="true"    type="text" value="${workOfficeChangeUser.oldOfficeName}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_4"  readonly="true"    type="text" value="${workOfficeChangeUser.workStaffBasicInfo.idCard}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_5"  readonly="true"    type="text" value="${workOfficeChangeUser.workStaffBasicInfo.status}"  class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_6"  readonly="true"  name="workOfficeChangeUserList[${index.index}].jobGrade1.name"  type="text" value="${workOfficeChangeUser.jobGrade1.name}"   class="form-control "/>
+									</td>
+									<td>
+										<input id="workOfficeChangeUserList${index.index}_after"  readonly="true"  name="workOfficeChangeUserList[${index.index}].jobGrade2.name"  type="text" value="${workOfficeChangeUser.jobGrade2.name}"   class="form-control "/>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 263 - 0
src/main/webapp/webpage/modules/workout/workOutAudit.jsp

@@ -0,0 +1,263 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>出差申请管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(obj == 1){
+                    $('#flag').val('yes');
+                }else{
+                    $('#flag').val('no');
+                }
+                $("#inputForm").submit();
+                return true;
+            }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();
+            });
+
+            laydate.render({
+                elem: '#startDate',
+                event: 'focus',
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#endDate',
+                event: 'focus',
+                type : 'date'
+            });
+        });
+        function insertTitle(tValue){
+            var list = "${workOut.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 = "73";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workOut/"+timestamp+"/"+file['name'];
+            var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+            var divId = "_attachment";
+            $("#addFile"+divId).show();
+            multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size);}
+        }
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<form:form id="inputForm" modelAttribute="workOut" action="${ctx}/workout/workOut/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}"/>
+			<input type="hidden" name="workStaffBasicInfo.id" value="${workOut.workStaffBasicInfo.id}">
+			<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 id="name" path="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">
+						<div class="input-group">
+							<form:input id="num" path="num" htmlEscape="false"   readonly="true" class="form-control layui-input"/>
+							<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workOut.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workOut.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">工号:</label>
+					<div class="layui-input-block">
+						<form:input  path="workStaffBasicInfo.no" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.status" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.office.name" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.jobGrade.name" htmlEscape="false" readonly="true" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>开始日期:</label>
+					<div class="layui-input-block">
+						<input type="text"  maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOut.startDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<input value="${fns:getDictLabel(workOut.startType, 'date_type', '')}" readonly="true" class="form-control  simple-select query-group">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>结束日期:</label>
+					<div class="layui-input-block">
+						<input  type="text" maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOut.endDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<input value="${fns:getDictLabel(workOut.endType, 'date_type', '')}" readonly="true" class="form-control  simple-select query-group">
+					</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="days" htmlEscape="false" readonly="true" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>申请日期:</label>
+					<div class="layui-input-block">
+						<input  type="text" maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workOut.createDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label"><span class="require-item">*</span>出差地点:</label>
+					<div class="layui-input-block">
+						<form:input  path="address" htmlEscape="false" readonly="true" maxlength="255" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>出差事由:</label>
+					<div class="layui-input-block">
+						<form:textarea path="reason" htmlEscape="false" rows="4" maxlength="255" readonly="true"  class="form-control required"/>
+					</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="${workOut.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 lw8">
+				<div class="form-group-label"><h2>审批意见</h2></div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">审批意见:</label>
+					<div class="layui-input-block">
+						<form:textarea path="act.comment" class="form-control" rows="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="${workOut.act.procInsId}"/>
+					<act:histoicFlow procInsId="${workOut.act.procInsId}"/>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 380 - 0
src/main/webapp/webpage/modules/workout/workOutForm.jsp

@@ -0,0 +1,380 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>出差申请管理</title>
+	<meta name="decorator" content="default"/>
+	<style>
+		label.error{
+			top:40px;
+			left:0;
+		}
+		#reason-error{
+			top:80px;
+		}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(obj == 2){
+                    $("#inputForm").attr("action","${ctx}/workout/workOut/store");
+                }else{
+                    $("#inputForm").attr("action","${ctx}/workout/workOut/save");
+                }
+
+                var endDate = $("#endDate").val().replace("-","").replace("-","");
+                //结束
+                var startDate =  $("#startDate").val().replace("-","").replace("-","");
+                var strtType = $("#startType").val();
+                var endType = $("#endType").val();
+                if(endDate != null && endDate != undefined && endDate != '' && startDate != null && startDate != undefined && startDate != '') {
+                    var days = endDate - startDate;
+                    console.log("------days----" + days);
+                    if (days < 0) {
+                        parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                        return;
+                    }else if(days == 0){
+                        if("2" == strtType && "1" == endType){
+                            parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                            return;
+                        }
+                    }
+                }
+                $("#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();
+            });
+
+            laydate.render({
+                elem: '#startDate',
+                event: 'focus',
+                type : 'date',
+                done: function(value){//日期时间被切换后的回调
+                    var endDate = $("#endDate").val();
+                    //console.log("------endDate----"+endDate);
+                    var strtType = $("#startType").val();
+                    var endType = $("#endType").val();
+                    if(endDate != null && endDate != undefined && endDate != '') {
+                        var s1 = new Date(value.replace(/-/g, "/"));
+                        var s2 = new Date(endDate.replace(/-/g, "/"));
+                        var days = s2.getTime() - s1.getTime();
+                        if(days < 0){
+                            parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                            return;
+                        }else if(days == 0){
+                            if("1" == strtType && "2" == endType){
+                                $("#days").val(1);
+                            }else if("2" == strtType && "1" == endType){
+                                parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                                return;
+                            }else{
+                                $("#days").val(0.5);
+                            }
+                        }else{
+                            var time = parseInt(days / (1000 * 60 * 60 * 24));
+                            //console.log("--------time-------"+time);
+                            if("1" == strtType && "1" == endType){
+                                $("#days").val( time+0.5);
+                            }else if("1" == strtType && "2" == endType){
+                                $("#days").val( time+1);
+                            }else if("2" == strtType && "2" == endType){
+                                $("#days").val( time+0.5);
+                            }else if("2" == strtType && "1" == endType){
+                                $("#days").val( time);
+                            }
+                        }
+                    }
+                }
+            });
+            laydate.render({
+                elem: '#endDate',
+                event: 'focus',
+                type : 'date',
+                done: function(value){//日期时间被切换后的回调
+                    var startDate = $("#startDate").val();
+                    //console.log("------startDate----"+startDate);
+                    var strtType = $("#startType").val();
+                    var endType = $("#endType").val();
+                    if(startDate != null && startDate != undefined && startDate != '') {
+                        var s1 = new Date(startDate.replace(/-/g, "/"));
+                        var s2 = new Date(value.replace(/-/g, "/"));
+                        var days = s2.getTime() - s1.getTime();
+                        if(days < 0){
+                            parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                            return;
+                        }else if(days == 0){
+                            if("1" == strtType && "2" == endType){
+                                $("#days").val(1);
+                            }else if("2" == strtType && "1" == endType){
+                                parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                                return;
+                            }else{
+                                $("#days").val(0.5);
+                            }
+                        }else{
+                            var time = parseInt(days / (1000 * 60 * 60 * 24));
+                            //console.log("--------time-------"+time);
+                            if("1" == strtType && "1" == endType){
+                                $("#days").val( time+0.5);
+                            }else if("1" == strtType && "2" == endType){
+                                $("#days").val( time+1);
+                            }else if("2" == strtType && "2" == endType){
+                                $("#days").val( time+0.5);
+                            }else if("2" == strtType && "1" == endType){
+                                $("#days").val( time);
+                            }
+                        }
+                    }
+                }
+            });
+        });
+
+        function insertTitle(tValue){
+            var list = "${workOut.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 = "73";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workOut/"+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 setT() {
+            var startDate = $("#startDate").val();
+            var endDate = $("#endDate").val();
+            //console.log("------startDate----"+startDate);
+            var strtType = $("#startType").val();
+            var endType = $("#endType").val();
+            if(startDate != null && startDate != undefined && startDate != '' && endDate != null && endDate != undefined && endDate != '' ){
+                var s1 = new Date(startDate.replace(/-/g, "/"));
+                var s2 = new Date(endDate.replace(/-/g, "/"));
+                var days = s2.getTime() - s1.getTime();
+                if(days < 0){
+                    parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                    return;
+                }else if(days == 0){
+                    if("1" == strtType && "2" == endType){
+                        $("#days").val(1);
+                    }else if("2" == strtType && "1" == endType){
+                        parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                        return;
+                    }else{
+                        $("#days").val(0.5);
+                    }
+                }else{
+                    var time = parseInt(days / (1000 * 60 * 60 * 24));
+                    //console.log("--------time-------"+time);
+                    if("1" == strtType && "1" == endType){
+                        $("#days").val( time+0.5);
+                    }else if("1" == strtType && "2" == endType){
+                        $("#days").val( time+1);
+                    }else if("2" == strtType && "2" == endType){
+                        $("#days").val( time+0.5);
+                    }else if("2" == strtType && "1" == endType){
+                        $("#days").val( time);
+                    }
+                }
+            }
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container ">
+		<form:form id="inputForm" modelAttribute="workOut" action="${ctx}/workOut/workOut/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<input type="hidden" name="workStaffBasicInfo.id" value="${workOut.workStaffBasicInfo.id}">
+			<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 id="name" path="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">
+						<div class="input-group">
+							<form:input id="num" path="num" htmlEscape="false"   readonly="true" class="form-control layui-input"/>
+							<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workOut.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workOut.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">工号:</label>
+					<div class="layui-input-block">
+						<form:input  path="workStaffBasicInfo.no" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.status" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.office.name" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.jobGrade.name" htmlEscape="false" readonly="true" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>开始日期:</label>
+					<div class="layui-input-block">
+						<input id="startDate" name="startDate" style="background-color: #ffffff;" readonly="true"  htmlEscape="false" maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOut.startDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<form:select path="startType" onchange="setT()" class="form-control  simple-select query-group">
+							<form:options items="${fns:getDictList('date_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">
+						<input id="endDate" name="endDate" style="background-color: #ffffff;" readonly="true"  htmlEscape="false" maxlength="20" readonly="true"  class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOut.endDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<form:select path="endType" onchange="setT()" class="form-control  simple-select query-group">
+							<form:options items="${fns:getDictList('date_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="days" htmlEscape="false" readonly="true" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>申请日期:</label>
+					<div class="layui-input-block">
+						<input id="createDate" name="createDate" type="text" maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workOut.createDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label"><span class="require-item">*</span>出差地点:</label>
+					<div class="layui-input-block">
+						<form:input  path="address" htmlEscape="false" maxlength="255" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>出差事由:</label>
+					<div class="layui-input-block">
+						<form:textarea path="reason" htmlEscape="false" rows="4" maxlength="255"   class="form-control required"/>
+					</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="${workOut.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>

+ 330 - 0
src/main/webapp/webpage/modules/workout/workOutList.jsp

@@ -0,0 +1,330 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>出差申请管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        $(document).ready(function() {
+            //搜索框收放
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow1);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow1);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#beginContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+
+
+            laydate.render({
+                elem: '#endContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+        });
+
+        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
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        top.layer.close(index);//关闭对话框。
+//                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                    return false;
+                },
+                btn3: function(index){
+                }
+            });
+        }
+        function openDialogreplay(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: false, //开启最大化最小化按钮
+                skin: 'two-btns',
+                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){
+                }
+            });
+        }
+	</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="workOut" action="${ctx}/workout/workOut/" method="post" class="form-inline">
+					<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+					<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+					<%--<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->--%>
+
+					<div class="commonQuery lw8">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">姓名:</label>
+							<div class="layui-input-block">
+								<form:input path="name" htmlEscape="false" class="form-control  layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">工号:</label>
+							<div class="layui-input-block">
+								<form:input path="workStaffBasicInfo.no" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item athird">
+							<div class="input-group">
+								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+								<button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
+								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" class="lw8" style="clear:both;display:none;">
+							<%--<div class="layui-item query athird">
+                                <label class="layui-form-label">归档日期:</label>
+                                <div class="layui-input-block">
+                                    <input id="beginContractDate" name="beginContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+                                           value="<fmt:formatDate value="${workContractRecord.beginContractDate}" pattern="yyyy-MM-dd"/>"/>
+                                    </input>
+                                    <span class="group-sep">-</span>
+                                    <input id="endContractDate" name="endContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+                                           value="<fmt:formatDate value="${workContractRecord.endContractDate}" pattern="yyyy-MM-dd"/>"/>
+                                    </input>
+                                </div>
+                            </div>--%>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">申请编号:</label>
+							<div class="layui-input-block">
+								<form:input path="num" 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: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 style="clear:both;"></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="workout:workOut:add">
+						<button class="nav-btn nav-btn-add" title="出差申请" onclick="openDialogre('出差申请','${ctx}/workout/workOut/form','95%','95%')"><i class="fa fa-plus"></i>&nbsp;添加</button>
+					</shiro:hasPermission>
+
+					<button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i>&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',title: '出差编号',minWidth:160,templet:function(d){
+                    var xml = "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看出差申请', '${ctx}/workout/workOut/form?id=" + d.id + "&tabId=1','95%','95%')\">" +
+                        "<span title=" + d.num + ">" + d.num + "</span></a>";
+                    return xml;
+                }}
+                ,{field:'no',align:'center', title: '工号',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.no +"'>" + d.no + "</span>";
+                }}
+                ,{field:'name',align:'center', title: '姓名',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.name +"'>" + d.name + "</span>";
+                }}
+                ,{field:'officeName',align:'center', title: '部门',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.officeName +"'>" + d.officeName + "</span>";
+                }}
+                ,{field:'jg', align:'center',title: '职级',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.jg +"'>" + d.jg + "</span>";
+                }}
+                ,{field:'days', align:'center',title: '出差天数',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.jg +"'>" + d.jg + "</span>";
+                }}
+                ,{field:'address', align:'center',title: '出差地点',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.address +"'>" + d.address + "</span>";
+                }}
+                ,{field:'createDate',align:'center', sort:true,title: '申请日期',minWidth:160}
+                ,{field:'status',align:'center', title: '状态',minWidth:160,templet:function(d){
+                    <%--var st = getAuditState(d.status);--%>
+                    <%--var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workcontractrecord/workContractRecord/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";--%>
+                    <%--return xml;--%>
+                    var st = getAuditState(d.status);
+                    if(st.action)
+                        var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workout/workOut/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                    else
+                        var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                    return xml;
+                }}
+                // ,{fixed: 'right',align:'center', toolbar: '#op',title:"操作"}
+                ,{field:'op',align:'center',title:"操作",minWidth:160,templet:function(d){
+                    ////对操作进行初始化
+                    var xml = "";
+                    if(d.cancancel != undefined && d.cancancel == "1")
+                        xml += "<a href=\"${ctx}/workout/workOut/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}/workout/workOut/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}/workout/workOut/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}/workout/workOut/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}/workout/workOut/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="workOut" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${workOut.id}"
+                    ,"num":"${workOut.num}"
+                    ,"name":"${workOut.name}"
+                    ,"no":"${workOut.workStaffBasicInfo.no}"
+                    ,"officeName":"${workOut.workStaffBasicInfo.office.name}"
+                    ,"jg":"${workOut.workStaffBasicInfo.jobGrade.name}"
+                    ,"days":"${workOut.days}"
+                    ,"address":"${workOut.address}"
+                    ,"createDate":"<fmt:formatDate value="${workOut.createDate}" pattern="yyyy-MM-dd"/>"
+                    ,"status":"${workOut.status}"
+                    <c:if test="${fns:getUser().id == workOut.createBy.id}">
+                    <c:if test="${workOut.status == '2' }">,"cancancel":"1"</c:if>
+                    <shiro:hasPermission name="workout:workOut:edit"><c:choose>
+                    <c:when test="${workOut.status == '1' }">,"canedit1":"1"</c:when>
+                    <c:when test="${workOut.status == '4'}">,"canedit2":"1"</c:when>
+                    <c:when test="${workOut.status == '3'}">,"canedit3":"1"</c:when>
+                    </c:choose></shiro:hasPermission>
+                    <shiro:hasPermission name="workout:workOut:del"><c:choose>
+                    <c:when test="${(workOut.status == '1' or workOut.status == '3' or workOut.status == '4')}">,"candelete":"1"</c:when>
+                    </c:choose></shiro:hasPermission>
+                    </c:if>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+
+    resizeListTable();
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+</body>
+</html>

+ 375 - 0
src/main/webapp/webpage/modules/workout/workOutModify.jsp

@@ -0,0 +1,375 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>出差申请管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(obj == 2){
+                    $("#flag").val("no");
+                }else{
+                    $("#flag").val("yes");
+                }
+                var endDate = $("#endDate").val().replace("-","").replace("-","");
+                //结束
+                var startDate =  $("#startDate").val().replace("-","").replace("-","");
+                var strtType = $("#startType").val();
+                var endType = $("#endType").val();
+                if(endDate != null && endDate != undefined && endDate != '' && startDate != null && startDate != undefined && startDate != '') {
+                    var days = endDate - startDate;
+                    console.log("------days----" + days);
+                    if (days < 0) {
+                        parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                        return;
+                    }else if(days == 0){
+                        if("2" == strtType && "1" == endType){
+                            parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                            return;
+                        }
+                    }
+                }
+                $("#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();
+            });
+
+            laydate.render({
+                elem: '#startDate',
+                event: 'focus',
+                type : 'date',
+                done: function(value){//日期时间被切换后的回调
+                    var endDate = $("#endDate").val();
+                    //console.log("------endDate----"+endDate);
+                    var strtType = $("#startType").val();
+                    var endType = $("#endType").val();
+                    if(endDate != null && endDate != undefined && endDate != '') {
+                        var s1 = new Date(value.replace(/-/g, "/"));
+                        var s2 = new Date(endDate.replace(/-/g, "/"));
+                        var days = s2.getTime() - s1.getTime();
+                        if(days < 0){
+                            parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                            return;
+                        }else if(days == 0){
+                            if("1" == strtType && "2" == endType){
+                                $("#days").val(1);
+                            }else if("2" == strtType && "1" == endType){
+                                parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                                return;
+                            }else{
+                                $("#days").val(0.5);
+                            }
+                        }else{
+                            var time = parseInt(days / (1000 * 60 * 60 * 24));
+                            //console.log("--------time-------"+time);
+                            if("1" == strtType && "1" == endType){
+                                $("#days").val( time+0.5);
+                            }else if("1" == strtType && "2" == endType){
+                                $("#days").val( time+1);
+                            }else if("2" == strtType && "2" == endType){
+                                $("#days").val( time+0.5);
+                            }else if("2" == strtType && "1" == endType){
+                                $("#days").val( time);
+                            }
+                        }
+                    }
+                }
+            });
+            laydate.render({
+                elem: '#endDate',
+                event: 'focus',
+                type : 'date',
+                done: function(value){//日期时间被切换后的回调
+                    var startDate = $("#startDate").val();
+                    //console.log("------startDate----"+startDate);
+                    var strtType = $("#startType").val();
+                    var endType = $("#endType").val();
+                    if(startDate != null && startDate != undefined && startDate != '') {
+                        var s1 = new Date(startDate.replace(/-/g, "/"));
+                        var s2 = new Date(value.replace(/-/g, "/"));
+                        var days = s2.getTime() - s1.getTime();
+                        if(days < 0){
+                            parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                            return;
+                        }else if(days == 0){
+                            if("1" == strtType && "2" == endType){
+                                $("#days").val(1);
+                            }else if("2" == strtType && "1" == endType){
+                                parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                                return;
+                            }else{
+                                $("#days").val(0.5);
+                            }
+                        }else{
+                            var time = parseInt(days / (1000 * 60 * 60 * 24));
+                            //console.log("--------time-------"+time);
+                            if("1" == strtType && "1" == endType){
+                                $("#days").val( time+0.5);
+                            }else if("1" == strtType && "2" == endType){
+                                $("#days").val( time+1);
+                            }else if("2" == strtType && "2" == endType){
+                                $("#days").val( time+0.5);
+                            }else if("2" == strtType && "1" == endType){
+                                $("#days").val( time);
+                            }
+                        }
+                    }
+                }
+            });
+        });
+        function insertTitle(tValue){
+            var list = "${workOut.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 = "73";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workOut/"+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 setT() {
+            var startDate = $("#startDate").val();
+            var endDate = $("#endDate").val();
+            //console.log("------startDate----"+startDate);
+            var strtType = $("#startType").val();
+            var endType = $("#endType").val();
+            if(startDate != null && startDate != undefined && startDate != '' && endDate != null && endDate != undefined && endDate != '' ){
+                var s1 = new Date(startDate.replace(/-/g, "/"));
+                var s2 = new Date(endDate.replace(/-/g, "/"));
+                var days = s2.getTime() - s1.getTime();
+                if(days < 0){
+                    parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                    return;
+                }else if(days == 0){
+                    if("1" == strtType && "2" == endType){
+                        $("#days").val(1);
+                    }else if("2" == strtType && "1" == endType){
+                        parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                        return;
+                    }else{
+                        $("#days").val(0.5);
+                    }
+                }else{
+                    var time = parseInt(days / (1000 * 60 * 60 * 24));
+                    //console.log("--------time-------"+time);
+                    if("1" == strtType && "1" == endType){
+                        $("#days").val( time+0.5);
+                    }else if("1" == strtType && "2" == endType){
+                        $("#days").val( time+1);
+                    }else if("2" == strtType && "2" == endType){
+                        $("#days").val( time+0.5);
+                    }else if("2" == strtType && "1" == endType){
+                        $("#days").val( time);
+                    }
+                }
+            }
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workOut" action="${ctx}/workout/workOut/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"/>
+			<input type="hidden" name="workStaffBasicInfo.id" value="${workOut.workStaffBasicInfo.id}">
+			<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 id="name" path="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">
+						<div class="input-group">
+							<form:input id="num" path="num" htmlEscape="false"   readonly="true" class="form-control layui-input"/>
+							<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workOut.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workOut.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">工号:</label>
+					<div class="layui-input-block">
+						<form:input  path="workStaffBasicInfo.no" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.status" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.office.name" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.jobGrade.name" htmlEscape="false" readonly="true" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>开始日期:</label>
+					<div class="layui-input-block">
+						<input id="startDate" name="startDate" style="background-color: #ffffff;" readonly="true"  htmlEscape="false"  maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOut.startDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<form:select path="startType" onchange="setT()" class="form-control  simple-select query-group">
+							<form:options items="${fns:getDictList('date_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">
+						<input id="endDate" name="endDate" style="background-color: #ffffff;" readonly="true"  htmlEscape="false" maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOut.endDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<form:select path="endType" onchange="setT()" class="form-control  simple-select query-group">
+							<form:options items="${fns:getDictList('date_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="days" htmlEscape="false" readonly="true"  class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>申请日期:</label>
+					<div class="layui-input-block">
+						<input id="createDate" name="createDate" type="text" maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workOut.createDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label"><span class="require-item">*</span>出差地点:</label>
+					<div class="layui-input-block">
+						<form:input  path="address" htmlEscape="false" maxlength="255" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>出差事由:</label>
+					<div class="layui-input-block">
+						<form:textarea path="reason" htmlEscape="false" rows="4" maxlength="255"   class="form-control required"/>
+					</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="${workOut.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>

+ 238 - 0
src/main/webapp/webpage/modules/workout/workOutView.jsp

@@ -0,0 +1,238 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>出差申请管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(obj == 2){
+                    $("#inputForm").attr("action","${ctx}/workout/workOut/store");
+                }else{
+                    $("#inputForm").attr("action","${ctx}/workout/workOut/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();
+            });
+
+            laydate.render({
+                elem: '#startDate',
+                event: 'focus',
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#endDate',
+                event: 'focus',
+                type : 'date'
+            });
+        });
+        function insertTitle(tValue){
+            var list = "${workOut.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 = "73";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workOut/"+timestamp+"/"+file['name'];
+            var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+            var divId = "_attachment";
+            $("#addFile"+divId).show();
+            multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size);}
+        }
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<form:form id="inputForm" modelAttribute="workOut" action="${ctx}/workOut/workOut/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<input type="hidden" name="workStaffBasicInfo.id" value="${workOut.workStaffBasicInfo.id}">
+			<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 id="name" path="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">
+						<div class="input-group">
+							<form:input id="num" path="num" htmlEscape="false"   readonly="true" class="form-control layui-input"/>
+							<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workOut.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workOut.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">工号:</label>
+					<div class="layui-input-block">
+						<form:input  path="workStaffBasicInfo.no" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.status" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.office.name" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.jobGrade.name" htmlEscape="false" readonly="true" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>开始日期:</label>
+					<div class="layui-input-block">
+						<input type="text"  maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOut.startDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<input value="${fns:getDictLabel(workOut.startType, 'date_type', '')}" readonly="true" class="form-control  simple-select query-group">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>结束日期:</label>
+					<div class="layui-input-block">
+						<input  type="text" maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOut.endDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<input value="${fns:getDictLabel(workOut.endType, 'date_type', '')}" readonly="true" class="form-control  simple-select query-group">
+					</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="days" htmlEscape="false" readonly="true" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>申请日期:</label>
+					<div class="layui-input-block">
+						<input  type="text" maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon"
+							   value="<fmt:formatDate value="${workOut.createDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label"><span class="require-item">*</span>出差地点:</label>
+					<div class="layui-input-block">
+						<form:input  path="address" htmlEscape="false" readonly="true" maxlength="255" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>出差事由:</label>
+					<div class="layui-input-block">
+						<form:textarea path="reason" htmlEscape="false" rows="4" maxlength="255" readonly="true"  class="form-control required"/>
+					</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="${workOut.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>

+ 15 - 0
src/main/webapp/webpage/modules/workout/workTrack.jsp

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

+ 114 - 0
src/main/webapp/webpage/modules/workoutsignin/workOutSignInForm.jsp

@@ -0,0 +1,114 @@
+<%@ 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="workOutSignIn" action="${ctx}/workoutsginin/workOutSginIn/save" method="post" class="form-horizontal">
+<form:hidden path="id"/>
+<sys:message content="${message}"/>
+<table class="table table-bordered  table-condensed dataTables-example dataTable no-footer">
+    <tbody>
+    <tr>
+        <td  class="width-15 active">	<label class="pull-right"><font color="red">*</font>创建时间:</label></td>
+        <td class="width-35" ><%--<form:input path="createDate" htmlEscape="false" cssClass="form-control required"/>--%>
+            <fmt:formatDate value="${workOutSignIn.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+        </td>
+        <td  class="width-15 active">	<label class="pull-right"><font color="red">*</font>用户信息:</label></td>
+        <td class="width-35" >
+            <c:choose>
+                <c:when test="${!disabled}">
+                <form:input path="user.name" htmlEscape="false"  class="form-control required"/>
+                </c:when>
+                <c:otherwise>
+                    ${workOutSignIn.user.name}
+                </c:otherwise>
+            </c:choose>
+        </td>
+    </tr>
+    <tr>
+        <td class="width-15 active"><label class="pull-right"><font color="red">*</font>位置名称:</label></td>
+        <td class="width-75" colspan="3">
+
+            <c:choose>
+                <c:when test="${!disabled}">
+                     <form:input path="locationName" cssClass="form-control"/> </c:when>
+                <c:otherwise>
+                    ${workOutSignIn.locationName}
+                </c:otherwise>
+            </c:choose>
+        </td>
+    </tr>
+    <tr>
+        <td  class="width-15 active">	<label class="pull-right"><font color="red">*</font>位置详情:</label></td>
+        <td class="width-75" colspan="3" >
+            <c:choose>
+                <c:when test="${!disabled}">
+                    <form:textarea path="locationInfo" htmlEscape="false" colspan="3" rows="6" maxlength="550" class="form-control "/>
+                </c:when>
+                <c:otherwise>
+                    ${workOutSignIn.locationInfo}
+                </c:otherwise>
+            </c:choose>
+        </td>
+    </tr>
+    <tr>
+        <td class="width-15 active"><label class="pull-right"><font color="red">*</font>经度:</label></td>
+        <td class="width-75">
+            <c:choose>
+                <c:when test="${!disabled}">
+                    <form:input  path="longitude" htmlEscape="false"  cssClass="form-control"/>
+                </c:when>
+                <c:otherwise>
+                    ${workOutSignIn.longitude}
+                </c:otherwise>
+            </c:choose>
+        </td>
+        <td class="width-15 active"><label class="pull-right"> <font color="red">*</font>纬度:</label></td>
+        <td>
+            <c:choose>
+                <c:when test="${!disabled}">
+                    <form:input path="latitude" htmlEscape="false" cssClass="form-control"/>
+                </c:when>
+                <c:otherwise>
+                    ${workOutSignIn.latitude}
+                </c:otherwise>
+            </c:choose>
+        </td>
+    </tr>
+    </tbody>
+    </form:form>
+</body>
+</html>

+ 129 - 0
src/main/webapp/webpage/modules/workoutsignin/workOutSignInList.jsp

@@ -0,0 +1,129 @@
+<%@ 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="workOutSignIn" action="${ctx}/workoutsignin/workOutSignIn/" 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" cssClass="form-control input-sm"/>--%>
+                            <input name="username" value="${username}" class=" form-control input-sm"/>
+                        </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"--%> type="hidden" class="i-checks"></th>
+                    <th style="text-align: center;"  class="sort-column createDate">创建时间</th>
+                    <th style="text-align: center;"  class="sort-column user">用户</th>
+                    <th style="text-align: center;"  class="sort-column location">位置名称</th>
+                    <th style="text-align: center;"  class="sort-column location">经纬度</th>
+                    <th style="text-align: center;"  class="sort-column locationInfo">位置详情</th>
+                    <th style="text-align: center;">操作</th>
+                </tr>
+                </thead>
+                <tbody>
+                <c:forEach items="${page.list}" var="workOutSignIn">
+                    <tr>
+                        <td> <input <%--type="checkbox"--%> type="hidden" id="${workOutSignIn.id}" class="i-checks"></td>
+                        <td>
+                        <%--    <a  href="javascript:void(0)" onclick="openDialogView('查看外勤签到信息', '${ctx}/workoutsignin/workOutSignIn/form?id=${workOutSignIn.id}&readAttr=disabled','80%','80%')">
+
+                            </a>--%>
+                            <fmt:formatDate value="${workOutSignIn.createDate}"  pattern="yyyy-MM-dd HH:mm:ss"/>
+                        </td>
+                        <td>
+                                ${workOutSignIn.user.name}
+                        </td>
+                        <td>
+                             <%--${workOutSignIn.locationName}--%>
+                             <span title="${workOutSignIn.locationName}">${fns:abbr(workOutSignIn.locationName, 30)}</span>
+                        </td>
+                        <td>
+                                ${workOutSignIn.longitude},${workOutSignIn.latitude}
+                        </td>
+                        <td>
+                                <%--${workOutSignIn.locationInfo}--%>
+                              <span title="${workOutSignIn.locationInfo}">${fns:abbr(workOutSignIn.locationInfo, 30)}</span>
+                        </td>
+                        <td>
+                            <div style="text-align: center">
+                            <shiro:hasPermission name="workoutsignin:workOutSignIn:view">
+                                <a href="javascript:void(0)" onclick="openDialogView('查看外勤签到信息', '${ctx}/workoutsignin/workOutSignIn/form?id=${workOutSignIn.id}&readAttr=disabled','80%','80%')" class="btn btn-info btn-xs" ><i class="fa fa-search-plus"></i> 查看</a>
+                            </shiro:hasPermission>
+        <%--                    <shiro:hasPermission name="workoutsignin:workOutSignIn:edit">
+                                <a href="javascript:void(0)" onclick="openDialog('修改外勤签到信息', '${ctx}/workoutsignin/workOutSignIn/form?id=${workOutSignIn.id}','80%','80%')" class="btn btn-success btn-xs" ><i class="fa fa-edit"></i> 修改</a>
+                            </shiro:hasPermission>--%>
+                            </div>
+                        </td>
+                    </tr>
+                </c:forEach>
+                </tbody>
+            </table>
+
+            <!-- 分页代码 -->
+            <table:page page="${page}"></table:page>
+            <br/>
+            <br/>
+        </div>
+    </div>
+</div>
+</body>
+</html>

+ 243 - 0
src/main/webapp/webpage/modules/workovertime/workOvertimeAudit.jsp

@@ -0,0 +1,243 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>加班申请管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(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);
+                    }
+                }
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+
+             laydate.render({
+                 elem: '#startDate',
+                 event: 'focus',
+                 type : 'date'
+             });
+            laydate.render({
+                elem: '#endDate',
+                event: 'focus',
+                type : 'date'
+            });
+        });
+        function insertTitle(tValue){
+            var list = "${workOvertime.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 = "72";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workOvertime/"+timestamp+"/"+file['name'];
+            var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+            var divId = "_attachment";
+            $("#addFile"+divId).show();
+            multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size);}
+        }
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<form:form id="inputForm" modelAttribute="workOvertime" action="${ctx}/workovertime/workOvertime/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}"/>
+			<input type="hidden" name="workStaffBasicInfo.id" value="${workOvertime.workStaffBasicInfo.id}">
+			<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 id="name" path="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">
+						<div class="input-group">
+							<form:input id="num" path="num" htmlEscape="false"   readonly="true" class="form-control layui-input"/>
+							<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workOvertime.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workOvertime.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">工号:</label>
+					<div class="layui-input-block">
+						<form:input  path="workStaffBasicInfo.no" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.status" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.office.name" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.jobGrade.name" htmlEscape="false" readonly="true" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>开始日期:</label>
+					<div class="layui-input-block">
+						<input  type="text"  maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOvertime.startDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<input value="${fns:getDictLabel(workOvertime.startType, 'date_type', '')}" readonly="true" class="form-control  simple-select query-group">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>结束日期:</label>
+					<div class="layui-input-block">
+						<input  type="text" maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOvertime.endDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<input value="${fns:getDictLabel(workOvertime.endType, 'date_type', '')}" readonly="true" class="form-control  simple-select query-group">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>加班原因:</label>
+					<div class="layui-input-block">
+						<textarea  htmlEscape="false" rows="4" readonly="true"  class="form-control ">${workOvertime.reason}</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="${workOvertime.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 lw8">
+				<div class="form-group-label"><h2>审批意见</h2></div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">审批意见:</label>
+					<div class="layui-input-block">
+						<form:textarea path="act.comment" class="form-control" rows="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="${workOvertime.act.procInsId}"/>
+					<act:histoicFlow procInsId="${workOvertime.act.procInsId}"/>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 281 - 0
src/main/webapp/webpage/modules/workovertime/workOvertimeForm.jsp

@@ -0,0 +1,281 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>加班申请管理</title>
+	<meta name="decorator" content="default"/>
+	<style>
+		label.error{
+			top:40px;
+			left:0;
+		}
+		#reason-error{
+			top:80px;
+		}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(obj == 2){
+                    $("#inputForm").attr("action","${ctx}/workovertime/workOvertime/store");
+                }else{
+                    $("#inputForm").attr("action","${ctx}/workovertime/workOvertime/save");
+                }
+                var endDate = $("#endDate").val().replace("-","").replace("-","");
+                //结束
+                var startDate =  $("#startDate").val().replace("-","").replace("-","");
+                var strtType = $("#startType").val();
+                var endType = $("#endType").val();
+                if(endDate != null && endDate != undefined && endDate != '' && startDate != null && startDate != undefined && startDate != '') {
+                    var days = endDate - startDate;
+                    console.log("------days----" + days);
+                    if (days < 0) {
+                        parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                        return;
+                    }else if(days == 0){
+                        if("2" == strtType && "1" == endType){
+                            parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                            return;
+                        }
+                    }
+                }
+                $("#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();
+            });
+
+            laydate.render({
+                elem: '#startDate',
+                event: 'focus',
+                type : 'date',
+                done: function(value){//日期时间被切换后的回调
+                    //开始
+                    var endDate = $("#endDate").val().replace("-","").replace("-","");
+                    console.log("------endDate----"+endDate);
+                    //结束
+                    var startDate = value.replace("-","").replace("-","");
+                    console.log("------endDate----"+endDate);
+                    if(endDate != null && endDate != undefined && endDate != ''){
+                        var days = endDate - startDate;
+                        console.log("------days----"+days);
+                        if(days < 0){
+                            parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                            return;
+                        }
+                    }
+                }
+            });
+            laydate.render({
+                elem: '#endDate',
+                event: 'focus',
+                type : 'date',
+                done: function(value){//日期时间被切换后的回调
+                    //开始
+                    var startDate = $("#startDate").val().replace("-","").replace("-","");
+                    console.log("------startDate----"+startDate);
+                    //结束
+                    var endDate = value.replace("-","").replace("-","");
+                    console.log("------endDate----"+endDate);
+                    if(startDate != null && startDate != undefined && startDate != ''){
+                        var days = endDate - startDate;
+                        if(days < 0){
+                            parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                            return;
+                        }
+                    }
+                }
+            });
+        });
+        function insertTitle(tValue){
+            var list = "${workOvertime.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 = "72";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workOvertime/"+timestamp+"/"+file['name'];
+            var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+            var divId = "_attachment";
+            $("#addFile"+divId).show();
+            multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size);}
+        }
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workOvertime" action="${ctx}/workovertime/workOvertime/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<input type="hidden" name="workStaffBasicInfo.id" value="${workOvertime.workStaffBasicInfo.id}">
+			<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 id="name" path="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">
+						<div class="input-group">
+							<form:input id="num" path="num" htmlEscape="false"   readonly="true" class="form-control layui-input"/>
+							<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workOvertime.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workOvertime.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">工号:</label>
+					<div class="layui-input-block">
+						<form:input  path="workStaffBasicInfo.no" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.status" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.office.name" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.jobGrade.name" htmlEscape="false" readonly="true" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>开始日期:</label>
+					<div class="layui-input-block">
+						<input id="startDate" name="startDate" style="background-color: #ffffff;" readonly="true"  htmlEscape="false"  maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOvertime.startDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<form:select path="startType" class="form-control  simple-select query-group">
+							<form:options items="${fns:getDictList('date_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">
+						<input id="endDate" name="endDate" style="background-color: #ffffff;" readonly="true"  htmlEscape="false" maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOvertime.endDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<form:select path="endType" class="form-control  simple-select query-group">
+							<form:options items="${fns:getDictList('date_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+						</form:select>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>加班原因:</label>
+					<div class="layui-input-block">
+						<form:textarea path="reason" htmlEscape="false" rows="4" maxlength="255"   class="form-control required"/>
+					</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="${workOvertime.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>

+ 324 - 0
src/main/webapp/webpage/modules/workovertime/workOvertimeList.jsp

@@ -0,0 +1,324 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>加班申请管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		$(document).ready(function() {
+            //搜索框收放
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow1);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow1);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#beginContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+
+
+            laydate.render({
+                elem: '#endContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+            });
+		});
+
+        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
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        top.layer.close(index);//关闭对话框。
+//                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                    return false;
+                },
+                btn3: function(index){
+                }
+            });
+        }
+        function openDialogreplay(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: false, //开启最大化最小化按钮
+                skin: 'two-btns',
+                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){
+                }
+            });
+        }
+	</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="workOvertime" action="${ctx}/workovertime/workOvertime/" method="post" class="form-inline">
+					<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+					<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+					<%--<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->--%>
+
+					<div class="commonQuery lw8">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">姓名:</label>
+							<div class="layui-input-block">
+								<form:input path="name" htmlEscape="false" class="form-control  layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">工号:</label>
+							<div class="layui-input-block">
+								<form:input path="workStaffBasicInfo.no" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item athird">
+							<div class="input-group">
+								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+								<button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
+								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" class="lw8" style="clear:both;display:none;">
+						<%--<div class="layui-item query athird">
+							<label class="layui-form-label">归档日期:</label>
+							<div class="layui-input-block">
+								<input id="beginContractDate" name="beginContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workContractRecord.beginContractDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+								<span class="group-sep">-</span>
+								<input id="endContractDate" name="endContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${workContractRecord.endContractDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+							</div>
+						</div>--%>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">申请编号:</label>
+							<div class="layui-input-block">
+								<form:input path="num" 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: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 style="clear:both;"></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="workovertime:workOvertime:add">
+						<button class="nav-btn nav-btn-add" title="加班申请" onclick="openDialogre('加班申请','${ctx}/workovertime/workOvertime/form','95%','95%')"><i class="fa fa-plus"></i>&nbsp;添加</button>
+					</shiro:hasPermission>
+
+					<button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i>&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',title: '加班编号',minWidth:160,templet:function(d){
+                    var xml = "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看加班申请', '${ctx}/workovertime/workOvertime/form?id=" + d.id + "&tabId=1','95%','95%')\">" +
+                        "<span title=" + d.num + ">" + d.num + "</span></a>";
+                    return xml;
+                }}
+                ,{field:'no',align:'center', title: '工号',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.no +"'>" + d.no + "</span>";
+                }}
+                ,{field:'name',align:'center', title: '姓名',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.name +"'>" + d.name + "</span>";
+                }}
+                ,{field:'officeName',align:'center', title: '部门',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.officeName +"'>" + d.officeName + "</span>";
+                }}
+                ,{field:'jg', align:'center',title: '职级',minWidth:160,templet:function(d){
+                    return "<span title='"+ d.jg +"'>" + d.jg + "</span>";
+                }}
+                ,{field:'startDate',align:'center', sort:true,title: '开始日期',minWidth:160}
+                ,{field:'endDate',align:'center', sort:true, title: '结束日期', minWidth:160}
+                ,{field:'status',align:'center', title: '状态',minWidth:160,templet:function(d){
+                    <%--var st = getAuditState(d.status);--%>
+                    <%--var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workcontractrecord/workContractRecord/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";--%>
+                    <%--return xml;--%>
+                    var st = getAuditState(d.status);
+                    if(st.action)
+                        var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workovertime/workOvertime/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                    else
+                        var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                    return xml;
+                }}
+                // ,{fixed: 'right',align:'center', toolbar: '#op',title:"操作"}
+                ,{field:'op',align:'center',title:"操作",minWidth:160,templet:function(d){
+                    ////对操作进行初始化
+                    var xml = "";
+                    if(d.cancancel != undefined && d.cancancel == "1")
+                        xml += "<a href=\"${ctx}/workovertime/workOvertime/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}/workovertime/workOvertime/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}/workovertime/workOvertime/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}/workovertime/workOvertime/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}/workovertime/workOvertime/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="workOvertime" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${workOvertime.id}"
+                    ,"num":"${workOvertime.num}"
+                    ,"name":"${workOvertime.name}"
+                    ,"no":"${workOvertime.workStaffBasicInfo.no}"
+                    ,"officeName":"${workOvertime.workStaffBasicInfo.office.name}"
+                    ,"jg":"${workOvertime.workStaffBasicInfo.jobGrade.name}"
+                    ,"startDate":"<fmt:formatDate value="${workOvertime.startDate}" pattern="yyyy-MM-dd"/>"
+                    ,"endDate":"<fmt:formatDate value="${workOvertime.endDate}" pattern="yyyy-MM-dd"/>"
+                    ,"status":"${workOvertime.status}"
+                    <c:if test="${fns:getUser().id == workOvertime.createBy.id}">
+                    <c:if test="${workOvertime.status == '2' }">,"cancancel":"1"</c:if>
+                    <shiro:hasPermission name="workovertime:workOvertime:edit"><c:choose>
+                    <c:when test="${workOvertime.status == '1' }">,"canedit1":"1"</c:when>
+                    <c:when test="${workOvertime.status == '4'}">,"canedit2":"1"</c:when>
+                    <c:when test="${workOvertime.status == '3'}">,"canedit3":"1"</c:when>
+                    </c:choose></shiro:hasPermission>
+                    <shiro:hasPermission name="workovertime:workOvertime:del"><c:choose>
+                    <c:when test="${(workOvertime.status == '1' or workOvertime.status == '3' or workOvertime.status == '4')}">,"candelete":"1"</c:when>
+                    </c:choose></shiro:hasPermission>
+                    </c:if>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+
+    resizeListTable();
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+</body>
+</html>

+ 278 - 0
src/main/webapp/webpage/modules/workovertime/workOvertimeModify.jsp

@@ -0,0 +1,278 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>加班申请管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(obj == 2){
+                    $("#flag").val("no");
+                }else{
+                    $("#flag").val("yes");
+                }
+                var endDate = $("#endDate").val().replace("-","").replace("-","");
+                //结束
+                var startDate =  $("#startDate").val().replace("-","").replace("-","");
+                var strtType = $("#startType").val();
+                var endType = $("#endType").val();
+                if(endDate != null && endDate != undefined && endDate != '' && startDate != null && startDate != undefined && startDate != '') {
+                    var days = endDate - startDate;
+                    console.log("------days----" + days);
+                    if (days < 0) {
+                        parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                        return;
+                    }else if(days == 0){
+                        if("2" == strtType && "1" == endType){
+                            parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                            return;
+                        }
+                    }
+                }
+                $("#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();
+            });
+
+            laydate.render({
+                elem: '#startDate',
+                event: 'focus',
+                type : 'date',
+                done: function(value){//日期时间被切换后的回调
+                    //开始
+                    var endDate = $("#endDate").val().replace("-","").replace("-","");
+                    console.log("------endDate----"+endDate);
+                    //结束
+                    var startDate = value.replace("-","").replace("-","");
+                    console.log("------endDate----"+endDate);
+                    if(endDate != null && endDate != undefined && endDate != ''){
+                        var days = endDate - startDate;
+                        console.log("------days----"+days);
+                        if(days < 0){
+                            parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                            return;
+                        }
+                    }
+                }
+            });
+            laydate.render({
+                elem: '#endDate',
+                event: 'focus',
+                type : 'date',
+                done: function(value){//日期时间被切换后的回调
+                    //开始
+                    var startDate = $("#startDate").val().replace("-","").replace("-","");
+                    console.log("------startDate----"+startDate);
+                    //结束
+                    var endDate = value.replace("-","").replace("-","");
+                    console.log("------endDate----"+endDate);
+                    if(startDate != null && startDate != undefined && startDate != ''){
+                        var days = endDate - startDate;
+                        if(days < 0){
+                            parent.layer.msg("结束日期必须在开始日期之后!!!", {icon: 5});
+                            return;
+                        }
+                    }
+                }
+            });
+        });
+        function insertTitle(tValue){
+            var list = "${workOvertime.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 = "72";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workOvertime/"+timestamp+"/"+file['name'];
+            var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+            var divId = "_attachment";
+            $("#addFile"+divId).show();
+            multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size);}
+        }
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workOvertime" action="${ctx}/workovertime/workOvertime/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"/>
+			<input type="hidden" name="workStaffBasicInfo.id" value="${workOvertime.workStaffBasicInfo.id}">
+			<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 id="name" path="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">
+						<div class="input-group">
+							<form:input id="num" path="num" htmlEscape="false"   readonly="true" class="form-control layui-input"/>
+							<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workOvertime.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workOvertime.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">工号:</label>
+					<div class="layui-input-block">
+						<form:input  path="workStaffBasicInfo.no" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.status" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.office.name" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.jobGrade.name" htmlEscape="false" readonly="true" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>开始日期:</label>
+					<div class="layui-input-block">
+						<input id="startDate" name="startDate" style="background-color: #ffffff;" readonly="true"  htmlEscape="false"  maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOvertime.startDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<form:select path="startType" class="form-control  simple-select query-group">
+							<form:options items="${fns:getDictList('date_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">
+						<input id="endDate" name="endDate" style="background-color: #ffffff;" readonly="true"  htmlEscape="false" maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOvertime.endDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<form:select path="endType" class="form-control  simple-select query-group">
+							<form:options items="${fns:getDictList('date_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+						</form:select>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>加班原因:</label>
+					<div class="layui-input-block">
+						<form:textarea path="reason" htmlEscape="false" rows="4" maxlength="255"   class="form-control required"/>
+					</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="${workOvertime.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>

+ 218 - 0
src/main/webapp/webpage/modules/workovertime/workOvertimeView.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"/>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(obj == 2){
+                    $("#inputForm").attr("action","${ctx}/workovertime/workOvertime/store");
+                }else{
+                    $("#inputForm").attr("action","${ctx}/workovertime/workOvertime/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();
+            });
+
+             laydate.render({
+                 elem: '#startDate',
+                 event: 'focus',
+                 type : 'date'
+             });
+            laydate.render({
+                elem: '#endDate',
+                event: 'focus',
+                type : 'date'
+            });
+        });
+        function insertTitle(tValue){
+            var list = "${workOvertime.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 = "72";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workOvertime/"+timestamp+"/"+file['name'];
+            var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+            var divId = "_attachment";
+            $("#addFile"+divId).show();
+            multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size);}
+        }
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<form:form id="inputForm" modelAttribute="workOvertime" action="${ctx}/workovertime/workOvertime/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<input type="hidden" name="workStaffBasicInfo.id" value="${workOvertime.workStaffBasicInfo.id}">
+			<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 id="name" path="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">
+						<div class="input-group">
+							<form:input id="num" path="num" htmlEscape="false"   readonly="true" class="form-control layui-input"/>
+							<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workOvertime.status}">新添</c:when><c:otherwise>${fns:getDictLabel(workOvertime.status, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">工号:</label>
+					<div class="layui-input-block">
+						<form:input  path="workStaffBasicInfo.no" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.status" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.office.name" htmlEscape="false" readonly="true" 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:input  path="workStaffBasicInfo.jobGrade.name" htmlEscape="false" readonly="true" class="form-control required layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>开始日期:</label>
+					<div class="layui-input-block">
+						<input  type="text"  maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOvertime.startDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<input value="${fns:getDictLabel(workOvertime.startType, 'date_type', '')}" readonly="true" class="form-control  simple-select query-group">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>结束日期:</label>
+					<div class="layui-input-block">
+						<input  type="text" maxlength="20" class="laydate-icondate required form-control layer-date layui-input laydate-icon query-group"
+							   value="<fmt:formatDate value="${workOvertime.endDate}" pattern="yyyy-MM-dd"/>"/>
+						</input>
+						<span class="group-sep">-</span>
+						<input value="${fns:getDictLabel(workOvertime.endType, 'date_type', '')}" readonly="true" class="form-control  simple-select query-group">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label"><span class="require-item">*</span>加班原因:</label>
+					<div class="layui-input-block">
+						<textarea  htmlEscape="false" rows="4" readonly="true"  class="form-control ">${workOvertime.reason}</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="${workOvertime.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>

+ 15 - 0
src/main/webapp/webpage/modules/workovertime/workTrack.jsp

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

+ 170 - 0
src/main/webapp/webpage/modules/workovertimeform/workOvertimeAudit.jsp

@@ -0,0 +1,170 @@
+<%@ 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}/workovertimeform/workOvertimeForm/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="workOvertimeForm" action="${ctx}/workovertimeform/workOvertimeForm/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="${workOvertimeForm.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" readonly="readonly" maxlength="20" class="laydate-icon form-control layer-date required"
+							   value="${workOvertimeForm.startTime}"/></c:when>
+					<c:otherwise>
+						${workOvertimeForm.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" readonly="readonly" maxlength="20" class="laydate-icon form-control layer-date required"
+							   value="${workOvertimeForm.endTime}"/></c:when>
+					<c:otherwise>
+						${workOvertimeForm.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" readonly="readonly" class="form-control required" rows="3" maxlength="20"/>
+						</c:when>
+						<c:otherwise>
+							${workOvertimeForm.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 workOvertimeForm.workattachmentList}">
+							<c:forEach items="${workOvertimeForm.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="${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="${workOvertimeForm.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="${workOvertimeForm.act.procInsId}"/>
+			<act:histoicFlow procInsId="${workOvertimeForm.act.procInsId}"/>
+	</form:form>
+	</div>
+	</div>
+	</div>
+</body>
+</html>

+ 269 - 0
src/main/webapp/webpage/modules/workovertimeform/workOvertimeFormForm.jsp

@@ -0,0 +1,269 @@
+<%@ 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}/workovertimeform/workOvertimeForm/list">加班信息</a></li>
+					<li><a href="${ctx}/workovertimeform/workOvertimeForm/workOvertimeTodoList">待办任务</a></li>
+					<li><a href="${ctx}/workovertimeform/workOvertimeForm/workOvertimeHistoricList">已办任务</a></li>
+					<shiro:hasPermission name="workovertimeform:workOvertimeForm:edit"><li class="active"><a href="${ctx}/workovertimeform/workOvertimeForm/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="workOvertimeForm" action="${ctx}/workovertimeform/workOvertimeForm/save" enctype="multipart/form-data" 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"><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="${workovertimeform.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="${workovertimeform.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="longTime" name="longTime" type="text" class="form-control required" value="${workOvertimeForm.longTime}"/>
+						<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"/>
+						<span class="help-inline"></span>
+					</div>
+				</div>
+				<div class="control-group">
+					<label class="control-label"><font color="red">*</font>是否节假日:</label>
+					<div class="controls">
+						<form:select path="isHolidays" class="form-control ">
+							<form:options items="${fns:getDictList('is_holidays')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+						</form:select>
+					</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="${workOvertimeForm.CCId}" labelName="idNames" labelValue="${workOvertimeForm.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="${workOvertimeForm.ida}" labelName="idNamea" labelValue="${workOvertimeForm.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>
+

+ 221 - 0
src/main/webapp/webpage/modules/workovertimeform/workOvertimeFormList.jsp

@@ -0,0 +1,221 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>加班一览</title>
+	<meta name="decorator" content="default"/>
+	<script src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>
+	<script type="text/javascript">
+        function page(n,s){
+            location = '${ctx}/workovertimeform/workOvertimeForm/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}/workovertimeform/workOvertimeForm/list">加班信息</a></li>
+					<li><a href="${ctx}/workovertimeform/workOvertimeForm/workOvertimeTodoList">待办任务</a></li>
+					<li><a href="${ctx}/workovertimeform/workOvertimeForm/workOvertimeHistoricList">已办任务</a></li>
+					<shiro:hasPermission name="workovertimeform:workOvertimeForm:edit"><li><a href="${ctx}/workovertimeform/workOvertimeForm/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="workOvertimeForm" action="${ctx}/workovertimeform/workOvertimeForm/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="${workOvertimeForm.createDateStart}" 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="createDateEnd" name="createDateEnd" readonly="readonly" value="<fmt:formatDate value="${workOvertimeForm.createDateEnd}" pattern="yyyy-MM-dd HH:mm:ss"/>" 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="workovertimeform:workOvertimeForm:add">
+							<table:addRow url="${ctx}/workovertimeform/workOvertimeForm/form" title="加班信息"></table:addRow><!-- 增加按钮 -->
+						</shiro:hasPermission>
+						<shiro:hasPermission name="workovertimeform:workOvertimeForm:edit">
+							<table:editRow url="${ctx}/workovertimeform/workOvertimeForm/form" title="加班信息" id="contentTable"></table:editRow><!-- 编辑按钮 -->
+						</shiro:hasPermission>
+
+--%>						<shiro:hasPermission name="workovertimeform:workOvertimeForm:import">
+							<table:importExcel url="${ctx}/workovertimeform/workOvertimeForm/import"></table:importExcel><!-- 导入按钮 -->
+						</shiro:hasPermission>
+						<shiro:hasPermission name="workovertimeform:workOvertimeForm:export">
+							<table:exportExcel url="${ctx}/workovertimeform/workOvertimeForm/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="workOvertimeForm" varStatus="status">
+					<c:set var="task" value="${workOvertimeForm.task }" />
+					<c:set var="pi" value="${workOvertimeForm.processInstance }" />
+					<c:set var="hpi" value="${workOvertimeForm.historicProcessInstance }" />
+					<tr>
+						<td> ${status.index+1}</td>
+						<td>${workOvertimeForm.createBy.name}</td>
+						<td>${workOvertimeForm.startTime}</td>
+						<td>${workOvertimeForm.endTime}</td>
+						<td>${workOvertimeForm.longTime}</td>
+						<td><%--${workOvertimeForm.reason}--%>
+							<span title="${workOvertimeForm.reason}">${fns:abbr(workOvertimeForm.reason, 30)}</span>
+						</td>
+						<td>${fns:getDictLabel(workOvertimeForm.isHolidays, 'is_holidays', '')}</td>
+						<c:if test="${not empty task}">
+							<td>${fns:getDictLabel(workOvertimeForm.status, 'act_status', '')}</td>
+							<td><fmt:formatDate value="${workOvertimeForm.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+							<td>
+								<div style="text-align: center">
+								<shiro:hasPermission name="workovertimeform:workOvertimeForm:view">
+									<a href="javascript:void(0)" onclick="openDialogView('详情', '${ctx}/workovertimeform/workOvertimeForm/form?id=${workOvertimeForm.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="${workOvertimeForm.createBy.id eq fns:getUser().id}">
+									<c:if test="${workOvertimeForm.status!=3 && workOvertimeForm.status!=4 && workOvertimeForm.status!=5}">
+										<a href="${ctx}/workovertimeform/workOvertimeForm/revoke?id=${workOvertimeForm.id}&processInstanceId=${workOvertimeForm.processInstanceId}&reason=${workOvertimeForm.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}/workovertimeform/workOvertimeForm/applyOnOvertime?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}/workovertimeform/workOvertimeForm/applyOnOvertime?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>
+						</c:if>
+						<c:if test="${empty task}">
+							<td>${fns:getDictLabel(workOvertimeForm.status, 'act_status', '')}</td>
+							<td><fmt:formatDate value="${workOvertimeForm.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+							<td>
+								<div style="text-align: center">
+								<shiro:hasPermission name="workovertimeform:workOvertimeForm:view">
+								<a href="javascript:void(0)" onclick="openDialogView('详情', '${ctx}/workovertimeform/workOvertimeForm/form?id=${workOvertimeForm.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="${workOvertimeForm.createBy.id eq fns:getUser().id}">
+									<c:if test="${workOvertimeForm.status!=3 && workOvertimeForm.status!=4 && workOvertimeForm.status!=5}">
+										<a href="${ctx}/workovertimeform/workOvertimeForm/revoke?id=${workOvertimeForm.id}&processInstanceId=${workOvertimeForm.processInstanceId}&reason=${workOvertimeForm.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>

+ 112 - 0
src/main/webapp/webpage/modules/workovertimeform/workOvertimeHistoricList.jsp

@@ -0,0 +1,112 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>已审核请假信息管理</title>
+	<meta name="decorator" content="default"/>
+	<script 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}/workovertimeform/workOvertimeForm/list">加班信息</a></li>
+					<li><a href="${ctx}/workovertimeform/workOvertimeForm/workOvertimeTodoList">待办任务</a></li>
+					<li class="active"><a href="${ctx}/workovertimeform/workOvertimeForm/workOvertimeHistoricList">已办任务</a></li>
+					<shiro:hasPermission name="workovertimeform:workOvertimeForm:edit"><li><a href="${ctx}/workovertimeform/workOvertimeForm/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}/workovertimeform/workOvertimeForm/workOvertimeHistoricList" 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>
+					<th style="text-align: center;">创建时间</th>
+				</tr>
+				</thead>
+				<tbody>
+				<c:forEach items="${list}" var="workOvertimeForm">
+					<c:set var="task" value="${workOvertimeForm.act.task}" />
+					<c:set var="vars" value="${workOvertimeForm.act.vars}" />
+					<c:set var="procDef" value="${workOvertimeForm.act.procDef}" /><%--
+				<c:set var="procExecUrl" value="${act.procExecUrl}" /> --%>
+					<c:set var="status" value="${workOvertimeForm.act.status}" />
+					<tr>
+						<td>${workOvertimeForm.act.vars.map.applyUserId}</td>
+						<td>${procDef.name}</td>
+						<td><b title='流程版本号'>V: ${procDef.version}</b></td>
+						<td>${workOvertimeForm.startTime}</td>
+						<td>${workOvertimeForm.endTime}</td>
+						<td>${workOvertimeForm.longTime}</td>
+						<td><%--${workOvertimeForm.reason}--%>
+							<span title="${workOvertimeForm.reason}">${fns:abbr(workOvertimeForm.reason, 30)}</span>
+						</td>
+						<td>${fns:getDictLabel(workOvertimeForm.isHolidays, 'is_holidays', '')}</td>
+						<td><fmt:formatDate value="${workOvertimeForm.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+						<%--<td>--%>
+							<%--&lt;%&ndash;<a  href="javascript:openDialog('跟踪','${ctx}/act/task/trace/photo/${task.processDefinitionId}/${task.executionId}','1000px', '600px')">跟踪</a>--%>
+						<%--&ndash;%&gt;</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/workovertimeform/workOvertimeTodoList.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 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}/workovertimeform/workOvertimeForm/list">加班信息</a></li>
+					<li class="active"><a href="${ctx}/workovertimeform/workOvertimeForm/workOvertimeTodoList">待办任务</a></li>
+					<li><a href="${ctx}/workovertimeform/workOvertimeForm/workOvertimeHistoricList">已办任务</a></li>
+					<shiro:hasPermission name="workovertimeform:workOvertimeForm:edit"><li><a href="${ctx}/workovertimeform/workOvertimeForm/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}/workovertimeform/workOvertimeForm/workOvertimeTodoList" 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>
+					<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="workOvertimeForm">
+					<c:set var="task" value="${workOvertimeForm.act.task}" />
+					<c:set var="vars" value="${workOvertimeForm.act.vars}" />
+					<c:set var="procDef" value="${workOvertimeForm.act.procDef}" /><%--
+				<c:set var="procExecUrl" value="${act.procExecUrl}" /> --%>
+					<c:set var="status" value="${workOvertimeForm.act.status}" />
+					<tr>
+						<td>${workOvertimeForm.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>${workOvertimeForm.startTime}</td>
+						<td>${workOvertimeForm.endTime}</td>
+						<td>${workOvertimeForm.longTime}</td>
+						<td><%--${workOvertimeForm.reason}--%>
+							<span title="${workOvertimeForm.reason}">${fns:abbr(workOvertimeForm.reason, 30)}</span>
+						</td>
+						<td>${fns:getDictLabel(workOvertimeForm.isHolidays, 'is_holidays', '')}</td>
+						<td><fmt:formatDate value="${workOvertimeForm.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+						<td>
+							<div style="text-align: center">
+							<c:if test="${not empty task.assignee}">
+								<a href="javascript:void(0)" onclick="openDialogre('任务办理', '${ctx}/workovertimeform/workOvertimeForm/applyOnOvertime?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>
+
+								<%--<a href="${ctx}/workovertimeform/workOvertimeForm/applyOnOvertime?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>
+							--%></c:if>
+							</div>
+						</td>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			<!-- 分页代码 -->
+			<table:page page="${page}"></table:page>
+			<br/>
+			<br/>
+		</div>
+	</div>
+</div>
+</body>
+</html>