diff --git a/src/main/resources/templates/apph5/applyforvisitorcode.html b/src/main/resources/templates/apph5/applyforvisitorcode.html
index ed7f7b1..f924cf4 100644
--- a/src/main/resources/templates/apph5/applyforvisitorcode.html
+++ b/src/main/resources/templates/apph5/applyforvisitorcode.html
@@ -1,84 +1,121 @@
 <!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}" />
+	<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}"/>
+		<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}"/>
+		<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>
+		<!--<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>
+	</head>
 
-<script type="text/javascript">
-    setInterval(function () {
-        window.location.reload();
-    }, 60000);
+	<script type="text/javascript">
+		setInterval(function() {
+			window.location.reload();
+		}, 60000);
 
-    $(function () {
+		$(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();
+			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("出门登记码")
+			if (inoutflag == 1) {
+				$("#title").text("进门登记码")
+			} else {
+				$("#title").text("出门登记码")
 
-        }
+			}
 
-    });
-</script>
-<style>
-    body {
+		});
+	</script>
+	<style>
+		body {
         background-color: #ffffff;
     }
+	.share-ul{
+		list-style: none;
+		padding-left:0 ;
+		display: flex;
+		justify-content: space-between;
+	}
+	.share-li{
+		width: 45%;
+		line-height: 50px;
+		background-color: #3599FB;
+		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 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>
+	<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>
+	<ul class="share-ul">
+		<li class="share-li" id="shareQQ">分享至qq好友</li>
+		<li class="share-li" id="shareWX">分享至微信好友</li>
+	</ul>
 
 </body>
-</style>
\ No newline at end of file
+<script type="text/javascript">
+	var shareQQ = document.getElementById("shareQQ");
+	var shareWX = document.getElementById("shareWX");
+	
+	shareQQ.onclick = function(){
+		console.log("shareQQ")
+		var args = {};
+		args.client = QQSDK.ClientType.QQ;//QQSDK.ClientType.QQ,QQSDK.ClientType.TIM;
+		args.scene = QQSDK.Scene.QQ;//QQSDK.Scene.QQZone,QQSDK.Scene.Favorite
+		args.url = 'https://cordova.apache.org/';
+		args.title = '这个是 Cordova QQ 新闻分享的标题';
+		args.description = '这个是 Cordova QQ 新闻分享的描述';
+		args.image = 'https://cordova.apache.org/static/img/cordova_bot.png';
+		QQSDK.shareNews(function () {
+		  alert('shareNews success');
+		}, function (failReason) {
+		  alert(failReason);
+		}, args);
+	}
+	shareWX.onclick = function(){
+		console.log("shareWX")
+	}
+	
+</script>
+</style>
