<!DOCTYPE html>
|
<html xmlns:th="http://www.thymeleaf.org">
|
<head>
|
<meta charset="utf-8">
|
<!-- 启用360浏览器的极速模式(webkit) -->
|
<meta name="renderer" content="webkit">
|
<meta name="viewport"
|
content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
|
<title>管理系统【V2.2.0】</title>
|
<link th:href="@{/images/}"
|
rel="SHORTCUT ICON">
|
<meta name="keywords"
|
content=""/>
|
<meta name="description"
|
content=""/>
|
<style type="text/css">
|
.row > div:nth-child(1) {
|
background: url(../../images/login-title.jpg) no-repeat;
|
background-size: 100% 100%;
|
height: 450px;
|
}
|
|
.row > div:nth-child(2) {
|
background: #fff;
|
height: 450px;
|
}
|
|
.download-bar {
|
margin-top: 15px;
|
color: #4968bd;
|
}
|
|
.download-bar a {
|
color: #4968bd;
|
margin: 0 5px;
|
}
|
|
.download-bar a:hover {
|
text-decoration: underline;
|
color: #4968bd;
|
}
|
</style>
|
<script>
|
|
|
var isoldIE = false;
|
if (navigator.userAgent.indexOf("MSIE") > 0) {
|
if (navigator.userAgent.indexOf("MSIE 6.0") > 0
|
|| navigator.userAgent.indexOf("MSIE 7.0") > 0
|
|| avigator.userAgent.indexOf("MSIE 8.0") > 0) {
|
isoldIE = true;
|
}
|
}
|
if (window.top !== window.self) {
|
window.top.location = window.location
|
}
|
;
|
</script>
|
<script type="text/javascript"
|
th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script>
|
<script type="text/javascript" th:src="@{/js/systools/MBase.js}"></script>
|
|
<link th:href="@{/css/styleOne/login.min.css}" rel="stylesheet">
|
<style type="text/css">
|
.form-control {
|
background-color: #FFF;
|
background-image: none;
|
border: 1px solid #d7d8d9;
|
color: #373d41;
|
display: block;
|
padding: 20px 12px;
|
width: 100%;
|
font-size: 14px
|
-webkit-box-shadow: none !important;
|
box-shadow: none !important;
|
border-radius: 0px !important;
|
}
|
|
.layui-layer-content {
|
color: #000;
|
}
|
|
.title {
|
color: #333;
|
padding: 30px 10px;
|
}
|
|
.signinpanel form {
|
background: transparent;
|
border: 0;
|
box-shadow: 0 0 0 transparent;
|
}
|
|
.signinpanel .dataForm > div > input {
|
background: #ececec;
|
}
|
|
.signinpanel .dataForm > div {
|
position: relative;
|
}
|
|
.signinpanel .dataForm > div > img {
|
position: absolute;
|
top: 13px;
|
left: 5px;
|
}
|
|
.signinpanel .dataForm > div > input {
|
padding-left: 25px
|
}
|
|
@media screen and (max-width: 768px) {
|
.signinpanel form {
|
margin-top: 0px;
|
}
|
|
.row > div:nth-child(1) {
|
height: 200px;
|
}
|
}
|
|
.qrloginBox {
|
float: right;
|
}
|
|
.qrloginSpan {
|
background: #edf4ff;
|
border: 1px solid #155bd4;
|
position: relative;
|
padding: 4px 8px;
|
border-radius: 2px;
|
font-size: 14px;
|
color: #155bd4;
|
cursor: pointer;
|
}
|
|
.qrImg {
|
width: 50px;
|
cursor: pointer;
|
}
|
|
#qrCodeIcon {
|
margin: 20px auto;
|
text-align: center;
|
overflow: hidden;
|
width: 220px;
|
height: 220px;
|
border: 1px solid #dcd0d0;
|
}
|
|
#qrCodeIcon img {
|
margin: 10px;
|
}
|
#scanResult{
|
text-align: center;
|
color: #333333;
|
}
|
#scanResult{
|
text-align: center;
|
}
|
#scanResult img{
|
width: 50px;
|
margin: 50px auto;
|
}
|
#wxQrcode{
|
text-align: center;
|
color: #333333;
|
width: 220px;
|
height: 220px;
|
overflow: hidden;
|
position: relative;
|
margin: 20px auto;
|
}
|
.wxQrcodeInfo{
|
position: absolute;
|
top: 0px;
|
background: rgb(255 255 255 / 94%);
|
width: 220px;
|
height: 220px;
|
display: flex;
|
z-index: 999999;
|
justify-content: center;
|
align-items: center;
|
flex-direction: column;
|
}
|
.wxQrcodeImg{
|
position: absolute;
|
width: 200px;
|
top: 10px;
|
z-index: 11;
|
left: 10px;
|
}
|
</style>
|
</head>
|
|
<body class="signin" onkeypress="dologin(event)">
|
|
<div class="signinpanel">
|
<div class="row" style="box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);">
|
<div class="col-sm-6"></div>
|
<div class="col-sm-6 " style="padding: 0px;">
|
<div id="accountWarp">
|
<div onclick="changeLoginType()" class="qrloginBox"><span class="qrloginSpan">扫码登录</span><img
|
class="qrImg"
|
src="../../images/qrcode.png"></div>
|
<form method="post" class="dataForm">
|
<h3 class="no-margins text-center title" style="color: #666666;font-size: 24px;font-weight: bold">
|
密码登录</h3>
|
<div>
|
<input autocomplete="off" id="account" type="text" placeholder="请输入用户名"
|
class="form-control uname"/>
|
<img alt="" src="../../images/user.png">
|
</div>
|
<br>
|
<div>
|
<input autocomplete="off" id="password"
|
type="password" class="form-control pword m-b" nullmsg="密码不能为空"
|
placeholder="请输入密码"/>
|
<img alt="" src="../../images/locked.png">
|
</div>
|
<br> <br>
|
|
<button type="button" onclick="login()"
|
style="background-color: #4f6cff;border: none;font-size: 18px;"
|
class="btn btn-success btn-block">登录
|
</button>
|
|
</form>
|
</div>
|
<div id="qrCodeWarp">
|
<div onclick="changeLoginType()" class="qrloginBox"><span class="qrloginSpan">密码登录</span><img
|
class="qrImg"
|
src="../../images/pc.png"></div>
|
<div style="border-radius: 3px;
|
padding: 30px;">
|
<h3 class="no-margins text-center title" style="color: #666666;font-size: 24px;font-weight: bold">
|
扫码登录</h3>
|
<div id="qrCodeIcon">
|
|
</div>
|
<div id="wxQrcode">
|
|
<img class="wxQrcodeImg" src=" ../../images/qrcodeBack.png">
|
<div class="wxQrcodeInfo">
|
<p>二维码已失效</p>
|
<button onclick="flushQrcode()" class="btn btn-primary">刷新二维码</button>
|
</div>
|
|
|
</div>
|
<div id="scanResult" style="display: none">
|
|
<img src="../../images/dui.png">
|
<p>扫描成功!</p>
|
<p>请在手机上根据提示确认登录</p>
|
</div>
|
</div>
|
</div>
|
</div>
|
|
</div>
|
<div class="signup-footer" style="color: #4968bd;">
|
<div class="" style="font-size: 16px;">讯聪管理系统V2.3.0</div>
|
<div class="">
|
|
<p class="download-bar" style="font-size: 12px;"><strong>浏览器:</strong>Win7以上<a
|
href="https://pubstorage-bucket.oss-cn-shenzhen.aliyuncs.com/tools/win7/ChromeSetup_32.exe"
|
target="_blank">谷歌32位</a><a
|
href=" https://pubstorage-bucket.oss-cn-shenzhen.aliyuncs.com/tools/win7/ChromeSetup_64.exe"
|
target="_blank">谷歌64位</a><span><a
|
href="https://pubstorage-bucket.oss-cn-shenzhen.aliyuncs.com/tools/xp/49.0.2623.112_chrome_installer.exe "
|
target="_blank">谷歌浏览器(推荐)</a><span>|</span><strong>打印控件:</strong><a
|
href="https://pubstorage-bucket.oss-cn-shenzhen.aliyuncs.com/tools/CLodop_Setup_for_Win32NT_https_3.056Extend.exe"
|
target="_blank">下载控件</a><span>|</span><!--<strong>APP:</strong><a
|
href="http://testfile.hive.jyymatrix.cc/mobile/download.html"
|
target="_blank">下载APP客户端</a>-->
|
</p>
|
</div>
|
</div>
|
</div>
|
</body>
|
<script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script>
|
<script type="text/javascript" th:src="@{/js/plugin/jsencrypt.min.js}"></script>
|
<script type="text/javascript" th:src="@{/js/plugin/qrcode.js}"></script>
|
<script th:inline="javascript">
|
var crypt = new JSEncrypt();
|
let loginType = 1;
|
$("#qrCodeWarp").hide();
|
$("#wxQrcode").hide();
|
function changeLoginType() {
|
if (loginType == 1) {
|
$("#accountWarp").hide();
|
$("#qrCodeWarp").show();
|
loginType = 2;
|
} else {
|
|
$("#accountWarp").show();
|
$("#qrCodeWarp").hide();
|
loginType = 1;
|
}
|
}
|
|
//soket用户标识
|
let webClientId = "webClientId_" + MTools.randomStr();
|
let loginQrCodeKey="";
|
|
|
markQrcode();
|
function markQrcode(){
|
|
var qrcode = new QRCode(document.getElementById("qrCodeIcon"), {
|
width: 200,
|
height: 200
|
});
|
loginQrCodeKey="loginQrCodeKey_" + MTools.randomStr();
|
let qrInfo={webClientId:webClientId,loginQrCodeKey:loginQrCodeKey}
|
qrcode.makeCode(JSON.stringify(qrInfo));
|
$('#qrCodeIcon canvas').show();
|
|
}
|
|
|
openSocket();
|
/*<![CDATA[*/
|
|
var publicKey =/*[[${session.publicKey}]]*/
|
|
/*]]>*/
|
|
crypt.setKey(publicKey);
|
|
|
function flushQrcode(){
|
|
$("#scanResult").hide();
|
$("#wxQrcode").hide();
|
webClientId = "XCMY_SCAN_QRCODE" + MTools.randomStr();
|
|
$("#qrCodeIcon").html("");
|
$("#qrCodeIcon").show();
|
markQrcode();
|
|
|
|
|
}
|
|
|
function login() {
|
|
if ($("#account").val() == "") {
|
layer.tips('请输入账号!', '#account');
|
return false;
|
} else if ($("#password").val() == "") {
|
layer.tips('请输入密码!', '#password');
|
return false;
|
}
|
var encAcc = crypt.encrypt($("#account").val());
|
var encPwd = crypt.encrypt($("#password").val());
|
$.AjaxProxy({
|
p: {
|
suAccount: encAcc,
|
suPassword: encPwd,
|
loginType: 1
|
}
|
}).invoke("/common/dologin", function (loj) {
|
MTools.redirect("/" + loj.getValue("page"));
|
});
|
}
|
|
|
|
|
function dologin(e) {
|
if (e.keyCode == 13) {
|
e.preventDefault();
|
window.event.returnValue = false;
|
login();
|
return false;
|
}
|
}
|
|
|
|
var socket;
|
function openSocket() {
|
if(typeof(WebSocket) == "undefined") {
|
console.log("您的浏览器不支持WebSocket");
|
}else{
|
console.log("您的浏览器支持WebSocket");
|
//实现化WebSocket对象,指定要连接的服务器地址与端口 建立连接
|
let wsPath= getRootPath();
|
var socketUrl= wsPath.replace("http","ws")+ "/webSocketServer?userId="+webClientId;
|
|
if(socket!=null){
|
socket.close();
|
socket=null;
|
}
|
socket = new WebSocket(socketUrl);
|
//打开事件
|
socket.onopen = function() {
|
console.log("websocket已打开");
|
sendMessage();
|
};
|
//获得消息事件
|
socket.onmessage = function(msg) {
|
|
var serverMsg = JSON.parse(msg.data);
|
|
if(serverMsg.msgType==1){
|
|
$("#scanResult").show();
|
$("#qrCodeIcon").hide();
|
|
}else if(serverMsg.msgType==2){
|
|
if(serverMsg.loginOperation==1){
|
$.AjaxProxy({
|
p: {
|
loginQrCodeKey: loginQrCodeKey,
|
loginType: 2
|
}
|
}).invoke("/common/dologin", function (loj) {
|
MTools.redirect("/" + loj.getValue("page"));
|
});
|
}else if(serverMsg.loginOperation==2){
|
layer.msg("取消登录", {
|
icon : 2
|
});
|
$("#scanResult").hide();
|
$("#wxQrcode").show();
|
}
|
}
|
};
|
//关闭事件
|
socket.onclose = function() {
|
console.log("websocket已关闭");
|
};
|
//发生了错误事件
|
socket.onerror = function() {
|
console.log("websocket发生了错误");
|
}
|
}
|
}
|
|
function sendMessage() {
|
if(typeof(WebSocket) == "undefined") {
|
console.log("您的浏览器不支持WebSocket");
|
}else {
|
var msg = '{ }';
|
socket.send(msg);
|
}
|
}
|
function colseSocket() {
|
if(typeof(WebSocket) == "undefined") {
|
console.log("您的浏览器不支持WebSocket");
|
}else {
|
socket.close();
|
}
|
}
|
|
|
|
</script>
|
</html>
|