diff --git a/src/main/java/com/supwisdom/dlpay/atte/bean/AtteDetailInfo.java b/src/main/java/com/supwisdom/dlpay/atte/bean/AtteDetailInfo.java
index d8563b1..f4ac20b 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/bean/AtteDetailInfo.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/bean/AtteDetailInfo.java
@@ -17,6 +17,7 @@
     private String deptcode;
     private String oldstate;
     private Integer timetype;
+    private String timename;
 
     public String getCustname() {
         return custname;
@@ -106,4 +107,12 @@
     public void setTimetype(Integer timetype) {
         this.timetype = timetype;
     }
+
+    public String getTimename() {
+        return timename;
+    }
+
+    public void setTimename(String timename) {
+        this.timename = timename;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/bean/AttedtlSearchBean.java b/src/main/java/com/supwisdom/dlpay/atte/bean/AttedtlSearchBean.java
index c319093..c4761af 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/bean/AttedtlSearchBean.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/bean/AttedtlSearchBean.java
@@ -9,6 +9,7 @@
     private String deptcode;
     private String devname;
     private String dtcode;
+    private String custid;
 
     public String getStartdate() {
         return startdate;
@@ -73,4 +74,12 @@
     public void setDtcode(String dtcode) {
         this.dtcode = dtcode;
     }
+
+    public String getCustid() {
+        return custid;
+    }
+
+    public void setCustid(String custid) {
+        this.custid = custid;
+    }
 }
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 389eba6..9845ecf 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.atte.controller;
 
+import com.supwisdom.dlpay.atte.bean.AttedtlSearchBean;
 import com.supwisdom.dlpay.atte.bean.ClockInfo;
 import com.supwisdom.dlpay.atte.bean.ClockSearchBean;
 import com.supwisdom.dlpay.atte.bean.RestSearchBean;
@@ -480,7 +481,7 @@
             TCard card=cardDao.findCardByCustid(custid);
             Pagination page=new Pagination();
             if(card!=null){
-                page = webInterfaceService.findSystemTDoordtl("","","","",card.getCardno(),"","","","all",pageNo,10,"");
+                page = atteClassService.findSystemTDoordtl("","","","",card.getCardno(),"","","","all",pageNo,10,"");
             }
             map.put("page",page);
 
@@ -495,4 +496,95 @@
     }
 
 
+    /**
+     *    考勤明细
+     * @param model
+     * @return
+     */
+    @RequestMapping("/attedtl")
+    public String attedtl(@RequestParam(value = "custid") String custid, Model model){
+        model.addAttribute("custid",custid);
+        return "apph5/attedtl";
+    }
+
+    /**
+     *  考勤明细
+     */
+    @RequestMapping(value = "/getattedtllist")
+    @ResponseBody
+    public Map getattedtllist(
+            @RequestParam("custid") String custid,
+            @RequestParam("pageNo") Integer pageNo,
+            @RequestParam("startdate") String startdate,
+            @RequestParam("enddate") String enddate,
+            HttpServletRequest request){
+        Map map=new HashMap();
+
+        try {
+            if(custid==null || pageNo==null){
+                map.put("errStr","参数错误");
+                return map;
+            }
+            Pagination page=new Pagination();
+            AttedtlSearchBean searchBean=new AttedtlSearchBean();
+            searchBean.setCustid(custid);
+            searchBean.setStartdate(startdate);
+            searchBean.setEnddate(enddate);
+            page=atteClassService.getAtteDtlInfoWithPage(searchBean,pageNo,10);
+            map.put("page",page);
+        } catch (Exception e) {
+            e.printStackTrace();
+            map.put("errStr",e.getMessage());
+        }
+
+        return map;
+
+    }
+
+    /**
+     *    考勤明细
+     * @param model
+     * @return
+     */
+    @RequestMapping("/atte/detailindex")
+    public String detailindex(@RequestParam(value = "custid") String custid,
+                              @RequestParam(value = "attedate") String attedate,Model model){
+        model.addAttribute("custid",custid);
+        model.addAttribute("attedate",attedate);
+        return "apph5/detailindex";
+    }
+
+    /**
+     *  考勤明细
+     */
+    @RequestMapping(value = "/getdetail")
+    @ResponseBody
+    public Map getdetail(
+            @RequestParam("custid") String custid,
+            @RequestParam("pageNo") Integer pageNo,
+            @RequestParam("attedate")String attedate,
+            HttpServletRequest request){
+        Map map=new HashMap();
+
+        try {
+            if(StringUtil.isEmpty(custid) || pageNo==null||StringUtil.isEmpty(attedate)){
+                map.put("errStr","参数错误");
+                return map;
+            }
+            attedate=attedate.replaceAll("-","");
+            Pagination page=new Pagination();
+            AttedtlSearchBean searchBean=new AttedtlSearchBean();
+            searchBean.setCustid(custid);
+            searchBean.setStartdate(attedate);
+            searchBean.setEnddate(attedate);
+            page=atteClassService.getDtlWithPage(searchBean,pageNo,10);
+            map.put("page",page);
+        } catch (Exception e) {
+            e.printStackTrace();
+            map.put("errStr",e.getMessage());
+        }
+
+        return map;
+
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/dao/AtteClassDao.java b/src/main/java/com/supwisdom/dlpay/atte/dao/AtteClassDao.java
index b7f4c35..27c65d7 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/dao/AtteClassDao.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/dao/AtteClassDao.java
@@ -76,4 +76,11 @@
     public List<AtteReport> getPReportList(AttedtlSearchBean searchBean);
 
     public TAtteDtl getDtl(Integer timeid,String attedate,String custid);
+
+    //门禁流水 除去考勤
+    public Pagination findSystemTDoordtl(
+            String startTranDate, String endTranDate,String startTranTime, String endTranTime,String cardno,
+            String custname,String buildingid,String devname,String streamstatus,int pageNo,int pageSize,String regionid);
+
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClassDaoImpl.java b/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClassDaoImpl.java
index 97781e0..c3dd941 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClassDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClassDaoImpl.java
@@ -8,6 +8,7 @@
 import com.supwisdom.dlpay.atte.domain.TClassCust;
 import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;
 import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.mainservice.bean.TDoordtlInfo;
 import com.supwisdom.dlpay.system.page.Pagination;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -279,7 +280,7 @@
     @Override
     public Pagination getAttedtlWithPage(AttedtlSearchBean searchBean, int pageNo, int pageSize) {
         StringBuffer sql=new StringBuffer();
-        sql.append(" select t.timeid,t.atteno,t.attedate,t.remark,c.custname,c.custtypeid,b.cardno,t.state,c.deptcode,t.oldstate,n.timetype    from t_atte_dtl t left join t_customer c on t.custid=c.custid ");
+        sql.append(" select t.timeid,t.atteno,t.attedate,t.remark,c.custname,c.custtypeid,b.cardno,t.state,c.deptcode,t.oldstate,n.timetype,n.timename    from t_atte_dtl t left join t_customer c on t.custid=c.custid ");
             sql.append(" left join t_card b on b.custid=t.custid left join t_nc_time n on t.timeid=n.timeid where c.status='1' and b.status='normal'   ");
             if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
                 sql.append(" and t.attedate between :sdate and :edate ");
@@ -299,7 +300,10 @@
             if(!StringUtil.isEmpty(searchBean.getDtcode())){
                 sql.append(" and c.deptcode = :dtcode ");
             }
-            sql.append(" order by t.atteno desc ");
+            if(!StringUtil.isEmpty(searchBean.getCustid())){
+                sql.append(" and t.custid = :cid ");
+            }
+            sql.append(" order by t.atteno desc,t.timeid desc ");
             Query query=entityManager.createNativeQuery(sql.toString(), AtteDetailInfo.class);
         if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
             query.setParameter("sdate",searchBean.getStartdate());
@@ -320,6 +324,9 @@
         if(!StringUtil.isEmpty(searchBean.getDtcode())){
             query.setParameter("dtcode",searchBean.getDtcode());
         }
+        if(!StringUtil.isEmpty(searchBean.getCustid())){
+            query.setParameter("cid",searchBean.getCustid());
+        }
         pageNo = pageNo <= 0 ? 1 : pageNo;
         query.setFirstResult((pageNo - 1) * pageSize);
         query.setMaxResults(pageSize);
@@ -357,6 +364,9 @@
         if(!StringUtil.isEmpty(searchBean.getDtcode())){
             sql.append(" and c.deptcode = :dtcode ");
         }
+        if(!StringUtil.isEmpty(searchBean.getCustid())){
+            sql.append(" and t.custid = :cid ");
+        }
         Query query=entityManager.createNativeQuery(sql.toString());
         if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
             query.setParameter("sdate",searchBean.getStartdate());
@@ -377,6 +387,9 @@
         if(!StringUtil.isEmpty(searchBean.getDtcode())){
             query.setParameter("dtcode",searchBean.getDtcode());
         }
+        if(!StringUtil.isEmpty(searchBean.getCustid())){
+            query.setParameter("cid",searchBean.getCustid());
+        }
         Object object=query.getSingleResult();
         if(object!=null){
             result= Integer.parseInt(object.toString());
@@ -465,6 +478,9 @@
         if(!StringUtil.isEmpty(searchBean.getCardno())){
             sql+="  and v.cardno like :cno ";
         }
+        if(!StringUtil.isEmpty(searchBean.getCustid())){
+            sql+=" and v.custid = :cid ";
+        }
         sql+=" order by v.transdate desc,v.transtime desc";
         Query query=entityManager.createNativeQuery(sql, AtteDtl.class);
         if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
@@ -489,6 +505,9 @@
         if(!StringUtil.isEmpty(searchBean.getDtcode())){
             query.setParameter("dtcode",searchBean.getDtcode());
         }
+        if(!StringUtil.isEmpty(searchBean.getCustid())){
+            query.setParameter("cid",searchBean.getCustid());
+        }
         pageNo = pageNo <= 0 ? 1 : pageNo;
         query.setFirstResult((pageNo - 1) * pageSize);
         query.setMaxResults(pageSize);
@@ -526,6 +545,9 @@
         if(!StringUtil.isEmpty(searchBean.getCardno())){
             sql+="  and v.cardno like :cno ";
         }
+        if(!StringUtil.isEmpty(searchBean.getCustid())){
+            sql+=" and v.custid = :cid ";
+        }
         sql+=" order by v.doorseqno ";
         Query query=entityManager.createNativeQuery(sql, AtteDtl.class);
         if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
@@ -550,6 +572,9 @@
         if(!StringUtil.isEmpty(searchBean.getDtcode())){
             query.setParameter("dtcode",searchBean.getDtcode());
         }
+        if(!StringUtil.isEmpty(searchBean.getCustid())){
+            query.setParameter("cid",searchBean.getCustid());
+        }
         List<AtteDtl> list=query.getResultList();
         if(list!=null){
             return list.size();
@@ -891,4 +916,169 @@
          }
         return null;
     }
+
+
+    @Transactional
+    @Override
+    public Pagination findSystemTDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String cardno, String custname, String buildingid, String devname, String streamstatus, int pageNo, int pageSize, String regionid) {
+        String queryString = "select a.doorseqno,b.deviceid,b.devname,a.custname,c.cardno,a.cardphyid,c.bankcardno,a.transdate||a.transtime transdate, a.coldate||a.coltime coldate,"
+                + " case when a.status='' then '失败' else '成功' end status,a.dtldesc "
+                + " from t_doordtl a left join t_card c on a.custid=c.custid,  t_nc_device b "
+                + " left join tb_region d on b.regionid=d.regionid "
+                + " left join t_building e on b.buildingid=e.buildingid "
+                + " where 1>0 and cast(substr(a.doorid,5) as integer) = b.deviceid ";
+        if (!startTranDate.equals("")){
+            queryString += " and transdate >= :startTranDate ";
+        }
+        if (!endTranDate.equals("")){
+            queryString += " and transdate <= :endTranDate ";
+        }
+        if (!cardno.equals("")) {
+            queryString += " and a.cardno like :cardno ";
+        }
+        if (!custname.equals("")) {
+            queryString += " and a.custname like :custname ";
+        }
+        if (!devname.equals("")) {
+            queryString += " and b.devname like :devname ";
+        }
+        if (!streamstatus.equals("all")) {
+            queryString += " and a.status =:streamstatus ";
+        }
+        if(!buildingid.equals("")){
+            queryString += " and e.buildingid = :buildingid ";
+        }
+        if (!regionid.equals("")){
+            queryString += " and d.regionid in  "
+                    +"("
+                    + "with recursive tmp as  "
+                    + "("
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
+                    + "union all  "
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
+                    + ") select regionid from tmp  )";
+        }
+        queryString +=" and b.deviceid not in (select distinct deviceid from t_dev_rule ) ";
+        queryString += " order by a.transdate DESC";
+        Query query = entityManager.createNativeQuery(queryString, TDoordtlInfo.class);
+        if (!startTranDate.equals("")) {
+            query.setParameter("startTranDate", startTranDate);
+        }
+        if (!endTranDate.equals("")){
+            query.setParameter("endTranDate", endTranDate);
+        }
+        if (!cardno.equals("")) {
+            query.setParameter("cardno", cardno);
+        }
+        if (!custname.equals("")) {
+            query.setParameter("custname", "%" + custname + "%");
+        }
+        if (!devname.equals("")) {
+            query.setParameter("devname", "%" + devname + "%");
+        }
+        if (!streamstatus.equals("all")) {
+            query.setParameter("streamstatus", streamstatus);
+        }
+        if(!buildingid.equals("")){
+            query.setParameter("buildingid",buildingid);
+        }
+        if (!regionid.equals("")){
+            query.setParameter("regionid", regionid);
+        }
+        pageNo = pageNo <= 0 ? 1 : pageNo;
+        query.setFirstResult((pageNo - 1) * pageSize);
+        query.setMaxResults(pageSize);
+        Pagination page = new Pagination();
+        page.setPageNo(pageNo);
+        page.setPageSize(pageSize);
+        List<TDoordtlInfo> list = query.getResultList();
+        page.setList(list);
+        int totalCount = getSystemCount(startTranDate, endTranDate, cardno, custname,
+                buildingid, devname, streamstatus,regionid);
+        page.setTotalCount(totalCount);
+        return page;
+    }
+
+
+
+
+    private int getSystemCount(String startTranDate, String endTranDate,
+                               String cardno, String custname, String buildingid, String devname, String streamstatus,String regionid) {
+        try {
+            String queryString = "select count(*) as cnt "
+                    + " from t_doordtl a "
+                    + " left join t_card c on a.custid=c.custid, t_nc_device b "
+                    + " left join tb_region d on b.regionid=d.regionid "
+                    + " left join t_building e on b.buildingid=e.buildingid "
+                    + " where 1>0 and cast(substr(a.doorid,5) as integer) = b.deviceid ";
+
+            if (!startTranDate.equals("")){
+                queryString += " and transdate >= :startTranDate ";
+            }
+            if (!endTranDate.equals("")){
+                queryString += " and transdate <= :endTranDate ";
+            }
+            if (!cardno.equals("")) {
+                queryString += " and a.cardno like :cardno ";
+            }
+            if (!custname.equals("")) {
+                queryString += " and a.custname like :custname ";
+            }
+            if (!devname.equals("")) {
+                queryString += " and b.devname like :devname ";
+            }
+            if (!streamstatus.equals("all")) {
+                queryString += " and a.status =:streamstatus ";
+            }
+            if(!buildingid.equals("")){
+                queryString += " and e.buildingid = :buildingid ";
+            }
+            if (!regionid.equals("")){
+                queryString += " and d.regionid in  "
+                        +"("
+                        + "with recursive tmp as  "
+                        + "("
+                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
+                        + "union all  "
+                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
+                        + ") select regionid from tmp  ) ";
+            }
+            queryString +=" and b.deviceid not in (select distinct deviceid from t_dev_rule ) ";
+            Query query = entityManager.createNativeQuery(queryString);
+            query.setMaxResults(5);
+            if (!startTranDate.equals("")) {
+                query.setParameter("startTranDate", startTranDate);
+            }
+            if (!endTranDate.equals("")){
+                query.setParameter("endTranDate", endTranDate);
+            }
+            if (!cardno.equals("")) {
+                query.setParameter("cardno", cardno);
+            }
+            if (!custname.equals("")) {
+                query.setParameter("custname", "%" + custname + "%");
+            }
+            if (!buildingid.equals("")) {
+                query.setParameter("buildingid", buildingid);
+            }
+            if (!devname.equals("")) {
+                query.setParameter("devname", "%" + devname + "%");
+            }
+            if (!streamstatus.equals("all")) {
+                query.setParameter("streamstatus", streamstatus);
+            }
+            if(!regionid.equals("")){
+                query.setParameter("regionid",regionid);
+            }
+            List list = query.getResultList();
+            int cnt = 0;
+            if (list!=null && list.size()>0){
+                cnt = Integer.parseInt(list.get(0).toString());
+            }
+            return cnt;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return 0;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/service/AtteClassService.java b/src/main/java/com/supwisdom/dlpay/atte/service/AtteClassService.java
index 0af74ad..0405c16 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/service/AtteClassService.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/service/AtteClassService.java
@@ -93,4 +93,12 @@
     //处理假条
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean updateRestDtl(String startdate,String enddate,String custid,Integer state);
+
+
+     //门禁流水  除去 考勤
+     //根据查询条件获取系统管理员流水数据
+     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+     public Pagination findSystemTDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String cardno,
+                                          String custname, String buildingid, String devname, String streamstatus, int pageNo, int pageSize,String regionid);
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteClassServiceImpl.java b/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteClassServiceImpl.java
index e330734..f210c31 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteClassServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteClassServiceImpl.java
@@ -549,4 +549,9 @@
         }
         return true;
     }
+
+    @Override
+    public Pagination findSystemTDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String cardno, String custname, String buildingid, String devname, String streamstatus, int pageNo, int pageSize, String regionid) {
+        return atteClassDao.findSystemTDoordtl(startTranDate, endTranDate, startTranTime, endTranTime, cardno, custname, buildingid, devname, streamstatus, pageNo, pageSize, regionid);
+    }
 }
