diff --git a/src/main/java/com/supwisdom/dlpay/api/controller/DoorApiAction.java b/src/main/java/com/supwisdom/dlpay/api/controller/DoorApiAction.java
new file mode 100644
index 0000000..6211967
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/api/controller/DoorApiAction.java
@@ -0,0 +1,129 @@
+package com.supwisdom.dlpay.api.controller;
+
+import com.supwisdom.dlpay.api.bean.BaseResp;
+import com.supwisdom.dlpay.customer.bean.CustomerSearchBean;
+import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;
+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.PageResult;
+import com.supwisdom.dlpay.mainservice.service.WebInterfaceService;
+import com.supwisdom.dlpay.system.domain.TDept;
+import com.supwisdom.dlpay.system.service.SystemService;
+import com.supwisdom.dlpay.visitormanage.domain.EVisitorCheckDtl;
+import com.supwisdom.dlpay.visitormanage.domain.VisitorCheckBean;
+import com.supwisdom.dlpay.visitormanage.service.VisitormanageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Controller //将所有方法标识@ResponseBody注解
+@RequestMapping("/api/doorapi")
+public class DoorApiAction {
+  @Autowired
+  private SystemUtilService systemUtilService;
+  @Autowired
+  private SystemService systemService;
+  @Autowired
+  private WebInterfaceService webInterfaceService;
+  @Autowired
+  private VisitormanageService visitormanageService;
+
+  @RequestMapping("/checkonline")
+  @ResponseBody
+  public BaseResp checkonline() {
+    SystemDateTime dt = systemUtilService.getSysdatetime();
+
+    BaseResp resp = new BaseResp();
+    resp.setRetcode("0");
+    resp.setRetmsg("连接成功");
+    resp.setData(dt);
+    return resp;
+  }@RequestMapping("/getdeptlist")
+  @ResponseBody
+  public BaseResp getdeptlist() {
+    BaseResp resp = new BaseResp();
+
+    List<TDept> deptlist=null;
+    try{
+      deptlist=systemService.findAllDept();
+    }catch (Exception e){
+      e.printStackTrace();
+      resp.setRetcode("99");
+      resp.setRetmsg("系统错误");
+    }
+    if(deptlist==null){
+      deptlist=new ArrayList<>();
+    }
+    resp.setRetcode("0");
+    resp.setRetmsg("查询成功");
+    resp.setData(deptlist);
+    return resp;
+  }@RequestMapping("/getcustlist")
+  @ResponseBody
+  public BaseResp getcustlist(@RequestParam(value = "deptcode",required = true,defaultValue = "")String deptcode) {
+    List<TCustomerInfo> custlist =null;
+    BaseResp resp = new BaseResp();
+
+    try{
+      CustomerSearchBean searchBean = new CustomerSearchBean();
+      searchBean.setDeptcode(deptcode);
+      PageResult<TCustomerInfo> bean= webInterfaceService.getCustomerInfoPage(searchBean);
+      custlist = bean.getData();
+
+    }catch (Exception e){
+      e.printStackTrace();
+      resp.setRetcode("99");
+      resp.setRetmsg("系统错误");
+    }
+    if(custlist==null){
+      custlist=new ArrayList<>();
+    }
+    resp.setRetcode("0");
+    resp.setRetmsg("OK");
+    resp.setData(custlist);
+    return resp;
+  }
+  @RequestMapping(value = "/visitorcheck", method = {RequestMethod.POST})
+  @ResponseBody
+  public BaseResp visitorcheck(@RequestBody VisitorCheckBean postData) {
+    BaseResp resp = new BaseResp();
+
+    SystemDateTime dt = systemUtilService.getSysdatetime();
+    try{
+      String time = DateUtil.getNow("yyyyMMddhhmmss");
+      EVisitorCheckDtl eVisitorCheckDtl=new EVisitorCheckDtl();
+      eVisitorCheckDtl.setCompany(postData.getCompany());
+      eVisitorCheckDtl.setCustid(postData.getCustid());
+      eVisitorCheckDtl.setDeptcode(postData.getDeptcode());
+      eVisitorCheckDtl.setPhone(postData.getPhone());
+      eVisitorCheckDtl.setRemarks(postData.getRemarks());
+      eVisitorCheckDtl.setVisitorname(postData.getVisitorname());
+      eVisitorCheckDtl.setTransdate(time.substring(0,8));
+      eVisitorCheckDtl.setStatus(1);
+      eVisitorCheckDtl.setIdno(postData.getIdno());
+      eVisitorCheckDtl.setSex(postData.getSex());
+      eVisitorCheckDtl.setTranstime(time.substring(8));
+
+      boolean b = visitormanageService.saveVisitorCheck(eVisitorCheckDtl);
+      if(b){
+        resp.setRetcode("0");
+        resp.setRetmsg("保存成功");
+      }else {
+        resp.setRetcode("99");
+        resp.setRetmsg("保存失败");
+
+      }
+    }catch (Exception e){
+      e.printStackTrace();
+      resp.setRetcode("99");
+      resp.setRetmsg("系统错误");
+    }
+    return resp;
+  }
+}
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 d4f440a..92179ac 100644
--- a/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
+++ b/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
@@ -9,15 +9,16 @@
 import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
 import com.supwisdom.dlpay.ncmgr.service.NcService;
 import com.supwisdom.dlpay.util.RedisUtil;
+import com.supwisdom.dlpay.visitormanage.domain.EVisitorCheckDtl;
+import com.supwisdom.dlpay.visitormanage.domain.VisitorCheckBean;
+import com.supwisdom.dlpay.visitormanage.service.VisitormanageService;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -39,20 +40,31 @@
     private NcService ncService;
     @Autowired
     private VisitorConfig visitorConfig;
+    @Autowired
+    private VisitormanageService visitormanageService;
     private String wechatURL, redirect, appid, appsecret;
+
     @RequestMapping("/appindex")
