diff --git a/src/main/java/com/supwisdom/dlpay/api/controller/DoorApiAction.java b/src/main/java/com/supwisdom/dlpay/api/controller/DoorApiAction.java
index 3e11bc7..d3a0f87 100644
--- a/src/main/java/com/supwisdom/dlpay/api/controller/DoorApiAction.java
+++ b/src/main/java/com/supwisdom/dlpay/api/controller/DoorApiAction.java
@@ -118,7 +118,7 @@
     datamap.put("visitorname",visitorname);
     datamap.put("idno",idno);
     datamap.put("phone",phone);
-    datamap.put("time",DateUtil.getNow("yyyyMMddhhmmss"));
+    datamap.put("time",DateUtil.getNow("yyyyMMddHHmmss"));
     datamap.put("sex",sex);
     datamap.put("deptcode",deptcode);
     datamap.put("custid",custid);
@@ -137,7 +137,7 @@
 
     SystemDateTime dt = systemUtilService.getSysdatetime();
     try{
-      String time = DateUtil.getNow("yyyyMMddhhmmss");
+      String time = DateUtil.getNow("yyyyMMddHHmmss");
       EVisitorCheckDtl eVisitorCheckDtl=new EVisitorCheckDtl();
       eVisitorCheckDtl.setCompany(company);
       eVisitorCheckDtl.setCustid(custid);
diff --git a/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java b/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
index b342551..3e6a14a 100644
--- a/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
+++ b/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
@@ -240,7 +240,7 @@
 
 
         try {
-            String time = DateUtil.getNow("yyyyMMddhhmmss");
+            String time = DateUtil.getNow("yyyyMMddHHmmss");
             EVisitorCheckDtl eVisitorCheckDtl = new EVisitorCheckDtl();
             eVisitorCheckDtl.setCompany(postData.getCompany());
             eVisitorCheckDtl.setCustid(postData.getCustid());
@@ -258,9 +258,10 @@
             eVisitorCheckDtl.setSign(s);
             eVisitorCheckDtl.setTotalcount(3);
             eVisitorCheckDtl.setUsecount(0);
-            int timeint = Integer.parseInt(time);
+            String timeold = time.substring(8);
+            int timeint = Integer.parseInt(timeold);
             String lasttime = "";
-            if (Integer.parseInt(time.substring(8)) < 210000) {
+            if (timeint < 210000) {
                 timeint += 30000;
                 lasttime = time.substring(0, 8) + timeint;
             } else {
diff --git a/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java b/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java
index 5b4d150..e62dbdc 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java
@@ -14,6 +14,7 @@
 import com.supwisdom.dlpay.system.service.SystemService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
 
@@ -36,19 +37,16 @@
      *    菜单
      * @param
      */
-    @GetMapping("/atte/index")
-    public ModelAndView appindex(@RequestParam(value = "custid")String custid){
-        ModelAndView model=new ModelAndView();
-       model.addObject("custid",custid);
-       model.setViewName("atte/app/index");
-        return model;
+    @RequestMapping("/atte/index")
+    public String appindex(@RequestParam(value = "custid") String custid, Model model) {
+        model.addAttribute("custid", custid);
+        return "atte/app/index";
     }
-
     /**
      *    请假
      * @param
      */
-    @RequestMapping(value = "/savetempcust")
+    @RequestMapping(value = "/savetempcust", method = {RequestMethod.POST})
     @ResponseBody
     public Map addRest(@RequestParam("custid") String custid,
                        @RequestParam("enddate") String enddate,
@@ -102,12 +100,10 @@
     /**
      *  请假页面
      */
-    @GetMapping("/atte/addindex")
-    public ModelAndView addindex(@RequestParam(value = "custid")String custid){
-        ModelAndView model=new ModelAndView();
-        model.addObject("custid",custid);
-        model.setViewName("apph5/askforleave");
-        return model;
+    @RequestMapping("/atte/addindex")
+    public String impdevindex(@RequestParam(value = "custid") String custid, Model model) {
+        model.addAttribute("custid", custid);
+        return "apph5/askforleave";
     }
     /**
      *  查看假条页面
@@ -164,6 +160,8 @@
         TCustomer cust=webInterfaceService.findCustomerById(custid);
         searchBean.setDeptcode(cust.getDeptcode());
         Pagination page=atteRestService.getRestInfo(searchBean,pageNo,pageSize);
+
+        map.put("page",page);
       return map;
     }
 
diff --git a/src/main/kotlin/com/supwisdom/dlpay/security.kt b/src/main/kotlin/com/supwisdom/dlpay/security.kt
index 789959e..73eaabd 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -128,6 +128,7 @@
                         .antMatchers("/api/conference/**").permitAll()
                         .antMatchers("/api/notify/**").permitAll()
                         .antMatchers("/app/atte/index").permitAll()
+                        .antMatchers("/app/*").permitAll()
                         .antMatchers("/api/common/**").hasAnyRole("THIRD_COMMON", "THIRD_ADMIN")
                         .antMatchers("/api/consume/**").hasRole("THIRD_CONSUME")
                         .antMatchers("/api/deposit/**").hasRole("THIRD_DEPOSIT")
diff --git a/src/main/resources/templates/apph5/applyforvisitor.html b/src/main/resources/templates/apph5/applyforvisitor.html
index 0eda7db..4f467d3 100644
--- a/src/main/resources/templates/apph5/applyforvisitor.html
+++ b/src/main/resources/templates/apph5/applyforvisitor.html
@@ -3,8 +3,8 @@
 
 <head>
     <title>首页</title>
-    <!--<meta name="_csrf_header" th:content="${_csrf.headerName}" />
-    <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}" />-->
+    <meta name="_csrf_header" th:content="${_csrf.headerName}" />
+    <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}" />
     <meta charset="utf-8"/>
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
diff --git a/src/main/resources/templates/apph5/askforleave.html b/src/main/resources/templates/apph5/askforleave.html
index 3a55deb..12d4379 100644
--- a/src/main/resources/templates/apph5/askforleave.html
+++ b/src/main/resources/templates/apph5/askforleave.html
@@ -3,8 +3,8 @@
 
 <head>
     <title>首页</title>
-    <!--<meta name="_csrf_header" th:content="${_csrf.headerName}" />
-    <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}" />-->
+    <meta name="_csrf_header" th:content="${_csrf.headerName}" />
+    <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}" />
     <meta charset="utf-8"/>
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
@@ -59,7 +59,7 @@
             <div class="el-col el-col-18">
                 <div class="el-input" style="width: 187px;">
                     <el-date-picker type="date" v-model="tempform.enddate" id="time"
-                                    :picker-options="pickerOptions0" :editable="false"
+                                    :picker-options="pickerOptions1" :editable="false"
                                     value-format="yyyyMMdd"
                                     style="width:100%;"></el-date-picker>
                 </div>
@@ -115,16 +115,24 @@
             bannerHeight: 1000,
             screenWidth: 0,
             userId: '',
+            pickerOptions0: {
+                disabledDate: function (time) {
+                    return time.getTime() > Date.now();
+                }
+            },pickerOptions1: {
+                disabledDate:function(time) {
+                    if(app_vue.tempform.startdate !=''){
+
+                        return time.getTime() < app_vue.tempform.startdate.getTime();
+                    }else {
+                        return time.getTime() > Date.now();
+                    }
+                }
+            },
             rules: {
                 rtype: [
                     {required: true, message: '请选择请假类型', trigger: 'blur'},
                 ],
-                startdate: [
-                    {required: true, message: '请选择开始日期', trigger: 'blur'}
-                ],
-                enddate: [
-                    {required: true, message: '请选择结束日期', trigger: 'blur'}
-                ],
                 remark: [
                     {required: true, message: '请输入备注', trigger: 'blur'}
                 ]
@@ -144,7 +152,7 @@
                         }
                     });
                 if (vali == true) {
-                    saveTempCustomer(_that, _that.tempform, formName);
+                    saveTempCustomer(_that, _that, formName);
                 }
             },
 
@@ -201,25 +209,29 @@
         app_vue.setSize();
     }
 
-    function saveTempCustomer(_that, formdata, formName) {
+    function saveTempCustomer(_that, that, formName) {
         var token = $("meta[name='_csrf_token']").attr("value");
+        var startdate=that.tempform.startdate;
+        var enddate= that.tempform.enddate;
+        var rtype=that.tempform.rtype;
+        var remark=that.tempform.remark;
+        var custid=that.tempform.custid;
         $.ajax({
             type: "post",
-            url: encodeURI("[[@{/app/savetempcust}]]"),
+            url: encodeURI("[[@{/app/savetempcust?startdate=}]]"+startdate+"&enddate="+enddate+"&rtype="+rtype+"&remark="+remark+"&custid="+custid),
             dataType: "json",
             contentType: "application/json",
             headers: {
                 'Accept': 'application/json',
                 'Content-Type': 'application/json',
-                'X-CSRF-TOKEN': token
+                'X-CSRF-TOKEN': token,
             },
-            data: JSON.stringify(formdata),
             success: function (data) {
 
                 if (data.errStr != "") {
                     layer.msg(data.errStr, {icon: 2, time: 2000});
                 } else {
-                    layer.msg('登记成功!', {icon: 1, time: 1000});
+                    layer.msg('申请成功!', {icon: 1, time: 1000});
                 }
             }
         });
diff --git a/src/main/resources/templates/apph5/leavehistory.html b/src/main/resources/templates/apph5/leavehistory.html
index 544f90e..23726c8 100644
--- a/src/main/resources/templates/apph5/leavehistory.html
+++ b/src/main/resources/templates/apph5/leavehistory.html
@@ -129,6 +129,15 @@
                             </el-table-column>-->
                         </el-table>
                         <div class="clearfix"></div>
+                        <el-pagination
+                                @size-change="handleSizeChange"
+                                @current-change="currPageChange"
+                                :current-page="currPage"
+                                :page-sizes="[10, 20, 50, 100]"
+                                :page-size="pageSize"
+                                layout="prev, pager, next,sizes, jumper,total"
+                                :total="totSize">
+                        </el-pagination>
 
                     </template>
                 </div>
@@ -203,7 +212,7 @@
                     </div>
                 </div>
             </el-form-item>
-            <el-form-item label="状态:" prop="status">
+            <el-form-item label="状  态:" prop="status">
                 <div class="el-col el-col-18">
                     <div class="el-input" style="width: 90%;">
                         <el-select v-model="tempform.status" id="status">
@@ -330,6 +339,17 @@
             setSize: function () {
                 // 通过浏览器宽度(图片宽度)计算高度
                 this.bannerHeight = this.screenWidth;
+            },handleSizeChange:function(val) {
+                this.pageSize=val;
+                time_commonQuery(this,this.timeform.timename,this.currPage,val);
+                //console.log('每页条'+val);
+            },currPageChange:function(val) {
+                this.currPage=val;
+                time_commonQuery(this,this.timeform.timename,this.currPage,this.pageSize);
+                //console.log('当前页:'+val);
+            },
+            currRowChange:function(val) {
+                this.currentRow = val;
             },
         },
         created: function () {
@@ -467,8 +487,8 @@
             success: function (info) {
                 console.log(info)
 
-                _self.tableData = info.list;
-            }
+                _self.tableData = info.page.list;
+                _self.totSize=info.page.totalcount;            }
         })
     }
 
diff --git a/src/main/resources/templates/visitormanage/addVisitorCheck.html b/src/main/resources/templates/visitormanage/addVisitorCheck.html
index 1fd0c67..d1ac4ab 100644
--- a/src/main/resources/templates/visitormanage/addVisitorCheck.html
+++ b/src/main/resources/templates/visitormanage/addVisitorCheck.html
@@ -8,7 +8,7 @@
     </div>
     <div class="layui-card-body">
         <div id="searchDoorlist">
-            <el-form :inline="true" ref="searchDoorForm" :model="searchDoorForm" :rules="rules" label-width="110px"
+            <el-form :inline="true" ref="searchDoorForm" :model="searchDoorForm"  label-width="110px"
                      data-parsley-validate class="form-horizontal form-label-left el-form-item el-form-item--mini">
 
                 <el-row :span="18">
@@ -201,35 +201,8 @@
                     }
                 }
             }
-            ,
-            rules: {
-                visitorname: [
-                    {required: true, message: '请输入访客姓名', trigger: 'blur'},
-                    {min: 1, max: 20, message: '长度在 1 到 32 个字符', trigger: 'blur'}
-                ],
-                idno: [
-                    {required: true, message: '请输入身份证号', trigger: 'blur'},
-                    {min: 15, max: 18, message: '长度在 15 到 18 个字符', trigger: 'blur'},
-                ],
-                time: [
-                    {required: true, message: '请输入时间', trigger: 'blur'},
-                ],
-                sex: [
-                    {required: true, message: '请选择性别', trigger: 'blur'}
-                ],
 
-                phone: [
-                    {validator: oper_validateMobile, trigger: 'blur'}
-                ],
 
-                company: [
-                    {required: true, message: '请填写访客单位', trigger: 'blur'}
-                ],
-                deptcode: [
-                    {required: true, message: '请选择所属部门', trigger: 'blur'}
-                ]
-
-            },
         },
         methods: {
 
diff --git a/src/main/resources/templates/visitormanage/customer/visitorchecklist.html b/src/main/resources/templates/visitormanage/customer/visitorchecklist.html
index 192d23b..25295f6 100644
--- a/src/main/resources/templates/visitormanage/customer/visitorchecklist.html
+++ b/src/main/resources/templates/visitormanage/customer/visitorchecklist.html
@@ -9,30 +9,28 @@
     <div class="layui-card-body">
         <div class="layui-form toolbar">
             搜索：
-            <input id="visitor-search-value" class="layui-input search-input" type="text" placeholder="输入姓名"/>&emsp;
-            <select id="visitor-search-sex" class="layui-input search-input" type="" >
+            <input id="visitorcheck-search-value" class="layui-input search-input" type="text" placeholder="输入姓名"/>&emsp;
+            <select id="visitorcheck-search-sex" class="layui-input search-input" type="" >
                 <option value="">性别</option>
                 <option value="1">男</option>
                 <option value="2">女</option>
             </select>&emsp;
-            <input id="visitor-search-startdate" class="layui-input search-input" type="date" />&emsp;
+            <input id="visitorcheck-search-startdate" class="layui-input search-input" type="date" />&emsp;
             <label>~&nbsp;</label>
-            <input id="visitor-search-enddate" class="layui-input search-input" type="date" />&emsp;
-            <button id="customer-btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            <input id="visitorcheck-search-enddate" class="layui-input search-input" type="date" />&emsp;
+            <button id="visitorcheck-search-btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
-           <!-- <button id="customer-btn-import" class="layui-btn icon-btn" ><i class="layui-icon"></i>批量导入</button>-->
-          <!--  <a id="customer-btn-export" href="javascript:void(0);" class="layui-btn layui-btn-primary" >导出</a>-->
-        </div>
-        <table class="layui-table" id="customer-table" lay-filter="customer-table"></table>
+           </div>
+        <table class="layui-table" id="visitorcheck-search-table" lay-filter="visitorcheck-search-table"></table>
     </div>
 </div>
-<input hidden th:value="${custtypelist}" id="custtypelist">
-<input hidden th:value="${deptlist}" id="deptlist">
+<input hidden th:value="${custtypelist}" id="custtypelist1">
+<input hidden th:value="${deptlist}" id="deptlist1">
 <script>
 
-    var ctlist=$("#custtypelist").val();
+    var ctlist=$("#custtypelist1").val();
     var custtypelist=JSON.parse(ctlist);
-    var dplist=$("#deptlist").val();
+    var dplist=$("#deptlist1").val();
     var deptlist=JSON.parse(dplist);
     layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
         let form = layui.form;
@@ -43,7 +41,7 @@
 
         // 渲染表格
         table.render({
-            elem: '#customer-table',
+            elem: '#visitorcheck-search-table',
             url: '[[@{/visitor/checklist}]]',
             page: true,
             minWidth: 80,
@@ -98,21 +96,13 @@
                 ]
             ]
         });
-        $('#customer-btn-export').click(function () {
-            var url = '[[@{/customer/export}]]';
-            /* $("#form").attr("action",url);
 
-             $("#form").submit();*/
-
-            $("#customer-btn-export").attr("href", url );
-            $("#customer-btn-export")[0].click();
-        });
         // 搜索按钮点击事件
-        $('#customer-btn-search').click(function () {
-            let key = $('#visitor-search-value').val().trim();
-            let sex = $('#visitor-search-sex').val().trim();
-            let startdate = $('#visitor-search-startdate').val().trim();
-            let enddate = $('#visitor-search-enddate').val().trim();
+        $('#visitorcheck-search-btn-search').click(function () {
+            let key = $('#visitorcheck-search-value').val().trim();
+            let sex = $('#visitorcheck-search-sex').val().trim();
+            let startdate = $('#visitorcheck-search-startdate').val().trim();
+            let enddate = $('#visitorcheck-search-enddate').val().trim();
             if(enddate!=null&&enddate!=""){
                 if(startdate!=null&&startdate!=""){
                     if(startdate>enddate){
@@ -122,9 +112,9 @@
                 }
 
             }
-            table.reload('customer-table', {where: {searchkey: key,sex: sex,startdate:startdate,enddate:enddate }, page: {curr: 1}});
+            table.reload('visitorcheck-search-table', {where: {searchkey: key,sex: sex,startdate:startdate,enddate:enddate }, page: {curr: 1}});
         });
-        $('#customer-btn-add').click(function () {
+        $('#visitorcheck-search-btn-add').click(function () {
             showModel();
         });
        /* $('#customer-btn-import').click(function () {
@@ -147,14 +137,14 @@
                 title: title,
                 path: '[[@{/customer/loadadd}]]',
                 finish: function () {
-                    table.reload('customer-table', {});
+                    table.reload('visitorcheck-search-table', {});
                 }
             });
         };
 
 
         // 工具条点击事件
-        table.on('tool(customer-table)', function (obj) {
+        table.on('tool(visitorcheck-search-table)', function (obj) {
             let data = obj.data;
             let layEvent = obj.event;
             console.log(data);
@@ -186,7 +176,7 @@
                     } else {
                         layer.msg(data.msg, {icon: 2});
                     }
-                    table.reload('customer-table', {});
+                    table.reload('visitorcheck-search-table', {});
                 }, function (ret) {
                     console.log(ret);
                     layer.closeAll('loading');
