zhitong.yu
2024-12-27 8abbee975353926e51a426a75c67119337fbdae4
src/main/webapp/index.jsp
@@ -9,7 +9,8 @@
<html>
<head>
    <title>登录</title>
    <link href="CSS/style.css" rel="stylesheet">
    <link href="/hxzkuwb/view/CSS/style.css" rel="stylesheet">
    <link href="/hxzkuwb/view/JS/css/tac.css" rel="stylesheet">
    <style>
        .genggai:hover{
            color: red;
@@ -113,49 +114,51 @@
    </style>
</head>
<body style="overflow:hidden;">
<p style="padding-left: 3%;padding-top: 2%;color: white;font-size: 14px;"><img src="images/YuYan.png" style="width: 20px;text-align: left;vertical-align: middle">
    <a href="javascript:;" style="position: relative;top: 2px" onclick="YuYan('Chinese')">Chinese</a>&nbsp;
    <a href="javascript:;" style="position: relative;top: 2px" onclick="YuYan('Русский')">Русский язык</a>&nbsp;
</p>
<div class="loginav">
    <div class="video" style="position: relative;"><video src="images/video.mp4" muted autoplay loop/></div>
    <div class=""></div>
    <div class="loginbox boxall" style="height: 420px;width: 450px;">
    <div class="loginbox boxall" style="width: 450px;">
        <div class="logo">
            <h1 id="title">定位管理系统</h1>
            <!-- <img src="images/logo.png"> -->
        </div>
        <a href="javascript:;" class="yonghulog" onclick="yonghu()"><div class="logintit yh" style="display: inline-block">用户登录</div></a><a class="duanxinlog" href="javascript:;" style="margin-left: 5%" onclick="duanxin()"><div class="logintit dx" style="display: inline-block;margin-left: 30px">短信登录</div></a>
        <ul class="logininput" id="yong" style="margin-top: 10%">
        <form id="marsMapForm" action="/hxzkuwb/Mars3dMap" method="post">
            <ul class="logininput" id="yong" style="">
                <li>
                    <i><img src="/hxzkuwb/view/images/user.png"></i>
                    <input class="forminput" value="" id="yhm" required type="text" placeholder="用户名">
                </li>
                <li>
                    <i><img src="/hxzkuwb/view/images/password.png"></i>
                    <input class="forminput" type="password" id="pass"  required value="" placeholder="密码">
                </li>
                <div id="captcha-box"></div>
                <li id="denglu">
                    <button type="submit"  id="LoginDengLu" style="cursor:pointer;;border: none;width: 100%" class="btn btnblock btn-lg btn-block btn-primary">登录</button>
                </li>
                <%--            <li style="color: white;text-align: center;position: relative;left: 5%" id="title2">推荐您使用谷歌chorme浏览器<a class="genggai" href="./NotPassWord.jsp" style="color: #ccc;font-size: 13px;position: relative;left: 10%">更改密码</a></li>--%>
            </ul>
        </form>
        <form id="marsMapFormSMS" action="/hxzkuwb/Mars3dMap" method="post">
        <ul class="logininput" style="display: none;" id="duan">
            <li>
                <i><img src="images/user.png"></i>
                <input class="forminput" value="" id="yhm" required type="text" placeholder="用户名">
                <i><img src="/hxzkuwb/view/images/user.png"></i>
                <input  class="forminput" value="" id="yhm1"  type="text" placeholder="请输入手机号">
            </li>
            <li>
                <i><img src="images/password.png"></i>
                <input class="forminput" type="password" id="pass"  required value="" placeholder="密码">
            </li>
            <li>
                <a href="javascript:;" onclick="login()" id="LoginDengLu" class="btn btnblock btn-lg btn-block btn-primary">登录</a>
            </li>
            <%--            <li style="color: white;text-align: center;position: relative;left: 5%" id="title2">推荐您使用谷歌chorme浏览器<a class="genggai" href="./NotPassWord.jsp" style="color: #ccc;font-size: 13px;position: relative;left: 10%">更改密码</a></li>--%>
        </ul>
        <ul class="logininput" style="position: relative;top: -67.5%;display: none" id="duan">
            <li>
                <i><img src="images/user.png"></i>
                <input class="forminput" value="" id="yhm1"  type="text" placeholder="请输入手机号">
            </li>
            <li>
                <i><img src="images/password.png"></i>
                <i><img src="/hxzkuwb/view/images/password.png"></i>
                <input class="forminput" type="password" id="pass1"  value="" placeholder="请输入验证码">
            </li>
            <li>
                <a href="javascript:;" onclick="login()" id="LoginDengLu1" style="text-align: center;" class="btn btnblock btn-lg btn-block btn-primary">登录</a>
                <button href="javascript:;"  id="LoginDengLu1" style="border: none;cursor: pointer;width: 100%;text-align: center;" class="btn btnblock btn-lg btn-block btn-primary">登录</button>
            </li>
            <li>
                <a href="javascript:;" id="yzm" style="width: 100px;height: 40px;font-size: 12px;line-height: 40px;float: right;position: relative;top: -154px;margin-right: 5px" class="btn btnblock btn-lg btn-block btn-primary" onclick="hqyzm()">获取验证码</a>
                <a type="submit" href="javascript:;"  id="yzm" style="width: 100px;height: 40px;font-size: 12px;line-height: 40px;float: right;position: relative;top: -154px;margin-right: 5px" class="btn btnblock btn-lg btn-block btn-primary" onclick="hqyzm()">获取验证码</a>
            </li>
        </ul>
        </form>
        <div class="boxfoot"></div>
    </div>
</div>
@@ -234,224 +237,229 @@
</script>
</body>
<script src="/hxzkuwb/JS/layui.js"></script>
<script src="/hxzkuwb/JS/layer.js"></script>
<script src="HouTai/Js/jquery-3.5.1.js"></script>
<script src="/hxzkuwb/view/JS/layui.js"></script>
<script src="/hxzkuwb/view/JS/layer.js"></script>
<script src="/hxzkuwb/HouTai/Js/jquery-3.5.1.js"></script>
<script src="/hxzkuwb/view/JS/huakuai.js"></script>
<script src="/hxzkuwb/view/JS/tac.min.js"></script>
<script src="/hxzkuwb/view/tac/js/notify_stand.js"></script>
<script src="/hxzkuwb/view/tac/js/notify.js"></script>
<script>
    var yzms = "";
    var LoginNum = 0;
    function login(){
        var yanzheng1 = $("#yhm").val();
        var yanzheng2 = $("#yhm1").val();
        var loginYanZheng = "username="+yanzheng1+"&phone="+yanzheng2
        $.ajax({
            url: "/hxzkuwb/findUserAndPhone",
            type: "POST",
            data: loginYanZheng,
            async: false,
            success: function(data) {
                LoginNum = data.yanzheng;
                localStorage.setItem("loginNum",data.yanzheng)
            }
        });
    var LoginId = "";
    var loginTimer = null; // 用于存储计时器的变量
    var sessionId;
    var loginAttempts; // 用于记录连续登录失败的次数
    window.onload = function() {
        if (loginAttempts !== undefined && loginAttempts !== null) {
            document.cookie = "loginAttempts=" + loginAttempts + ";Path=/hxzkuwb;Max-Age=3600";
        } else {
            loginAttempts = 0;
            console.error("loginAttempts is 0");
        }
    };
    const form = document.getElementById('marsMapForm');
    form.addEventListener('submit', function(event) {
        // 阻止表单的默认提交行为
        event.preventDefault();
        var opacityValue = $("#yong").css("opacity");
        if(opacityValue == 1){
            var yhm = $("#yhm").val();
            var pass = $("#pass").val();
            if(yhm == "" || yhm == null ){
                layer.msg(language1)
                if (sessionStorage.getItem("YuYan") == "English"){
                    translate.execute()
                }
            }else{
                if(pass == "" || pass == null){
                    layer.msg(language2)
                    if (sessionStorage.getItem("YuYan") == "English"){
                        translate.execute()
                    }
                }else{
                    if (LoginNum == 5){
                        layer.msg('language3')
                        if (sessionStorage.getItem("YuYan") == "English"){
                            translate.execute()
                        }
                    }else{
                        if (localStorage.getItem("loginNum") >= 3){
                            layer.msg(language4)
                            if (sessionStorage.getItem("YuYan") == "English"){
                                translate.execute()
                            }
                        }else{
                            //判断用户名和密码是否正确
                            var data = "username="+yhm+"&password="+pass
                            $.post("/hxzkuwb/login",data,function (data){
                                if(data == null || data == ""){
                                    layer.msg(language5)
                                    if (sessionStorage.getItem("YuYan") == "English"){
                                        translate.execute()
                                    }
                                    LoginNum = parseInt(LoginNum)+parseInt(1);
                                    localStorage.setItem("loginNum",LoginNum)
                                    var des = "username="+yhm+"&yanzheng="+LoginNum
                                    $.get("/hxzkuwb/upUserJiaYanZheng",des,function (data){
                                    })
                                }else{
                                    sessionStorage.setItem("AppliCationPhone",data.phone)
                                    var times = getDaysDiff(getCurrentDateTime(),data.time)
                                    if (times+1 >=180){
                                        layer.msg(language6)
                                        if (sessionStorage.getItem("YuYan") == "English"){
                                            translate.execute()
                                        }
                                    }else{
                                        layer.msg(language7)
                                        if (sessionStorage.getItem("YuYan") == "English"){
                                            translate.execute()
                                        }
                                        localStorage.setItem("loginNum",0)
                                        sessionStorage.setItem("username",data.username)
                                        localStorage.setItem("username",data.username)
                                        $.ajax({
                                            url: '/hxzkuwb/addLoginLog',
                                            type: 'GET',
                                            async: false,
                                            data: {
                                                name:yhm,
                                                loginfs:language8
                                            },
                                            success: function(data) {
                                            },
                                            error: function(xhr, status, error) {
                                                console.error(status + ': ' + error);
                                            }
                                        });
                                        setTimeout(function (){
                                            var userAgent = navigator.userAgent;
                                            if(userAgent.match(/Mobile/i)){
                                                window.location='/hxzkuwb/Home/AppHome.jsp'
                                            } else {
                                                window.location='/hxzkuwb/Home/Mars3dMap.jsp'
                                            }
                                        },500)
                                    }
                                }
                            })
                        }
                    }
        if (loginAttempts >= 3) {
            notify.error("您已连续登录失败3次,请1分钟后再次尝试");
            return;
        }
        if (LoginId == "") {
            //没有验证过
            $("#denglu").hide()
            // config 对象为TAC验证码的一些配置和验证的回调
            const config = {
                requestCaptchaDataUrl: "/hxzkuwb/code", validCaptchaUrl: "/hxzkuwb/checkCode",
                bindEl: "#captcha-box",
                validSuccess: (res, c, tac) => {
                    // 销毁验证码服务
                    tac.destroyWindow();
                    console.log("验证成功,后端返回的数据为", res);
                    LoginId = res.data.id
                    $("#denglu").show()
                    // 启动1分钟的计时器
                    loginTimer = setTimeout(() => {
                        notify.error("1分钟内未登录,重新验证");
                        LoginId = "";
                        login(); // 重新调用login函数进行验证
                    }, 60000); // 60000毫秒 = 1分钟
                },
                // 验证失败的回调函数(可忽略,如果不自定义 validFail 方法时,会使用默认的)
                validFail: (res, c, tac) => {
                    console.log("验证码验证失败回调...")
                    LoginId = ""
                    // 验证失败后重新拉取验证码
                    tac.reloadCaptcha();
                },
                // 刷新按钮回调事件
                btnRefreshFun: (el, tac) => {
                    console.log("刷新按钮触发事件...")
                    LoginId = ""
                    tac.reloadCaptcha();
                },
                // 关闭按钮回调事件
                btnCloseFun: (el, tac) => {
                    console.log("关闭按钮触发事件...")
                    LoginId = ""
                    tac.destroyWindow();
                    $("#denglu").show()
                }
            }
        }else{
            var yhm = $("#yhm1").val();
            var pass = $("#pass1").val();
            if(yhm == "" || yhm == null ){
                layer.msg(language9)
                if (sessionStorage.getItem("YuYan") == "English"){
                    translate.execute()
            // 一些样式配置, 可不传
            let style = {
                logoUrl: null// 去除logo
                // logoUrl: "/xx/xx/xxx.png" // 替换成自定义的logo
            }
            // 参数1 为 tac文件是目录地址, 目录里包含 tac的js和css等文件
            // 参数2 为 tac验证码相关配置
            // 参数3 为 tac窗口一些样式配置
            window.initTAC("/hxzkuwb/view/tac", config, style).then(tac => {
                tac.init(); // 调用init则显示验证码
            }).catch(e => {
                console.log("初始化tac失败", e);
            })
        } else {
            //验证过
            //二次验证
            if (LoginId == "") {
                login()
            } else {
                clearTimeout(loginTimer);
                const username = $("#yhm").val();
                const password = $("#pass").val();
                var data = {
                    username,
                    password
                }
            }else{
                if(yhm.length == 11){
                    if(pass == "" || pass == null){
                        layer.msg(language10)
                        if (sessionStorage.getItem("YuYan") == "English"){
                            translate.execute()
                        }
                    }else{
                        //判断验证码和手机号是否正确;
                        if (LoginNum == 5){
                            layer.msg(language3)
                            if (sessionStorage.getItem("YuYan") == "English"){
                                translate.execute()
                $.ajax({
                    url: "/hxzkuwb/login",
                    type: "POST",
                    async: true, // 设置为同步请求
                    data: data,
                    success: function (response) {
                        if (response == "0") {
                            notify.error('当前登录用户不存在,请重新输入')
                            LoginId = ""
                            loginAttempts++; // 增加登录失败次数
                            if (loginAttempts >= 3) {
                                document.cookie = "loginAttempts=" + loginAttempts + ";Path=/hxzkuwb;Max-Age=3600";
                                loginTimer = setTimeout(() => {
                                    loginAttempts = 0; // 重置登录失败次数
                                    document.cookie = "loginAttempts=" + loginAttempts + ";Path=/hxzkuwb;Max-Age=3600";
                                    notify.success("可以再次尝试登录");
                                }, 60000); // 60000毫秒 = 1分钟
                            }
                        }else{
                            var exits = $("#pass1").val();
                            if(yzms == exits) {
                                var data = "phone="+yhm
                                $.post("/hxzkuwb/login",data,function (data){
                                    if (data.phone == yhm){
                                        sessionStorage.setItem("ApplicationPhone",data.phone)
                                        localStorage.setItem("loginNum",0)
                                        layer.msg(language7)
                                        if (sessionStorage.getItem("YuYan") == "English"){
                                            translate.execute()
                                        }
                                        translate.execute()
                                        sessionStorage.setItem("username",data.username)
                                        localStorage.setItem("username",data.username)
                                        $.ajax({
                                            url: '/hxzkuwb/addLoginLog',
                                            type: 'GET',
                                            async: false,
                                            data: {
                                                name:data.username,
                                                loginfs:language11
                                            },
                                            success: function(data) {
                                            },
                                            error: function(xhr, status, error) {
                                                console.error(status + ': ' + error);
                                            }
                                        });
                                        setTimeout(function (){
                                            window.location='/hxzkuwb/Home/Home/Mars3dMap.jsp'
                                        },500)
                                    }
                                })
                            }else{
                                if (localStorage.getItem("loginNum") == 5){
                                    layer.msg(language12)
                                    if (sessionStorage.getItem("YuYan") == "English"){
                                        translate.execute()
                                    }
                                }else{
                                    LoginNum = parseInt(localStorage.getItem("loginNum")) +1;
                                    localStorage.setItem("loginNum",LoginNum)
                                    layer.msg(language13)
                                    if (sessionStorage.getItem("YuYan") == "English"){
                                        translate.execute()
                                    }
                                }
                            }
                        } else {
                            loginAttempts = 0; // 重置登录失败次数
                            document.cookie = "loginAttempts=" + loginAttempts + ";Path=/hxzkuwb;Max-Age=3600";
                            const username1 = $("#yhm").val();
                            notify.success("登录成功")
                            sessionId = response;
                            localStorage.setItem("hxzkmars3d", response)
                            sessionStorage.setItem("username", username1)
                            form.submit();
                        }
                    }
                }else{
                    layer.msg(language14)
                }
                });
            }
        }
    }
    $(".yh").css("text-decoration","underline")
    });
    const form1 = document.getElementById('marsMapFormSMS');
    form1.addEventListener('submit', function(event) {
        // 阻止表单的默认提交行为
        event.preventDefault();
        if (hqyzmnum == 0){
            notify.error("请先获取验证码")
        }else{
            var yhm = $("#yhm1").val();
            var data ="phone="+yhm
            var usernames;
            $.get("/hxzkuwb/findPhoneUser",data,function (data){
                usernames = data.username
                if (data == "" || data.length == 0){
                    notify.error("当前手机号不存在,请重新输入")
                }else{
                    var pass = $("#pass1").val();
                    var data = "phone="+yhm
                    if (pass == yzms){
                        $.ajax({
                            url: "/hxzkuwb/login",
                            type: "POST",
                            async: true, // 设置为同步请求
                            data: data,
                            success: function (response) {
                                if (response == "0") {
                                    notify.error('登录有误,请重新登录!')
                                } else {
                                    notify.success("登录成功")
                                    loginAttempts = 0; // 重置登录失败次数
                                    document.cookie = "loginAttempts=" + loginAttempts + ";Path=/hxzkuwb;Max-Age=3600";
                                    sessionId = usernames;
                                    localStorage.setItem("hxzkmars3d", response)
                                    sessionStorage.setItem("username", usernames)
                                    form.submit();
                                }
                            }
                        });
                    }else{
                        notify.error("验证码有误请重新获取")
                    }
                }
            })
        }
    });
    function duanxin(){
        $("#yong").animate({opacity: 0}, 1000);
        // 使用 jQuery 设置 ID 为 "loginbox" 的元素高度为 200px
        $("#duan").fadeIn(1000)
        $("#marsMapForm").hide();
        $(".loginbox").height("330px")
        $(".dx").css("text-decoration","underline")
        $(".yh").css("text-decoration","none")
        $("#yhm1").val("")
        $("#pass1").val("")
    }
    function yonghu(){
        $("#duan").fadeOut(1000)
        $("#yong").animate({opacity: 1}, 1000);
        $("#marsMapForm").fadeIn(500)
        $("#duan").hide()
        $(".yh").css("text-decoration","underline")
        $(".dx").css("text-decoration","none")
    }
    var yzms;
    var hqyzmnum = 0;
    function hqyzm(){
        var phone = $("#yhm1").val();
        if(phone == "" || phone == null){
            if (localStorage.getItem("languages") == "Русский"){
                layer.msg(language15)
            }
            layer.msg(language15)
            notify.error("请填写手机号后在获取验证码")
        }else{
            var data ="phone="+phone
            $.get("/hxzkuwb/findPhoneUser",data,function (data){
                if (data == "" || data.length == 0){
                    layer.msg(language16)
                    notify.error("当前手机号不存在,请重新输入")
                }else{
                    hqyzmnum++;
                    //发送验证码
                    var yzm = generateRandomCode();
                    var yzmpd = "";
@@ -473,22 +481,7 @@
        }
    }
    function startCountdown(seconds) {
        var btn = document.getElementById('yzm');
        btn.disabled = true;
        var count = seconds;
        btn.textContent = count + language17;
        var timer = setInterval(function() {
            count--;
            if (count <= 0) {
                clearInterval(timer);
                btn.textContent = language18;
                btn.disabled = false;
            } else {
                btn.textContent = count + language17;
            }
        }, 1000);
    }
    function generateRandomCode() {
        var code = "";
        var possible = "0123456789"; // 可选的字符集合
@@ -501,82 +494,21 @@
        return code;
    }
    function getDaysDiff(date1, date2) {
        const oneDay = 24 * 60 * 60 * 1000; // 一天的毫秒数
        const firstDate = new Date(date1);
        const secondDate = new Date(date2);
        const diffDays = Math.round(Math.abs((firstDate - secondDate) / oneDay));
        return diffDays;
    function startCountdown(seconds) {
        var btn = document.getElementById('yzm');
        btn.disabled = true;
        var count = seconds;
        btn.textContent = count + "秒后重新获取";
        var timer = setInterval(function() {
            count--;
            if (count <= 0) {
                clearInterval(timer);
                btn.textContent = "获取验证码";
                btn.disabled = false;
            } else {
                btn.textContent = count + "秒后重新获取";
            }
        }, 1000);
    }
    function getCurrentDateTime() {
        var now = new Date();
        var year = now.getFullYear();
        var month = String(now.getMonth() + 1).padStart(2, '0');
        var day = String(now.getDate()).padStart(2, '0');
        var hours = String(now.getHours()).padStart(2, '0');
        var minutes = String(now.getMinutes()).padStart(2, '0');
        var currentDateTime = year+"-"+month+"-"+day+" "+hours+":"+minutes;
        return currentDateTime;
    }
    function YuYan(text){
        if (text == "Русский"){
            //使用俄语
            var data = "languages=2"
            $.post("/hxzkuwb/UpSetting",data,function (data){
                layer.msg('Переключиться на русский')
                setTimeout(function (){
                    location.reload();
                },1000)
            })
        }
        if (text =="Chinese"){
            //使用中文
            var data = "languages=0"
            $.post("/hxzkuwb/UpSetting",data,function (data){
                layer.msg('切换中文语言')
                setTimeout(function (){
                    location.reload();
                },1000)
            })
        }
    }
    var languages = 0;
    window.addEventListener('load', function() {
        $.post("/hxzkuwb/FindSetting",function (data){
            languages = data[0].languages
                //提示信息
                language1 ="请先输入用户名和密码后在登陆"
                language2 ="请先输入密码后在登录"
                language3 ="当前账号已锁定,请联系公司或管理员后在进行登录!"
                language4 ="由于您输入密码错误大于3次为了安全您需要用短信验证登录..."
                language5 ="当前输入的用户名密码不正确,请重新输入"
                language6 ="密码已达到强制更换日期,请前去更换密码"
                language7 ="登录成功!正在跳转大屏首页....!"
                language8 ="账号密码登录!"
                language9 ="请先输入手机号和验证码后在登录"
                language10 ="请先输入验证码后在登录"
                language11 ="验证码登录"
                language12 ="您当前登录不正确次数已达到五次!该账号已锁定,请联系公司或管理员后在进行操作。"
                language13 ="验证码不正确!请重新输入"
                language14 ="请输入正确的11位手机号"
                language15 ="请先输入手机号后在获取验证码"
                language16 ="当前手机号不存在,请重新输入后在获取"
                language17 ="秒后重新获取!"
                language18 ="获取验证码!"
                language19 ="账号密码登录!"
                $("title").text("登录")
        })
    });
</script>
</html>