diff --git a/src/main/java/com/supwisdom/dlpay/atte/Test.java b/src/main/java/com/supwisdom/dlpay/atte/Test.java
index 6d49548..c1a89f9 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/Test.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/Test.java
@@ -1,6 +1,8 @@
 package com.supwisdom.dlpay.atte;
 
 import java.io.*;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Properties;
 
 public class Test {
@@ -21,6 +23,14 @@
         } catch (Exception e) {
             e.printStackTrace();
         }
+        Map<String,Integer> map=new HashMap<>();
+        map.put("1",11);
+        map.put("2",22);
+        map.put("3",33);
+        for(String ts:map.keySet()){
+            System.out.println(ts);
+        }
+
     }
     
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/controller/CustAtteController.java b/src/main/java/com/supwisdom/dlpay/atte/controller/CustAtteController.java
index ba64171..dc00097 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/controller/CustAtteController.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/controller/CustAtteController.java
@@ -4,10 +4,7 @@
 import com.supwisdom.dlpay.atte.bean.AttedtlSearchBean;
 import com.supwisdom.dlpay.atte.bean.RestSearchBean;
 import com.supwisdom.dlpay.atte.bean.Sum;
-import com.supwisdom.dlpay.atte.domain.TAtteClass;
-import com.supwisdom.dlpay.atte.domain.TAtteDtl;
-import com.supwisdom.dlpay.atte.domain.TSeaCusttype;
-import com.supwisdom.dlpay.atte.domain.TSeason;
+import com.supwisdom.dlpay.atte.domain.*;
 import com.supwisdom.dlpay.atte.service.AtteClassService;
 import com.supwisdom.dlpay.atte.service.AtteRestService;
 import com.supwisdom.dlpay.atte.service.CustseaService;
@@ -1030,6 +1027,31 @@
         return map;
     }
 
+    /**
+     *  删除假单
+     */
+    @ResponseBody
+    @RequestMapping(value="/deleteRest",method = {RequestMethod.POST})
+    public Map deleteRest(@RequestParam(value = "id") Integer id,
+                           HttpServletRequest request, HttpServletResponse response) {
+        Map map=new HashMap();
 
+        try {
+            TAtteRest rest=atteRestService.getAtteRestById(id);
+            if(rest==null){
+                map.put("errStr","删除失败,假单不存在!");
+                return map;
+            }
+            rest.setStatus(4);
+            rest.setUpdatetime(DateUtil.getNow());
+            atteRestService.updateAtteRest(rest);
+            map.put("errStr","");
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("删除班次异常",e.getMessage());
+           map.put("errStr",e.getMessage());
+        }
+        return map;
+    }
 
 }