diff --git a/src/main/resources/templates/apph5/attedtl.html b/src/main/resources/templates/apph5/attedtl.html
new file mode 100644
index 0000000..9d09b55
--- /dev/null
+++ b/src/main/resources/templates/apph5/attedtl.html
@@ -0,0 +1,340 @@
+
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+
+<head>
+    <title>考勤流水</title>
+    <!--<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">
+    <link rel="stylesheet" href="/static/libs/layui/css/layui.css" th:href="@{/static/libs/layui/css/layui.css}"/>
+
+    <link rel="stylesheet" href="/static/res/assets/plugins/element-ui/theme-default/index.css"
+          th:href="@{/static/res/assets/plugins/element-ui/theme-default/index.css}"/>
+    <link rel="stylesheet" href="/static/res/assets/css/wxpage.css"
+          th:href="@{/static/res/assets/css/wxpage.css}"/>
+    <!--<script type="text/javascript" th:src="@{/static/libs/jquery/jquery-3.2.1.min.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.min.js}"></script>
+    <!--<script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.form.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/layer/layer.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/js/vue.min.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/element-ui/index.js}"></script>
+
+
+</head>
+
+<body>
+
+<div id="app">
+
+    <div class="page-title" style="text-align:center; font-size: 24px;color: #FF8247;margin-top:7%">考勤流水</div><br>
+
+    <el-button type="primary" @click="showdiv()" style="float: right">筛 选</el-button>
+
+    <div class="row">
+        <div class="col-md-12" style="padding-left: 0px;padding-right: 0px">
+            <div class="box box-primary" style="margin-bottom: 15px">
+                <div class="box-body box-profile">
+                    <template>
+                        <el-table
+                                ref="singleTable"
+                                :data="tableData"
+                                highlight-current-row
+                                @current-change="currRowChange"
+                                stripe
+                                border>
+                            <el-table-column
+                                    prop="custid"
+                                    align="center"
+                                    v-show="false">
+                                <template scope="scope">
+                                    <div class="weui-panel__bd">
+                                        <div class="weui-media-box weui-media-box_text">
+                                            <h4 class="weui-media-box__title" style="display: flex">
+                                                <div style="flex: 1">
+                                                    <span v-if="scope.row.state=='0'" class="layui-badge layui-bg-orange">未打卡</span>
+                                                    <span v-if="scope.row.state=='1'" class="layui-badge layui-bg-green">正常</span>
+                                                    <span v-if="scope.row.state=='2' " class="layui-badge layui-bg-red">异常</span>
+                                                    <span v-if="scope.row.state=='11'" class="layui-badge layui-bg-gray">请假</span>
+                                                    <span v-if="scope.row.state=='12'" class="layui-badge layui-bg-gray">病假</span>
+                                                    <span v-if="scope.row.state=='13'" class="layui-badge layui-bg-gray">年假</span>
+                                                    <span v-if="scope.row.state=='14'" class="layui-badge layui-bg-gray">调休</span>
+                                                    <span v-if="scope.row.state=='15'" class="layui-badge layui-bg-gray">其他</span>
+                                                    <span v-if="scope.row.state=='8'" class="layui-badge layui-bg-gray">外出办公</span>
+                                                    <span v-if="scope.row.state=='9'" class="layui-badge layui-bg-gray">出差</span>
+                                                    <span v-if="scope.row.state=='7'" class="layui-badge layui-bg-gray">补休</span>
+                                                </div>
+                                                <div>
+                                                    {{scope.row.timename}}
+                                                </div>
+                                            </h4>
+                                            <p class="weui-media-box__desc">
+                                            <div class="weui-cell__bd">
+                                                <span style="font-size:14px;color:#999; "></span>
+                                            </div>
+                                            <div style="display: flex;">
+
+                                                <div style="font-size:14px;color:#999;flex: 1">
+
+                                                       {{scope.row.attedate}}
+
+                                                </div>
+                                                <div style="font-size:12px;color:#999;margin-left:10px">
+                                                    <span ><el-button
+                                                            type="warning"
+                                                            @click="detail(scope.row)">详情</el-button></span>
+                                                </div>
+
+
+                                            </div>
+                                            </p>
+                                        </div>
+                                    </div>
+
+                                </template>
+                            </el-table-column>
+                        </el-table>
+
+                          <el-input v-if="dialogFormVisible" id="addmore" type="button" value="加载更多" @click.native="addmore" ></el-input>
+
+                        <div class="clearfix"></div>
+
+
+                    </template>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <el-dialog  :title="updatetitle" :visible.sync="dialogFormVisible1" style="width: 85%" :modal-append-to-body='false'
+                @close="closeDialog('tempform')" size="large">
+        <el-form ref="tempform" :model="tempform" data-parsley-validate
+                 class="el-form-item" style="width: 100%">
+            <el-form-item label="开始日期:" prop="startdate">
+                <div class="el-col el-col-18">
+                    <el-col :span="18">
+                        <el-date-picker
+                                v-model="tempform.startdate" type="date"
+                                placeholder="选择日期" :editable="false"  value-format="yyyyMMdd">
+                        </el-date-picker>
+                    </el-col>
+                </div>
+            </el-form-item>
+            <el-form-item label="结束时间:" prop="enddate">
+                <label slot="label">结束时间:</label>
+                <el-col :span="18">
+                    <el-date-picker
+                            v-model="tempform.enddate" type="date"
+                            placeholder="选择日期" :editable="false"  value-format="yyyyMMdd">
+                    </el-date-picker>
+                </el-col>
+            </el-form-item>
+
+        </el-form>
+        <div slot="footer" style="text-align:center; ">
+            <el-button type="primary" @click="search()">查 询</el-button>
+            <!--<el-button type="primary" @click="closediv()">取 消</el-button>-->
+        </div>
+    </el-dialog>
+
+
+</div>
+
+
+</body>
+
+<script>
+
+
+    var app_vue = new Vue({
+        el: '#app',
+        data: {
+            tableData: [],
+            confName: '1234',
+            currPage: 1,
+            pageSize: 20,
+            totSize: 0,
+            currentRow: null,
+            tempform: {
+               custid:'',
+                startdate:'',
+                enddate:''
+            },
+            sexlist: [],
+            rtypelist: [],
+            custtypelist: [],
+            statuslist: [],
+            bannerHeight: 1000,
+            screenWidth: 0,
+            userId: '',
+            dialogFormVisible: false,
+            dialogFormVisible1: false,
+            updatetitle: '筛选',
+            updatetitle2: '详情',
+            rules: {
+
+            },
+        },
+
+        methods: {
+
+
+
+            closediv: function () {
+                this.dialogFormVisible = false;
+            },
+            currRowChange: function (val) {
+                this.currentRow = val;
+            },
+            indexChange: function (pre, next) {
+                var _self = this;
+                var devIdListTmp = _self.devIdList;
+                _self.selectDevId = devIdListTmp[pre];
+                // console.log(_self.selectDevId)
+
+            },
+            setSize: function () {
+                // 通过浏览器宽度(图片宽度)计算高度
+                this.bannerHeight = this.screenWidth;
+            }, handleSizeChange: function (val) {
+                this.pageSize = val;
+                commonQuery(this,  this.tempform.custid, this.currPage, this.pageSize);
+                //console.log('每页条'+val);
+            }, currPageChange: function (val) {
+                this.currPage = val;
+                commonQuery(this, this.tempform.custid, this.currPage, this.pageSize);
+                //console.log('当前页:'+val);
+            },
+            addmore:function() {
+                this.currPage=this.currPage+1;
+                commonQuery(this,  this.tempform.custid, this.currPage);
+            },
+            detail:function (row) {
+                window.location="[[@{'/app/atte/detailindex?custid='}]]"+'[[${custid}]]'+'&attedate='+row.attedate;
+            },
+            showdiv: function () {
+                this.dialogFormVisible1 = true;
+                this.updatetitle = "筛选"
+            },
+            search:function () {
+                this.currPage = 1;
+                this.tableData=[];
+                commonQuery(this,  this.tempform.custid, this.currPage);
+            },
+            closeDialog:function(formName) {
+                // this.$refs[formName].resetFields();
+                this.dialogFormVisible1 = false;
+            },
+
+
+        },
+        created: function () {
+            var _self = this;
+            // 首次加载时,需要调用一次
+            _self.screenWidth = window.innerWidth;
+            _self.setSize();
+            var confid = '[[${custid}]]';
+            console.log(confid);
+            _self.tempform.custid = confid;
+            this.currPage = 1;
+           commonQuery(this,  this.tempform.custid, this.currPage);
+
+        }
+    })
+
+    // 窗口大小发生改变时,调用一次
+    window.onresize = function () {
+        app_vue.screenWidth = window.innerWidth;
+        app_vue.setSize();
+    }
+
+
+    function commonQuery(_self,custid, pageno) {
+        var startdate=class_Formatdate(_self.tempform.startdate);
+        var enddate=class_Formatdate(_self.tempform.enddate);
+        $.ajax({
+            type: "get",
+            dataType: "json",
+            url: "[[@{/app/getattedtllist?}]]" + "custid=" + custid + "&pageNo=" + pageno+ "&startdate=" + startdate+ "&enddate=" + enddate ,
+            success: function (info) {
+                console.log(info)
+                _self.totSize = info.page.totalCount;
+                var list=info.page.list;
+                for(var i=0;i<list.length;i++){
+                    var date=list[i].attedate;
+                    if (date == undefined||date.startsWith("n")) {
+                        return "";
+                    }
+                    var year =date.substring(0,4);
+                    var month=date.substring(4,6);
+                    var day=date.substring(6,8);
+                    // var hour=date.substring(8,10);
+                    // var min=date.substring(10,12);
+                    // var sec=date.substring(12,14);
+                    list[i].attedate= year+"-"+month+"-"+day;
+                        _self.tableData.push(list[i]);
+                }
+                if(list.length<10){
+                 _self.dialogFormVisible=false;
+                }else {
+                    _self.dialogFormVisible=true;
+                }
+            }
+        })
+    }
+
+
+
+
+    function class_Formatdate(date){
+        if(date==null||date==''){
+            return '';
+        }
+        var d=new Date(date);
+        var month=d.getMonth() + 1+'';
+        var date=d.getDate()+'';
+        if(month.length==1){
+            month='0'+month;
+        }
+        if(date.length==1){
+            date='0'+date;
+        }
+        var formated=d.getFullYear() + '' + month + '' +date;
+
+        return formated;
+    }
+
+</script>
+
+<style>
+
+    .el-carousel__item h3 {
+        color: #ff3366;
+        font-size: 14px;
+        opacity: 0.75;
+        line-height: 300px;
+        margin: 0;
+        /*background-color:#66cccc;
+        border: 0px solid #e5e5e5;
+        width: 50%;
+        left: 10%;
+        height: 100%;*/
+    }
+    .el-table__header th{
+        height: 0px;
+    }
+    .el-carousel__item:nth-child(2n) {
+        background-color: #ffffff;
+    }
+
+    .el-carousel__item:nth-child(2n+1) {
+        background-color: #ffffff;
+    }
+
+    .el-carousel__item .Carousel {
+        border-bottom: 1px solid #f1f4f8;
+    }
+</style>
\ No newline at end of file
diff --git a/src/main/resources/templates/apph5/detailindex.html b/src/main/resources/templates/apph5/detailindex.html
new file mode 100644
index 0000000..5e72c93
--- /dev/null
+++ b/src/main/resources/templates/apph5/detailindex.html
@@ -0,0 +1,266 @@
+
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+
+<head>
+    <title>打卡记录</title>
+    <!--<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">
+    <link rel="stylesheet" href="/static/libs/layui/css/layui.css" th:href="@{/static/libs/layui/css/layui.css}"/>
+
+    <link rel="stylesheet" href="/static/res/assets/plugins/element-ui/theme-default/index.css"
+          th:href="@{/static/res/assets/plugins/element-ui/theme-default/index.css}"/>
+    <link rel="stylesheet" href="/static/res/assets/css/wxpage.css"
+          th:href="@{/static/res/assets/css/wxpage.css}"/>
+    <!--<script type="text/javascript" th:src="@{/static/libs/jquery/jquery-3.2.1.min.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.min.js}"></script>
+    <!--<script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.form.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/layer/layer.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/js/vue.min.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/element-ui/index.js}"></script>
+
+
+</head>
+
+<body>
+
+<div id="app">
+
+    <div class="row">
+        <div class="col-md-12" style="padding-left: 0px;padding-right: 0px">
+            <div class="box box-primary" style="margin-bottom: 15px">
+                <div class="box-body box-profile">
+                    <template>
+                        <el-table
+                                ref="singleTable"
+                                :data="tableData"
+                                highlight-current-row
+                                @current-change="currRowChange"
+                                stripe
+                                border>
+                            <el-table-column
+                                    prop="custid"
+                                    align="center"
+                                    v-show="false">
+                                <template scope="scope">
+                                    <div class="weui-panel__bd">
+                                        <div class="weui-media-box weui-media-box_text">
+                                            <h4 class="weui-media-box__title" style="display: flex">
+                                                <div style="flex: 1">{{scope.row.devicename}}</div>
+                                            </h4>
+                                            <p class="weui-media-box__desc">
+                                            <div class="weui-cell__bd">
+                                                <span style="font-size:14px;color:#999; "></span>
+                                            </div>
+                                            <div style="display: flex;">
+
+                                                <div style="font-size:14px;color:#999;flex: 1">
+
+                                                       {{scope.row.attedate}}
+
+                                                </div>
+
+
+                                            </div>
+                                            </p>
+                                        </div>
+                                    </div>
+
+                                </template>
+                            </el-table-column>
+                        </el-table>
+
+                          <el-input v-if="dialogFormVisible" id="addmore" type="button" value="加载更多" @click.native="addmore" ></el-input>
+
+                        <div class="clearfix"></div>
+
+
+                    </template>
+                </div>
+            </div>
+        </div>
+    </div>
+
+
+</div>
+
+
+</body>
+
+<script>
+
+
+    var app_vue = new Vue({
+        el: '#app',
+        data: {
+            tableData: [],
+            confName: '1234',
+            currPage: 1,
+            pageSize: 20,
+            totSize: 0,
+            currentRow: null,
+            tempform: {
+               custid:'',
+                attedate:''
+            },
+            historyform: {
+                custid: '',
+                custname: '',
+                startdate: '',
+                enddate: '',
+                remark: '',
+                rtype: '',
+                status: '',
+                custtype: '',
+                id: ''
+            },
+            sexlist: [],
+            rtypelist: [],
+            custtypelist: [],
+            statuslist: [],
+            bannerHeight: 1000,
+            screenWidth: 0,
+            userId: '',
+            dialogFormVisible: false,
+            updatetitle: '筛选',
+            updatetitle2: '详情',
+            rules: {
+
+            },
+        },
+
+        methods: {
+
+
+
+            closediv: function () {
+                this.dialogFormVisible = false;
+            },
+            currRowChange: function (val) {
+                this.currentRow = val;
+            },
+            indexChange: function (pre, next) {
+                var _self = this;
+                var devIdListTmp = _self.devIdList;
+                _self.selectDevId = devIdListTmp[pre];
+                // console.log(_self.selectDevId)
+
+            },
+            setSize: function () {
+                // 通过浏览器宽度(图片宽度)计算高度
+                this.bannerHeight = this.screenWidth;
+            }, handleSizeChange: function (val) {
+                this.pageSize = val;
+                commonQuery(this,  this.tempform.custid, this.currPage, this.pageSize);
+                //console.log('每页条'+val);
+            }, currPageChange: function (val) {
+                this.currPage = val;
+                commonQuery(this, this.tempform.custid, this.currPage, this.pageSize);
+                //console.log('当前页:'+val);
+            },
+            addmore:function() {
+                this.currPage=this.currPage+1;
+                commonQuery(this,  this.tempform.custid,this.tempform.attedate, this.currPage, this.pageSize);
+            }
+
+
+        },
+        created: function () {
+            var _self = this;
+            // 首次加载时,需要调用一次
+            _self.screenWidth = window.innerWidth;
+            _self.setSize();
+            var confid = '[[${custid}]]';
+            var attedate='[[${attedate}]]';
+            console.log(confid);
+            _self.tempform.custid = confid;
+            _self.tempform.attedate = attedate;
+
+            this.pagesize = 10;
+            this.currPage = 1;
+           commonQuery(this,  this.tempform.custid,this.tempform.attedate, this.currPage, this.pageSize);
+
+
+        }
+    })
+
+    // 窗口大小发生改变时,调用一次
+    window.onresize = function () {
+        app_vue.screenWidth = window.innerWidth;
+        app_vue.setSize();
+    }
+
+
+
+
+
+    function commonQuery(_self,custid,attedate, pageno, pagesize) {
+        $.ajax({
+            type: "get",
+            dataType: "json",
+            url: "[[@{/app/getdetail?}]]" + "custid=" + custid+ "&attedate=" + attedate + "&pageNo=" + pageno ,
+            success: function (info) {
+                console.log(info)
+
+                _self.totSize = info.page.totalCount;
+                var list=info.page.list;
+                for(var i=0;i<list.length;i++){
+                    var date=list[i].attedate+list[i].attetime;
+                    if (date == undefined||date.startsWith("n")) {
+                        return "";
+                    }
+                    var year =date.substring(0,4);
+                    var month=date.substring(4,6);
+                    var day=date.substring(6,8);
+                    var hour=date.substring(8,10);
+                    var min=date.substring(10,12);
+                    var sec=date.substring(12,14);
+                    list[i].attedate= year+"-"+month+"-"+day+" "+hour+":"+min+":"+sec;
+                        _self.tableData.push(list[i]);
+                }
+                if(list.length<10){
+                 _self.dialogFormVisible=false;
+                }else {
+                    _self.dialogFormVisible=true;
+                }
+            }
+        })
+    }
+
+
+
+</script>
+
+<style>
+    .el-table__header th{
+        height: 0px;
+    }
+    .el-carousel__item h3 {
+        color: #ff3366;
+        font-size: 14px;
+        opacity: 0.75;
+        line-height: 300px;
+        margin: 0;
+        /*background-color:#66cccc;
+        border: 0px solid #e5e5e5;
+        width: 50%;
+        left: 10%;
+        height: 100%;*/
+    }
+
+    .el-carousel__item:nth-child(2n) {
+        background-color: #ffffff;
+    }
+
+    .el-carousel__item:nth-child(2n+1) {
+        background-color: #ffffff;
+    }
+
+    .el-carousel__item .Carousel {
+        border-bottom: 1px solid #f1f4f8;
+    }
+</style>
\ No newline at end of file
diff --git a/src/main/resources/templates/apph5/doordtl.html b/src/main/resources/templates/apph5/doordtl.html
index 43685d9..ec4b8c1 100644
--- a/src/main/resources/templates/apph5/doordtl.html
+++ b/src/main/resources/templates/apph5/doordtl.html
@@ -235,36 +235,15 @@
         })
     }
 
