大理考勤
diff --git a/src/main/java/com/supwisdom/dlpay/atte/bean/AtteReport.java b/src/main/java/com/supwisdom/dlpay/atte/bean/AtteReport.java
new file mode 100644
index 0000000..97527ef
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/bean/AtteReport.java
@@ -0,0 +1,99 @@
+package com.supwisdom.dlpay.atte.bean;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class AtteReport {
+    @Id
+    private String custid;
+    private String custname;
+    private String cardno;
+    private Integer custtypeid;
+    private String deptcode;
+    private Integer cnt1; //正常
+    private Integer cnt2;  //迟到早退
+    private Integer cnt3; // 请假
+    private Integer cnt4; //旷工
+    private Integer cnts;//
+
+    public String getCustid() {
+        return custid;
+    }
+
+    public void setCustid(String custid) {
+        this.custid = custid;
+    }
+
+    public String getCustname() {
+        return custname;
+    }
+
+    public void setCustname(String custname) {
+        this.custname= custname;
+    }
+
+    public String getCardno() {
+        return cardno;
+    }
+
+    public void setCardno(String cardno) {
+        this.cardno = cardno;
+    }
+
+    public Integer getCusttypeid() {
+        return custtypeid;
+    }
+
+    public void setCusttypeid(Integer custtypeid) {
+        this.custtypeid = custtypeid;
+    }
+
+    public String getDeptcode() {
+        return deptcode;
+    }
+
+    public void setDeptcode(String deptcode) {
+        this.deptcode = deptcode;
+    }
+
+    public Integer getCnt1() {
+        return cnt1;
+    }
+
+    public void setCnt1(Integer cnt1) {
+        this.cnt1 = cnt1;
+    }
+
+    public Integer getCnt2() {
+        return cnt2;
+    }
+
+    public void setCnt2(Integer cnt2) {
+        this.cnt2 = cnt2;
+    }
+
+    public Integer getCnt3() {
+        return cnt3;
+    }
+
+    public void setCnt3(Integer cnt3) {
+        this.cnt3 = cnt3;
+    }
+
+    public Integer getCnts() {
+        return cnts;
+    }
+
+    public void setCnts(Integer cnts) {
+        this.cnts = cnts;
+    }
+
+    public Integer getCnt4() {
+        return cnt4;
+    }
+
+    public void setCnt4(Integer cnt4) {
+        this.cnt4 = cnt4;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java b/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java
new file mode 100644
index 0000000..ab29369
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java
@@ -0,0 +1,31 @@
+package com.supwisdom.dlpay.atte.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+@Controller
+@RequestMapping("/app")
+public class AppAtteController {
+    /**
+     *    请销假页面
+     * @param
+     */
+    @GetMapping("/atte/index")
+    public String appindex(@RequestParam(value = "custid")String custid, Model model){
+        model.addAttribute("custid",custid);
+        return "atte/app/index";
+    }
+
+    /**
+     *    请假
+     * @param
+     */
+    @GetMapping("/atte/add")
+    public String addindex( Model model){
+        System.out.println("ceshi ----------------");
+        return "atte/app/index";
+    }
+
+}
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 e0f6232..a5bfaaa 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/controller/CustAtteController.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/controller/CustAtteController.java
@@ -12,6 +12,7 @@
 import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.mainservice.domain.TCustomer;
 import com.supwisdom.dlpay.mainservice.service.WebInterfaceService;
 import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
 import com.supwisdom.dlpay.ncmgr.domain.TNcTime;
@@ -540,8 +541,6 @@
      * 获取排班的人员名单
      *
      * @param perName
-     * @param cardno
-     * @param bankcardno
      * @return
      */
     @ResponseBody
@@ -732,7 +731,6 @@
             if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))){
                 deptcode=null;
             }else {
-
                 if(StringUtil.isEmpty(deptcode)){
                     deptcode="-1";
                 }
@@ -789,13 +787,138 @@
 
     }
 
+
+
     /**
-     *    请销假页面
+     *    审核人管理
      * @param
      */
-    @GetMapping("/app/index")
-    public String appindex(){
-        return "atte/app/appindex";
+    @GetMapping("/review/index")
+    public String reviewindex(){
+        return "atte/review/index";
+    }
+
+    /**
+     *  获取审核人员名单
+     * @param
+     */
+    @ResponseBody
+    @RequestMapping(value = "/review/custlist", method = RequestMethod.POST)
+    public Map getReviewerList(
+                               @RequestParam(value = "perName", required = false, defaultValue = "") String perName,
+                               @RequestParam(value = "custtypeid", required = false, defaultValue = "") String custtypeid,
+                               @AuthenticationPrincipal TOperator operUser) {
+        Map map = new HashMap();
+        try {
+
+            String opertype=operUser.getOpertype();
+            String deptcode=operUser.getDeptcode();
+            if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))){
+                deptcode=null;
+            }else {
+                if(StringUtil.isEmpty(deptcode)){
+                    deptcode="-1";
+                }
+            }
+            List<TCustomerInfo> allcust=atteClassService.getAllCustomer(perName,deptcode,custtypeid);
+            List<TCustomerInfo> reviewlist=atteClassService.getReviewList(deptcode);
+            Boolean countIndex = false;
+            if (allcust.size() > 4000) {
+                countIndex = true;
+            }
+            allcust.removeAll(reviewlist);
+            List<TCustType> custtypelist=systemService.findAllCusttype();
+            map.put("custtypelist",custtypelist);
+            map.put("allcust",allcust);
+            map.put("reviewlist",reviewlist);
+            map.put("countIndex", countIndex);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("名单查询失败--" + e.getMessage());
+        }
+        return map;
+    }
+    /**
+     *     保存审核人员
+     * @param
+     */
+    @ResponseBody
+    @RequestMapping(value="/addreview", method = RequestMethod.POST)
+    public Map saveReview(@RequestParam(value = "idlist") List<String> custids,
+                          @AuthenticationPrincipal TOperator operUser,
+                             HttpServletRequest request, HttpServletResponse response) {
+        Map map=new HashMap();
+
+        try {
+            String opertype=operUser.getOpertype();
+            String deptcode=operUser.getDeptcode();
+            if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))){
+                deptcode=null;
+            }else {
+                if(StringUtil.isEmpty(deptcode)){
+                    deptcode="-1";
+                }
+            }
+            atteClassService.addReview(deptcode,operUser.getOpercode(),custids);
+                map.put("errStr","");
+        } catch (Exception e) {
+            e.printStackTrace();
+            map.put("errStr","保存信息异常!");
+        }
+
+        return map;
+    }
+
+    /**
+     *    辅警干警考勤报表
+     * @param
+     */
+    @GetMapping("/police/index")
+    public String policeindex(){
+        return "atte/report/p_index";
+    }
+
+    /**
+     *  辅警干警报表
+     */
+    @ResponseBody
+    @RequestMapping(value="/police/list")
+    public Map policerepostlist(HttpServletRequest request,
+                              HttpServletResponse response,
+                              @RequestParam(value = "pageNo", required = false, defaultValue = "1") int pageNo,
+                              @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize,
+                                @RequestParam(value = "startdate") String  startdate,
+                                @RequestParam(value = "enddate") String  enddate,
+                                @RequestBody AttedtlSearchBean searchBean,
+                              @AuthenticationPrincipal TOperator operUser) {
+        searchBean.setStartdate(startdate);
+        searchBean.setEnddate(enddate);
+        Map map=new HashMap();
+        try {
+            Pagination page=null;
+            String opertype=operUser.getOpertype();
+            String deptcode=operUser.getDeptcode();
+            if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))){
+                    deptcode=null;
+            }else {
+                if(StringUtil.isEmpty(deptcode)){
+                    deptcode="-1";
+                }
+            }
+            searchBean.setDeptcode(deptcode);
+            page=atteClassService.getPReportWithPage(searchBean,pageNo,pageSize);
+            map.put("PageResult",page);
+            List<TCustType> custtypelist=systemService.findAllCusttype();
+            map.put("custtypelist",custtypelist);
+            List<TDept> deptlist=systemService.findAllDept();
+            map.put("deptlist",deptlist);
+            map.put("operator",operUser);
+
+        }catch (Exception e) {
+            e.printStackTrace();
+            log.error("查询考勤规则失败:" + e.getMessage());
+        }
+        return map;
     }
 
 
@@ -806,4 +929,7 @@
         System.out.println(dif);
         System.out.println((int)(dif/(1000*60)));
     }
+
+
+
 }
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 b717462..7fc16d7 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/dao/AtteClassDao.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/dao/AtteClassDao.java
@@ -5,6 +5,7 @@
 import com.supwisdom.dlpay.atte.bean.CustSearchBean;
 import com.supwisdom.dlpay.atte.domain.TAtteClass;
 import com.supwisdom.dlpay.atte.domain.TAtteDtl;
+import com.supwisdom.dlpay.atte.domain.TAtteReview;
 import com.supwisdom.dlpay.atte.domain.TClassCust;
 import com.supwisdom.dlpay.customer.bean.CustomerSearchBean;
 import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;
@@ -61,4 +62,14 @@
     public boolean delAtteDtl(String attedate,String deptcode);
     //明细
     public List<TAtteDtl> getDetailList(String custid,String attedate);
+
+    //审核人
+    public List<TCustomerInfo> getReviewList(String deptcode);
+    //
+    public boolean delReview(String deptcode);
+    //
+    public boolean addReview(TAtteReview reviewer);
+
+    //辅警干警报表
+    public Pagination getPReportWithPage(AttedtlSearchBean searchBean,int pageNo,int pageSize);
 }
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 4f4d985..82fcf3b 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
@@ -1,12 +1,10 @@
 package com.supwisdom.dlpay.atte.dao.impl;
 
-import com.supwisdom.dlpay.atte.bean.AtteDetailInfo;
-import com.supwisdom.dlpay.atte.bean.AtteDtl;
-import com.supwisdom.dlpay.atte.bean.AttedtlSearchBean;
-import com.supwisdom.dlpay.atte.bean.CustSearchBean;
+import com.supwisdom.dlpay.atte.bean.*;
 import com.supwisdom.dlpay.atte.dao.AtteClassDao;
 import com.supwisdom.dlpay.atte.domain.TAtteClass;
 import com.supwisdom.dlpay.atte.domain.TAtteDtl;
+import com.supwisdom.dlpay.atte.domain.TAtteReview;
 import com.supwisdom.dlpay.atte.domain.TClassCust;
 import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;
 import com.supwisdom.dlpay.framework.util.StringUtil;
@@ -424,7 +422,7 @@
             query.setParameter("dcode", searchBean.getDeptcode());
         }
         if (!StringUtil.isEmpty(searchBean.getCusttypeid())){
-            query.setParameter("ctypeid", searchBean.getCusttypeid());
+            query.setParameter("ctypeid", Integer.parseInt(searchBean.getCusttypeid()));
         }
         List<TCustomerInfo> list = query.getResultList();
         return list;
@@ -622,4 +620,158 @@
 
         return list;
     }
