diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index efb17aa..af555b9 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -39,4 +39,5 @@
 
 visitor.appid=wx063b94046a147a77
 visitor.secret=702d663e7685d0adc0a83673701c8878
+visitor.redirect=https%3a%2f%2fyy.dlsmk.cn%2fdoor
 
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 e02521b..8cd346f 100644
--- a/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
+++ b/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
@@ -73,6 +73,9 @@
         session.setAttribute("openmsg",resp);
         session.setAttribute("inoutflag",inoutflag);
         model.addAttribute("issuccess", issuccess);
+        if(issuccess==1){
+            return "apph5/attention";
+        }
         return "apph5/appvisitor";
     }
     @RequestMapping("/qrcodemanage")
@@ -87,29 +90,22 @@
     public String getcode(@RequestParam(value = "inoutflag")String inoutflag,Model model){
         String qrcode="";
         String appid = visitorConfig.getAppid();
-        qrcode="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appid+"&redirect_uri=192.168.1.117%2Fdoor%2Fapp%2Fqrcodevisitor%3finoutflag%3d"+inoutflag+"&response_type=code&scope=snsapi_userinfo&state=&connect_redirect=1#wechat_redirect";
+        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";
         model.addAttribute("qrcode", qrcode);
         return "apph5/visitorcode";
     }
-    @ResponseBody
-    @RequestMapping("/getvistor")
-    public Map getvistorin(HttpServletRequest request, Model model){
+
+    @RequestMapping("/getvisitor")
+    public String getvistorin(HttpServletRequest request, Model model){
         HttpSession session = request.getSession();
         WechatResp openmsg = (WechatResp) session.getAttribute("openmsg");
         int inoutflag = (int) session.getAttribute("inoutflag");
         //WechatResp openmsg = new WechatResp();
         //openmsg.setCity("上海");
         boolean b = appService.saveOpenmsg(openmsg, inoutflag);
-        Map map=new HashMap();
-
-        if(b){
-            map.put("retcode",0);
-            map.put("retmsg","成功");
-        }else {
-            map.put("retcode",99);
-            map.put("retmsg","失败");
-        }
-        return map;
+        model.addAttribute("issuccess",b );
+        return "apph5/visitorresult";
     }
 
 
@@ -117,6 +113,7 @@
         //Map<String, String> map = payMethodService.getPaymethodConfigMap("wechat_ykt");
         appid = visitorConfig.getAppid();
         appsecret = visitorConfig.getSecret();
+        redirect=visitorConfig.getRedirect();
     }
     @RequestMapping("/appMintUIindex")
     public String appMintUIindex(@RequestParam(value = "userid")String userId,Model model){
diff --git a/src/main/java/com/supwisdom/dlpay/app/domain/VisitorConfig.java b/src/main/java/com/supwisdom/dlpay/app/domain/VisitorConfig.java
index 46ea6f1..3cc191c 100644
--- a/src/main/java/com/supwisdom/dlpay/app/domain/VisitorConfig.java
+++ b/src/main/java/com/supwisdom/dlpay/app/domain/VisitorConfig.java
@@ -9,6 +9,8 @@
   private String appid;
   @Value("${visitor.secret}")
   private String secret;
+  @Value("${visitor.redirect}")
+  private String redirect;
 
   public String getAppid() {
     return appid;
@@ -17,4 +19,8 @@
   public String getSecret() {
     return secret;
   }
+
+  public String getRedirect() {
+    return redirect;
+  }
 }
diff --git a/src/main/resources/templates/apph5/appvisitor.html b/src/main/resources/templates/apph5/appvisitor.html
index 94bc82e..3b6d0cb 100644
--- a/src/main/resources/templates/apph5/appvisitor.html
+++ b/src/main/resources/templates/apph5/appvisitor.html
@@ -87,16 +87,7 @@
     function app_openDoor(devId) {
 
         layer.confirm('你确定要登记吗?',{icon: 3,title: '请确认',offset: '30%'},function (index) {
-            $.ajax({
-                type: "get",
-                dataType: "json",
-                url:encodeURI("[[@{/app/getvistor}]]"),
-                success:function (ret) {
-                    if(ret.retcode==1){
-                        alert(ret.retmsg);
-                    }
-                }
-            })
+            window.location.href="[[@{/app/getvisitor}]]"
         });
 
     }
diff --git a/src/main/resources/templates/apph5/attention.html b/src/main/resources/templates/apph5/attention.html
new file mode 100644
index 0000000..d77d369
--- /dev/null
+++ b/src/main/resources/templates/apph5/attention.html
@@ -0,0 +1,64 @@
+<!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.href="https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzA5ODEyNTk3Ng==&scene=124#wechat_redirect"
+    }, 60000);
+
+    $(function () {
+        var inoutflag = $("#issuccess").val();
+        if (inoutflag == 1) {
+            $("#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="issuccess" th:value="${issuccess}"/>
+</div>
+<p style="text-align: center;margin-top:40px;color:#999;font-size: 14px">请关注公众号后再进行登记,稍后将自动跳转至公众号</p>
+<a href="https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzA5ODEyNTk3Ng==&scene=124#wechat_redirect" 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/visitorresult.html b/src/main/resources/templates/apph5/visitorresult.html
index 14447fc..221e492 100644
--- a/src/main/resources/templates/apph5/visitorresult.html
+++ b/src/main/resources/templates/apph5/visitorresult.html
@@ -31,8 +31,8 @@
 
 <script>
     $(function () {
-
-        if(inoutflag==1){
+        var flag=$("#issuccess").val();
+        if(flag){
             $("#msg").html("<p class='mintui-success'>登记成功</p>")
         }else {
             $("#msg").html("<p class='mintui-success'>登记失败</p>")
@@ -49,10 +49,10 @@
         },
         methods: {
             openDoor:function (devId) {
-                mint_openDoor(devId);
+                //mint_openDoor(devId);
             },
             loadListData:function (devName) {
-                mint_searchByDevName(devName);
+                //mint_searchByDevName(devName);
             },
 
         },
@@ -60,103 +60,24 @@
             devName:function(newvs,oldvs){
 
                 if(!newvs){
-                    mint_searchByDevName('');
+                    //mint_searchByDevName('');
                 }
             }
         },
-        created:function(){
+        created:function() {
             var _self = this;
 
-            var userId='[[${userId}]]';
+            var userId = '[[${userId}]]';
             _self.userId = userId;
 
 
-            $.ajax({
-                type: "get",
-                dataType: "json",
-                url: "[[@{/app/loadAppDevList?userId=}]]"+userId,
-                success: function (ret) {
-                    var ut = ret.devList;
-                    if (ut == null){
-                        confirm("不具有开门权限");
-                        return;
-                    }
-                    var devs = [];
-                    var names = [];
-                    var ids = [];
-                    for (var i = 0; i < ut.length; i++) {
-                        devs.push({
-                            label:ut[i].devname,
-                            value:ut[i].deviceid,
-                            building:ut[i].buildingname
-                        });
-                        names.push(ut[i].devname);
-                        ids.push(ut[i].deviceid);
-                    }
-                    _self.devList = devs;
-
-
-                }
-            })
         }
-
-
     })
 
 
-    function mint_openDoor(devId) {
-        var userId = mint_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});
-                    }
-                }
-            })
-        });
 