-    function reviewupdate(_self, status, id) {
-        $.ajax({
-            type: "get",
-            dataType: "json",
-            url: "[[@{/app/atte/cancelRest?id=}]]" + id + "&status=" + status,
-            success: function (info) {
-                console.log(info)
-                if (info.errStr != "") {
-                    layer.msg(info.errStr, {icon: 2, time: 2000});
-                } else {
-                    layer.msg('修改成功!', {icon: 1, time: 1000});
-                }
-                commonQuery(_self,  _self.tempform.custid, _self.currPage, _self.pageSize);
-            }
-        })
-    }
 
-    function isCellPhone(val) {
-        if (!/^1(3|4|5|6|7|8)\d{9}$/.test(val)) {
-            return false;
-        } else {
-            return true;
-        }
-    }
 
 
 </script>
 
 <style>
-
+    .el-table__header th{
+        height: 0px;
+    }
     .el-carousel__item h3 {
         color: #ff3366;
         font-size: 14px;
diff --git a/src/main/resources/templates/apph5/leavehistory.html b/src/main/resources/templates/apph5/leavehistory.html
index 5a68b68..a8291f7 100644
--- a/src/main/resources/templates/apph5/leavehistory.html
+++ b/src/main/resources/templates/apph5/leavehistory.html
@@ -267,7 +267,7 @@
                 this.dialogFormVisible = false;
 
                 var _that = this;
-                this.pagesize = 7;
+                this.pagesize = 10;
                 this.currPage = 1;
                 this.tableData=[];
                 commonQuery(this, this.tempform.rtype, this.tempform.custtype, this.tempform.status, this.tempform.custid, this.currPage, this.pageSize);
@@ -281,7 +281,7 @@
                 this.dialogFormVisible2 = false;
 
                 var _that = this;
-                this.pagesize = 7;
+                this.pagesize = 10;
                 this.currPage = 1;
                 this.tableData=[];
                 reviewupdate(this, 1,this.tempform.custid, this.historyform.id);
@@ -290,7 +290,7 @@
                 this.dialogFormVisible2 = false;
 
                 var _that = this;
-                this.pagesize = 7;
+                this.pagesize = 10;
                 this.currPage = 1;
                 this.tableData=[];
                 reviewupdate(this, 2,this.tempform.custid, this.historyform.id);
@@ -417,7 +417,7 @@
                 }
             })
 
