Browse Source

Z991239-4806 #comment 回退到有uos安装页面,并添加新的错误页

陈良瑜80374463 2 years ago
parent
commit
ec7a8fee2b
44 changed files with 4808 additions and 561 deletions
  1. BIN
      addin/res/ManagerDesktop/Include/jQuery/js/jquery.min.js
  2. 5 7
      addin/res/ManagerDesktop/Include/non-ie-interface.js
  3. 72 0
      addin/res/ManagerDesktop/cardStore.html
  4. 631 0
      addin/res/ManagerDesktop/css/errType.css
  5. 368 31
      addin/res/ManagerDesktop/css/ininPsd.css
  6. 142 0
      addin/res/ManagerDesktop/css/loading.css
  7. 324 0
      addin/res/ManagerDesktop/entityCheck.html
  8. 190 48
      addin/res/ManagerDesktop/errPage.html
  9. 312 0
      addin/res/ManagerDesktop/homePageErr.html
  10. BIN
      addin/res/ManagerDesktop/images/CardStoreIsBusy.png
  11. BIN
      addin/res/ManagerDesktop/images/config.png
  12. BIN
      addin/res/ManagerDesktop/images/warningCircle.png
  13. 3 3
      addin/res/ManagerDesktop/initPassword.html
  14. 7 0
      addin/res/ManagerDesktop/installMessage.html
  15. 169 0
      addin/res/ManagerDesktop/js/calendar.js
  16. 38 1
      addin/res/ManagerDesktop/js/common.js
  17. 291 0
      addin/res/ManagerDesktop/js/entityCheck.js
  18. 318 17
      addin/res/ManagerDesktop/js/entityService.js
  19. 70 12
      addin/res/ManagerDesktop/js/errPage.js
  20. 55 343
      addin/res/ManagerDesktop/js/errorCodeEnum.js
  21. 6 6
      addin/res/ManagerDesktop/js/eventEmitter.js
  22. 230 0
      addin/res/ManagerDesktop/js/getTerminalInfo.js
  23. 230 93
      addin/res/ManagerDesktop/js/initPsd.js
  24. 340 0
      addin/res/ManagerDesktop/js/navOprator.js
  25. 7 0
      addin/res/ManagerDesktop/restartMessage.html
  26. 329 0
      addin/res/ManagerDesktop/serverNoAccess.html
  27. 421 0
      addin/res/ManagerDesktop/showStatus.html
  28. BIN
      addin/res/ManagerDesktop/terminalstatus/WI-FI-connected.png
  29. BIN
      addin/res/ManagerDesktop/terminalstatus/WI-FI-disconnected.png
  30. BIN
      addin/res/ManagerDesktop/terminalstatus/battery-back.png
  31. BIN
      addin/res/ManagerDesktop/terminalstatus/battery-charging.png
  32. BIN
      addin/res/ManagerDesktop/terminalstatus/battery-fullcharge(100%).png
  33. BIN
      addin/res/ManagerDesktop/terminalstatus/battery-lowpower(10%).png
  34. BIN
      addin/res/ManagerDesktop/terminalstatus/download.png
  35. BIN
      addin/res/ManagerDesktop/terminalstatus/downloading.png
  36. BIN
      addin/res/ManagerDesktop/terminalstatus/install.png
  37. BIN
      addin/res/ManagerDesktop/terminalstatus/lowbattery-charging.png
  38. BIN
      addin/res/ManagerDesktop/terminalstatus/mobile-connected.png
  39. BIN
      addin/res/ManagerDesktop/terminalstatus/mobile-disconnected.png
  40. BIN
      addin/res/ManagerDesktop/terminalstatus/netline-connected.png
  41. BIN
      addin/res/ManagerDesktop/terminalstatus/netline-disconnected.png
  42. BIN
      addin/res/ManagerDesktop/terminalstatus/switch.png
  43. 106 0
      addin/res/ManagerDesktop/upgradeRestart.html
  44. 144 0
      addin/res/ManagerDesktop/warnPrompt.html

BIN
addin/res/ManagerDesktop/Include/jQuery/js/jquery.min.js


+ 5 - 7
addin/res/ManagerDesktop/Include/non-ie-interface.js