diff --git a/src/main/resources/templates/atte/dtl/index.html b/src/main/resources/templates/atte/dtl/index.html
index 805dbc5..9ce231e 100644
--- a/src/main/resources/templates/atte/dtl/index.html
+++ b/src/main/resources/templates/atte/dtl/index.html
@@ -305,7 +305,7 @@
                 data:JSON.stringify(_self.attedtlform),
                 success:function(ret){
                     // //console.log(ret);
-                    // _self.totSize=ret.PageResult.totalCount;
+                     _self.totSize=ret.PageResult.totalCount;
                     _self.tableData=ret.PageResult.list;
                     var custtypelist = [];
                     var types=ret.custtypelist;
diff --git a/src/main/resources/templates/atte/report/p_index.html b/src/main/resources/templates/atte/report/p_index.html
index dd6b6ec..12a5e05 100644
--- a/src/main/resources/templates/atte/report/p_index.html
+++ b/src/main/resources/templates/atte/report/p_index.html
@@ -286,7 +286,7 @@
                 data:JSON.stringify(_self.preportform),
                 success:function(ret){
                     // //console.log(ret);
-                    // _self.totSize=ret.PageResult.totalCount;
+                     _self.totSize=ret.PageResult.totalCount;
                     _self.tableData=ret.PageResult.list;
                     var custtypelist = [];
                     var types=ret.custtypelist;
diff --git a/src/main/resources/templates/atte/rest/index.html b/src/main/resources/templates/atte/rest/index.html
index eee12fa..ed37bd4 100644
--- a/src/main/resources/templates/atte/rest/index.html
+++ b/src/main/resources/templates/atte/rest/index.html
@@ -140,29 +140,42 @@
                     <el-table-column
                             prop="startdate"
                             label="开始日期"
-
+                            :formatter="sdatefor"
                             >
                     </el-table-column>
                     <el-table-column
                             prop="enddate"
                             label="截止日期"
+                            :formatter="edatefor"
                     >
                     </el-table-column>
                     <el-table-column
                             prop="rtype"
                             label="请假类型"
+                            :formatter="rtypefor"
                     >
                     </el-table-column>
                     <el-table-column
-                            prop="status"
                             label="状态"
                     >
+                        <template scope="scope">
+                            <span v-if="scope.row.status=='0'" class="layui-badge layui-bg-orange">未审核</span>
+                            <span v-if="scope.row.status=='1'" class="layui-badge layui-bg-green">已通过</span>
+                            <span v-if="scope.row.status=='2'" class="layui-badge layui-bg-red">未通过</span>
+                            <span v-if="scope.row.status=='3'" class="layui-badge layui-bg-gray">取消</span>
+                        </template>
                     </el-table-column>
                     <el-table-column
                             prop="remark"
                             label="请假事由"
                     >
                     </el-table-column>
+                    <el-table-column
+                            label="操作">
+                        <template scope="scope">
+                            <button type="button" class="btn btn-danger btn-xs" title="删除" @click="deleteRest(scope.row)">删除</button>
+                        </template>
+                    </el-table-column>
 
                 </el-table>
                 <div class="clearfix"></div>
@@ -236,9 +249,14 @@
             currRowChange:function(val) {
                 this.currentRow = val;
             },
-            attedatefor:function(row){
-                if(row.attedate!= null){
-                    return dateformatter(row.attedate);
+            sdatefor:function(row){
+                if(row.startdate!= null){
+                    return dateformatter(row.startdate);
+                }
+            },
+            edatefor:function(row){
+                if(row.enddate!= null){
+                    return dateformatter(row.enddate);
                 }
             },
             statimefor:function(row){
@@ -251,14 +269,9 @@
                     return state_grpname(row.state);
                 }
             },
-            oldstatefor:function(row){
-                if(row.oldstate!= null){
-                    return state_grpname(row.oldstate);
-                }
-            },
-            timenamefor:function(row){
-                if(row.timeid!=null){
-                    return timeid_grpname(row.timeid);
+            rtypefor:function(row){
+                if(row.rtype!= null){
+                    return rtype_grpname(row.rtype);
                 }
             },
             query:function () {
@@ -288,6 +301,9 @@
             refreshdtl:function (){
                 var _that=this;
                 refreshAtteDtl(_that);
+            },
+            deleteRest:function(row){
+                delRest(row.id);
             }
 
         },
@@ -391,10 +407,9 @@
             }
         }
     }
-
-    function timeid_grpname(grpid){
+    function rtype_grpname(grpid){
         if(grpid!=null){
-            var list = polreport_vue.timegrplist;
+            var list = polreport_vue.rtypelist;
             for(var i=0;i<list.length;i++){
                 if(list[i].value == grpid){
                     return list[i].label;
@@ -402,6 +417,8 @@
             }
         }
     }
+
+
     function class_Formatdate(date){
         if(date==null||date==''){
             return '';
@@ -424,6 +441,10 @@
         var token=$("meta[name='_csrf_token']").attr("value");
         var startdate=class_Formatdate(_self.preportform.startdate);
         var enddate=class_Formatdate(_self.preportform.enddate);
+        if(startdate>enddate){
+            layer.msg('开始时间不能大于结束时间!', {icon: 2, time: 1000});
+            return ;
+        }
         $.ajax({
             type:"post",
             dataType:"json",
@@ -495,6 +516,40 @@
     };
     
 
+    function delRest(id){
+        if(id==''||id==undefined||id==null){
+            layer.msg("请选择要删除的假条!", {icon: 2, time: 1000});
+            return ;
+        }
+        var token=$("meta[name='_csrf_token']").attr("value");
+        layer.confirm('你确定要删除选择的假条吗?', {icon: 3, title:'请确认',offset:'30%'}, function(index){
+            $.ajax({
+                type:"post",
+                dataType:"json",
+                url:"[[@{/atte/deleteRest?id=}]]"+id,
+                contentType: "application/json",
+                headers: {
+                    'Accept': 'application/json',
+                    'Content-Type': 'application/json',
+                    'X-CSRF-TOKEN':token,
+                },
+                success:function(ret){
+                    //console.log(ret);
+                    if(ret.errStr == undefined){
+                        layer.msg('用户认证已过期，请重新登录', {icon:2,time:1000});
+                        window.location="login";
+                        return;
+                    }
+                    if (ret.errStr != "") {
+                        layer.msg(ret.message, {icon:2,time:1000});
+                    }else{
 
+                            layer.msg('删除成功', {icon: 1, time: 1000});
+                            dtl_refreshThisTable();
+                    }
+                }
+            })
+        });
+    }
 
 </script>
\ No newline at end of file
diff --git a/src/main/resources/templates/atte/timedtl/index.html b/src/main/resources/templates/atte/timedtl/index.html
index ed80a73..581ce38 100644
--- a/src/main/resources/templates/atte/timedtl/index.html
+++ b/src/main/resources/templates/atte/timedtl/index.html
@@ -352,7 +352,7 @@
                 data:JSON.stringify(_self.attedtlform),
                 success:function(ret){
                     // //console.log(ret);
-                    // _self.totSize=ret.PageResult.totalCount;
+                   _self.totSize=ret.PageResult.totalCount;
                     _self.tableData=ret.PageResult.list;
                     var custtypelist = [];
                     var types=ret.custtypelist;
