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 3eabbbe..d120120 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
@@ -132,6 +132,8 @@
     @ResponseBody
     public ModelAndView doAttend(@ModelAttribute ConfAttendReq req) {
         ModelAndView mov = new ModelAndView();
+        mov.setViewName("apph5/confresult");
+        mov.addObject("filename", "conffail.jpg");
         String userid = req.getUserid();
         Integer confid = req.getConfid();
         String timestamp = req.getTimestamp();
@@ -139,7 +141,7 @@
         if (null == confid || StringUtil.isEmpty(timestamp) || StringUtil.isEmpty(devphyid)) {
             mov.addObject("msg", "签到失败");
             mov.addObject("errorMsg", "参数传递错误");
-            mov.setViewName("apph5/confresult");
+            mov.addObject("filename", "conffail.jpg");
             return mov;
         }
 
@@ -148,16 +150,14 @@
         if (null == conference) {
             mov.addObject("msg", "签到失败");
             mov.addObject("errorMsg", "会议不存在");
-            mov.setViewName("apph5/confresult");
             return mov;
+
         }
 
         TNcDevice device = conferenceService.getBindedDevice(confid);
         if (null == device) {
             mov.addObject("msg", "签到失败");
             mov.addObject("errorMsg", "请在会议绑定的设备上打卡");
-
-            mov.setViewName("apph5/confresult");
             return mov;
         }
 
@@ -168,12 +168,11 @@
         if (DateUtil.compareDatetime(timestamp, downcheck) < 0 || DateUtil.compareDatetime(timestamp, upcheck) > 0) {
             mov.addObject("msg", "签到失败");
             mov.addObject("errorMsg", "时间误差过大");
-            mov.setViewName("apph5/confresult");
             return mov;
         }
 
         if(StringUtil.isEmpty(userid)){
-            mov.addObject("confid",confid);
+            mov.addObject("confid",1);
             mov.setViewName("apph5/tempattend");
             return mov;
         }
@@ -181,7 +180,6 @@
         if (null == customer) {
             mov.addObject("msg", "签到失败");
             mov.addObject("errorMsg", "客户不存在");
-            mov.setViewName("apph5/confresult");
             return mov;
         }
 
@@ -193,7 +191,6 @@
         if (-1 == compareAttend) {
             mov.addObject("msg", "签到失败");
             mov.addObject("errorMsg", "会议签到时间尚未开始，请在签到时间之后再打卡");
-            mov.setViewName("apph5/confresult");
             return mov;
         }
         String attstatus;
@@ -208,7 +205,6 @@
             if (null != opeople) {
                 mov.addObject("msg", "签到失败");
                 mov.addObject("errorMsg", "请勿重复签到");
-                mov.setViewName("apph5/confresult");
                 return mov;
             }
 
@@ -228,13 +224,12 @@
             if (null == people) {
                 mov.addObject("msg", "签到失败");
                 mov.addObject("errorMsg", "打卡人员不在会议名单中");
-                mov.setViewName("apph5/confresult");
                 return mov;
             }
             if (ConferenceConstant.ATTENDSTATUS_CHECKED.equals(people.getAttstatus())) {
                 mov.addObject("msg", "签到失败");
                 mov.addObject("errorMsg", "请勿重复签到");
-                mov.setViewName("apph5/confresult");
+
                 return mov;
             }
 
@@ -247,8 +242,8 @@
 
         mov.addObject("msg", "签到成功");
         mov.addObject("remarkTitle", "会议概要");
+        mov.addObject("filename", "confsuccess.jpg");
         mov.addObject("remark", conference.getRemark());
-        mov.setViewName("apph5/confresult");
         return mov;
     }
 
@@ -257,7 +252,7 @@
     public Map saveTempCustomer(@RequestBody TempCustomerBean postData) {
         Map map = new HashMap();
         TConference conference=conferenceService.getConferenceById(postData.getConfid());
-        if(null==conference.getConfid()){
+        if(null==conference){
             map.put("errcode","500");
             map.put("errStr","会议不存在");
             return  map;
@@ -324,4 +319,18 @@
         resp.setRetcode(0);
         return resp;
     }
+
+    @RequestMapping(value = "/visitorresult")
+    @ResponseBody
+    public ModelAndView visitorresult(@RequestParam(value = "confid") Integer confid ) {
+        TConference conference=conferenceService.getConferenceById(confid);
+
+        ModelAndView mov = new ModelAndView();
+        mov.setViewName("apph5/confresult");
+        mov.addObject("remarkTitle", "会议概要");
+        mov.addObject("filename", "confsuccess.jpg");
+      //  mov.addObject("remark", conference.getRemark());
+        mov.addObject("remark", "123456789789");
+        return mov;
+    }
 }
diff --git a/src/main/resources/static/res/images/conffail.jpg b/src/main/resources/static/res/images/conffail.jpg
new file mode 100644
index 0000000..23477cf
--- /dev/null
+++ b/src/main/resources/static/res/images/conffail.jpg
Binary files differ
diff --git a/src/main/resources/static/res/images/confsuccess.jpg b/src/main/resources/static/res/images/confsuccess.jpg
new file mode 100644
index 0000000..2946425
--- /dev/null
+++ b/src/main/resources/static/res/images/confsuccess.jpg
Binary files differ
diff --git a/src/main/resources/templates/apph5/confresult.html b/src/main/resources/templates/apph5/confresult.html
index fcebbd1..5c90095 100644
--- a/src/main/resources/templates/apph5/confresult.html
+++ b/src/main/resources/templates/apph5/confresult.html
@@ -21,12 +21,13 @@
     <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>
-    <div   style="text-align:center;" th:text="${msg}"></div>
-    <div   style="text-align:center;"  id="errmsg" th:text="${errorMsg}"></div>
+<div style="background-size: contain|cover;width: 100%;height: auto;position: absolute;z-index:-1">
+    <img th:src="@{/static/res/images/{filename}(filename=${filename})}" style="text-align: center;width: 100%;height: 100%"/>
 
-    <div style="text-align:center;margin-top:80px;font-size: 20px;color: #ff7148" th:text="${remarkTitle}"></div>
+</div>
+<div id="app" style="position: absolute;width: 100%;top: 70%">
+    <div   style="text-align:center;"  id="errmsg" th:text="${errorMsg}"></div>
+    <div style="text-align:center;font-size: 20px;color: #ff7148" th:text="${remarkTitle}"></div>
     <div   style="text-align:center;" th:text="${remark}"></div>
 </div>
 </body>
diff --git a/src/main/resources/templates/apph5/tempattend.html b/src/main/resources/templates/apph5/tempattend.html
index 066743d..df3105f 100644
--- a/src/main/resources/templates/apph5/tempattend.html
+++ b/src/main/resources/templates/apph5/tempattend.html
@@ -150,6 +150,7 @@
     }
 
     function saveTempCustomer(_that, formdata, formName) {
+
         $.ajax({
             type: "post",
             url: encodeURI("[[@{/api/conference/savetempcust}]]"),
@@ -161,11 +162,10 @@
             },
             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});
+                    window.location.href="[[@{/api/conference/visitorresult}]]"+"?confid="+ formdata.confid;
                 }
             }
         });