-            _self.pagesize = 7;
+            _self.pagesize = 10;
             _self.currPage = 1;
             commonQuery(this, this.tempform.rtype, this.tempform.custtype, this.tempform.status, this.tempform.custid, this.currPage, this.pageSize);
 
@@ -507,7 +507,7 @@
                 for(var i=0;i<list.length;i++){
                     _self.tableData.push(list[i]);
                 }
-                if(list.length<7){
+                if(list.length<10){
                     _self.addmoreVis=false;
                 }else {
                     _self.addmoreVis=true;
@@ -546,7 +546,9 @@
 </script>
 
 <style>
-
+    .el-table__header th{
+        height: 0px;
+    }
     .el-carousel__item h3 {
         color: #ff3366;
         font-size: 14px;
diff --git a/src/main/resources/templates/apph5/myleave.html b/src/main/resources/templates/apph5/myleave.html
index 0f760d3..33e1ee2 100644
--- a/src/main/resources/templates/apph5/myleave.html
+++ b/src/main/resources/templates/apph5/myleave.html
@@ -252,7 +252,7 @@
                 this.dialogFormVisible = false;
                  this.tableData=[];
                 var _that = this;
-                this.pagesize = 7;
+                this.pagesize = 10;
                 this.currPage = 1;
                 this.tableData=[];
                 commonQuery(this, this.tempform.rtype,  this.tempform.status, this.tempform.custid, this.currPage, this.pageSize);
@@ -391,7 +391,7 @@
                 }
             })
 