-    }
 
-    function mint_searchByDevName(devName) {
-        var userId = mint_vue.userId;
-        $.ajax({
-            type: "get",
-            dataType: "json",
-            url: "[[@{/app/searchByDevName?userId=}]]"+userId+"&devName="+devName,
-            success: function (ret) {
-                var ut = ret.devNameList;
-                if (ut == null) {
-                    confirm("没有对应设备！");
-                    return;
-                }
-                var devs = [];
-                var names = [];
-                var ids = [];
-                for (var i = 0; i < ut.length; i++) {
-                    devs.push({
-                        label: ut[i].devname,
-                        value: ut[i].deviceid,
-                        building: ut[i].buildingname
-                    });
-                    names.push(ut[i].devname);
-                    ids.push(ut[i].deviceid);
-                }
-                mint_vue.devList = devs;
-            }
-        })
-    }
+
 </script>
 <style>
     .mint-search{
diff --git a/src/main/resources/templates/system/operator.html b/src/main/resources/templates/system/operator.html
index 157dca1..9e70c0d 100644
--- a/src/main/resources/templates/system/operator.html
+++ b/src/main/resources/templates/system/operator.html
@@ -8,7 +8,8 @@
     </div>
     <div class="layui-card-body">
         <div id="operatorapp">
-            <el-form :inline="true" ref="operatorform" :model="operatorform" data-parsley-validate class="form-horizontal form-label-left">
+            <el-form :inline="true" ref="operatorform" :model="operatorform" data-parsley-validate
+                     class="form-horizontal form-label-left">
 
                 <div class="col-md-4">
                     <div class="form-group">
@@ -130,11 +131,20 @@
                             label="操作"
                             width="179">
                         <template scope="scope">
-                            <button type="button" class="btn btn-info btn-xs" title="编辑操作员" @click="editOperator(scope.row.operid)" v-if="scope.row.opertype!='系统管理员'">编辑</button>
-                            <button type="button" class="btn btn-success btn-xs" title="重置密码" @click="resetPwd(scope.row.operid)" v-if="scope.row.opertype!='系统管理员'" >重置</button>
-                            <button type="button" class="btn btn-danger btn-xs" title="删除操作员" @click="delOperator(scope.row.operid)" v-if="scope.row.opertype!='系统管理员' && scope.row.opertype!='超级管理员' && scope.row.status=='有效'">删除</button>
+                            <button type="button" class="btn btn-info btn-xs" title="编辑操作员"
+                                    @click="editOperator(scope.row.operid)" v-if="scope.row.opertype!='系统管理员'">编辑
+                            </button>
+                            <button type="button" class="btn btn-success btn-xs" title="重置密码"
+                                    @click="resetPwd(scope.row.operid)" v-if="scope.row.opertype!='系统管理员'">重置
+                            </button>
+                            <button type="button" class="btn btn-danger btn-xs" title="删除操作员"
+                                    @click="delOperator(scope.row.operid)"
+                                    v-if="scope.row.opertype!='系统管理员' && scope.row.opertype!='超级管理员' && scope.row.status=='有效'">
+                                删除
+                            </button>
                             <button type="button" class="btn btn-info btn-xs" title="分配楼栋"
-                                    @click="allotBuilding(scope.row.operid,scope.row.opername)" v-if="scope.row.opertype=='楼栋管理员'">分配楼栋
+                                    @click="allotBuilding(scope.row.operid,scope.row.opername)"
+                                    v-if="scope.row.opertype=='楼栋管理员'">分配楼栋
                             </button>
                         </template>
                     </el-table-column>
@@ -151,13 +161,14 @@
                 </el-pagination>
             </template>
 
-            <el-dialog :title="operatortitile" :visible.sync="dialogFormVisible"  :modal-append-to-body='false' @close="closeDialog('operatorDiaForm')">
-                <el-form ref="operatorDiaForm" :model="operatorDiaForm" :rules="rules" label-width="36%" >
+            <el-dialog :title="operatortitile" :visible.sync="dialogFormVisible" :modal-append-to-body='false'
+                       @close="closeDialog('operatorDiaForm')">
+                <el-form ref="operatorDiaForm" :model="operatorDiaForm" :rules="rules" label-width="36%">
                     <el-form-item label="操作员编号:" prop="operid">
                         <div class="el-col el-col-15">
                             <div class="el-input" style="width: 187px;">
                                 <el-input v-model="operatorDiaForm.operid">
-                                    <i class="el-icon-edit el-input__icon" slot="icon" ></i>
+                                    <i class="el-icon-edit el-input__icon" slot="icon"></i>
                                 </el-input>
                             </div>
                         </div>
@@ -167,7 +178,7 @@
                         <div class="el-col el-col-18">
                             <div class="el-input" style="width: 187px;">
                                 <el-input v-model="operatorDiaForm.opercode">
-                                    <i class="el-icon-edit el-input__icon" slot="icon" ></i>
+                                    <i class="el-icon-edit el-input__icon" slot="icon"></i>
                                 </el-input>
                             </div>
                         </div>
@@ -177,7 +188,7 @@
                         <div class="el-col el-col-18">
                             <div class="el-input" style="width: 187px;">
                                 <el-input v-model="operatorDiaForm.opername">
-                                    <i class="el-icon-edit el-input__icon" slot="icon" ></i>
+                                    <i class="el-icon-edit el-input__icon" slot="icon"></i>
                                 </el-input>
                             </div>
                         </div>
@@ -228,30 +239,31 @@
                                         :label="regionid.label"
                                         :value="regionid.value">
                                 </el-option>
-                            </el-select>&nbsp(注:区域管理员类别必选)
+                            </el-select>
+                            &nbsp(注:区域管理员类别必选)
                         </el-col>
                     </el-form-item>
 
                     <el-form-item label="联系方式:" prop="mobile">
                         <el-col :span="18">
-                            <el-input v-model.number="operatorDiaForm.mobile"  style="width: 187px;" maxlength="11">
-                                <i class="el-icon-edit el-input__icon" slot="icon" ></i>
+                            <el-input v-model.number="operatorDiaForm.mobile" style="width: 187px;" maxlength="11">
+                                <i class="el-icon-edit el-input__icon" slot="icon"></i>
                             </el-input>
                         </el-col>
                     </el-form-item>
 
                     <el-form-item label="邮箱:" prop="email">
                         <el-col :span="18">
-                            <el-input v-model="operatorDiaForm.email"  style="width: 187px;" maxlength="60">
-                                <i class="el-icon-edit el-input__icon" slot="icon" ></i>
+                            <el-input v-model="operatorDiaForm.email" style="width: 187px;" maxlength="60">
+                                <i class="el-icon-edit el-input__icon" slot="icon"></i>
                             </el-input>
                         </el-col>
                     </el-form-item>
 
                     <el-form-item label="姓名:" prop="realname">
                         <el-col :span="18">
-                            <el-input v-model.number="operatorDiaForm.realname"  style="width: 187px;" maxlength="16">
-                                <i class="el-icon-edit el-input__icon" slot="icon" ></i>
+                            <el-input v-model.number="operatorDiaForm.realname" style="width: 187px;" maxlength="16">
+                                <i class="el-icon-edit el-input__icon" slot="icon"></i>
                             </el-input>
                         </el-col>
                     </el-form-item>
@@ -295,10 +307,11 @@
 
 
             <!--分配楼栋-->
-            <el-dialog :title="buildingTitle" :visible.sync="dlgAllotBuildingVisible" size="mini"top="80px" :modal-append-to-body='false' @close="closeOperBuildingDialog('operBuildingDiaform')">
-                <el-form ref="operBuildingDiaform" :model="operBuildingDiaform" :rules="rules" label-width="100px" >
+            <el-dialog :title="buildingTitle" :visible.sync="dlgAllotBuildingVisible" size="mini" top="80px"
+                       :modal-append-to-body='false' @close="closeOperBuildingDialog('operBuildingDiaform')">
+                <el-form ref="operBuildingDiaform" :model="operBuildingDiaform" :rules="rules" label-width="100px">
                     <el-form-item label="操作员:" prop="operid">
-                        <el-col  :span="24">
+                        <el-col :span="24">
                             <el-select v-model="operBuildingDiaform.operid">
                                 <el-option
                                         v-for="operid in operlist"
@@ -338,13 +351,13 @@
 <script>
     var oper_validateOpercode = function (rule, value, callback) {
         //console.log(value)
-            if (!value) {
-                return callback(new Error('请输入登录名'));
-            }
-            if (!(/^[0-9a-zA-Z]*$/.test(value))) {
-                callback(new Error('账号非法，请填入字母、数字或它们的组合'));
-            }
-            callback();
+        if (!value) {
+            return callback(new Error('请输入登录名'));
+        }
+        if (!(/^[0-9a-zA-Z]*$/.test(value))) {
+            callback(new Error('账号非法，请填入字母、数字或它们的组合'));
+        }
+        callback();
     };
     var oper_validateMobile = function (rule, value, callback) {
         if (null != value && value.length > 0 && !(/^1\d{10}$/.test(value))) {
@@ -360,65 +373,65 @@
     };
 
     var oper_vue = new Vue({
-        el:'#operatorapp',
-        data:{
-            tableData:[],
+        el: '#operatorapp',
+        data: {
+            tableData: [],
             currPage: 1,
-            pageSize:10,
-            totSize:0,
+            pageSize: 10,
+            totSize: 0,
             currentRow: null,
-            regionDis:true,
-            operatorform:{
-                operid:'',
-                realname:''
+            regionDis: true,
+            operatorform: {
+                operid: '',
+                realname: ''
             },
-            roles:[],
+            roles: [],
             dialogFormVisible: false,
-            regions:[],
-            opertypes:[],
-            companys:[],
-            depts:[],
-            operatorDiaForm:{
-                operid:'',
-                opercode:'',
-                opername:'',
-                opertype:'',
-                roleid:'',
-                regionid:'',
-                mobile:'',
-                email:'',
-                realname:'',
-                companyId:'',
-                deptcode:''
+            regions: [],
+            opertypes: [],
+            companys: [],
+            depts: [],
+            operatorDiaForm: {
+                operid: '',
+                opercode: '',
+                opername: '',
+                opertype: '',
+                roleid: '',
+                regionid: '',
+                mobile: '',
+                email: '',
+                realname: '',
+                companyId: '',
+                deptcode: ''
             },
-            buildingTitle:'',
-            dlgAllotBuildingVisible:false,
-            allotbuilding:[],
-            buildingList:[],
-            selectBuildingList:[],
+            buildingTitle: '',
+            dlgAllotBuildingVisible: false,
+            allotbuilding: [],
+            buildingList: [],
+            selectBuildingList: [],
             listStyle: {
                 width: '318px',
                 height: '400px'
             },
-            operBuildingDiaform:{
-                operid:'',
-                buildingids:[]
+            operBuildingDiaform: {
+                operid: '',
+                buildingids: []
             },
-            operlist:[],
+            operlist: [],
 
-            rules:{
-                operid:[
-                    {required:true,message:'请输入操作员编号',trigger:'blur'},
-                    { min: 1, max: 20, message: '长度在 1 到 32 个字符', trigger: 'blur' }
+            rules: {
+                operid: [
+                    {required: true, message: '请输入操作员编号', trigger: 'blur'},
+                    {min: 1, max: 20, message: '长度在 1 到 32 个字符', trigger: 'blur'}
                 ],
-                opercode:[
-                    {required:true,message:'请输入登陆名',trigger:'blur'},
-                    { min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' },
+                opercode: [
+                    {required: true, message: '请输入登陆名', trigger: 'blur'},
+                    {min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur'},
                     {validator: oper_validateOpercode, trigger: 'blur'}
                 ],
-                opername:[
-                    {required:true,message:'请输入操作员名称',trigger:'blur'},
-                    { min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' }
+                opername: [
+                    {required: true, message: '请输入操作员名称', trigger: 'blur'},
+                    {min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur'}
                 ],
                 opertype: [
                     {required: true, message: '请选择操作员类别', trigger: 'blur'}
@@ -426,10 +439,10 @@
                 roleid: [
                     {required: true, message: '请选择角色', trigger: 'blur'}
                 ],
-                mobile:[
+                mobile: [
                     {validator: oper_validateMobile, trigger: 'blur'}
                 ],
-                email:[
+                email: [
                     {validator: oper_validateEmail, trigger: 'blur'}
                 ],
                 companyId: [
@@ -437,42 +450,42 @@
                 ],
                 deptcode: [
                     {required: true, message: '请选择所属部门', trigger: 'blur'}
-        ]
+                ]
 
             },
-            operatortitile:'添加操作员(默认密码为123456)',
+            operatortitile: '添加操作员(默认密码为123456)',
         },
-        methods:{
-            handleSizeChange:function(val) {
-                this.pageSize=val;
-                oper_commonQuery(this,this.operatorform.operid,this.operatorform.realname,this.currPage,val);
+        methods: {
+            handleSizeChange: function (val) {
+                this.pageSize = val;
+                oper_commonQuery(this, this.operatorform.operid, this.operatorform.realname, this.currPage, val);
                 //console.log('每页条'+val);
             },
-            currPageChange:function(val) {
-                this.currPage=val;
-                oper_commonQuery(this,this.operatorform.operid,this.operatorform.realname,this.currPage,this.pageSize);
+            currPageChange: function (val) {
+                this.currPage = val;
+                oper_commonQuery(this, this.operatorform.operid, this.operatorform.realname, this.currPage, this.pageSize);
                 //console.log('当前页:'+val);
             },
-            currRowChange:function(val) {
+            currRowChange: function (val) {
                 this.currentRow = val;
             },
-            query:function(){
-                this.pagesize=10;
-                this.currPage=1;
-                oper_commonQuery(this,this.operatorform.operid,this.operatorform.realname,this.currPage,this.pageSize);
+            query: function () {
+                this.pagesize = 10;
+                this.currPage = 1;
+                oper_commonQuery(this, this.operatorform.operid, this.operatorform.realname, this.currPage, this.pageSize);
             },
-            addOperator:function () {
-                oper_getFillData(this,"-1");
+            addOperator: function () {
+                oper_getFillData(this, "-1");
                 this.dialogFormVisible = true;
-                this.operatortitile="添加操作员(默认密码为123456)"
+                this.operatortitile = "添加操作员(默认密码为123456)"
             },
-            delOperator:function(operid){
+            delOperator: function (operid) {
                 oper_deletedata(operid);
             },
-            editOperator:function(operid){
-                oper_getFillData(this,operid);
+            editOperator: function (operid) {
+                oper_getFillData(this, operid);
                 this.dialogFormVisible = true;
-                this.operatortitile="修改操作员(默认密码为123456)"
+                this.operatortitile = "修改操作员(默认密码为123456)"
             },
             resetForm: function (formName) {
                 this.$refs[formName].resetFields();
@@ -482,60 +495,60 @@
                 this.$refs[formName].resetFields();
                 this.dialogFormVisible = false;
             },
-            saveOperator:function (formName) {
-                var _that=this;
+            saveOperator: function (formName) {
+                var _that = this;
                 var vali = false;
                 this.$refs[formName].validate(
-                    function(valid){
-                        if (valid){
+                    function (valid) {
+                        if (valid) {
                             vali = true;
-                        }else{
-                            vali=false;
+                        } else {
+                            vali = false;
                         }
                     });
-                if (vali==true){
-                    oper_saveData(_that,_that.operatorDiaForm,formName);
+                if (vali == true) {
+                    oper_saveData(_that, _that.operatorDiaForm, formName);
                 }
             },
             opertypeChange: function (value) {
                 if (value == 'H') {
                     this.regionDis = false;
-                } else  {
+                } else {
                     this.regionDis = true;
                 }
             },
-            resetPwd:function (operid) {
+            resetPwd: function (operid) {
                 oper_resetpwd(operid);
             },
-            allotBuilding:function (operid,opername) {
-                this.buildingTitle="正在为["+opername+"]分配设备"
+            allotBuilding: function (operid, opername) {
+                this.buildingTitle = "正在为[" + opername + "]分配设备"
                 this.operlist.push({
                     value: operid,
                     label: opername
                 })
                 this.operBuildingDiaform.operid = operid
-                oper_getBuildingData(this,operid);
-                this.dlgAllotBuildingVisible=true;
+                oper_getBuildingData(this, operid);
+                this.dlgAllotBuildingVisible = true;
 
             },
-            buildingChange:function (newTargetKeys) {
-                this.selectBuildingList=newTargetKeys;
+            buildingChange: function (newTargetKeys) {
+                this.selectBuildingList = newTargetKeys;
             },
-            cancelBuildingOper:function () {
-                this.allotbuilding=[];
-                this.buildingList=[];
-                this.operlist=[];
-                this.dlgAllotBuildingVisible=false;
+            cancelBuildingOper: function () {
+                this.allotbuilding = [];
+                this.buildingList = [];
+                this.operlist = [];
+                this.dlgAllotBuildingVisible = false;
             },
-            closeOperBuildingDialog:function () {
-                this.allotbuilding=[];
-                this.buildingList=[];
-                this.operlist=[];
-                this.dlgAllotBuildingVisible=false;
+            closeOperBuildingDialog: function () {
+                this.allotbuilding = [];
+                this.buildingList = [];
+                this.operlist = [];
+                this.dlgAllotBuildingVisible = false;
             },
-            saveBuildingOper:function () {
+            saveBuildingOper: function () {
                 var _that = this;
-                var token=$("meta[name='_csrf_token']").attr("value");
+                var token = $("meta[name='_csrf_token']").attr("value");
                 var operid = this.operBuildingDiaform.operid;
                 $.ajax({
                     type: "POST",
@@ -545,45 +558,45 @@
                     headers: {
                         'Accept': 'application/json',
                         'Content-Type': 'application/json',
-                        'X-CSRF-TOKEN':token,
+                        'X-CSRF-TOKEN': token,
                     },
                     data: JSON.stringify(_that.allotbuilding),
                     success: function (data) {
-                        if (data.okFlag==1){
-                            _that.dlgAllotBuildingVisible=false;
-                            layer.msg(data.result, {icon: 1,time:2000});
-                            _that.selectBuildingList=[];
-                        }else{
-                            layer.msg(data.result, {icon: 2,time:2000});
+                        if (data.okFlag == 1) {
+                            _that.dlgAllotBuildingVisible = false;
+                            layer.msg(data.result, {icon: 1, time: 2000});
+                            _that.selectBuildingList = [];
+                        } else {
+                            layer.msg(data.result, {icon: 2, time: 2000});
                         }
                     }
                 });
             }
         },
-        created:function(){
-            var _self=this;
+        created: function () {
+            var _self = this;
             $.ajax({
-                type:"get",
-                dataType:"json",
-                url:encodeURI("[[@{/operator/loadOperatorList}]]"),
-                success:function(ret){
+                type: "get",
+                dataType: "json",
+                url: encodeURI("[[@{/operator/loadOperatorList}]]"),
+                success: function (ret) {
                     //console.log(ret);
-                    _self.totSize=ret.PageResult.totalCount;
-                    _self.tableData=ret.PageResult.list;
+                    _self.totSize = ret.PageResult.totalCount;
+                    _self.tableData = ret.PageResult.list;
                 }
             })
         }
     })
 
-    function oper_refreshThisTable(){
-        oper_commonQuery(oper_vue,oper_vue.operatorform.operid,oper_vue.operatorform.realname,oper_vue.currPage,oper_vue.pageSize);
+    function oper_refreshThisTable() {
+        oper_commonQuery(oper_vue, oper_vue.operatorform.operid, oper_vue.operatorform.realname, oper_vue.currPage, oper_vue.pageSize);
     };
 
-    function oper_commonQuery(_self,operid,realname,pageno,pagesize){
+    function oper_commonQuery(_self, operid, realname, pageno, pagesize) {
         $.ajax({
             type: "get",
             dataType: "json",
-            url: encodeURI("[[@{/operator/loadOperatorList?operid=}]]"+operid+"&realname=" + realname + "&pageNo=" + pageno + "&pageSize=" + pagesize),
+            url: encodeURI("[[@{/operator/loadOperatorList?operid=}]]" + operid + "&realname=" + realname + "&pageNo=" + pageno + "&pageSize=" + pagesize),
             success: function (ret) {
                 _self.totSize = ret.PageResult.totalCount;
                 _self.tableData = ret.PageResult.list;
@@ -594,16 +607,16 @@
         })
     }
 
-    function oper_deletedata(operid){
-        layer.confirm('是否删除该操作员', {icon: 3, title:'请确认',offset:'30%'},function(index){
+    function oper_deletedata(operid) {
+        layer.confirm('是否删除该操作员', {icon: 3, title: '请确认', offset: '30%'}, function (index) {
             $.ajax({
-                type:"get",
-                dataType:"json",
-                url:"[[@{/operator/deleteOperator?operid=}]]"+operid,
-                success:function(ret){
-                    if(ret.message == undefined){
-                        layer.msg('用户认证已过期，请重新登录', {icon:2,time:1000});
-                        window.location="login";
+                type: "get",
+                dataType: "json",
+                url: "[[@{/operator/deleteOperator?operid=}]]" + operid,
+                success: function (ret) {
+                    if (ret.message == undefined) {
+                        layer.msg('用户认证已过期，请重新登录', {icon: 2, time: 1000});
+                        window.location = "login";
                         return;
                     }
                     if (ret.message != "") {
@@ -653,20 +666,20 @@
 
                 var rolelist = [];
                 var roles = ret.roles;
-                for (var j=0;j<roles.length;j++){
+                for (var j = 0; j < roles.length; j++) {
                     rolelist.push({
-                        value:roles[j]["roleId"],
-                        label:roles[j]["roleName"]
+                        value: roles[j]["roleId"],
+                        label: roles[j]["roleName"]
                     });
                 }
                 _self.roles = rolelist;
 
                 var regionlist = [];
                 var regions = ret.regions;
-                for (var z=0;z<regions.length;z++){
+                for (var z = 0; z < regions.length; z++) {
                     regionlist.push({
-                        value:regions[z]["regionid"],
-                        label:regions[z]["regionname"]
+                        value: regions[z]["regionid"],
+                        label: regions[z]["regionname"]
                     });
                 }
                 _self.regions = regionlist;
@@ -674,24 +687,24 @@
 
                 var companylist = [];
                 var companys = ret.companys;
-                for (var k=0;k<companys.length;k++){
+                for (var k = 0; k < companys.length; k++) {
                     companylist.push({
-                        value:companys[k]["companyId"],
-                        label:companys[k]["companyName"]
+                        value: companys[k]["companyId"],
+                        label: companys[k]["companyName"]
                     });
                 }
                 _self.companys = companylist;
 
-                var deptlist=[];
+                var deptlist = [];
                 var depts = ret.depts;
                 deptlist.push({
-                    value:"0",
-                    label:"全部"
+                    value: "0",
+                    label: "全部"
                 });
-                for (var k=0;k<depts.length;k++){
+                for (var k = 0; k < depts.length; k++) {
                     deptlist.push({
-                        value:depts[k]["deptcode"],
-                        label:depts[k]["deptname"]
+                        value: depts[k]["deptcode"],
+                        label: depts[k]["deptname"]
                     });
                 }
 
@@ -702,20 +715,19 @@
     }
 
 
-
-    function oper_saveData(_that,formdata,formName){
-        if (formdata.opertype=='H' && formdata.regionid==''){
+    function oper_saveData(_that, formdata, formName) {
+        if (formdata.opertype == 'H' && formdata.regionid == '') {
             layer.msg('区域管理员请选择管辖区域!', {icon: 2, time: 1000});
             return;
         }
         var url = null;
-        if(oper_vue.operatortitile == "添加操作员(默认密码为123456)"){
+        if (oper_vue.operatortitile == "添加操作员(默认密码为123456)") {
             url = encodeURI("[[@{/operator/addOperator}]]");
         }
-        if(oper_vue.operatortitile == "修改操作员(默认密码为123456)"){
+        if (oper_vue.operatortitile == "修改操作员(默认密码为123456)") {
             url = encodeURI("[[@{/operator/updateOperator}]]")
         }
-        var token=$("meta[name='_csrf_token']").attr("value");
+        var token = $("meta[name='_csrf_token']").attr("value");
         $.ajax({
             type: "POST",
             url: url,
@@ -724,14 +736,14 @@
             headers: {
                 'Accept': 'application/json',
                 'Content-Type': 'application/json',
-                'X-CSRF-TOKEN':token,
+                'X-CSRF-TOKEN': token,
             },
             data: JSON.stringify(formdata),
             success: function (data) {
                 if (data.errStr != "") {
-                    layer.msg(data.errStr, {icon: 2,time:1000});
+                    layer.msg(data.errStr, {icon: 2, time: 1000});
                 } else {
-                    layer.msg('保存信息成功!', {icon: 1,time:1000});
+                    layer.msg('保存信息成功!', {icon: 1, time: 1000});
                     oper_refreshThisTable();
                     _that.$refs[formName].resetFields();
                     _that.dialogFormVisible = false;
@@ -741,23 +753,23 @@
     }
 
 
-    function oper_resetpwd(operid){
-        layer.confirm('是否重置该操作员密码?', {icon: 3, title:'请确认'}, function(index){
+    function oper_resetpwd(operid) {
+        layer.confirm('是否重置该操作员密码?', {icon: 3, title: '请确认'}, function (index) {
             $.ajax({
-                type:"get",
-                dataType:"json",
-                url:"[[@{/operator/resetpwd?operid=}]]"+operid,
-                success:function(ret){
+                type: "get",
+                dataType: "json",
+                url: "[[@{/operator/resetpwd?operid=}]]" + operid,
+                success: function (ret) {
                     //console.log(ret);
-                    if(ret.code == undefined){
-                        layer.msg('用户认证已过期，请重新登录', {icon:2,time:1000});
-                        window.location="login";
+                    if (ret.code == undefined) {
+                        layer.msg('用户认证已过期，请重新登录', {icon: 2, time: 1000});
+                        window.location = "login";
                         return;
                     }
                     if (ret.code != 200) {
-                        layer.msg(ret.message, {icon:2,time:1000});
-                    }else{
-                        layer.msg("操作成功，密码重置为123456", {icon: 1,time:1000});
+                        layer.msg(ret.message, {icon: 2, time: 1000});
+                    } else {
+                        layer.msg("操作成功，密码重置为123456", {icon: 1, time: 1000});
 
                     }
                 }
@@ -765,34 +777,34 @@
         });
     };
 
-    function oper_getBuildingData(_that,operid) {
+    function oper_getBuildingData(_that, operid) {
         $.ajax({
-            type:"get",
-            dataType:"json",
-            url:encodeURI("[[@{/system/getBuildingList?operid=}]]"+operid),
-            success:function(ret){
-                if (ret.flag==1){
-                    layer.msg(ret.result, {icon: 2,time:1000});
+            type: "get",
+            dataType: "json",
+            url: encodeURI("[[@{/system/getBuildingList?operid=}]]" + operid),
+            success: function (ret) {
+                if (ret.flag == 1) {
+                    layer.msg(ret.result, {icon: 2, time: 1000});
                     return;
-                }else{
+                } else {
                     var srcdata = [];
-                    var trgdata=[];
+                    var trgdata = [];
                     var buildinglist = ret.buildinglist;
 
                     for (var i = 0; i < buildinglist.length; i++) {
                         srcdata.push({
-                            key: buildinglist[i].regionid+'#'+buildinglist[i].buildingid,
-                            label: buildinglist[i].regionname+'->'+buildinglist[i].buildingname,
+                            key: buildinglist[i].regionid + '#' + buildinglist[i].buildingid,
+                            label: buildinglist[i].regionname + '->' + buildinglist[i].buildingname,
 
                         });
                     }
                     var buildinglisted = ret.buildinglisted;
                     for (var i = 0; i < buildinglisted.length; i++) {
-                        trgdata.push(buildinglisted[i].regionid+'#'+buildinglisted[i].buildingid);
+                        trgdata.push(buildinglisted[i].regionid + '#' + buildinglisted[i].buildingid);
                     }
 
-                    _that.buildingList=srcdata;
-                    _that.allotbuilding=trgdata;
+                    _that.buildingList = srcdata;
+                    _that.allotbuilding = trgdata;
                 }
             }
         })
@@ -800,22 +812,23 @@
     }
 
 
-
 </script>
 <style lang="scss">
-    .el-checkbox-group.el-transfer-panel__list{
-        height:277px;
+    .el-checkbox-group.el-transfer-panel__list {
+        height: 277px;
     }
 
     .el-dialog {
         width: 900px;
     }
-    .el-transfer-panel{
-        width:347px;
+
+    .el-transfer-panel {
+        width: 347px;
     }
-    .el-transfer-panel__body{
-        height:360px;
-        width:345px;
+
+    .el-transfer-panel__body {
+        height: 360px;
+        width: 345px;
     }
 
 </style>
\ No newline at end of file
diff --git a/src/main/resources/templates/visitormanage/addVisitorCheck.html b/src/main/resources/templates/visitormanage/addVisitorCheck.html
index bd0d532..6155f25 100644
--- a/src/main/resources/templates/visitormanage/addVisitorCheck.html
+++ b/src/main/resources/templates/visitormanage/addVisitorCheck.html
@@ -8,23 +8,23 @@
     </div>
     <div class="layui-card-body">
         <div id="searchDoorlist">
-            <el-form :inline="true" ref="searchDoorForm" :model="searchDoorForm" label-width="110px"
+            <el-form :inline="true" ref="searchDoorForm" :model="searchDoorForm" :rules="rules" label-width="110px"
                      data-parsley-validate class="form-horizontal form-label-left el-form-item el-form-item--mini">
 
                 <el-row :span="18">
-                        <el-col :span="18">
-                            <el-form-item label="姓名">
+                    <el-col :span="18">
+                        <el-form-item label="姓名">
 
                             <el-input v-model="searchDoorForm.visitorname" id="visitorname" placeholder="访客姓名">
                                 <i class="el-icon-edit el-input__icon" slot="icon"></i>
-                    </el-input>
-                    </el-form-item>
-                        </el-col>
+                            </el-input>
+                        </el-form-item>
+                    </el-col>
                 </el-row>
                 <el-row :span="18">
                     <el-col :span="18">
                         <el-form-item label="性别">
-                            <el-select v-model="searchDoorForm.sex" id="sex" placeholder="请选择" >
+                            <el-select v-model="searchDoorForm.sex" id="sex" placeholder="请选择">
                                 <el-option
                                         v-for="status in sexlist"
                                         :key="status.value"
@@ -37,38 +37,38 @@
                 </el-row>
                 <el-row :span="18">
 
-                        <el-col :span="18">
-                            <el-form-item label="身份证号">
+                    <el-col :span="18">
+                        <el-form-item label="身份证号">
 
                             <el-input v-model="searchDoorForm.idno" id="idno" placeholder="访客身份证号">
                                 <i class="el-icon-edit el-input__icon" slot="icon"></i>
                             </el-input>
-                    </el-form-item>
-                        </el-col>
+                        </el-form-item>
+                    </el-col>
 
                 </el-row>
                 <el-row :span="18">
 
-                        <el-col :span="18">
-                            <el-form-item label="联系方式">
+                    <el-col :span="18">
+                        <el-form-item label="联系方式">
 
                             <el-input v-model="searchDoorForm.phone" id="phone" placeholder="访客联系方式">
                                 <i class="el-icon-edit el-input__icon" slot="icon"></i>
                             </el-input>
-                    </el-form-item>
-                        </el-col>
+                        </el-form-item>
+                    </el-col>
                 </el-row>
                 <el-row :span="18">
                     <el-col :span="18">
                         <el-form-item label="时间">
                             <el-date-picker type="date" v-model="searchDoorForm.time" id="time"
-                                            :picker-options="pickerOptions0" :editable="false" placeholder="访问时间"  value-format="yyyyMMdd"
+                                            :picker-options="pickerOptions0" :editable="false" placeholder="访问时间"
+                                            value-format="yyyyMMdd"
                                             style="width:100%;"></el-date-picker>
                         </el-form-item>
                     </el-col>
 
 
-
                 </el-row>
                 <el-row :span="18">
                     <el-col :span="18">
@@ -84,7 +84,8 @@
                 <el-row :span="18">
                     <el-col :span="18">
                         <el-form-item label="受访者部门">
-                            <el-select v-model="searchDoorForm.deptcode" id="deptcode" placeholder="请选择" @change="deptchange(searchDoorForm.deptcode)">
+                            <el-select v-model="searchDoorForm.deptcode" id="deptcode" placeholder="请选择"
+                                       @change="deptchange(searchDoorForm.deptcode)">
                                 <el-option
                                         v-for="status in deptlist"
                                         :key="status.value"
@@ -121,7 +122,8 @@
 
                 <el-row>
                     <el-col :span="8" :offset="16">
-                        <button type="button" style="margin-left: 48px" class="btn btn-info" @click="savevisitor(searchDoorForm)"
+                        <button type="button" style="margin-left: 48px" class="btn btn-info"
+                                @click="savevisitor(searchDoorForm)"
                                 id="searchDoorlist_qrybtn">
                             保存
                         </button>
@@ -197,11 +199,40 @@
                     }
                 }
             }
+            ,
+            rules: {
+                visitorname: [
+                    {required: true, message: '请输入访客姓名', trigger: 'blur'},
+                    {min: 1, max: 20, message: '长度在 1 到 32 个字符', trigger: 'blur'}
+                ],
+                idno: [
+                    {required: true, message: '请输入身份证号', trigger: 'blur'},
+                    {min: 15, max: 18, message: '长度在 15 到 18 个字符', trigger: 'blur'},
+                ],
+                time: [
+                    {required: true, message: '请输入时间', trigger: 'blur'},
+                ],
+                sex: [
+                    {required: true, message: '请选择性别', trigger: 'blur'}
+                ],
+
+                phone: [
+                    {validator: oper_validateMobile, trigger: 'blur'}
+                ],
+
+                company: [
+                    {required: true, message: '请填写访客单位', trigger: 'blur'}
+                ],
+                deptcode: [
+                    {required: true, message: '请选择所属部门', trigger: 'blur'}
+                ]
+
+            },
         },
         methods: {
 
             savevisitor: function (formName) {
-                searchDoorlist_commonQuery(this, this.searchDoorForm,formName);
+                searchDoorlist_commonQuery(this, this.searchDoorForm, formName);
             },
 
             deptchange: function (deptcode) {
@@ -283,6 +314,12 @@
             if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
         return fmt;
     }
+    var oper_validateMobile = function (rule, value, callback) {
+        if (null != value && value.length > 0 && !(/^1\d{10}$/.test(value))) {
+            callback(new Error('请输出正确的手机号'));
+        }
+        callback();
+    };
 
     function searchDoorlist_getTreeData(regionlst) {
         var f = [];
@@ -372,9 +409,34 @@
     }
 
 
-    function searchDoorlist_commonQuery(_self, searchDoor,formName) {
+    function searchDoorlist_commonQuery(_self, searchDoor, formName) {
         var url = "[[@{/visitor/addvisitorcheck?}]]";
         var token = $("meta[name='_csrf_token']").attr("value");
+        if(searchDoor.visitorname==null||searchDoor.visitorname.length==0){
+            alert("请输入访客姓名");
+            return;
+        }if(searchDoor.idno==null||searchDoor.idno.length<=18){
+            alert("请输入访客身份证号");
+            return;
+        }if(searchDoor.phone==null||searchDoor.phone<=11){
+            alert("请输入访客联系方式");
+            return;
+        }if(searchDoor.sex==null||searchDoor.sex==0){
+            alert("请选择性别");
+            return;
+        }if(searchDoor.time==null||searchDoor.time==0){
+            alert("请输入时间");
+            return;
+        }if(searchDoor.company==null||searchDoor.company==0){
+            alert("请输入访客单位");
+            return;
+        }if(searchDoor.deptcode==null||searchDoor.deptcode==0){
+            alert("请选择受访者部门");
+            return;
+        }if(searchDoor.custid==null||searchDoor.custid==0){
+            alert("请选择受访者姓名");
+            return;
+        }
         $.ajax({
             type: "POST",
             url: url,
@@ -383,14 +445,14 @@
             headers: {
                 'Accept': 'application/json',
                 'Content-Type': 'application/json',
-                'X-CSRF-TOKEN':token,
+                'X-CSRF-TOKEN': token,
             },
             data: JSON.stringify(searchDoor),
             success: function (data) {
                 if (data.errStr != "") {
-                    layer.msg(data.errStr, {icon: 2,time:1000});
+                    layer.msg(data.errStr, {icon: 2, time: 1000});
                 } else {
-                    layer.msg('保存信息成功!', {icon: 1,time:1000});
+                    layer.msg('保存信息成功!', {icon: 1, time: 1000});
                     _self.$refs[formName].resetFields();
                     _self.dialogFormVisible = false;
                     _self.regionidDis = false;