@@ -7,12 +7,11 @@ if ("WebSocket" in window) {} else {
 
 var ws = new WebSocket("ws://localhost:9118");
 if (ws.readyState == WebSocket.CONNECTING) {
-    //layer.msg('WebSocket正在连接...');
+    layer.msg('WebSocket正在连接...');
 }
 
-ws.onerror = function (event) {
-    //使用普通调用版本,则不需要这行提示内容
-    //layer.msg('WebSocket发生错误');
+ws.onerror = function(event) {
+    layer.msg('WebSocket发生错误');
 };
 ws.onopen = function() {
     // SetOutputMode:设置上屏方式 0:shift+insert; 1:ctrl+v; 2:websocket message;
@@ -57,9 +56,8 @@ ws.onmessage = function(evt) {
     }
 };
 
-ws.onclose = function () {
-    //使用普通调用版本,则不需要这行提示内容
-    //layer.msg('WebSocket连接已关闭,请检查一下服务是否已开启!');
+ws.onclose = function() {
+    layer.msg('WebSocket连接已关闭,请检查一下服务是否已开启!');
 };
 
 function IsWsConnected() {

+ 72 - 0
addin/res/ManagerDesktop/cardStore.html

@@ -0,0 +1,72 @@
+
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<title>卡库错误页</title>
+		<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
+		<style>
+			.cardStore{
+				width: 90%;
+				margin: 0 auto;
+			}
+			.imgDiv{
+				height: 500px;
+				text-align: center;
+			}
+			.fz_52{
+				font-size: 52px;
+				text-align: center;
+			}
+			.logo{
+				width: 400px;
+				height: 140px;
+				display: flex;
+				flex-direction: column;
+				justify-content: center;
+			}
+			.cardStoreIsBusy p {
+				font-size: 20px;
+				text-align: left;
+				color: #888;
+			}
+			.cardStoreIsBusy h1 {
+				font-size: 36px;
+			}
+
+			@media screen and (max-width:1300px) {
+				.logo{
+					width: 300px;
+				}
+			}
+
+		</style>
+	</head>
+	<body class="cardStore">
+		<nav class="logo">
+			<img width="100%" src="./images/logo_cmb.png" />
+		</nav>
+		<!--卡库 start -->
+		<div class="cardStoreIsBusy" id="CardStoreIsBusy">
+			<p id="localDate"></p>
+			<h1 id="localTime"></h1>
+		</div>
+		<!--卡库 end   -->
+		<div class="imgDiv">
+			<img height="100%" src='./images/CardStoreIsBusy.png' />
+		</div>
+		<p class="fz_52" >卡库正在读卡中,请稍候</p>
+		<!--卡库 end   -->
+
+	</body>
+	<script type="text/javascript" src="js/calendar.js"></script>
+	<script>
+		let localDate = showFullDateTime();
+		console.log('localDate---',localDate)
+		let myDate = new Date();
+		let hours = myDate.getHours();
+		let timeValue = ((hours >= 12) ? "下午好" : "上午好 " );
+		document.getElementById("localDate").innerHTML = localDate
+		document.getElementById("localTime").innerHTML = timeValue
+	</script>
+</html>

+ 631 - 0
addin/res/ManagerDesktop/css/errType.css

@@ -0,0 +1,631 @@
+@charset "utf-8";html{background-color:#fff;}
+body,ul,ol,dl,dd,h1,h2,h3,h4,h5,h6,figure,form,fieldset,legend,input,textarea,button,p,blockquote,th,td,pre,xmp{margin:0;padding:0}
+body,input,textarea,button,select,pre,xmp,tt,code,kbd,samp{line-height:1.5;font-family:'HYQiHei 55S',sans-serif}
+h1,h2,h3,h4,h5,h6,small,big,input,textarea,button,select{font-size:100%;outline: none;}
+h1,h2,h3,h4,h5,h6{font-family:'HYQiHei 65S',sans-serif}
+h1,h2,h3,h4,h5,h6,b,strong{font-weight:normal}
+address,cite,dfn,em,i,optgroup,var{font-style:normal}
+table{border-collapse:collapse;border-spacing:0;text-align:left}
+caption,th{text-align:inherit}
+ul,ol,menu{list-style:none}
+fieldset,img{border:0}
+img,object,input,textarea,button,select{vertical-align:middle}
+article,aside,footer,header,section,nav,figure,figcaption,hgroup,details,menu{display:block}
+audio,canvas,video{display:inline-block;*display:inline;*zoom:1}
+blockquote:before,blockquote:after,q:before,q:after{content:"\0020"}
+textarea{overflow:auto;resize:vertical}
+input,textarea,button,select,a{outline:0 none;border: none;}
+input::-webkit-input-placeholder{color: #ddd;}
+button{cursor: pointer;background: transparent;}
+button[disabled=true],button[disabled='disabled']{opacity: 0.6;}
+button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}
+mark{background-color:transparent}
+a,ins,s,u,del{text-decoration:none}
+p,small{word-wrap: break-word; word-break: break-all;}
+sup,sub{vertical-align:baseline}
+html {height: 100%;width:100%;-webkit-tap-highlight-color: transparent;touch-action: pan-x pan-y;}
+body {font-family:'HYQiHei 55S',sans-serif;color:#000;-webkit-text-size-adjust: none;-webkit-font-smoothing:antialiased;}
+hr {height: .02rem;margin: .1rem 0;border: medium none;border-top: .02rem solid #cacaca;}
+a {color: #25a4bb;text-decoration: none;}
+.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}
+/* 隐藏 input[type="number"]箭头*/
+input::-webkit-outer-spin-button,
+input::-webkit-inner-spin-button
+{
+	-webkit-appearance: none;
+}
+input[type="number"]{
+	-moz-appearance: textfield;
+}
+
+/*************************************************up reset css*************************************************************************************************/
+
+/* 字号适配*/
+.fz_44{ font-size: 44px;}
+.fz_32{ font-size: 32px;}
+.fz_28{ font-size: 28px;}
+.fz_24{ font-size: 24px;}
+.fz_23{ font-size: 23px;}
+.fz_20{ font-size: 20px;}
+
+.btn-blue{
+	background-image: linear-gradient(104deg, #4D7BFE 0%, #749FFF 100%);
+	border-radius: 40px;
+	font-size: 28px;
+	color: #FFFFFF;
+	letter-spacing: 0;
+	text-align: center;
+	line-height: 42px;
+	font-weight: 500;
+	padding: 19px 80px;
+}
+
+.btn-link{
+	color: #4D7BFE;
+	position: fixed;
+	bottom: 30px;
+	left: 5%;
+}
+
+/* 提示弹窗 prompt*/
+.modal-box{
+	display: none;
+	width: 100%;
+	height: 100%;
+	position: absolute;
+	top: 0;
+	left: 0;
+}
+.coverBg {
+	width: 100%;
+	height: 100%;
+	background: rgba(0, 0, 0, 0.5);
+}
+.modal{
+	width: 30%;
+	background: #fff;
+	border-radius: 12px;
+	padding: 30px;
+	box-shadow: 0px 0px 20px rgb(0 0 0 / 32%);
+	position: absolute;
+	top: 30%;
+	left: 35%;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+
+}
+.modal img {
+	margin: 10px 0px 20px 0px;
+}
+.modal h3{
+	width: 100%;
+}
+.modal-box p {
+	max-height: 60px;
+	overflow: auto;
+	/* padding: 0 30px; */
+}
+.modal button {
+	width: 200px;
+	height: 45px;
+	line-height: 45px;
+	border-radius: 20px;
+	margin-top: 30px;
+}
+.modal .btns {
+	display: flex;
+	width: 85%;
+	justify-content: space-between;
+	margin-top: 30px;
+}
+.modal .btn-blues{
+	background-image: linear-gradient(to bottom right, #4D7BFE, #749FFF);
+}
+.modal .btn-gray{
+	border: 1px solid #808080;
+}
+
+/* 提示弹窗 prompt*/
+
+/* 退出提示弹窗*/
+.modal-box .box{
+	width: 30%;
+	height: 150px;
+	line-height: 150px;
+	border-radius: 6px;
+	font-size: 18px;
+	background-color: #f4f4f4;
+	z-index: 9999;
+	position: absolute;
+	left: 35%;
+	top: 50%;
+	transform: translateY(-150px);
+	text-align: center;
+}
+/* 退出提示弹窗*/
+
+/************************ 下载集中配置css Start*******************/
+.toast_box{
+	display: none;
+	position:fixed;
+	top:0;
+	right:0;
+	bottom:0;
+	left:0;
+	text-align:center;
+}
+.toast_box::before{
+	content:"";
+	width:0;
+	height:100%;
+	display:inline-block;
+	vertical-align:middle;
+}
+
+.modal_warpper{
+	background: #FFFFFF;
+	width: 720px;
+	display:inline-block;
+	vertical-align:middle;
+	text-align:center;
+	border-radius: 10px;
+	padding: 15px 0px;
+}
+
+.toast_wrapper{
+	background: rgba(0, 0, 0, 0.7);
+	width: 560px;
+	display:inline-block;
+	vertical-align:middle;
+	text-align:center;
+	border-radius: 10px;
+}
+
+.box_wrapper{
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	margin-top: 60px;
+	padding: 0 40px;
+}
+.box_wrapper .input_wrapper {
+	width: 100%;
+	height: 56px;
+	padding: 0 20px;
+	box-sizing: border-box;
+	border: 1px solid #e4e4e4;
+	font-size: 24px;
+	line-height: 32px;
+}
+.box_wrapper .inputURL {
+	width: 100%;
+	height: 100%;
+	text-align: left;
+}
+.toast_wrapper .btn_wrapper{
+	color: #ffffff;
+	display: flex;
+	text-align: center;
+	width: 100%;
+	height: 60px;
+	line-height: 60px;
+	border-top: 1px solid #ffffff;
+	font-size: 30px;
+	margin-top: 20px;
+}
+.modal_title{
+	font-size: 36px;
+	line-height: 54px;
+	width: 100%;
+	text-align: left;
+	margin-bottom: 30px;
+}
+.modal_warpper .btn_wrapper{
+	margin: 30px 40px 50px 40px;
+    display: flex;
+    justify-content: space-between;
+	
+}
+.btn_cancel{
+	width: 280px;
+	height: 80px;
+	border-radius: 40px;
+	border: 1px solid #ABABAB;
+	font-size: 28px;
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+}
+.btn_confirm{
+	width: 280px;
+	height: 80px;
+	border-radius: 40px;
+    background-image: linear-gradient(to bottom right, #4D7BFE, #749FFF);
+	font-size: 28px;
+	color: #FFFFFF;
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+}
+.wran_icon{
+	width: 72px;
+	height: 72px;
+}
+#modalErrorBox,#ManuallyDownload,#boxRestart{
+	background-color: rgba(0, 0, 0, 0.5);
+}
+#modalErrTips{
+	color: #333333;
+    font-size: 28px;
+    line-height: 42px;
+    word-break: break-all;
+    width: 100%;
+    text-align: left;
+}
+#toastErrTips{
+	color: #FFFFFF;
+	margin-top: 40px;
+	font-size: 36px;
+	line-height: 54px;
+}
+/************************ 下载集中配置css End*******************/
+
+/********** 设备密钥初始化css End*********/
+.iframe-box{
+	display: none;
+	height: 600px;
+	flex-direction: column;
+	justify-content: center;
+}
+.iframe-box p {
+	color: #b3b1b1;
+	font-size: 28px;
+	text-align: center;
+}
+/**********设备密钥初始化css End**********/
+
+/**************************************** errType *******************************/
+.errType{
+
+}
+.errType .logo{
+	width: 400px;
+}
+nav{
+	padding: 0 5%;
+	height: 140px;
+	display: flex;
+	align-items: center;
+	margin-bottom: 40px;
+}
+nav ul{
+	display: flex;
+	flex: 1;
+	padding-left: 150px;
+	justify-content:space-around;
+}
+nav ul li{
+	display: flex;
+	align-items: center;
+	cursor: pointer;
+	padding: 15px 16px;
+	border-radius: 50px;
+	background: #fff;
+	box-sizing: border-box;
+	box-shadow: 0px 2px 15px rgba(0, 0, 0, 0.1);
+}
+
+nav ul li::before{
+	display: inline-table;
+	width: 20px;
+	height: 20px;
+	margin-right: 5px;
+	content: '';
+}
+nav ul li:nth-child(1)::before{
+	background: url('../images/config.png');
+	background-size: cover;
+}
+
+nav ul li:nth-child(2)::before{
+	background: url('../images/reset.png');
+	background-size: cover;
+}
+
+nav ul li:nth-child(3)::before{
+	background: url('../images/restart_a.png');
+	background-size: cover;
+}
+nav ul li:nth-child(4)::before{
+	background: url('../images/restart_c.png');
+	background-size: cover;
+}
+nav ul li:nth-child(5)::before{
+	background: url('../images/off.png');
+	background-size: cover;
+}
+nav ul li:nth-child(6)::before{
+	background: url('../images/min.png');
+	background-size: cover;
+}
+#downLoadConfig,
+#resetPsd,
+#minimize{
+	display: none;
+}
+.imgDiv{
+	text-align: center;
+}
+.errType .title{
+	font-size: 40px;
+	color: #000000;
+	text-align: center;
+	line-height: 60px;
+	font-weight: 500;
+	/* margin-bottom: 40px; */
+}
+
+.hareword-info{
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+}
+
+.result-wrap{
+	width: 50%;
+	padding: 10px 40px;
+	background: #FAFAFC;
+	border-radius: 10px;
+}
+.result-item{
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	margin-bottom: 20px;
+}
+.result-item label{
+	color: #888
+}
+.logo-img{
+	width: 22.7%;
+	padding-left: 40px;
+	margin-top: 32px;
+}
+
+/* 二维码验证Start */
+.scan-verify{
+	display: none;
+}
+.errType .scan-verify iframe{
+	height: 147;
+}
+.errType .scan-verify p{
+	font-size: 18px;
+	color: #808080;
+	text-align: center;
+	line-height: 27px;
+	font-weight: 400;
+}
+.errType .scan-verify .btn-blue{
+	margin-top: 36px;
+}
+/* 二维码验证End */
+
+/* 硬件检测Start */
+.entity-checkout .reaset-dot{
+	display: none;
+}
+.entity-box{
+	/* display: none; */
+	width: 50%;
+}
+.entity-box .btn-blue{
+	margin-left: 35%;
+}
+.entity-check{
+	margin-top: 30px;
+	max-height: 350px;
+	overflow-y: auto;
+	margin-bottom: 30px;
+}
+
+.entity-check::-webkit-scrollbar{
+	display: none;
+}
+.entity-item{
+	margin-bottom: 15px;
+}
+.entity-item h5{
+	display: flex;
+	align-items: center;
+}
+.entity-item p{
+	color: #888;
+}
+/* icon css start*/
+.entity-item .icon-type{
+	width: 26px;
+	height: 26px;
+	display: inline-block;
+	border-radius: 20px;
+	margin-right: 15px;
+	position: relative;
+}
+.icon-suc::after,
+.icon-suc::before{
+	display: inline-block;
+	content: '';
+	width: 2px;
+	background-color:  #fff;
+	position: absolute;
+}
+.icon-suc{
+	background-color: #39C314;
+}
+.icon-suc::after{
+	transform: rotate(45deg);
+	height: 16px;
+	top: 6px;
+	left: 15px;
+}
+.icon-suc::before{
+	transform: rotate(-45deg);
+	height: 10px;
+	top: 12px;
+	left: 7px;
+}
+.icon-err{
+	background-color: #F95A56;
+}
+.icon-err::before,
+.icon-err::after{
+	display: inline-block;
+	content: '';
+	width: 2px;
+	height:15px;
+	background-color: #fff;
+	position: absolute;
+	top: 5px;
+	left: 12px;
+}
+.icon-err::after{
+	transform: rotate(48deg);
+}
+.icon-err::before{
+	transform: rotate(-48deg);
+}
+.icon-warn{
+	background-color: #FD8F17 ;
+}
+.icon-warn::before{
+	display: inline-block;
+	content: '!';
+	color: #fff;
+	font-size: 18px;
+	position: absolute;
+	top: 1px;
+	left: 9px;
+}
+/* icon css end*/
+/* 硬件检测End */
+
+/******************************** loading 点点动画 **************************/
+dot{
+	font-size: 16px;
+	color: #333;
+	position: relative;
+}
+dot::before {
+	display: inline-block;
+	height: 20px;
+	line-height: 20px;
+	position: absolute;
+	left: 0;
+	bottom: 0;
+	color: #ccc;
+	content: '●';
+	font-size: 16px;
+	white-space: pre-wrap;   /* 也可以是white-space: pre */
+}
+.dot::before {
+	animation: dotMin 4s infinite step-start both;
+}
+.test-dot{
+	/* color: #888; */
+}
+.test-dot::before{
+	animation: testDot 2.4s infinite step-start both;
+}
+.paused::before{
+	animation-play-state: paused;
+}
+
+
+@keyframes dot {
+	16% { transform:translateX(0px); }
+	32% { transform: translateX(16px); }
+	48% { transform: translateX(32px); }
+	56% { transform: translateX(48px); }
+	72% { transform: translateX(64px); }
+	100% { transform: translateX(80px); }
+}
+
+@keyframes dotMin {
+	16% { transform:translateX(0px); }
+	32% { transform: translateX(10px); }
+	48% { transform: translateX(20px); }
+	56% { transform: translateX(31px); }
+	72% { transform: translateX(42px); }
+	100% { transform: translateX(52px); }
+}
+
+@keyframes testDot {
+	33% { transform:translateX(0px); }
+	66% { transform: translateX(10px); }
+	100% { transform: translateX(20px); }
+}
+/******************************** loading 点点动画 **************************/
+
+@media screen and (max-width:1300px) {
+	.fz_44{ font-size: 40px;}
+	.fz_32{ font-size: 28px;}
+	.fz_28{ font-size: 24px;}
+	.fz_24{ font-size: 20px;}
+	.fz_20{ font-size: 16px;}
+
+	.modal{
+    width: 45%;
+		left: 25.5%;
+	}
+	.errType .logo {
+    width: 260px
+	}
+	nav ul{
+		padding-left:30px ;
+		flex: 1;
+	}
+	nav ul li{
+		padding: 15px;
+	}
+	nav ul li::before {
+    width: 16px;
+    height: 16px;
+	}
+	.result-wrap,
+	.entity-box{
+		width: 60%;
+	}
+	.entity-check{
+		max-height: 400px;
+	}
+	.entity-item .icon-type{
+		width: 20px;
+		height: 20px;
+		margin-right: 10px;
+	}
+	.icon-suc::before {
+		width: 2px;
+    height: 8px;
+    top: 8px;
+    left: 5px;
+	}
+	.icon-suc::after {
+		width: 2px;
+    height: 12px;
+    top: 5px;
+    left: 11px;
+	}
+	.icon-err::before,
+	.icon-err::after{
+		height: 12px;
+    top: 4px;
+    left: 9px;
+	}
+	.icon-warn::before{
+		font-size: 14px;
+		top: -1px;
+		left: 7px;
+	}
+
+}

+ 368 - 31
addin/res/ManagerDesktop/css/ininPsd.css

@@ -17,7 +17,7 @@ textarea{overflow:auto;resize:vertical}
 input,textarea,button,select,a{outline:0 none;border: none;}
 input::-webkit-input-placeholder{color: #ddd;}
 button{cursor: pointer;background: transparent;}
-button[disabled=true]{opacity: 0.6;}
+button[disabled=true],button[disabled='disabled']{opacity: 0.6;}
 button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}
 mark{background-color:transparent}
 a,ins,s,u,del{text-decoration:none}
@@ -44,7 +44,7 @@ input[type="number"]{
 /* 字号适配*/
 .fz_32{ font-size: 32px;}
 .fz_28{ font-size: 28px;}
-.fz_24{ font-size: 24px;}
+.fz_24{ font-size: 22px;}
 .fz_23{ font-size: 23px;}
 
 
@@ -63,6 +63,7 @@ input[type="number"]{
 	text-align: center;
 	height: 60px;
 	line-height: 60px;
+	margin: 60px;
 }
 .initPsd h5{
 	height: 60px;
@@ -71,12 +72,40 @@ input[type="number"]{
 	background-color: #f4f4f4;
 }
 
+.initPsd h6{
+	height: 60px;
+	line-height: 60px;
+}
+
+#restart-time{
+	font-size: 36px;
+}
+
+.rows_restart{
+	margin: 60px 40px 50px 40px;
+	display: flex;
+	justify-content: space-between;
+    align-items: center;
+	color:  #ABABAB;
+	font-size: 28px;
+}
+
+
+
 .initPsd .config, .setting{
 	margin-top: 30px;
 	border-radius: 12px;
 	border: 1px solid #e4e4e4;
 }
 
+.restart_span{
+	color: #333333;
+	font-size: 28px;
+	word-break: break-all;
+	width: 100%;
+    text-align: left;
+}
+
 .initPsd .rows{
 	width: 100%;
 	height: 60px;
@@ -88,7 +117,37 @@ input[type="number"]{
 	justify-content: space-between;
 	align-items: center;
 	border-bottom: 1px solid #e4e4e4;
+}
 
+.box_wrapper .input_wrapper{
+	width: 100%;
+    height: 56px;
+    padding: 0 20px;
+    box-sizing: border-box;
+    border: 1px solid #e4e4e4;
+	font-size: 24px;
+	line-height: 32px;
+}
+
+.box_wrapper .input_error{
+	display: none;
+	color: #F95A56;
+	font-size: 24px;
+	line-height: 1.5;
+	margin-top: 10px;
+	width: 100%;
+	text-align: left;
+}
+
+.box_wrapper .inputURL{
+	width: 100%;
+    height: 100%;
+    text-align: left;
+}
+
+.initPsd .configAddr{
+	height: 80px;
+	line-height: 80px;
 }
 
 .initPsd button, .initPsd input{
@@ -102,6 +161,15 @@ input[type="number"]{
 .initPsd .btn{
 	display: flex;
 	justify-content: center;
+	margin-top: 30px;
+}
+
+.initPsd .rows_restart button{
+	height: 56px;
+	line-height: 56px;
+	border-radius: 50px;
+	padding: 0px 41px;
+	margin: 0;
 }
 
 .initPsd button{
@@ -111,9 +179,32 @@ input[type="number"]{
 	padding: 0px 41px;
 	margin: 15px 25px;
 }
+.initPsd .btn_wrapper{
+	display: flex;
+    justify-content: space-between;
+    margin-top: 30px;
+}
+
+.btn_main{
+	margin: 15px 0 !important;
+	background-image: linear-gradient(269deg, #749FFF 1%, #4D7BFE 100%);
+	color: #FFFFFF;
+	width: 45%;
+}
+.btn_main_dis{
+	margin: 15px 0 !important;
+	background-image: linear-gradient(269deg, #749FFF 1%, #4D7BFE 100%);
+	color: #FFFFFF;
+	width: 45%;
+	opacity: 0.3;
+}
+.btn-cancel{
+	margin: 15px 0 !important;
+	border: 1px solid #808080;
+	width: 45%;
+}
 .btn-blue{
-	border: 1px solid #527fff;
-	color: #527fff;
+	background-image: linear-gradient(to bottom right, #4D7BFE, #749FFF);
 }
 .btn-gray{
 	border: 1px solid #808080;
@@ -127,6 +218,115 @@ input[type="number"]{
 .modal-box{
 	display: none;
 }
+
+.toast_box{
+	display: none;
+	position:fixed;
+	top:0;
+	right:0;
+	bottom:0;
+	left:0;
+	text-align:center;
+}
+.toast_box::before{
+	content:"";
+	width:0;
+	height:100%;
+	display:inline-block;
+	vertical-align:middle;
+}
+
+.modal_warpper{
+	background: #FFFFFF;
+	width: 720px;
+	display:inline-block;
+	vertical-align:middle;
+	text-align:center;
+	border-radius: 10px;
+}
+
+.toast_wrapper{
+	background: rgba(0, 0, 0, 0.7);
+	width: 560px;
+	display:inline-block;
+	vertical-align:middle;
+	text-align:center;
+	border-radius: 10px;
+}
+
+.box_wrapper{
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	margin-top: 60px;
+	padding: 0 40px;
+}
+.toast_wrapper .btn_wrapper{
+    color: #ffffff;
+    display: flex;
+    text-align: center;
+    width: 100%;
+    height: 60px;
+    line-height: 60px;
+    border-top: 1px solid #ffffff;
+    font-size: 30px;
+	margin-top: 20px;
+}
+.modal_title{
+	font-size: 36px;
+	line-height: 54px;
+	width: 100%;
+	text-align: left;
+	margin-bottom: 30px;
+}
+.modal_warpper .btn_wrapper{
+	margin: 30px 40px 50px 40px;
+    display: flex;
+    justify-content: space-between;
+	
+}
+.btn_cancel{
+	width: 280px;
+	height: 80px;
+	border-radius: 40px;
+	border: 1px solid #ABABAB;
+	font-size: 28px;
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+}
+.btn_confirm{
+	width: 280px;
+	height: 80px;
+	border-radius: 40px;
+    background-image: linear-gradient(to bottom right, #4D7BFE, #749FFF);
+	font-size: 28px;
+	color: #FFFFFF;
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+}
+.wran_icon{
+	width: 72px;
+	height: 72px;
+}
+#modalErrorBox,#ManuallyDownload,#boxRestart{
+	background-color: rgba(0, 0, 0, 0.5);
+}
+#modalErrTips{
+	color: #333333;
+    font-size: 28px;
+    line-height: 42px;
+    word-break: break-all;
+    width: 100%;
+    text-align: left;
+}
+#toastErrTips{
+	color: #FFFFFF;
+	margin-top: 40px;
+	font-size: 36px;
+	line-height: 54px;
+}
 .modal{
 	width: 45%;
 	background: #fff;
@@ -209,16 +409,15 @@ input[type="number"]{
 
 
 /**************************************** errPage *******************************/
-
 nav{
 	padding: 0px 40px;
 	height: 120px;
-	margin-bottom: 100px;
+	margin-bottom: 60px;
 	display: flex;
 	align-items: center;
 }
 nav ul{
-	display: flex;
+	display: none;
 	width: 100%;
 	margin-left: 40px;
 	justify-content: space-around;
@@ -228,34 +427,41 @@ nav ul li{
 	align-items: center;
 	border-radius: 50px;
 	background: #fff;
-	padding: 20px 25px;
+	padding: 15px 20px;
 	box-sizing: border-box;
 	box-shadow: 0px 2px 15px rgba(0, 0, 0, 0.1);
+	cursor: pointer;
 }
 nav ul li::before{
 	display: inline-table;
-	width: 30px;
-	height: 30px;
-	margin-right: 10px;
+	width: 25px;
+	height: 25px;
+	margin-right: 5px;
 	content: '';
 }
 nav ul li:nth-child(1)::before{
-	background: url('../images/reset.png');
+	background: url('../images/config.png');
 	background-size: cover;
 }
+
 nav ul li:nth-child(2)::before{
-	background: url('../images/restart_a.png');
+	background: url('../images/reset.png');
 	background-size: cover;
 }
+
 nav ul li:nth-child(3)::before{
-	background: url('../images/restart_c.png');
+	background: url('../images/restart_a.png');
 	background-size: cover;
 }
 nav ul li:nth-child(4)::before{
-	background: url('../images/off.png');
+	background: url('../images/restart_c.png');
 	background-size: cover;
 }
 nav ul li:nth-child(5)::before{
+	background: url('../images/off.png');
+	background-size: cover;
+}
+nav ul li:nth-child(6)::before{
 	background: url('../images/min.png');
 	background-size: cover;
 }
@@ -266,6 +472,8 @@ nav ul li:nth-child(5)::before{
 .errPage p{
 	text-align: center;
 	margin: 8px 0px;
+}
+.errPage .modal-box p{
 	max-height: 60px;
 	overflow: auto;
 	/* padding: 0 30px; */
@@ -287,6 +495,10 @@ nav ul li:nth-child(5)::before{
 	text-align: left;
 	margin-bottom: 30px;
 }
+
+.errPage label{
+	width: 35%;
+}
 .errPage .btns{
 	display: flex;
 	width: 85%;
@@ -302,14 +514,17 @@ nav ul li:nth-child(5)::before{
 	margin-bottom: 20px;
 }
 
-
+#urlConfigAddr,#urlAccessAddr{
+	word-break: break-word;
+	line-height: 1;
+}
 
 #SuspensionTxt{
-	max-height: 200px;
-	overflow-y: auto;
-	overflow-x: hidden;
+	/* max-height: 60px;
+	overflow: auto; */
 	margin-bottom: 15px;
 	padding: 0 30px;
+	font-size: 28px;
 }
 #PromptTxt{
 	padding: 0 30px;
@@ -318,16 +533,57 @@ nav ul li:nth-child(5)::before{
 #errTips::-webkit-scrollbar{
 	display: none;
 }
+.boxDownload h3{
+	text-align: left;
+}
 
 @media screen and (min-device-width: 1920px) {
+	#toastErrTips{
+		color: #FFFFFF;
+		margin-top: 40px;
+		font-size: 40px;
+		line-height: 60px;
+	}
+	#modalErrTips{
+		color: #333333;
+		font-size: 28px;
+		line-height: 42px;
+		text-align: left;
+		width: 100%;
+	}
+	.modal_title{
+		font-size: 40px;
+		line-height: 60px;
+		text-align: left;
+		width: 100%;
+		margin-bottom: 30px;
+	}
+	.btn_cancel{
+		width: 300px;
+		height: 80px;
+		border-radius: 40px;
+		border: 1px solid #ABABAB;
+		font-size: 32px;
+		display: inline-flex;
+		align-items: center;
+		justify-content: center;
+	}
+	.btn_confirm{
+		width: 300px;
+		height: 80px;
+		border-radius: 40px;
+		background-image: linear-gradient(to bottom right, #4D7BFE, #749FFF);
+		font-size: 32px;
+		color: #FFFFFF;
+		display: inline-flex;
+		align-items: center;
+		justify-content: center;
+	}
 	
 	.errPage .modal{
 		width: 30%;
 		left: 33%;
 	}
-	#SuspensionTxt{
-		max-height: 100px;
-	}
 
 	}
 
@@ -339,17 +595,21 @@ nav ul li:nth-child(5)::before{
 	left: 0px;
 	width: 100%;
 	height: 100%;
-	background: rgba(0, 0, 0, 0.32);
+	background: #fff;
 }
 
 .iframeDiv .initPsd {
-	padding: 10px 30px;
+	padding: 20px 30px 30px 30px;
 }
 .errPage .initPsd{
-	width: 45%;
+	width: 100%;
+	height: 900px;
 	position: fixed;
 	top: 100px;
-	left: 27%;
+	left: 0;
+}
+.errPage  .boxDownload .initPsd{
+	top: 260px;
 }
 
 .exitTips{
@@ -373,29 +633,106 @@ nav ul li:nth-child(5)::before{
 .terminal-time{
 	display: flex;
 	justify-content: center;
-	margin-bottom: 20px;
+	margin-bottom: 15px;
 }
 
 #ErrTime{
 	margin-left: 25px;
 }
 
-#resetPsd, #minimize{
+#resetPsd, #minimize,#downLoadConfig{
+	display: none;
+}
+
+.configAddr 
+{
+	color: #999;
+}
+
+#RestartTxt{
+	display: none;
+}
+
+.cardStoreIsBusy{
+	padding-left: 5%;
+	display: none;
+}
+.cardStoreIsBusy p{
+	font-size: 20px;
+	text-align: left;
+	color: #888;
+}
+
+.cardStoreIsBusy h1{
+	font-size: 36px;
+}
+/********************设备密钥初始化中··· ******************/
+.result-wrap{
 	display: none;
+	width: 50%;
+	padding: 20px;
+}
+.result-item{
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	height: 50px;
+	line-height: 50px;
+	font-size: 20px;
+}
+.result-item label{
+	color: #999
+}
+.logo-img{
+	width: 22.7%;
+	padding-left: 40px;
+	margin-top: 32px;
+}
+.iframe-box p{
+	color: #b3b1b1;
+	font-size: 28px;
+}
+.btn-link{
+	color: #4D7BFE;
+	position: fixed;
+	bottom: 30px;
+	left: 30px;
 }
 
 @media screen and (max-width:1300px) {
 	.errPage .logo{
 		width: 30%;
 	}
+	nav{
+		margin-bottom: 90px;
+	}
 	nav ul li{
 		padding: 15px 20px;
 	}
 	nav ul li::before {
-    width: 25px;
-    height: 25px;
+    width: 20px;
+    height: 20px;
 	}
 	.fz_24 {
-    font-size: 20px;
+    font-size: 18px;
+	}
+	.errPage .initPsd{
+		width: 100%;
+		height: 100%;
+	}
+	.initPsd .rows{
+		font-size: 18px;
+	}
+	#urlConfigAddr{
+		font-size: 16px;
+	}
+	#toastErrTips{
+		color: #FFFFFF;
+		margin-top: 40px;
+		font-size: 36px;
+		line-height: 54px;
+	}
+	.result-wrap{
+		width: 50%;
 	}
 }

+ 142 - 0
addin/res/ManagerDesktop/css/loading.css

@@ -110,3 +110,145 @@
 }
 
 
+/* loading菊花旋转 */
+#loading_mask {
+	width: 100%;
+  height: 100%;
+  position: absolute;
+  top:0px;
+  left: 0px;
+  display: none;
+}
+.loading_wrapper{
+  background: rgba(0, 0, 0, 0.7);
+	width: 560px;
+	height: 310px;
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	margin: auto;
+	border-radius: 10px;
+}
+.loading_icon_wrapper{
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.loading_title{
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-top: 40px;
+  color: #ffffff;
+  font-size: 36px;
+  line-height: 54px;
+}
+.loading_icon{
+  height: 72px;
+  width: 72px;
+  display: inline-block;
+  position: relative;
+  margin-top: 60px;
+}
+.loading_point{
+  width: 6px;
+  height: 6px;
+  border-radius: 12px;
+  background: #FFFFFF;
+  margin-right: 4px;
+}
+#circle-center {
+  background: rgb(75 75 75);
+  position: absolute;
+  top: 19px;
+  left: 19px;
+  width: 36px;
+  height: 36px;
+  border-radius: 18px;
+}
+.load-line {
+	position: absolute;
+  top: 34px;
+  left: 0px;
+  width: 72px;
+  height: 6px;
+}
+.load-line > span {
+	display: inline-block;
+  width: 50%;
+  height: 100%;
+  border-radius: 3px;
+  background: white;
+}
+.left {
+	float: left;
+}
+.right {
+	float: right;
+}
+.rotate-0 {
+	transform: rotate(0);
+}
+.rotate-0 > .left {
+	animation: load-effect 1.2s linear 0s infinite;
+}
+.rotate-0 > .right {
+	animation: load-effect 1.2s linear 0.6s infinite;
+}
+.rotate-30 {
+	transform: rotate(30deg);
+}
+.rotate-30 > .left {
+	animation: load-effect 1.2s linear 0.1s infinite;
+}
+.rotate-30 > .right {
+	animation: load-effect 1.2s linear 0.7s infinite;
+}
+.rotate-60 {
+	transform: rotate(60deg);
+}
+.rotate-60 > .left {
+	animation: load-effect 1.2s linear 0.2s infinite;
+}
+.rotate-60 > .right {
+	animation: load-effect 1.2s linear 0.8s infinite;
+}
+.rotate-90 {
+	transform: rotate(90deg);
+}
+.rotate-90 > .left {
+	animation: load-effect 1.2s linear 0.3s infinite;
+}
+.rotate-90 > .right {
+	animation: load-effect 1.2s linear 0.9s infinite;
+}
+.rotate-120 {
+	transform: rotate(120deg);
+}
+.rotate-120 > .left {
+	animation: load-effect 1.2s linear 0.4s infinite;
+}
+.rotate-120 > .right {
+	animation: load-effect 1.2s linear 1.0s infinite;
+}
+.rotate-150 {
+	transform: rotate(150deg);
+}
+.rotate-150 > .left {
+	animation: load-effect 1.2s linear 0.5s infinite;
+}
+.rotate-150 > .right {
+	animation: load-effect 1.2s linear 1.1s infinite;
+}
+@keyframes load-effect {
+	0% {
+		opacity: 0;
+	}
+	100% {
+		opacity: 1;
+	}
+}
+
+

+ 324 - 0
addin/res/ManagerDesktop/entityCheck.html

@@ -0,0 +1,324 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<title>错误页</title>
+		<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
+		<link rel="stylesheet" type="text/css" href="css/errType.css" />
+		<link rel="stylesheet" type="text/css" href="css/loading.css" />
+		<link rel="stylesheet" type="text/css" href="css/non-ie-style.css" /> 
+		<link rel="stylesheet" type="text/css" href="css/loading.css" />
+
+		<style>
+			.entity-checkout h3,
+			.reset-dot{
+				margin-bottom: 30px;
+			}
+			.entity-item{
+				display: none;
+			}
+			.iframe-box{
+				flex-direction: column;
+				justify-content: center;
+				align-items: center;
+			}
+			#RSAReseting{
+				display: none;
+			}
+			#RSAReseting .btn-blue{
+				display: none;
+				margin-top: 70px;
+			}
+			nav{
+				margin-bottom: 0px;
+			}
+		</style>
+	</head>
+	<body class="errType">
+		<nav>
+			<div class="logo">
+				<img width="100%" src="./images/logo_cmb.png" />
+			</div>
+			<ul id="navBtns">
+				<li class="fz_20" id="downLoadConfig" onclick="downLoadv3('auto')">	下载集中配置 </li>
+				<li class="fz_20" id="resetPsd" onclick="resetRSA()">	重置密钥 </li>
+				<li class="fz_20" onclick="RebootShell()">	重启应用 </li>
+				<li class="fz_20" onclick="RebootComputer()">	重启计算机 </li>
+				<li class="fz_20" onclick="PowerOff()">	关机 </li>
+				<li class="fz_20" id="minimize" onclick="Minimize()">	最小化 </li>
+			</ul>
+		</nav>
+		<div class="hareword-info entity-checkout" id="entityCheckout">
+			<h3 class="fz_44" id="title">网络连接异常或无网络访问权限</h3>
+			<div class="result-wrap">
+				<div class="result-item">
+					<label class="fz_28">终端号</label>
+					<span class="fz_28 terminalNo"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">当前时间</label>
+					<span class="fz_28 currDate"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">终端版本</label>
+					<span class="fz_28 termVersion"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">准入地址</label>
+					<span class="fz_28 urlAccessAddr"></span>
+				</div>
+			</div>
+			<!-- 硬件检测Start -->
+			<div class="entity-box">
+				<div class="entity-check" id="entityList">
+					<div class="entity-item netCardLink">
+						<h5 class="fz_28"><i class="icon-type"></i>网卡连接</h5>
+						<p class="fz_24"></p>
+					</div>
+					<div class="entity-item checkNet">
+						<h5 class="fz_28"><i class="icon-type"></i>网络连接</h5>
+						<p class="fz_24"></p>
+					</div>
+					<div class="entity-item bizLinkDetect">
+						<h5 class="fz_28"><i class="icon-type"></i>后台服务</h5>
+						<p class="fz_24"></p>
+					</div>
+				</div>
+				<button class="btn-blue" id="retestBtn" disabled="true" onclick="retestFn()">检测中<dot class="test-dot">●●●</dot></button>
+			</div>
+			<!-- 硬件检测End -->
+		</div>
+
+		<!-- 二维码后 重置设备密钥Start -->
+		<div class="hareword-info RSA-reseting" id="RSAReseting">
+			<h3 class="fz_44 reset-dot" id="restDot">重置设备密钥中,稍后自动重启应用<dot class="dot">●●●●●●</dot></h3>
+			<div class="result-wrap">
+				<div class="result-item">
+					<label class="fz_28">终端号</label>
+					<span class="fz_28 terminalNo"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">当前时间</label>
+					<span class="fz_28 currDate"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">终端版本</label>
+					<span class="fz_28 termVersion"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">准入地址</label>
+					<span class="fz_28 urlAccessAddr"></span>
+				</div>
+			</div>
+		</div>
+		<!-- 二维码后 重置设备密钥Start -->
+
+		<!-- 初始化二维码验证 -->
+		<div class="iframe-box" id="scanIdentity">
+			<iframe frameborder="no" border="0" allowtransparency="yes" allow="microphone;camera;midi;encrypted-media;"
+				height="215" width="300" id="iframeSrc" src=""></iframe>
+			<p>请完成招乎扫码认证</p>
+			<button class="btn-link fz_24" onclick="exit()">退出</button>
+		</div>
+		<!-- 初始化二维码验证 -->
+		
+		<!-- 提示框 -->
+		<div class="modal-box" id="modalPrompt">
+			<div class="coverBg"></div>
+			<div class="modal" id="modal">
+				<img src="./images/success.png" />
+				<p class="fz_24" id="errTips"></p>
+				<button class="fz_23 btn-blues" onclick="closeModal('prompt')">确定</button>
+			</div>
+		</div>
+		<!-- 提示框 -->
+
+		<!-- 二次确认提示框 -->
+		<div class="modal-box" id="modalConfirm">
+			<div class="coverBg"></div>
+			<div class="modal" id="modalErr">
+				<h3 class="fz_32 " id="errTipsErr">确认重启应用</h3>
+				<div class="btns">
+					<button class="btn-gray fz_23" onclick="clickSure()">确 定</button>
+					<button class="btn-blues fz_23" onclick="closeModal('confirm')">取 消</button>
+				</div>
+			</div>
+		</div>
+		<!-- 二次确认提示框 -->
+		<!-- 退出提示框 -->
+		<div class="modal-box" id="modalExit">
+			<div class="coverBg"></div>
+			<div class="box">
+				请稍等,应用即将退出
+			</div>
+		</div>
+		<!-- 退出提示框 -->
+
+		<!-- 下载集中配置 Start -->
+		<div class="toast_box" id="ManuallyDownload">
+			<div class="modal_warpper">
+				<div class="box_wrapper" style="margin-top: 50px;">
+					<div class="modal_title">手动下载</div>
+					<div class="input_wrapper">
+						<input name="centerConfigUrl" placeholder="请输入集中配置下载地址" class="inputURL" oninput="changeInput(this)"/>
+					</div>
+					<div id="ManuallyDownloadError" class="input_error">集中配置下载失败</div>
+				</div>
+				<div class="btn_wrapper">
+					<div class="btn_cancel"  onclick="exit()">返回</div>
+					<button class="btn_confirm" onclick="downLoadv3('manual')" disabled="true" id="btn-downLoad">下载</button>
+				</div>
+			</div>
+		</div>
+
+		<div class="toast_box" id="toastErrorBox">
+			<div class="toast_wrapper">
+				<div class="box_wrapper">
+					<img src="./images/warningCircle.png" class="wran_icon"/>
+					<p id="toastErrTips">下载集中配置成功</p>
+				</div>
+			</div>
+		</div>
+
+		<div class="toast_box" id="modalErrorBox">
+			<div class="modal_warpper">
+				<div class="box_wrapper" style="margin-top: 50px;">
+					<div class="modal_title">下载集中配置</div>
+					<div id="modalErrTips">目标地址异常,请联系总行信息技术部处理,是否进行手动下载?</div>
+				</div>
+				<div class="btn_wrapper">
+					<div class="btn_cancel" onclick="closeModal('toast')">返回</div>
+					<div class="btn_confirm" onclick="showManuallyDownloadModal()">确认</div>
+				</div>
+			</div>
+		</div>
+
+		<div class="toast_box" id="boxRestart">
+			<div class="modal_warpper">
+				<div class="box_wrapper" style="margin-top: 20px;">
+					<div class="modal_title">重启应用</div>
+					<div class="restart_span">
+						集中配置已完成下载,重启后生效(地址:
+						<span id="configUrl"></span>
+						)
+					</div>
+				</div>
+				<div class="rows_restart">
+					<span>
+						<span id="restart-time">29</span>
+						<span>秒后自动重启</span>
+					</span>
+					<button class="btn_confirm" onclick="restart()">重启应用</button>
+				</div>
+			</div>
+		</div>
+
+		<div id='loading_mask'>
+			<div class='loading_wrapper'>
+				<!-- loading 菊花旋转-->
+				<div class='loading_icon_wrapper'>
+					<div class='loading_icon'>
+						<div class="load-line rotate-0">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div class="load-line rotate-30">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div class="load-line rotate-60">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div class="load-line rotate-90">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div class="load-line rotate-120">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div class="load-line rotate-150">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div id="circle-center"></div>
+					</div>
+				</div>
+				<!-- loading 菊花旋转-->
+				<div class='loading_title'>
+					<span>正在下载中</span>
+					<span class="loading_point"></span>
+					<span class="loading_point"></span>
+					<span class="loading_point"></span>
+				</div>
+			</div>
+		</div>
+		<!-- 下载集中配置 End-->
+
+		<!-- loading -->
+		<div id='loadContent'>
+			<div class="back_cover" ></div>
+			<div class='loading' id='loading'>
+				<div class='circle circle1'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+				<div class='circle circle2'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+				<div class='circle circle3'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+			</div>
+		</div>
+		<!-- loading -->
+	</body>
+	<script type="text/javascript" src="Include/LsyCookie.js"></script>
+	<script type="text/javascript" src="js/common.js"></script>
+	<script type="text/javascript" src="js/websocket.js"></script>
+	<script type="text/javascript" src="js/webSocketBase.js"></script>
+	<script type="text/javascript" src="js/entityMessage.js"></script>
+	<script type="text/javascript" src="js/eventEmitter.js"></script>
+	<script type="text/javascript" src="js/innerEventEmitter.js"></script>
+	<script type="text/javascript" src="js/errorCodeEnum.js"></script>
+	<script type="text/javascript" src="js/entityService.js"></script>
+	<script type="text/javascript" src="Include/jQuery/js/jquery.min.js" ></script>
+	<script type="text/javascript" src="js/entityCheck.js"></script>
+	<script type="text/javascript" src="js/getTerminalInfo.js"></script>
+	<script type="text/javascript" src="js/navOprator.js"></script>
+	<script>
+		getBizLinks()
+		
+		getAuthErrMsg() //title,msg
+		function getAuthErrMsg(){
+			let req = new Request()
+			let timeoutFn= setTimeout(function(){
+				let tips = 'GetAuthErrMsg 请求超时'
+				ModalPrompt(tips, 'pathN')
+			},5000)
+			HealthManagerService.GetAuthErrMsg(req, function(ret) {
+				logEvent("GetAuthErrMsg ret: "+JSON.stringify(ret));
+				console.log("GetAuthErrMsg ret: "+JSON.stringify(ret));
+				if(ret){
+					clearTimeout(timeoutFn);
+					if(ret.errorCode==0){
+						$('#title').html(ret.errMsg)
+					}else{
+						$('#title').html('网络连接异常或无网络访问权限')
+					}
+				}
+				
+			})
+		}
+	</script>
+	
+</html>

+ 190 - 48
addin/res/ManagerDesktop/errPage.html

@@ -13,7 +13,8 @@
 			<div class="logo">
 				<img width="100%" src="./images/logo_cmb.png" />
 			</div>
-			<ul>
+			<ul id="navBtns">
+				<li class="fz_24" id="downLoadConfig" onclick="downLoadv3('auto')">	下载集中配置 </li>
 				<li class="fz_24" id="resetPsd" onclick="resetRSA()">	重置密钥 </li>
 				<li class="fz_24" onclick="RebootShell()">	重启应用 </li>
 				<li class="fz_24" onclick="RebootComputer()">	重启计算机 </li>
@@ -21,17 +22,21 @@
 				<li class="fz_24" id="minimize" onclick="Minimize()">	最小化 </li>
 			</ul>
 		</nav>
-
+		<!--卡库 start -->
+		<div class="cardStoreIsBusy" id="CardStoreIsBusy">
+			<p id="localDate"></p>
+			<h1 id="localTime"></h1>
+		</div>
+		<!--卡库 end   -->
 		<p class="fz_32" id="RestartTxt"></p>
-		<div class="imgDiv">
-			<img id="AuthFailBg" src="./images/close.png" onerror="javascript:this.src='./images/close.png'" />
+		<div class="imgDiv"  id="imgDiv">
+			<img id="AuthFailBg"  onerror="javascript:this.src='./images/close.png'" />
 		</div>
 		<div class="terminal-time">
 			<span class="fz_32" id="TerminalNo"></span>
 			<span class="fz_32" id="ErrTime"></span>
 		</div>
 
-
 		<p class="fz_32" id="SuspensionTxt"></p>
 		<p class="fz_32" id="PromptTxt"></p>
 
@@ -45,54 +50,153 @@
 				</div>
 			</div>
 		</div>
-		<div class="iframeDiv">
+
+		<div class="iframeDiv boxDownload">
 			<div class="initPsd">
-			<h3 class="fz_32">重置设备密钥</h3>
-			<div class="config">
-				<h5 class="fz_24">下载集中配置</h5>
-				<div class="rows">
-					<label for="configAddr">集中配置地址</label>
-					<input type="text" name="configAddr" style="width:360px;" placeholder="请输入..." onblur="onblurAddr('config')" />
+				<h3 class="fz_32">下载集中配置</h3>
+				<div class="config">
+					<h5 class="fz_24">下载地址</h5>
+					<div class="rows configAddr" >
+						<!-- <label for="configAddr">集中配置地址</label> -->
+						<span id="urlConfigAddr"></span>
+					</div>
 				</div>
-				<div class="rows" style="display:none;">
-					<label for="configPort">集中配置端口</label>
-					<input type="number" name="configPoint" placeholder="请输入..." />
+				<div class="btn">
+					<button class="btn-blue" onclick="downLoad()">开始下载</button>
+					<button class="btn-gray" onclick="exit()">退出</button>
 				</div>
-				<button class="btn-blue" onclick="downLoad()">开始下载</button>
 			</div>
+		</div>
 
-			<div class="setting">
-				<h5 class="fz_24">下载主密钥</h5>
-				<div class="rows">
-					<label for="accessAddr">准入服务地址</label>
-					<input type="text" name="accessAddr" placeholder="请输入..." onblur="onblurAddr('access')" />
+		<div class="toast_box" id="boxRestart">
+			<div class="modal_warpper">
+				<div class="box_wrapper" style="margin-top: 50px;">
+					<div class="modal_title">重启应用</div>
+					<div class="restart_span">
+						集中配置已完成下载,重启后生效(地址:
+						<span id="configUrl"></span>
+						)
+					</div>
 				</div>
-				<div class="rows">
-					<label for="accessPort">准入服务端口</label>
-					<input type="number" name="accessPort"  placeholder="请输入..." />
+				<div class="rows_restart">
+					<span>
+						<span id="restart-time">29</span>
+						<span>秒后自动重启</span>
+					</span>
+					<button class="btn_confirm" onclick="restart()">重启应用</button>
 				</div>
-				<div class="rows">
-					<label for="account">分行维护用户</label>
-					<input type="text" name="account" placeholder="请输入..." />
+			</div>
+		</div>
+
+		<div class="toast_box" id="ManuallyDownload">
+			<div class="modal_warpper">
+				<div class="box_wrapper" style="margin-top: 50px;">
+					<div class="modal_title">手动下载</div>
+					<div class="input_wrapper">
+						<input name="centerConfigUrl" placeholder="请输入集中配置下载地址" class="inputURL" oninput="changeInput(this)"/>
+					</div>
+					<div id="ManuallyDownloadError" class="input_error">集中配置下载失败</div>
 				</div>
-				<div class="rows">
-					<label for="password">分行用户密码</label>
-					<input type="password" name="password" maxlength="8" placeholder="请输入..." />
+				<div class="btn_wrapper">
+					<div class="btn_cancel"  onclick="exit()">返回</div>
+					<button class="btn_confirm" onclick="downLoadv3('manual')" disabled="true" id="btn-downLoad">下载</button>
 				</div>
-				<div class="btn">
+			</div>
+		</div>
+
+		<div class="iframeDiv boxRSA">
+			<div class="logo-img">
+				<img width="100%" src="./images/logo_cmb.png" />
+			</div>
+			<div class="initPsd" style="display: flex;flex-direction: column;align-items: center;">
+				<h3 class="fz_32 tipsing"></h3>
+				<div class="result-wrap">
+					<div class="result-item">
+						<label>终端号</label>
+						<span id="terminalNo">7555980143</span>
+					</div>
+					<div class="result-item">
+						<label>当前时间</label>
+						<span id="currDate">2023-04-10 15:30:00</span>
+					</div>
+					<div class="result-item">
+						<label>终端版本</label>
+						<span id="termVersion">v5.0.0.1</span>
+					</div>
+					<div class="result-item">
+						<label>准入地址</label>
+						<span id="urlAccessAddr">https://accessinit.passst.cmbchina.cn</span>
+					</div>
+				</div>
+				<div class="iframe-box">
+					<iframe frameborder="no" border="0" allowtransparency="yes" allow="microphone;camera;midi;encrypted-media;"
+						height="215" id="iframeSrc" src=""></iframe>
+					<p>请完成招乎扫码认证</p>
+				</div>
+				<button class="btn-link" onclick="exit()">退出</button>
+
+				<!-- <div class="setting">
+					<h5 class="fz_24">下载主密钥</h5>
+					<div class="rows configAddr"> 
+						<label for="accessAddr">初始化服务地址</label>
+					 <span id="urlAccessAddr"></span>
+					</div> 
+				
+					<div class="rows">
+						<label for="account">分行维护用户</label>
+						<input type="text" name="account" placeholder="请输入..." />
+					</div>
+					<div class="rows">
+						<label for="password">分行用户密码</label>
+						<input type="password" name="password" maxlength="8" placeholder="请输入..." />
+					</div>
+				</div> -->
+				<!-- <div class="btn">
 					<button class="btn-blue" onclick="ResetRSA()">重置设备密钥</button>
 					<button class="btn-gray" onclick="exit()">退出</button>
+				</div> -->
+			</div>
+		</div>
+
+
+		<div class="modal-box" id="modalBox">
+			<div class="coverBg"></div>
+			<div class="modal" id="modal">
+				<img src="./images/success.png" />
+				<p class="fz_24" id="errTips">下载集中配置成功</p>
+				<button class="btn-blue fz_23" onclick="closeModal('modal')">确定</button>
+			</div>
+		</div>
+
+		<div class="toast_box" id="toastErrorBox">
+			<div class="toast_wrapper">
+				<div class="box_wrapper">
+					<img src="./images/warningCircle.png" class="wran_icon"/>
+					<p id="toastErrTips">下载集中配置成功</p>
 				</div>
 			</div>
+		</div>
 
-			<div class="modal-box" id="modalBox">
-				<div class="coverBg"></div>
-				<div class="modal" id="modal">
-					<img src="./images/success.png" />
-					<p class="fz_24" id="errTips">下载集中配置成功</p>
-					<button class="btn-blue fz_23" onclick="closeModal()">确定</button>
+		<div class="toast_box" id="modalErrorBox">
+			<div class="modal_warpper">
+				<div class="box_wrapper" style="margin-top: 50px;">
+					<div class="modal_title">下载集中配置</div>
+					<div id="modalErrTips">目标地址异常,请联系总行信息技术部处理,是否进行手动下载?</div>
+				</div>
+				<div class="btn_wrapper">
+					<div class="btn_cancel" onclick="closeModal('toast')">返回</div>
+					<div class="btn_confirm" onclick="showManuallyDownloadModal()">确认</div>
 				</div>
 			</div>
+		</div>
+
+		<div class="exitTips">
+			<div class="coverBg"></div>
+			<div class="box">
+				<!-- 应用将在<span id="exitColck"></span>s之后退出 -->
+				请稍等,应用即将退出
+			</div>
+		</div>
 
 			<!-- loading -->
 			<div id='loadContent'>
@@ -119,15 +223,53 @@
 				</div>
 			</div>
 			<!-- loading -->
-			</div>
-			</div>
 
-		<div class="exitTips">
-			<div class="coverBg"></div>
-			<div class="box">
-				应用将在<span id="exitColck"></span>s之后退出
+			<div id='loading_mask'>
+				<div class='loading_wrapper'>
+					<!-- loading 菊花旋转-->
+					<div class='loading_icon_wrapper'>
+						<div class='loading_icon'>
+							<div class="load-line rotate-0">
+								<span class="left"></span>
+								<span class="right"></span>
+							</div>
+							<div class="load-line rotate-30">
+								<span class="left"></span>
+								<span class="right"></span>
+							</div>
+							<div class="load-line rotate-60">
+								<span class="left"></span>
+								<span class="right"></span>
+							</div>
+							<div class="load-line rotate-90">
+								<span class="left"></span>
+								<span class="right"></span>
+							</div>
+							<div class="load-line rotate-120">
+								<span class="left"></span>
+								<span class="right"></span>
+							</div>
+							<div class="load-line rotate-150">
+								<span class="left"></span>
+								<span class="right"></span>
+							</div>
+							<div id="circle-center"></div>
+						</div>
+					</div>
+					<!-- loading 菊花旋转-->
+					<div class='loading_title'>
+						<span>正在下载中</span>
+						<span class="loading_point"></span>
+						<span class="loading_point"></span>
+						<span class="loading_point"></span>
+					</div>
+				</div>
 			</div>
-		</div>
+			
+			
+			
+			
+
 	</body>
 	<script type="text/javascript" src="Include/LsyCookie.js"></script>
 	<script type="text/javascript" src="js/common.js"></script>
@@ -148,9 +290,9 @@
 			$("input[name='configAddr']").focus(function(){
 				NumberFocus()
 			})
-			//$("input[name='configPoint']").focus(function(){
-			//	NumberFocus()
-			//})
+			$("input[name='configPoint']").focus(function(){
+				NumberFocus()
+			})
 			$("input[name='accessAddr']").focus(function(){
 				NumberFocus()
 			})
@@ -169,7 +311,7 @@
 			})
 		}
 	</script>
-
+	<script type="text/javascript" src="js/calendar.js"></script>
 	<script type="text/javascript" src="js/initPsd.js"></script>
 	<script type="text/javascript" src="js/errPage.js"></script>
 </html>

+ 312 - 0
addin/res/ManagerDesktop/homePageErr.html

@@ -0,0 +1,312 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<title>错误页</title>
+		<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
+		<link rel="stylesheet" type="text/css" href="css/errType.css" />
+		<link rel="stylesheet" type="text/css" href="css/loading.css" />
+		<link rel="stylesheet" type="text/css" href="css/non-ie-style.css" /> 
+		<link rel="stylesheet" type="text/css" href="css/loading.css" />
+
+		<style>
+			.entity-checkout h3,
+			.reset-dot{
+				margin-bottom: 30px;
+			}
+			.entity-item{
+				display: none;
+			}
+			.iframe-box{
+				flex-direction: column;
+				justify-content: center;
+				align-items: center;
+			}
+			#RSAReseting{
+				display: none;
+			}
+			#RSAReseting .btn-blue{
+				display: none;
+				margin-top: 70px;
+			}
+			nav{
+				margin-bottom: 0px;
+			}
+		</style>
+	</head>
+	<body class="errType">
+		<nav>
+			<div class="logo">
+				<img width="100%" src="./images/logo_cmb.png" />
+			</div>
+			<ul id="navBtns">
+				<li class="fz_20" id="downLoadConfig" onclick="downLoadv3('auto')">	下载集中配置 </li>
+				<li class="fz_20" id="resetPsd" onclick="resetRSA()">	重置密钥 </li>
+				<li class="fz_20" onclick="RebootShell()">	重启应用 </li>
+				<li class="fz_20" onclick="RebootComputer()">	重启计算机 </li>
+				<li class="fz_20" onclick="PowerOff()">	关机 </li>
+				<li class="fz_20" id="minimize" onclick="Minimize()">	最小化 </li>
+			</ul>
+		</nav>
+		<div class="hareword-info entity-checkout" id="entityCheckout">
+			<h3 class="fz_44" id="title">业务首页加载失败</h3>
+			<div class="result-wrap">
+				<div class="result-item">
+					<label class="fz_28">终端号</label>
+					<span class="fz_28 terminalNo"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">当前时间</label>
+					<span class="fz_28 currDate"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">终端版本</label>
+					<span class="fz_28 termVersion"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">准入地址</label>
+					<span class="fz_28 urlAccessAddr"></span>
+				</div>
+			</div>
+			<!-- 硬件检测Start -->
+			<div class="entity-box">
+				<div class="entity-check" id="entityList">
+					<div class="entity-item netCardLink">
+						<h5 class="fz_28"><i class="icon-type"></i>网卡连接</h5>
+						<p class="fz_24"></p>
+					</div>
+					<div class="entity-item checkNet">
+						<h5 class="fz_28"><i class="icon-type"></i>网络连接</h5>
+						<p class="fz_24"></p>
+					</div>
+					<div class="entity-item bizLinkDetect">
+						<h5 class="fz_28"><i class="icon-type"></i>后台服务</h5>
+						<p class="fz_24"></p>
+					</div>
+				</div>
+				<button class="btn-blue" id="retestBtn" disabled="true" onclick="retestFn()">检测中<dot class="test-dot">●●●</dot></button>
+			</div>
+			<!-- 硬件检测End -->
+		</div>
+
+		<!-- 二维码后 重置设备密钥Start -->
+		<div class="hareword-info RSA-reseting" id="RSAReseting">
+			<h3 class="fz_44 reset-dot" id="restDot">重置设备密钥中,稍后自动重启应用<dot class="dot">●●●●●●</dot></h3>
+			<div class="result-wrap">
+				<div class="result-item">
+					<label class="fz_28">终端号</label>
+					<span class="fz_28 terminalNo"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">当前时间</label>
+					<span class="fz_28 currDate"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">终端版本</label>
+					<span class="fz_28 termVersion"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">准入地址</label>
+					<span class="fz_28 urlAccessAddr"></span>
+				</div>
+			</div>
+		</div>
+		<!-- 二维码后 重置设备密钥Start -->
+
+		<!-- 初始化二维码验证 -->
+		<div class="iframe-box" id="scanIdentity">
+			<iframe frameborder="no" border="0" allowtransparency="yes" allow="microphone;camera;midi;encrypted-media;"
+				height="215" width="300" id="iframeSrc" src=""></iframe>
+			<p>请完成招乎扫码认证</p>
+			<button class="btn-link fz_24" onclick="exit()">退出</button>
+		</div>
+		<!-- 初始化二维码验证 -->
+		
+		<!-- 提示框 -->
+		<div class="modal-box" id="modalPrompt">
+			<div class="coverBg"></div>
+			<div class="modal" id="modal">
+				<img src="./images/success.png" />
+				<p class="fz_24" id="errTips"></p>
+				<button class="fz_23 btn-blues" onclick="closeModal('prompt')">确定</button>
+			</div>
+		</div>
+		<!-- 提示框 -->
+
+		<!-- 二次确认提示框 -->
+		<div class="modal-box" id="modalConfirm">
+			<div class="coverBg"></div>
+			<div class="modal" id="modalErr">
+				<h3 class="fz_32 " id="errTipsErr">确认重启应用</h3>
+				<div class="btns">
+					<button class="btn-gray fz_23" onclick="clickSure()">确 定</button>
+					<button class="btn-blues fz_23" onclick="closeModal('confirm')">取 消</button>
+				</div>
+			</div>
+		</div>
+		<!-- 二次确认提示框 -->
+		<!-- 退出提示框 -->
+		<div class="modal-box" id="modalExit">
+			<div class="coverBg"></div>
+			<div class="box">
+				请稍等,应用即将退出
+			</div>
+		</div>
+		<!-- 退出提示框 -->
+
+		<!-- 下载集中配置 Start -->
+		<div class="toast_box" id="ManuallyDownload">
+			<div class="modal_warpper">
+				<div class="box_wrapper" style="margin-top: 50px;">
+					<div class="modal_title">手动下载</div>
+					<div class="input_wrapper">
+						<input name="centerConfigUrl" placeholder="请输入集中配置下载地址" class="inputURL" oninput="changeInput(this)"/>
+					</div>
+					<div id="ManuallyDownloadError" class="input_error">集中配置下载失败</div>
+				</div>
+				<div class="btn_wrapper">
+					<div class="btn_cancel"  onclick="exit()">返回</div>
+					<button class="btn_confirm" onclick="downLoadv3('manual')" disabled="true" id="btn-downLoad">下载</button>
+				</div>
+			</div>
+		</div>
+
+		<div class="toast_box" id="toastErrorBox">
+			<div class="toast_wrapper">
+				<div class="box_wrapper">
+					<img src="./images/warningCircle.png" class="wran_icon"/>
+					<p id="toastErrTips">下载集中配置成功</p>
+				</div>
+			</div>
+		</div>
+
+		<div class="toast_box" id="modalErrorBox">
+			<div class="modal_warpper">
+				<div class="box_wrapper" style="margin-top: 50px;">
+					<div class="modal_title">下载集中配置</div>
+					<div id="modalErrTips">目标地址异常,请联系总行信息技术部处理,是否进行手动下载?</div>
+				</div>
+				<div class="btn_wrapper">
+					<div class="btn_cancel" onclick="closeModal('toast')">返回</div>
+					<div class="btn_confirm" onclick="showManuallyDownloadModal()">确认</div>
+				</div>
+			</div>
+		</div>
+
+		<div class="toast_box" id="boxRestart">
+			<div class="modal_warpper">
+				<div class="box_wrapper" style="margin-top: 20px;">
+					<div class="modal_title">重启应用</div>
+					<div class="restart_span">
+						集中配置已完成下载,重启后生效(地址:
+						<span id="configUrl"></span>
+						)
+					</div>
+				</div>
+				<div class="rows_restart">
+					<span>
+						<span id="restart-time">29</span>
+						<span>秒后自动重启</span>
+					</span>
+					<button class="btn_confirm" onclick="restart()">重启应用</button>
+				</div>
+			</div>
+		</div>
+
+		<div id='loading_mask'>
+			<div class='loading_wrapper'>
+				<!-- loading 菊花旋转-->
+				<div class='loading_icon_wrapper'>
+					<div class='loading_icon'>
+						<div class="load-line rotate-0">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div class="load-line rotate-30">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div class="load-line rotate-60">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div class="load-line rotate-90">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div class="load-line rotate-120">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div class="load-line rotate-150">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div id="circle-center"></div>
+					</div>
+				</div>
+				<!-- loading 菊花旋转-->
+				<div class='loading_title'>
+					<span>正在下载中</span>
+					<span class="loading_point"></span>
+					<span class="loading_point"></span>
+					<span class="loading_point"></span>
+				</div>
+			</div>
+		</div>
+		<!-- 下载集中配置 End-->
+
+		<!-- loading -->
+		<div id='loadContent'>
+			<div class="back_cover" ></div>
+			<div class='loading' id='loading'>
+				<div class='circle circle1'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+				<div class='circle circle2'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+				<div class='circle circle3'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+			</div>
+		</div>
+		<!-- loading -->
+	</body>
+	<script type="text/javascript" src="Include/LsyCookie.js"></script>
+	<script type="text/javascript" src="js/common.js"></script>
+	<script type="text/javascript" src="js/websocket.js"></script>
+	<script type="text/javascript" src="js/webSocketBase.js"></script>
+	<script type="text/javascript" src="js/entityMessage.js"></script>
+	<script type="text/javascript" src="js/eventEmitter.js"></script>
+	<script type="text/javascript" src="js/innerEventEmitter.js"></script>
+	<script type="text/javascript" src="js/errorCodeEnum.js"></script>
+	<script type="text/javascript" src="js/entityService.js"></script>
+	<script type="text/javascript" src="Include/jQuery/js/jquery.min.js" ></script>
+	<script type="text/javascript" src="js/entityCheck.js"></script>
+	<script type="text/javascript" src="js/getTerminalInfo.js"></script>
+	<script type="text/javascript" src="js/navOprator.js"></script>
+	<script>
+		getBizLinks()
+		
+		// getAuthErrMsg() //title,msg
+		function getAuthErrMsg(){
+			let Request =  GetRequest();
+			if(Request['errmsg']){
+				$("#title").html(Request['errmsg'])
+			}else{
+				$("#title").html('业务首页加载失败')
+			}
+		}
+	</script>
+	
+</html>

BIN
addin/res/ManagerDesktop/images/CardStoreIsBusy.png


BIN
addin/res/ManagerDesktop/images/config.png


BIN
addin/res/ManagerDesktop/images/warningCircle.png


+ 3 - 3
addin/res/ManagerDesktop/initPassword.html

@@ -30,9 +30,9 @@
 			<h5 class="fz_24">下载集中配置</h5>
 			<div class="rows">
 				<label for="configAddr">集中配置地址</label>
-				<input type="text" name="configAddr" style="width:460px;" onfocus="En26Focus()" placeholder="请输入..." onblur="onblurAddr('config')" />
+				<input type="text" name="configAddr"  onfocus="En26Focus()" placeholder="请输入..." onblur="onblurAddr('config')" />
 			</div>
-			<div class="rows"  style="display:none;">
+			<div class="rows">
 				<label for="configPort">集中配置端口</label>
 				<input type="number" name="configPoint" onfocus="NumberFocus()" onblur="UnFocus()" placeholder="请输入..." />
 			</div>
@@ -68,7 +68,7 @@
 			<div class="modal" id="modal">
 				<img src="./images/success.png" />
 				<p class="fz_24" id="errTips">下载集中配置成功</p>
-				<button class="btn-blue fz_23" onclick="closeModal()">确定</button>
+				<button class="btn-blue fz_23" onclick="closeModal('modal')">确定</button>
 			</div>
 		</div>
 

+ 7 - 0
addin/res/ManagerDesktop/installMessage.html

@@ -0,0 +1,7 @@
+<html>
+    <head>
+    </head>
+    <body style="background:rgb(255, 240, 192); overflow-x:hidden; overflow-y:hidden">
+        <p id="t1" style="font-size:50px; text-align:center;"> 软件升级安装中,请稍等…… </p>
+    </body>
+</html>

File diff suppressed because it is too large
+ 169 - 0
addin/res/ManagerDesktop/js/calendar.js


+ 38 - 1
addin/res/ManagerDesktop/js/common.js

@@ -326,4 +326,41 @@ function log(methodID,msg){
     //         return err; 
     //     }
     // });
-  }
+  }
+
+  function RetnWF3() {
+    var wstr="";  
+    var date=new Date(); 
+    var day=date.getDay();
+    switch (day) {  
+    case 0:wstr="星期日";break;
+    case 1:wstr="星期一";break; 
+    case 2:wstr="星期二";break;
+    case 3:wstr="星期三";break; 
+    case 4:wstr="星期四";break; 
+    case 5:wstr="星期五";break;
+    case 6:wstr="星期六";break; 
+    }  
+     return wstr;
+}
+
+// 日期时间补零
+function getZero(num){
+    if(parseInt(num)<10){
+        num = '0'+num
+    }
+    return num
+}
+
+// 获取当前时间 YYYY-MM-DD hh-mm-ss
+function getFamtterTimer(time){
+    let date = new Date(time)
+    let Y = date.getFullYear()
+    let M = date.getMonth() + 1
+    let D = date.getDate()
+    let h = date.getHours()
+    let m = date.getMinutes()
+    let s = date.getSeconds()
+    let dateTime = Y+'-'+getZero(M)+'-'+getZero(D)+' '+getZero(h)+':'+getZero(m)+':'+getZero(s)
+    return dateTime
+}

+ 291 - 0
addin/res/ManagerDesktop/js/entityCheck.js

@@ -0,0 +1,291 @@
+let retest =['N','N']
+let Len = 2
+let resultY = ['Y','Y']
+
+let set_retest = function(val,event){
+	retest = val
+	if(event){
+		event()
+	}
+}
+
+let test = function(){
+  if(retest.join('') == resultY.join('')){
+    $('#retestBtn').attr('disabled',false)
+    $('#retestBtn').html('重新检测')
+  }
+}
+
+let testResult =['','']
+
+let set_testResult = function(val,event){
+	testResult = val
+	if(event){
+		event()
+	}
+}
+
+let IsRetest = false
+// 所有实体检测成功,自动跳转业务首页
+let goBusiHome = function(){
+  if(testResult.join('').length==Len){
+
+    if(testResult.join('') == resultY.join('')){
+      $('#retestBtn').fadeOut()
+      if(IsRetest){
+        $('#retestBtn').fadeOut()
+        $('#modalExit .box').html('终端检测正常,应用即将重启')
+        setTimeout(()=>{
+          DeviceService.RebootShell()
+        },5000)
+        exitColck()
+      }
+    }else{
+      $('#retestBtn').fadeIn()
+    }
+  }
+  
+}
+
+function getBizLinks(){
+  let req = new Request()
+  req.filter = 1;
+  req.timeout = 60000;
+	let timeoutFn= setTimeout(function(){
+    retest[2] = 'Y'
+    set_retest(retest,test)
+
+    retest.push('N')
+    testResult.push(' ')
+    resultY.push('Y')
+    Len = 3
+
+    $('.bizLinkDetect').fadeIn();
+    let elem = document.querySelector('.bizLinkDetect .icon-type');
+    elem&&elem.classList.add('icon-err')
+    $('.bizLinkDetect p').html('「'+dateTime+'」后台服务地址获取失败')
+    testResult[2] = 'N'
+    set_testResult(testResult,goBusiHome)
+
+    // 配置接口返回后,调接口
+    getCheckNetType();
+		getNetCardLink();
+
+	},60000)
+
+	ResourceWatcherService.GetBizLinks(req, function(res) {
+		logEvent("GetBizLinks ret: "+JSON.stringify(res));
+    console.log("GetBizLinks ret: "+JSON.stringify(res));
+
+		if(res){
+			clearTimeout(timeoutFn);
+
+      let list = document.getElementById('entityList')
+      if(res.errorCode==0 ){
+        if(res.bizLinks.length>0){
+
+          for(let i=0; i<res.bizLinks.length; i++){
+            if(document.querySelector('.bizLinkDetect'+i) ){
+
+            }else{
+              list.innerHTML +='<div class="entity-item bizLinkDetect'+i+'">'+
+                '<h5 class="fz_28"><i class="icon-type icon-suc"></i>'+res.bizNames[i]+'</h5>'+
+                '<p class="fz_24"></p></div>'
+            }
+            getBizLinkDetect(res.bizLinks[i],res.bizNames[i],i)
+            retest.push('N')
+            testResult.push(' ')
+            resultY.push('Y')
+          }
+          Len = testResult.length
+        }
+
+      }else{
+        retest.push('N')
+        testResult.push(' ')
+        resultY.push('Y')
+        Len = 3
+
+        $('.bizLinkDetect').fadeIn();
+        let elem = document.querySelector('.bizLinkDetect .icon-type');
+        elem&&elem.classList.add('icon-err')
+        $('.bizLinkDetect p').html('「'+dateTime+'」后台服务地址获取失败')
+        testResult[2] = 'N'
+        set_testResult(testResult,goBusiHome)
+      }
+
+      // 配置接口返回后,调接口
+      getCheckNetType();
+      getNetCardLink();
+    }
+	})
+}
+
+function getCheckNetType(){
+  let req = new Request()
+  let date = +new Date
+  let dateTime = getFamtterTimer(date)
+
+	let timeoutFn= setTimeout(function(){
+		// '请求超时'
+    $('.checkNet').fadeIn();
+    let elem = document.querySelector('.checkNet .icon-type');
+		elem&&elem.classList.add('icon-err')
+    $('.checkNet p').html('「'+dateTime+'」网络连接检测失败')
+    retest[0] = 'Y'
+    set_retest(retest,test)
+    testResult[0] = 'N'
+    set_testResult(testResult,goBusiHome)
+	},60000)
+
+	ResourceWatcherService.CheckNetType(req, function(res) {
+		logEvent("CheckNetType ret: "+JSON.stringify(res));
+		if(res){
+			clearTimeout(timeoutFn);
+      retest[0] = 'Y'
+      set_retest(retest,test)
+
+      $('.checkNet').fadeIn();
+      let elem = document.querySelector('.checkNet .icon-type');
+      if(res.errorCode==0){
+        if(res.netType==0||res.netType==1){
+          elem&&elem.classList.add('icon-err')
+          $('.checkNet p').html('「'+dateTime+'」网络连接异常或无网络访问权限')
+          testResult[0] = 'N'
+          set_testResult(testResult,goBusiHome)
+        }else{
+          elem&&elem.classList.add('icon-suc')
+          $('.checkNet p').html('「'+dateTime+'」网络连接正常')
+          testResult[0] = 'Y'
+          set_testResult(testResult,goBusiHome)
+        }
+      }else{
+        elem&&elem.classList.add('icon-err')
+        $('.checkNet p').html('「'+dateTime+'」网络连接异常或无网络访问权限')
+        testResult[0] = 'N'
+        set_testResult(testResult,goBusiHome)
+      }
+		}
+	})
+}
+
+function getBizLinkDetect(url,urlTitle,idx){
+  let date = +new Date
+  let dateTime = getFamtterTimer(date)
+
+  let req = new Request()
+  req.bizLink = url
+	let timeoutFn= setTimeout(function(){
+		// '请求超时'
+    $('.bizLinkDetect'+idx).fadeIn();
+    let elem = document.querySelector('.bizLinkDetect'+idx+' .icon-type');
+		elem&&elem.classList.add('icon-err')
+    $('.bizLinkDetect'+idx+' p').html('「'+dateTime+'」'+urlTitle+'检测失败')
+    retest[2+idx] = 'Y'
+    set_retest(retest,test)
+    testResult[2+idx] = 'N'
+    set_testResult(testResult,goBusiHome)
+	},60000)
+
+	ResourceWatcherService.BizLinkDetect(req, function(res) {
+		logEvent("BizLinkDetect ret: "+JSON.stringify(res));
+		if(res){
+			clearTimeout(timeoutFn);
+      retest[2+idx] = 'Y'
+      set_retest(retest,test)
+
+      $('.bizLinkDetect'+idx).fadeIn();
+      let elem = document.querySelector('.bizLinkDetect'+idx+' .icon-type');
+      if(res.errorCode==0)
+      {
+        
+        if(res.bizLinkStatus){
+          elem&&elem.classList.add('icon-suc')
+          $('.bizLinkDetect'+idx+' p').html('「'+dateTime+'」'+urlTitle+'连接成功')
+          testResult[2+idx] = 'Y'
+          set_testResult(testResult,goBusiHome)
+        }else{
+          elem&&elem.classList.add('icon-err')
+          $('.bizLinkDetect'+idx+' p').html('「'+dateTime+'」'+urlTitle+'连接失败')
+          testResult[2+idx] = 'N'
+          set_testResult(testResult,goBusiHome)
+        }
+      }else{
+        elem&&elem.classList.add('icon-err')
+        $('.bizLinkDetect'+idx+' p').html('「'+dateTime+'」'+urlTitle+'连接失败')
+        testResult[2+idx] = 'N'
+        set_testResult(testResult,goBusiHome)
+      }
+     
+
+		}
+	})
+}
+
+// 网卡连接
+function getNetCardLink(){
+  let date = +new Date
+  let dateTime = getFamtterTimer(date)
+
+  let req = new Request()
+
+	let timeoutFn= setTimeout(function(){
+		// '请求超时'
+    $('.netCardLink').fadeIn();
+    let elem = document.querySelector('.netCardLink .icon-type');
+		elem&&elem.classList.add('icon-err')
+    $('.netCardLink p').html('「'+dateTime+'」网卡连接失败')
+    retest[1] = 'Y'
+    set_retest(retest,test)
+    testResult[1] = 'N'
+    set_testResult(testResult,goBusiHome)
+	},60000)
+
+	AccessAuthService.GetNetMsg(req, function(res) {
+		logEvent("GetNetMsg ret: "+JSON.stringify(res));
+		if(res){
+			clearTimeout(timeoutFn);
+      retest[1] = 'Y'
+      set_retest(retest,test)
+
+      $('.netCardLink').fadeIn();
+      let elem = document.querySelector('.netCardLink .icon-type');
+      if(res.errorCode==0)
+      { 
+        if(res.netStatus==1){
+          elem&&elem.classList.add('icon-suc')
+          $('.netCardLink p').html('「'+dateTime+'」网卡连接成功')
+          testResult[1] = 'Y'
+          set_testResult(testResult,goBusiHome)
+        }else{
+          elem&&elem.classList.add('icon-err')
+          $('.netCardLink p').html('「'+dateTime+'」网卡连接失败')
+          testResult[1] = 'N'
+          set_testResult(testResult,goBusiHome)
+        }
+      }else{
+        elem&&elem.classList.add('icon-err')
+        $('.netCardLink p').html('「'+dateTime+'」网卡连接失败')
+        testResult[1] = 'N'
+        set_testResult(testResult,goBusiHome)
+      }
+		}
+	})
+}
+
+function retestFn(){
+  IsRetest = true
+  retest =['N','N'];
+  testResult =['','']
+  resultY = ['Y','Y']
+  Len = 2
+
+  $('.entity-item').fadeOut();
+  $('#retestBtn').attr('disabled',true)
+  document.getElementById('retestBtn').innerHTML = '检测中<dot class="test-dot">●●●</dot>'
+  $('.icon-type').removeClass('icon-err icon-suc')
+
+  getBizLinks();
+
+  
+}

+ 318 - 17
addin/res/ManagerDesktop/js/entityService.js

@@ -1,3 +1,168 @@
+var UpgradeMgrService={
+    _serviceBase:{
+        entityName : 'UpgradeManager',
+        className : 'UpgradeMgrService'
+    },
+    _eventType: {
+        UpgradeStateEvent: 0,
+        UpgradeDownloadProgress: 2
+    },
+    _eventSignature : {
+        UpgradeStateEvent: -1650087685,
+        UpgradeDownloadProgress: -498820347
+    },
+    init:function(){
+        //start session
+        var sessionMsg = new Session();
+        sessionMsg.entity = this._serviceBase.entityName;
+        sessionMsg.class = this._serviceBase.className;
+        WebSocketBase.startSession(sessionMsg, () => {
+            logEvent("UpgradeMgrService startSession callback");
+        });
+
+        var registerMsg = new Register();
+        registerMsg.entity = this._serviceBase.entityName;
+        registerMsg.class = this._serviceBase.className;
+        WebSocketBase.registerEvent(registerMsg, (data) => {
+            logEvent("UpgradeMgrService registerEvent ret:"+JSON.stringify(data));
+            this.dispatchEvent(data);
+        });
+    },
+    dispatchEvent:function(msg) {
+        var recvEvt = JSON.parse(msg);
+        var { eventID, signatureID } = recvEvt;
+        // var _recvEvt = recvEvt;
+        // var eventID = _recvEvt.eventID;
+        // var signatureID = _recvEvt.signatureID
+        if(eventID == this._eventType.UpgradeStateEvent && signatureID == this._eventSignature.UpgradeStateEvent) {
+            EventEmitter.dispatch('UpgradeStateEvent', recvEvt);
+        }
+        else if(eventID == this._eventType.UpgradeDownloadProgress && signatureID == this._eventSignature.UpgradeDownloadProgress) {
+            EventEmitter.dispatch('UpgradeDownloadProgress', recvEvt);
+        }
+    }
+};
+
+var ResourceWatcherService={
+    _serviceBase:{
+        entityName : 'ResourceWatcher',
+        className : 'ResourceWatcherService'
+    },
+    _methodID : {
+        UninstallThirdPartyProgram: 14,
+        CheckNetType: 5,
+        GetBizLinks: 6,
+        BizLinkDetect: 7,
+        CheckBatteryStatus: 18
+    },
+            
+    _methodSignature :{
+        UninstallThirdPartyProgram: -2137706699,
+        CheckNetType: 1341887614,
+        GetBizLinks: 651862197,
+        BizLinkDetect: 1476437131,
+        CheckBatteryStatus: 1948506531
+    },
+    _eventType: {
+        BrowserCacheClean: 2,
+        BatteryStatus: 3,
+        NetStatus: 4
+    },
+    _eventSignature : {
+        BrowserCacheClean: 1728030659,
+        BatteryStatus: 1171099452,
+        NetStatus: 349380898
+    },
+    init:function(){
+        //start session
+        var sessionMsg = new Session();
+        sessionMsg.entity = this._serviceBase.entityName;
+        sessionMsg.class = this._serviceBase.className;
+        WebSocketBase.startSession(sessionMsg, () => {
+            logEvent("ResourceWatcherService startSession callback");
+        });
+
+        var registerMsg = new Register();
+        registerMsg.entity = this._serviceBase.entityName;
+        registerMsg.class = this._serviceBase.className;
+        WebSocketBase.registerEvent(registerMsg, (data) => {
+            logEvent("ResourceWatcherService registerEvent ret:"+JSON.stringify(data));
+            this.dispatchEvent(data);
+        });
+    },
+    UninstallThirdPartyProgram:function(req,callback){
+        req.entity = this._serviceBase.entityName;
+		req.class = this._serviceBase.className;
+		req.methodID = this._methodID.UninstallThirdPartyProgram;
+		req.signature = this._methodSignature.UninstallThirdPartyProgram;
+		WebSocketBase.sendMsg(req, (data) =>  {
+            var jsondata = JSON.parse(data);
+            callback(jsondata);
+        });
+    },
+    CheckNetType:function(req,callback){
+        req.entity = this._serviceBase.entityName;
+		req.class = this._serviceBase.className;
+		req.methodID = this._methodID.CheckNetType;
+		req.signature = this._methodSignature.CheckNetType;
+		WebSocketBase.sendMsg(req, (data) =>  {
+            var jsondata = JSON.parse(data);
+            callback(jsondata);
+        });
+    },
+    GetBizLinks:function(req,callback){
+        req.entity = this._serviceBase.entityName;
+		req.class = this._serviceBase.className;
+		req.methodID = this._methodID.GetBizLinks;
+		req.signature = this._methodSignature.GetBizLinks;
+        console.log('GetBizLinks callback',req)
+
+		WebSocketBase.sendMsg(req, function(data) {
+            var jsondata = JSON.parse(data);
+            callback(jsondata);
+        });
+    },
+    BizLinkDetect:function(req,callback){
+        req.entity = this._serviceBase.entityName;
+		req.class = this._serviceBase.className;
+		req.methodID = this._methodID.BizLinkDetect;
+        req.signature = this._methodSignature.BizLinkDetect;
+        console.log('BizLinkDetect callback',req)
+
+		WebSocketBase.sendMsg(req, function(data) {
+            var jsondata = JSON.parse(data);
+            callback(jsondata);
+        });
+    },
+    CheckBatteryStatus:function(req,callback){
+        req.entity = this._serviceBase.entityName;
+		req.class = this._serviceBase.className;
+		req.methodID = this._methodID.CheckBatteryStatus;
+		req.signature = this._methodSignature.CheckBatteryStatus;
+		WebSocketBase.sendMsg(req, (data) =>  {
+            var jsondata = JSON.parse(data);
+            callback(jsondata);
+        });
+    },
+    dispatchEvent:function(msg) {
+        var recvEvt = JSON.parse(msg);
+        var { eventID, signatureID } = recvEvt;
+        // var _recvEvt = recvEvt;
+        // var eventID = _recvEvt.eventID;
+        // var signatureID = _recvEvt.signatureID
+        if(eventID == this._eventType.BrowserCacheClean && signatureID == this._eventSignature.BrowserCacheClean) {
+            EventEmitter.dispatch('BrowserCacheClean', recvEvt);
+        }
+        else if(eventID == this._eventType.BatteryStatus && signatureID == this._eventSignature.BatteryStatus) {
+            EventEmitter.dispatch('BatteryStatus', recvEvt);
+        }
+        else if(eventID == this._eventType.NetStatus && signatureID == this._eventSignature.NetStatus) {
+            EventEmitter.dispatch('NetStatus', recvEvt);
+        }
+    }
+};
+
+
 var DeviceControlService={
     _serviceBase:{
         entityName : 'DeviceControl',
@@ -298,41 +463,55 @@ var InitializerService = {
     },
 };
 
-//注册AccessAuthService
+//注册InitializerService
 var AccessAuthService = {
-    _serviceBase: {
-        entityName: 'AccessAuthorization',
-        className: 'AccessAuthService'
+    _serviceBase:{
+        entityName : 'AccessAuthorization',
+        className : 'AccessAuthService'
     },
-    _methodID: {
-        InitializeNew: 4
+    _methodID : {
+        InitializeNew: 4,
+        GetNetMsg: 6
     },
-
-    _methodSignature: {
-        InitializeNew: 1851143282
+            
+    _methodSignature :{
+        InitializeNew: 1851143282,
+        GetNetMsg: 62776855,
     },
-    init: function () {
+    init:function(){
         //start session
         var sessionMsg = new Session();
         sessionMsg.entity = this._serviceBase.entityName;
         sessionMsg.class = this._serviceBase.className;
-        WebSocketBase.startSession(sessionMsg, function () {
+        WebSocketBase.startSession(sessionMsg, function() {
             console.log('AccessAuthService startSession callback')
             logEvent("AccessAuthService startSession callback");
         });
     },
-    InitializeNew: function (req, callback) {
+    InitializeNew:function(req,callback){
         req.entity = this._serviceBase.entityName;
-        req.class = this._serviceBase.className;
-        req.methodID = this._methodID.InitializeNew;
+		req.class = this._serviceBase.className;
+		req.methodID = this._methodID.InitializeNew;
         req.signature = this._methodSignature.InitializeNew;
-        console.log('AccessAuthService startSession callback', req)
+        console.log('InitializeNew startSession callback',req)
 
-        WebSocketBase.sendMsg(req, function (data) {
+		WebSocketBase.sendMsg(req, function(data) {
             var jsondata = JSON.parse(data);
             callback(jsondata);
         });
-    }
+    },
+    GetNetMsg: function(req,callback){
+        req.entity = this._serviceBase.entityName;
+		req.class = this._serviceBase.className;
+		req.methodID = this._methodID.GetNetMsg;
+        req.signature = this._methodSignature.GetNetMsg;
+        console.log('GetNetMsg startSession callback',req)
+
+		WebSocketBase.sendMsg(req, function(data) {
+            var jsondata = JSON.parse(data);
+            callback(jsondata);
+        });
+    },
 };
 
 //注册CenterSettingService
@@ -343,10 +522,18 @@ var CenterSettingService = {
     },
     _methodID : {
         Download: 0,
+        Downloadv2: 1,
+        Downloadv3: 0,
+        GetAccessUrl: 3,
+        GetCertainAceessUrl: 4,
     },
             
     _methodSignature :{
         Download: -101852141,
+        Downloadv2: -1388469236,
+        Downloadv3: -1569222403,
+        GetAccessUrl:1887530540,
+        GetCertainAceessUrl: -927544309,
     },
     init:function(){
         //start session
@@ -370,6 +557,120 @@ var CenterSettingService = {
             var jsondata = JSON.parse(data);
             callback(jsondata);
         });
+    },
+    Downloadv2:function(req,callback){
+        req.entity = this._serviceBase.entityName;
+		req.class = this._serviceBase.className;
+		req.methodID = this._methodID.Downloadv2;
+        req.signature = this._methodSignature.Downloadv2;
+        
+        console.log('CenterSettingService startSession callback',req)
+
+		WebSocketBase.sendMsg(req, function(data) {
+            var jsondata = JSON.parse(data);
+            callback(jsondata);
+        });
+    },
+    Downloadv3:function(req,callback){
+        req.entity = this._serviceBase.entityName;
+		req.class = this._serviceBase.className;
+		req.methodID = this._methodID.Downloadv3;
+        req.signature = this._methodSignature.Downloadv3;
+        
+        console.log('Downloadv3 startSession callback3',req)
+
+		WebSocketBase.sendMsg(req, function(data) {
+            var jsondata = JSON.parse(data);
+            callback(jsondata);
+        });
+    },
+    GetAccessUrl:function(req,callback){
+        req.entity = this._serviceBase.entityName;
+		req.class = this._serviceBase.className;
+		req.methodID = this._methodID.GetAccessUrl;
+        req.signature = this._methodSignature.GetAccessUrl;
+        
+        console.log('GetAccessUrl startSession callback',req)
+
+		WebSocketBase.sendMsg(req, function(data) {
+            var jsondata = JSON.parse(data);
+            callback(jsondata);
+        });
+    },
+    GetCertainAceessUrl:function(req,callback){
+        req.entity = this._serviceBase.entityName;
+		req.class = this._serviceBase.className;
+		req.methodID = this._methodID.GetCertainAceessUrl;
+        req.signature = this._methodSignature.GetCertainAceessUrl;
+        
+        console.log('GetCertainAceessUrl startSession callback',req)
+
+		WebSocketBase.sendMsg(req, function(data) {
+            var jsondata = JSON.parse(data);
+            callback(jsondata);
+        });
+    },
+};
+
+
+var HealthManagerService={
+    _serviceBase:{
+        entityName : 'HealthManager',
+        className : 'HealthManagerService'
+    },
+    _methodID : {
+        QueryHardwareInfo: 5,
+        ReadCenterConfigStr: 6,
+        GetAuthErrMsg: 7,
+    },
+            
+    _methodSignature :{
+        QueryHardwareInfo: 1308469188,
+        ReadCenterConfigStr: 1222672990,
+        GetAuthErrMsg: -462279661,
+    },
+    init:function(){
+        //start session
+        var sessionMsg = new Session();
+        sessionMsg.entity = this._serviceBase.entityName;
+        sessionMsg.class = this._serviceBase.className;
+        WebSocketBase.startSession(sessionMsg, function() {
+            logEvent("HealthManagerService startSession callback");
+        });
+    },
+    QueryHardwareInfo:function(req,callback){
+        req.entity = this._serviceBase.entityName;
+		req.class = this._serviceBase.className;
+		req.methodID = this._methodID.QueryHardwareInfo;
+		req.signature = this._methodSignature.QueryHardwareInfo;
+		WebSocketBase.sendMsg(req, function(data) {
+            var jsondata = JSON.parse(data);
+            callback(jsondata);
+        });
+    },
+    ReadCenterConfigStr:function(req,callback){
+        req.entity = this._serviceBase.entityName;
+		req.class = this._serviceBase.className;
+		req.methodID = this._methodID.ReadCenterConfigStr;
+        req.signature = this._methodSignature.ReadCenterConfigStr;
+        console.log('ReadCenterConfigStr callback',req)
+
+		WebSocketBase.sendMsg(req, function(data) {
+            var jsondata = JSON.parse(data);
+            callback(jsondata);
+        });
+    },
+    GetAuthErrMsg:function(req,callback){
+        req.entity = this._serviceBase.entityName;
+		req.class = this._serviceBase.className;
+		req.methodID = this._methodID.GetAuthErrMsg;
+        req.signature = this._methodSignature.GetAuthErrMsg;
+        console.log('GetAuthErrMsg callback',req)
+
+		WebSocketBase.sendMsg(req, function(data) {
+            var jsondata = JSON.parse(data);
+            callback(jsondata);
+        });
     }
 };
 

+ 70 - 12
addin/res/ManagerDesktop/js/errPage.js

@@ -7,17 +7,16 @@ window.onload=function(){
 				return false;
 			}
 		}
-
   }
-
+  
   WebSocketBase.socket.onerror = function () {
 		logEvent("DeviceControlService startSession callback");
     let tips = "终端链接失败"
     ModalStyle(tips, 'pathN')
-
   }
-  showErrTips();
 
+  showErrTips();
+  getHardwareInfo()
 }
 
 
@@ -39,6 +38,13 @@ function showErrTips(){
     Request[urlParamsArr[i].split('=')[0]] = urlParamsArr[i].split('=')[1];
   }
 
+  if(reason!='CardStoreIsBusy'){
+    $('#navBtns').css({display:'flex'});
+  }
+
+  if(reason!='CardStoreIsBusy'&&!usercode){
+    $('#AuthFailBg').attr('src', './images/close.png');
+  }
 
   let SuspensionTxt,PromptTxt
   var usercode = Request['usercode'];
@@ -55,6 +61,7 @@ function showErrTips(){
 
   if(Object.keys(Request).indexOf('showlimit')>0 && Request['showlimit'] ==1){
     $("#resetPsd").css({'display':'flex'})
+    $("#downLoadConfig").css({'display':'flex'})
   }
 
   if(Object.keys(Request).indexOf('showmin')>0 && Request['showmin'] ==1){
@@ -68,6 +75,7 @@ function showErrTips(){
       var errmsg = Request['errmsg'];
       var clock =Request['reboottime'];
       if(clock){
+        $("#RestartTxt").css({display:'block'})
         document.getElementById("RestartTxt").innerHTML = "可视柜台将在" + clock + "重启";
       }
       SuspensionTxt = "准入不通过暂停服务:"+errmsg;
@@ -88,7 +96,19 @@ function showErrTips(){
       PromptTxt = "设备罚出锁定,请联系分行信息技术部  ";
       break;
     case "CardStoreIsBusy":
-      document.getElementById("AuthFailBg").src = "../images/ss-cardstore.png";
+      $("#CardStoreIsBusy").css({display:'block'})
+      $('#AuthFailBg').attr('src', './images/CardStoreIsBusy.png');
+      $('#imgDiv').css({height:'550px',position:'relative',top:'-60px'})
+      $('#AuthFailBg').css({height:'100%'})
+      $('#SuspensionTxt').css({fontSize:'52px',fontWeight: 'bolder',position:'relative',top:'-60px'})
+      
+      let localDate = showFullDateTime();
+      let myDate = new Date();
+      let hours = myDate.getHours();
+      let timeValue = ((hours >= 12) ? "下午好" : "上午好 " );
+      document.getElementById("localDate").innerHTML = localDate
+      document.getElementById("localTime").innerHTML = timeValue
+      document.getElementById("SuspensionTxt").innerHTML = "卡库正在读卡中,请稍候"
       break;
     case "MachineTypeError":
       PromptTxt = "双屏版只检测到单屏";
@@ -131,15 +151,53 @@ function GetRequest() {
   return theRequest;
 } 
 
+let iframeSrc = '' // iframe src地址
+// 获取终端硬件信息
+function getHardwareInfo(){
+  let req = new Request()
+	let timeoutFn= setTimeout(function(){
+		$('#loadContent').fadeOut('slow');
+		let tips = '请求超时'
+		showToast(tips);
+	},5000)
+
+	DeviceControlService.QueryHardwareInfo(req, function(res) {
+		logEvent("QueryHardwareInfo ret: "+JSON.stringify(res));
+		if(res){
+			clearTimeout(timeoutFn);
+			$('#loadContent').fadeOut('slow')
+			document.getElementById("terminalNo").innerHTML= res.terminalNo;
+			document.getElementById("termVersion").innerHTML= 'V'+res.termVersion;
+			env = res.reserved1;
+      let clientId = ''
+      switch(res.reserved1){ 
+        case 0: clientId = '6898ec10629f499187d7b31fbe9823a4'; break; //DEV
+        case 1: clientId = '6898ec10629f499187d7b31fbe9823a4'; break; //ST
+        case 2: clientId = '6898ec10629f499187d7b31fbe9823a4'; break; //UAT
+        case 3: clientId = '9e7e54105fce408cae37322dbbd64046'; break; //PRD
+        default: clientId = '9e7e54105fce408cae37322dbbd64046'; break; //PRD
+      }
+			iframeSrc = 'https://one-account-gateway.paasuat.cmbchina.cn/auth-plugin/v2/identity-authentication?clientId='+clientId+'&ui=eyJhdXRoVHlwZXMiOlsicXJDb2RlIl0sImhlYWRlciI6dHJ1ZX0%253D'
+			document.getElementById('iframeSrc').src = iframeSrc
+		}
+	})
+}
+
 //重置密钥
 function resetRSA(){
-  $('.iframeDiv').fadeIn();
-  $('#loadContent').fadeIn('slow')
-
+  // document.getElementById("urlAccessAddr").innerHTML=""; todo
+  $('.boxRSA').fadeIn();
+  $('.iframe-box').fadeIn();
+  $('.tipsing').html('')
+  // $('#loadContent').fadeIn('slow')
+  document.getElementById('iframeSrc').src = iframeSrc
   setTimeout(function(){
-    ReadCenterConfig('centerSetting')
-    ReadCenterConfig('access');
-  },500)
+    getAccessUrl();
+  },500)  
+}
+
+function clickDownload(){
+  $('.boxDownload').fadeIn();
 }
 
 
@@ -191,7 +249,7 @@ function exitTipsColck(){
   $("#exitColck").html(clock);
   let timer = setInterval(function(){
     clock--
-    $("#exitColck").html(clock);
+    // $("#exitColck").html(clock);
     if(clock==0){
       let req = {};
       req.messageType = 0;

+ 55 - 343
addin/res/ManagerDesktop/js/errorCodeEnum.js

@@ -3,91 +3,64 @@
  */
 
 var ErrorCodeEnum = {
-    Error_Succeed: 0,
+    Error_Succeed : 0,
     //date check category
-    Error_DataCheck: 100,		//mark the beginning for this category
-    Error_Null: 101,					//the error of a null pointer
-    Error_Param: 102,				//the error of a illegal parameter
-    Error_Overflow: 103,				//The length or range overflow
-    Error_TooSmallBuffer: 104,		// buffer too small
-    Error_NotIntegrated: 105,		//The package or result is not intergrated
-    Error_CheckSum: 106,				   //Check sum is not the same
-    Error_MisMatched: 107,             //the expression is mismatching
-    Error_Deprecated: 108,              //the function is deprecated
+    Error_DataCheck : 100,		//mark the beginning for this category
+    Error_Null      : 101,					//the error of a null pointer
+    Error_Param     : 102,				//the error of a illegal parameter
+    Error_Overflow  : 103,				//The length or range overflow
+    Error_TooSmallBuffer : 104,		// buffer too small
+    Error_NotIntegrated  : 105,		//The package or result is not intergrated
     //Target being category
-    Error_TargetBeing: 0x200,
-    Error_NoTarget: 0x201,				//request target is not exist
-    Error_NoDefine: 0x202,				//The class or object no define
-    Error_NotImpl: 0x203,				//the method has not implement yet
-    Error_NotExist: 0x204,				//not exist
-    Error_Duplication: 0x205,			//Duplicate action or object
-    Error_Unregisted: 0x206,			//exist but the object has not regist
-    Error_AlreadyExist: 0x207,			//already exist
-    Error_MethodNotFound: 0x208,		//method does not exist
-    Error_Redirect: 0x209,				// redirect indication
-    Error_BridgeNotBind: 0x20A,	    // bridge bind indication
-    Error_BridgeNotOK: 0x20B,		    // try bridge fail
-    Error_NotSupport: 0x20C,          // don't support the request
-    Error_NotConfig: 0x20D,            /** The dream configuration is unsettled*/
+    Error_TargetBeing : 0x200,
+    Error_NoTarget    : 0x201,				//request target is not exist
+    Error_NoDefine    : 0x202,				//The class or object no define
+    Error_NotImpl     : 0x203,				//the method has not implement yet
+    Error_NotExist    : 0x204,				//not exist
+    Error_Duplication : 0x205,			//Duplicate action or object
+    Error_Unregisted  : 0x206,			//exist but the object has not regist
+    Error_AlreadyExist : 0x207,			//already exist
+    Error_MethodNotFound : 0x208,		//method does not exist
+    Error_Redirect : 0x209,				// redirect indication
     //Entity state category
-    Error_InvalidState: 0x300,	//state is not valid for current call
-    Error_NotInit: 0x301,				//The target is not be initial
-    Error_Paused: 0x302,				//the access object is in Pause state
-    Error_Stoped: 0x303,				//the access object is in Stop state
-    Error_Losted: 0x304,				//the access object is in Lost state
-    Error_Closed: 0x305,				//opposite side in close state
-    Error_Accept: 0x306,                     //test mode: pass the test
-    Error_Failed: 0x307,                      //test mode: fail to pass the test.
-    Error_Busy: 0x308,                        //the access object is busy doing
+    Error_InvalidState : 0x300,	//state is not valid for current call
+    Error_NotInit      : 0x301,				//The target is not be initial
+    Error_Paused       : 0x302,				//the access object is in Pause state
+    Error_Stoped       : 0x303,				//the access object is in Stop state
+    Error_Losted       : 0x304,				//the access object is in Lost state
+    Error_Closed       : 0x305,				//opposite side in close state
     //Framework Task control category
-    Error_TaskControl: 0x400,
-    Error_Pending: 0x401,				//The request in not finish
-    Error_Cancel: 0x402,				//The process is be cancel by framework
-    Error_Break: 0x403,				//The task has interrupt
-    Error_NotMeetCondition: 0x404,		//not meat run condition,run cancel
-    Error_NoPrivilege: 0x405,			//no privilege
-    Error_MethodSignatureFailed: 0x406,//method signature failed
+    Error_TaskControl : 0x400,
+    Error_Pending     : 0x401,				//The request in not finish
+    Error_Cancel      : 0x402,				//The process is be cancel by framework
+    Error_Break       : 0x403,				//The task has interrupt
+    Error_NotMeetCondition : 0x404,		//not meat run condition,run cancel
+    Error_NoPrivilege : 0x405,			//no privilege
+    Error_MethodSignatureFailed : 0x406,//method signature failed
     //opposite side action category
-    Error_PeerAction: 0x500,
-    Error_PeerClose: 0x501,			//peer close request
-    Error_PeerIgnore: 0x502,			//peer did not anwer before the ITransactionContext object release
-    Error_PeerReject: 0x503,			//The another side reject the request
-    Error_PeerDelay: 0x504,			//The tast can not run right now,will be deley to set time
+    Error_PeerAction : 0x500,
+    Error_PeerClose  : 0x501,			//peer close request
+    Error_PeerIgnore : 0x502,			//peer did not anwer before the ITransactionContext object release
+    Error_PeerReject : 0x503,			//The another side reject the request
+    Error_PeerDelay  : 0x504,			//The tast can not run right now,will be deley to set time
     //process fail category
-    Error_Process: 0x600,
-    Error_NetBroken: 0x601,			    //the network is broken
-    Error_UpdateFailed: 0x602,			//system update failed
-    Error_RegistryFailed: 0x603,		//registry operation failed
-    Error_IO: 0x604,					//IO error(file reading/writing)
-    Error_Readonly: 0x605,				//The object can't be edit
+    Error_Process : 0x600,
+    Error_NetBroken : 0x601,			//the network is broken
+    Error_UpdateFailed : 0x602,			//system update failed
+    Error_RegistryFailed : 0x603,		//registry operation failed
+    Error_IO : 0x604,					//IO error(file reading/writing)
+    Error_Readonly : 0x605,				//The object can't be edit
     // ...
-    Error_TimeOut: 0x700,
-    Error_BlockTimeOut: 0x701,			//WaitAnswer time out
+    Error_TimeOut : 0x700,
+    Error_BlockTimeOut : 0x701,			//WaitAnswer time out
     Error_ThreadTimeOut: 0x702,			//Max Thread run time
-    Error_QueueTimeOut: 0x703,			//Tast wait time out in queue
-    Error_ReplyTimeOut: 0x704,			//The system max answer time
-    Error_Hardware: 0x800,
-    Error_DevLoadFileFailed: 0x801,   	//load dll or config file failed
-    Error_DevNotAvailable: 0x802,		//device not connected
-    Error_DevAlreadyConnected: 0x803,	//device already connected
-    Error_DevConnFailed: 0x804,		    //connect to device failed
-    Error_DevCommFailed: 0x805,		//Communication failed between HOST and Device
-    Error_DevMedia: 0x806,				    //Media error(Data lack,unrecognized and so on)
-    Error_EnvCamera: 0x807,			    //EnvCamera error
-    Error_OptCamera: 0x808,			    //OptCamera error(Data lack,unrecognized and so on)
-    Error_AllCamera: 0x809,			        //AllCamera error(Data lack,unrecognized and so on)
-    Error_EwsCamera: 0x80A,			   //EwsCamera error(Data lack,unrecognized and so on)
-    Error_AudioIN: 0x80B,
-    Error_AudioOut: 0x80C,
-    //Socket Type Error
-    Error_Socket: 0x900,
-    Error_ConnectFailed: 0x901,
-    Error_ServerNotAvailable: 0x902,
+    Error_QueueTimeOut : 0x703,			//Tast wait time out in queue
+    Error_ReplyTimeOut : 0x704,			//The system max answer time
     // ...
-    Error_Debug: 0xf00,
+    Error_Debug : 0xf00,
     Error_Assert: 0xf01,
-    Error_Trace: 0xf02,
-    Error_Bug: 0xf03,					//bug detected
+    Error_Trace : 0xf02,
+    Error_Bug   : 0xf03,					//bug detected
     /*
      // device error code x define at range 0x00010000 <= x <= 0x0001ffff
      //
@@ -95,273 +68,12 @@ var ErrorCodeEnum = {
      //...... device error codes goes here
      Error_Device_End = 0x0001ffff,
      */
-    Error_Unrecover: 0x70000000,
-    Error_Resource: 0x70000001,				//The system resource ec:memory/handle/space,do not retry,should restart system
+    Error_Unrecover : 0x70000000,
+    Error_Resource  : 0x70000001,				//The system resource ec:memory/handle/space,do not retry,should restart system
     Error_NewProcess: 0x70000002,			//start process failed
     Error_FailVerify: 0x70000003,			//Signature verification failed of entity
-    Error_Block: 0x70000004,				//The thread block and the module hold
-    Error_Exception: 0x70000005,			//except throw
-    Error_Unexpect: 0x7ffffffe,	//the fail reason is not expect
-    Error_IgnoreAll: 0x7fffffff, // for special internal usage only, user dont use this code
-};
-
-function ErrorCodeStringfy(val) 
-{
-    var output;
-    if(typeof val === 'string') {
-        var tmp = parseInt(val, 10);
-    } else {
-        var tmp = val;
-    }
-    
-    switch(tmp) {
-        case ErrorCodeEnum.Error_Succeed:
-            output = 'Error_Succeed';
-            break;
-        case ErrorCodeEnum.Error_DataCheck:
-            output = 'Error_DataCheck';
-            break;
-        case ErrorCodeEnum.Error_Null:
-            output = 'Error_Null';
-            break;
-        case ErrorCodeEnum.Error_Param:
-            output = 'Error_Param';
-            break;
-        case ErrorCodeEnum.Error_Overflow:
-            output = 'Error_Overflow';
-            break;
-        case ErrorCodeEnum.Error_TooSmallBuffer:
-            output = 'Error_TooSmallBuffer';
-            break;
-        case ErrorCodeEnum.Error_NotIntegrated:
-            output = 'Error_NotIntegrated';
-            break;
-        case ErrorCodeEnum.Error_CheckSum:
-            output = 'Error_CheckSum';
-            break;
-        case ErrorCodeEnum.Error_MisMatched:
-            output = 'Error_MisMatched';
-            break;
-        case ErrorCodeEnum.Error_TargetBeing:
-            output = 'Error_TargetBeing';
-            break;
-        case ErrorCodeEnum.Error_NoTarget:
-            output = 'Error_NoTarget';
-            break;
-        case ErrorCodeEnum.Error_NoDefine:
-            output = 'Error_NoDefine';
-            break;
-        case ErrorCodeEnum.Error_NotImpl:
-            output = 'Error_NotImpl';
-            break;
-        case ErrorCodeEnum.Error_NotExist:
-        output = 'Error_NotExist';
-        break;
-        case ErrorCodeEnum.Error_Duplication:
-        output = 'Error_Duplication';
-        break;
-        case ErrorCodeEnum.Error_Unregisted:
-        output = 'Error_Unregisted';
-        break;
-        case ErrorCodeEnum.Error_AlreadyExist:
-        output = 'Error_AlreadyExist';
-        break;
-        case ErrorCodeEnum.Error_MethodNotFound:
-        output = 'Error_MethodNotFound';
-        break;
-        case ErrorCodeEnum.Error_Redirect:
-        output = 'Error_Redirect';
-        break;
-        case ErrorCodeEnum.Error_BridgeNotBind:
-        output = 'Error_BridgeNotBind';
-        break;
-        case ErrorCodeEnum.Error_BridgeNotOK:
-        output = 'Error_BridgeNotOK';
-        break;
-        case ErrorCodeEnum.Error_NotSupport:
-        output = 'Error_NotSupport';
-        break;
-        case ErrorCodeEnum.Error_NotConfig:
-        output = 'Error_NotConfig';
-        break;
-        case ErrorCodeEnum.Error_InvalidState:
-        output = 'Error_InvalidState';
-        break;
-        case ErrorCodeEnum.Error_NotInit:
-        output = 'Error_NotInit';
-        break;
-        case ErrorCodeEnum.Error_Paused:
-        output = 'Error_Paused';
-        break;
-        case ErrorCodeEnum.Error_Stoped:
-        output = 'Error_Stoped';
-        break;
-        case ErrorCodeEnum.Error_Losted:
-        output = 'Error_Losted';
-        break;
-        case ErrorCodeEnum.Error_Closed:
-        output = 'Error_Closed';
-        break;
-        case ErrorCodeEnum.Error_Accept:
-        output = 'Error_Accept';
-        break;
-        case ErrorCodeEnum.Error_Failed:
-        output = 'Error_Failed';
-        break;
-        case ErrorCodeEnum.Error_Busy:
-        output = 'Error_Busy';
-        break;
-        case ErrorCodeEnum.Error_TaskControl:
-        output = 'Error_TaskControl';
-        break;
-        case ErrorCodeEnum.Error_Pending:
-        output = 'Error_Pending';
-        break;
-        case ErrorCodeEnum.Error_Cancel:
-        output = 'Error_Cancel';
-        break;
-        case ErrorCodeEnum.Error_Break:
-        output = 'Error_Break';
-        break;
-        case ErrorCodeEnum.Error_NotMeetCondition:
-        output = 'Error_NotMeetCondition';
-        break;
-        case ErrorCodeEnum.Error_NoPrivilege:
-        output = 'Error_NoPrivilege';
-        break;
-        case ErrorCodeEnum.Error_MethodSignatureFailed:
-        output = 'Error_MethodSignatureFailed';
-        break;
-        case ErrorCodeEnum.Error_PeerAction:
-        output = 'Error_PeerAction';
-        break;
-        case ErrorCodeEnum.Error_PeerClose:
-        output = 'Error_PeerClose';
-        break;
-        case ErrorCodeEnum.Error_PeerIgnore:
-        output = 'Error_PeerIgnore';
-        break;
-        case ErrorCodeEnum.Error_PeerReject:
-        output = 'Error_PeerReject';
-        break;
-        case ErrorCodeEnum.Error_PeerDelay:
-        output = 'Error_PeerDelay';
-        break;
-        case ErrorCodeEnum.Error_Process:
-        output = 'Error_Process';
-        break;
-        case ErrorCodeEnum.Error_NetBroken:
-        output = 'Error_NetBroken';
-        break;
-        case ErrorCodeEnum.Error_UpdateFailed:
-        output = 'Error_UpdateFailed';
-        break;
-        case ErrorCodeEnum.Error_RegistryFailed:
-        output = 'Error_RegistryFailed';
-        break;
-        case ErrorCodeEnum.Error_IO:
-        output = 'Error_IO';
-        break;
-        case ErrorCodeEnum.Error_Readonly:
-        output = 'Error_Readonly';
-        break;
-        case ErrorCodeEnum.Error_TimeOut:
-        output = 'Error_TimeOut';
-        break;
-        case ErrorCodeEnum.Error_BlockTimeOut:
-        output = 'Error_BlockTimeOut';
-        break;
-        case ErrorCodeEnum.Error_ThreadTimeOut:
-        output = 'Error_ThreadTimeOut';
-        break;
-        case ErrorCodeEnum.Error_QueueTimeOut:
-        output = 'Error_QueueTimeOut';
-        break;
-        case ErrorCodeEnum.Error_ReplyTimeOut:
-        output = 'Error_ReplyTimeOut';
-        break;
-        case ErrorCodeEnum.Error_Hardware:
-        output = 'Error_Hardware';
-        break;
-        case ErrorCodeEnum.Error_DevLoadFileFailed:
-        output = 'Error_DevLoadFileFailed';
-        break;
-        case ErrorCodeEnum.Error_DevNotAvailable:
-        output = 'Error_DevNotAvailable';
-        break;
-        case ErrorCodeEnum.Error_DevAlreadyConnected:
-        output = 'Error_DevAlreadyConnected';
-        break;
-        case ErrorCodeEnum.Error_DevConnFailed:
-        output = 'Error_DevConnFailed';
-        break;
-        case ErrorCodeEnum.Error_DevCommFailed:
-        output = 'Error_DevCommFailed';
-        break;
-        case ErrorCodeEnum.Error_DevMedia:
-        output = 'Error_DevMedia';
-        break;
-        case ErrorCodeEnum.Error_EnvCamera:
-        output = 'Error_EnvCamera';
-        break;
-        case ErrorCodeEnum.Error_OptCamera:
-        output = 'Error_OptCamera';
-        break;
-        case ErrorCodeEnum.Error_AllCamera:
-        output = 'Error_AllCamera';
-        break;
-        case ErrorCodeEnum.Error_EwsCamera:
-        output = 'Error_EwsCamera';
-        break;
-        case ErrorCodeEnum.Error_AudioIN:
-        output = 'Error_AudioIN';
-        break;
-        case ErrorCodeEnum.Error_AudioOut:
-        output = 'Error_AudioOut';
-        break;
-        case ErrorCodeEnum.Error_Socket:
-        output = 'Error_Socket';
-        break;
-        case ErrorCodeEnum.Error_ConnectFailed:
-        output = 'Error_ConnectFailed';
-        break;
-        case ErrorCodeEnum.Error_ServerNotAvailable:
-        output = 'Error_ServerNotAvailable';
-        break;
-        case ErrorCodeEnum.Error_Debug:
-        output = 'Error_Debug';
-        break;
-        case ErrorCodeEnum.Error_Assert:
-        output = 'Error_Assert';
-        break;
-        case ErrorCodeEnum.Error_Trace:
-        output = 'Error_Trace';
-        break;
-        case ErrorCodeEnum.Error_Bug:
-        output = 'Error_Bug';
-        break;
-        case ErrorCodeEnum.Error_Unrecover:
-        output = 'Error_NewProcess';
-        break;
-        case ErrorCodeEnum.Error_FailVerify:
-        output = 'Error_FailVerify';
-        break;
-        case ErrorCodeEnum.Error_Block:
-        output = 'Error_Block';
-        break;
-        case ErrorCodeEnum.Error_Exception:
-        output = 'Error_Exception';
-        break;
-        case ErrorCodeEnum.Error_Unexpect:
-        output = 'Error_Unexpect';
-        break;
-        case ErrorCodeEnum.Error_IgnoreAll:
-        output = 'Error_IgnoreAll';
-        break;
-        default:
-        output = 'Unkonwn: ' + val;
-        break;
-    }
-    return output;
-
-}
+    Error_Block     : 0x70000004,				//The thread block and the module hold
+    Error_Exception : 0x70000005,			//except throw
+    Error_Unexpect  : 0x7ffffffe,	//the fail reason is not expect
+    Error_IgnoreAll : 0x7fffffff, // for special internal usage only, user dont use this code
+};

+ 6 - 6
addin/res/ManagerDesktop/js/eventEmitter.js

@@ -5,13 +5,13 @@ var EventEmitter = {
         return;
       }
       
-      // for(var cb of this._events[event].values()) {
-      //   cb(data);
-      // }
-      let arr = this._events[event].values();
-      arr.forEach(function(cb){
+      for(var cb of this._events[event].values()) {
         cb(data);
-      })
+      }
+      //let arr = this._events[event].values();
+      //arr.forEach(function (cb) {
+      //    cb(data);
+      //})
   },
   subscribe: function (event, source, callback) {
     // 创建一个新事件数组

+ 230 - 0
addin/res/ManagerDesktop/js/getTerminalInfo.js

@@ -0,0 +1,230 @@
+//页面初始化
+window.onload=function(){
+	if (typeof(document.onselectstart) != "undefined") {
+		// IE禁止元素选取
+		document.onselectstart = function (event){
+			if(event.target.tagName!="INPUT"){
+				return false;
+			}
+		}
+  }
+  
+  WebSocketBase.socket.onerror = function () {
+		logEvent("DeviceControlService startSession callback");
+    let tips = "终端链接失败"
+    ModalPrompt(tips, 'pathN')
+  }
+
+	let date = +new Date
+	let dateTime = getFamtterTimer(date)
+	$('.currDate').html(dateTime)
+
+	let Request =  GetRequest();
+  if(Request['showlimit'] && Request['showlimit'] ==1){
+    $("#resetPsd").css({display:'flex'});
+    $("#downLoadConfig").css({display:'flex'});
+  }else{
+		$("#resetPsd").hide()
+    $("#downLoadConfig").hide()
+	}
+  if(Request['showmin'] && Request['showmin'] ==1){
+    $("#minimize").css({display:'flex'});
+  }else{
+		$("#minimize").fadeOut()
+	}
+
+  HealthManagerService.init();
+  CenterSettingService.init();
+	ResourceWatcherService.init();
+  getHardwareInfo()
+  // getAccessUrl()
+	getCertainAceessUrl() //准入接口
+
+	$('#loadContent').fadeIn('slow');
+
+}
+
+
+/**
+ * @description: 查询终端实体信息
+ * @param {} 
+ * @return: terminalNo,termVersion
+ */
+function getHardwareInfo(){
+  let req = new Request()
+	let timeoutFn= setTimeout(function(){
+		let tips = 'QueryHardwareInfo 请求超时'
+		ModalPrompt(tips, 'pathN')
+		$('#loadContent').fadeOut('slow');
+
+	},60000)
+
+	HealthManagerService.QueryHardwareInfo(req, function(res) {
+		logEvent("QueryHardwareInfo ret: "+JSON.stringify(res));
+		if(res){
+			clearTimeout(timeoutFn);
+			$('.terminalNo').html(res.terminalNo)
+			$('.termVersion').html('V'+res.termVersion)
+			$('#loadContent').fadeOut('slow');
+
+			let clientId ='';
+      switch(res.reserved1){ 
+        case 0: clientId = '6898ec10629f499187d7b31fbe9823a4'; break; //DEV
+        case 1: clientId = '6898ec10629f499187d7b31fbe9823a4'; break; //ST
+        case 2: clientId = '6898ec10629f499187d7b31fbe9823a4'; break; //UAT
+        case 3: clientId = '9e7e54105fce408cae37322dbbd64046'; break; //PRD
+        default: clientId = '9e7e54105fce408cae37322dbbd64046'; break; //PRD
+      }
+			if(document.getElementById('iframeSrc')){
+				let iframeSrc = 'https://one-account-gateway.paasuat.cmbchina.cn/auth-plugin/v2/identity-authentication?clientId='+clientId+'&ui=eyJhdXRoVHlwZXMiOlsicXJDb2RlIl0sImhlYWRlciI6dHJ1ZX0%253D'
+				//Pad  https://oa-auth.paas.cmbchina.com/auth-plugin/v2/identity-authentication
+				//大机 https://oa-auth.paas.cmbchina.cn/auth-plugin/v2/identity-authentication
+				if(res.reserved1==3){
+					if(res.machineType.toUpperCase()=='RVC.PAD'){
+						iframeSrc = 'https://oa-auth.paas.cmbchina.com/auth-plugin/v2/identity-authentication?clientId='+clientId+'&ui=eyJhdXRoVHlwZXMiOlsicXJDb2RlIl0sImhlYWRlciI6dHJ1ZX0%253D'
+					}else{
+						iframeSrc = 'https://oa-auth.paas.cmbchina.cn/auth-plugin/v2/identity-authentication?clientId='+clientId+'&ui=eyJhdXRoVHlwZXMiOlsicXJDb2RlIl0sImhlYWRlciI6dHJ1ZX0%253D'
+					}
+				}
+				
+				document.getElementById('iframeSrc').src = iframeSrc
+			}
+			
+		}
+	})
+}
+
+
+/**
+ * @description: 查询初始化地址
+ * @param {} 
+ * @return: HostUrl
+ */
+let HostUrl = ''
+function getAccessUrl(){
+	let req = new Request()
+	let timeoutFn= setTimeout(function(){
+		let tips = 'GetAccessUrl 请求超时'
+		ModalPrompt(tips, 'pathN')
+	},60000)
+		
+	CenterSettingService.GetAccessUrl(req, function(ret) {
+		logEvent("GetAccessUrl ret: "+JSON.stringify(ret));
+		console.log("GetAccessUrl ret: "+JSON.stringify(ret));
+		if(ret){
+			clearTimeout(timeoutFn);
+			// HostUrl = ret.HostUrl
+			// $('.urlAccessAddr').html(ret.HostUrl)
+		}
+		
+	})
+}
+
+
+/**
+ * @description: 查询准入地址
+ * @param {reqName:'HostUrl'} 
+ * @return: HostUrl
+ */
+function getCertainAceessUrl(){
+	let req = new Request()
+	req.reqName = 'HostUrl'
+	let timeoutFn= setTimeout(function(){
+		let tips = 'GetCertainAceessUrl 请求超时'
+		ModalPrompt(tips, 'pathN')
+	},60000)
+		
+	CenterSettingService.GetCertainAceessUrl(req, function(ret) {
+		logEvent("GetCertainAceessUrl ret: "+JSON.stringify(ret));
+		console.log("GetCertainAceessUrl ret: "+JSON.stringify(ret));
+		if(ret){
+			clearTimeout(timeoutFn);
+			HostUrl = ret.CertainAceessUrl
+			$('.urlAccessAddr').html(ret.CertainAceessUrl) 
+		}
+		
+	})
+}
+
+
+
+
+
+/**
+ * @description: modal显示设置
+ * @param {tips: 提示信息,pathType:pathY|pathN 提示类型,origion:选填 来源 InitializeNew| } 
+ * @return: 
+ */
+let promptType='',origion=''
+ function ModalPrompt(tips,pathType,origions){
+	$('#modalPrompt').fadeIn('slow')
+	$('#loadContent').fadeOut('slow')
+
+	$('#errTips').html(tips);
+	let path = (pathType == 'pathY') ? './images/success.png' :  './images/fail.png'
+	$('#modalPrompt img').attr('src', path)
+
+	promptType = pathType;
+	if(origions){
+		origion= origions;
+	}
+	
+}
+
+/**
+ * @description: modal关闭设置
+ * @param {type} 
+ * @return: 
+ */
+function closeModal(type){
+	if(type=='prompt'){
+		$('#modalPrompt').fadeOut('slow')
+
+		// 重置设备密钥失败后,切换title话术,显示重试按钮
+		if(promptType=='pathN' && origion=='InitializeNew'){
+
+			$('#scanIdentity').fadeOut(); //二维码关闭
+			$('#RSAReseting').fadeOut(); //重置密钥中···关闭
+			$('#ManuallyDownload').fadeOut();
+
+			setTimeout(()=>{ //延时显示,避免内容污染
+				$('#entityCheckout').fadeIn('slow')
+				$('#serverNoAccess').fadeIn('slow')
+				$('#navBtns').fadeIn('slow')
+			},500)
+		}
+	}else if(type=='toast'){
+		$('#modalErrorBox').fadeOut('slow')
+	} else{
+		$('#modalConfirm').fadeOut('slow')
+	}
+}
+
+// 关闭错误页
+function chromiumClose(){
+		let req = {};
+		req.messageType = 0;
+		req.command = 'ChromiumClose';
+		sendRequest(req); 
+}
+
+function sendRequest(request){
+  try{
+    window.cefQuery({         
+      request: JSON.stringify(request),         
+      onSuccess: function() {           
+        console.log('window.cefQuery success');         
+      },         
+      onFailure: function(error_code, error_message) {           
+				console.log('window.cefQuery error,'+error_message + ' (' + error_code + ')');   
+				let tips = error_code + error_message
+				ModalPrompt(tips,'pathN')      
+      }       
+    });     
+  }
+  catch(ex) {
+		console.log('window.cefQuery exception ',ex);
+		let tips = '退出失败'
+		ModalPrompt(tips,'pathN')
+  }
+}

+ 230 - 93
addin/res/ManagerDesktop/js/initPsd.js

@@ -10,7 +10,6 @@ window.onload=function(){
 	}
 	DeviceControlService.init();
 	CenterSettingService.init();
-	//InitializerService.init();
 	AccessAuthService.init();
 
 	WebSocketBase.socket.onerror = function () {
@@ -18,8 +17,7 @@ window.onload=function(){
 		let tips = "终端链接失败"
 		ModalStyle(tips, 'pathN')
 	};
-  ReadCenterConfig('centerSetting');
-	ReadCenterConfig('access');
+
 	logEvent("initinar onload");
 };
 
@@ -37,6 +35,23 @@ function ModalStyle(tips,pathType){
 	$('#modalBox img').attr('src', path)
 }
 
+function showToast(title){
+	$('#toastErrTips').html(title);
+	$('#loading_mask').hide();
+	$('#toastErrorBox').fadeIn('slow')
+	setTimeout(()=>{
+		$('#toastErrorBox').fadeOut('slow')
+	},2000)
+}
+
+function changeInput(obj){
+	if(obj.value!=''){
+		$('#btn-downLoad').removeAttr('disabled');
+	}else{
+		$('#btn-downLoad').attr('disabled','disabled');
+	}
+}
+
 /**
  * @description: 输入不为null校验
  * @param {type} 
@@ -63,18 +78,15 @@ function RegExpNull(vals){
  * @return: 
  */
 function onblurAddr(IPType){
-	let RegxIP;
+	let RegxIP = new RegExp("^((25[0-5]|2[0-4]\\d|[1]{1}\\d{1}\\d{1}|[1-9]{1}\\d{1}|\\d{1})($|(?!\\.$)\\.)){4}$");
 	let tips,IpAddr
 	switch(IPType)
 	{
 		case 'config': 
-			var strRegex = '^((https|http)://)' + '(([0-9a-zA-Z_!~*\'().&=+$%-]+: )?[0-9a-zA-Z_!~*\'().&=+$%-]+@)?' + '(([0-9]{1,3}\.){3}[0-9]{1,3}' + '|' + '([0-9a-zA-Z_!~*\'()-]+\.)*' + '([0-9a-zA-Z][0-9A-Za-z-]{0,61})?[0-9A-Za-z]\.' + '[a-zA-Z]{2,6})' + '(:[0-9]{1,4})?' + '((/?)|' + '(/[0-9A-Za-z_!~*\'().;?:@&=+$,%#-]+)+/?)$';
-			RegxIP = new RegExp(strRegex);
 			IpAddr = $(".config input[name='configAddr']").val(); 
 			tips = '集中配置地址格式不正确'
 			break;
 		case 'access': 
-			RegxIP = new RegExp("^((25[0-5]|2[0-4]\\d|[1]{1}\\d{1}\\d{1}|[1-9]{1}\\d{1}|\\d{1})($|(?!\\.$)\\.)){4}$");
 			IpAddr = $(".setting input[name='accessAddr']").val();
 			tips = '准入服务地址格式不正确'
 			break;
@@ -85,27 +97,40 @@ function onblurAddr(IPType){
 	}
 }
 
-let timeout=6000;
-// let timeoutFn= setTimeout(function(){
-// 		$('#loadContent').fadeOut('slow')
-// 		let tips = '请求超时'
-// 		ModalStyle(tips,'pathN')
-// 		console.log('timeoutFn---setTimeout->')
-// },timeout)
-	
+let timeout=60000;
 /**
  * @description: 下载集中配置
  * @param {type} 
  * @return: 
  */
 
+let ti = 29;
+let timeChange = null;
+
+function clock () {
+	if (ti > 0) {
+		ti = ti - 1;
+		document.getElementById('restart-time').innerHTML = ti;
+	} else {
+		clearInterval(timeChange);
+		ti = 29;
+		$('#boxRestart').fadeOut('slow');
+		exitTipsColck();
+		DeviceService.RebootShell();
+	}
+};
+
+function restart(){
+	clearInterval(timeChange);
+	ti = 29;
+	$('#boxRestart').fadeOut('slow');
+	exitTipsColck();
+	DeviceService.RebootShell();
+}
+
 function downLoad(){
 	let req = new Request(),reqIn ={};
-	let data = document.getElementsByTagName('input');
-	reqIn.strAddr = data['configAddr'].value;
-	reqIn.nPort = 0; //Number( data['configPoint'].value)
-	req.timeout = 60000
-	req = Object.assign({},req,reqIn)
+	// req.downloadv2 = 1;
 
 	let IsNull = RegExpNull(reqIn)
 	if(IsNull) return false
@@ -114,30 +139,128 @@ function downLoad(){
 	let timeoutFn= setTimeout(function(){
 		$('#loadContent').fadeOut('slow')
 		let tips = '请求超时'
-		ModalStyle(tips,'pathN')
-		console.log('timeoutFn--downLoad-setTimeout222->')
+		showToast(tips);
 	},timeout)
 
-	logEvent("CenterSettingService->downLoad");
-
-	// InitializerService.DownloadCenterSetting(req, (ret)=> {
-	CenterSettingService.Download(req, function(ret) {
+	CenterSettingService.Downloadv2(req, function(ret) {
 		logEvent("Download ret: "+JSON.stringify(ret));
-
+		console.log("Download ret: "+JSON.stringify(ret));
+		
 		if(ret){
+			clearTimeout(timeoutFn);
 			$('#loadContent').fadeOut('slow')
-			clearTimeout(timeoutFn)
-			if(ret.errorCode !==0){
-				// let tips = (ret.errorCode == undefined) ? Number(ret.Errcode).toString(16)+ (ret.ErrMsg?ret.ErrMsg:'下载集中配置失败') : ret.errorCode + ret.errorMsg 
-				let tips = (ret.errorCode == undefined) ?(ret.ErrMsg?ret.ErrMsg:'下载集中配置失败:')+Number(ret.Errcode).toString(16) : '下载集中配置失败:'+ret.errorCode.toString(16) 
-
+			if(ret.downloadStat==2){
+				let tips = ret.strErrMsg
 				ModalStyle(tips,'pathN');
 				return false
 			}
 			let tips = '下载集中配置成功'
 				ModalStyle(tips,'pathY')
-				// 读取配置文件
-				ReadCenterConfig('access','readConfig')
+				document.getElementById("urlConfigAddr").innerHTML = ret.CenterConfigUrl;
+		}
+		
+	})
+}
+
+function downLoadv3(value){
+	if(value=='auto'){
+		let req = new Request();
+		$('#loading_mask').fadeIn('slow');
+		let timeoutFn= setTimeout(function(){
+			$('#loading_mask').fadeOut('slow');
+			let tips = '请求超时'
+			showToast(tips);
+		},timeout)
+
+		CenterSettingService.Downloadv3(req, function(ret) {
+			logEvent("Download ret: "+JSON.stringify(ret));
+			console.log("Download ret: "+JSON.stringify(ret));
+			
+			if(ret){
+				clearInterval(timeChange);
+				clearTimeout(timeoutFn);
+				$('#loading_mask').fadeOut('slow');
+				if(ret.downloadStat==1){
+					document.getElementById("configUrl").innerHTML = ret.retCenterConfigUrl;
+					$('#boxRestart').fadeIn();
+					timeChange = setInterval(clock, 1000);
+				}else if(ret.downloadStat==3 || ret.downloadStat==2){
+					let tips = ret.strErrMsg?ret.strErrMsg:'集中配置下载失败';
+					showToast(tips);
+					return false
+				}else {
+					let msg = ret.strErrMsg?ret.strErrMsg:'集中配置下载失败';
+					let tips = msg + ',请联系总行信息部处理,是否进行手动下载?';
+					$('#modalErrorBox').fadeIn('slow');
+					$('#modalErrTips').html(tips);
+					return false
+				}
+			}
+		})
+	}else{
+		$('#ManuallyDownloadError').html("");
+		$('#ManuallyDownloadError').hide();
+		let req = new Request(),reqIn ={};
+		let data = document.getElementsByTagName('input');
+		reqIn.reqCenterConfigUrl = data['centerConfigUrl'].value;
+		req = Object.assign({},req,reqIn)
+		$('#loading_mask').fadeIn('slow');
+		let timeoutFn= setTimeout(function(){
+			$('#loading_mask').fadeOut('slow');
+			let tips = '请求超时'
+			ModalStyle(tips,'pathN')
+		},timeout)
+
+		CenterSettingService.Downloadv3(req, function(ret) {
+			logEvent("Download ret: "+JSON.stringify(ret));
+			console.log("Download ret: "+JSON.stringify(ret));
+			if(ret){
+				clearInterval(timeChange);
+				clearTimeout(timeoutFn);
+				$('#loading_mask').fadeOut('slow');
+				if(ret.downloadStat==1){
+					exit();
+					document.getElementById("configUrl").innerHTML = ret.retCenterConfigUrl;
+					$('#boxRestart').fadeIn();
+					timeChange = setInterval(clock, 1000);
+				}else if(ret.downloadStat==3){
+					exit();
+					let tips = ret.strErrMsg?ret.strErrMsg:'集中配置是最新版本';
+					showToast(tips);
+					return false
+				}else {
+					let msg = ret.strErrMsg?ret.strErrMsg:'集中配置下载失败';
+					$('#ManuallyDownloadError').html(msg);
+					$('#ManuallyDownloadError').show();
+					return false
+				}
+			}
+		})
+	}
+	
+}
+
+
+let HostUrl = "" //准入服务地址
+function getAccessUrl(){
+	let req = new Request()
+	let timeoutFn= setTimeout(function(){
+		$('#loadContent').fadeOut('slow');
+		let tips = '请求超时'
+		showToast(tips);
+	},5000)
+		
+	CenterSettingService.GetAccessUrl(req, function(ret) {
+		logEvent("GetAccessUrl ret: "+JSON.stringify(ret));
+		console.log("GetAccessUrl ret: "+JSON.stringify(ret));
+		if(ret){
+			clearTimeout(timeoutFn);
+			$('#loadContent').fadeOut('slow')
+			
+			// let tips = '获取准入服务地址成功'
+			// ModalStyle(tips,'pathY')
+			HostUrl = ret.HostUrl
+			document.getElementById("urlAccessAddr").innerHTML= ret.HostUrl;
 		}
 		
 	})
@@ -163,7 +286,7 @@ function ReadCenterConfig(readType,readConfig){
 		req.key = 'Server' 
 	}else{
 		req.entityName = 'CenterSetting' 
-		req.key = 'CenterConfigUrl' 
+		req.key = 'Server' 
 	}
 	req.reserved1 = 0
 	req.reserved2 = 0
@@ -180,56 +303,68 @@ function ReadCenterConfig(readType,readConfig){
 			clearTimeout(timeoutFn)
 		}
 
-		if (ret.errorCode === 0) {
-
-			let result = JSON.parse(ret['{e12a3dc0-3a0b-47c4-a8c3-75190a42ae68}'])
-
-			if (readType === 'access') {
-
-				let addr = result.value.split(' ')[0]
-				let port = result.value.split(' ')[1]
+		if(ret.errorCode ===0){
+			let result = JSON.parse(ret['{e12a3dc0-3a0b-47c4-a8c3-75190a42ae68}'] )
+			let addr = result.value.split(' ')[0]
+			let port = result.value.split(' ')[1]
 
+			if(readType==='access'){
 				$('.setting input[name=accessAddr]').val(addr)
 				$('.setting input[name=accessPort]').val(port)
-
-			} else {
-
-				let addr = result.value;
-
+			}else{
 				$('.config input[name=configAddr]').val(addr)
-				$('.config input[name=configPoint]').val('0')
+				$('.config input[name=configPoint]').val(port)
 			}
+			
 
-		} else {
+		}else{
 			let tips ='读取集中配置失败'+ret.errorCode.toString(16)
 			if(readConfig==='readConfig'){
 				ModalStyle(tips,'pathN')	
+
 			}
 		}
+		
 	})
 }
 
+
+// 扫码登录后接收code
+window.onmessage = (event) => {
+  console.log('event----',event)
+  if (event && event.data.code) {
+    //接收code参数,格式{code: "********",state:"***********"}
+		ResetRSA(event.data.code)
+		$('.iframe-box').fadeOut();
+		$('.result-wrap').fadeIn();
+		$('.tipsing').html('重置设备密钥中,稍后自动重启应用···')
+		let date = +new Date
+		let dateTime = getFamtterTimer(date)
+		$('#currDate').html(dateTime)
+  }
+};
+
 /**
  * @description: 密钥初始化
  * @param {type} 
  * @return: 
  */
-function ResetRSA(){
+function ResetRSA(code){
 		let data = document.getElementsByTagName('input');
 
     let req = new Request(),reqIn={};
-    reqIn.strAuthServer = data['accessAddr'].value
-    //reqIn.nAuthPort = Number( data['accessPort'].value)  
-    reqIn.strUserID =  data['account'].value 
-		let agentId = data['account'].value;
-		if(Number(reqIn.strUserID) ){
-			if (agentId.trim().length == 8) {
-				reqIn.strUserID = "SP" + agentId.trim();
-			} else {
-				reqIn.strUserID = "ST" + agentId.trim();
-			}
-		}
-		reqIn.strPassword = data['password'].value 
+    reqIn.strAuthServer = HostUrl; 
+    // reqIn.nAuthPort = Number( data['accessPort'].value)   todo
+    reqIn.strUserID =  code //data['account'].value 
+		// let agentId = data['account'].value;
+		// if(Number(reqIn.strUserID) ){
+		// 	if (agentId.trim().length == 8) {
+		// 		reqIn.strUserID = "SP" + agentId.trim();
+		// 	} else {
+		// 		reqIn.strUserID = "ST" + agentId.trim();
+		// 	}
+		// }
+		reqIn.strPassword = '88888888' //默认值,后台不做校验
 
 		req.timeout = 60000
 		req = Object.assign({},req,reqIn)
@@ -238,11 +373,11 @@ function ResetRSA(){
 			ModalStyle(tips,'pathN')
 			return;
 		}
-		if(reqIn.strPassword==''){
-			let tips = '密码不能为空'
-			ModalStyle(tips,'pathN')
-			return;
-		}
+		// if(reqIn.strPassword==''){
+		// 	let tips = '密码不能为空'
+		// 	ModalStyle(tips,'pathN')
+		// 	return;
+		// }
 
 		let IsNull = RegExpNull(reqIn)
 		if(IsNull) return false
@@ -252,7 +387,6 @@ function ResetRSA(){
 			$('#loadContent').fadeOut('slow')
 			let tips = '请求超时'
 			ModalStyle(tips,'pathN')
-			console.log('timeoutFn--ReadCenterConfig-setTimeout222->')
 		},timeout)
 		logEvent("AccessAuthService->InitializeNew");
 
@@ -272,8 +406,11 @@ function ResetRSA(){
 					let tips = Number(ret.Errcode).toString(16)+ (ret.ErrMsg?ret.ErrMsg:'重置密钥失败') 
 					ModalStyle(tips,'pathN')
 				}else{
-					let tips = '重置密钥成功'
+					let tips = '加载DES主密钥成功'
 					ModalStyle(tips,'pathY')
+					setTimeout(()=>{
+						DeviceService.RebootShell() //初始化成功后自动重启应用
+					},3000)
 				}
 			}
 			else{
@@ -283,17 +420,33 @@ function ResetRSA(){
 		});
 }
 
-function closeModal(){
-	$('#modalBox').fadeOut('slow')
+function closeModal(value){
+	if(value=='modal'){
+		$('#modalBox').fadeOut('slow')
+	}else{
+		$('#modalErrorBox').fadeOut('slow')
+	}
+}
+
+function showManuallyDownloadModal(){
+	$('#modalErrorBox').fadeOut('slow');
+	$('#ManuallyDownload').fadeIn('slow');
 }
 
 
 function exit(){
+	// document.getElementById("urlConfigAddr").innerHTML ="";
+	// document.getElementById("urlAccessAddr").innerHTML = "";
+	// document.getElementsByTagName('input')['centerConfigUrl'].value="";
+	$('#ManuallyDownloadError').html("");
+	$('#ManuallyDownloadError').hide();
+	$('#btn-downLoad').attr('disabled','disabled');
 	// 进入的方式,决定退出的方式
-	console.log('window.location',window.location,window.location.href.indexOf('errPage'))
 	if(window.location.href.indexOf('errPage')>-1){
 		$('.iframeDiv').fadeOut();
-
+		$('.iframe-box').fadeOut();
+		$('.result-wrap').fadeOut();
+		$('#ManuallyDownload').fadeOut();
 	}else{
 		let req = {};
 		req.messageType = 0;
@@ -302,14 +455,6 @@ function exit(){
 	}
 }
 
-function quitThisPage() {
-	open(location, '_self').close();
-}
-
-function minizeThisPage() {
-	//open(location, '_self').minize();
-}
-
 function sendRequest(request){
   try{
     window.cefQuery({         
@@ -325,16 +470,8 @@ function sendRequest(request){
     });     
   }
   catch(ex) {
-	  console.log('window.cefQuery exception ', ex);
-	  if (request.command === 'ChromiumClose') {
-		  quitThisPage();
-	  }
-	  //else if (request.command === 'ChromiumTomin') {
-
-	  //}
-	  else {
-		  let tips = '退出失败'
-		  ModalStyle(tips, 'pathN')
-	  }
+		console.log('window.cefQuery exception ',ex);
+		let tips = '退出失败'
+		ModalStyle(tips,'pathN')
   }
 }

+ 340 - 0
addin/res/ManagerDesktop/js/navOprator.js

@@ -0,0 +1,340 @@
+// *********************下载集中配置 Start*********************/
+let ti = 29;
+let timeout=60000;
+let timeChange = null;
+function clock () {
+	if (ti > 0) {
+		ti = ti - 1;
+		document.getElementById('restart-time').innerHTML = ti;
+	} else {
+		clearInterval(timeChange);
+		ti = 29;
+		$('#boxRestart').fadeOut('slow');
+		exitColck();
+		DeviceService.RebootShell();
+	}
+};
+
+function restart(){
+	clearInterval(timeChange);
+	ti = 29;
+	$('#boxRestart').fadeOut('slow');
+	exitColck();
+	DeviceService.RebootShell();
+}
+
+function showToast(title){
+	$('#toastErrTips').html(title);
+	$('#loading_mask').hide();
+	$('#toastErrorBox').fadeIn('slow')
+	setTimeout(()=>{
+		$('#toastErrorBox').fadeOut('slow')
+	},2000)
+}
+
+function changeInput(obj){
+	if(obj.value!=''){
+		$('#btn-downLoad').removeAttr('disabled');
+	}else{
+		$('#btn-downLoad').attr('disabled','disabled');
+	}
+}
+
+function showManuallyDownloadModal(){
+	$('#modalErrorBox').fadeOut('slow');
+	$('#ManuallyDownload').fadeIn('slow');
+	// RebootShell()
+}
+
+/**
+ * @description: 下载集中配置:自动下载失败,可以进行手动下载
+ * @param {value:自动下载 auto | 手动下载 manual} 
+ * @return: downloadStat
+ */
+function downLoadv3(value){
+	if(value=='auto'){
+		let req = new Request();
+		$('#loading_mask').fadeIn('slow');
+		let timeoutFn= setTimeout(function(){
+			$('#loading_mask').fadeOut('slow');
+			let tips = '请求超时'
+			showToast(tips);
+		},timeout)
+    
+		CenterSettingService.Downloadv3(req, function(ret) {
+			logEvent("Download ret: "+JSON.stringify(ret));
+			console.log("Download ret: "+JSON.stringify(ret));
+			
+			if(ret){
+				clearInterval(timeChange);
+				clearTimeout(timeoutFn);
+				$('#loading_mask').fadeOut('slow');
+				// downloadStat为1表示成功,2表示失败但是不需要手动下载,3表示不需要更新,4表示失败并且允许手动下载
+				if(ret.downloadStat==1){
+					document.getElementById("configUrl").innerHTML = ret.retCenterConfigUrl;
+					$('#boxRestart').fadeIn();
+					timeChange = setInterval(clock, 1000);
+				}else if(ret.downloadStat==3 || ret.downloadStat==2){
+					let tips = ret.strErrMsg?ret.strErrMsg:'集中配置下载失败';
+					showToast(tips);
+					return false
+				}else {
+					let msg = ret.strErrMsg?ret.strErrMsg:'集中配置下载失败';
+					let tips = msg + ',请联系总行信息部处理,是否进行手动下载?';
+					$('#modalErrorBox').fadeIn('slow');
+					$('#modalErrTips').html(tips);
+					return false
+				}
+			}
+		})
+	}else{
+		$('#ManuallyDownloadError').html("");
+		$('#ManuallyDownloadError').hide();
+		let req = new Request(),reqIn ={};
+		let data = document.getElementsByTagName('input');
+		reqIn.reqCenterConfigUrl = data['centerConfigUrl'].value;
+		req = Object.assign({},req,reqIn)
+		$('#loading_mask').fadeIn('slow');
+		let timeoutFn= setTimeout(function(){
+			$('#loading_mask').fadeOut('slow');
+			let tips = '请求超时'
+			ModalPrompt(tips,'pathN')
+		},timeout)
+
+		CenterSettingService.Downloadv3(req, function(ret) {
+			logEvent("Download ret: "+JSON.stringify(ret));
+			console.log("Download ret: "+JSON.stringify(ret));
+			if(ret){
+				clearInterval(timeChange);
+				clearTimeout(timeoutFn);
+				$('#loading_mask').fadeOut('slow');
+
+				// downloadStat为1表示成功,2表示失败但是不需要手动下载,3表示不需要更新,4表示失败并且允许手动下载
+				if(ret.downloadStat==1){
+					document.getElementById("configUrl").innerHTML = ret.retCenterConfigUrl;
+					$('#boxRestart').fadeIn();
+					timeChange = setInterval(clock, 1000);
+				}else if(ret.downloadStat==3){
+					let tips = ret.strErrMsg?ret.strErrMsg:'集中配置是最新版本';
+					showToast(tips);
+					return false
+				}else {
+					let msg = ret.strErrMsg?ret.strErrMsg:'集中配置下载失败';
+					let tips = msg + ',请联系总行信息部处理,是否进行手动下载?';
+					$('#modalErrorBox').fadeIn('slow');
+					$('#modalErrTips').html(tips);
+					return false
+				}
+			}
+		})
+	}
+}
+// *********************下载集中配置 End*********************/
+
+// 密钥初始化Btn
+function resetRSA(){
+  $('#entityCheckout').fadeOut()
+	$('#serverNoAccess').fadeOut()
+  $('#navBtns').fadeOut() //二维码没有菜单btns
+	setTimeout(()=>{ //延时显示,避免内容污染
+		$('#scanIdentity').css({display:'flex'});
+	},300)
+	getHardwareInfo()
+}
+
+// 扫码登录后接收code
+let codeIndentity
+window.onmessage = (event) => {
+  console.log('event----',event)
+  if (event && event.data.code) {
+    //接收code参数,格式{code: "********",state:"***********"}
+		codeIndentity = event.data.code;
+		initializeNew(event.data.code)
+    $('#scanIdentity').fadeOut()
+		setTimeout(()=>{ //延时显示,避免内容污染
+			$('#RSAReseting').css({display:'flex'});
+		},300)
+    
+		document.getElementById('restDot').innerHTML = '重置设备密钥中,稍后自动重启应用<dot class="dot">●●●●●●</dot>'
+
+  }
+};
+
+function initializeNew(code){
+  let req = new Request()
+  req.strAuthServer = HostUrl; 
+  req.strUserID =  code 
+  req.strPassword = '88888888' //默认值,后台不做校验
+  req.timeout = 60000
+
+  let timeoutFn= setTimeout(function(){
+    let tips = '请求超时'
+    ModalPrompt(tips,'pathN','InitializeNew')
+    stopAnimation();
+		document.getElementById('restDot').innerHTML = '重置设备密钥失败,请重试或联系厂商维修'
+  },timeout)
+
+  //重置密钥
+  AccessAuthService.InitializeNew(req,  function(ret) {
+    logEvent("InitializeNew ret: "+JSON.stringify(ret));
+    console.log("InitializeNew ret: "+JSON.stringify(ret));
+
+    if(ret){
+      stopAnimation();
+      clearTimeout(timeoutFn)
+    }
+
+    if(ret.errorCode == 0) {
+      if(ret.Errcode !== 0)
+      {
+        let tips = ret.ErrMsg ? ret.ErrMsg : '重置密钥失败'
+        ModalPrompt(tips,'pathN','InitializeNew')
+				document.getElementById('restDot').innerHTML = '重置设备密钥失败,请重试或联系厂商维修'
+
+      }else{
+        let tips = '加载主密钥成功'
+        ModalPrompt(tips,'pathY')
+        setTimeout(()=>{
+          $('#modalPrompt').fadeOut('slow')
+					DeviceService.RebootShell();
+          exitColck()
+        },2000)
+      }
+    }
+    else{
+			let tips = ret.errorMsg ? ret.errorMsg : '重置密钥失败'
+			ModalPrompt(tips,'pathN','InitializeNew')
+			document.getElementById('restDot').innerHTML = '重置设备密钥失败,请重试或联系厂商维修'
+
+    }
+  });
+}
+
+function startAnimation(){
+	let elem = document.querySelector('.dot');
+	if(elem){
+		elem.classList.remove('paused')
+	}
+}
+
+function stopAnimation(){
+	let elem = document.querySelector('.dot');
+	if(elem){
+		elem.classList.add('paused')
+	}
+}
+
+// 退出
+function exit(){
+	document.getElementsByTagName('input')['centerConfigUrl'].value="";
+	$('#ManuallyDownloadError').html("");
+	$('#ManuallyDownloadError').hide();
+	$('#btn-downLoad').attr('disabled','disabled');
+	// 进入的方式,决定退出的方式
+	if(window.location.href.indexOf('entityCheck')>-1||window.location.href.indexOf('serverNoAccess')>-1){
+		$('#scanIdentity').fadeOut(); //二维码关闭
+		$('#RSAReseting').fadeOut(); //重置密钥中···关闭
+		$('#ManuallyDownload').fadeOut();
+
+		setTimeout(()=>{ //延时显示,避免内容污染
+			$('#entityCheckout').fadeIn('slow')
+			$('#serverNoAccess').fadeIn('slow')
+			$('#navBtns').fadeIn('slow')
+		},500)
+	}else{
+		let req = {};
+		req.messageType = 0;
+		req.command = 'ChromiumClose';
+		sendRequest(req); 
+	}
+}
+
+// 最小化btn
+function Minimize(){
+  let req = {};
+  req.messageType = 0;
+  req.command = 'ChromiumTomin';
+  sendRequest(req); 
+}
+
+
+let btnType
+//重启shell
+function RebootShell(){
+  logEvent("RebootShell");
+  btnType = 'RebootShell'
+  modalConfirm('确认重启应用?')
+}
+
+//重启
+function RebootComputer(){
+  logEvent("RebootComputer");
+  modalConfirm('确认重启计算机?')
+  btnType = 'RebootComputer'
+}
+
+//关机
+function PowerOff(){
+  logEvent("PowerOff");
+  btnType = 'PowerOff'
+  modalConfirm('确认关闭计算机?')
+}
+
+// modal二次确认弹窗
+function modalConfirm(tips){
+	$('#modalConfirm').fadeIn('slow')
+	$('#errTipsErr').html(tips);
+}
+
+// modal 确定事件
+function clickSure(){
+  if(!btnType)return false;
+  $('#modalConfirm').fadeOut('slow')
+  exitColck()
+  switch(btnType)
+  {
+    case 'RebootShell': DeviceService.RebootShell(); break;
+    case 'RebootComputer': DeviceService.RebootComputer();break
+    case 'PowerOff': DeviceService.PowerOff(); break;
+  }
+  
+}
+
+// 20s后关闭错误页,自动退出
+function exitColck(){
+  $('#modalExit').fadeIn('slow')
+  let clock = 20
+  let timer = setInterval(function(){
+    clock--
+    if(clock==0){
+      let req = {};
+      req.messageType = 0;
+      req.command = 'ChromiumClose';
+      sendRequest(req); 
+      clearInterval(timer)
+      $('#modalExit').fadeOut('slow')
+    }
+  },1000)
+}
+
+
+function sendRequest(request){
+  try{
+    window.cefQuery({         
+      request: JSON.stringify(request),         
+      onSuccess: function() {           
+        console.log('window.cefQuery success');         
+      },         
+      onFailure: function(error_code, error_message) {           
+				console.log('window.cefQuery error,'+error_message + ' (' + error_code + ')');   
+				let tips = error_code + error_message
+				ModalPrompt(tips,'pathN')      
+      }       
+    });     
+  }
+  catch(ex) {
+		console.log('window.cefQuery exception ',ex);
+		let tips = '退出失败'
+		ModalPrompt(tips,'pathN')
+  }
+}

+ 7 - 0
addin/res/ManagerDesktop/restartMessage.html

@@ -0,0 +1,7 @@
+<html>
+    <head>
+    </head>
+    <body style="background:rgb(255, 240, 192); overflow-x:hidden; overflow-y:hidden">
+        <p id="t1" style="font-size:50px; text-align:center;"> 软件升级完成,可视柜台即将重启,请稍等…… </p>
+    </body>
+</html>

+ 329 - 0
addin/res/ManagerDesktop/serverNoAccess.html

@@ -0,0 +1,329 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<title>错误页-禁止准入</title>
+		<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
+		<link rel="stylesheet" type="text/css" href="css/errType.css" />
+		<link rel="stylesheet" type="text/css" href="css/loading.css" />
+		<link rel="stylesheet" type="text/css" href="css/non-ie-style.css" /> 
+		<link rel="stylesheet" type="text/css" href="css/loading.css" />
+
+		<style>
+			.server-NoAccess #errorInfo{
+				width: 50%;
+				color: #F95A56;
+				text-align: center;
+				line-height: 42px;
+				font-weight: 400;
+				margin: 10px 0px 30px 0px;
+			}
+
+			.reset-dot{
+				margin-bottom: 30px;
+			}
+			.entity-item{
+				display: none;
+			}
+			.iframe-box{
+				flex-direction: column;
+				justify-content: center;
+				align-items: center;
+			}
+			#RSAReseting,
+			#errExit{
+				display: none;
+			}
+			#RSAReseting .btn-blue{
+				display: none;
+				margin-top: 70px;
+			}
+			
+			@media screen and (max-width:1300px) {
+				.server-NoAccess #errorInfo{
+					width: 60%;
+				}
+			}
+		</style>
+	</head>
+	<body class="errType">
+		<nav>
+			<div class="logo">
+				<img width="100%" src="./images/logo_cmb.png" />
+			</div>
+			<ul id="navBtns">
+				<li class="fz_20" id="downLoadConfig" onclick="downLoadv3('auto')">	下载集中配置 </li>
+				<li class="fz_20" id="resetPsd" onclick="resetRSA()">	重置密钥 </li>
+				<li class="fz_20" onclick="RebootShell()">	重启应用 </li>
+				<li class="fz_20" onclick="RebootComputer()">	重启计算机 </li>
+				<li class="fz_20" onclick="PowerOff()">	关机 </li>
+				<li class="fz_20" id="minimize" onclick="Minimize()">	最小化 </li>
+			</ul>
+		</nav>
+		<div class="hareword-info server-NoAccess" id="serverNoAccess">
+			<h3 class="fz_44" id="title">设备已停止准入</h3>
+			<p class="fz_32" id="errorInfo"></p>
+			<div class="result-wrap">
+				<div class="result-item">
+					<label class="fz_28">终端号</label>
+					<span class="fz_28 terminalNo"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">当前时间</label>
+					<span class="fz_28 currDate"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">终端版本</label>
+					<span class="fz_28 termVersion"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">准入地址</label>
+					<span class="fz_28 urlAccessAddr"></span>
+				</div>
+			</div>
+		</div>
+
+		
+		<!-- 二维码后 重置设备密钥Start -->
+		<div class="hareword-info RSA-reseting" id="RSAReseting">
+			<h3 class="fz_44 reset-dot" id="restDot">重置设备密钥中,稍后自动重启应用<dot class="dot">●●●●●●</dot></h3>
+			<div class="result-wrap">
+				<div class="result-item">
+					<label class="fz_28">终端号</label>
+					<span class="fz_28 terminalNo"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">当前时间</label>
+					<span class="fz_28 currDate"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">终端版本</label>
+					<span class="fz_28 termVersion"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">准入地址</label>
+					<span class="fz_28 urlAccessAddr"></span>
+				</div>
+			</div>
+			<button class="btn-blue" id="restartRSA" onclick="restartRSA()">重试</button>
+			<button class="btn-link fz_24" id="errExit" onclick="exit()">退出</button>
+		</div>
+		<!-- 二维码后 重置设备密钥Start -->
+
+		<!-- 初始化二维码验证 -->
+		<div class="iframe-box" id="scanIdentity">
+			<iframe frameborder="no" border="0" allowtransparency="yes" allow="microphone;camera;midi;encrypted-media;"
+				height="215" width="300" id="iframeSrc" src=""></iframe>
+			<p>请完成招乎扫码认证</p>
+			<button class="btn-link fz_24" onclick="exit()">退出</button>
+		</div>
+		<!-- 初始化二维码验证 -->
+		
+		<!-- 提示框 -->
+		<div class="modal-box" id="modalPrompt">
+			<div class="coverBg"></div>
+			<div class="modal" id="modal">
+				<img src="./images/success.png" />
+				<p class="fz_24" id="errTips"></p>
+				<button class="fz_23 btn-blues" onclick="closeModal('prompt')">确定</button>
+			</div>
+		</div>
+		<!-- 提示框 -->
+
+		<!-- 二次确认提示框 -->
+		<div class="modal-box" id="modalConfirm">
+			<div class="coverBg"></div>
+			<div class="modal" id="modalErr">
+				<h3 class="fz_32 " id="errTipsErr">确认重启应用</h3>
+				<div class="btns">
+					<button class="btn-gray fz_23" onclick="clickSure()">确 定</button>
+					<button class="btn-blues fz_23" onclick="closeModal('confirm')">取 消</button>
+				</div>
+			</div>
+		</div>
+		<!-- 二次确认提示框 -->
+		<!-- 退出提示框 -->
+		<div class="modal-box" id="modalExit">
+			<div class="coverBg"></div>
+			<div class="box">
+				请稍等,应用即将退出
+			</div>
+		</div>
+		<!-- 退出提示框 -->
+
+		<!-- 下载集中配置 Start -->
+		<div class="toast_box" id="ManuallyDownload">
+			<div class="modal_warpper">
+				<div class="box_wrapper" style="margin-top: 50px;">
+					<div class="modal_title">手动下载</div>
+					<div class="input_wrapper">
+						<input name="centerConfigUrl" placeholder="请输入集中配置下载地址" class="inputURL" oninput="changeInput(this)"/>
+					</div>
+					<div id="ManuallyDownloadError" class="input_error">集中配置下载失败</div>
+				</div>
+				<div class="btn_wrapper">
+					<div class="btn_cancel"  onclick="exit()">返回</div>
+					<button class="btn_confirm" onclick="downLoadv3('manual')" disabled="true" id="btn-downLoad">下载</button>
+				</div>
+			</div>
+		</div>
+
+		<div class="toast_box" id="toastErrorBox">
+			<div class="toast_wrapper">
+				<div class="box_wrapper">
+					<img src="./images/warningCircle.png" class="wran_icon"/>
+					<p id="toastErrTips">下载集中配置成功</p>
+				</div>
+			</div>
+		</div>
+
+		<div class="toast_box" id="modalErrorBox">
+			<div class="modal_warpper">
+				<div class="box_wrapper" style="margin-top: 50px;">
+					<div class="modal_title">下载集中配置</div>
+					<div id="modalErrTips">目标地址异常,请联系总行信息技术部处理,是否进行手动下载?</div>
+				</div>
+				<div class="btn_wrapper">
+					<div class="btn_cancel" onclick="closeModal('toast')">返回</div>
+					<div class="btn_confirm" onclick="showManuallyDownloadModal()">确认</div>
+				</div>
+			</div>
+		</div>
+
+		<div class="toast_box" id="boxRestart">
+			<div class="modal_warpper">
+				<div class="box_wrapper" style="margin-top: 20px;">
+					<div class="modal_title">重启应用</div>
+					<div class="restart_span">
+						集中配置已完成下载,重启后生效(地址:
+						<span id="configUrl"></span>
+						)
+					</div>
+				</div>
+				<div class="rows_restart">
+					<span>
+						<span id="restart-time">29</span>
+						<span>秒后自动重启</span>
+					</span>
+					<button class="btn_confirm" onclick="restart()">重启应用</button>
+				</div>
+			</div>
+		</div>
+
+		<div id='loading_mask'>
+			<div class='loading_wrapper'>
+				<!-- loading 菊花旋转-->
+				<div class='loading_icon_wrapper'>
+					<div class='loading_icon'>
+						<div class="load-line rotate-0">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div class="load-line rotate-30">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div class="load-line rotate-60">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div class="load-line rotate-90">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div class="load-line rotate-120">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div class="load-line rotate-150">
+							<span class="left"></span>
+							<span class="right"></span>
+						</div>
+						<div id="circle-center"></div>
+					</div>
+				</div>
+				<!-- loading 菊花旋转-->
+				<div class='loading_title'>
+					<span>正在下载中</span>
+					<span class="loading_point"></span>
+					<span class="loading_point"></span>
+					<span class="loading_point"></span>
+				</div>
+			</div>
+		</div>
+		<!-- 下载集中配置 End-->
+
+		<!-- loading -->
+		<div id='loadContent'>
+			<div class="back_cover" ></div>
+			<div class='loading' id='loading'>
+				<div class='circle circle1'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+				<div class='circle circle2'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+				<div class='circle circle3'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+			</div>
+		</div>
+		<!-- loading -->
+
+	</body>
+	<script type="text/javascript" src="Include/LsyCookie.js"></script>
+	<script type="text/javascript" src="js/common.js"></script>
+	<script type="text/javascript" src="js/websocket.js"></script>
+	<script type="text/javascript" src="js/webSocketBase.js"></script>
+	<script type="text/javascript" src="js/entityMessage.js"></script>
+	<script type="text/javascript" src="js/eventEmitter.js"></script>
+	<script type="text/javascript" src="js/innerEventEmitter.js"></script>
+	<script type="text/javascript" src="js/errorCodeEnum.js"></script>
+	<script type="text/javascript" src="js/entityService.js"></script>
+	<script type="text/javascript" src="Include/jQuery/js/jquery.min.js" ></script>
+	<script type="text/javascript" src="js/getTerminalInfo.js"></script>
+	<script type="text/javascript" src="js/navOprator.js"></script>
+	<script type="text/javascript">
+		getAuthErrMsg()
+		function getAuthErrMsg(){
+			let req = new Request()
+			let timeoutFn= setTimeout(function(){
+				let tips = 'GetAuthErrMsg 请求超时'
+				ModalPrompt(tips, 'pathN')
+			},5000)
+		
+			HealthManagerService.GetAuthErrMsg(req, function(ret) {
+				logEvent("GetAuthErrMsg ret: "+JSON.stringify(ret));
+				console.info("GetAuthErrMsg ret: "+JSON.stringify(ret));
+				if(ret){
+					clearTimeout(timeoutFn);
+					if(ret.errorCode==0){
+						try{
+							let data = JSON.parse(ret.errMsg)
+							if(data.message){
+								$('#title').html(data.message.title)
+								$('#errorInfo').html(data.errcode +' '+data.message.msg)
+							}
+						}catch(err){
+							$('#title').html(ret.errMsg)
+							$('#errorInfo').fadeOut()
+						}
+					}else{
+						$('#title').html('设备已停止准入')
+						$('#errorInfo').fadeOut()
+					}
+				}
+				
+			})
+		}
+	</script>
+</html>

+ 421 - 0
addin/res/ManagerDesktop/showStatus.html

@@ -0,0 +1,421 @@
+<html>
+    <head>
+        <style type="text/css">
+            .logo1,.logo2,.logo3{        
+                float: right;
+            }
+            
+        </style>
+        <script>
+            UpgradeStatus = 0;
+            isDownloading = false;
+            connetType = 2;
+            isPad = false;
+        </script>
+    </head>
+    
+    <body>
+        <div class="logo3" style="position: relative; " onselectstart="return false;">
+            <img src="./terminalstatus/battery-back.png" id="battery" height="32px" style=" visibility:hidden; margin-right:80px; margin-top:-9px;"/></img>
+            <font id="backcolor" size="1" style="position: absolute; top: 7; right:64; background: #c9c7c7e9; transform: scale(0.8);"></font>
+            <font id="bt" size="1" style="position: absolute; top: -1; left: 2; transform: scale(0.85);" color="black"></font>
+        </div>
+        <div class="logo2" onselectstart="return false;">
+            <img src="./terminalstatus/netline-connected.png" id="net" height="40px" style=" visibility:hidden; margin-right:20px; margin-top:-13px;"/>
+        </div>
+        <!-- <div class="logo1">
+            <img src="./images/update.png" id="img3" width="30" style="margin-right:20px;"/>
+        </div> -->
+        <div class="logo1" style="position: relative;" onselectstart="return false;">
+            <img src="./terminalstatus/download.png" id="upgrade" height="40px" style=" visibility:hidden; margin-right:20px; margin-top:-13px;"/>
+            <font size="1" id="downloadprogress" style="position: absolute; top: -2.6; left: -2; transform: scale(0.72); background: #fdfdfd; border:1px solid rgb(255, 255, 255); border-radius: 100%" color="black" ></font>
+            <!-- 图片覆盖 -->
+            <!-- <img src="./images/update.png" id="img3" width="30" style="position: absolute; top: 0; left: 0; "/>
+            <img src="./images/wifi.png" id="img3" width="30" style="position: absolute; top: 0; left: 0; "/> -->
+        </div>
+    </body>
+    
+    <script type="text/javascript" src="js/common.js"></script>
+	<script type="text/javascript" src="js/websocket.js"></script>
+	<script type="text/javascript" src="js/webSocketBase.js"></script>
+	<script type="text/javascript" src="js/entityMessage.js"></script>
+	<script type="text/javascript" src="js/eventEmitter.js"></script>
+	<script type="text/javascript" src="js/innerEventEmitter.js"></script>
+	<script type="text/javascript" src="js/errorCodeEnum.js"></script>
+	<script type="text/javascript" src="js/entityService.js"></script>
+	<script type="text/javascript" src="Include/jQuery/js/jquery.min.js" ></script>
+    <script type="text/javascript" src="js/initPsd.js"></script>
+    <script>
+        var eventID="showStatus";
+        window.onload=function(){
+            ResourceWatcherService.init();
+            UpgradeMgrService.init();
+
+            EventEmitter.subscribe('BatteryStatus', eventID, (evt)=> {
+                console.log("ResourcewatcherBroadcast:"+ JSON.stringify(evt));
+                document.getElementById("bt").innerHTML= evt.reversed1;  //电量剩余
+                
+                if(evt.reversed1 == 100)
+                {
+                    document.getElementById("bt").style="position: absolute; top: -1; left: 2; scale(0.8);"
+                }
+                else
+                {
+                    document.getElementById("bt").style="position: absolute; top: -1; left: 7; scale(0.8);"
+                    document.getElementById("bt").color="black"
+                }
+                
+                //if(evt.status == 0 || evt.status == 1 || evt.status == 2 || evt.status == 4)
+                if(evt.status == 0)
+                {
+                    if(evt.reversed1 <= 100 && evt.reversed1 > 90)
+                    {
+                        changeBatteryImg100();
+                    }
+                    else if(evt.reversed1 <= 90 && evt.reversed1 > 80)
+                    {
+                        changeBatteryImg90();
+                    }
+                    else if(evt.reversed1 <= 80 && evt.reversed1 > 70)
+                    {
+                        changeBatteryImg80();
+                    }
+                    else if(evt.reversed1 <= 70 && evt.reversed1 > 60)
+                    {
+                        changeBatteryImg70();
+                    }
+                    else if(evt.reversed1 <= 60 && evt.reversed1 > 50)
+                    {
+                        changeBatteryImg60();
+                    }
+                    else if(evt.reversed1 <= 50 && evt.reversed1 > 40)
+                    {
+                        changeBatteryImg50();
+                    }
+                    else if(evt.reversed1 <= 40 && evt.reversed1 > 30)
+                    {
+                        changeBatteryImg40();
+                    }
+                    else if(evt.reversed1 <= 30 && evt.reversed1 > 20)
+                    {
+                        changeBatteryImg30();
+                    }
+                    else if(evt.reversed1 == 20)
+                    {
+                        changeBatteryImg20();
+                    }
+                    else if(evt.reversed1 < 20)
+                    {
+                        changeBatteryImg10();
+                        document.getElementById("bt").color = "red";  //电量剩余
+                    }
+                }
+                //else if((evt.status == 8 || evt.status == 9 || evt.status == 10 || evt.status == 12) && (evt.reversed1 >= 20) )
+                else if((evt.status == 1) && (evt.reversed1 >= 20) )
+                {
+                    //img3.src="./images/battery_charging.png";
+                    battery.src="./terminalstatus/battery-charging.png";
+                    document.getElementById("backcolor").innerHTML= "";  //10%
+                    document.getElementById("bt").innerHTML= "";  //10%
+                }
+                //else if((evt.status == 8 || evt.status == 9 || evt.status == 10 || evt.status == 12) && (evt.reversed1 < 20) )
+                else if((evt.status == 1) && (evt.reversed1 < 20) )
+                {
+                    //img3.src="./images/battery_charging.png";
+                    battery.src="./terminalstatus/lowbattery-charging.png";
+                    document.getElementById("backcolor").innerHTML= "";  //10%
+                    document.getElementById("bt").innerHTML= ""; 
+                }
+                else
+                {
+                    battery.src="./terminalstatus/battery-back.png";
+                    document.getElementById("backcolor").innerHTML= "";  //默认
+                }
+            });
+
+            EventEmitter.subscribe('NetStatus', eventID, (evt)=> {
+                console.log("ResourcewatcherBroadcast:"+ JSON.stringify(evt));
+                if(evt.status == 1 || evt.status == 0){
+            //document.getElementById("urlAccessAddr").innerHTML= ret.HostUrl;
+                    switch (connetType) {
+                        case 2: net.src="./terminalstatus/netline-disconnected.png"; break;
+                        case 3: net.src="./terminalstatus/WI-FI-disconnected.png"; break;
+                        case 4: net.src="./terminalstatus/mobile-disconnected.png"; break;
+                        default: break;
+                    }
+                }
+                else if(evt.status == 2)
+                {
+                    net.src="./terminalstatus/netline-connected.png";
+                    connetType = 2;
+                }
+                else if( evt.status == 3)
+                {
+                    net.src="./terminalstatus/WI-FI-connected.png";
+                    connetType = 3;
+                }
+                else if( evt.status == 4)
+                {
+                    net.src="./terminalstatus/mobile-connected.png";
+                    connetType = 4;
+                }
+            });
+
+            EventEmitter.subscribe('UpgradeStateEvent', eventID, (evt)=> {
+                console.log("UpgradeMgrBroadcast:"+ JSON.stringify(evt));
+                // document.getElementById("t1").style="background:rgb(255, 240, 192); border:1px solid rgb(22, 21, 21); border-radius: 8%";
+                if(evt.cInstallState == 85) //下载中 'U'= 85
+                {
+                    UpgradeStatus = 85;
+                }
+                else if(evt.cInstallState == 73) // 'I'=73
+                {
+                    UpgradeStatus = 73;
+                    //isDownloading = false;
+                    upgrade.src="./terminalstatus/install.png";
+                    document.getElementById("upgrade").style= "margin-right:20px; margin-top:-13px;"; 
+                    document.getElementById("downloadprogress").innerHTML= "";
+                }
+                else if(evt.cInstallState == 83) // 'S'=83
+                {
+                    UpgradeStatus = 83;
+                    //isDownloading = false;
+                    upgrade.src="./terminalstatus/switch.png";
+                    document.getElementById("upgrade").style= "margin-right:20px; margin-top:-13px;"; 
+                    document.getElementById("downloadprogress").innerHTML= "";
+                }
+                else
+                {
+                    UpgradeStatus = 0;
+                    //isDownloading = false;
+                    upgrade.src="./terminalstatus/download.png";
+                    document.getElementById("upgrade").style= "visibility:hidden;  margin-right:20px; margin-top:-13px;"; 
+                    document.getElementById("downloadprogress").innerHTML= "";
+                }
+            });
+
+            EventEmitter.subscribe('UpgradeDownloadProgress', eventID, (evt)=> {
+                console.log("UpgradeMgrBroadcast:"+ JSON.stringify(evt));
+                if(evt) //下载中
+                {
+                    upgrade.src="./terminalstatus/downloading.png";
+                    document.getElementById("upgrade").style= "margin-right:20px; margin-top:-13px;"; 
+                    if(evt.progress==100)
+                    {
+                        document.getElementById("downloadprogress").innerHTML= evt.progress;  
+                    }
+                    else
+                    {
+                        if(evt.progress<10)
+                        {
+                            document.getElementById("downloadprogress").style= "position: absolute; top: -2.6; left: 1; transform: scale(0.72); background: #fdfdfd; border:1px solid rgb(255, 255, 255); border-radius: 100%"; 
+                        }
+                        else
+                        {
+                            document.getElementById("downloadprogress").style= "position: absolute; top: -2.6; left: -2; transform: scale(0.72); background: #fdfdfd; border:1px solid rgb(255, 255, 255); border-radius: 100%"
+                        }
+                        document.getElementById("downloadprogress").innerHTML= evt.progress +"%";  
+                    }
+                }
+            });
+        }
+    </script>
+    <script>
+        let req = new Request();
+	    req.type = 4;
+
+	    DeviceControlService.QueryHardwareInfo(req, function(ret) {
+		    //logEvent("GetAccessUrl ret: "+JSON.stringify(ret));
+		    console.log("QueryHardwareInfo ret: "+JSON.stringify(ret));
+		    if(ret.machineType != "RVC.PAD"){
+                document.getElementById("battery").style= "display:none;";  
+                document.getElementById("net").style= "margin-right:80px; margin-top:-13px;";  
+		    }
+            else
+            {
+                document.getElementById("battery").style= "margin-right:80px; margin-top:-9px;";  
+                document.getElementById("net").style= "margin-right:20px; margin-top:-13px;"; 
+                isPad = true;
+
+                let req3 = new Request();
+                req3.type = 18;
+                ResourceWatcherService.CheckBatteryStatus(req3, function(ret3) {
+                    //logEvent("GetAccessUrl ret: "+JSON.stringify(ret));
+                    console.log("CheckBatteryStatus ret: "+JSON.stringify(ret3));
+                    document.getElementById("bt").innerHTML= ret3.percent;  //电量剩余
+                    if(ret3.percent == 100)
+                    {
+                        document.getElementById("bt").style="position: absolute; top: -1; left: 2; scale(0.8);"
+                    }
+                    else
+                    {
+                        document.getElementById("bt").style="position: absolute; top: -1; left: 7; scale(0.8);"
+                        document.getElementById("bt").color="black"
+                    }
+                    
+                    //if(ret3.status == 0 || ret3.status == 1 || ret3.status == 2 || ret3.status == 4)
+                    if(ret3.status == 0)
+                    {
+                        if(ret3.percent <= 100 && ret3.percent > 90)
+                        {
+                            changeBatteryImg100();
+                        }
+                        else if(ret3.percent <= 90 && ret3.percent > 80)
+                        {
+                            changeBatteryImg90();
+                        }
+                        else if(ret3.percent <= 80 && ret3.percent > 70)
+                        {
+                            changeBatteryImg80();
+                        }
+                        else if(ret3.percent <= 70 && ret3.percent > 60)
+                        {
+                            changeBatteryImg70();
+                        }
+                        else if(ret3.percent <= 60 && ret3.percent > 50)
+                        {
+                            changeBatteryImg60();
+                        }
+                        else if(ret3.percent <= 50 && ret3.percent > 40)
+                        {
+                            changeBatteryImg50();
+                        }
+                        else if(ret3.percent <= 40 && ret3.percent > 30)
+                        {
+                            changeBatteryImg40();
+                        }
+                        else if(ret3.percent <= 30 && ret3.percent > 20)
+                        {
+                            changeBatteryImg30();
+                        }
+                        else if(ret3.percent == 20)
+                        {
+                            changeBatteryImg20();
+                        }
+                        else if(ret3.percent < 20)
+                        {
+                            changeBatteryImg10();
+                            document.getElementById("bt").color = "red";  //电量剩余
+                        }
+                    }
+                    //else if((ret3.status == 8 || ret3.status == 9 || ret3.status == 10 || ret3.status == 12) && (ret3.percent >= 20) )
+                    else if((ret3.status == 1) && (ret3.percent >= 20) )
+                    {
+                        //img3.src="./images/battery_charging.png";
+                        battery.src="./terminalstatus/battery-charging.png";
+                        document.getElementById("backcolor").innerHTML= "";  //10%
+                        document.getElementById("bt").innerHTML= "";  //10%
+                    }
+                    //else if((ret3.status == 8 || ret3.status == 9 || ret3.status == 10 || ret3.status == 12) && (ret3.percent < 20) )
+                    else if((ret3.status == 1) && (ret3.percent < 20) )
+                    {
+                        //img3.src="./images/battery_charging.png";
+                        battery.src="./terminalstatus/lowbattery-charging.png";
+                        document.getElementById("backcolor").innerHTML= "";  //10%
+                        document.getElementById("bt").innerHTML= ""; 
+                    }
+                    else
+                    {
+                        battery.src="./terminalstatus/battery-back.png";
+                        document.getElementById("backcolor").innerHTML= "";  //默认
+                    }
+                })
+            }
+	    })
+    </script>
+    <script>
+        let req2 = new Request();
+        req2.type = 5;
+        ResourceWatcherService.CheckNetType(req2, function(ret2) {
+            //logEvent("GetAccessUrl ret: "+JSON.stringify(ret));
+            console.log("CheckNetType ret: "+JSON.stringify(ret2));
+            if(ret2.netType == 1){
+            //document.getElementById("urlAccessAddr").innerHTML= ret.HostUrl;
+                switch (connetType) {
+                    case 2: net.src="./terminalstatus/netline-disconnected.png"; break;
+                    case 3: net.src="./terminalstatus/WI-FI-disconnected.png"; break;
+                    case 4: net.src="./terminalstatus/mobile-disconnected.png"; break;
+                    default: break;
+                }
+            }
+            else if(ret2.netType == 2)
+            {
+                net.src="./terminalstatus/netline-connected.png";
+                connetType = 2;
+            }
+            else if( ret2.netType == 3)
+            {
+                net.src="./terminalstatus/WI-FI-connected.png";
+                connetType = 3;
+            }
+            else if( ret2.netType == 4)
+            {
+                net.src="./terminalstatus/mobile-connected.png";
+                connetType = 4;
+            }
+        })
+        
+    </script>
+
+    <script>
+        function changeBatteryImg100(){
+            battery.src="./terminalstatus/battery-fullcharge(100%).png";
+            document.getElementById("backcolor").innerHTML= ""; 
+        }
+        
+        function changeBatteryImg90(){
+            battery.src="./terminalstatus/battery-back.png";
+            document.getElementById("backcolor").innerHTML= "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp";  //90%
+            document.getElementById("backcolor").style = "position: absolute; top: -1; right:81.5; background: #c9c7c7e9; transform: scale(0.75);"
+        }
+
+        function changeBatteryImg80(){
+            battery.src="./terminalstatus/battery-back.png";
+            document.getElementById("backcolor").innerHTML= "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";  //80%
+            document.getElementById("backcolor").style = "position: absolute; top: -1; right:84.5; background: #c9c7c7e9; transform: scale(0.75);"
+        }
+
+        function changeBatteryImg70(){
+            battery.src="./terminalstatus/battery-back.png";
+            document.getElementById("backcolor").innerHTML= "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";  //70%
+            document.getElementById("backcolor").style = "position: absolute; top: -1; right:87.5; background: #c9c7c7e9; transform: scale(0.75);"
+        }
+
+        function changeBatteryImg60(){
+            battery.src="./terminalstatus/battery-back.png";
+            document.getElementById("backcolor").innerHTML= "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";  //60%
+            document.getElementById("backcolor").style = "position: absolute; top: -1; right:90.5; background: #c9c7c7e9; transform: scale(0.75);"
+        }
+
+        function changeBatteryImg50(){
+            battery.src="./terminalstatus/battery-back.png";
+            document.getElementById("backcolor").innerHTML= "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";  //50%
+            document.getElementById("backcolor").style = "position: absolute; top: -1; right:93.5; background: #c9c7c7e9; transform: scale(0.75);"
+        }
+
+        function changeBatteryImg40(){
+            battery.src="./terminalstatus/battery-back.png";
+            document.getElementById("backcolor").innerHTML= "&nbsp;&nbsp;&nbsp;&nbsp;";  //40%
+            document.getElementById("backcolor").style = "position: absolute; top: -1; right:96.5; background: #c9c7c7e9; transform: scale(0.75);"
+        }
+
+        function changeBatteryImg30(){
+            battery.src="./terminalstatus/battery-back.png";
+            document.getElementById("backcolor").innerHTML= "&nbsp;&nbsp;&nbsp;";  //30%
+            document.getElementById("backcolor").style = "position: absolute; top: -1; right:100; background: #c9c7c7e9; transform: scale(0.75);"
+        }
+
+        function changeBatteryImg20(){
+            battery.src="./terminalstatus/battery-back.png";
+            document.getElementById("backcolor").innerHTML= "&nbsp;&nbsp;";  //20%
+            document.getElementById("backcolor").style = "position: absolute; top: -1; right:103.5; background: #c9c7c7e9; transform: scale(0.75);"
+        }
+
+        function changeBatteryImg10(){
+            battery.src="./terminalstatus/battery-lowpower(10%).png";
+            document.getElementById("backcolor").innerHTML= "";  //10%
+        }
+
+        
+    </script>
+</html>

BIN
addin/res/ManagerDesktop/terminalstatus/WI-FI-connected.png


BIN
addin/res/ManagerDesktop/terminalstatus/WI-FI-disconnected.png


BIN
addin/res/ManagerDesktop/terminalstatus/battery-back.png


BIN
addin/res/ManagerDesktop/terminalstatus/battery-charging.png


BIN
addin/res/ManagerDesktop/terminalstatus/battery-fullcharge(100%).png


BIN
addin/res/ManagerDesktop/terminalstatus/battery-lowpower(10%).png


BIN
addin/res/ManagerDesktop/terminalstatus/download.png


BIN
addin/res/ManagerDesktop/terminalstatus/downloading.png


BIN
addin/res/ManagerDesktop/terminalstatus/install.png


BIN
addin/res/ManagerDesktop/terminalstatus/lowbattery-charging.png


BIN
addin/res/ManagerDesktop/terminalstatus/mobile-connected.png


BIN
addin/res/ManagerDesktop/terminalstatus/mobile-disconnected.png


BIN
addin/res/ManagerDesktop/terminalstatus/netline-connected.png


BIN
addin/res/ManagerDesktop/terminalstatus/netline-disconnected.png


BIN
addin/res/ManagerDesktop/terminalstatus/switch.png


+ 106 - 0
addin/res/ManagerDesktop/upgradeRestart.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<title>错误页-重启应用</title>
+		<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
+		<link rel="stylesheet" type="text/css" href="css/errType.css" />
+		<link rel="stylesheet" type="text/css" href="css/non-ie-style.css" /> 
+		<link rel="stylesheet" type="text/css" href="css/loading.css" />
+
+		<style>
+			.upgrade-restart h3{
+				margin-bottom: 40px;
+			}
+		</style>
+	</head>
+	<body class="errType">
+		<nav>
+			<div class="logo">
+				<img width="100%" src="./images/logo_cmb.png" />
+			</div>
+		</nav>
+		<div class="hareword-info upgrade-restart">
+			<h3 class="fz_44">系统升级中,稍后自动重启应用<dot class="dot">●●●●●●</dot></h3>
+			<!-- <p id="errorInfo">
+				该设备硬件地址信息和后台记录不一致,请联系分行设备管理员扫描下方二维码。
+			</p> -->
+			<div class="result-wrap">
+				<div class="result-item">
+					<label class="fz_28">终端号</label>
+					<span class="fz_28 terminalNo"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">当前时间</label>
+					<span class="fz_28 currDate"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">终端版本</label>
+					<span class="fz_28 termVersion"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">准入地址</label>
+					<span class="fz_28 urlAccessAddr"></span>
+				</div>
+			</div>
+
+			<!-- 二维码授权验证start -->
+			<!-- <div class="scan-verify">
+				<iframe frameborder="no" border="0" allowtransparency="yes" allow="microphone;camera;midi;encrypted-media;"
+				  id="iframeSrc"
+					src="https://one-account-gateway.paasuat.cmbchina.cn/auth-plugin/v2/identity-authentication?clientId=6898ec10629f499187d7b31fbe9823a4&ui=eyJhdXRoVHlwZXMiOlsicXJDb2RlIl0sImhlYWRlciI6dHJ1ZSwicXJDb2RlU2l6ZSI6MTQ1fQ%253D%253D"
+					></iframe>
+				<p>完成扫码授权后</br>请重置密钥</p>
+				<button class="btn-blue" onclick="exit()">重置密钥</button>
+			</div> -->
+			<!-- 二维码授权验证end -->
+		</div>
+
+		<!-- 提示框 -->
+		<div class="modal-box" id="modalBox">
+			<div class="coverBg"></div>
+			<div class="modal" id="modal">
+				<img src="./images/success.png" />
+				<p class="fz_24" id="errTips"></p>
+				<button class="fz_23" onclick="closeModal('modal')">确定</button>
+			</div>
+		</div>
+		<!-- 提示框 -->
+
+		<!-- loading -->
+		<div id='loadContent'>
+			<div class="back_cover" ></div>
+			<div class='loading' id='loading'>
+				<div class='circle circle1'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+				<div class='circle circle2'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+				<div class='circle circle3'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+			</div>
+		</div>
+		<!-- loading -->
+	</body>
+	<script type="text/javascript" src="js/common.js"></script>
+	<script type="text/javascript" src="js/websocket.js"></script>
+	<script type="text/javascript" src="js/webSocketBase.js"></script>
+	<script type="text/javascript" src="js/entityMessage.js"></script>
+	<script type="text/javascript" src="js/eventEmitter.js"></script>
+	<script type="text/javascript" src="js/innerEventEmitter.js"></script>
+	<script type="text/javascript" src="js/errorCodeEnum.js"></script>
+	<script type="text/javascript" src="js/entityService.js"></script>
+	<script type="text/javascript" src="Include/jQuery/js/jquery.min.js" ></script>
+	<script type="text/javascript" src="js/getTerminalInfo.js"></script>
+</html>

+ 144 - 0
addin/res/ManagerDesktop/warnPrompt.html

@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<title>错误页-告警提示</title>
+		<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
+		<link rel="stylesheet" type="text/css" href="css/errType.css" />
+		<link rel="stylesheet" type="text/css" href="css/loading.css" />
+		<link rel="stylesheet" type="text/css" href="css/non-ie-style.css" /> 
+		<link rel="stylesheet" type="text/css" href="css/loading.css" />
+
+		<style>
+			.warn-prompt #errorInfo{
+				width: 50%;
+				color: #F95A56;
+				text-align: center;
+				line-height: 42px;
+				font-weight: 400;
+				margin: 10px 0px 30px 0px;
+			}
+			.warn-prompt .btn-blue{
+				margin-top: 150px;
+			}
+			
+			@media screen and (max-width:1300px) {
+				.warn-prompt #errorInfo{
+					width: 60%;
+				}
+			}
+		</style>
+	</head>
+	<body class="errType">
+		<nav>
+			<div class="logo">
+				<img width="100%" src="./images/logo_cmb.png" />
+			</div>
+		</nav>
+		<div class="hareword-info warn-prompt">
+			<h3 class="fz_44" id="title">高故障设备告警</h3>
+			<p class="fz_32" id="errorInfo"></p>
+			<div class="result-wrap">
+				<div class="result-item">
+					<label class="fz_28">终端号</label>
+					<span class="fz_28 terminalNo"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">当前时间</label>
+					<span class="fz_28 currDate"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">终端版本</label>
+					<span class="fz_28 termVersion"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">准入地址</label>
+					<span class="fz_28 urlAccessAddr"></span>
+				</div>
+			</div>
+			<button class="btn-blue" onclick="chromiumClose()">我知道了</button>
+		</div>
+		
+		<!-- 提示框 -->
+		<div class="modal-box" id="modalBox">
+			<div class="coverBg"></div>
+			<div class="modal" id="modal">
+				<img src="./images/success.png" />
+				<p class="fz_24" id="errTips"></p>
+				<button class="fz_23" onclick="closeModal('modal')">确定</button>
+			</div>
+		</div>
+		<!-- 提示框 -->
+
+		<!-- loading -->
+		<div id='loadContent'>
+			<div class="back_cover" ></div>
+			<div class='loading' id='loading'>
+				<div class='circle circle1'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+				<div class='circle circle2'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+				<div class='circle circle3'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+			</div>
+		</div>
+		<!-- loading -->
+
+	</body>
+	<script type="text/javascript" src="Include/LsyCookie.js"></script>
+	<script type="text/javascript" src="js/common.js"></script>
+	<script type="text/javascript" src="js/websocket.js"></script>
+	<script type="text/javascript" src="js/webSocketBase.js"></script>
+	<script type="text/javascript" src="js/entityMessage.js"></script>
+	<script type="text/javascript" src="js/eventEmitter.js"></script>
+	<script type="text/javascript" src="js/innerEventEmitter.js"></script>
+	<script type="text/javascript" src="js/errorCodeEnum.js"></script>
+	<script type="text/javascript" src="js/entityService.js"></script>
+	<script type="text/javascript" src="Include/jQuery/js/jquery.min.js" ></script>
+	<script type="text/javascript" src="js/getTerminalInfo.js"></script>
+	<script>
+		getAuthErrMsg()
+		function getAuthErrMsg(){
+			let req = new Request()
+			let timeoutFn= setTimeout(function(){
+				let tips = 'GetAuthErrMsg 请求超时'
+				ModalPrompt(tips, 'pathN')
+			},5000)
+			HealthManagerService.GetAuthErrMsg(req, function(ret) {
+				logEvent("GetAuthErrMsg ret: "+JSON.stringify(ret));
+				console.log("GetAuthErrMsg ret: "+JSON.stringify(ret));
+				if(ret){
+					clearTimeout(timeoutFn);
+					if(ret.errorCode==0){
+						try{
+							let data = JSON.parse(ret.errMsg)
+							if(data.message){
+								$('#title').html(data.message.title)
+								$('#errorInfo').html(data.message.msg)
+							}
+						}catch(err){
+							$('#title').html(ret.errMsg)
+							$('#errorInfo').fadeOut()
+						}
+					}else{
+						$('#title').html('高故障设备告警')
+						$('#errorInfo').fadeOut()
+					}
+				}
+				
+			})
+		}
+	</script>
+</html>

Some files were not shown because too many files changed in this diff