+
+    @Override
+    public List<TCustomerInfo> getReviewList(String deptcode) {
+        String sql = "select a.deptcode,a.custtypeid,a.custid,a.custname,b.cardno,b.bankcardno,b.cardphyid,b.expiredate from T_Customer a left join t_card b on a.custid = b.custid " +
+                " where a.status='1' and b.status='normal' and b.transtatus='normal' ";
+        sql+= " and a.custid in ( select custid from t_atte_review ) ";
+        if(!StringUtil.isEmpty(deptcode)){
+            sql+=" and a.deptcode= :dcode ";
+        }
+        sql +=" order by b.cardno desc ";
+        Query query = entityManager.createNativeQuery(sql, TCustomerInfo.class);
+        if(!StringUtil.isEmpty(deptcode)){
+            query.setParameter("dcode",deptcode);
+        }
+        List<TCustomerInfo> list = query.getResultList();
+        return list;
+    }
+
+    @Override
+    public boolean delReview(String deptcode) {
+            String sql=" delete from TAtteReview where custid in (select custid from TCustomer where 1=1  ";
+            if(!StringUtil.isEmpty(deptcode)){
+                sql+=" and deptcode = :dcode";
+            }
+            sql+=" ) ";
+            try {
+                Query query=entityManager.createQuery(sql);
+                if(!StringUtil.isEmpty(deptcode)){
+                    query.setParameter("dcode",deptcode);
+                }
+                query.executeUpdate();
+                return true;
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+        return false;
+    }
+
+    @Override
+    public boolean addReview(TAtteReview reviewer) {
+        boolean flag=false;
+        try {
+            entityManager.persist(reviewer);
+            flag=true;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return flag;
+    }
+
+    @Override
+    public Pagination getPReportWithPage(AttedtlSearchBean searchBean, int pageNo, int pageSize) {
+        StringBuffer sql=new StringBuffer();
+        sql.append(" with a as ( select v.*,c.cardno from v_atte_info v left join t_card c on v. custid=c.custid    ")
+            .append(" where  c.status='normal' and c.transtatus='normal' ");
+        if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
+            sql.append(" and v.attedate between :sdate and :edate ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getCustname())){
+            sql.append("  and v.custname like :cname ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getCusttypeid())){
+            sql.append("  and v.custtypeid = :ctypeid ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getDeptcode())){
+            sql.append("  and v.deptcode = :dcode ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getCardno())){
+            sql.append("  and v.cardno like :cno ");
+        }
+        sql.append(" ) select a.custid,a.custname,a.cardno,a.custtypeid,a.deptcode, ")
+        .append(" (select count(*) from v_atte_info where custid=a.custid  ) cnts,")
+                .append(" (select count(*) from v_atte_info where custid=a.custid and state=1) cnt1,")
+                .append(" (select count(*) from v_atte_info where custid=a.custid and state=2) cnt2,")
+                .append(" (select count(*) from v_atte_info where custid=a.custid and state=3) cnt3,")
+                .append(" (select count(*) from v_atte_info where custid=a.custid and state=0) cnt4")
+        .append(" from a group by a.custname,a.cardno,a.custtypeid,a.deptcode,a.custid ")
+         .append(" order by a.deptcode desc ,a.custtypeid desc ");
+        Query query=entityManager.createNativeQuery(sql.toString(), AtteReport.class);
+        if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
+            query.setParameter("sdate",searchBean.getStartdate());
+            query.setParameter("edate",searchBean.getEnddate());
+        }
+        if(!StringUtil.isEmpty(searchBean.getCustname())){
+            query.setParameter("cname",searchBean.getCustname());
+        }
+        if(!StringUtil.isEmpty(searchBean.getCusttypeid())){
+           query.setParameter("ctypeid",searchBean.getCusttypeid());
+        }
+        if(!StringUtil.isEmpty(searchBean.getDeptcode())){
+           query.setParameter("dcode",searchBean.getDeptcode());
+        }
+        if(!StringUtil.isEmpty(searchBean.getCardno())){
+           query.setParameter("cno",searchBean.getCardno());
+        }
+        pageNo = pageNo <= 0 ? 1 : pageNo;
+        query.setFirstResult((pageNo - 1) * pageSize);
+        query.setMaxResults(pageSize);
+        Pagination page = new Pagination();
+        page.setPageNo(pageNo);
+        page.setPageSize(pageSize);
+        List<AtteReport> list=query.getResultList();
+        page.setList(list);
+        int totalCount= getPReportCount(searchBean);
+        page.setTotalCount(totalCount);
+        return page;
+    }
+
+    public int getPReportCount(AttedtlSearchBean searchBean){
+        StringBuffer sql=new StringBuffer();
+        sql.append(" with a as ( select v.* from v_atte_info v left join t_card c on v. custid=c.custid    ")
+                .append(" where  c.status='normal' and c.transtatus='normal' ");
+        if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
+            sql.append(" and v.attedate between :sdate and :edate ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getCustname())){
+            sql.append("  and v.custname like :cname ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getCusttypeid())){
+            sql.append("  and v.custtypeid = :ctypeid ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getDeptcode())){
+            sql.append("  and v.deptcode = :dcode ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getCardno())){
+            sql.append("  and v.cardno like :cno ");
+        }
+        sql.append(" ),  b as ( select distinct custid from a ) ")
+                .append("select count(*) from b ");
+        Query query=entityManager.createNativeQuery(sql.toString());
+        if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
+            query.setParameter("sdate",searchBean.getStartdate());
+            query.setParameter("edate",searchBean.getEnddate());
+        }
+        if(!StringUtil.isEmpty(searchBean.getCustname())){
+            query.setParameter("cname",searchBean.getCustname());
+        }
+        if(!StringUtil.isEmpty(searchBean.getCusttypeid())){
+            query.setParameter("ctypeid",searchBean.getCusttypeid());
+        }
+        if(!StringUtil.isEmpty(searchBean.getDeptcode())){
+            query.setParameter("dcode",searchBean.getDeptcode());
+        }
+        if(!StringUtil.isEmpty(searchBean.getCardno())){
+            query.setParameter("cno",searchBean.getCardno());
+        }
+        int result=0;
+        Object object=query.getSingleResult();
+        if(object!=null){
+            result= Integer.parseInt(object.toString());
+        }
+        return result;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/domain/TAtteReview.java b/src/main/java/com/supwisdom/dlpay/atte/domain/TAtteReview.java
new file mode 100644
index 0000000..455c63c
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/domain/TAtteReview.java
@@ -0,0 +1,41 @@
+package com.supwisdom.dlpay.atte.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="t_atte_review")
+public class TAtteReview {
+
+    private String custid;
+    private String opercode;
+    private String updatetime;
+
+    @Id
+    @Column(name="custid")
+    public String getCustid() {
+        return custid;
+    }
+
+    public void setCustid(String custid) {
+        this.custid = custid;
+    }
+    @Column(name="opercode")
+    public String getOpercode() {
+        return opercode;
+    }
+
+    public void setOpercode(String opercode) {
+        this.opercode = opercode;
+    }
+    @Column(name="updatetime")
+    public String getUpdatetime() {
+        return updatetime;
+    }
+
+    public void setUpdatetime(String updatetime) {
+        this.updatetime = updatetime;
+    }
+}
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 5442097..0f3a766 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/service/AtteClassService.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/service/AtteClassService.java
@@ -75,4 +75,14 @@
     //处理考勤流水
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean handleDtl(String deptcode,String attedate);
+
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public List<TCustomerInfo> getReviewList(String deptcode);
+
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public boolean addReview(String deptcode,String opercode,List<String> custidlist);
+
+    // 考勤报表
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public Pagination getPReportWithPage(AttedtlSearchBean searchBean,int pageNo,int pageSize);
 }
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 485b1e2..9cb2372 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
@@ -387,4 +387,27 @@
         }
         return flag;
     }
+
+    @Override
+    public List<TCustomerInfo> getReviewList(String deptcode) {
+        return atteClassDao.getReviewList(deptcode);
+    }
+
+    @Override
+    public boolean addReview(String deptcode, String opercode, List<String> custidlist) {
+        atteClassDao.delReview(deptcode);
+        for (String custid:custidlist){
+            TAtteReview reviewer=new TAtteReview();
+            reviewer.setCustid(custid);
+            reviewer.setOpercode(opercode);
+            reviewer.setUpdatetime(DateUtil.getNow());
+            atteClassDao.addReview(reviewer);
+        }
+        return true;
+    }
+
+    @Override
+    public Pagination getPReportWithPage(AttedtlSearchBean searchBean, int pageNo, int pageSize) {
+        return atteClassDao.getPReportWithPage(searchBean,pageNo,pageSize);
+    }
 }
diff --git a/src/main/resources/atte.sql b/src/main/resources/atte.sql
index a700db6..87bab66 100644
--- a/src/main/resources/atte.sql
+++ b/src/main/resources/atte.sql
@@ -1,31 +1,30 @@
-SELECT t.transdate,
-       t.transtime,
-       substr((t.doorid)::text, 5) AS deviceid,
-       t.doorseqno,
-       t.cardno,
-       t.cardphyid,
-       t.bankcardno,
-       t.custid,
-       t.custname,
-       t.status,
-       t.devtype
-FROM t_doordtl t
-WHERE ((substr((t.doorid)::text, 5))::integer IN ( SELECT DISTINCT d.deviceid
+create view v_atte_dtl as SELECT t.transdate,
+                                 t.transtime,
+                                 substr((t.doorid)::text, 5) AS deviceid,
+                                 t.doorseqno,
+                                 t.cardno,
+                                 t.cardphyid,
+                                 t.bankcardno,
+                                 t.custid,
+                                 t.custname,
+                                 t.status,
+                                 t.devtype
+                          FROM t_doordtl t
+                          WHERE ((substr((t.doorid)::text, 5))::integer IN ( SELECT DISTINCT d.deviceid
   FROM (t_dev_rule d
   LEFT JOIN t_atte_rule r ON ((d.ruleid = r.id)))
   WHERE (r.status = 1)))
-ORDER BY t.doorseqno;
-
+  ORDER BY t.doorseqno;
 
 INSERT INTO "tb_businesspara" VALUES ('atte_bmin', '60');
 INSERT INTO "tb_businesspara" VALUES ('atte_min', '60');
 INSERT INTO "tb_businesspara" VALUES ('atte_emin', '60');
 
 
-INSERT INTO  VALUES (47, NULL, 1, NULL, '', '/atte/dtl/index', '考勤流水', NULL, 36, NULL);
-INSERT INTO  VALUES (45, NULL, 1, NULL, '', '/atte/timedtl/index', '考勤状态维护', NULL, 36, NULL);
-INSERT INTO  VALUES (37, NULL, 1, NULL, '', '/atte/rule/index', '考勤规则管理', NULL, 36, NULL);
-INSERT INTO  VALUES (36, NULL, 0, NULL, 'layui-icon-set', '#', '人员考勤', 36, -1, NULL);
-INSERT INTO  VALUES (42, NULL, 1, NULL, '', '/atte/class/index', '手动排班', NULL, 36, NULL);
-INSERT INTO  VALUES (48, NULL, 1, NULL, '', '#', '审核人管理', NULL, 36, NULL);
+INSERT INTO "tb_function"  VALUES (47, NULL, 1, NULL, '', '/atte/dtl/index', '考勤流水', NULL, 36, NULL);
+INSERT INTO "tb_function"  VALUES (45, NULL, 1, NULL, '', '/atte/timedtl/index', '考勤状态维护', NULL, 36, NULL);
+INSERT INTO "tb_function"  VALUES (37, NULL, 1, NULL, '', '/atte/rule/index', '考勤规则管理', NULL, 36, NULL);
+INSERT INTO "tb_function"  VALUES (36, NULL, 0, NULL, 'layui-icon-set', '#', '人员考勤', 36, -1, NULL);
+INSERT INTO "tb_function"  VALUES (42, NULL, 1, NULL, '', '/atte/class/index', '手动排班', NULL, 36, NULL);
+INSERT INTO "tb_function"  VALUES (48, NULL, 1, NULL, '', '#', '审核人管理', NULL, 36, NULL);
 
diff --git a/src/main/resources/static/libs/weui/weui.min.css b/src/main/resources/static/libs/weui/weui.min.css
new file mode 100644
index 0000000..1371e18
--- /dev/null
+++ b/src/main/resources/static/libs/weui/weui.min.css
@@ -0,0 +1,5 @@
+/*!
+ * WeUI v1.1.3 (https://github.com/weui/weui)
+ * Copyright 2018 Tencent, Inc.
+ * Licensed under the MIT license
+ */html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{line-height:1.6;font-family:-apple-system-font,Helvetica Neue,sans-serif}*{margin:0;padding:0}a img{border:0}a{text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}@font-face{font-weight:400;font-style:normal;font-family:weui;src:url('data:application/octet-stream;base64,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') format('truetype')}[class*=" weui-icon-"],[class^=weui-icon-]{display:inline-block;vertical-align:middle;font:normal normal normal 14px/1 weui;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased}[class*=" weui-icon-"]:before,[class^=weui-icon-]:before{display:inline-block;margin-left:.2em;margin-right:.2em}.weui-icon-circle:before{content:"\EA01"}.weui-icon-download:before{content:"\EA02"}.weui-icon-info:before{content:"\EA03"}.weui-icon-safe-success:before{content:"\EA04"}.weui-icon-safe-warn:before{content:"\EA05"}.weui-icon-success:before{content:"\EA06"}.weui-icon-success-circle:before{content:"\EA07"}.weui-icon-success-no-circle:before{content:"\EA08"}.weui-icon-waiting:before{content:"\EA09"}.weui-icon-waiting-circle:before{content:"\EA0A"}.weui-icon-warn:before{content:"\EA0B"}.weui-icon-info-circle:before{content:"\EA0C"}.weui-icon-cancel:before{content:"\EA0D"}.weui-icon-search:before{content:"\EA0E"}.weui-icon-clear:before{content:"\EA0F"}.weui-icon-back:before{content:"\EA10"}.weui-icon-delete:before{content:"\EA11"}[class*=" weui-icon_"]:before,[class^=weui-icon_]:before{margin:0}.weui-icon-success{font-size:23px;color:#09bb07}.weui-icon-waiting{font-size:23px;color:#10aeff}.weui-icon-warn{font-size:23px;color:#f43530}.weui-icon-info{font-size:23px;color:#10aeff}.weui-icon-success-circle,.weui-icon-success-no-circle{font-size:23px;color:#09bb07}.weui-icon-waiting-circle{font-size:23px;color:#10aeff}.weui-icon-circle{font-size:23px;color:#c9c9c9}.weui-icon-download,.weui-icon-info-circle{font-size:23px;color:#09bb07}.weui-icon-safe-success{color:#09bb07}.weui-icon-safe-warn{color:#ffbe00}.weui-icon-cancel{color:#f43530;font-size:22px}.weui-icon-clear,.weui-icon-search{color:#b2b2b2;font-size:14px}.weui-icon-delete.weui-icon_gallery-delete{color:#fff;font-size:22px}.weui-icon_msg{font-size:93px}.weui-icon_msg.weui-icon-warn{color:#f76260}.weui-icon_msg-primary{font-size:93px}.weui-icon_msg-primary.weui-icon-warn{color:#ffbe00}.weui-btn{position:relative;display:block;margin-left:auto;margin-right:auto;padding-left:14px;padding-right:14px;box-sizing:border-box;font-size:18px;text-align:center;text-decoration:none;color:#fff;line-height:2.55555556;border-radius:5px;-webkit-tap-highlight-color:rgba(0,0,0,0);overflow:hidden}.weui-btn:after{content:" ";width:200%;height:200%;position:absolute;top:0;left:0;border:1px solid rgba(0,0,0,.2);-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;box-sizing:border-box;border-radius:10px}.weui-btn_inline{display:inline-block}.weui-btn_default{color:#000;background-color:#f8f8f8}.weui-btn_default:not(.weui-btn_disabled):visited{color:#000}.weui-btn_default:not(.weui-btn_disabled):active{color:rgba(0,0,0,.6);background-color:#dedede}.weui-btn_primary{background-color:#1aad19}.weui-btn_primary:not(.weui-btn_disabled):visited{color:#fff}.weui-btn_primary:not(.weui-btn_disabled):active{color:hsla(0,0%,100%,.6);background-color:#179b16}.weui-btn_warn{background-color:#e64340}.weui-btn_warn:not(.weui-btn_disabled):visited{color:#fff}.weui-btn_warn:not(.weui-btn_disabled):active{color:hsla(0,0%,100%,.6);background-color:#ce3c39}.weui-btn_disabled{color:hsla(0,0%,100%,.6)}.weui-btn_disabled.weui-btn_default{color:rgba(0,0,0,.3);background-color:#f7f7f7}.weui-btn_disabled.weui-btn_primary{background-color:#9ed99d}.weui-btn_disabled.weui-btn_warn{background-color:#ec8b89}.weui-btn_loading .weui-loading{margin:-.2em .34em 0 0}.weui-btn_loading.weui-btn_primary,.weui-btn_loading.weui-btn_warn{color:hsla(0,0%,100%,.6)}.weui-btn_loading.weui-btn_primary{background-color:#179b16}.weui-btn_loading.weui-btn_warn{background-color:#ce3c39}.weui-btn_plain-primary{color:#1aad19;border:1px solid #1aad19}.weui-btn_plain-primary:not(.weui-btn_plain-disabled):active{color:rgba(26,173,25,.6);border-color:rgba(26,173,25,.6)}.weui-btn_plain-primary:after{border-width:0}.weui-btn_plain-default{color:#353535;border:1px solid #353535}.weui-btn_plain-default:not(.weui-btn_plain-disabled):active{color:rgba(53,53,53,.6);border-color:rgba(53,53,53,.6)}.weui-btn_plain-default:after{border-width:0}.weui-btn_plain-disabled{color:rgba(0,0,0,.2);border-color:rgba(0,0,0,.2)}button.weui-btn,input.weui-btn{width:100%;border-width:0;outline:0;-webkit-appearance:none}button.weui-btn:focus,input.weui-btn:focus{outline:0}button.weui-btn_inline,button.weui-btn_mini,input.weui-btn_inline,input.weui-btn_mini{width:auto}button.weui-btn_plain-default,button.weui-btn_plain-primary,input.weui-btn_plain-default,input.weui-btn_plain-primary{border-width:1px;background-color:transparent}.weui-btn_mini{display:inline-block;padding:0 1.32em;line-height:2.3;font-size:13px}.weui-btn+.weui-btn{margin-top:15px}.weui-btn.weui-btn_inline+.weui-btn.weui-btn_inline{margin-top:auto;margin-left:15px}.weui-btn-area{margin:1.17647059em 15px .3em}.weui-btn-area_inline{display:-webkit-box;display:-webkit-flex;display:flex}.weui-btn-area_inline .weui-btn{margin-top:auto;margin-right:15px;width:100%;-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-btn-area_inline .weui-btn:last-child{margin-right:0}.weui-cells{margin-top:1.17647059em;background-color:#fff;line-height:1.47058824;font-size:17px;overflow:hidden;position:relative}.weui-cells:before{top:0;border-top:1px solid #e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-cells:after,.weui-cells:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5;z-index:2}.weui-cells:after{bottom:0;border-bottom:1px solid #e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-cells__title{margin-top:.77em;margin-bottom:.3em;padding-left:15px;padding-right:15px;color:#999;font-size:14px}.weui-cells__title+.weui-cells{margin-top:0}.weui-cells__tips{margin-top:.3em;color:#999;padding-left:15px;padding-right:15px;font-size:14px}.weui-cell{padding:10px 15px;position:relative;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-cell:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px;z-index:2}.weui-cell:first-child:before{display:none}.weui-cell_primary{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start}.weui-cell__bd{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-cell__ft{text-align:right;color:#999}.weui-cell_swiped{display:block;padding:0}.weui-cell_swiped>.weui-cell__bd{position:relative;z-index:1;background-color:#fff}.weui-cell_swiped>.weui-cell__ft{position:absolute;right:0;top:0;bottom:0;display:-webkit-box;display:-webkit-flex;display:flex;color:#fff}.weui-swiped-btn{display:block;padding:10px 1em;line-height:1.47058824;color:inherit}.weui-swiped-btn_default{background-color:#c7c7cc}.weui-swiped-btn_warn{background-color:#ff3b30}.weui-cell_access{-webkit-tap-highlight-color:rgba(0,0,0,0);color:inherit}.weui-cell_access:active{background-color:#ececec}.weui-cell_access .weui-cell__ft{padding-right:13px;position:relative}.weui-cell_access .weui-cell__ft:after{content:" ";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;margin-top:-4px;right:2px}.weui-cell_link{color:#586c94;font-size:14px}.weui-cell_link:first-child:before{display:block}.weui-check__label{-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-check__label:active{background-color:#ececec}.weui-check{position:absolute;left:-9999em}.weui-cells_radio .weui-cell__ft{padding-left:.35em}.weui-cells_radio .weui-check+.weui-icon-checked{min-width:16px}.weui-cells_radio .weui-check:checked+.weui-icon-checked:before{display:block;content:'\EA08';color:#09bb07;font-size:16px}.weui-cells_checkbox .weui-cell__hd{padding-right:.35em}.weui-cells_checkbox .weui-icon-checked:before{content:'\EA01';color:#c9c9c9;font-size:23px;display:block}.weui-cells_checkbox .weui-check:checked+.weui-icon-checked:before{content:'\EA06';color:#09bb07}.weui-label{display:block;width:105px;word-wrap:break-word;word-break:break-all}.weui-input{width:100%;border:0;outline:0;-webkit-appearance:none;background-color:transparent;font-size:inherit;color:inherit;height:1.47058824em;line-height:1.47058824}.weui-input::-webkit-inner-spin-button,.weui-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.weui-textarea{display:block;border:0;resize:none;width:100%;color:inherit;font-size:1em;line-height:inherit;outline:0}.weui-textarea-counter{color:#b2b2b2;text-align:right}.weui-cell_warn .weui-textarea-counter{color:#e64340}.weui-toptips{display:none;position:fixed;-webkit-transform:translateZ(0);transform:translateZ(0);top:0;left:0;right:0;padding:5px;font-size:14px;text-align:center;color:#fff;z-index:5000;word-wrap:break-word;word-break:break-all}.weui-toptips_warn{background-color:#e64340}.weui-cells_form .weui-cell__ft{font-size:0}.weui-cells_form .weui-icon-warn{display:none}.weui-cells_form input,.weui-cells_form label[for],.weui-cells_form textarea{-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-cell_warn{color:#e64340}.weui-cell_warn .weui-icon-warn{display:inline-block}.weui-form-preview{position:relative;background-color:#fff}.weui-form-preview:before{top:0;border-top:1px solid #e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-form-preview:after,.weui-form-preview:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}.weui-form-preview:after{bottom:0;border-bottom:1px solid #e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-form-preview__hd{position:relative;padding:10px 15px;text-align:right;line-height:2.5em}.weui-form-preview__hd:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px}.weui-form-preview__hd .weui-form-preview__value{font-style:normal;font-size:1.6em}.weui-form-preview__bd{padding:10px 15px;font-size:.9em;text-align:right;color:#999;line-height:2}.weui-form-preview__ft{position:relative;line-height:50px;display:-webkit-box;display:-webkit-flex;display:flex}.weui-form-preview__ft:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-form-preview__item{overflow:hidden}.weui-form-preview__label{float:left;margin-right:1em;min-width:4em;color:#999;text-align:justify;text-align-last:justify}.weui-form-preview__value{display:block;overflow:hidden;word-break:normal;word-wrap:break-word}.weui-form-preview__btn{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#3cc51f;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0)}button.weui-form-preview__btn{background-color:transparent;border:0;outline:0;line-height:inherit;font-size:inherit}.weui-form-preview__btn:active{background-color:#eee}.weui-form-preview__btn:after{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-form-preview__btn:first-child:after{display:none}.weui-form-preview__btn_default{color:#999}.weui-form-preview__btn_primary{color:#0bb20c}.weui-cell_select{padding:0}.weui-cell_select .weui-select{padding-right:30px}.weui-cell_select .weui-cell__bd:after{content:" ";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;right:15px;margin-top:-4px}.weui-select{-webkit-appearance:none;border:0;outline:0;background-color:transparent;width:100%;font-size:inherit;height:45px;line-height:45px;position:relative;z-index:1;padding-left:15px}.weui-cell_select-before{padding-right:15px}.weui-cell_select-before .weui-select{width:105px;box-sizing:border-box}.weui-cell_select-before .weui-cell__hd{position:relative}.weui-cell_select-before .weui-cell__hd:after{content:" ";position:absolute;right:0;top:0;width:1px;bottom:0;border-right:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-cell_select-before .weui-cell__hd:before{content:" ";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;right:15px;margin-top:-4px}.weui-cell_select-before .weui-cell__bd{padding-left:15px}.weui-cell_select-before .weui-cell__bd:after{display:none}.weui-cell_select-after{padding-left:15px}.weui-cell_select-after .weui-select{padding-left:0}.weui-cell_vcode{padding-top:0;padding-right:0;padding-bottom:0}.weui-vcode-btn,.weui-vcode-img{margin-left:5px;height:45px;vertical-align:middle}.weui-vcode-btn{display:inline-block;padding:0 .6em 0 .7em;border-left:1px solid #e5e5e5;line-height:45px;font-size:17px;color:#3cc51f}button.weui-vcode-btn{background-color:transparent;border-top:0;border-right:0;border-bottom:0;outline:0}.weui-vcode-btn:active{color:#52a341}.weui-gallery{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000;z-index:1000}.weui-gallery__img{position:absolute;top:0;right:0;bottom:60px;left:0;background:50% no-repeat;background-size:contain}.weui-gallery__opr{position:absolute;right:0;bottom:0;left:0;background-color:#0d0d0d;color:#fff;line-height:60px;text-align:center}.weui-gallery__del{display:block}.weui-cell_switch{padding-top:6.5px;padding-bottom:6.5px}.weui-switch{-webkit-appearance:none;appearance:none}.weui-switch,.weui-switch-cp__box{position:relative;width:52px;height:32px;border:1px solid #dfdfdf;outline:0;border-radius:16px;box-sizing:border-box;background-color:#dfdfdf;-webkit-transition:background-color .1s,border .1s;transition:background-color .1s,border .1s}.weui-switch-cp__box:before,.weui-switch:before{content:" ";position:absolute;top:0;left:0;width:50px;height:30px;border-radius:15px;background-color:#fdfdfd;-webkit-transition:-webkit-transform .35s cubic-bezier(.45,1,.4,1);transition:-webkit-transform .35s cubic-bezier(.45,1,.4,1);transition:transform .35s cubic-bezier(.45,1,.4,1);transition:transform .35s cubic-bezier(.45,1,.4,1),-webkit-transform .35s cubic-bezier(.45,1,.4,1)}.weui-switch-cp__box:after,.weui-switch:after{content:" ";position:absolute;top:0;left:0;width:30px;height:30px;border-radius:15px;background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4);-webkit-transition:-webkit-transform .35s cubic-bezier(.4,.4,.25,1.35);transition:-webkit-transform .35s cubic-bezier(.4,.4,.25,1.35);transition:transform .35s cubic-bezier(.4,.4,.25,1.35);transition:transform .35s cubic-bezier(.4,.4,.25,1.35),-webkit-transform .35s cubic-bezier(.4,.4,.25,1.35)}.weui-switch-cp__input:checked~.weui-switch-cp__box,.weui-switch:checked{border-color:#04be02;background-color:#04be02}.weui-switch-cp__input:checked~.weui-switch-cp__box:before,.weui-switch:checked:before{-webkit-transform:scale(0);transform:scale(0)}.weui-switch-cp__input:checked~.weui-switch-cp__box:after,.weui-switch:checked:after{-webkit-transform:translateX(20px);transform:translateX(20px)}.weui-switch-cp__input{position:absolute;left:-9999px}.weui-switch-cp__box{display:block}.weui-uploader__hd{display:-webkit-box;display:-webkit-flex;display:flex;padding-bottom:10px;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-uploader__title{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-uploader__info{color:#b2b2b2}.weui-uploader__bd{margin-bottom:-4px;margin-right:-9px;overflow:hidden}.weui-uploader__files{list-style:none}.weui-uploader__file{float:left;margin-right:9px;margin-bottom:9px;width:79px;height:79px;background:no-repeat 50%;background-size:cover}.weui-uploader__file_status{position:relative}.weui-uploader__file_status:before{content:" ";position:absolute;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.5)}.weui-uploader__file_status .weui-uploader__file-content{display:block}.weui-uploader__file-content{display:none;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff}.weui-uploader__file-content .weui-icon-warn{display:inline-block}.weui-uploader__input-box{float:left;position:relative;margin-right:9px;margin-bottom:9px;width:77px;height:77px;border:1px solid #d9d9d9}.weui-uploader__input-box:after,.weui-uploader__input-box:before{content:" ";position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#d9d9d9}.weui-uploader__input-box:before{width:2px;height:39.5px}.weui-uploader__input-box:after{width:39.5px;height:2px}.weui-uploader__input-box:active{border-color:#999}.weui-uploader__input-box:active:after,.weui-uploader__input-box:active:before{background-color:#999}.weui-uploader__input{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%;opacity:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-msg{padding-top:36px;text-align:center}.weui-msg__icon-area{margin-bottom:30px}.weui-msg__text-area{margin-bottom:25px;padding:0 20px}.weui-msg__text-area a{color:#586c94}.weui-msg__title{margin-bottom:5px;font-weight:400;font-size:20px}.weui-msg__desc,.weui-msg__title{word-wrap:break-word;word-break:break-all}.weui-msg__desc{font-size:14px;color:#999}.weui-msg__opr-area{margin-bottom:25px}.weui-msg__extra-area{margin-bottom:15px;font-size:14px;color:#999}.weui-msg__extra-area a{color:#586c94}@media screen and (min-height:438px){.weui-msg__extra-area{position:fixed;left:0;bottom:0;width:100%;text-align:center}}@media only screen and (device-width:375px) and (device-height:812px) and (-webkit-device-pixel-ratio:3){.weui-msg__extra-area{margin-bottom:49px}}.weui-article{padding:20px 15px;font-size:15px}.weui-article section{margin-bottom:1.5em}.weui-article h1{font-size:18px;font-weight:400;margin-bottom:.9em}.weui-article h2{font-size:16px}.weui-article h2,.weui-article h3{font-weight:400;margin-bottom:.34em}.weui-article h3{font-size:15px}.weui-article *{max-width:100%;box-sizing:border-box;word-wrap:break-word}.weui-article p{margin:0 0 .8em}.weui-tabbar{display:-webkit-box;display:-webkit-flex;display:flex;position:absolute;z-index:500;bottom:0;width:100%;background-color:#f7f7fa}.weui-tabbar:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #c0bfc4;color:#c0bfc4;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-tabbar__item{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:5px 0 0;font-size:0;color:#999;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-tabbar__item.weui-bar__item_on .weui-tabbar__icon,.weui-tabbar__item.weui-bar__item_on .weui-tabbar__icon>i,.weui-tabbar__item.weui-bar__item_on .weui-tabbar__label{color:#09bb07}.weui-tabbar__icon{display:inline-block;width:27px;height:27px}.weui-tabbar__icon>i,i.weui-tabbar__icon{font-size:24px;color:#999}.weui-tabbar__icon img{width:100%;height:100%}.weui-tabbar__label{text-align:center;color:#999;font-size:10px;line-height:1.8}.weui-navbar{display:-webkit-box;display:-webkit-flex;display:flex;position:absolute;z-index:500;top:0;width:100%;background-color:#fafafa}.weui-navbar:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid #ccc;color:#ccc;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-navbar+.weui-tab__panel{padding-top:50px;padding-bottom:0}.weui-navbar__item{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:13px 0;text-align:center;font-size:15px;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-navbar__item:active{background-color:#ededed}.weui-navbar__item.weui-bar__item_on{background-color:#eaeaea}.weui-navbar__item:after{content:" ";position:absolute;right:0;top:0;width:1px;bottom:0;border-right:1px solid #ccc;color:#ccc;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-navbar__item:last-child:after{display:none}.weui-tab{position:relative;height:100%}.weui-tab__panel{box-sizing:border-box;height:100%;padding-bottom:50px;overflow:auto;-webkit-overflow-scrolling:touch}.weui-tab__content{display:none}.weui-progress{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-progress__bar{background-color:#ebebeb;height:3px;-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-progress__inner-bar{width:0;height:100%;background-color:#09bb07}.weui-progress__opr{display:block;margin-left:15px;font-size:0}.weui-panel{background-color:#fff;margin-top:10px;position:relative;overflow:hidden}.weui-panel:first-child{margin-top:0}.weui-panel:before{top:0;border-top:1px solid #e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-panel:after,.weui-panel:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}.weui-panel:after{bottom:0;border-bottom:1px solid #e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-panel__hd{padding:14px 15px 10px;color:#999;font-size:13px;position:relative}.weui-panel__hd:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px}.weui-media-box{padding:15px;position:relative}.weui-media-box:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px}.weui-media-box:first-child:before{display:none}a.weui-media-box{color:#000;-webkit-tap-highlight-color:rgba(0,0,0,0)}a.weui-media-box:active{background-color:#ececec}.weui-media-box__title{font-weight:400;font-size:17px;width:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;word-wrap:break-word;word-break:break-all}.weui-media-box__desc{color:#999;font-size:13px;line-height:1.2;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.weui-media-box__info{margin-top:15px;padding-bottom:5px;font-size:13px;color:#cecece;line-height:1em;list-style:none;overflow:hidden}.weui-media-box__info__meta{float:left;padding-right:1em}.weui-media-box__info__meta_extra{padding-left:1em;border-left:1px solid #cecece}.weui-media-box_text .weui-media-box__title{margin-bottom:8px}.weui-media-box_appmsg{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-media-box_appmsg .weui-media-box__hd{margin-right:.8em;width:60px;height:60px;line-height:60px;text-align:center}.weui-media-box_appmsg .weui-media-box__thumb{width:100%;max-height:100%;vertical-align:top}.weui-media-box_appmsg .weui-media-box__bd{-webkit-box-flex:1;-webkit-flex:1;flex:1;min-width:0}.weui-media-box_small-appmsg{padding:0}.weui-media-box_small-appmsg .weui-cells{margin-top:0}.weui-media-box_small-appmsg .weui-cells:before{display:none}.weui-grids{position:relative;overflow:hidden}.weui-grids:before{right:0;height:1px;border-top:1px solid #d9d9d9;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-grids:after,.weui-grids:before{content:" ";position:absolute;left:0;top:0;color:#d9d9d9}.weui-grids:after{width:1px;bottom:0;border-left:1px solid #d9d9d9;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-grid{position:relative;float:left;padding:20px 10px;width:33.33333333%;box-sizing:border-box}.weui-grid:before{top:0;width:1px;border-right:1px solid #d9d9d9;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-grid:after,.weui-grid:before{content:" ";position:absolute;right:0;bottom:0;color:#d9d9d9}.weui-grid:after{left:0;height:1px;border-bottom:1px solid #d9d9d9;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-grid:active{background-color:#ececec}.weui-grid__icon{width:28px;height:28px;margin:0 auto}.weui-grid__icon img{display:block;width:100%;height:100%}.weui-grid__icon+.weui-grid__label{margin-top:5px}.weui-grid__label{display:block;color:#000;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.weui-footer,.weui-grid__label{text-align:center;font-size:14px}.weui-footer{color:#999}.weui-footer a{color:#586c94}.weui-footer_fixed-bottom{position:fixed;bottom:.52em;left:0;right:0}.weui-footer__links{font-size:0}.weui-footer__link{display:inline-block;vertical-align:top;margin:0 .62em;position:relative;font-size:14px}.weui-footer__link:before{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid #c7c7c7;color:#c7c7c7;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5);left:-.65em;top:.36em;bottom:.36em}.weui-footer__link:first-child:before{display:none}.weui-footer__text{padding:0 .34em;font-size:12px}.weui-flex{display:-webkit-box;display:-webkit-flex;display:flex}.weui-flex__item{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-dialog{position:fixed;z-index:5000;width:80%;max-width:300px;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#fff;text-align:center;border-radius:3px;overflow:hidden}.weui-dialog__hd{padding:1.3em 1.6em .5em}.weui-dialog__title{font-weight:400;font-size:18px}.weui-dialog__bd{padding:0 1.6em .8em;min-height:40px;font-size:15px;line-height:1.3;word-wrap:break-word;word-break:break-all;color:#999}.weui-dialog__bd:first-child{padding:2.7em 20px 1.7em;color:#353535}.weui-dialog__ft{position:relative;line-height:48px;font-size:18px;display:-webkit-box;display:-webkit-flex;display:flex}.weui-dialog__ft:after{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-dialog__btn{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#3cc51f;text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0);position:relative}.weui-dialog__btn:active{background-color:#eee}.weui-dialog__btn:after{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-dialog__btn:first-child:after{display:none}.weui-dialog__btn_default{color:#353535}.weui-dialog__btn_primary{color:#0bb20c}.weui-skin_android .weui-dialog{text-align:left;box-shadow:0 6px 30px 0 rgba(0,0,0,.1)}.weui-skin_android .weui-dialog__title{font-size:21px}.weui-skin_android .weui-dialog__hd{text-align:left}.weui-skin_android .weui-dialog__bd{color:#999;padding:.25em 1.6em 2em;font-size:17px;text-align:left}.weui-skin_android .weui-dialog__bd:first-child{padding:1.6em 1.6em 2em;color:#353535}.weui-skin_android .weui-dialog__ft{display:block;text-align:right;line-height:42px;font-size:16px;padding:0 1.6em .7em}.weui-skin_android .weui-dialog__ft:after{display:none}.weui-skin_android .weui-dialog__btn{display:inline-block;vertical-align:top;padding:0 .8em}.weui-skin_android .weui-dialog__btn:after{display:none}.weui-skin_android .weui-dialog__btn:active,.weui-skin_android .weui-dialog__btn:visited{background-color:rgba(0,0,0,.06)}.weui-skin_android .weui-dialog__btn:last-child{margin-right:-.8em}.weui-skin_android .weui-dialog__btn_default{color:gray}@media screen and (min-width:1024px){.weui-dialog{width:35%}}.weui-toast{position:fixed;z-index:5000;width:7.6em;min-height:7.6em;top:180px;left:50%;margin-left:-3.8em;background:hsla(0,0%,7%,.7);text-align:center;border-radius:5px;color:#fff}.weui-icon_toast{margin:22px 0 0;display:block}.weui-icon_toast.weui-icon-success-no-circle:before{color:#fff;font-size:55px}.weui-icon_toast.weui-loading{margin:30px 0 0;width:38px;height:38px;vertical-align:baseline}.weui-toast__content{margin:0 0 15px}.weui-mask{background:rgba(0,0,0,.6)}.weui-mask,.weui-mask_transparent{position:fixed;z-index:1000;top:0;right:0;left:0;bottom:0}.weui-actionsheet{position:fixed;left:0;bottom:0;-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:5000;width:100%;background-color:#efeff4;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui-actionsheet__title{position:relative;height:65px;padding:0 20px;line-height:1.4;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;text-align:center;font-size:14px;color:#888;background:#fcfcfd}.weui-actionsheet__title:before{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-actionsheet__title .weui-actionsheet__title-text{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.weui-actionsheet__menu{background-color:#fcfcfd}.weui-actionsheet__action{margin-top:6px;background-color:#fcfcfd}.weui-actionsheet__cell{position:relative;padding:10px 0;text-align:center;font-size:18px}.weui-actionsheet__cell:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-actionsheet__cell:active{background-color:#ececec}.weui-actionsheet__cell:first-child:before{display:none}.weui-skin_android .weui-actionsheet{position:fixed;left:50%;top:50%;bottom:auto;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:274px;box-sizing:border-box;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:transparent;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui-skin_android .weui-actionsheet__action{display:none}.weui-skin_android .weui-actionsheet__menu{border-radius:2px;box-shadow:0 6px 30px 0 rgba(0,0,0,.1)}.weui-skin_android .weui-actionsheet__cell{padding:13px 24px;font-size:16px;line-height:1.4;text-align:left}.weui-skin_android .weui-actionsheet__cell:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.weui-skin_android .weui-actionsheet__cell:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.weui-actionsheet_toggle{-webkit-transform:translate(0);transform:translate(0)}.weui-loadmore{width:65%;margin:1.5em auto;line-height:1.6em;font-size:14px;text-align:center}.weui-loadmore__tips{display:inline-block;vertical-align:middle}.weui-loadmore_line{border-top:1px solid #e5e5e5;margin-top:2.4em}.weui-loadmore_line .weui-loadmore__tips{position:relative;top:-.9em;padding:0 .55em;background-color:#fff;color:#999}.weui-loadmore_dot .weui-loadmore__tips{padding:0 .16em}.weui-loadmore_dot .weui-loadmore__tips:before{content:" ";width:4px;height:4px;border-radius:50%;background-color:#e5e5e5;display:inline-block;position:relative;vertical-align:0;top:-.16em}.weui-badge{display:inline-block;padding:.15em .4em;min-width:8px;border-radius:18px;background-color:#f43530;color:#fff;line-height:1.2;text-align:center;font-size:12px;vertical-align:middle}.weui-badge_dot{padding:.4em;min-width:0}.weui-search-bar{position:relative;padding:8px 10px;display:-webkit-box;display:-webkit-flex;display:flex;box-sizing:border-box;background-color:#efeff4;-webkit-text-size-adjust:100%;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-search-bar:before{top:0;border-top:1px solid #d7d6dc;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-search-bar:after,.weui-search-bar:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#d7d6dc}.weui-search-bar:after{bottom:0;border-bottom:1px solid #d7d6dc;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-search-bar.weui-search-bar_focusing .weui-search-bar__cancel-btn{display:block}.weui-search-bar.weui-search-bar_focusing .weui-search-bar__label{display:none}.weui-search-bar__form{position:relative;-webkit-box-flex:1;-webkit-flex:auto;flex:auto;background-color:#efeff4}.weui-search-bar__form:after{content:'';position:absolute;left:0;top:0;width:200%;height:200%;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;border-radius:10px;border:1px solid #e6e6ea;box-sizing:border-box;background:#fff}.weui-search-bar__box{position:relative;padding-left:30px;padding-right:30px;height:100%;width:100%;box-sizing:border-box;z-index:1}.weui-search-bar__box .weui-search-bar__input{padding:4px 0;width:100%;height:1.42857143em;border:0;font-size:14px;line-height:1.42857143em;box-sizing:content-box;background:transparent}.weui-search-bar__box .weui-search-bar__input:focus{outline:none}.weui-search-bar__box .weui-icon-search{position:absolute;top:50%;left:10px;margin-top:-14px;line-height:28px}.weui-search-bar__box .weui-icon-clear{position:absolute;top:50%;right:0;margin-top:-14px;padding:0 10px;line-height:28px}.weui-search-bar__label{position:absolute;top:1px;right:1px;bottom:1px;left:1px;z-index:2;border-radius:3px;text-align:center;color:#9b9b9b;background:#fff}.weui-search-bar__label span{display:inline-block;font-size:14px;vertical-align:middle}.weui-search-bar__label .weui-icon-search{margin-right:5px}.weui-search-bar__cancel-btn{display:none;margin-left:10px;line-height:28px;color:#09bb07;white-space:nowrap}.weui-search-bar__input:not(:valid)~.weui-icon-clear{display:none}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration,input[type=search]::-webkit-search-results-button,input[type=search]::-webkit-search-results-decoration{display:none}.weui-picker{position:fixed;width:100%;left:0;bottom:0;z-index:5000;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui-picker__hd{display:-webkit-box;display:-webkit-flex;display:flex;padding:9px 15px;background-color:#fff;position:relative;text-align:center;font-size:17px}.weui-picker__hd:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-picker__action{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#1aad19}.weui-picker__action:first-child{text-align:left;color:#888}.weui-picker__action:last-child{text-align:right}.weui-picker__bd{display:-webkit-box;display:-webkit-flex;display:flex;position:relative;background-color:#fff;height:238px;overflow:hidden}.weui-picker__group{-webkit-box-flex:1;-webkit-flex:1;flex:1;position:relative;height:100%}.weui-picker__mask{top:0;height:100%;margin:0 auto;background:-webkit-linear-gradient(top,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6)),-webkit-linear-gradient(bottom,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6));background:linear-gradient(180deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6)),linear-gradient(0deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6));background-position:top,bottom;background-size:100% 102px;background-repeat:no-repeat;-webkit-transform:translateZ(0);transform:translateZ(0)}.weui-picker__indicator,.weui-picker__mask{position:absolute;left:0;width:100%;z-index:3}.weui-picker__indicator{height:34px;top:102px}.weui-picker__indicator:before{top:0;border-top:1px solid #e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-picker__indicator:after,.weui-picker__indicator:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}.weui-picker__indicator:after{bottom:0;border-bottom:1px solid #e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-picker__content{position:absolute;top:0;left:0;width:100%}.weui-picker__item{padding:0;height:34px;line-height:34px;text-align:center;color:#000;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.weui-picker__item_disabled{color:#999}@-webkit-keyframes a{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes a{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.weui-animate-slide-up{-webkit-animation:a ease .3s forwards;animation:a ease .3s forwards}@-webkit-keyframes b{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes b{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.weui-animate-slide-down{-webkit-animation:b ease .3s forwards;animation:b ease .3s forwards}@-webkit-keyframes c{0%{opacity:0}to{opacity:1}}@keyframes c{0%{opacity:0}to{opacity:1}}.weui-animate-fade-in{-webkit-animation:c ease .3s forwards;animation:c ease .3s forwards}@-webkit-keyframes d{0%{opacity:1}to{opacity:0}}@keyframes d{0%{opacity:1}to{opacity:0}}.weui-animate-fade-out{-webkit-animation:d ease .3s forwards;animation:d ease .3s forwards}.weui-agree{display:block;padding:.5em 15px;font-size:13px}.weui-agree a{color:#586c94}.weui-agree__text{color:#999}.weui-agree__checkbox{-webkit-appearance:none;appearance:none;outline:0;font-size:0;border:1px solid #d1d1d1;background-color:#fff;border-radius:3px;width:13px;height:13px;position:relative;vertical-align:0;top:2px}.weui-agree__checkbox:checked:before{font-family:weui;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-align:center;speak:none;display:inline-block;vertical-align:middle;text-decoration:inherit;content:"\EA08";color:#09bb07;font-size:13px;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-48%) scale(.73);transform:translate(-50%,-48%) scale(.73)}.weui-agree__checkbox:disabled{background-color:#e1e1e1}.weui-agree__checkbox:disabled:before{color:#adadad}.weui-loading{width:20px;height:20px;display:inline-block;vertical-align:middle;-webkit-animation:e 1s steps(12) infinite;animation:e 1s steps(12) infinite;background:transparent url("data:image/svg+xml;charset=utf8, %3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23E9E9E9' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23989697' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%239B999A' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23A3A1A2' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23ABA9AA' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23B2B2B2' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23BAB8B9' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23C2C0C1' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23CBCBCB' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23D2D2D2' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23DADADA' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23E2E2E2' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E") no-repeat;background-size:100%}.weui-btn_loading.weui-btn_primary .weui-loading,.weui-btn_loading.weui-btn_warn .weui-loading,.weui-loading.weui-loading_transparent{background-image:url("data:image/svg+xml;charset=utf8, %3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect xmlns='http://www.w3.org/2000/svg' width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.56)' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.5)' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.43)' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.38)' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.32)' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.28)' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.25)' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.2)' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.17)' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.14)' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.1)' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.03)' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E")}@-webkit-keyframes e{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes e{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.weui-slider{padding:15px 18px;-webkit-user-select:none;user-select:none}.weui-slider__inner{position:relative;height:2px;background-color:#e9e9e9}.weui-slider__track{height:2px;background-color:#1aad19;width:0}.weui-slider__handler{position:absolute;left:0;top:50%;width:28px;height:28px;margin-left:-14px;margin-top:-14px;border-radius:50%;background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.2)}.weui-slider-box{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-slider-box .weui-slider{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-slider-box__value{margin-left:.5em;min-width:24px;color:#888;text-align:center;font-size:14px}
\ No newline at end of file
diff --git a/src/main/resources/templates/atte/app/appindex.html b/src/main/resources/templates/atte/app/appindex.html
index 750467b..480f4a9 100644
--- a/src/main/resources/templates/atte/app/appindex.html
+++ b/src/main/resources/templates/atte/app/appindex.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+<html style="height: 100%" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
 
 <head>
     <title>首页</title>
@@ -23,12 +23,12 @@
 
 </head>
 
-<body>
+<body style="height: 100%;background:#f0f0ff">
 
         <div id="app1">
-            <div class="block" style="background:#ffffff";>
+            <div class="block" >
                 <br>
-                <span class="demonstration" style="text-align: center;display:block; font-size: 20px;color: #9932CC">选择请假日期</span><br><br>
+                <span class="demonstration" style="text-align: center;display:block; font-size: 20px;color: #9932CC">填写假单</span><br><br>
                     <!--动态将图片轮播图的容器高度设置成与图片一致-->
                 <el-form ref="dateDiaForm" style="text-align: center;display:block;" :model="dateDiaForm"  label-width="36%">
                     <el-form-item label="开始日期:" prop="startdate">
diff --git a/src/main/resources/templates/atte/app/index.html b/src/main/resources/templates/atte/app/index.html
new file mode 100644
index 0000000..ce0713d
--- /dev/null
+++ b/src/main/resources/templates/atte/app/index.html
@@ -0,0 +1,69 @@
+
+<!DOCTYPE html>
+<html style="height: 100%" 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}"/>
+
+    <!--<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>
+
+
+    <link rel="stylesheet" th:href="@{/static/libs/weui/weui.min.css}" media="all"/>
+</head>
+
+<body style="height: 100%;background:#f0f0ff">
+<!--<div class="topbar">-->
+    <!--<p style="text-align: center;display: block;font-size:20px">请假</p>-->
+<!--</div>-->
+<div class="weui-cells">
+    <a class="weui-cell weui-cell_access" onclick="" >
+    <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" onclick="test()" >
+        <div class="weui-cell__bd">
+            <p>查看假条</p>
+        </div>
+        <div id="test" class="weui-cell__ft">
+            [[${custid}]]
+        </div>
+    </a>
+
+</div>
+
+
+</body>
+
+<script>
+    $(function () {
+
+    });
+    function test(){
+        alert("1");
+    }
+
+</script>
+
+<style>
+
+</style>
\ No newline at end of file
diff --git a/src/main/resources/templates/atte/app/test.html b/src/main/resources/templates/atte/app/test.html
index 95d8a7c..802acdf 100644
--- a/src/main/resources/templates/atte/app/test.html
+++ b/src/main/resources/templates/atte/app/test.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+<html style="height: 100%" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
 
 <head>
     <title>首页</title>
@@ -23,18 +23,35 @@
 
 </head>
 
-<body>
+<body style="height: 100%;background:#f0f0ff">
 
-        <div id="app1">
-            <div class="block" style="background:#ffffff;">
-                <br>
-                <span class="demonstration" style="text-align: center;display:block; font-size: 20px;color: #9932CC">选择要开门的设备</span><br><br>
-                    <!--动态将图片轮播图的容器高度设置成与图片一致-->
+<div id="app1">
+    <div class="block" >
+        <br>
+        <span class="demonstration" style="text-align: center;display:block; font-size: 20px;color: #9932CC">填写假单</span><br><br>
+        <!--动态将图片轮播图的容器高度设置成与图片一致-->
+        <el-form ref="dateDiaForm" style="text-align: center;display:block;" :model="dateDiaForm"  label-width="36%">
+            <el-form-item label="开始日期:" prop="startdate">
+                <el-col :span="18">
+                    <el-date-picker
+                            v-model="dateDiaForm.startdate" type="date"
+                            placeholder="选择日期" :editable="false"  value-format="yyyyMMdd">
+                    </el-date-picker>
+                </el-col>
+            </el-form-item>
+            <el-form-item label="结束日期:" prop="enddate">
+                <el-col :span="18">
+                    <el-date-picker
+                            v-model="dateDiaForm.enddate" type="date"
+                            placeholder="选择日期" :editable="false"  value-format="yyyyMMdd">
+                    </el-date-picker>
+                </el-col>
+            </el-form-item>
+        </el-form>
+        <el-button type="success" @click="openDoor" style=" display:block;margin:0 auto;width:100px;height:100px;border-radius:50px;border:solid rgb(100,100,100) 0px; font-size: 20px" >申请</el-button>
+    </div>
 
-                    <el-button type="success" @click="openDoor" style=" display:block;margin:0 auto;width:100px;height:100px;border-radius:50px;border:solid rgb(100,100,100) 0px; font-size: 20px" >开门</el-button>
-            </div>
-
-        </div>
+</div>
 
 </body>
 
@@ -50,7 +67,11 @@
             bannerHeight :1000,
             // 浏览器宽度
             screenWidth :0,
-            userId:''
+            userId:'',
+            dateDiaForm:{
+                startdate:'',
+                enddate:''
+            }
         },
 
         methods:{
@@ -62,7 +83,7 @@
 
             },
             openDoor:function () {
-                var devId = app_vue.selectDevId;
+                var devId = app1_vue.selectDevId;
                 app_openDoor(devId);
             },
             setSize:function () {
@@ -104,7 +125,7 @@
     })
 
     function app_openDoor(devId) {
-        var userId = app_vue.userId;
+        var userId = app1_vue.userId;
         console.log(userId);
         layer.confirm('你确定要开启此门吗?',{icon: 3,title: '请确认',offset: '30%'},function (index) {
             $.ajax({
@@ -130,8 +151,8 @@
 
     // 窗口大小发生改变时,调用一次
     window.onresize = function(){
-        app_vue.screenWidth =  window.innerWidth;
-        app_vue.setSize();
+        app1_vue.screenWidth =  window.innerWidth;
+        app1_vue.setSize();
     }
 
 
diff --git a/src/main/resources/templates/atte/report/p_index.html b/src/main/resources/templates/atte/report/p_index.html
new file mode 100644
index 0000000..215995e
--- /dev/null
+++ b/src/main/resources/templates/atte/report/p_index.html
@@ -0,0 +1,491 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">辅警干警考勤报表</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">人员考勤</a>
+          <a><cite>辅警干警考勤报表</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body" >
+        <div id="polreportapp">
+            <el-form :inline="true" ref="preportform" :model="preportform" data-parsley-validate class="form-horizontal form-label-left">
+                <div class="col-md-4">
+                    <div class="form-group">
+                        <label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;">开始日期:</span>
+                        </label>
+                        <div class="col-md-8 col-sm-12 col-xs-12">
+                            <el-date-picker style="width: 100%"
+                                    v-model="preportform.startdate" type="date"
+                                    placeholder="选择日期" :editable="false"  value-format="yyyyMMdd">
+                            </el-date-picker>
+                        </div>
+                    </div>
+                </div>
+                <div class="col-md-4">
+                    <div class="form-group">
+                        <label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;">结束日期:</span>
+                        </label>
+                        <div class="col-md-8 col-sm-12 col-xs-12">
+                            <el-date-picker style="width: 100%"
+                                    v-model="preportform.enddate" type="date"
+                                    placeholder="选择日期" :editable="false"  value-format="yyyyMMdd">
+                            </el-date-picker>
+                        </div>
+                    </div>
+                </div>
+                <div class="col-md-4">
+                    <div class="form-group">
+                        <label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;">卡号:</span>
+                        </label>
+                        <div class="col-md-8 col-sm-12 col-xs-12">
+                            <el-input v-model="preportform.cardno" placeholder="输入%模糊查询"></el-input>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="col-md-4">
+                    <div class="form-group">
+                        <label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;">姓名:</span>
+                        </label>
+                        <div class="col-md-8 col-sm-12 col-xs-12">
+                            <el-input v-model="preportform.custname" ></el-input>
+                        </div>
+                    </div>
+                </div>
+                <div class="col-md-4">
+                    <div class="form-group">
+                        <label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;">人员类别:</span>
+                        </label>
+                        <div class="col-md-8 col-sm-12 col-xs-12">
+                            <el-select v-model="preportform.custtypeid" style="width:100%;" clearable filterable placeholder="请选择">
+                                <el-option
+                                        v-for="custtypeid in typegrplist"
+                                        :key="custtypeid.value"
+                                        :label="custtypeid.label"
+                                        :value="custtypeid.value">
+                                </el-option>
+                            </el-select>
+                        </div>
+                    </div>
+                </div>
+
+
+                <div    class="col-md-4">
+                    <div class="form-group">
+                        <label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;"></span>
+                        </label>
+                        <div class="col-md-8 col-sm-12 col-xs-12">
+                        <button type="button" class="btn btn-info" @click="query" id="attedtl_qrybtn">查 询</button>
+                        </div>
+                    </div>
+                </div>
+            </el-form>
+
+            <template>
+                <el-table
+                        ref="singleTable"
+                        :data="tableData"
+                        highlight-current-row
+                        @current-change="currRowChange"
+                        stripe
+                        border
+                        max-height="2000"
+                        style="width: 100%">
+
+                    <el-table-column
+                            prop="custname"
+                            label="姓名"
+                            sortable
+                           >
+                    </el-table-column>
+                    <el-table-column
+                            prop="cardno"
+                            label="卡号"
+                            sortable
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="custtypeid"
+                            label="人员类别"
+                            :formatter="custtypefor"
+                           >
+                    </el-table-column>
+                    <el-table-column
+                            prop="deptcode"
+                            label="部门"
+                            :formatter="deptfor"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="cnt1"
+                            label="正常(天)"
+
+                            >
+                    </el-table-column>
+                    <el-table-column
+                            prop="cnt2"
+                            label="迟到早退(天)"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="cnt3"
+                            label="请假(天)"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="cnt4"
+                            label="旷工(天)"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="cnts"
+                            label="总考勤天数"
+                    >
+                    </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>
+
+
+    </div>
+</div>
+
+<script>
+    var polreport_vue = new Vue({
+        el: '#polreportapp',
+        data:{
+            tableData: [],
+            currPage: 1,
+            pageSize:10,
+            totSize:0,
+            currentRow: null,
+            stategrplist:[{value:0,label:'未打卡'},{value:1,label:'正常'},{value:2,label:'迟到'},{value:3,label:'请假'},{value:4,label:'旷工'},],
+            preportform:{
+                startdate:Date.now(),
+                enddate:Date.now(),
+                cardno:'',
+                custname:'',
+                custtypeid:'',
+                deptcode:''
+            },
+            timegrplist:[],
+            typegrplist:[],
+            deptlist:[],
+            dialogFormVisible: false,
+            dlgAllotDevVisible:false,
+            updatetitle:'修改考勤状态',
+            dtlDiaForm:{
+                atteno:'',
+                custname:'',
+                state:'',
+                remark:''
+            },
+            rules: {
+                season: [
+                    { required: true, message: '请输入时令名', trigger: 'blur' },
+                    { min: 1, max: 20, message: '长度在 1 到 20 个字符', trigger: 'blur'}
+                ],
+
+
+            },
+
+        },
+        methods: {
+            handleSizeChange:function(val) {
+                this.pageSize=val;
+                attedtl_commonQuery(this,this.currPage,val);
+            },
+            currPageChange:function(val) {
+                this.currPage=val;
+                attedtl_commonQuery(this,this.currPage,this.pageSize);
+            },
+            currRowChange:function(val) {
+                this.currentRow = val;
+            },
+            attedatefor:function(row){
+                if(row.attedate!= null){
+                    return dateformatter(row.attedate);
+                }
+            },
+            statimefor:function(row){
+                if(row.statime!= null){
+                    return timeformatter(row.statime);
+                }
+            },
+            statefor:function(row){
+                if(row.state!= null){
+                    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);
+                }
+            },
+            query:function () {
+                this.pagesize=10;
+                this.currPage=1;
+                attedtl_commonQuery(this,this.currPage,this.pageSize);
+            },
+            resetForm:function(formName) {
+                this.$refs[formName].resetFields();
+                this.dialogFormVisible = false
+            },
+            closeDialog:function(formName) {
+                this.$refs[formName].resetFields();
+                this.dialogFormVisible = false
+            },
+            saveState:function (formName) {
+
+                 var _that=this;
+                    attedtl_saveData(_that,formName);
+
+            },
+            editDtl:function (row) {
+                 dtl_getFillData(this,row);
+                 this.dialogFormVisible = true;
+                 this.updatetitle="修改流水状态"
+            },
+            custtypefor:function (row) {
+                return custtype_grpname(row.custtypeid);
+            },
+            deptfor:function (row) {
+                return dept_grpname(row.deptcode);
+            },
+            refreshdtl:function (){
+                var _that=this;
+                refreshAtteDtl(_that);
+            }
+
+        },
+        created:function(){
+            var _self=this;
+            var token=$("meta[name='_csrf_token']").attr("value");
+            var startdate=class_Formatdate(_self.preportform.startdate);
+            var enddate=class_Formatdate(_self.preportform.enddate);
+            $.ajax({
+                type:"post",
+                dataType:"json",
+                url:"[[@{/atte/police/list?startdate=}]]"+startdate+"&enddate="+enddate,
+                contentType: "application/json",
+                headers: {
+                    'Accept': 'application/json',
+                    'Content-Type': 'application/json',
+                    'X-CSRF-TOKEN':token,
+                },
+                data:JSON.stringify(_self.preportform),
+                success:function(ret){
+                    // //console.log(ret);
+                    // _self.totSize=ret.PageResult.totalCount;
+                    _self.tableData=ret.PageResult.list;
+                    var custtypelist = [];
+                    var types=ret.custtypelist;
+                    for (var i = 0; i < types.length; i++) {
+                        custtypelist.push({
+                            value: types[i].custtypeid,
+                            label: types[i].custtypename
+                        });
+                    }
+                    var deptlist=[];
+                    var depts=ret.deptlist;
+                    for (var i = 0; i < depts.length; i++) {
+                        deptlist.push({
+                            value: depts[i].deptcode,
+                            label: depts[i].deptname
+                        });
+                    }
+                    _self.deptlist=deptlist;
+                    _self.typegrplist=custtypelist;
+                }
+            })
+        }
+
+    })
+    function refreshAtteDtl(that){
+        var startdate=class_Formatdate(that.preportform.startdate);
+        var enddate=class_Formatdate(that.preportform.enddate);
+        if(startdate== '' || enddate=='') {
+            layer.msg("请选择日期", {icon: 2, time: 1000});
+            return;
+        }
+        if(startdate>enddate){
+            layer.msg("开始日期不能大于结束日期!", {icon: 2, time: 1000});
+            return;
+        }
+        layer.confirm('你确定要刷新所选日期的流水吗?', {icon: 3, title:'请确认',offset:'30%'},function (){
+
+            $.ajax({
+                type:"get",
+                dataType:"json",
+                url:"[[@{/atte/adddtlbyhand?enddate=}]]"+enddate+"&startdate="+startdate,
+                success:function(ret){
+                    layer.msg('保存信息成功!', {icon: 1, time: 1000});
+                    dtl_refreshThisTable();
+                }
+            })
+        })
+    }
+    function dateformatter(time){
+        return time.substr(0,4)+'-'+time.substr(4,2)+'-'+time.substr(6,2);
+    }
+    function timeformatter(time){
+        return time.substr(0,2)+':'+time.substr(2,2)+':'+time.substr(4,2);
+    }
+
+    function dept_grpname(grpid){
+//        console.log(typeof timeid)
+        if(grpid!=null){
+            var list = polreport_vue.deptlist;
+            for(var i=0;i<list.length;i++){
+                if(list[i].value == grpid){
+                    return list[i].label;
+                }
+            }
+        }
+    }
+    function custtype_grpname(grpid){
+//        console.log(typeof timeid)
+        if(grpid!=null){
+            var list = polreport_vue.typegrplist;
+            for(var i=0;i<list.length;i++){
+                if(list[i].value == grpid){
+                    return list[i].label;
+                }
+            }
+        }
+    }
+    function state_grpname(grpid){
+        if(grpid!=null){
+            var list = polreport_vue.stategrplist;
+            for(var i=0;i<list.length;i++){
+                if(list[i].value == grpid){
+                    return list[i].label;
+                }
+            }
+        }
+    }
+
+    function timeid_grpname(grpid){
+        if(grpid!=null){
+            var list = polreport_vue.timegrplist;
+            for(var i=0;i<list.length;i++){
+                if(list[i].value == grpid){
+                    return list[i].label;
+                }
+            }
+        }
+    }
+    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;
+    }
+    function attedtl_commonQuery(_self,pageno,pagesize) {
+
+        var token=$("meta[name='_csrf_token']").attr("value");
+        var startdate=class_Formatdate(_self.preportform.startdate);
+        var enddate=class_Formatdate(_self.preportform.enddate);
+        $.ajax({
+            type:"post",
+            dataType:"json",
+            url:"[[@{/atte/police/list?startdate=}]]"+startdate+"&enddate="+enddate+"&pageNo="+pageno+"&pageSize="+pagesize,
+            contentType: "application/json",
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json',
+                'X-CSRF-TOKEN':token,
+            },
+            data:JSON.stringify(_self.preportform),
+            success:function(ret){
+                _self.totSize=ret.PageResult.totalCount;
+                _self.tableData=ret.PageResult.list;
+                if(_self.totSize == 0 ){
+                    layer.msg("暂无数据", {icon: 2, time: 1000});
+                }
+
+            }
+        })
+    }
+
+    function dtl_getFillData(_self,row){
+            _self.dtlDiaForm.atteno=row.atteno;
+            _self.dtlDiaForm.custname=row.custname;
+            _self.dtlDiaForm.state=row.state;
+            _self.dtlDiaForm.remark=row.remark;
+    }
+
+    function attedtl_saveData(_that,formName) {
+            var atteno=_that.dtlDiaForm.atteno;
+            var state=_that.dtlDiaForm.state;
+            var remark=_that.dtlDiaForm.remark;
+            if(remark==null){
+                remark='';
+            }
+            var token=$("meta[name='_csrf_token']").attr("value");
+            $.ajax({
+                type: "POST",
+                url: '[[@{/atte/updatetimeDtl?atteno=}]]'+atteno+"&state="+state+"&remark="+remark,
+                dataType: "json",
+                contentType: "application/json",
+                headers: {
+                    'Accept': 'application/json',
+                    'Content-Type': 'application/json',
+                    'X-CSRF-TOKEN':token,
+                },
+                success: function (data) {
+                    if (data.errStr == undefined) {
+                        layer.msg('用户认证已过期,请重新登录', {icon: 2, time: 1000});
+                        window.location = "login";
+                        return;
+                    }
+                    if (data.errStr != "") {
+                        layer.msg(data.errStr, {icon: 2, time: 1000});
+                    } else {
+                        layer.msg('保存信息成功!', {icon: 1, time: 1000});
+                        _that.dialogFormVisible = false;
+                        dtl_refreshThisTable();
+                        _that.$refs[formName].resetFields();
+                    }
+                }
+            })
+
+    }
+
+    function dtl_refreshThisTable(){
+        attedtl_commonQuery(polreport_vue,polreport_vue.currPage,polreport_vue.pageSize);
+    };
+
+
+
+
+
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/atte/review/index.html b/src/main/resources/templates/atte/review/index.html
new file mode 100644
index 0000000..421d4bc
--- /dev/null
+++ b/src/main/resources/templates/atte/review/index.html
@@ -0,0 +1,570 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">审核人管理</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">人员考勤</a>
+          <a><cite>审核人管理</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body" >
+    <div id="reviewapp">
+
+
+    <div id="assign_custSelect" >
+        <div>
+            <el-form :inline="true" ref="devform" :model="person_person" data-parsley-validate
+                     class="form-horizontal form-label-left">
+                <div class="col-md-3" >
+                    <div class="form-group">
+                        <label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;">姓名:</span>
+                        </label>
+                        <div class="col-md-8 col-sm-12 col-xs-12">
+                            <el-input v-model="person_person.custname" ></el-input>
+                        </div>
+                    </div>
+                </div>
+                <!--<div class="col-md-3" >-->
+                    <!--<div class="form-group">-->
+                        <!--<label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;">部门:</span>-->
+                        <!--</label>-->
+                        <!--<div class="col-md-8 col-sm-12 col-xs-12">-->
+                            <!--<el-select v-model="person_person.deptcode"-->
+                                       <!--filterable-->
+                                       <!--clearable-->
+                                       <!--placeholder="请选择">-->
+                                <!--<el-option-->
+                                        <!--v-for="deptcode in deptlist"-->
+                                        <!--:key="deptcode.value"-->
+                                        <!--:label="deptcode.label"-->
+                                        <!--:value="deptcode.value">-->
+                                <!--</el-option>-->
+                            <!--</el-select>-->
+                        <!--</div>-->
+                    <!--</div>-->
+                <!--</div>-->
+                <div class="col-md-3" >
+                    <div class="form-group">
+                        <label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;">人员类别:</span>
+                        </label>
+                        <div class="col-md-8 col-sm-12 col-xs-12">
+                            <el-select v-model="person_person.custtypeid"
+                                       filterable
+                                       clearable
+                                       placeholder="请选择">
+                                <el-option
+                                        v-for="custtypeid in custtypelist"
+                                        :key="custtypeid.value"
+                                        :label="custtypeid.label"
+                                        :value="custtypeid.value">
+                                </el-option>
+                            </el-select>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="col-md-3" >
+                    <div class="form-group">
+                        <button type="button" class="btn btn-info" @click="searchCust" id="cust_qrybtn">查 询</button>
+                    </div>
+                </div>
+            </el-form>
+
+        </div>
+
+
+
+
+
+        <div id="assign_devSel">
+            <div class="layui-row layui-col-space15">
+                <div class="layui-col-md5" style="width: 45%">
+                    <div class="layui-card">
+                        <div class="layui-card-header" style="margin-bottom: 10px" v-if="person_lefttable">
+                            可分配人员({{person_lefttable.length}}人)
+                        </div>
+                        <div id="addDoorlist_pensonS-tb" class="layui-card-body">
+
+                            <template>
+                                <el-table
+                                        height="480"
+                                        ref="multipleTable"
+                                        :data="person_lefttable"
+                                        tooltip-effect="dark"
+                                        style="width: 100%;"
+                                        stripe
+                                        border
+                                        @selection-change="lefttableSelect">
+                                    <el-table-column
+                                            fixed
+                                            type="selection"
+                                           >
+                                    </el-table-column>
+                                    <el-table-column
+                                            sortable
+                                            prop="cardno"
+                                            label="卡号"
+                                            >
+                                    </el-table-column>
+                                    <el-table-column
+                                            sortable
+                                            prop="custname"
+                                            label="姓名"
+                                            >
+                                    </el-table-column>
+                                    <el-table-column
+                                            prop="bankcardno"
+                                            label="银行卡号"
+                                            >
+                                    </el-table-column>
+                                </el-table>
+                            </template>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="layui-col-md1" style="width: 10%">
+                    <div style="width:5%;height:400px;display:inline-block;padding:0;margin-left: 5px; float:left">
+                        <div style="position: absolute;top:55%;width:5%;padding:0;margin: 0;text-align: center;left: 28%">
+                            <el-button class="el-icon-d-arrow-right" :disabled="per_addBtn_dis" @click="person_addBtn"></el-button>
+                        </div>
+                        <div style="position: absolute;top:80%;width:5%;padding:0;margin: 0;text-align: center;left: 28%">
+                            <el-button class="el-icon-d-arrow-left" :disabled="per_delBtn_dis" @click="person_delBtn"></el-button>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="layui-col-md5" style="width: 45%">
+                    <div class="layui-card">
+
+                        <div class="layui-card-header" style="margin-bottom: 10px" v-if="person_righttable">
+                            审核人员({{person_righttable.length}}人)
+                        </div>
+                        <div  class="layui-card-body">
+                            <template>
+                                <el-table
+                                        height="480"
+                                        ref="multipleTable"
+                                        :data="person_righttable"
+                                        tooltip-effect="dark"
+                                        style="width: 100%;"
+                                        stripe
+                                        border
+                                        @selection-change="rightTableSelect">
+                                    <el-table-column
+                                            fixed
+                                            type="selection"
+                                            >
+                                    </el-table-column>
+                                    <el-table-column
+                                            sortable
+                                            prop="cardno"
+                                            label="卡号"
+                                            >
+                                    </el-table-column>
+                                    <el-table-column
+                                            sortable
+                                            prop="custname"
+                                            label="姓名"
+                                            >
+                                    </el-table-column>
+                                    <el-table-column
+                                            prop="bankcardno"
+                                            label="银行卡号"
+                                            >
+                                    </el-table-column>
+                                </el-table>
+                            </template>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <div class="layui-row layui-col-space15">
+            <div style="float:left;margin:0px 0 0 30%;"></div>
+            <div style="float:left;margin:0px 0 0 10%;"><el-button style="margin-top: 12px;" @click="save_btn">保存</el-button></div>
+        </div>
+    </div>
+    </div>
+    </div>
+
+</div>
+
+<script>
+    var review_vue = new Vue({
+        el: '#reviewapp',
+        data:{
+            oper:'',
+            readonly:true,
+            dept:'',
+            tableData: [],
+            currPage: 1,
+            pageSize:10,
+            totSize:0,
+            sel_classid:'',
+            currentRow: null,
+            classform:{
+                classname:'',
+            },
+            person_person:{
+                custname:'',
+                custtypeid:'',
+                deptcode:''
+            },
+            devtypes:[],
+            typegrplist:[{value:1,label:'工作日'},{value:2,label:'节假日'},],
+            person_lefttable:[],
+            person_righttable:[],
+            custtypelist:[],
+            timelist:[],
+            deptlist:[],
+            leftTableSelection:[],
+            rightTableSelection:[],
+            per_addBtn_dis:true,
+            per_delBtn_dis:true,
+            dialogFormVisible: false,
+            dlgAllotDevVisible:false,
+            classtitle:'添加班次',
+
+            pickerOptions0: {
+                disabledDate:function(time) {
+                    return time.getTime() <Date.now();
+                }
+            },
+            pickerOptions1: {
+                disabledDate:function(time) {
+                    if(review_vue.classDiaForm.startdate !=''){
+
+                        return time.getTime() < review_vue.classDiaForm.startdate.getTime();
+                    }else {
+                        return time.getTime() < Date.now();
+                    }
+                }
+            },
+            rules:{
+                classname:[
+                    { required: true, message: '请输入班次名称', trigger: 'blur' },
+                    { min: 1, max: 20, message: '长度在 1 到 20 个字符', trigger: 'blur'}
+                ],
+                workorno:[
+                    { required: true, message: ' ',},
+                ],
+                timegrpid:[
+                    { required: true, message: ' '},
+                ],
+                startdate:[
+                    { required: true,message: ' ', },
+                ],
+                enddate:[
+                    { required: true ,message: ' ',},
+                ],
+                deptcode:[
+                    { required: true ,message: ' ',},
+                ],
+            },
+
+        },
+        methods: {
+            handleSizeChange:function(val) {
+                this.pageSize=val;
+                class_commonQuery(this,this.currPage,val);
+            },
+            currPageChange:function(val) {
+                this.currPage=val;
+                class_commonQuery(this,this.currPage,this.pageSize);
+            },
+            currRowChange:function(val) {
+                this.currentRow = val;
+            },
+            query:function () {
+                this.pagesize=10;
+                this.currPage=1;
+                class_commonQuery(this,this.currPage,this.pageSize);
+            },
+            resetForm:function(formName) {
+                this.$refs[formName].resetFields();
+                this.dialogFormVisible = false
+            },
+            closeDialog:function(formName) {
+                this.$refs[formName].resetFields();
+                this.dialogFormVisible = false
+            },
+            saveClass:function (formName) {
+                var _that=this;
+                var vali = false;
+                this.$refs[formName].validate(
+                    function(valid){
+                        if (valid){
+                            vali = true;
+                        }else{
+                            vali=false;
+                        }
+                    });
+                if (vali==true){
+                    class_saveData(_that,formName);
+                }
+            },
+            editClass:function (id) {
+                class_getFillData(this,id);
+                this.dialogFormVisible = true;
+                this.classtitle="修改班次"
+            },
+            classtypefor:function (row) {
+
+                return classtype_grpname(row.workorno);
+            },
+            deptfor:function (row) {
+
+                return dept_grpname(row.deptcode);
+            },
+            timefor:function(row){
+                return timegrp_grpname(row.timegrpid);
+            },
+
+            startdatefor:function(row){
+                if(row.startdate != null) {
+                    return dateformatter(row.startdate);
+                }
+            },
+            enddatefor:function(row){
+                if(row.enddate != null) {
+                    return dateformatter(row.enddate);
+                }
+            },
+
+            assignCust:function(id){
+                this.sel_classid=id;
+                $("#classdiv").hide();
+                $("#assign_custSelect").show();
+                $("#cust_qrybtn").click();
+            },
+            searchCust:function(){
+                var that=this;
+                    addAllCustList(that);
+            },
+            lefttableSelect:function(val) {
+                //console.log(val);
+                this.leftTableSelection = val;
+                this.per_addBtn_dis=this.leftTableSelection<=0;
+            },
+            rightTableSelect:function(val) {
+                this.rightTableSelection = val;
+                this.per_delBtn_dis=this.rightTableSelection<=0;
+            },
+            person_addBtn:function(){
+                var _self=this;
+                var left=_self.leftTableSelection;
+                var right=[];
+                right=left.splice(0,left.length);
+                var dev={};
+                for(var i=0;i<right.length;i++){
+                    if($.inArray(right[i],_self.person_righttable)==-1) {
+                        _self.person_righttable.push(right[i]);
+                    }
+                }
+                var leftData=this.person_lefttable;
+                for(var i=0;i<right.length;i++){
+                    var s = $.inArray(right[i],leftData );
+                    if (s != -1) {
+                        leftData.splice(s, 1);
+                    }
+                }
+                this.per_addBtn_dis=true;
+            },
+            person_delBtn:function(){
+                var right=this.rightTableSelection;
+                var rightData=this.person_righttable;
+                for(var i=0;i<right.length;i++) {
+                    var s = $.inArray(right[i], rightData);//判断是否在rightData中存在这个值,存在返回下标,不存在返回-1
+                    if (s != -1) {
+                        rightData.splice(s, 1);
+                    }
+                }
+                for(var i=0;i<right.length;i++) {
+                    this.person_lefttable.push(right[i]);
+                }
+                this.per_delBtn_dis = true;
+            },
+            save_btn: function () {
+                var that=this;
+                save_review(that);
+            },
+            prev_btn:function (){
+                $("#classdiv").show();
+                $("#assign_custSelect").hide();
+                this.person_lefttable=[];
+                this.person_righttable=[];
+            },
+            addClass:function(){
+                class_getFillData(this,"-1");
+                this.dialogFormVisible = true;
+                this.classtitle="添加班次";
+
+
+            },
+            delClass:function(id){
+                class_deletedata(id);
+            }
+        },
+        created:function(){
+            var that=this;
+
+            var token=$("meta[name='_csrf_token']").attr("value");
+            var custname=that.person_person.custname;
+            var custtypeid=that.person_person.custtypeid;
+            that.person_lefttable=[];
+            var url="[[@{/atte/review/custlist?}]]"+"perName="+custname+"&custtypeid="+custtypeid
+            ;
+            $.ajax({
+                type: "POST",
+                url: url,
+                dataType: "json",
+                headers: {
+                    'Accept': 'application/json',
+                    'Content-Type': 'application/json',
+                    'X-CSRF-TOKEN':token,
+                },
+                contentType: "application/json",
+                data: "",
+                success: function (data) {
+
+                    if(data.countIndex){
+                        layer.msg('人员数量过大,请输入查询条件!',{icon:2,time:3000});
+                    }else{
+                        // addDoorlist_vue.person_lefttable=data.pNotInResult;
+                        var allcust=data.allcust;
+                        var reviewlist=data.reviewlist;
+                        that.person_righttable=reviewlist;
+                        that.person_lefttable=allcust;
+                    }
+                    var custtypelist = [];
+                    var types=data.custtypelist;
+                    for (var i = 0; i < types.length; i++) {
+                        custtypelist.push({
+                            value: types[i].custtypeid,
+                            label: types[i].custtypename
+                        });
+                    }
+                    that.custtypelist=custtypelist;
+                }
+            });
+        }
+
+    })
+    function save_review(that){
+
+        var token=$("meta[name='_csrf_token']").attr("value");
+
+        var idlist=new Array();
+        var right=that.person_righttable;
+
+        for(var i=0;i<right.length;i++){
+            idlist.push(right[i].custid);
+        }
+
+        $.ajax({
+            type: "POST",
+            url:"[[@{atte/addreview?}]]"+"idlist="+idlist,
+            dataType: "json",
+            contentType: "application/json",
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json',
+                'X-CSRF-TOKEN':token,
+            },
+            success: function (data) {
+
+                if (data.errStr == undefined) {
+                    layer.msg('用户认证已过期,请重新登录', {icon: 2, time: 1000});
+                    window.location = "login";
+                    return;
+                }
+                if(data.errStr != ''){
+                    layer.msg(data.errStr, {icon: 2, time: 1000});
+                    return ;
+                }
+                if (data.errStr == ''){
+                    layer.msg('保存成功!', {icon: 1, time: 1000});
+                    $("#cust_qrybtn").click();
+                    return ;
+                }
+            }
+        });
+    }
+    function addAllCustList(that){
+
+        var token=$("meta[name='_csrf_token']").attr("value");
+        var custname=that.person_person.custname;
+        var custtypeid=that.person_person.custtypeid;
+        var url="[[@{/atte/review/custlist?}]]"+"perName="+custname+"&custtypeid="+custtypeid;
+
+        $.ajax({
+            type: "POST",
+            url: url,
+            dataType: "json",
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json',
+                'X-CSRF-TOKEN':token,
+            },
+            contentType: "application/json",
+            data: "",
+            success: function (data) {
+                if(data.countIndex){
+                    layer.msg('人员数量过大,请输入查询条件!',{icon:2,time:3000});
+                }else{
+                   // addDoorlist_vue.person_lefttable=data.pNotInResult;
+                    var allcust=data.allcust;
+                    var reviewlist=data.reviewlist;
+                    var num=allcust.length;
+                   that.person_righttable=reviewlist;
+                    that.person_lefttable=allcust;
+                }
+            }
+        });
+
+    }
+
+
+
+
+
+
+
+
+
+    function class_commonQuery(_self,pageno,pagesize) {
+       var classname=_self.classform.classname;
+        $.ajax({
+            type:"get",
+            dataType:"json",
+            url:"[[@{/atte/class/list?classname=}]]"+classname+"&pageNo="+pageno+"&pageSize="+pagesize,
+            success:function(ret){
+                _self.totSize=ret.PageResult.totalCount;
+                _self.tableData=ret.PageResult.list;
+                if(_self.totSize == 0 ){
+                    layer.msg("暂无数据", {icon: 2, time: 1000});
+                }
+                if (ret.errStr != ''){
+                    lay.msg(ret.errStr,{icon: 2, time: 1000});
+                }
+            }
+        })
+    }
+
+
+
+
+
+
+
+
+    function class_refreshThisTable(){
+        class_commonQuery(review_vue,review_vue.currPage,review_vue.pageSize);
+    }
+
+
+
+
+
+</script>
\ No newline at end of file