-            _self.pagesize = 7;
+            _self.pagesize = 10;
             _self.currPage = 1;
             commonQuery(this, this.tempform.rtype,  this.tempform.status, this.tempform.custid, _self.currPage, _self.pageSize);
 
@@ -457,7 +457,7 @@
                 for(var i=0;i<list.length;i++){
                     _self.tableData.push(list[i]);
                 }
-                if(list.length<7){
+                if(list.length<10){
                     _self.addmoreVis=false;
                 }else {
                     _self.addmoreVis=true;
@@ -495,7 +495,9 @@
 </script>
 
 <style>
-
+    .el-table__header th{
+        height: 0px;
+    }
     .el-carousel__item h3 {
         color: #ff3366;
         font-size: 14px;
diff --git a/src/main/resources/templates/apph5/reviewclock.html b/src/main/resources/templates/apph5/reviewclock.html
index d60d97c..b5c44c1 100644
--- a/src/main/resources/templates/apph5/reviewclock.html
+++ b/src/main/resources/templates/apph5/reviewclock.html
@@ -265,7 +265,7 @@
         methods: {
             saveTemp: function (formName) {
                 var _that = this;
-                this.pagesize = 7;
+                this.pagesize = 10;
                 this.currPage = 1;
                 // if(this.tempform.attedate==''||this.tempform.attedate==undefined){
                 //     layer.msg("请选择日期！", {icon: 2, time: 2000});
@@ -284,7 +284,7 @@
                 this.dialogFormVisible2 = false;
 
                 var _that = this;
-                this.pagesize = 7;
+                this.pagesize = 10;
                 this.currPage = 1;
                 this.tableData=[];
                 reviewupdate(this, 1,this.historyform.id);
@@ -293,7 +293,7 @@
                 this.dialogFormVisible2 = false;
 
                 var _that = this;
-                this.pagesize = 7;
+                this.pagesize = 10;
                 this.currPage = 1;
                 this.tableData=[];
                 reviewupdate(this, 2,this.historyform.id);
@@ -392,7 +392,7 @@
                 }
             })
 
-            this.pagesize = 7;
+            this.pagesize = 10;
             this.currPage = 1;
             commonQuery(this, this.currPage, this.pageSize);
 
@@ -468,7 +468,7 @@
                 for(var i=0;i<list.length;i++){
                     _self.tableData.push(list[i]);
                 }
-                if(list.length<7){
+                if(list.length<10){
                     _self.addmoreVis=false;
                 }else {
                     _self.addmoreVis=true;
@@ -507,7 +507,9 @@
 </script>
 
 <style>
-
+    .el-table__header th{
+        height: 0px;
+    }
     .el-carousel__item h3 {
         color: #ff3366;
         font-size: 14px;
diff --git a/src/main/resources/templates/atte/app/re_index.html b/src/main/resources/templates/atte/app/re_index.html
index 6753f76..50e2fcd 100644
--- a/src/main/resources/templates/atte/app/re_index.html
+++ b/src/main/resources/templates/atte/app/re_index.html
@@ -89,6 +89,26 @@
     </a>
 
 </div>
+<div class="weui-cells">
+    <a class="weui-cell weui-cell_access" th:href="@{'/app/doordtl?custid='+${custid}}" >
+        <div class="weui-cell__bd">
+            <p>门禁流水</p>
+        </div>
+        <div  class="weui-cell__ft">
+        </div>
+    </a>
+
+</div>
+
+<div class="weui-cells">
+    <a class="weui-cell weui-cell_access" th:href="@{'/app/attedtl?custid='+${custid}}" >
+        <div class="weui-cell__bd">
+            <p>考勤详情</p>
+        </div>
+        <div  class="weui-cell__ft">
+        </div>
+    </a>
+</div>
 
 
 </body>
