diff --git a/src/main/java/com/supwisdom/dlpay/api/controller/DoorApiAction.java b/src/main/java/com/supwisdom/dlpay/api/controller/DoorApiAction.java
index 6211967..d1bc2df 100644
--- a/src/main/java/com/supwisdom/dlpay/api/controller/DoorApiAction.java
+++ b/src/main/java/com/supwisdom/dlpay/api/controller/DoorApiAction.java
@@ -6,7 +6,9 @@
 import com.supwisdom.dlpay.framework.data.SystemDateTime;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.framework.util.HmacUtil;
 import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.mainservice.service.WebInterfaceService;
 import com.supwisdom.dlpay.system.domain.TDept;
 import com.supwisdom.dlpay.system.service.SystemService;
@@ -93,6 +95,26 @@
   @ResponseBody
   public BaseResp visitorcheck(@RequestBody VisitorCheckBean postData) {
     BaseResp resp = new BaseResp();
+    Map<String,String> datamap=new HashMap<>();
+    datamap.put("visitorname",postData.getVisitorname());
+    datamap.put("idno",postData.getIdno());
+    datamap.put("phone",postData.getPhone());
+    datamap.put("time",postData.getPhone());
+    datamap.put("sex",postData.getSex());
+    datamap.put("deptcode",postData.getDeptcode());
+    datamap.put("custid",postData.getCustid());
+    datamap.put("company",postData.getCompany());
+    datamap.put("remarks",postData.getRemarks());
+    Map<String, String> paraFilter = HmacUtil.paraFilter(datamap);
+    String linkString = StringUtil.createLinkString(paraFilter);
+    String hmacsha1 = HmacUtil.HMACSHA1(linkString, "adc4ac6822fd462780f878b86cb94688");
+
+      if(postData.getSign()==null||!postData.getSign().toLowerCase().equals(hmacsha1.toLowerCase())){
+        resp.setRetcode("99");
+        resp.setRetmsg("校验失败");
+        return resp;
+      }
+
 
     SystemDateTime dt = systemUtilService.getSysdatetime();
     try{
diff --git a/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java b/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
index 887a8f1..cbc0a82 100644
--- a/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
+++ b/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
@@ -3,8 +3,12 @@
 import com.supwisdom.dlpay.app.domain.VisitorConfig;
 import com.supwisdom.dlpay.app.domain.WechatResp;
 import com.supwisdom.dlpay.app.service.AppService;
+import com.supwisdom.dlpay.doorlist.service.DoorlistMgrService;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.ncmgr.domain.TNcAllottime;
+import com.supwisdom.dlpay.ncmgr.domain.TNcAllottimeId;
+import com.supwisdom.dlpay.ncmgr.domain.TNcCardlist;
 import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
 import com.supwisdom.dlpay.ncmgr.service.NcService;
 import com.supwisdom.dlpay.util.RedisUtil;
@@ -25,10 +29,7 @@
 import java.security.KeyPair;
 import java.security.PrivateKey;
 import java.security.PublicKey;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Controller
 @RequestMapping("/app")
@@ -42,11 +43,14 @@
     @Autowired
     private VisitorConfig visitorConfig;
     @Autowired
+    DoorlistMgrService doorlistMgrService;
+    @Autowired
     private VisitormanageService visitormanageService;
     private String wechatURL, redirect, appid, appsecret;
 
-    private final String privatekeystring="MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAK9Zcfjepn4EJvCIvEa28UY6/PgZtyO1aRv9SXJmk3X9p4etO2MpWJUL6KLd6ZAIXuKn+qmejnrg3NiWpewvGqLOuz6x0PjA21AQlc/Gf+bVkRZfH8so/om6dv0w6KwDMuwZoXtVToM81Z1gNLdfVNBskOj7c1sEpNWOUOn6qY5DAgMBAAECgYEApJdEz+HOTcL/+g+fCpF18AI2qXsZ2L7Tpp4dbvCxwbMSqdwFPpL0vxKqjxXVwojY58/dDZHzE4w2QGdH32ZnjJKIfE5Li9xjPyS9V6fHe2Lttocns1QaFhMLzHA9tgnC+HK5bP9bAyd4SCsXkUIQDMf824ytkAPgxooYp0lF+aECQQDr+r7Gfjf/FjelxndTyxCaFXSO/DbTPeabzw2RXx/SARqlttABMi45R/JxIpny/5OVlgu4NbmApfRxTv2qaAJ1AkEAvjne/XOR7ojwO9DomTIaHyWQ2NotMltnQXjHo5+PlxS+s8elpiR6bIagv8OCvbXObRqkwm3Eu5LWFOd7vqXG1wJAU47YGqT64wJU9ghOnIcc+9J5EWBRcX9LtwQcA8uxEsV9UAxpnuLL51CIknL0HE1PTvpwb+vmIZ2h7rVPsRVfOQJBAJeXwMfUSNCCGohgpGwpTD3UDwlxXSFLTA8V9GrFpoVsx8i3ap/rZBCGfSY05UTP1NCHshMrrOMaUjbYfnng3IMCQApnWtHEMlDH/PVr4Ig0Jvf6NZ2VUSzM1lgcbE6L2M8w3hNZKYtM8oC0/PEGfh53KG7E+HpQa1m/flimvSNIFGs=";
-    private final String pubkeystring="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvWXH43qZ+BCbwiLxGtvFGOvz4GbcjtWkb/UlyZpN1/aeHrTtjKViVC+ii3emQCF7ip/qpno564NzYlqXsLxqizrs+sdD4wNtQEJXPxn/m1ZEWXx/LKP6Junb9MOisAzLsGaF7VU6DPNWdYDS3X1TQbJDo+3NbBKTVjlDp+qmOQwIDAQAB";
+    private final String privatekeystring = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAK9Zcfjepn4EJvCIvEa28UY6/PgZtyO1aRv9SXJmk3X9p4etO2MpWJUL6KLd6ZAIXuKn+qmejnrg3NiWpewvGqLOuz6x0PjA21AQlc/Gf+bVkRZfH8so/om6dv0w6KwDMuwZoXtVToM81Z1gNLdfVNBskOj7c1sEpNWOUOn6qY5DAgMBAAECgYEApJdEz+HOTcL/+g+fCpF18AI2qXsZ2L7Tpp4dbvCxwbMSqdwFPpL0vxKqjxXVwojY58/dDZHzE4w2QGdH32ZnjJKIfE5Li9xjPyS9V6fHe2Lttocns1QaFhMLzHA9tgnC+HK5bP9bAyd4SCsXkUIQDMf824ytkAPgxooYp0lF+aECQQDr+r7Gfjf/FjelxndTyxCaFXSO/DbTPeabzw2RXx/SARqlttABMi45R/JxIpny/5OVlgu4NbmApfRxTv2qaAJ1AkEAvjne/XOR7ojwO9DomTIaHyWQ2NotMltnQXjHo5+PlxS+s8elpiR6bIagv8OCvbXObRqkwm3Eu5LWFOd7vqXG1wJAU47YGqT64wJU9ghOnIcc+9J5EWBRcX9LtwQcA8uxEsV9UAxpnuLL51CIknL0HE1PTvpwb+vmIZ2h7rVPsRVfOQJBAJeXwMfUSNCCGohgpGwpTD3UDwlxXSFLTA8V9GrFpoVsx8i3ap/rZBCGfSY05UTP1NCHshMrrOMaUjbYfnng3IMCQApnWtHEMlDH/PVr4Ig0Jvf6NZ2VUSzM1lgcbE6L2M8w3hNZKYtM8oC0/PEGfh53KG7E+HpQa1m/flimvSNIFGs=";
+    private final String pubkeystring = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvWXH43qZ+BCbwiLxGtvFGOvz4GbcjtWkb/UlyZpN1/aeHrTtjKViVC+ii3emQCF7ip/qpno564NzYlqXsLxqizrs+sdD4wNtQEJXPxn/m1ZEWXx/LKP6Junb9MOisAzLsGaF7VU6DPNWdYDS3X1TQbJDo+3NbBKTVjlDp+qmOQwIDAQAB";
+
     @RequestMapping("/appindex")
     public String impdevindex(@RequestParam(value = "userid") String userId, Model model) {
         model.addAttribute("userId", userId);
@@ -56,8 +60,9 @@
     @RequestMapping("/doorappindex")
     public String doorappindex(@RequestParam(value = "custid") String custid, Model model) {
         model.addAttribute("userId", custid);
-        return "apph5/doorappindex";
+        return "apph5/leavehistory";
     }
+
     @RequestMapping("/doorappvisitor")
     public String doorappvisitor(@RequestParam(value = "custid") String custid, Model model) {
 
@@ -134,8 +139,8 @@
 
     @RequestMapping("/appvisitor")
     public String appvisitor(Model model) {
-
-        return "apph5/applyforvisitor";
+        model.addAttribute("issuccess", true);
+        return "apph5/visitorresult";
     }
 
     @RequestMapping("/getqrcode")
@@ -200,6 +205,38 @@
     }
 
     @ResponseBody
+    @RequestMapping("/getleavehistory")
+    public Map getUserList(
+            HttpServletRequest request,
+            HttpServletResponse response,
+            @RequestParam(value = "rtype", required = false) String rtype,
+            @RequestParam(value = "custtype", required = false) String custtype,
+            @RequestParam(value = "status", required = false) String status,
+            @RequestParam(value = "pageNo", required = false, defaultValue = "1") int pageNo,
+            @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize) {
+        Map map = new HashMap();
+        try {
+            EVisitorCheckDtl a = new EVisitorCheckDtl();
+            a.setStatus(1);
+            a.setTransdate("20200304");
+            a.setCustid("1");
+            a.setCompany("aaaaaa");
+            EVisitorCheckDtl b = new EVisitorCheckDtl();
+            b.setStatus(2);
+            b.setTransdate("20200306");
+            b.setCustid("ccc");
+            b.setCompany("bbbbbbbb");
+            List<EVisitorCheckDtl> list = new ArrayList<>();
+            list.add(a);
+            list.add(b);
+            map.put("list", list);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return map;
+    }
+
+    @ResponseBody
     @RequestMapping(value = "/apply/apply", method = {RequestMethod.POST})
     public Map applyforvisitor(@RequestBody VisitorCheckBean postData) {
         Map map = new HashMap();
@@ -220,30 +257,70 @@
             eVisitorCheckDtl.setSex(postData.getSex());
             eVisitorCheckDtl.setTranstime(time.substring(8));
             String s = StringUtil.getRandomString(18);
-            s+=time;
+            s += time;
             eVisitorCheckDtl.setSign(s);
             eVisitorCheckDtl.setTotalcount(3);
             eVisitorCheckDtl.setUsecount(0);
-            eVisitorCheckDtl.setQrcodetime(time);
+            int timeint = Integer.parseInt(time);
+            String lasttime = "";
+            if (Integer.parseInt(time.substring(8)) < 210000) {
+                timeint += 30000;
+                lasttime = time.substring(0, 8) + timeint;
+            } else {
+                lasttime = time.substring(0, 8) + "235959";
+            }
+            eVisitorCheckDtl.setQrcodetime(lasttime);
             eVisitorCheckDtl.setIsqrcode("1");
-            String sign="SIGNFORVISITOR"+s;
+            String sign = "SIGNFORVISITOR" + s;
             eVisitorCheckDtl.setQrcode(sign);
 
             boolean b = visitormanageService.saveVisitorCheck(eVisitorCheckDtl);
+            List<TNcCardlist> tNcCardlists = new ArrayList<TNcCardlist>();
+            if (b) {
+                //long listid = webInterfaceService.getNextSeqTDoorcardlst();
+                //从缓存读取列表值并加1
+                long listid = RedisUtil.incr("seq_cardlist");
+                TNcCardlist tmpCardlist = new TNcCardlist();
+                tmpCardlist.setListid(listid + "");
+                tmpCardlist.setCustid(sign);
+                tmpCardlist.setCustname(postData.getVisitorname());
+                tmpCardlist.setCardno("");
+                tmpCardlist.setBankcardno("");
+                tmpCardlist.setCardphyid("");
+                tmpCardlist.setClosedate(lasttime);
+                tmpCardlist.setDeviceid(3);
+                tmpCardlist.setOperflag("A");
+                tmpCardlist.setRectime(time);
+                tmpCardlist.setSynctime("");
+                tmpCardlist.setSyncflag("N");
+                tmpCardlist.setRtnflag("Y");
+                tmpCardlist.setRtntime(time);
+                tmpCardlist.setVersion(1);
+                tmpCardlist.setOperid("");
+                tmpCardlist.setReason("内部人员访客app申请");
 
+                tNcCardlists.add(tmpCardlist);
 
-            if(b){
+                //webInterfaceService.saveTDoorcardlst(tDoorcardlst);
+
+                doorlistMgrService.batchSaveCardList(tNcCardlists);
+                RedisUtil.incr("zcard_max_version");
+                tNcCardlists.clear();
+
+            }
+
+            if (b) {
                 EVisitorCheckDtl checkBySign = visitormanageService.getVisitorCheckBySign(sign);
                 int id = checkBySign.getId();
                 map.put("retcode", "0");
                 map.put("retmsg", "保存成功");
                 map.put("visitorid", id);
-            }else {
+            } else {
                 map.put("retcode", "99");
                 map.put("retmsg", "保存失败");
 
             }
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             map.put("retcode", "99");
             map.put("retmsg", "系统错误!");
@@ -256,7 +333,7 @@
     public String getapplycode(@RequestParam(value = "visitorid") int visitorid, Model model) {
         String qrcode = "";
         EVisitorCheckDtl visitorCheckById = visitormanageService.getVisitorCheckById(visitorid);
-        if(visitorCheckById!=null){
+        if (visitorCheckById != null) {
             qrcode = visitorCheckById.getQrcode();
         }
         //qrcode="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appid+"&redirect_uri="+redirect+"%2fapp%2fqrcodevisitor%3finoutflag%3d"+inoutflag+"&response_type=code&scope=snsapi_userinfo&state=&connect_redirect=1#wechat_redirect";
@@ -265,6 +342,7 @@
         model.addAttribute("isapply", 1);
         return "apph5/visitorcode";
     }
+
     //根据设备名称模糊查询
     @ResponseBody
     @RequestMapping("/searchByDevName")
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java
index 166106a..18415fd 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java
@@ -97,7 +97,7 @@
     return false;
   }
 
- /* public static void main(String[] args) {
+  public static void main(String[] args) {
     String refno = DateUtil.getNow();
     Map<String, String> mapValue = new HashMap<String, String>();
     mapValue.put("tradeaccount", "10000097");
@@ -109,8 +109,10 @@
     mapValue.put("shopid", "68512084");
     String signstr = StringUtil.createLinkString(HmacUtil.paraFilter(mapValue));
     String sign = HmacUtil.HMACSHA1(signstr, "adc4ac6822fd462780f878b86cb94688");
+    System.out.println(signstr);
+    System.out.println(sign);
     System.out.println("{\"tradeaccount\":\"10000097\",\"tradename\":\"在线点餐\",\"tradeamount\":\"1\"," +
         "\"paidamount\": \"1\",\"outtradeno\":\"" + refno + "\",\"yktshopid\": \"2\",\"shopid\":\"68512084\",\"sign\": \"" + sign + "\"}");
-  }*/
+  }
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/visitormanage/domain/VisitorCheckBean.java b/src/main/java/com/supwisdom/dlpay/visitormanage/domain/VisitorCheckBean.java
index 2b465fc..88c2247 100644
--- a/src/main/java/com/supwisdom/dlpay/visitormanage/domain/VisitorCheckBean.java
+++ b/src/main/java/com/supwisdom/dlpay/visitormanage/domain/VisitorCheckBean.java
@@ -17,7 +17,7 @@
     private String custid;
     private String company;
     private String remarks;
-
+    private String sign;
 
     public String getVisitorname() {
         return visitorname;
@@ -91,5 +91,11 @@
         this.remarks = remarks;
     }
 
+    public String getSign() {
+        return sign;
+    }
 
+    public void setSign(String sign) {
+        this.sign = sign;
+    }
 }
diff --git a/src/main/resources/static/res/assets/images/visitorfail.jpg b/src/main/resources/static/res/assets/images/visitorfail.jpg
new file mode 100644
index 0000000..0341e25
--- /dev/null
+++ b/src/main/resources/static/res/assets/images/visitorfail.jpg
Binary files differ
diff --git a/src/main/resources/static/res/assets/images/visitorsuccess.jpg b/src/main/resources/static/res/assets/images/visitorsuccess.jpg
new file mode 100644
index 0000000..151584c
--- /dev/null
+++ b/src/main/resources/static/res/assets/images/visitorsuccess.jpg
Binary files differ
diff --git a/src/main/resources/static/res/images/visitorsuccess.jpg b/src/main/resources/static/res/images/visitorsuccess.jpg
new file mode 100644
index 0000000..151584c
--- /dev/null
+++ b/src/main/resources/static/res/images/visitorsuccess.jpg
Binary files differ
diff --git a/src/main/resources/templates/apph5/history.html b/src/main/resources/templates/apph5/history.html
index 053c769..b1a8646 100644
--- a/src/main/resources/templates/apph5/history.html
+++ b/src/main/resources/templates/apph5/history.html
@@ -1,5 +1,6 @@
 <!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4"
+      xmlns:c="http://www.w3.org/1999/XSL/Transform">
 
 <head>
     <title>首页</title>
@@ -28,9 +29,7 @@
 </head>
 
 <script type="text/javascript">
-    setInterval(function () {
-        window.location.reload();
-    }, 60000);
+
 
     $(function () {
 
@@ -67,25 +66,70 @@
 </html>
 <body class="page" style="text-align: center">
 <div class="weui-cells">
-    <a class="weui-cell weui-cell_access" href="javascript:;">
-        <div class="weui-cell__bd">
-            <p>浴室</p>
-        </div>
-        <div class="weui-cell__ft">
-            <input class="weui-input" id="area" type="text" value="" placeholder="请选择">
-        </div>
-    </a>
-    <a class="weui-cell weui-cell_access" href="javascript:;">
-        <div class="weui-cell__bd">
-            <p>时间</p>
-        </div>
-        <div class="weui-cell__ft">
-            <input class="weui-input" id="ordertime" type="text" value="" placeholder="请选择">
-            <input id="endtime" type="hidden">
-        </div>
-    </a>
+    <div class="weui-panel weui-panel_access">
+        <div id="top">
+            <c:if test="${dtllist!=null}">
+                <c:forEach items="${dtllist}" var="dtl">
+                    <div class="weui-panel__bd">
+                        <div class="weui-media-box weui-media-box_text">
+                            <h4 class="weui-media-box__title" style="display: flex">
+                                <div style="flex: 1">${dtl.areaname}</div>
+                                <div>${dtl.ordercode}</div>
+                            </h4>
+                            <p class="weui-media-box__desc">
+                            <div class="weui-cell__bd">
+                                <span style="font-size:14px;color:#999; "></span>
+                            </div>
+                            <div style="display: flex;">
+                                <fmt:parseDate value="${dtl.orderdate}" var="orderdate" pattern="yyyyMMdd"/>
+                                <fmt:parseDate value="${dtl.ordertime}" var="ordertime" pattern="HHmmss"/>
+                                <div style="font-size:14px;color:#999;flex: 1"><fmt:formatDate value="${orderdate}"
+                                                                                               pattern="yyyy/MM/dd"/>
+                                    预约时间<fmt:formatDate value="${ordertime}" pattern="HH:mm:ss"/></div>
+                                <div style="font-size:14px;color:#999;margin-left:10px">
+                                    <c:if test="${dtl.status eq 1}">
+                                        已预约
+                                    </c:if>
+                                    <c:if test="${dtl.status eq 2}">
+                                        取消
+                                    </c:if>
+                                    <c:if test="${dtl.status eq 3}">
+                                        已使用
+                                    </c:if>
+                                    <c:if test="${dtl.status eq 4}">
+                                        已到期
+                                    </c:if>
+                                </div>
+                                <%--<div><c:if test="${dtl.status==1&&dtl.tradedirect==1}"> <span class="label label-warning"
+                                                                                                  style="color: #f0ad4e">等待付款</span></c:if>
+                                <c:if test="${dtl.status==1&&dtl.tradedirect==2}"> <span class="label label-warning"
+                                                                                         style="color: #f0ad4e">等待对方付款</span></c:if>
+                                <c:if test="${dtl.status==2}"><span class="label label-success"
+                                                                    style="color: #5cb85c">交易成功</span></c:if>
+                                <c:if test="${dtl.status==3}"><span class="label label-default"
+                                                                    style="color: #777">交易取消</span></c:if>
+                                <c:if test="${dtl.status==4}"><span class="label label-danger"
+                                                                    style="color: #d9534f">交易终止</span></c:if>
+                                <c:if test="${dtl.status==5}"><span class="label label-danger"
+                                                                    style="color: #d9534f">交易失败</span></c:if>
+                            </div>--%>
+                            </div>
+                            </p>
+                        </div>
+                    </div>
+                </c:forEach>
+            </c:if>
 
-    <input type="hidden" id="ocnt">
+        </div>
+        <c:if test="${pageno lt totalpage}">
+            <div class="weui-panel__ft" id="loadmore">
+                <a href="javascript:loadNext();" class="weui-cell weui-cell_access weui-cell_link">
+                    <div class="weui-cell__bd" style="text-align: center;color: #5bc0de;">加载更多</div>
+                </a>
+            </div>
+        </c:if>
+        <input type="hidden" id="pageno" value="${pageno}">
+    </div>
 </div>
 
 </body>
diff --git a/src/main/resources/templates/apph5/leavehistory.html b/src/main/resources/templates/apph5/leavehistory.html
index d1beb9b..49c9efc 100644
--- a/src/main/resources/templates/apph5/leavehistory.html
+++ b/src/main/resources/templates/apph5/leavehistory.html
@@ -12,7 +12,8 @@
 
     <link rel="stylesheet" href="/static/res/assets/plugins/element-ui/theme-default/index.css"
           th:href="@{/static/res/assets/plugins/element-ui/theme-default/index.css}"/>
-
+    <link rel="stylesheet" href="/static/res/assets/css/wxpage.css"
+          th:href="@{/static/res/assets/css/wxpage.css}"/>
     <!--<script type="text/javascript" th:src="@{/static/libs/jquery/jquery-3.2.1.min.js}"></script>-->
     <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.min.js}"></script>
     <!--<script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>-->
@@ -27,102 +28,297 @@
 <body>
 
 <div id="app">
-    <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 class="el-message-box__input">
-            <el-row>
-                <table>
-                    <tr>
-                        <td>
-                            <el-label class="label-fade-enter">姓名</el-label>
-                            <input type="hidden" class="el-input" id="custid"></td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <el-label class="label-fade-enter"></el-label>
-                            <input type="text" class="el-input" id="idno">
-                        </td>
-
-                    </tr>
-                    <tr>
-                        <td>
-                            <el-label class="label-fade-enter">访问人性别</el-label>
-                            <input type="text" class="el-input" id="sex">
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <el-label class="label-fade-enter">访问人联系方式</el-label>
-                            <input type="text" class="el-input" id="phone">
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <el-label class="label-fade-enter">访问人单位</el-label>
-                            <input type="text" class="el-input" id="company">
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <el-label class="label-fade-enter">受访人姓名</el-label>
-                            <input type="text" class="el-input" id="custid">
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <el-label class="label-fade-enter">受访人部门</el-label>
-                            <input type="text" class="el-input" id="deptcode"></td>
-                    </tr>
-                    <tr>
-                        <td><el-label class="label-fade-enter">备注</el-label>
-                            <input type="text" class="el-input" id="remarks"></td>
-                    </tr>
-                </table>
-            </el-row>
+    <el-button type="primary" @click="showdiv()">筛 选</el-button>
 
 
+    <div class="row">
+        <div class="col-md-12" style="padding-left: 0px;padding-right: 0px">
+            <div class="box box-primary" style="margin-bottom: 15px">
+                <div class="box-body box-profile">
+                    <template>
+                        <el-table
+                                ref="singleTable"
+                                :data="tableData"
+                                highlight-current-row
+                                @current-change="currRowChange"
+                                stripe
+                                border>
+                            <el-table-column
+                                    prop="custid"
+                                    align="center"
+                                    v-show="false">
+                                <template scope="scope" @click="editDtl(scope.row)">
+                                    <div class="weui-panel__bd">
+                                        <div class="weui-media-box weui-media-box_text">
+                                            <h4 class="weui-media-box__title" style="display: flex">
+                                                <div style="flex: 1">{{scope.row.custid}}</div>
+                                                <div>{{scope.row.company}}</div>
+                                            </h4>
+                                            <p class="weui-media-box__desc">
+                                            <div class="weui-cell__bd">
+                                                <span style="font-size:14px;color:#999; "></span>
+                                            </div>
+                                            <div style="display: flex;">
 
+                                                <div style="font-size:14px;color:#999;flex: 1">
+                                                    请假时间{{scope.row.transdate}}--{{scope.row.transdate}}
+                                                </div>
+                                                <div style="font-size:14px;color:#999;margin-left:10px">
+                                                    <span v-if="scope.row.status== '1'"><el-tag
+                                                            type="success">已批准</el-tag></span>
+                                                    <span v-if="scope.row.status== '2'"><el-tag
+                                                            type="warning">未批准</el-tag></span>
+                                                </div>
+
+                                            </div>
+                                            </p>
+                                        </div>
+                                    </div>
+
+                                </template>
+                            </el-table-column>
+
+                            <!--<el-table-column
+                                    prop="custname"
+                                    label="名称"
+                                    align="center">
+                            </el-table-column>
+                            <el-table-column
+                                    prop="remark"
+                                    label="描述"
+                                    align="center">
+                            </el-table-column>
+                            <el-table-column
+                                    prop="startdate"
+                                    label="开始日期"
+
+                                    align="center">
+                            </el-table-column>
+                            <el-table-column
+                                    prop="enddate"
+                                    label="结束日期"
+
+                                    align="center">
+                            </el-table-column>
+
+<el-table-column
+                                    prop="status"
+                                    label="状态"
+
+                                    align="center">
+                                <template scope="scope">
+                                    <span v-if="scope.row.status=== '1'"><el-tag
+                                            type="success">已批准</el-tag></span>
+                                    <span v-if="scope.row.status=== '2'"><el-tag
+                                            type="warning">未批准</el-tag></span>
+                                </template>
+
+                            </el-table-column>
+
+                            <el-table-column
+                                    label="操作"
+                                    fixed="right"
+                                    align="center"
+                            >
+                                <template scope="scope">
+                                    <button v-if="scope.row.status=== '2'" type="button" class="btn btn-danger btn-xs"
+                                            title="批准"
+                                            @click="delUser(scope.row.ids)">批准
+                                    </button>
+                                </template>
+                            </el-table-column>-->
+                        </el-table>
+                        <div class="clearfix"></div>
+
+                    </template>
+                </div>
+            </div>
         </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>
+    <el-dialog :title="updatetitle2" :visible.sync="dialogFormVisible2" size="thin"
+               :modal-append-to-body='false' @close="closeDialog('historyform')">
+        <el-form ref="historyform" class="el-form-item el-form-item--mini" :model="historyform" size="mini"
+                 :rules="rules" label-width="36%">
+            <el-form-item label="姓名:" prop="custid">
+                <el-col :span="18">
+                    <el-input v-model="historyform.custid" readonly style="width: 250px;" maxlength="20">
+                    </el-input>
+                </el-col>
+            </el-form-item>
+            <el-form-item label="状态:" prop="status">
+                <el-col :span="18">
+                    <el-select v-model="historyform.state" style="width: 250px;" clearable filterable placeholder="请选择">
+                        <el-option
+                                v-for="state in statuslist"
+                                :key="state.value"
+                                :label="state.label"
+                                :value="state.value">
+                        </el-option>
+                    </el-select>
+                </el-col>
+            </el-form-item>
+            <el-form-item label="备注:" prop="remark">
+                <el-col :span="18">
+                    <el-input type="textarea" v-model="historyform.remark" placeholder="填写备注" style="width: 250px;">
+                    </el-input>
+                </el-col>
+            </el-form-item>
 
+
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+            <el-button @click="resetForm('historyform') ">取 消</el-button>
+            <el-button type="primary" @click="saveState('historyform')">确 定</el-button>
+        </div>
+    </el-dialog>
+    <el-dialog :title="updatetitle" :visible.sync="dialogFormVisible"  size="tiny" :modal-append-to-body='false'
+               @close="closeDialog('tempform')">
+        <el-form size="mini" ref="tempform" :model="tempform" data-parsley-validate
+                 class="el-form-item el-form-item--mini" >
+            <el-form-item label="人员类型:" prop="custtype">
+                <div class="el-col el-col-18">
+                    <div class="el-input" style="width: 187px;">
+                        <el-select v-model="tempform.custtype" id="custtype">
+                            <el-option
+                                    v-for="status in custtypelist"
+                                    :key="status.value"
+                                    :label="status.label"
+                                    :value="status.value">
+                            </el-option>
+                        </el-select>
+                    </div>
+                </div>
+            </el-form-item>
+            <el-form-item label="请假类型:" prop="rtype">
+                <div class="el-col el-col-18">
+                    <div class="el-input" style="width: 187px;">
+                        <el-select v-model="tempform.rtype" id="rtype">
+                            <el-option
+                                    v-for="status in rtypelist"
+                                    :key="status.value"
+                                    :label="status.label"
+                                    :value="status.value">
+                            </el-option>
+                        </el-select>
+                    </div>
+                </div>
+            </el-form-item>
+            <el-form-item label="状态:" prop="status">
+                <div class="el-col el-col-18">
+                    <div class="el-input" style="width: 187px;">
+                        <el-select v-model="tempform.status" id="status">
+                            <el-option
+                                    v-for="status in statuslist"
+                                    :key="status.value"
+                                    :label="status.label"
+                                    :value="status.value">
+                            </el-option>
+                        </el-select>
+                    </div>
+                </div>
+            </el-form-item>
+
+        </el-form>
+        <div slot="footer" style="text-align:center; ">
+            <el-button type="primary" @click="saveTemp('tempform')">查 询</el-button>
+            <el-button type="primary" @click="closediv()">取 消</el-button>
+        </div>
+    </el-dialog>
 </div>
 
+
+
 </body>
 
 <script>
+    var validatePhone = function (rule, value, callback) {
+        if (value == "") {
+            callback(new Error("请输入手机号"));
+        } else if (!isCellPhone(value)) {//引入methods中封装的检查手机格式的方法
+            callback(new Error("请输入正确的手机号!"));
+        } else {
+            callback();
+        }
+    }
+
     var app_vue = new Vue({
         el: '#app',
         data: {
-            devNameList: [],
-            devIdList: [],
-            selectDevName: '',
-            selectDevId: '',
-            // 图片父容器高度
+            tableData: [],
+            confName: '1234',
+            currPage: 1,
+            pageSize: 20,
+            totSize: 0,
+            currentRow: null,
+            tempform: {
+                rtype: '',
+                custtype: '',
+                status: '',
+            },
+            historyform: {
+                custid: '',
+                custname: '',
+                startdate: '',
+                enddate: '',
+                remark: '',
+                rtype: '',
+                status: '',
+                custtype: '',
+            },
+            sexlist: [],
+            rtypelist: [],
+            custtypelist: [],
+            statuslist: [],
             bannerHeight: 1000,
-            // 浏览器宽度
             screenWidth: 0,
             userId: '',
-            searchDoorForm: {
-                visitorname: '',
-                idno: '',
-                time: '',
-                phone: '',
-                sex: '',
-                custid: '',
-                deptcode: '',
-                company: '',
-                remarks: '',
+            dialogFormVisible: false,
+            dialogFormVisible2: false,
+            dlgAllotDevVisible: false,
+            updatetitle: '筛选',
+            updatetitle2: '详情',
+            rules: {
+                /*visitorname: [
+                    {required: true, message: '请输入访客姓名', trigger: 'blur'},
+                ],
+                idno: [
+                    {required: true, message: '请输入访客身份证号', trigger: 'blur'}
+                ],
+                sex: [
+                    {required: true, message: '请输入访客性别', trigger: 'blur'}
+                ],
+                remarks: [
+                    {required: true, message: '请输入备注', trigger: 'blur'}
+                ],
+                phone: [
+                    {required: true, validator: validatePhone, trigger: 'blur'}
+                ]*/
             },
         },
 
         methods: {
+            saveTemp: function (formName) {
+
+                var _that = this;
+                this.pagesize = 10;
+                this.currPage = 1;
+                commonQuery(this, this.tempform.rtype, this.tempform.custtype, this.tempform.status, this.currPage, this.pageSize);
+            },
+            showdiv: function (row) {
+                this.dialogFormVisible = true;
+                this.updatetitle = "筛选"
+            },
+            editDtl: function (row) {
+                dtl_getFillData(this, row);
+                this.dialogFormVisible2 = true;
+                this.updatetitle2 = "详情"
+            },
+            closediv: function () {
+                closesearchform();
+            },
+            currRowChange: function (val) {
+                this.currentRow = val;
+            },
             indexChange: function (pre, next) {
                 var _self = this;
                 var devIdListTmp = _self.devIdList;
@@ -130,9 +326,6 @@
                 // console.log(_self.selectDevId)
 
             },
-            openDoor: function () {
-                app_openDoor();
-            },
             setSize: function () {
                 // 通过浏览器宽度(图片宽度)计算高度
                 this.bannerHeight = this.screenWidth;
@@ -143,110 +336,94 @@
             // 首次加载时,需要调用一次
             _self.screenWidth = window.innerWidth;
             _self.setSize();
+            var confid = '[[${confid}]]';
+            var deptcode = '[[${deptcode}]]';
+            console.log(confid);
+            _self.tempform.custid = confid;
+            var sexl = [];
+            sexl.push({
+                value: '',
+                label: '请选择'
+            });
+            sexl.push({
+                value: '1',
+                label: '男'
+            });
+            sexl.push({
+                value: '2',
+                label: '女'
+            });
+            _self.sexlist = sexl;
 
-            var userId = '[[${userId}]]';
-            _self.userId = userId;
-
-            $.ajax({
-                type: "get",
-                dataType: "json",
-                url: encodeURI("[[@{/app/getdeptlist}]]"),
-                success: function (ret) {
-                    var dlist = [];
-                    dlist.push({
-                        value: '',
-                        label: '请选择'
-                    });
-                    var rB = ret.deptlist;
-                    if (rB != null) {
-                        for (var j = 0; j < rB.length; j++) {
-                            dlist.push({
-                                value: rB[j]["deptcode"],
-                                label: rB[j]["deptname"]
-                            });
-                        }
-                    }
-
-                    searchDoorlist_vue.deptlist = dlist;
-                    var sexl = [];
-                    sexl.push({
-                        value: '',
-                        label: '请选择'
-                    });
-                    sexl.push({
-                        value: '1',
-                        label: '男'
-                    });
-                    sexl.push({
-                        value: '2',
-                        label: '女'
-                    });
-                    searchDoorlist_vue.sexlist = sexl;
-                }
-            })
         }
-
     })
 
-    function app_openDoor() {
-        var visitorname=$("#visitorname").val();
-        var idno=$("#idno").val();
-        var phone=$("#phone").val();
-        var company=$("#company").val();
-        var sex=$("#sex").val();
-        var deptcode=$("#deptcode").val();
-        var custid=$("#custid").val();
-        var remarks=$("#remarks").val();
-        if(visitorname==null||visitorname.length==0){
-            alert("请输入访客姓名");
-            return;
-        }if(idno==null||idno.length==0){
-            alert("请输入访客身份证号");
-            return;
-        }if(phone==null||phone.length<=11){
-            alert("请输入访客联系方式");
-            return;
-        }if(sex==null||sex.length==0){
-            alert("请选择性别");
-            return;
-        }if(time==null||time.length==0){
-            alert("请输入时间");
-            return;
-        }if(company==null||company.length==0){
-            alert("请输入访客单位");
-            return;
-        }if(deptcode==null||deptcode.length==0){
-            alert("请选择受访者部门");
-            return;
-        }if(custid==null||custid.length==0){
-            alert("请选择受访者姓名");
-            return;
-        }
-        layer.confirm('你确定要登记吗?', {icon: 3, title: '请确认', offset: '30%'}, function (index) {
-
-            $.ajax({
-                type: "get",
-                dataType: "json",
-                url:encodeURI("[[@{/app/apply?visitorname=}]]" +visitorname+"&idno="+idno+"&phone="+phone+"&company="+company+"&sex="+sex+"&deptcode="+deptcode+"&custid="+custid+"&remarks="+remarks),
-                success:function (ret) {
-
-                    if (ret.message != "") {
-                        layer.msg(ret.message, {icon: 2, time: 2000});
-                    } else {
-                        layer.msg('登记成功', {icon: 1, time: 2000});
-                    }
-                }
-            })
-        });
-
-    }
-
     // 窗口大小发生改变时,调用一次
     window.onresize = function () {
         app_vue.screenWidth = window.innerWidth;
         app_vue.setSize();
     }
 
+    function showsearchform() {
+        $("#sear").show();
+    }
+
+    function closesearchform() {
+        $("#sear").hide();
+    }
+
+    function dtl_getFillData(_self, row) {
+        _self.historyform.custid = row.custid;
+        _self.historyform.status = row.status;
+        _self.historyform.remark = row.remark;
+    }
+
+    function saveTempCustomer(_that, formdata, formName) {
+        var token = $("meta[name='_csrf_token']").attr("value");
+        $.ajax({
+            type: "post",
+            url: encodeURI("[[@{/app/apply/apply}]]"),
+            dataType: "json",
+            contentType: "application/json",
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json',
+                'X-CSRF-TOKEN': token,
+            },
+            data: JSON.stringify(formdata),
+            success: function (data) {
+
+                if (data.retcode != "0") {
+                    layer.msg(data.retmsg, {icon: 2, time: 2000});
+                    window.location = "[[@{/app/getapplyqrcode?visitorid=}]]" + data.visitorid;
+                } else {
+                    layer.msg('登记成功!', {icon: 1, time: 1000});
+                }
+            }
+        });
+    }
+
+    function commonQuery(_self, rtype, custtype, status, pageno, pagesize) {
+        $.ajax({
+            type: "get",
+            dataType: "json",
+            url: "[[@{/app/getleavehistory?rtype=}]]" + rtype + "&custtype=" + custtype + "&status=" + status + "&pageNo=" + pageno + "&pageSize=" + pagesize,
+            success: function (info) {
+                console.log(info)
+
+                _self.tableData = info.list;
+            }
+        })
+    }
+
+    function isCellPhone(val) {
+        if (!/^1(3|4|5|6|7|8)\d{9}$/.test(val)) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
 
 </script>
 
diff --git a/src/main/resources/templates/apph5/visitorresult.html b/src/main/resources/templates/apph5/visitorresult.html
index 221e492..ce81044 100644
--- a/src/main/resources/templates/apph5/visitorresult.html
+++ b/src/main/resources/templates/apph5/visitorresult.html
@@ -20,13 +20,15 @@
     <!--<script src="https://unpkg.com/vue/dist/vue.js"></script>
     <script src="https://unpkg.com/mint-ui/lib/index.js"></script>-->
 </head>
-<body>
-<div id="app" >
-    <div class="page-title" style="text-align:center; font-size: 24px;color: #FF8247">登记结果</div><br>
+<body th:background="@{/static/res/images/visitorsuccess.jpg}">
+<div id="app"  >
+ <!--   <div class="page-title" style="text-align:center; font-size: 24px;color: #FF8247">登记结果</div><br>
     <div class="mintui-success" id="msg"></div>
     <input type="hidden" id="issuccess" th:value="${issuccess}">
-
+-->
 </div>
+
+<!--<img th:src="@{/static/res/images/visitorsuccess.jpg}"/>-->
 </body>
 
 <script>