-    public String impdevindex(@RequestParam(value = "userid")String userId,Model model){
+    public String impdevindex(@RequestParam(value = "userid") String userId, Model model) {
         model.addAttribute("userId", userId);
         return "apph5/remoteH5";
     }
+
     @RequestMapping("/doorappindex")
-    public String doorappindex(@RequestParam(value = "custid")String custid,Model model){
+    public String doorappindex(@RequestParam(value = "custid") String custid, Model model) {
         model.addAttribute("userId", custid);
         return "apph5/doorappindex";
     }
+    @RequestMapping("/doorappvisitor")
+    public String doorappvisitor(@RequestParam(value = "custid") String custid, Model model) {
+
+        model.addAttribute("custid", custid);
+        model.addAttribute("deptcode", 0);
+        return "apph5/applyforvisitor";
+    }
 
     @RequestMapping("/qrcodevisitor")
-    public String qrcodevisitor(@RequestParam(value = "inoutflag")String inoutflag,HttpServletRequest request, HttpServletResponse response,Model model){
+    public String qrcodevisitor(@RequestParam(value = "inoutflag") String inoutflag, HttpServletRequest request, HttpServletResponse response, Model model) {
         String code = request.getParameter("code");
         String state = request.getParameter("state");
         getWechatConfig();
@@ -64,10 +76,10 @@
         if (!StringUtils.isEmpty(state) && state.contains("login")) {
             needinfor = true;
         }
-        int issuccess=0;
+        int issuccess = 0;
         String appid = visitorConfig.getAppid();
         String appsecret = visitorConfig.getSecret();
-        String redirect=visitorConfig.getRedirect();
+        String redirect = visitorConfig.getRedirect();
         logger.error("appid=" + appid);
         logger.error("appsecret=" + appsecret);
         logger.error("redirect=" + redirect);
@@ -77,8 +89,8 @@
 
         if (resp != null) {
             logger.error("openid=" + resp.getOpenid());
-            if(resp.getOpenid()==null){
-                issuccess=1;
+            if (resp.getOpenid() == null) {
+                issuccess = 1;
             }
             session.setAttribute("wx_openid", resp.getOpenid());
             if (!StringUtils.isEmpty(resp.getWxid())) {
@@ -87,41 +99,55 @@
 
             }
         }
-        session.setAttribute("openmsg",resp);
-        session.setAttribute("inoutflag",inoutflag);
+        session.setAttribute("openmsg", resp);
+        session.setAttribute("inoutflag", inoutflag);
         model.addAttribute("issuccess", issuccess);
-        if(issuccess==1){
+        if (issuccess == 1) {
             return "apph5/attention";
         }
+        //WechatResp openmsg = new WechatResp();
+        //openmsg.setCity("上海");
+        boolean b = appService.saveOpenmsg(resp, Integer.parseInt(inoutflag));
+        model.addAttribute("issuccess", b);
+        if (b) {
 
-        return "apph5/appvisitor";
+            model.addAttribute("msg", "欢迎");
+        } else {
+            model.addAttribute("msg", "您还未关注公众号，请先关注");
+
+        }
+        return "apph5/visitorresult";
+
     }
+
     @RequestMapping("/qrcodemanage")
-    public String qrcodemanage(Model model){
-        String qrcode="";
+    public String qrcodemanage(Model model) {
+        String qrcode = "";
         String appid = visitorConfig.getAppid();
-        qrcode="1";
+        qrcode = "1";
         model.addAttribute("qrcode", qrcode);
         return "apph5/getinoutflag";
     }
+
     @RequestMapping("/appvisitor")
-    public String appvisitor(Model model){
+    public String appvisitor(Model model) {
 
         return "apph5/applyforvisitor";
     }
+
     @RequestMapping("/getqrcode")
-    public String getcode(@RequestParam(value = "inoutflag")String inoutflag,Model model){
-        String qrcode="";
+    public String getcode(@RequestParam(value = "inoutflag") String inoutflag, Model model) {
+        String qrcode = "";
         String appid = visitorConfig.getAppid();
         String redirect = visitorConfig.getRedirect();
         //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";
-        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=STATE#wechat_redirect";
+        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=STATE#wechat_redirect";
         model.addAttribute("qrcode", qrcode);
         return "apph5/visitorcode";
     }
 
     @RequestMapping("/getvisitor")
-    public String getvistorin(HttpServletRequest request, Model model){
+    public String getvistorin(HttpServletRequest request, Model model) {
         HttpSession session = request.getSession();
         WechatResp openmsg = (WechatResp) session.getAttribute("openmsg");
         logger.error("openid=" + openmsg);
@@ -130,12 +156,12 @@
         //WechatResp openmsg = new WechatResp();
         //openmsg.setCity("上海");
         boolean b = appService.saveOpenmsg(openmsg, Integer.parseInt(inoutflag));
-        model.addAttribute("issuccess",b );
-        if(b){
+        model.addAttribute("issuccess", b);
+        if (b) {
 
-            model.addAttribute("msg","欢迎" );
-        }else {
-            model.addAttribute("msg","您还未关注公众号，请先关注" );
+            model.addAttribute("msg", "欢迎");
+        } else {
+            model.addAttribute("msg", "您还未关注公众号，请先关注");
 
         }
         return "apph5/visitorresult";
@@ -146,10 +172,11 @@
         //Map<String, String> map = payMethodService.getPaymethodConfigMap("wechat_ykt");
         appid = visitorConfig.getAppid();
         appsecret = visitorConfig.getSecret();
-        redirect=visitorConfig.getRedirect();
+        redirect = visitorConfig.getRedirect();
     }
+
     @RequestMapping("/appMintUIindex")
-    public String appMintUIindex(@RequestParam(value = "userid")String userId,Model model){
+    public String appMintUIindex(@RequestParam(value = "userid") String userId, Model model) {
         model.addAttribute("userId", userId);
         return "apph5/remoteMintUIH5";
     }
@@ -157,27 +184,64 @@
     //根据用户使用次数加载用户有权限开门的设备---常使用设备优先的排序原则
     @ResponseBody
     @RequestMapping("/loadAppDevList")
-    public Map loadAppDevList(@RequestParam(value = "userId",required = true,defaultValue = "")String userId){
+    public Map loadAppDevList(@RequestParam(value = "userId", required = true, defaultValue = "") String userId) {
         Map map = new HashMap();
-        try{
+        try {
             List<TNcDevice> devList = appService.findAllDevByUserId(userId);
             map.put("devList", devList);
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
         return map;
     }
 
+    @ResponseBody
+    @RequestMapping(value = "/apply", method = {RequestMethod.POST})
+    public Map applyforvisitor(@RequestBody VisitorCheckBean postData) {
+        Map map = new HashMap();
+
+
+        try {
+            String time = DateUtil.getNow("yyyyMMddhhmmss");
+            EVisitorCheckDtl eVisitorCheckDtl = new EVisitorCheckDtl();
+            eVisitorCheckDtl.setCompany(postData.getCompany());
+            eVisitorCheckDtl.setCustid(postData.getCustid());
+            eVisitorCheckDtl.setDeptcode(postData.getDeptcode());
+            eVisitorCheckDtl.setPhone(postData.getPhone());
+            eVisitorCheckDtl.setRemarks(postData.getRemarks());
+            eVisitorCheckDtl.setVisitorname(postData.getVisitorname());
+            eVisitorCheckDtl.setTransdate(time.substring(0, 8));
+            eVisitorCheckDtl.setStatus(1);
+            eVisitorCheckDtl.setIdno(postData.getIdno());
+            eVisitorCheckDtl.setSex(postData.getSex());
+            eVisitorCheckDtl.setTranstime(time.substring(8));
+
+            boolean b = visitormanageService.saveVisitorCheck(eVisitorCheckDtl);
+            if(b){
+                map.put("errStr", "");
+            }else {
+                map.put("errStr", "保存失败");
+
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            map.put("errStr", "保存失败!");
+        }
+
+        return map;
+    }
+
+
     //根据设备名称模糊查询
     @ResponseBody
     @RequestMapping("/searchByDevName")
-    public Map searchByDevName(@RequestParam(value = "userId",required = true,defaultValue = "")String userId,
-                               @RequestParam(value = "devName",required = true,defaultValue = "")String devName ){
+    public Map searchByDevName(@RequestParam(value = "userId", required = true, defaultValue = "") String userId,
+                               @RequestParam(value = "devName", required = true, defaultValue = "") String devName) {
         Map map = new HashMap();
-        try{
-            List<TNcDevice> devList = appService.findAllDevByUserIdAndDevName(userId,devName);
+        try {
+            List<TNcDevice> devList = appService.findAllDevByUserIdAndDevName(userId, devName);
             map.put("devNameList", devList);
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
         return map;
@@ -197,26 +261,27 @@
 
     /**
      * App远程开门
+     *
      * @param devId
      * @return
      */
     @ResponseBody
     @RequestMapping("/openDoorById")
-    public Map openDoorById(@RequestParam(value = "devId",required = true,defaultValue = "")String devId,
-                            @RequestParam(value = "userId",required = true,defaultValue = "")String userId){
+    public Map openDoorById(@RequestParam(value = "devId", required = true, defaultValue = "") String devId,
+                            @RequestParam(value = "userId", required = true, defaultValue = "") String userId) {
         Map map = new HashMap();
         String message = "";
         try {
             String ctrlcode = "1"; //---开门code   1指 开一次门
             TNcDevice ncDevice = ncService.getDevInfoByDevid(Integer.parseInt(devId));
-            if (ncDevice!=null && "C".equals(ncDevice.getDevtype())){
+            if (ncDevice != null && "C".equals(ncDevice.getDevtype())) {
                 message = "请选择要开门的门锁!";
                 map.put("message", message);
                 return map;
             }
             int devNo = ncDevice.getDevno();
-            String rmtDev = RedisUtil.get("remote_"+ncDevice.getDevphyid());
-            if ("-5".equals(rmtDev)){ //数据库连接池异常 返回数据为 -5
+            String rmtDev = RedisUtil.get("remote_" + ncDevice.getDevphyid());
+            if ("-5".equals(rmtDev)) { //数据库连接池异常 返回数据为 -5
                 message = "缓存数据异常，请联系管理员!";
                 map.put("message", message);
                 return map;
@@ -224,10 +289,10 @@
 
             if (StringUtil.isEmpty(rmtDev)) {
                 rmtDev = "----------------";
-            }else {
+            } else {
                 boolean flag = judgeRemoteStr(rmtDev, devNo, ctrlcode);
-                if (flag){
-                    message="门已被开!";
+                if (flag) {
+                    message = "门已被开!";
                     map.put("message", message);
                     return map;
                 }
@@ -237,17 +302,17 @@
             RedisUtil.set("remote_" + ncDevice.getDevphyid(), tmpVal);
             //每次开门成功记录 此用户开门设备 次数  以便查询时根据经常使用设备进行 查询
             boolean a = appService.recordFre(userId, Integer.parseInt(devId));
-            if (a=false){
-                message="记录开门次数失败!";
+            if (a = false) {
+                message = "记录开门次数失败!";
             }
 
             //存储流水
             boolean b = appService.saveAppTDoorDtlByUserIdAndDevId(devId, userId);
-            if (b=false){
-                message=message+"流水存储失败!";
+            if (b = false) {
+                message = message + "流水存储失败!";
             }
 
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             message = "手机开门失败!";
         }
@@ -255,9 +320,9 @@
         return map;
     }
 
-    private boolean judgeRemoteStr(String rmtDev,int devNo,String ctrlCode){
-        String rmtStr = rmtDev.substring(devNo-1, devNo);
-        if (rmtStr.equals(ctrlCode)){
+    private boolean judgeRemoteStr(String rmtDev, int devNo, String ctrlCode) {
+        String rmtStr = rmtDev.substring(devNo - 1, devNo);
+        if (rmtStr.equals(ctrlCode)) {
             return true;
         }
         return false;
diff --git a/src/main/java/com/supwisdom/dlpay/app/domain/EWechatAccount.java b/src/main/java/com/supwisdom/dlpay/app/domain/EWechatAccount.java
index b2980df..33d4d63 100644
--- a/src/main/java/com/supwisdom/dlpay/app/domain/EWechatAccount.java
+++ b/src/main/java/com/supwisdom/dlpay/app/domain/EWechatAccount.java
@@ -12,6 +12,7 @@
 @Table(name = "E_WECHAT_ACCOUNT")
 public class EWechatAccount implements Serializable {
 
+    private Integer id;
     private String wxid;
     private String userid;
     private Double appkey;
@@ -28,10 +29,18 @@
     private String privilege;
     private String unionid;
     private String cardcode;
-
     @Id
-    @Column(name = "WXID", unique = true,  nullable = false, length = 32)
+    @Column(name = "ID", unique = true,  nullable = false, length = 32)
     @GeneratedValue(strategy = GenerationType.AUTO)
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    @Column(name = "WXID",  length = 32)
     public String getWxid() {
         return wxid;
     }
diff --git a/src/main/java/com/supwisdom/dlpay/app/service/impl/AppServiceImpl.java b/src/main/java/com/supwisdom/dlpay/app/service/impl/AppServiceImpl.java
index b8aa93c..1cc093b 100644
--- a/src/main/java/com/supwisdom/dlpay/app/service/impl/AppServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/app/service/impl/AppServiceImpl.java
@@ -223,6 +223,7 @@
         eVisitorDtl.setCountry(openmsg.getCountry());
         eVisitorDtl.setHeadimgurl(openmsg.getHeadimgurl());
         eVisitorDtl.setUnionid(openmsg.getUnionid());
+        eVisitorDtl.setStatus(1);
         eVisitorDtl.setTransdate(DateUtil.getNow().substring(0,8));
         eVisitorDtl.setTranstime(DateUtil.getNow().substring(8));
         boolean b = appDao.saveVisitor(eVisitorDtl);
diff --git a/src/main/java/com/supwisdom/dlpay/conference/api/controller/ConerenceApiController.java b/src/main/java/com/supwisdom/dlpay/conference/api/controller/ConerenceApiController.java
index 7d655e4..d443871 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/api/controller/ConerenceApiController.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/api/controller/ConerenceApiController.java
@@ -137,7 +137,7 @@
         Integer confid = req.getConfid();
         String timestamp = req.getTimestamp();
         String devphyid = req.getDevphyid();
-        if (null == confid || StringUtil.isEmpty(timestamp) || StringUtil.isEmpty(devphyid)) {
+        /*if (null == confid || StringUtil.isEmpty(timestamp) || StringUtil.isEmpty(devphyid)) {
             mov.addObject("msg", "签到失败");
             mov.addObject("errorMsg", "参数传递错误");
             mov.setViewName("apph5/confresult");
@@ -171,7 +171,7 @@
             mov.addObject("errorMsg", "时间误差过大");
             mov.setViewName("apph5/confresult");
             return mov;
-        }
+        }*/
 
         if(StringUtil.isEmpty(userid)){
             mov.addObject("confid",confid);
@@ -186,7 +186,7 @@
             return mov;
         }
 
-        String atttime = DateUtil.getNow("HHmm");
+        /*String atttime = DateUtil.getNow("HHmm");
 
         int compareAttend = DateUtil.compareDatetime(atttime, conference.getAttendtime(), "HHmm");
         int compareStart = DateUtil.compareDatetime(atttime, conference.getStarttime(), "HHmm");
@@ -248,7 +248,7 @@
 
         mov.addObject("msg", "签到成功");
         mov.addObject("remarkTitle", "会议概要");
-        mov.addObject("remark", conference.getRemark());
+        mov.addObject("remark", conference.getRemark());*/
         mov.setViewName("apph5/confresult");
         return mov;
     }
diff --git a/src/main/java/com/supwisdom/dlpay/visitormanage/domain/EVisitorCheckDtl.java b/src/main/java/com/supwisdom/dlpay/visitormanage/domain/EVisitorCheckDtl.java
index c40e224..3125c7a 100644
--- a/src/main/java/com/supwisdom/dlpay/visitormanage/domain/EVisitorCheckDtl.java
+++ b/src/main/java/com/supwisdom/dlpay/visitormanage/domain/EVisitorCheckDtl.java
@@ -33,6 +33,16 @@
     //备注
     private String remarks;
 
+    private String isqrcode;
+    private String qrcodetime;
+    private String lastopentime;
+
+    private Integer totalcount;
+
+    private Integer usecount;
+
+    private String qrcode;
+
 
 
 
@@ -142,4 +152,65 @@
     public void setRemarks(String remarks) {
         this.remarks = remarks;
     }
+    @Column(name = "ISQRCODE", length = 1)
+
+    public String getIsqrcode() {
+        return isqrcode;
+    }
+
+    public void setIsqrcode(String isqrcode) {
+        this.isqrcode = isqrcode;
+    }
+    @Column(name = "QRCODETIME", length = 14)
+
+    public String getQrcodetime() {
+        return qrcodetime;
+    }
+
+    public void setQrcodetime(String qrcodetime) {
+        this.qrcodetime = qrcodetime;
+    }
+    @Column(name = "LASTOPENTIME", length = 14)
+
+    public String getLastopentime() {
+        return lastopentime;
+    }
+
+    public void setLastopentime(String lastopentime) {
+        this.lastopentime = lastopentime;
+    }
+    @Column(name = "TOTALCOUNT", length = 1)
+
+    public Integer getTotalcount() {
+        return totalcount;
+    }
+
+    public void setTotalcount(Integer totalcount) {
+        this.totalcount = totalcount;
+    }
+
+
+
+
+
+
+
+    @Column(name = "QRCODE", length = 255)
+
+    public String getQrcode() {
+        return qrcode;
+    }
+
+    public void setQrcode(String qrcode) {
+        this.qrcode = qrcode;
+    }
+    @Column(name = "USECOUNT", length = 1)
+
+    public Integer getUsecount() {
+        return usecount;
+    }
+
+    public void setUsecount(Integer usecount) {
+        this.usecount = usecount;
+    }
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/security.kt b/src/main/kotlin/com/supwisdom/dlpay/security.kt
index c264b71..65bcb2c 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -123,6 +123,7 @@
                         .antMatcher("/api/**")
                         .authorizeRequests()
                         .antMatchers("/api/auth/**").permitAll()
+                        .antMatchers("/api/doorapi/**").permitAll()
                         .antMatchers("/api/conference/**").permitAll()
                         .antMatchers("/api/notify/**").permitAll()
                         .antMatchers("/api/common/**").hasAnyRole("THIRD_COMMON", "THIRD_ADMIN")
diff --git a/src/main/resources/templates/apph5/applyforvisitor.html b/src/main/resources/templates/apph5/applyforvisitor.html
index b4513c4..aba7390 100644
--- a/src/main/resources/templates/apph5/applyforvisitor.html
+++ b/src/main/resources/templates/apph5/applyforvisitor.html
@@ -27,69 +27,64 @@
 <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="text" class="el-input" id="visitorname"></td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <el-label class="label-fade-enter">访问人身份证号</el-label>
-                            <input type="text" class="el-input" id="idno">
-                        </td>
+    <div class="page-title" style="text-align:center; font-size: 24px;color: #FF8247;margin-top:7%">请登记访客信息</div><br>
 
-                    </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-form ref="tempform" :model="tempform" :rules="rules" size="mini" label-width="36%" style="margin-top:7%">
+        <el-form-item label="访客姓名:" prop="custname">
+            <div class="el-col el-col-18">
+                <div class="el-input" style="width: 187px;">
+                    <el-input v-model="tempform.custname">
+                    </el-input>
+                </div>
+            </div>
+        </el-form-item><el-form-item label="访客性别:" prop="sex">
+            <div class="el-col el-col-18">
+                <div class="el-input" style="width: 187px;">
+                    <el-select v-model="tempform.sex" id="sex" >
+                        <el-option
+                                v-for="status in sexlist"
+                                :key="status.value"
+                                :label="status.label"
+                                :value="status.value">
+                        </el-option>
+                    </el-select>
+                </div>
+            </div>
+        </el-form-item><el-form-item label="访客身份证号:" prop="idno">
+            <div class="el-col el-col-18">
+                <div class="el-input" style="width: 187px;">
+                    <el-input v-model="tempform.idno">
+                    </el-input>
+                </div>
+            </div>
+        </el-form-item><el-form-item label="访客联系方式:" prop="phone">
+            <div class="el-col el-col-18">
+                <div class="el-input" style="width: 187px;">
+                    <el-input v-model="tempform.phone">
+                    </el-input>
+                </div>
+            </div>
+        </el-form-item>
+        <el-form-item label="访客单位:" prop="company">
+            <div class="el-col el-col-18">
+                <div class="el-input" style="width: 187px;">
+                    <el-input v-model="tempform.company">
+                    </el-input>
+                </div>
+            </div>
+        </el-form-item>
+        <el-form-item label="备注:" prop="remarks">
+            <div class="el-col el-col-18">
+                <div class="el-input" style="width: 187px;">
+                    <el-input v-model="tempform.remarks">
+                    </el-input>
+                </div>
+            </div>
+        </el-form-item>
 
-
-
-        </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>
+    </el-form>
+    <div slot="footer" style="text-align:center; ">
+        <el-button type="primary" @click="saveTemp('tempform')">登 记</el-button>
     </div>
 
 </div>
@@ -97,19 +92,22 @@
 </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: '',
-            // 图片父容器高度
-            bannerHeight: 1000,
-            // 浏览器宽度
-            screenWidth: 0,
-            userId: '',
-            searchDoorForm: {
+            dialogFormVisible: true,
+            confName: '1234',
+            tempform: {
                 visitorname: '',
                 idno: '',
                 time: '',
@@ -120,9 +118,46 @@
                 company: '',
                 remarks: '',
             },
+            sexlist:[],
+            bannerHeight: 1000,
+            screenWidth: 0,
+            userId: '',
+            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;
+                var vali = false;
+                this.$refs[formName].validate(
+                    function (valid) {
+                        if (valid) {
+                            vali = true;
+                        } else {
+                            vali = false;
+                        }
+                    });
+                if (vali == true) {
+                    saveTempCustomer(_that, _that.tempform, formName);
+                }
+            },
+
             indexChange: function (pre, next) {
                 var _self = this;
                 var devIdListTmp = _self.devIdList;
@@ -130,10 +165,6 @@
                 // console.log(_self.selectDevId)
 
             },
-            openDoor: function () {
-                var devId = app_vue.selectDevId;
-                app_openDoor(devId);
-            },
             setSize: function () {
                 // 通过浏览器宽度(图片宽度)计算高度
                 this.bannerHeight = this.screenWidth;
@@ -144,29 +175,67 @@
             // 首次加载时,需要调用一次
             _self.screenWidth = window.innerWidth;
             _self.setSize();
-
-            var userId = '[[${userId}]]';
-            _self.userId = userId;
-
+            var confid = '[[${confid}]]';
+            var deptcode = '[[${deptcode}]]';
+            console.log(confid);
+            console.log(deptcode);
+            _self.tempform.custid = confid;
+            _self.tempform.deptcode = deptcode;
+            var sexl = [];
+            sexl.push({
+                value: '',
+                label: '请选择'
+            });
+            sexl.push({
+                value: '1',
+                label: '男'
+            });
+            sexl.push({
+                value: '2',
+                label: '女'
+            });
+            _self.sexlist = sexl;
 
         }
-
     })
 
-    function app_openDoor(devId) {
-
-        layer.confirm('你确定要登记吗?', {icon: 3, title: '请确认', offset: '30%'}, function (index) {
-            window.location.href = "[[@{/app/getvisitor}]]"
-        });
-
-    }
-
     // 窗口大小发生改变时,调用一次
     window.onresize = function () {
         app_vue.screenWidth = window.innerWidth;
         app_vue.setSize();
     }
 
+    function saveTempCustomer(_that, formdata, formName) {
+        $.ajax({
+            type: "post",
+            url: encodeURI("[[@{/app/apply}]]"),
+            dataType: "json",
+            contentType: "application/json",
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json'
+            },
+            data: JSON.stringify(formdata),
+            success: function (data) {
+
+                if (data.errcode != "0") {
+                    layer.msg(data.errStr, {icon: 2, time: 2000});
+                } else {
+                    layer.msg('登记成功!', {icon: 1, time: 1000});
+                }
+            }
+        });
+    }
+
+
+    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/applyforvisitorcode.html b/src/main/resources/templates/apph5/applyforvisitorcode.html
new file mode 100644
index 0000000..60edccd
--- /dev/null
+++ b/src/main/resources/templates/apph5/applyforvisitorcode.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+
+<head>
+    <title>首页</title>
+    <!--<meta name="_csrf_header" th:content="${_csrf.headerName}" />
+    <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}" />-->
+    <meta charset="utf-8"/>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="/static/libs/layui/css/layui.css" th:href="@{/static/libs/layui/css/layui.css}"/>
+
+    <link rel="stylesheet" href="/static/res/assets/plugins/element-ui/theme-default/index.css"
+          th:href="@{/static/res/assets/plugins/element-ui/theme-default/index.css}"/>
+    <link rel="stylesheet" href="/static/res/assets/css/wxpage.css"
+          th:href="@{/static/res/assets/css/wxpage.css}"/>
+
+    <!--<script type="text/javascript" th:src="@{/static/libs/jquery/jquery-3.2.1.min.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.min.js}"></script>
+    <!--<script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.form.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/layer/layer.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/js/vue.min.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/js/qrcode.min.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/element-ui/index.js}"></script>
+
+
+</head>
+
+<script type="text/javascript">
+    setInterval(function () {
+        window.location.reload();
+    }, 60000);
+
+    $(function () {
+
+
+        var qcode = $("#myText").val();
+        if (undefined != qcode && null != qcode && "" != qcode) {
+            var qrcode = new QRCode(document.getElementById("qrcode"), {
+                render : "canvas",
+                text: qcode,
+                width: 220,
+                height: 220,
+                colorDark: "#000000",
+                colorLight: "#ffffff",
+                correctLevel: QRCode.CorrectLevel.H
+            });
+        }
+        var inoutflag = $("#inoutflag").val();
+
+        if (inoutflag == 1) {
+            $("#title").text("进门登记码")
+        } else {
+            $("#title").text("出门登记码")
+
+        }
+
+    });
+</script>
+<style>
+    body {
+        background-color: #ffffff;
+    }
+
+</style>
+</html>
+<body class="page" style="text-align: center">
+<div class="topbar">
+    <p id="title" class="el-message-box__title" style="text-align: center"></p>
+    <a href="javascript:window.location.reload();"><span class="refresh"></span></a>
+</div>
+
+<div style="text-align: center;padding: 30px;">
+    <input type="hidden" id="myText" th:value="${qrcode}"/>
+    <input type="hidden" id="inoutflag" th:value="${inoutflag}"/>
+</div>
+<div id="qrcode" class="qrcode-cc" ></div>
+<p style="text-align: center;margin-top:40px;color:#999;font-size: 14px">请将二维码对准扫描设备完成登记(如您使用扫一扫功能，请重新扫码)</p>
+<a href="javascript:window.location.reload();" class="weui-btn weui-btn_primary btn-bg"
+   style="align-content: center;margin: 20px">手动刷新二维码</a>
+
+</body>
+</style>
\ No newline at end of file
diff --git a/src/main/resources/templates/apph5/askforleave.html b/src/main/resources/templates/apph5/askforleave.html
new file mode 100644
index 0000000..f55715c
--- /dev/null
+++ b/src/main/resources/templates/apph5/askforleave.html
@@ -0,0 +1,267 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+
+<head>
+    <title>首页</title>
+    <!--<meta name="_csrf_header" th:content="${_csrf.headerName}" />
+    <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}" />-->
+    <meta charset="utf-8"/>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="/static/libs/layui/css/layui.css" th:href="@{/static/libs/layui/css/layui.css}"/>
+
+    <link rel="stylesheet" href="/static/res/assets/plugins/element-ui/theme-default/index.css"
+          th:href="@{/static/res/assets/plugins/element-ui/theme-default/index.css}"/>
+
+    <!--<script type="text/javascript" th:src="@{/static/libs/jquery/jquery-3.2.1.min.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.min.js}"></script>
+    <!--<script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.form.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/layer/layer.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/js/vue.min.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/element-ui/index.js}"></script>
+
+
+</head>
+
+<body>
+
+<div id="app">
+    <div class="page-title" style="text-align:center; font-size: 24px;color: #FF8247;margin-top:7%">请登记访客信息</div>
+    <br>
+
+    <el-form ref="tempform" :model="tempform" :rules="rules" size="mini" label-width="36%" style="margin-top:7%">
+        <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="startdate">
+            <div class="el-col el-col-18">
+                <div class="el-input" style="width: 187px;">
+                    <el-date-picker type="date" v-model="tempform.startdate" id="time"
+                                    :picker-options="pickerOptions0" :editable="false"
+                                    value-format="yyyyMMdd"
+                                    style="width:100%;"></el-date-picker>
+                </div>
+            </div>
+        </el-form-item>
+        <el-form-item label="结束时间:" prop="enddate">
+            <div class="el-col el-col-18">
+                <div class="el-input" style="width: 187px;">
+                    <el-date-picker type="date" v-model="tempform.enddate" id="time"
+                                    :picker-options="pickerOptions0" :editable="false"
+                                    value-format="yyyyMMdd"
+                                    style="width:100%;"></el-date-picker>
+                </div>
+            </div>
+        </el-form-item>
+
+
+        <el-form-item label="备注:" prop="remark">
+            <div class="el-col el-col-18">
+                <div class="el-input" style="width: 187px;">
+                    <el-input v-model="tempform.remark">
+                    </el-input>
+                </div>
+            </div>
+        </el-form-item>
+
+    </el-form>
+    <div slot="footer" style="text-align:center; ">
+        <el-button type="primary" @click="saveTemp('tempform')">申 请</el-button>
+    </div>
+
+</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: {
+            dialogFormVisible: true,
+            confName: '1234',
+            tempform: {
+                rtype: '',
+
+                startdate: '',
+                enddate: '',
+
+                custid: '',
+
+                remark: '',
+            },
+            rtypelist: [],
+            bannerHeight: 1000,
+            screenWidth: 0,
+            userId: '',
+            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;
+                var vali = false;
+                this.$refs[formName].validate(
+                    function (valid) {
+                        if (valid) {
+                            vali = true;
+                        } else {
+                            vali = false;
+                        }
+                    });
+                if (vali == true) {
+                    saveTempCustomer(_that, _that.tempform, formName);
+                }
+            },
+
+            indexChange: function (pre, next) {
+                var _self = this;
+                var devIdListTmp = _self.devIdList;
+                _self.selectDevId = devIdListTmp[pre];
+                // console.log(_self.selectDevId)
+
+            },
+            setSize: function () {
+                // 通过浏览器宽度(图片宽度)计算高度
+                this.bannerHeight = this.screenWidth;
+            },
+        },
+        created: function () {
+            var _self = this;
+            // 首次加载时,需要调用一次
+            _self.screenWidth = window.innerWidth;
+            _self.setSize();
+            var confid = '[[${confid}]]';
+            console.log(confid);
+            _self.tempform.custid = confid;
+            var sexl = [];
+            sexl.push({
+                value: '',
+                label: '请选择'
+            });
+            sexl.push({
+                value: '11',
+                label: '事假'
+            });sexl.push({
+                value: '12',
+                label: '病假'
+            });sexl.push({
+                value: '13',
+                label: '年假'
+            });sexl.push({
+                value: '14',
+                label: '调休'
+            });
+            sexl.push({
+                value: '15',
+                label: '其他'
+            });
+            _self.rtypelist = sexl;
+
+        }
+    })
+
+    // 窗口大小发生改变时,调用一次
+    window.onresize = function () {
+        app_vue.screenWidth = window.innerWidth;
+        app_vue.setSize();
+    }
+
+    function saveTempCustomer(_that, formdata, formName) {
+        $.ajax({
+            type: "post",
+            url: encodeURI("[[@{/app/apply}]]"),
+            dataType: "json",
+            contentType: "application/json",
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json'
+            },
+            data: JSON.stringify(formdata),
+            success: function (data) {
+
+                if (data.errcode != "0") {
+                    layer.msg(data.errStr, {icon: 2, time: 2000});
+                } else {
+                    layer.msg('登记成功!', {icon: 1, time: 1000});
+                }
+            }
+        });
+    }
+
+
+    function isCellPhone(val) {
+        if (!/^1(3|4|5|6|7|8)\d{9}$/.test(val)) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+
+</script>
+
+<style>
+
+    .el-carousel__item h3 {
+        color: #ff3366;
+        font-size: 14px;
+        opacity: 0.75;
+        line-height: 300px;
+        margin: 0;
+        /*background-color:#66cccc;
+        border: 0px solid #e5e5e5;
+        width: 50%;
+        left: 10%;
+        height: 100%;*/
+    }
+
+    .el-carousel__item:nth-child(2n) {
+        background-color: #ffffff;
+    }
+
+    .el-carousel__item:nth-child(2n+1) {
+        background-color: #ffffff;
+    }
+
+    .el-carousel__item .Carousel {
+        border-bottom: 1px solid #f1f4f8;
+    }
+</style>
\ No newline at end of file
diff --git a/src/main/resources/templates/apph5/doorappindex.html b/src/main/resources/templates/apph5/doorappindex.html
new file mode 100644
index 0000000..2f067b3
--- /dev/null
+++ b/src/main/resources/templates/apph5/doorappindex.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+
+<head>
+    <title>首页</title>
+    <!--<meta name="_csrf_header" th:content="${_csrf.headerName}" />
+    <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}" />-->
+    <meta charset="utf-8"/>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="/static/libs/layui/css/layui.css" th:href="@{/static/libs/layui/css/layui.css}"/>
+
+    <link rel="stylesheet" href="/static/res/assets/plugins/element-ui/theme-default/index.css"
+          th:href="@{/static/res/assets/plugins/element-ui/theme-default/index.css}"/>
+
+    <!--<script type="text/javascript" th:src="@{/static/libs/jquery/jquery-3.2.1.min.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.min.js}"></script>
+    <!--<script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.form.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/layer/layer.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/js/vue.min.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/element-ui/index.js}"></script>
+
+
+</head>
+
+<body>
+
+<div id="app">
+    <div class="block" style="background:#ffffff;">
+        <br>
+        <span class="demonstration"
+              style="text-align: center;display:block; font-size: 20px;color: #9932CC">更多功能</span><br><br>
+        <!--动态将图片轮播图的容器高度设置成与图片一致-->
+        <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>
+        <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>
+
+</body>
+
+<script>
+    var app_vue = new Vue({
+        el: '#app',
+        data: {
+            devNameList: [],
+            devIdList: [],
+            selectDevName: '',
+            selectDevId: '',
+            // 图片父容器高度
+            bannerHeight: 1000,
+            // 浏览器宽度
+            screenWidth: 0,
+            userId: ''
+        },
+
+        methods: {
+            indexChange: function (pre, next) {
+                var _self = this;
+                var devIdListTmp = _self.devIdList;
+                _self.selectDevId = devIdListTmp[pre];
+                // console.log(_self.selectDevId)
+
+            },
+            openDoor: function () {
+                var devId = app_vue.selectDevId;
+                app_openDoor(devId);
+            },
+            setSize: function () {
+                // 通过浏览器宽度(图片宽度)计算高度
+                this.bannerHeight = this.screenWidth;
+            },
+        },
+        created: function () {
+            var _self = this;
+            // 首次加载时,需要调用一次
+            _self.screenWidth = window.innerWidth;
+            _self.setSize();
+
+            var userId = '[[${userId}]]';
+            _self.userId = userId;
+
+
+        }
+
+    })
+
+    function app_openDoor(devId) {
+        var userId = app_vue.userId;
+        console.log(userId);
+        layer.confirm('你确定要开启此门吗?', {icon: 3, title: '请确认', offset: '30%'}, function (index) {
+            $.ajax({
+                type: "get",
+                dataType: "json",
+                url: encodeURI("[[@{/app/openDoorById?devId=}]]" + devId + "&userId=" + userId),
+                success: function (ret) {
+                    if (ret.message == undefined) {
+                        layer.msg('用户认证已过期，请重新登录', {icon: 2, time: 1000});
+                        window.location = "[[@{/login}]]";
+                        return;
+                    }
+                    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();
+    }
+
+
+</script>
+
+<style>
+
+    .el-carousel__item h3 {
+        color: #ff3366;
+        font-size: 14px;
+        opacity: 0.75;
+        line-height: 300px;
+        margin: 0;
+        /*background-color:#66cccc;
+        border: 0px solid #e5e5e5;
+        width: 50%;
+        left: 10%;
+        height: 100%;*/
+    }
+
+    .el-carousel__item:nth-child(2n) {
+        background-color: #ffffff;
+    }
+
+    .el-carousel__item:nth-child(2n+1) {
+        background-color: #ffffff;
+    }
+
+    .el-carousel__item .Carousel {
+        border-bottom: 1px solid #f1f4f8;
+    }
+</style>
\ No newline at end of file
diff --git a/src/main/resources/templates/apph5/history.html b/src/main/resources/templates/apph5/history.html
new file mode 100644
index 0000000..053c769
--- /dev/null
+++ b/src/main/resources/templates/apph5/history.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+
+<head>
+    <title>首页</title>
+    <!--<meta name="_csrf_header" th:content="${_csrf.headerName}" />
+    <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}" />-->
+    <meta charset="utf-8"/>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="/static/libs/layui/css/layui.css" th:href="@{/static/libs/layui/css/layui.css}"/>
+
+    <link rel="stylesheet" href="/static/res/assets/plugins/element-ui/theme-default/index.css"
+          th:href="@{/static/res/assets/plugins/element-ui/theme-default/index.css}"/>
+    <link rel="stylesheet" href="/static/res/assets/css/wxpage.css"
+          th:href="@{/static/res/assets/css/wxpage.css}"/>
+
+    <!--<script type="text/javascript" th:src="@{/static/libs/jquery/jquery-3.2.1.min.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.min.js}"></script>
+    <!--<script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.form.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/layer/layer.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/js/vue.min.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/js/qrcode.min.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/element-ui/index.js}"></script>
+
+
+</head>
+
+<script type="text/javascript">
+    setInterval(function () {
+        window.location.reload();
+    }, 60000);
+
+    $(function () {
+
+
+        /*var qcode = $("#myText").val();
+        if (undefined != qcode && null != qcode && "" != qcode) {
+            var qrcode = new QRCode(document.getElementById("qrcode"), {
+                render : "canvas",
+                text: qcode,
+                width: 220,
+                height: 220,
+                colorDark: "#000000",
+                colorLight: "#ffffff",
+                correctLevel: QRCode.CorrectLevel.H
+            });
+        }
+        var inoutflag = $("#inoutflag").val();
+
+        if (inoutflag == 1) {
+            $("#title").text("进门登记码")
+        } else {
+            $("#title").text("出门登记码")
+
+        }*/
+
+    });
+</script>
+<style>
+    body {
+        background-color: #ffffff;
+    }
+
+</style>
+</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>
+
+    <input type="hidden" id="ocnt">
+</div>
+
+</body>
+</style>
\ No newline at end of file
diff --git a/src/main/resources/templates/apph5/leavehistory.html b/src/main/resources/templates/apph5/leavehistory.html
new file mode 100644
index 0000000..d1beb9b
--- /dev/null
+++ b/src/main/resources/templates/apph5/leavehistory.html
@@ -0,0 +1,279 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+
+<head>
+    <title>首页</title>
+    <!--<meta name="_csrf_header" th:content="${_csrf.headerName}" />
+    <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}" />-->
+    <meta charset="utf-8"/>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="/static/libs/layui/css/layui.css" th:href="@{/static/libs/layui/css/layui.css}"/>
+
+    <link rel="stylesheet" href="/static/res/assets/plugins/element-ui/theme-default/index.css"
+          th:href="@{/static/res/assets/plugins/element-ui/theme-default/index.css}"/>
+
+    <!--<script type="text/javascript" th:src="@{/static/libs/jquery/jquery-3.2.1.min.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.min.js}"></script>
+    <!--<script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.form.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/layer/layer.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/js/vue.min.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/element-ui/index.js}"></script>
+
+
+</head>
+
+<body>
+
+<div id="app">
+    <div class="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>
+
+
+
+        </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>
+
+</body>
+
+<script>
+    var app_vue = new Vue({
+        el: '#app',
+        data: {
+            devNameList: [],
+            devIdList: [],
+            selectDevName: '',
+            selectDevId: '',
+            // 图片父容器高度
+            bannerHeight: 1000,
+            // 浏览器宽度
+            screenWidth: 0,
+            userId: '',
+            searchDoorForm: {
+                visitorname: '',
+                idno: '',
+                time: '',
+                phone: '',
+                sex: '',
+                custid: '',
+                deptcode: '',
+                company: '',
+                remarks: '',
+            },
+        },
+
+        methods: {
+            indexChange: function (pre, next) {
+                var _self = this;
+                var devIdListTmp = _self.devIdList;
+                _self.selectDevId = devIdListTmp[pre];
+                // console.log(_self.selectDevId)
+
+            },
+            openDoor: function () {
+                app_openDoor();
+            },
+            setSize: function () {
+                // 通过浏览器宽度(图片宽度)计算高度
+                this.bannerHeight = this.screenWidth;
+            },
+        },
+        created: function () {
+            var _self = this;
+            // 首次加载时,需要调用一次
+            _self.screenWidth = window.innerWidth;
+            _self.setSize();
+
+            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();
+    }
+
+
+</script>
+
+<style>
+
+    .el-carousel__item h3 {
+        color: #ff3366;
+        font-size: 14px;
+        opacity: 0.75;
+        line-height: 300px;
+        margin: 0;
+        /*background-color:#66cccc;
+        border: 0px solid #e5e5e5;
+        width: 50%;
+        left: 10%;
+        height: 100%;*/
+    }
+
+    .el-carousel__item:nth-child(2n) {
+        background-color: #ffffff;
+    }
+
+    .el-carousel__item:nth-child(2n+1) {
+        background-color: #ffffff;
+    }
+
+    .el-carousel__item .Carousel {
+        border-bottom: 1px solid #f1f4f8;
+    }
+</style>
\ No newline at end of file
diff --git a/src/main/resources/templates/apph5/visitor.html b/src/main/resources/templates/apph5/visitor.html
new file mode 100644
index 0000000..9cb48d3
--- /dev/null
+++ b/src/main/resources/templates/apph5/visitor.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+
+<head>
+    <title>首页</title>
+    <!--<meta name="_csrf_header" th:content="${_csrf.headerName}" />
+    <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}" />-->
+    <meta charset="utf-8"/>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="/static/libs/layui/css/layui.css" th:href="@{/static/libs/layui/css/layui.css}"/>
+
+    <link rel="stylesheet" href="/static/res/assets/plugins/element-ui/theme-default/index.css"
+          th:href="@{/static/res/assets/plugins/element-ui/theme-default/index.css}"/>
+    <link rel="stylesheet" href="/static/res/assets/css/wxpage.css"
+          th:href="@{/static/res/assets/css/wxpage.css}"/>
+
+    <!--<script type="text/javascript" th:src="@{/static/libs/jquery/jquery-3.2.1.min.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.min.js}"></script>
+    <!--<script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.form.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/layer/layer.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/js/vue.min.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/js/qrcode.min.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/element-ui/index.js}"></script>
+
+
+</head>
+
+<script type="text/javascript">
+
+
+    $(function () {
+
+
+       /* var qcode = $("#myText").val();
+        if (undefined != qcode && null != qcode && "" != qcode) {
+            var qrcode = new QRCode(document.getElementById("qrcode"), {
+                render : "canvas",
+                text: qcode,
+                width: 220,
+                height: 220,
+                colorDark: "#000000",
+                colorLight: "#ffffff",
+                correctLevel: QRCode.CorrectLevel.H
+            });
+        }
+        var inoutflag = $("#inoutflag").val();
+
+        if (inoutflag == 1) {
+            $("#title").text("进门登记码")
+        } else {
+            $("#title").text("出门登记码")
+
+        }*/
+
+    });
+    function sub() {
+        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) {
+            alert("请输入访客联系方式");
+            return;
+        }
+        if (sex == null || sex.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: "POST",
+                url: encodeURI("[[@{/app/apply}]]"),
+                dataType: "json",
+                data: $('#applyforvisitorform').serialize(),
+                success: function (data) {
+                    if (data.errStr != "") {
+                        layer.msg(data.errStr, {icon: 2, time: 1000});
+                    } else {
+                        layer.msg('保存信息成功!', {icon: 1, time: 1000});
+
+                    }
+                }
+            })
+
+        });
+
+    }
+
+
+</script>
+<style>
+    body {
+        background-color: #ffffff;
+    }
+
+</style>
+</html>
+<body class="page" style="text-align: center">
+<div class="topbar">
+    <p id="title" class="el-message-box__title" style="text-align: center">访客申请</p>
+    <a href="javascript:window.location.reload();"><span class="refresh"></span></a>
+</div>
+
+<div style="text-align: center;padding: 30px;">
+
+</div>
+<div id="form"  >
+    <form id="applyforvisitorform" style="text-align: center" action="#" name="applyforvisitorform">
+
+        <table  style="text-align: center">
+            <tr>
+                <td width="50%">
+                    <label class="">访问人姓名</label></td>
+                <td width="50%">
+                    <input type="text"  id="visitorname"></td>
+            </tr>
+            <tr>
+                <td width="50%">
+                    <label class="label">访问人身份证号</label></td>
+                <td>
+                    <input type="text"  id="idno">
+                </td>
+
+            </tr>
+            <tr>
+                <td>
+                    <label class="label-fade-enter">访问人性别</label></td>
+                <td>
+                    <select id="sex" name="sex">
+                        <option name="0">请选择</option>
+                        <option name="1">男</option>
+                        <option name="2">女</option>
+                    </select>
+                </td>
+            </tr>
+            <tr>
+                <td>
+                    <label class="label-fade-enter">访问人联系方式</label></td>
+                <td>
+                    <input type="text" class="layui-icon-cellphone" id="phone">
+                </td>
+            </tr>
+            <tr>
+                <td>
+                    <label class="label-fade-enter">访问人单位</label></td>
+                <td>
+                    <input type="text"  id="company">
+                </td>
+            </tr>
+
+            <tr>
+                <td><label class="label-fade-enter">备注</label></td>
+                <td>
+                    <input type="text"id="remarks"></td>
+            </tr>
+        </table>
+        <input type="hidden" id="deptcode" th:value="${deptcode}">
+        <input type="hidden" id="custid" th:value="${custid}">
+    </form>
+</div>
+<a href="javascript:sub();" class="weui-btn weui-btn_primary btn-bg"
+   style="align-content: center;margin: 20px">提交</a>
+
+</body>
+</style>
\ No newline at end of file
diff --git a/src/main/resources/templates/visitormanage/customer/visitorchecklist.html b/src/main/resources/templates/visitormanage/customer/visitorchecklist.html
index 48c1ddb..192d23b 100644
--- a/src/main/resources/templates/visitormanage/customer/visitorchecklist.html
+++ b/src/main/resources/templates/visitormanage/customer/visitorchecklist.html
@@ -72,8 +72,10 @@
                         templet: function (item) {
                             if(item.sex==1){
                                 return "男"
-                            }else {
+                            }else if(item.sex==2){
                                 return "女"
+                            }else {
+                                return "未知"
                             }
                         }
                     },
