PageSourceSearch

https://cas.nyist.edu.cn/cas/login?service=http://oa.nyist.edu.cn/sso_login/t_sso.php

html nyist.edu.cn collected 2026-09-24 18:57:21 UTC 106,276 bytes, 2,297 lines download raw bytes

1<!DOCTYPE html><html >
2<head>
3    <title>Login - 南阳理工学院</title>
4    <meta charset="UTF-8"/><meta name="renderer" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/><link rel="icon" href="/cas/file/ico/webFavicon.ico" type="image/x-icon"/>
4<script type="text/javascript" >
5    // var hmSiteId = "d605d8df6bf5ca8a54fe078683196518";
6    var hmSiteId = "d605d8df6bf5ca8a54fe078683196518";
7    if (hmSiteId) {
8      var _hmt = _hmt || [];
9      (function() {
10        var hm = document.createElement("script");
11        hm.src = "https://hm.baidu.com/hm.js?"+hmSiteId;
12        var s = document.getElementsByTagName("script")[0]; 
13        s.parentNode.insertBefore(hm, s);
14      })();
15    }
16    </script>
16
17
18    
18<script type="text/javascript" src="/cas/webjars/jquery/3.6.0/jquery.min.js"></script>
18
19
20  
20<script src="/cas/deps/js/babel.min.js"></script>
20
21  
21<script src="/cas/deps/js/babel.polyfill.js"></script>
21
22  
22<script src="/cas/deps/js/vue/dist/vue.min.js"></script>
22
23
24  
24<script src="/cas/deps/js/vant/vant.min.js"></script>
24
25
26  
26<script src="/cas/deps/js/sw-ui/lib/index.js"></script>
26
27
28    <link rel="stylesheet" type="text/css" href="/cas/deps/js/sw-ui/lib/theme-chalk/index.css"><link rel="stylesheet" type="text/css" href="/cas/schemes/409EFF/index.css">
28<script src='/cas/deps/js/jsencrypt/3.0.0-rc.1/jsencrypt.min.js' type="text/javascript"></script>
28
29
30<script type="text/javascript">
31  var encryptEnabled = true;
32
33  var encrypt = new JSEncrypt();
34  
35  var url = "\/cas\/jwt\/publicKey";
36  $.get(url, function(publicKey){
37    // console.log(publicKey);
38    encrypt.setPublicKey(publicKey);
39  });
40  console.log("\/cas\/login" + window.location.search);
41  </script>
41
42
43<link rel="stylesheet" type="text/css" href="/cas/themes/classic/css/style.css"></head>
44
45<body>
46
47
48<main role="main">
49    <div id="content">
50
51<div id="vue_main" style="display:none;">
52  <div style="display:none;">
53    <el-button id="showErrorMessageUsername" :plain="true" @click="showErrorMessageUsername">打开消息提示</el-button>
54    <el-button id="showErrorMessagePassword" :plain="true" @click="showErrorMessagePassword">打开消息提示</el-button>
55
56    <el-button id="showErrorMessageCaptcha" :plain="true" @click="showErrorMessageCaptcha">打开消息提示</el-button>
57
58    <el-button id="showErrorMessageMobile" :plain="true" @click="showErrorMessageMobile">打开消息提示</el-button>
59    <el-button id="showErrorMessageDynamicCode" :plain="true" @click="showErrorMessageDynamicCode">打开消息提示</el-button>
60
61    <el-button id="showSuccessMessageSendCode" :plain="true" @click="showSuccessMessageSendCode">打开消息提示</el-button>
62    <el-button id="showFailureMessageSendCode" :plain="true" @click="showFailureMessageSendCode">打开消息提示</el-button>
63
64    <el-button id="showGuardDialog" :plain="true" @click="showGuardDialog">打开消息提示</el-button>
65  </div>
66
67  <div>
68
69  <sw-dialog
70    title="公告"
71    width="500px"
72    :visible.sync="dialogVisible"
73    :before-close="handleClose"></sw-dialog>
74  
75  <div class="sw-login" 
76    style="display: flex; align-items: center; justify-content: center; height: 100vh; width: 100%; min-width: 1024px; min-height: 660px; position: relative; background:url(/cas/themes/classic/images/bg.pic) repeat;">
77    <el-container  style="max-width: 1920px;max-height: 1080px; min-width: 1024px; min-height: 660px; position: relative; height: 100vh;width: 100%; margin: 0px;">
78    
79      <el-carousel @change="changeCarousel" :interval="5000" indicator-position="none" arrow="never" style="position: absolute; width: 100%; height: 100vh; max-height: 1080px;min-height: 660px;" height="100vh">
80        <el-carousel-item v-for="item in bg" :key="item">
81          <div :style="'background:url('+item+') no-repeat right;background-size:cover;'"  style="max-height: 1080px;min-height: 660px; height: 100vh;"></div>
82        </el-carousel-item>
83      </el-carousel>
84
85      <div style="position: absolute;width: 100%;height: 100vh;max-height: 1080px;min-height: 660px; z-index:5; left: 0;">
86        <div class="sw-login-logo-container" style="display: flex;align-items: center;width: auto;">
87          <img style="margin-left: 27px; width: auto;height: 60px;" src="/cas/file/png/logo.png"><div style="border-left: 1px solid #000;margin: 0 20px;height: 36px;"></div>
88          <div 
89            style="font-size: 22px; color: #409EFF;">OA系统</div>
90        </div>
91
92        <div
93          style="
94            position: absolute;
95            bottom: 0px;
96            left: 0px;
97            width: 100%;
98            height: 90px;
99            background:linear-gradient(180deg,rgba(0,0,0,0) 0%,rgba(0,0,0,0.01) 0%,rgba(0,0,0,0) 31%,rgba(0,0,0,0.6) 100%);
100          "
101        >
102
103          <div 
104            style="
105              position: absolute;
106              bottom: 15px;
107              left: 50px;
108              font-size: 12px;
109              color:#fff;
110              display: flex;
111              align-items: center;
112            "
113          ></div>
114
115        </div>
116
117        <div class="sw-login-main" style="max-height: 1080px;min-height: 660px;">
118
119          <div style="position: absolute;bottom: 15px; padding: 0 50px; align-items: center;color:#333333;font-size: 12px;z-index: 999;">
120
121            <div style="display: flex; width: 100%; height: 40px; line-height: 40px;">
122            
123            <div style="display: flex;" v-for="(customEntryLink, index) in customEntryLinks" :key="index">
124            <span v-if="index>0" style="margin: 0 10px;color:#B4B4B4">|</span>
125            <a :href="customEntryLink.url" :title="customEntryLink.name" target="_blank" style="white-space: nowrap; width: 95px; overflow: hidden; text-decoration-line: none; display: inline-block;color:#333333;font-size: 12px;"><span><i class="su-icon-bulb"></i> <span>{{customEntryLink.name}}</span></span></a>
126            </div>
127            
128            </div>
129            
130            <div style="display: flex; width: 100%;">
131
132            <span style="display: flex;align-items: center;">
133              <span style="margin-right: 10px;">浏览器支持:</span>
134              <img style="cursor: pointer;width: 14px;height: 14px;margin-right: 10px;" src="/cas/icon/chrome-icon.png" /><img style="cursor: pointer;width: 14px;height: 14px;margin-right: 10px;" src="/cas/icon/firefox-icon.png" /><img style="cursor: pointer;width: 14px;height: 14px;margin-right: 10px;" src="/cas/icon/ie-icon.png" /><img style="cursor: pointer;width: 14px;height: 14px;margin-right: 10px;" src="/cas/icon/360-icon.png" /><img style="cursor: pointer;width: 14px;height: 14px;margin-right: 10px;" src="/cas/icon/sogou-icon.png" /></span>
135            </div>
136          </div>
137
138          <div class="sw-login-main-blur" style="max-height: 1080px;min-height: 660px;" :style="'background-image:url('+bg[currentImage]+');'"></div>
139          <div class="sw-login-main-content" style="max-height: 1080px;min-height: 660px;">
140
141            <div class="qrcode-button" style="z-index: 999;" @click="openOrCloseQrCode" 
142                @mouseover="qrcodeHover=true" 
143                @mouseleave="qrcodeHover=false" 
144                :style="'border-image:url('+ (isQrcode?qrcodeImage.normal:qrcodeImage.qrcode) +')'">
145              <div class="qrcode-button-cover" v-if="qrcodeHover"></div>
146            </div>
147
148            <div v-show="!isQrcode">
149              <div class="card">
150
151            <el-menu @select="changeMenu" :default-active="currentMenu"  class="sw-login-menu" 
152              background-color="#ffffff00" text-color="#666" active-text-color="#409EFF" 
153              mode="horizontal">
154              <el-menu-item index="1" style="margin: 0 20px 0 80px;">Username</el-menu-item>
155              <el-menu-item index="2" style="margin: 0 0 0 20px;">Dynamic Code</el-menu-item>
156            </el-menu>
157
158            <div v-show="currentMenu==1">
159
160              <el-form style="margin: 30px 80px" method="post" id="fm1Input" action="login">
161              
162                <div class="el-form-item el-form-item--small">
163                  <div class="el-form-item__content">
164                    <div class="sw-input el-input el-input--medium el-input--prefix el-input--suffix sw-input--circular">
165                      
166                            <div>
167
168                            <div>
169                                <input class="form-control required el-input__inner"
170                                       placeholder="请输入学工号-账号/证件号码/安全手机" title="请输入学工号-账号/证件号码/安全手机" id="username"
171                                       size="25"
172                                       tabindex="1"
173                                       type="text"
174                                       accesskey="u"
175                                       autocomplete="off" name="username" value=""/></div>
176
177                            </div>
178                      
179                      <span class="el-input__prefix"><i class="su-input-icon black su-input-icon-prefix el-input__icon su-icon-people"></i></span>
180                    </div>
181                  </div>
182                </div>
183
184                <div class="el-form-item el-form-item--small">
185                  <div class="el-form-item__content">
186                    <div class="sw-input el-input el-input--medium el-input--prefix el-input--suffix sw-input--circular">
187
188                            <div>
189                                <input class="form-control required el-input__inner"
190                                       placeholder="Enter your Password" title="Enter your Password" type="password"
191                                       id="password"
192                                       size="25"
193                                       tabindex="2"
194                                       accesskey="p"
195                                       autocomplete="off" name="password" value=""/></div>
196
197                      <span class="el-input__prefix"><i class="su-input-icon black su-input-icon-prefix el-input__icon su-icon-lock"></i></span>
198                      <span class="el-input__suffix"><span class="el-input__suffix-inner" style="display: inline-block;"><i class="el-input__icon su-icon-hide el-input__clear" style="line-height: 32px;" onclick="javascript: togglePassword(this);"></i></span></span>
199                    </div>
200                  </div>
201                </div>
202
203                <div class="captcha-input-container el-form-item el-form-item--small">
204                  <div class="el-form-item__content">
205                    <div class="sw-input el-input el-input--medium el-input--prefix el-input--suffix sw-input--circular">
206
207                            <div>
208                                <input class="form-control required el-input__inner"
209                                       placeholder="Enter the Captcha" title="Enter the Captcha" type="text"
210                                       id="captcha"
211                                       name="captcha"
212                                       tabindex="3"
213                                       style="width: 75%; display: inline-block;"
214                                       accesskey="c"
215                                       autocomplete="new-captcha"/><img src="/cas/captcha.jpg" 
216                                     id="captcha_img" 
217                                     style="width: 20%; height: 38px; display: inline-block; float: right;"
218                                     onclick="javascript:refreshCaptcha(this);" 
219                                     title="Refresh Captcha!"/></div>
220
221                      <span class="el-input__prefix"><i class="su-input-icon black su-input-icon-prefix el-input__icon su-icon-dyncode"></i></span>
222                    </div>
223                  </div>
224                </div>
225
226                <el-form-item style="padding:0 30px">
227                  <el-checkbox style="float: right;" name="rememberMe" id="rememberMe" label="true">Remember Me</el-checkbox>
228                </el-form-item>
229                
230                <el-form-item>
231                        <input class="el-button el-button--primary el-button--medium is-round"
232                               name="button"
233                               accesskey="l"
234                               tabindex="6"
235                               type="button"
236                               value="LOGIN"
237                               
238                               style="width: 100%"
239                        /></el-form-item>
240
241                <el-form-item style="text-align: center">
242
243                <div style="display: flex;justify-content: space-between;align-items: center;">
244                  <a href="/cas/personal/forgotYourPassword?service=http://oa.nyist.edu.cn/sso_login/t_sso.php" target="_blank">
245                    <el-button type="text" style="font-size: 14px; font-weight: 400;">Forgot your password?</el-button>
246                  </a>
247                  <a href="/cas/personal/activeYourAccount?service=http://oa.nyist.edu.cn/sso_login/t_sso.php" target="_blank">
248                    <el-button type="text" style="font-size: 14px; font-weight: 400;">Active your account</el-button>
249                  </a>
250                </div>
251
252                </el-form-item>
253
254                <el-form-item>
255                  <div id="loginError1">
256                        </div>
257                </el-form-item>
258
259  
259<script type="text/javascript">
260  $( document ).ready(function() {
261    var currentMenu = null;
262    if (currentMenu == "1") {
263      var containerFormInput = $("#fm1Input");
264      var containerForm = $("#fm1");
265      var originalUsername = null;
266      if (originalUsername == null) {
267        originalUsername = null;
268      }
269      var hasErrors = false;
270      var errors = [];
271
272      console.log("trigger processLoginError");
273      processLoginError(containerFormInput, containerForm, originalUsername, hasErrors, errors);
274    }
275  });
276  </script>
276
277
278              </el-form>
279
280              <el-form style="width:0; height:0; border:0; margin: 0; padding: 0;" method="post" id="fm1" action="login">
281                        <input type="hidden" name="username" value="" autocomplete="new-username"/><input type="hidden" name="password" value="" autocomplete="new-password"/><input type="hidden" name="captcha" value="" autocomplete="new-captcha"/><input type="hidden" name="mfaState" value=""/><input type="hidden" name="currentMenu" value="1"/><input type="hidden" name="failN" value="-1"/><input type="hidden" name="execution" value="1e565a26-f623-498b-8bb3-57e7dd94ec43_ZXlKaGJHY2lPaUpJVXpVeE1pSjkucDBJRkdOWTBVQTNsMDZYNitpOTlFZkJGdTVDaStvcVJuK25nZWhHVzh5QmRKdld2RGRSSjZsdUxVaUorTmU3eE9IcDlXVTlPSUJwLy9CNmlWTzJhV1NGMTFhN1RTZ0lPZmoyd25RRGFYR2dTejlKSjI0WTdIb0tNZVo5UTdOOWl2NjFYNHcxRENMRittTmpSVGJaczRqbXpjUm5zandNNVFENjVOWVM4OUM5S3ZwNmhaQkJTUkRrVjU4ZXZHMEFmeFZCdGQyR3VURVpZeC9GVzU4MTk5cDhwZlIrb09Kb1B2MTRBRHozN3JPS2o4MUZkaXJtekFndFB0MGxzYWNGa3ZNNEJ0ckZPczNKdHlvWXh4alQvOEhtMk9zVVNVT3R1UVRVRk41TVBhbU53YVR0V3p3NlZYR3FIL05zUHB4RTJxb0owdG9SWW5jV3MyclNqSnIrb2JVMG5hdzVBZUQrNkRMdi94R21iWlMvOTRNYUM0NHZJajZ0WldHYnY0V0s1ZnAwRksyZDZLMm9ySmR0bGpIa3dzM2tBeVZXcEdHR1dCdlRpTVhHaVZKdGFtS2FYbjliak1SWnVPR0podFhRaWJ0VStjdWN2TXExL1ZKZWNEL2Jtdm9RbVQxZ2NhZmlya3h1NlhzUjRqQ0tCeFJvdElkRDB4SklWdjU0QTRCenBCQlhPTmsyczZTZDQ4ZGVZaUxDclVBQXVuLzRrTkZKUGVndU9MYXpoeXE3Qm4vWWZ2MmRnYk9yWTlhR3lPQWZlLzZiRFlGUFVsZ09KbGtKRGh5bDJkRVAvRkpMelhGdFEvVXQrSHFKRFZJM1FnMjY0VE1oSUMySzQyM2t6OCtoSjRtVFRMTGswL0F1M3J2S0dvb3NISDE5ZnZCSzVRUzNNT0YwdmdqTGp0V3kvNUR3K0lWSjBDUE5zTFhadGFGeUg1QzEwdFY5TFpzQ0t5ZGRVVFowMkNxTXhTck9mMjhnMWQ2WFU0a0pzdFhlTUZjdlNQWU5yL0RpSkVJK2ZxWThWK28vK1hydVo5c2tITmVtbFhTZ09NMkF6ZEJRWDNUSFMvcUxEa01QTTN6WCt5ZExDZHdIaFpVMGl0bTMwRGZ5WDFmcVdZbVY0T1FYdmhoUENIRFNXOHdtZ2greUhIanNoSURHSEJHaUZpN0RXcEJLOU8xd3Z2bWN0T0pVQ2JGRHBuUm9sL0MzMVFuOGw1ZVBmM3AzM1hDekZkcU1DR21UbWtocjkxbXRqNi80V0ZJeStSTitBbE9JY3ZWSXJjdEJTUEQzZ1UwelAvTjFvQ3haZFF6S3pJdU5tc3VXVjRQZnJHQ1FXK3BZSEI1a25PVUJpOW9pa1lnaEhLR0VxdTdwbVVRVUdYeldTRERsY0hDUVN2d21od3JQK2JkODBDbnRXcWFTZGkvZGdQbzVFL2drb2Qrclo5T0NoVDlKMnhKckFsdVNzcU1zVk1vNTY2TDJqdUlYaW9LS0VPSSs4eHZMV0phTlJuV3d1SU83Q0ZjaXhoTG9xazhPdmw2OGhJZ1hGNEpnMWFBNEJ1WjNUR2xzUEM3Um96aGI5RVozYm43aElTbzd1R3ZOR2JDZ3pMdW5oS0RJQUZVdm9UcXY1clFjdjhHRHJoV2NiK3ZMb1BZNEVWUTRZcStPU1h2N0lDZk4wRCtXMmV1TTl4M0tBVEZHVGZ3eTlTeGtRc1BLcmQ5YzdVOEtzNDZOYkJQbVArUTRtUDh5UzQxSy9Qakw0VmRiLzYzWG5aaHE3ekVjKzJKRHR3N2F4NnJFWHlPMys0blB1M3RXZkNGRDBlK3JEcUhiVmpWclhiMkVXOWdaZlk1K0lSb3dqRWlHOXlhWG03U25LOEM0WUJOVnpHUUpnbHowbzB0a0dDc3BFSjFML0JLNVhxT0FncGp5L0ltbnFaK1lPQTl2UXBWcjBHNGtTWEI5anpZa0h5M2c0QjhQK2RSbFJjb0RjQTJ5VTEvWHUzNWZ3bW5McmFLZVFTZSsrRWt6V2gyZExvZ0FaVEhTTlF6ZmJMTVVPTWVJNmdRQnJmb0FIUkN1d1lFV3lvSWEyZ1J2V0l1NnN1amIzS2djazZxUnB3WGhOK0tpMUpPU0c1VTMwb2ZoTzVkWG1HbTVwa2doT1ltVE41OFlCQ1l1U055bG1la2JpSEcvRTJMNEVZSENZMzVJWlphcnlyQTJhYW94VG5yTEJJRHoyZlJEeTRWQkdZUFNsKzNpTjE3ai9SUHAwSUR4YTNxUHFrOUEzNjBXNnJod1FGVVI5R0E1aEFsSDZyTEE2czlzR0lyOUR2Z1FhQTI2dExuMGNDZjZYNmNVVzI2L1RKV1FhK1pOa0lvbTR4anovSzBDRkZxQ3NtOXU1N2FGUkJhMVdTZFpmcmZEKzVmQVB6RjlTZ2FXR2xwdTRsTXlTQVF5endjWm03bExVenFhOGg5WHJpdEJYeS9GcHN3OHJRMENKQkRVWGE3WWNGcDRmZ21TeDd2SkZRRUZOZkFGODlkazFqZC9PNzJ6d2R0aU9tS0RyY3RLSXcwZ0h2dEFNTDA1QkhBajFtbnhwSm00dlJycW5Hc2htcGFUUWhlN3lUaklBL05oTTZMeXZ2SXEwSG5OeXlLVlArZU14VVZXYVBDRVUrTnl0T1NONUozQkhIVGgvbE9ldEo3b0phSHJGL2RhUWlaVDk0VmpJS0VFRWY3a1lkcTM3YW5OWWt2NWJUY3cycWdNLzRvNzVHUy9kdFhUUVdBb2pQVWhIT1pEcTRSRmxEWnNubytuSXUrTFNqRE85ME5oN1JmQ0N3cDFEa1hNOStjM0hLdEdoYldzRVZ6a25SbU84VWZDTTJBSU1mN0V3Q3hybTRSYjNWN1Rjc3ZMdyt3YWQxTklHeWFqd2VnZW1xN0RjR3BZcWZUYjVPbWN1SGZ6d0tJNTZxT2JRMThmeHRoamhVWFdnQ2c3L0NXZ2h4aFFrZnhxWjhhdElxWllWU0V3bis5TjFMQTdFYlhsczN1VlFZOG11d1ZUNW5CVWxQU2FFQUxvLzJjRW04dnBxSXMzdEJMeVdQd2ZYSWkwTG9oWWMvL1VrV1FpVWpEVFZ6VFppZU9BaFo1clNZQlNuQjNiWXMxMDgrM0hRSnFibVJheGY0bnBJZnZNaEM1YUJHZWRtTzZQVStBMi9uWXN0MXVtcHk2QnR3ZDhvRkpHRmRHdDFUMXlVdjRRSVpUUHZKVlJPQ3VhT2JRRWlLWFRhS2ZxSG11eEdZa1c5MkdsNzhySEMrK0U0a2VNSU5tNTNVRXNzVWFrTGw4cGhsbmNaaVFON25waHdXYjFvNjV1M0VOUGRlakhwR3BHcG9iRHBNMWhBR052OFc5Y1JzU0V6NXBiL3dwWU43cTRGQjNwODVQTG91bkVNTngya2J2NU1XUE1ua05SSFl4Q2ZpcWZSa0g1Ukl2ZWZPcytOekxmZXNYV0Zmc3VCWjVtVU1md1pBeTg1UWthR0MwYnU0ZGJnU2lENklsQ2p2aGtvbExSV2xTNkhKUldHdzA3VGNPbnl1UUhvclRHUHNPNk5wcndoc2cyOGNHZEZMMFFUT2FvZWpoOTkvUXZ6NVQ5dDkrRFdnb0V2SnRwd3N2dzREV1VOZmtBWmNOVWpiUTJQSklXbnZneG91YWV1dmhPUUVFUVQ1Rm0vQmZ2QmNWR3VLQzEyRjRHMFVjT0RPb0w5MzRERVB6OTg3b1RxenFTUlZNajVJQUFMaVozeGdqOHZpdE8rQUdxZm9UREdIcDdtdUJrVXBseXBNRXJTcGNuWHlFV0hOMzIyaDJHK2ZxVjB6bXpnU2JWWHZLa01Bc1lqZWhTOUpUWWxQR0xTRHFKQnE0VnBSLy9mU1ZBNGRZc05ObnNyUGdHR0krdXJMOGFPVzN6V1JHeWJzcjRkOTNIMy9QU0hMdDNLdDEzUXFkN08yN0J2NGVmM0k2UDRIczVROVZHRHB0WTAwRzV6TUMyV0l2RXBid0FCSS9sN2lNOFRIeEk0R0lFSE4xVDlSdWZNeUVKL3labzQwSlVzZ2J1eTlRWmVreUtsWjFHYk42azk2eG9vSlFDUjM5N0lxcGFURGF5aE9yeXVPZ2ptUVhMUXNzSEg0eVdvWWlrV1RJcUJDb3hSZzV0djZFaHVjZnIveTRVSjVweGx3U25DS3BKZjZHbjRsaE1NZ2dteDVJdEdsZ3hDaVA3elhma1QycjJVcmdzOEtkanNxS0VHK2VXU2dKY1JHT2xtZ056WVRUSnpvZkNMQXlSejBxR1NLcVlXd0NDM3NncE1laUlNbVBPWFVxT0tOK0taWm1EVGtuSWt3OVhhcEdUTzBiNnc3bjN4bE1MeTZPNUtRcTBVQ0UySjU5UjIvdGpheXI1aDl3VGFvUUhtWlZxTzQrQmVNNTRNei9Uay9lbExmdTlUUWt2L3NuWmE2a1pxcmVGRHVoa2xCQlJiblRvT2lqdUJaaTRuZ0MzMVRlTnJmcW1FMU14M0I1SWcvdFh5ZmIwZzBTcGlpQk1Kc2JKNjA1aWlZbUt0NHVtNm1aRWZESlFXQ0I4ODJzak9VMERJNWhpa3dzb1N2ZjlKWTl4QWpBVlErRWE2djVkWDcxVGNKTy9ReVJMV1FQZDJRSmtKRWsvR3N4aFNhSEpFNFY3dEpFWTkwdmNnbHQxQ1N4akVVblBzSlBPTlEvRnJIT2U3dk0welNOcnpGeEs3Z3o0djQxV3R2a056dXlBKzl6MDExczlFWGhrbTNORUpaamVodisyWnNJZk13THlsQnNLMER0N2d6NFRURnJrSnUzU2o4VzllZTBMYWswaG1qZ2tpaVFqRERGVWd2dWpyMlhOd292SVlmeTMwQTFUWE9NNHoweUdibHRFUXl2MDA5NnB1TFd5L1JwWFYvZVhGTDM4ZnBseUFwSjhpNnRBZU10Rnl1Z2Z4dEdsRXJoc3o4Q25tYTZFbUg3QjErendJWmJ5OU9tdWVvMldPL1BNVk5ncGIwa3dzUnkvVXp5ai95dTJNblNaZThhcGFEbTNkWDBFSXpGRWZ3b3BIWVpsUjBHNzZkNHl2MmVJN0VXdXlBbDBHR0IzSEFaclBhbE8wYmNIaVE3ZlRiUUdFUEp5WnlCRkdob3ZRZ1ZWdk0zNWdGbU55U2t2MTltY0RYcU52QW0rSmxKYm1XN3d2QWVxUmRYQzdKbTJuSTQzMGxFbWFqd25kZjRVZldhZUlKOHB0cU5sUDg4VXdZdzVDK1M2dDdXblNFOG10SkNRVHEvOERrTTBFamR0V01pbnNNaDgwQllSY293RSt0Q2V3VkNLd2Rhc2w5Mjh1RHhUQkx2c3FoQjIvV0Fxc0RzL0NlY3FvNExFalpLdFZDYzJVakZZMXFMTDdwLzNsZnhzNjkxdC9sTklnbG5RMDlrOXVlT3VSSU5ML3VmeTh2aFFaMU9SMCt2Nlo3MjlkemxtMTloWWlocHVabnB5ay9kR2p4eEJVVzhselZPL1FSMWVvNWZLeHpCQXpSZXBhNnB5OTk0UmpDRlpuNld1a1FRcERJK1BrbTlNU2QvSkN0L013TXpyR2c4SXFD
281amJnQkMvMjdpSEdJdUxLOUxNeXBSYnNKdHlrYk9rbmFyY0liYkdqMldFcEQ2WW0zM29jRjBFSVc2WlN3cGVCaUliRjJoVFBnTEtqUnI4Vkw5bEN4Y1Z5YVByellQM3h2bTM0VnAzb2FkZlVJb05DdkhKclZHdmJVdTB1dG9HMGMwQ2VVU2FsWDAyM0NBQTdlTklHRXNIaW1UUWl2L0pLbFREUHhTcHo1aVJVcERENFpIT05Yc3FGcC9aRUxqeFFRODVVVG45eTlrcWt2OGlaRERCN05jLzYxTTYvK09mazdkYWpxaFIwQzVEUlhZWlM2TkYrQUlqTHNSTGxCME01R0dLRU9YdW8zUlR4N2trS3dmN09YWWlmTitDYjJmTXYxNm9mNWRqK3IrZlYyVnJnY093QXNuSjJpQmVvbUd3a1N3aTJBbFRZdU1wKzFNVVRPVWNPU3R1MWZ6akZxUkp3TFRSdml5VWxEdGRrRitPZ1pzTGpTMy96QTczRGd2MlZNbk5kQWp1RWJYdlhDS29XaGZnMUVEVkpKd1ltZktNbGROWWpjTnFvZ1JZVm5jZlVrZW1rNERsbE44cDZkcXdKUU5zNmE2RHdZVnJoRk5wN2VLbkYxL0o2aEhvdFY0Tk03QnYyT0xwVFkzL2hDUDdvTnlsc1UzbDd6cjdUTGRzRlJGenZrYVI2dTZheDNZUElYc0c2bzQ5Ynd2REJmbllLQW42Mms1OWsyQ2FvMjlOL2RjRWI1Y0FHbGo5TE1ISXFLU3c4NlMwTVNEQUVyWUdMR1p1WTk0SUk4YXBCRXFBWlI4VkRiZUU5SlJJZ3p6T3BTWVB2c0wwNlhkamNtcDErVE5vZG9UZkM3dnpqN0Z1K2pGZTNta01rdnpJK2xpZmtKWHh4NEhDMjV5dXAyNGxoRHBrUDRxVUJrRFdJNjVhN0RiRnV4Tm5FcHVpVFdpYnZ4ZkF6VDBDSTdHcWtMbXRPRXRXb0IreDQ5V1FXeGZlNWpNeDh4OERvNExGWVU2NEdWN3lwVTkzN1pjWHRJa2pVZEhXZ0VBT2dlbXdVWklDalVoU2EraXEwV2RjWUlLWjJGendCMzVWRWVsSXNqYUFpaUQ1cUEvN3JZelhFZ3FPNTJUMXNPNUZsUVJxS1lEdkdBZVJjb0gvUkJPOHpRc2FNamgyUElNYzJyZkNCeUwvbjdxN1IwdjJKZGZTaGliVTZialpQK3pPQyswS1hmRHh3SUtkNFNDNlc0bi9nSEhpY3g1VUdLRXlkMkNEZHZONWFYNGpTWFJIajczUktBcGhYeStWcitOclVGN0ZJTFIwdGpGYXRuNDJQaUM1UVA3czlXb2xZMXFvUm9MNDZyb29TQmxJSk1DWGtwaEVMRmovSTFaUmZ0Zks1dmtwcDREeGhBKzY1VDVmOUpLU00wZmJ5VjU4UFdXUXhBakdxS2xubFFWeldPcUNESE5oVzRwTTFQS0lVOUx4SVlROEpjR3lvYWV4N1RBNHkrV1dLcUNlbTlqNWpMcHplaHUzTTdxR3RvMjlFUjlPZ3NVc1JmMWdNeTJzRGRCV1Q5QnZJYTRRVVJDVnFxMmg1QWQ4bWRsTEFBYmlvc0Z5NWUxY1FTTS9nb0VEdUF6MHVWbURZRUxVWC9aWFRPSnZSTFlKUnZSY1hFSEFFN2xxZ3g4Q0pqSzNXRFlRc2R4OFEwalNJOTJ5TFV4OUhoREtWQ3VHby9WNWNoU1hmbzM0MGZqOGhhQU1PRjVONTRaMjEwb253K2NqaTZQaWxlYzJyekxVOUtGcEJVOXlxTVVpZ2JnPT0ud1ZkLUw4T3pTblRyZmd3RzNDOUFiNmtYcFp3b01MVWxtMnBvY21xamF0cDBUREpVYmFyUjFCN1JKcW1IdmpPSVhrbG9oU0liajdpejVjTWpGRlZuclE="/><input type="hidden" name="_eventId" value="submit"/><input type="hidden" name="geolocation"/><input type="hidden" name="fpVisitorId"/><input 
282                               name="submit"
283                               type="submit"
284                               value="Login1"
285                               style="display:none; width: 100%"
286                        /></el-form>
287
288            </div>
289            
290            <div v-show="currentMenu==2">
291
292              <el-form style="margin: 30px 80px" method="post" id="fm2Input" action="login">
293
294                <div class="el-form-item el-form-item--small">
295                  <div class="el-form-item__content">
296                    <div class="sw-input el-input el-input--medium el-input--prefix el-input--suffix sw-input--circular">
297
298                            <div>
299                                <input class="form-control required el-input__inner"
300                                       placeholder="Enter your Mobile" title="Enter your Mobile" id="mobile"
301                                       size="25"
302                                       tabindex="1"
303                                       type="text"
304                                       accesskey="m"
305                                       autocomplete="new-username"/></div>
306
307                      <span class="el-input__prefix"><i class="su-input-icon black su-input-icon-prefix el-input__icon su-icon-people"></i></span>
308                    </div>
309                  </div>
310                </div>
311
312                <div class="el-form-item el-form-item--small">
313                  <div class="el-form-item__content">
314                    <div class="sw-input su-input-text-button el-input el-input--medium el-input-group el-input-group--append el-input--prefix sw-input--circular">
315
316                                <input class="form-control required el-input__inner"
317                                       placeholder="Enter the Dynamic Code" title="Enter the Dynamic Code" type="text"
318                                       id="dynamiccode"
319                                       size="25"
320                                       tabindex="2"
321                                       accesskey="d"
322                                       autocomplete="new-password"/>
322<span class="el-input__prefix"><i class="su-input-icon black su-input-icon-prefix el-input__icon su-icon-dyncode"></i></span>
323                      <!-- <span class="el-input__suffix" style="right: 100px;"><span class="el-input__suffix-inner" style="display: inline-block;"><i class="el-input__icon su-icon-hide el-input__clear" style="line-height: 32px;" onclick="javascript: togglePassword(this);"></i></span></span> --><div class="el-input-group__append">
324                        <button type="button" class="el-button el-button--default el-button--small" onclick="javascript:sendToken(this);"><span>Send</span></button>
325                      </div>
326
327                    </div>
328                  </div>
329                </div>
330
331<!-- /*
332                <div class="el-form-item el-form-item--small" th:if="${casServerCaptchaEnabled}">
333                  <div class="el-form-item__content">
334                    <div class="sw-input el-input el-input--medium el-input--prefix el-input--suffix sw-input--circular">
335
336                            <div>
337                                <input class="form-control required el-input__inner"
338                                       placeholder="请输入图片验证码" th:placeholder="#{screen.welcome.label.captcha.placeholder}"
339                                       title="请输入图片验证码" th:title="#{screen.welcome.label.captcha.placeholder}"
340                                       type="text"
341                                       id="captcha"
342                                       name="captcha"
343                                       tabindex="3"
344                                       style="width: 75%; display: inline-block;"
345                                       th:accesskey="#{screen.welcome.label.captcha.accesskey}"
346                                       autocomplete="new-captcha"/>
347                                <img th:src="@{/captcha.jpg}" 
348                                     id="captcha_img" 
349                                     style="width: 20%; height: 38px; display: inline-block; float: right;"
350                                     onclick="javascript:refreshCaptcha(this);" 
351                                     title="看不清,换一张!" th:title="#{screen.welcome.label.captcha.refresh}"/>
352                            </div>
353
354                      <span class="el-input__prefix"><i class="su-input-icon black su-input-icon-prefix el-input__icon su-icon-dyncode"></i></span>
355                    </div>
356                  </div>
357                </div>
358*/ --><el-form-item>
359                        <input class="el-button el-button--primary el-button--medium is-round"
360                               name="button"
361                               accesskey="l"
362                               tabindex="6"
363                               type="button"
364                               value="LOGIN"
365                               
366                               style="width: 100%"
367                        /></el-form-item>
368
369                <el-form-item style="text-align: center">
370
371                <div style="display: flex;justify-content: space-between;align-items: center;">
372                  <a href="/cas/personal/forgotYourPassword?service=http://oa.nyist.edu.cn/sso_login/t_sso.php" target="_blank">
373                    <el-button type="text" style="font-size: 14px; font-weight: 400;">Forgot your password?</el-button>
374                  </a>
375                  <a href="/cas/personal/activeYourAccount?service=http://oa.nyist.edu.cn/sso_login/t_sso.php" target="_blank">
376                    <el-button type="text" style="font-size: 14px; font-weight: 400;">Active your account</el-button>
377                  </a>
378                </div>
379
380                </el-form-item>
381
382                <el-form-item>
383                  <div id="loginError2">
384                        </div>
385                </el-form-item>
386
387  
387<script type="text/javascript">
388  $( document ).ready(function() {
389    var currentMenu = null;
390    if (currentMenu == "2") {
391      var containerFormInput = $("#fm2Input");
392      var containerForm = $("#fm2");
393      var originalUsername = null;
394      if (originalUsername == null) {
395        originalUsername = null;
396      }
397      var hasErrors = false;
398      var errors = [];
399
400      console.log("trigger processLoginError");
401      processLoginError(containerFormInput, containerForm, originalUsername, hasErrors, errors);
402    }
403  });
404  </script>
404
405
406              </el-form>
407
408              <el-form style="width:0; height:0; border:0; margin: 0; padding: 0;" method="post" id="fm2" action="login">
409                        <input type="hidden" name="username" value="" autocomplete="new-username"/><input type="hidden" name="password" value="" autocomplete="new-password"/><input type="hidden" name="currentMenu" value="2"/><input type="hidden" name="failN" value="-1"/><input type="hidden" name="execution" value="1e565a26-f623-498b-8bb3-57e7dd94ec43_ZXlKaGJHY2lPaUpJVXpVeE1pSjkucDBJRkdOWTBVQTNsMDZYNitpOTlFZkJGdTVDaStvcVJuK25nZWhHVzh5QmRKdld2RGRSSjZsdUxVaUorTmU3eE9IcDlXVTlPSUJwLy9CNmlWTzJhV1NGMTFhN1RTZ0lPZmoyd25RRGFYR2dTejlKSjI0WTdIb0tNZVo5UTdOOWl2NjFYNHcxRENMRittTmpSVGJaczRqbXpjUm5zandNNVFENjVOWVM4OUM5S3ZwNmhaQkJTUkRrVjU4ZXZHMEFmeFZCdGQyR3VURVpZeC9GVzU4MTk5cDhwZlIrb09Kb1B2MTRBRHozN3JPS2o4MUZkaXJtekFndFB0MGxzYWNGa3ZNNEJ0ckZPczNKdHlvWXh4alQvOEhtMk9zVVNVT3R1UVRVRk41TVBhbU53YVR0V3p3NlZYR3FIL05zUHB4RTJxb0owdG9SWW5jV3MyclNqSnIrb2JVMG5hdzVBZUQrNkRMdi94R21iWlMvOTRNYUM0NHZJajZ0WldHYnY0V0s1ZnAwRksyZDZLMm9ySmR0bGpIa3dzM2tBeVZXcEdHR1dCdlRpTVhHaVZKdGFtS2FYbjliak1SWnVPR0podFhRaWJ0VStjdWN2TXExL1ZKZWNEL2Jtdm9RbVQxZ2NhZmlya3h1NlhzUjRqQ0tCeFJvdElkRDB4SklWdjU0QTRCenBCQlhPTmsyczZTZDQ4ZGVZaUxDclVBQXVuLzRrTkZKUGVndU9MYXpoeXE3Qm4vWWZ2MmRnYk9yWTlhR3lPQWZlLzZiRFlGUFVsZ09KbGtKRGh5bDJkRVAvRkpMelhGdFEvVXQrSHFKRFZJM1FnMjY0VE1oSUMySzQyM2t6OCtoSjRtVFRMTGswL0F1M3J2S0dvb3NISDE5ZnZCSzVRUzNNT0YwdmdqTGp0V3kvNUR3K0lWSjBDUE5zTFhadGFGeUg1QzEwdFY5TFpzQ0t5ZGRVVFowMkNxTXhTck9mMjhnMWQ2WFU0a0pzdFhlTUZjdlNQWU5yL0RpSkVJK2ZxWThWK28vK1hydVo5c2tITmVtbFhTZ09NMkF6ZEJRWDNUSFMvcUxEa01QTTN6WCt5ZExDZHdIaFpVMGl0bTMwRGZ5WDFmcVdZbVY0T1FYdmhoUENIRFNXOHdtZ2greUhIanNoSURHSEJHaUZpN0RXcEJLOU8xd3Z2bWN0T0pVQ2JGRHBuUm9sL0MzMVFuOGw1ZVBmM3AzM1hDekZkcU1DR21UbWtocjkxbXRqNi80V0ZJeStSTitBbE9JY3ZWSXJjdEJTUEQzZ1UwelAvTjFvQ3haZFF6S3pJdU5tc3VXVjRQZnJHQ1FXK3BZSEI1a25PVUJpOW9pa1lnaEhLR0VxdTdwbVVRVUdYeldTRERsY0hDUVN2d21od3JQK2JkODBDbnRXcWFTZGkvZGdQbzVFL2drb2Qrclo5T0NoVDlKMnhKckFsdVNzcU1zVk1vNTY2TDJqdUlYaW9LS0VPSSs4eHZMV0phTlJuV3d1SU83Q0ZjaXhoTG9xazhPdmw2OGhJZ1hGNEpnMWFBNEJ1WjNUR2xzUEM3Um96aGI5RVozYm43aElTbzd1R3ZOR2JDZ3pMdW5oS0RJQUZVdm9UcXY1clFjdjhHRHJoV2NiK3ZMb1BZNEVWUTRZcStPU1h2N0lDZk4wRCtXMmV1TTl4M0tBVEZHVGZ3eTlTeGtRc1BLcmQ5YzdVOEtzNDZOYkJQbVArUTRtUDh5UzQxSy9Qakw0VmRiLzYzWG5aaHE3ekVjKzJKRHR3N2F4NnJFWHlPMys0blB1M3RXZkNGRDBlK3JEcUhiVmpWclhiMkVXOWdaZlk1K0lSb3dqRWlHOXlhWG03U25LOEM0WUJOVnpHUUpnbHowbzB0a0dDc3BFSjFML0JLNVhxT0FncGp5L0ltbnFaK1lPQTl2UXBWcjBHNGtTWEI5anpZa0h5M2c0QjhQK2RSbFJjb0RjQTJ5VTEvWHUzNWZ3bW5McmFLZVFTZSsrRWt6V2gyZExvZ0FaVEhTTlF6ZmJMTVVPTWVJNmdRQnJmb0FIUkN1d1lFV3lvSWEyZ1J2V0l1NnN1amIzS2djazZxUnB3WGhOK0tpMUpPU0c1VTMwb2ZoTzVkWG1HbTVwa2doT1ltVE41OFlCQ1l1U055bG1la2JpSEcvRTJMNEVZSENZMzVJWlphcnlyQTJhYW94VG5yTEJJRHoyZlJEeTRWQkdZUFNsKzNpTjE3ai9SUHAwSUR4YTNxUHFrOUEzNjBXNnJod1FGVVI5R0E1aEFsSDZyTEE2czlzR0lyOUR2Z1FhQTI2dExuMGNDZjZYNmNVVzI2L1RKV1FhK1pOa0lvbTR4anovSzBDRkZxQ3NtOXU1N2FGUkJhMVdTZFpmcmZEKzVmQVB6RjlTZ2FXR2xwdTRsTXlTQVF5endjWm03bExVenFhOGg5WHJpdEJYeS9GcHN3OHJRMENKQkRVWGE3WWNGcDRmZ21TeDd2SkZRRUZOZkFGODlkazFqZC9PNzJ6d2R0aU9tS0RyY3RLSXcwZ0h2dEFNTDA1QkhBajFtbnhwSm00dlJycW5Hc2htcGFUUWhlN3lUaklBL05oTTZMeXZ2SXEwSG5OeXlLVlArZU14VVZXYVBDRVUrTnl0T1NONUozQkhIVGgvbE9ldEo3b0phSHJGL2RhUWlaVDk0VmpJS0VFRWY3a1lkcTM3YW5OWWt2NWJUY3cycWdNLzRvNzVHUy9kdFhUUVdBb2pQVWhIT1pEcTRSRmxEWnNubytuSXUrTFNqRE85ME5oN1JmQ0N3cDFEa1hNOStjM0hLdEdoYldzRVZ6a25SbU84VWZDTTJBSU1mN0V3Q3hybTRSYjNWN1Rjc3ZMdyt3YWQxTklHeWFqd2VnZW1xN0RjR3BZcWZUYjVPbWN1SGZ6d0tJNTZxT2JRMThmeHRoamhVWFdnQ2c3L0NXZ2h4aFFrZnhxWjhhdElxWllWU0V3bis5TjFMQTdFYlhsczN1VlFZOG11d1ZUNW5CVWxQU2FFQUxvLzJjRW04dnBxSXMzdEJMeVdQd2ZYSWkwTG9oWWMvL1VrV1FpVWpEVFZ6VFppZU9BaFo1clNZQlNuQjNiWXMxMDgrM0hRSnFibVJheGY0bnBJZnZNaEM1YUJHZWRtTzZQVStBMi9uWXN0MXVtcHk2QnR3ZDhvRkpHRmRHdDFUMXlVdjRRSVpUUHZKVlJPQ3VhT2JRRWlLWFRhS2ZxSG11eEdZa1c5MkdsNzhySEMrK0U0a2VNSU5tNTNVRXNzVWFrTGw4cGhsbmNaaVFON25waHdXYjFvNjV1M0VOUGRlakhwR3BHcG9iRHBNMWhBR052OFc5Y1JzU0V6NXBiL3dwWU43cTRGQjNwODVQTG91bkVNTngya2J2NU1XUE1ua05SSFl4Q2ZpcWZSa0g1Ukl2ZWZPcytOekxmZXNYV0Zmc3VCWjVtVU1md1pBeTg1UWthR0MwYnU0ZGJnU2lENklsQ2p2aGtvbExSV2xTNkhKUldHdzA3VGNPbnl1UUhvclRHUHNPNk5wcndoc2cyOGNHZEZMMFFUT2FvZWpoOTkvUXZ6NVQ5dDkrRFdnb0V2SnRwd3N2dzREV1VOZmtBWmNOVWpiUTJQSklXbnZneG91YWV1dmhPUUVFUVQ1Rm0vQmZ2QmNWR3VLQzEyRjRHMFVjT0RPb0w5MzRERVB6OTg3b1RxenFTUlZNajVJQUFMaVozeGdqOHZpdE8rQUdxZm9UREdIcDdtdUJrVXBseXBNRXJTcGNuWHlFV0hOMzIyaDJHK2ZxVjB6bXpnU2JWWHZLa01Bc1lqZWhTOUpUWWxQR0xTRHFKQnE0VnBSLy9mU1ZBNGRZc05ObnNyUGdHR0krdXJMOGFPVzN6V1JHeWJzcjRkOTNIMy9QU0hMdDNLdDEzUXFkN08yN0J2NGVmM0k2UDRIczVROVZHRHB0WTAwRzV6TUMyV0l2RXBid0FCSS9sN2lNOFRIeEk0R0lFSE4xVDlSdWZNeUVKL3labzQwSlVzZ2J1eTlRWmVreUtsWjFHYk42azk2eG9vSlFDUjM5N0lxcGFURGF5aE9yeXVPZ2ptUVhMUXNzSEg0eVdvWWlrV1RJcUJDb3hSZzV0djZFaHVjZnIveTRVSjVweGx3U25DS3BKZjZHbjRsaE1NZ2dteDVJdEdsZ3hDaVA3elhma1QycjJVcmdzOEtkanNxS0VHK2VXU2dKY1JHT2xtZ056WVRUSnpvZkNMQXlSejBxR1NLcVlXd0NDM3NncE1laUlNbVBPWFVxT0tOK0taWm1EVGtuSWt3OVhhcEdUTzBiNnc3bjN4bE1MeTZPNUtRcTBVQ0UySjU5UjIvdGpheXI1aDl3VGFvUUhtWlZxTzQrQmVNNTRNei9Uay9lbExmdTlUUWt2L3NuWmE2a1pxcmVGRHVoa2xCQlJiblRvT2lqdUJaaTRuZ0MzMVRlTnJmcW1FMU14M0I1SWcvdFh5ZmIwZzBTcGlpQk1Kc2JKNjA1aWlZbUt0NHVtNm1aRWZESlFXQ0I4ODJzak9VMERJNWhpa3dzb1N2ZjlKWTl4QWpBVlErRWE2djVkWDcxVGNKTy9ReVJMV1FQZDJRSmtKRWsvR3N4aFNhSEpFNFY3dEpFWTkwdmNnbHQxQ1N4akVVblBzSlBPTlEvRnJIT2U3dk0welNOcnpGeEs3Z3o0djQxV3R2a056dXlBKzl6MDExczlFWGhrbTNORUpaamVodisyWnNJZk13THlsQnNLMER0N2d6NFRURnJrSnUzU2o4VzllZTBMYWswaG1qZ2tpaVFqRERGVWd2dWpyMlhOd292SVlmeTMwQTFUWE9NNHoweUdibHRFUXl2MDA5NnB1TFd5L1JwWFYvZVhGTDM4ZnBseUFwSjhpNnRBZU10Rnl1Z2Z4dEdsRXJoc3o4Q25tYTZFbUg3QjErendJWmJ5OU9tdWVvMldPL1BNVk5ncGIwa3dzUnkvVXp5ai95dTJNblNaZThhcGFEbTNkWDBFSXpGRWZ3b3BIWVpsUjBHNzZkNHl2MmVJN0VXdXlBbDBHR0IzSEFaclBhbE8wYmNIaVE3ZlRiUUdFUEp5WnlCRkdob3ZRZ1ZWdk0zNWdGbU55U2t2MTltY0RYcU52QW0rSmxKYm1XN3d2QWVxUmRYQzdKbTJuSTQzMGxFbWFqd25kZjRVZldhZUlKOHB0cU5sUDg4VXdZdzVDK1M2dDdXblNFOG10SkNRVHEvOERrTTBFamR0V01pbnNNaDgwQllSY293RSt0Q2V3VkNLd2Rhc2w5Mjh1RHhUQkx2c3FoQjIvV0Fxc0RzL0NlY3FvNExFalpLdFZDYzJVakZZMXFMTDdwLzNsZnhzNjkxdC9sTklnbG5RMDlrOXVlT3VSSU5ML3VmeTh2aFFaMU9SMCt2Nlo3MjlkemxtMTloWWlocHVabnB5ay9kR2p4eEJVVzhselZPL1FSMWVvNWZLeHpCQXpSZXBhNnB5OTk0UmpDRlpuNld1a1FRcERJK1BrbTlNU2QvSkN0L013TXpyR2c4SXFD
409amJnQkMvMjdpSEdJdUxLOUxNeXBSYnNKdHlrYk9rbmFyY0liYkdqMldFcEQ2WW0zM29jRjBFSVc2WlN3cGVCaUliRjJoVFBnTEtqUnI4Vkw5bEN4Y1Z5YVByellQM3h2bTM0VnAzb2FkZlVJb05DdkhKclZHdmJVdTB1dG9HMGMwQ2VVU2FsWDAyM0NBQTdlTklHRXNIaW1UUWl2L0pLbFREUHhTcHo1aVJVcERENFpIT05Yc3FGcC9aRUxqeFFRODVVVG45eTlrcWt2OGlaRERCN05jLzYxTTYvK09mazdkYWpxaFIwQzVEUlhZWlM2TkYrQUlqTHNSTGxCME01R0dLRU9YdW8zUlR4N2trS3dmN09YWWlmTitDYjJmTXYxNm9mNWRqK3IrZlYyVnJnY093QXNuSjJpQmVvbUd3a1N3aTJBbFRZdU1wKzFNVVRPVWNPU3R1MWZ6akZxUkp3TFRSdml5VWxEdGRrRitPZ1pzTGpTMy96QTczRGd2MlZNbk5kQWp1RWJYdlhDS29XaGZnMUVEVkpKd1ltZktNbGROWWpjTnFvZ1JZVm5jZlVrZW1rNERsbE44cDZkcXdKUU5zNmE2RHdZVnJoRk5wN2VLbkYxL0o2aEhvdFY0Tk03QnYyT0xwVFkzL2hDUDdvTnlsc1UzbDd6cjdUTGRzRlJGenZrYVI2dTZheDNZUElYc0c2bzQ5Ynd2REJmbllLQW42Mms1OWsyQ2FvMjlOL2RjRWI1Y0FHbGo5TE1ISXFLU3c4NlMwTVNEQUVyWUdMR1p1WTk0SUk4YXBCRXFBWlI4VkRiZUU5SlJJZ3p6T3BTWVB2c0wwNlhkamNtcDErVE5vZG9UZkM3dnpqN0Z1K2pGZTNta01rdnpJK2xpZmtKWHh4NEhDMjV5dXAyNGxoRHBrUDRxVUJrRFdJNjVhN0RiRnV4Tm5FcHVpVFdpYnZ4ZkF6VDBDSTdHcWtMbXRPRXRXb0IreDQ5V1FXeGZlNWpNeDh4OERvNExGWVU2NEdWN3lwVTkzN1pjWHRJa2pVZEhXZ0VBT2dlbXdVWklDalVoU2EraXEwV2RjWUlLWjJGendCMzVWRWVsSXNqYUFpaUQ1cUEvN3JZelhFZ3FPNTJUMXNPNUZsUVJxS1lEdkdBZVJjb0gvUkJPOHpRc2FNamgyUElNYzJyZkNCeUwvbjdxN1IwdjJKZGZTaGliVTZialpQK3pPQyswS1hmRHh3SUtkNFNDNlc0bi9nSEhpY3g1VUdLRXlkMkNEZHZONWFYNGpTWFJIajczUktBcGhYeStWcitOclVGN0ZJTFIwdGpGYXRuNDJQaUM1UVA3czlXb2xZMXFvUm9MNDZyb29TQmxJSk1DWGtwaEVMRmovSTFaUmZ0Zks1dmtwcDREeGhBKzY1VDVmOUpLU00wZmJ5VjU4UFdXUXhBakdxS2xubFFWeldPcUNESE5oVzRwTTFQS0lVOUx4SVlROEpjR3lvYWV4N1RBNHkrV1dLcUNlbTlqNWpMcHplaHUzTTdxR3RvMjlFUjlPZ3NVc1JmMWdNeTJzRGRCV1Q5QnZJYTRRVVJDVnFxMmg1QWQ4bWRsTEFBYmlvc0Z5NWUxY1FTTS9nb0VEdUF6MHVWbURZRUxVWC9aWFRPSnZSTFlKUnZSY1hFSEFFN2xxZ3g4Q0pqSzNXRFlRc2R4OFEwalNJOTJ5TFV4OUhoREtWQ3VHby9WNWNoU1hmbzM0MGZqOGhhQU1PRjVONTRaMjEwb253K2NqaTZQaWxlYzJyekxVOUtGcEJVOXlxTVVpZ2JnPT0ud1ZkLUw4T3pTblRyZmd3RzNDOUFiNmtYcFp3b01MVWxtMnBvY21xamF0cDBUREpVYmFyUjFCN1JKcW1IdmpPSVhrbG9oU0liajdpejVjTWpGRlZuclE="/><input type="hidden" name="_eventId" value="submitPasswordlessToken"/><input type="hidden" name="geolocation"/><input type="hidden" name="fpVisitorId"/><input 
410                               name="submit"
411                               type="submit"
412                               value="Login2"
413                               style="display:none; width: 100%"
414                        /></el-form>
415
416            </div>
417
418            </div>
419              <div style="margin: 20px 80px; text-align: center;">
420
421                <div style="display: flex;align-items: center;">
422                  <div style="width: 37%;border-top: 1px solid #D2DAE0;"></div>
423                  <span style="margin:0 10px;font-size: 14px;color: rgba(2,21,37,0.35);line-height: 22px;">Or login with:</span>
424                  <div style="width: 37%;border-top: 1px solid #D2DAE0;"></div>
425                </div>
426
427                <div style="display: inline-flex ;justify-content:space-between;margin-top: 20px;padding: 0;">
428                            <a class="btn btn-block btn-social btn-sm" style="width: 50px; display: inline-block; margin: 0 10px;"
429                               href="/cas/federatedRedirect?service=http://oa.nyist.edu.cn/sso_login/t_sso.php&amp;federatedName=openweixin"
430                               title="WeChat">
431
432                <div @mouseout="jointActive=-1" @mouseover="jointActive=2" style="margin:0 5px;font-size:36px;display: inline-block;width: 36px;height: 30px;border-radius: 36px;color:#0EBB07;cursor: pointer">
433                  <i :class="jointActive==2?'su-icon-wechat':'su-icon-weixinbian'"></i>
434                </div>
435                <!-- /*
436                  <sw-button th:case="qq" :custom-button-size="50" icon="su-icon-tencent" active-color="#1196DB" circle icon-button ></sw-button>
437                  <sw-button th:case="openweixin" :custom-button-size="50" icon="su-icon-wechat" active-color="#0EBB07" circle icon-button ></sw-button>
438                  <sw-button th:case="workweixin" :custom-button-size="50" icon="su-icon-wechat-company" active-color="#0082EF" circle icon-button ></sw-button>
439                  <sw-button th:case="alipay" :custom-button-size="50" icon="su-icon-alipay" active-color="#08ABE4" circle icon-button ></sw-button>
440*/ --></a>
441                </div>
442              </div>
443
444      </div>
445
446            <div v-show="isQrcode">
447              <div>
448
449              <div style="text-align: center;padding-top:120px">
450                <h2 style="color:#383C41;padding-bottom: 30px">扫码登录</h2>
451
452            <form method="post" id="fm3" action="login" style="display: none;">
453                <input type="hidden" name="qrCodeKey" v-model="stateKey"/><input type="hidden" name="currentMenu" value="3"/><!-- <input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
454                <input type="hidden" name="_eventId" value="submit"/> --><input type="hidden" name="geolocation"/><input type="hidden" name="fpVisitorId"/><input class="btn btn-submit" name="_eventId_success" type="submit" value="Submit"/></form>
455
456                <div style="display: inline-block; position: relative; width: 300px;height: 300px;margin: auto;">
457                  <div v-if="isQrcodeAlert" id="qrcode_img_alert_layout" @click="refreshQrCode" 
458                    style="display: inline-block; position: absolute; z-index:999; width: 300px; height: 300px; background-color: rgba(255, 255, 255, 0.7); line-height: 300px;"
459                  >{{qrcodeAlertMessage}}</div>
460                  <img id="qrcode_img" :src="''+qrcodeImgUrl" width="300" height="300"></div>
461                <p>打开 <span></span> 扫一扫
462                  <!-- /* 打开
463                  <a href="#" th:href="${superappDownloadUrl}" target="_blank" title="点击进入下载页面 / Go To Download Page" style="text-decoration-line: none;">
464                    <button type="button" class="sw-button sw-button--text sw-button--small" style="font-size: 16px;"><span>超级APP</span></button>
465                  </a>
466                  进行扫码 */ -->
467                </p>
468              </div>
469
470            </div>
471            </div>
472
473          </div>
474          
475        </div>
476      </div>
477    </el-container>
478  </div>
479
480  <div class="card">
481
482    <el-dialog v-if="mfaEnabled"
483      class="dialog-wrap"
484      title="安全验证"
485      :visible.sync="guardDialogVisible"
486      width="506px"
487      height="420px"
488      :before-close="hideGuardDialog">
489
490      <div class="check-tips"><img src="/cas/themes/nwpu/images/tip.svg"></img>当前登录环境异常,需通过安全验证确认是本人操作后才可继续登录。请选择安全验证方式!</div>
491
492      <div class="type-wrap">
493        <el-row type="flex" align="center" justify="space-between">
494          <el-col :span="12" class="safe-flex">
495            <img class="safe-title-icon" :src="typeInfo[typeIndex].icon" :alt="typeInfo[typeIndex].title" :title="typeInfo[typeIndex].title"><span class="type-title">{{typeInfo[typeIndex].info}}</span>
496          </el-col>
497          <el-col :span="12" class="safe-flex safe-flex2">
498            <span class="other-title">其他方式</span>
499            <span v-for="(type,index) in typeInfo" :key="index">
500              <img :class='index==typeIndex?"safe-icon":"safe-title-icon"' style="cursor: pointer; margin-right: 6px;" v-if="typeInfo[index].enabled" :src="index==typeIndex?type.icon2:type.icon" :disabled="index==typeIndex" :alt="type.title" :title="type.title" @click="changeGuard(index)" ></span>
501          </el-col>
502        </el-row>
503      </div>
504      
505      <div v-if="typeIndex==0" class="app-style" style="height: 102px;">
506        <div>点击发送验证请求后,请在 <span></span> 上进行确认,完成安全验证</div>
507        <div class="code-wrap">
508          <div v-show="appPushCallbackCode" style="position: relative; text-align: center; font-size: 19px; margin-top: 15px;">确认码:{{appPushCallbackCode}}</div>
509          <div class="error-text" v-show="appPushStatusShowAlert" style="position: relative; text-align: center; font-size: 12px;">{{appPushStatusAlertMessage}}</div>
510        </div>
511      </div>
512      
513      <div v-if="typeIndex==1" class="phone-style-wrap" style="height: 160px; padding-bottom: 3px;">
514        <div class="phone-style" v-show="securePhone"><span>+86</span> {{securePhone}}</div>
515        <div class="code-wrap">
516          <el-input class="input-style" v-show="securePhone" v-model="securePhoneCode"></el-input>
517          <el-button type='text' class="code-text" v-show="securePhone" @click="securePhoneSend" :disabled="securePhoneSendDisabled">{{securePhoneSendText}}</el-button>
518          <div class="error-text" v-show="securePhoneValidShowAlert" style="position: relative; text-align: center; font-size: 12px;">{{securePhoneValidAlertMessage}}</div>
519          <div class="error-text" v-show="!securePhone" style="position: relative; text-align: center; font-size: 12px;">安全手机未绑定,无法使用安全手机验证</div>
520        </div>
521      </div>
522      
523      <div v-if="typeIndex==2" class="phone-style-wrap" style="height: 160px; padding-bottom: 3px;">
524        <div class="phone-style" v-show="secureEmail">{{secureEmail}}</div>
525        <div class="code-wrap">
526          <el-input class="input-style" v-show="secureEmail" v-model="secureEmailCode"></el-input>
527          <el-button type='text' class="code-text" v-show="secureEmail" @click="secureEmailSend" :disabled="secureEmailSendDisabled">{{secureEmailSendText}}</el-button>
528          <div class="error-text" v-show="secureEmailValidShowAlert" style="position: relative; text-align: center; font-size: 12px;">{{secureEmailValidAlertMessage}}</div>
529          <div class="error-text" v-show="!secureEmail" style="position: relative; text-align: center; font-size: 12px;">安全邮箱未绑定,无法使用安全邮箱验证</div>
530        </div>
531      </div>
532      
533      <div v-if="typeIndex==3" class="face-style-wrap" style="height: 152px; padding-bottom: 3px;">
534
535        <div class="qrcode" v-if='!qrCodeScanSuccess'>
536          <img v-if="qrCodeScanQrcode" :src="qrCodeScanQrcode"><div class="qrcode-reset-opacity" v-if='qrCodeStatusShowAlert'></div>
537          <div class="qrcode-reset-wrap" v-if='qrCodeStatusShowAlert' @click="qrCodeRefresh">
538            <i class="el-icon-refresh-right"></i>
539            <div>点击刷新二维码</div>
540          </div>
541        </div>
542        <div v-if='!qrCodeScanSuccess'>支持 {{qrCodeScanTypeNames}} 的扫一扫功能,完成安全验证</div>
543
544        <div class="face-sucess" v-if='qrCodeScanSuccess && qrCodeStatusShowAlert'>
545          <img src="/cas/themes/classic/images/safe/dui.png"><div>{{qrCodeStatusAlertMessage}}</div>
546        </div>
547        <div v-if='qrCodeScanSuccess && qrCodeStatusShowAlert' v-show="qrCodeCallbackCode" style="position: relative; text-align: center; font-size: 19px; margin-bottom: 15px;">确认码:{{qrCodeCallbackCode}}</div>
548        <div v-if='qrCodeScanSuccess && qrCodeStatusShowAlert'>请在手机上点击同意以完成安全验证</div>
549      </div>
550      
551      <div v-if="typeIndex==4" class="face-style-wrap" style="height: 152px; padding-bottom: 3px;">
552        <div class="qrcode" v-if='!faceVerifyScanSuccess'>
553          <img v-if="faceVerifyScanFaceverify" :src="faceVerifyScanFaceverify"><div class="qrcode-reset-opacity" v-if='faceVerifyStatusShowAlert'></div>
554          <div class="qrcode-reset-wrap" v-if='faceVerifyStatusShowAlert' @click="faceVerifyRefresh">
555            <i class="el-icon-refresh-right"></i>
556            <div>
556点击刷新二维码</div>
557          </div>
558        </div>
559        <div v-if="!faceVerifyScanSuccess">打开 <span></span> 扫一扫功能,扫描二维码进行人脸识别,完成安全验证</div>
560        
561        <div class="face-sucess" v-if='faceVerifyScanSuccess && faceVerifyStatusShowAlert'>
562          <img src="/cas/themes/classic/images/safe/dui.png"><div>{{faceVerifyStatusAlertMessage}}</div>
563        </div>
564      </div>
565      
566      <span slot="footer" class="dialog-footer" style="height: 50px; display: block;">
567        <el-button type="primary" v-if="typeIndex==0" @click="appPushSend" :disabled="appPushSendDisabled">{{appPushSendText}}</el-button>
568
569        <el-button type="primary" v-if="typeIndex==1" v-show="securePhone" @click='securePhoneValid' :disabled="!securePhoneCode">确 定</el-button>
570        <el-button type="primary" v-if="typeIndex==2" v-show="secureEmail" @click='secureEmailValid' :disabled="!secureEmailCode">确 定</el-button>
571
572      </span>
573
574    </el-dialog>
575
576            </div>
577  
578  </div>
579  
580  </div>
581
582<script type="text/javascript">
583
584function getQueryString(paramName) {
585  var reg = new RegExp("(^|&)" + paramName + "=([^&]*)(&|$)");
586  var r = window.location.search.substr(1).match(reg);
587  if (r != null) return unescape(r[2]);
588  return "";
589}
590
591var isDebug = getQueryString("debug") != null && getQueryString("debug") != "";
592
593var isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i) != null;
594
595var superappName = "";
596
597var defaultMenu = "1";
598
599var qrCodeEnabled = true;
600var loginType = getQueryString("loginType");
601var currentMenu = null;
602var isQrcode = false;
603
604if (currentMenu) {} else {
605  if (loginType === "") {
606    currentMenu = defaultMenu;
607  } else {
608    currentMenu = loginType;
609  }
610}
611
612if (currentMenu == 3) {
613  if (qrCodeEnabled == true || qrCodeEnabled == 'true') {
614    currentMenu = defaultMenu;
615    isQrcode = true;
616  } else {
617    currentMenu = defaultMenu;
618    isQrcode = false;
619  }
620}
621
622var icon = "\/cas\/file\/png\/icon.png";
623var logo = "\/cas\/file\/png\/logo.png";
624var bg = "\/cas\/file\/png\/bg.png";
625
626var ppts = [];
627var backgrounds = [];
628
629if (ppts != null) {
630  for (var i = 0; i < ppts.length; i++) {
631    backgrounds[i] = ppts[i].fileurl;
632  }
633}
634
635if (backgrounds == null || backgrounds.length == 0) {
636  backgrounds = [ bg ];
637}
638
639
640var customEntryLinks = [];
641
642var customEntryLink1Name = "";
643var customEntryLink1Url = "";
644var customEntryLink2Name = "";
645var customEntryLink2Url = "";
646var customEntryLink3Name = "";
647var customEntryLink3Url = "";
648var customEntryLink4Name = "";
649var customEntryLink4Url = "";
650
651if ( (customEntryLink1Name!=null && customEntryLink1Name!='') && (customEntryLink1Url!=null && customEntryLink1Url!='') ) {
652  customEntryLinks.push({"name":customEntryLink1Name, "url":customEntryLink1Url});
653}
654if ( (customEntryLink2Name!=null && customEntryLink2Name!='') && (customEntryLink2Url!=null && customEntryLink2Url!='') ) {
655  customEntryLinks.push({"name":customEntryLink2Name, "url":customEntryLink2Url});
656}
657if ( (customEntryLink3Name!=null && customEntryLink3Name!='') && (customEntryLink3Url!=null && customEntryLink3Url!='') ) {
658  customEntryLinks.push({"name":customEntryLink3Name, "url":customEntryLink3Url});
659}
660if ( (customEntryLink4Name!=null && customEntryLink4Name!='') && (customEntryLink4Url!=null && customEntryLink4Url!='') ) {
661  customEntryLinks.push({"name":customEntryLink4Name, "url":customEntryLink4Url});
662}
663
664var showLink = customEntryLinks.length>0;
665var showLessLink = customEntryLinks.length<4;
666
667
668var mfaEnabled = "false" == "true";
669
670var mfaTypeAppPush = "false" == "true";
671var mfaTypeSecurePhone = "true" == "true";
672var mfaTypeSecureEmail = "true" == "true";
673var mfaTypeQrCode = "false" == "true";
674var mfaTypeFaceVerify = "false" == "true";
675
676if (isMobile) {
677  mfaTypeQrCode = false;
678  mfaTypeFaceVerify = false;
679}
680
681var defaultTypeIndex = 0;
682if (mfaTypeAppPush) {
683  defaultTypeIndex = 0;
684} else if (mfaTypeSecurePhone) {
685  defaultTypeIndex = 1;
686} else if (mfaTypeSecureEmail) {
687  defaultTypeIndex = 2;
688} else if (mfaTypeQrCode) {
689  defaultTypeIndex = 3;
690} else if (mfaTypeFaceVerify) {
691  defaultTypeIndex = 4;
692}
693
694var dialogVisible = false;
695
696var SwUI = SWUI;
697Vue.use(SwUI)
698
699var vm = new Vue({
700  el: '#vue_main',
701  data: function data() {
702    return {
703      isMobile: isMobile,
704      
705      customEntryLinks: customEntryLinks,
706      showLink: showLink,
707      showLessLink: showLessLink,
708
709      dialogVisible: dialogVisible,
710      
711      active:0,
712
713      icon: icon, 
714      logo: logo,
715      background: bg,
716      bg: backgrounds,
717      currentMenu: currentMenu,
718      currentImage: 0,
719      jointActive: -1,
720      loading: false,
721
722      qrcodeImage: {
723        qrcode: "\/cas\/themes\/classic\/images\/qrcode.png",
724        normal: "\/cas\/themes\/classic\/images\/pc-login.png"
725      },
726      qrcodeHover: false,
727      isQrcode: isQrcode,
728      qrcodeImgUrl: "",
729      qrcodeTimeout: 0,
730      isQrcodeAlert: false,
731      qrcodeAlertMessage: "",
732      stateKey: "",
733
734      mfaEnabled: mfaEnabled,
735      guardDialogVisible: false,
736
737      typeList:['使用App推送认证','使用安全手机认证','使用安全邮箱认证','使用客户端扫码','使用人脸识别认证'],
738      iconIndex:0,  //安全验证方式   0:app 推送;1:安全手机; 2:安全邮箱  3:人脸识别
739      safeIcon2:[
740                 "\/cas\/themes\/classic\/images\/safe\/app2.png",
741                 "\/cas\/themes\/classic\/images\/safe\/phone2.png",
742                 "\/cas\/themes\/classic\/images\/safe\/email2.png",
743                 "\/cas\/themes\/classic\/images\/safe\/qrcode2.png",
744                 "\/cas\/themes\/classic\/images\/safe\/face2.png"
745                ],
746      safeIcon:[
747                "\/cas\/themes\/classic\/images\/safe\/app.png",
748                "\/cas\/themes\/classic\/images\/safe\/phone.png",
749                "\/cas\/themes\/classic\/images\/safe\/email.png",
750                "\/cas\/themes\/classic\/images\/safe\/qrcode.png",
751                "\/cas\/themes\/classic\/images\/safe\/face.png"
752               ],
753
754      showError:false,  //是否显示验证码错误
755      typeInfo: [
756                 {'type':'apppush', 'enabled': mfaTypeAppPush, 'title':'APP推送', 'info':'使用APP推送验证', 'icon':"\/cas\/themes\/classic\/images\/safe\/app.png", 'icon2':"\/cas\/themes\/classic\/images\/safe\/app2.png"},
757                 {'type':'securephone', 'enabled': mfaTypeSecurePhone, 'title':'安全手机', 'info':'使用安全手机验证', 'icon':"\/cas\/themes\/classic\/images\/safe\/phone.png", 'icon2':"\/cas\/themes\/classic\/images\/safe\/phone2.png"},
758                 {'type':'secureemail', 'enabled': mfaTypeSecureEmail, 'title':'安全邮箱', 'info':'使用安全邮箱验证', 'icon':"\/cas\/themes\/classic\/images\/safe\/email.png", 'icon2':"\/cas\/themes\/classic\/images\/safe\/email2.png"},
759                 {'type':'qrcode', 'enabled': mfaTypeQrCode, 'title':'客户端扫码', 'info':'使用客户端扫码', 'icon':"\/cas\/themes\/classic\/images\/safe\/qrcode.png", 'icon2':"\/cas\/themes\/classic\/images\/safe\/qrcode2.png"},
760                 {'type':'faceverify', 'enabled': mfaTypeFaceVerify, 'title':'人脸识别', 'info':'使用人脸识别验证', 'icon':"\/cas\/themes\/classic\/images\/safe\/face.png", 'icon2':"\/cas\/themes\/classic\/images\/safe\/face2.png"},
761                 ],
762      typeIndex: defaultTypeIndex,  //安全验证方式   0:app 推送;1:安全手机; 2:安全邮箱  3:客户端扫码  4:人脸识别
763      faceType:1,  // 人脸识别认证状态  1  扫描二维码  2 刷新二ç
763»´ç   3 扫描成功
764      
765      
766      attestServerUrl: null,
767      gid: null,
768      
769      appPushSendTimeout: 0,
770      appPushSendDisabled: false,
771      appPushSendText: "点击发送验证请求",
772      appPushSendSeconds: 30,
773      appPushStatusTimeout: 0,
774      appPushStatusShowAlert: false,
775      appPushStatusAlertMessage: null,
776      appPushCallbackCode: null,
777
778      securePhone:'',
779      securePhoneSendTimeout: 0,
780      securePhoneSendDisabled: false,
781      securePhoneSendText: "获取验证码",
782      securePhoneSendSeconds: 60,
783      securePhoneCode:'',
784      securePhoneValidShowAlert: false,
785      securePhoneValidAlertMessage: null,
786
787      secureEmail:'',
788      secureEmailSendTimeout: 0,
789      secureEmailSendDisabled: false,
790      secureEmailSendText: "获取验证码",
791      secureEmailSendSeconds: 60,
792      secureEmailCode:'',
793      secureEmailValidShowAlert: false,
794      secureEmailValidAlertMessage: null,
795      
796      qrCode:null,
797      qrCodeScanTypeNames: "",
798      qrCodeScanQrcode: null,
799      qrCodeScanSuccess: false,
800      qrCodeStatusTimeout: 0,
801      qrCodeStatusShowAlert: false,
802      qrCodeStatusAlertMessage: null,
803      qrCodeCallbackCode: null,
804      
805
806      faceVerify:null,
807      faceVerifyScanFaceverify: null,
808      faceVerifyScanSuccess: false,
809      faceVerifyStatusTimeout: 0,
810      faceVerifyStatusShowAlert: false,
811      faceVerifyStatusAlertMessage: null,
812      faceVerifyCallbackCode: null,
813      
814
815    };
816  },
817  mounted: function mounted() {
818    if (this.isQrcode) {
819      // 显示二维码
820      var self = this;
821      self.isQrcodeAlert = false;
822      self.qrcodeAlertMessage = "";
823      self.stateKey = "";
824      this.qrcodeImgUrl = "\/cas\/qr\/qrcode"+"?r=" +(new Date()).getTime()+ Math.floor(Math.random()*24) + (isDebug?"&debug=debug":"");
825      this.startQrComet();
826    }
827  },
828  methods: {
829    changeMenu: function changeMenu(index) {
830      this.currentMenu = index;
831      
832      refreshCaptchaInMenu(this.currentMenu)
833    },
834    changeCarousel: function changeCarousel(index) {
835      this.currentImage = index;
836    },
837    showErrorMessageUsername: function showErrorMessageUsername() {
838      // var message = "Enter your Username" + "\u8BF7\u8F93\u5165\u5B66\u5DE5\u53F7-\u8D26\u53F7\/\u8BC1\u4EF6\u53F7\u7801\/\u5B89\u5168\u624B\u673A";
839      var message = "\u8BF7\u8F93\u5165\u5B66\u5DE5\u53F7-\u8D26\u53F7\/\u8BC1\u4EF6\u53F7\u7801\/\u5B89\u5168\u624B\u673A";
840      this.$message.error(message);
841    },
842    showErrorMessagePassword: function showErrorMessagePassword() {
843      // var message = "Enter your Password";
844      var message = "Enter your Password";
845      this.$message.error(message);
846    },
847    showErrorMessageCaptcha: function showErrorMessageCaptcha() {
848      var message = "Enter the Captcha";
849      this.$message.error(message);
850    },
851    showErrorMessageMobile: function showErrorMessageMobile() {
852      var message = "Enter your Mobile";
853      this.$message.error(message);
854    },
855    showErrorMessageDynamicCode: function showErrorMessageDynamicCode() {
856      var message = "Enter the Dynamic Code";
857      this.$message.error(message);
858    },
859    showSuccessMessageSendCode: function showSuccessMessageSendCode() {
860      var message = "Send success!";
861      this.$message.info(message);
862    },
863    showFailureMessageSendCode: function showFailureMessageSendCode() {
864      var message = "Send fail!";
865      this.$message.error(message);
866    },
867    handleClose: function handleClose() {
868      this.dialogVisible = false;
869    },
870    openOrCloseQrCode: function openOrCloseQrCode() {
871      var self = this;
872      self.isQrcodeAlert = false;
873      self.qrcodeAlertMessage = "";
874      self.stateKey = "";
875      this.isQrcode = !this.isQrcode;
876
877      if (this.isQrcode) {
878        this.qrcodeImgUrl = "\/cas\/qr\/qrcode"+"?r=" +(new Date()).getTime()+ Math.floor(Math.random()*24) + (isDebug?"&debug=debug":"");
879        this.startQrComet();
880      } else {
881        window.clearTimeout(self.qrcodeTimeout);
882      }
883    },
884    startQrComet: function startQrComet() {
885      var self = this;
886      window.clearTimeout(self.qrcodeTimeout); // 开启定时
887
888      function qrComet() {
889        var url = "\/cas\/qr\/comet";
890        $.ajax({
891          url: url,
892          type: "POST",
893          dataType: "json",
894          timeout: 1000,
895          success: function success(r) {
896            // console.log(r);
897            if (r && r.code == 0) {
898              self.isQrcodeExpired = false;
899              var stateKey = r.data.stateKey;
900              var qrCode = r.data.qrCode;
901
902              if (qrCode.status == "1") {
903                // 1 创建、未扫码
904                self.isQrcodeAlert = false;
905                self.qrcodeAlertMessage = "";
906                self.stateKey = "";
907              } else if (qrCode.status == "2") {
908                // 2 已扫码
909                self.isQrcodeAlert = true;
910                self.qrcodeAlertMessage = "扫码成功";
911                self.stateKey = "";
912              } else if (qrCode.status == "3") {
913                // 3 已授权
914                self.isQrcodeAlert = true;
915                self.qrcodeAlertMessage = "确认登录";
916                self.stateKey = stateKey;
917                window.clearTimeout(self.qrcodeTimeout);
918                window.setTimeout(function () {
919                  $("#fm3").submit();
920                }, 500);
921              } else if (qrCode.status == "4") {
922                // 4 已取消
923                self.isQrcodeAlert = true;
924                self.qrcodeAlertMessage = "取消登录";
925                self.stateKey = "";
926                window.clearTimeout(self.qrcodeTimeout);
927              }
928            } else if (r && r.code == 1) {
929              self.isQrcodeAlert = true;
930              self.qrcodeAlertMessage = "二维码已失效,点击刷新";
931              self.stateKey = "";
932              window.clearTimeout(self.qrcodeTimeout);
933            } else {
934              self.isQrcodeAlert = true;
935              self.qrcodeAlertMessage = "出现异常,点击刷新";
936              self.stateKey = "";
937              window.clearTimeout(self.qrcodeTimeout);
938            }
939          }
940        });
941        self.qrcodeTimeout = window.setTimeout(qrComet, 2000);
942      }
943
944      self.qrcodeTimeout = window.setTimeout(qrComet, 2000);
945    },
946    refreshQrCode: function refreshQrCode() {
947      var self = this;
948      self.isQrcodeAlert = false;
949      self.qrcodeAlertMessage = "";
950      self.stateKey = "";
951      this.qrcodeImgUrl = "\/cas\/qr\/qrcode"+"?r=" +(new Date()).getTime()+ Math.floor(Math.random()*24) + (isDebug?"&debug=debug":"");
952      this.startQrComet();
953    },
954
955    showGuardDialog: function showGuardDialog() {
956      var self = this;
957      this.clearAppPushStatus();
958      this.clearSecurePhone();
959      this.clearSecureEmail();
960      this.clearQrCode();
961      
962      this.typeIndex = defaultTypeIndex;
963      this.guardDialogVisible = true;
964      
965      this.changeGuard(defaultTypeIndex);
966    },
967    hideGuardDialog: function hideGuardDialog() {
968      var self = this;
969      this.clearAppPushStatus();
970      this.clearSecurePhone();
971      this.clearSecureEmail();
972      this.clearQrCode();
973
974      this.typeIndex = defaultTypeIndex;
975      this.guardDialogVisible = false;
976      
977      $("#fm1").find('[name="mfaState"]').val('');
978    },
979    
980    changeGuard: function changeGuard(index) {
981      var self = this;
982      this.clearAppPushStatus();
983      this.clearSecurePhone();
984      this.clearSecureEmail();
985      this.clearQrCode();
986      this.clearFaceVerify();
987
988      this.typeIndex = index;
989      
990      this.initGuard();
991    },
992    
993    initGuard: function initGuard() {
994      var self = this;
995      
996      var type = this.typeInfo[this.typeIndex].type;
997      var state = $("#fm1").find('[name="mfaState"]').val();
998      
999      var url = "\/cas\/mfa\/initByType"+"/"+type;
1000      url += "?state=" + state;
1001      $.ajax({
1002        type: "GET",
1003        url: url,
1004        dataType: "json",
1005        success: function success(r) {
1006          console.log(url, r);
1007          if (r && r.code == 0) {
1008            self.attestServerUrl = r.data.attestServerUrl;
1009            self.gid = r.data.gid;
1010
1011            if (type == "apppush") {
1012              
1013            } else if (type == "securephone") {
1014              self.securePhone = r.data.securePhone;
1015            } else if (type == "secureemail") {
1016              self.secureEmail = r.data.secureEmail;
1017            } else if (type == "qrcode") {
1018              self.qrCode = r.data.qrCode;
1019              self.qrCodeInit();
1020            } else if (type == "faceverify") {
1021              self.faceVerifyInit();
1022            }
1023          } else {
1024            self.attestServerUrl = null;
1025            self.gid = null;
1026
1027            self.securePhone = null;
1028            self.secureEmail = null;
1029            
1030            self.qrCode = null;
1031          }
1032        },
1033        error: function error(err) {
1034          self.attestServerUrl = null;
1035          self.gid = null;
1036
1037          self.securePhone = null;
1038          self.secureEmail = null;
1039          
1040          self.qrCode = null
1041        }
1042      });
1043    },
1044    
1045    appPushSend: function appPushSend() {
1046      var self = this;
1047
1048      function appPushSendCountDown() {
1049        self.appPushSendSeconds --;
1050        
1051        self.appPushSendDisabled = true;
1052        self.appPushSendText = "点击发送验证请求" + "("+self.appPushSendSeconds+")";
1053        
1054        self.appPushSendTimeout = window.setTimeout(appPushSendCountDown, 1000);
1055        
1056        if (self.appPushSendSeconds <= 0) {
1057          window.clearTimeout(self.appPushSendTimeout);
1058          
1059          self.appPushSendDisabled = false;
1060          self.appPushSendText = "点击发送验证请求";
1061          self.appPushSendSeconds = 30;
1062        }
1063      }
1064
1065      self.appPushSendDisabled = true;
1066
1067      var url = self.attestServerUrl + '/api/guard/apppush/send';
1068      var postdata = { "gid": self.gid };
1069      
1070      $.ajax({
1071        type: "POST",
1072        url: url,
1073        contentType: 'application/json; charset=UTF-8',
1074        data: JSON.stringify(postdata),
1075        dataType: "json",
1076        success: function success(r) {
1077          console.log(url, r);
1078
1079          self.appPushSendDisabled = false;
1080
1081          if (r && r.code == 0 && r.data.callbackCode) {
1082            self.appPushStatusShowAlert = false;
1083            self.appPushStatusAlertMessage = "";
1084
1085            self.appPushCallbackCode = r.data.callbackCode;
1086
1087            self.startAppPushStatus();
1088            
1089            appPushSendCountDown();
1090          } else {
1091            
1092            self.startAppPushStatus();
1093          }
1094        },
1095        error: function error(err) {
1096          console.log(err);
1097
1098          self.appPushSendDisabled = false;
1099        }
1100      });
1101    },
1102    startAppPushStatus: function startAppPushStatus() {
1103      var self = this;
1104
1105      window.clearTimeout(self.appPushStatusTimeout); // 定时
1106      
1107      /*
1108       * status 
1109       * 0 init 新建、初始化, 
1110       * 1 sent 已发送、已扫码等, 
1111       * 2 valid 验证通过, 
1112       * 3 fail 验证失败, 
1113       * 5 cancel 取消, 
1114       * 9 expired 已过期、不存在
1115       */
1116      function appPushStatus() {
1117        var url = self.attestServerUrl + '/api/guard/apppush/status';
1118        var postdata = { "gid": self.gid };
1119        
1120        $.ajax({
1121          type: "POST",
1122          url: url,
1123          contentType: 'application/json; charset=UTF-8',
1124          data: JSON.stringify(postdata),
1125          dataType: "json",
1126          timeout: 1000,
1127          success: function success(r) {
1128            // console.log(url, r);
1129            if (r && r.code == 0) {
1130              var status = r.data.status;
1131              
1132              if (status == 0) {
1133                
1134                self.appPushStatusShowAlert = false;
1135                self.appPushStatusAlertMessage = "";
1136              } else if (status == 1) {
1137                
1138                self.appPushStatusShowAlert = true;
1139                self.appPushStatusAlertMessage = "等待确认";
1140              } else if (status == 2) {
1141                
1142                self.appPushStatusShowAlert = true;
1143                self.appPushStatusAlertMessage = "已确认";
1144
1145                window.clearTimeout(self.appPushStatusTimeout);
1146                window.setTimeout(function () {
1147                  submitFm1();
1148                }, 500);
1149              } else if (status == 3) {
1150                
1151                self.appPushStatusShowAlert = true;
1152                self.appPushStatusAlertMessage = "确认失败";
1153                
1154                window.clearTimeout(self.appPushStatusTimeout);
1155              } else if (status == 5) {
1156                
1157                self.appPushStatusShowAlert = true;
1158                self.appPushStatusAlertMessage = "已取消";
1159                
1160                window.clearTimeout(self.appPushStatusTimeout);
1161              } else if (status == 9) {
1162                
1163                self.appPushStatusShowAlert = true;
1164                self.appPushStatusAlertMessage = "已失效,请重新发送";
1165                
1166                self.appPushCallbackCode = null;
1167                
1168                window.clearTimeout(self.appPushStatusTimeout);
1169                
1170                window.setTimeout(function () {
1171                  self.initGuard();
1172                }, 500);
1173                
1174              }
1175              
1176            } else {
1177              window.clearTimeout(self.appPushStatusTimeout);
1178            }
1179          },
1180          error: function error(err) {
1181            console.log(err);
1182            window.clearTimeout(self.appPushStatusTimeout);
1183          }
1184        });
1185        
1186        self.appPushStatusTimeout = window.setTimeout(appPushStatus, 2000);
1187      }
1188      
1189      self.appPushStatusTimeout = window.setTimeout(appPushStatus, 100);
1190    },
1191    
1192    clearAppPushStatus: function clearAppPushStatus() {
1193      var self = this;
1194
1195      window.clearTimeout(self.appPushSendTimeout);
1196      
1197      self.appPushSendDisabled = false;
1198      self.appPushSendText = "点击发送验证请求";
1199      self.appPushSendSeconds = 30;
1200
1201      window.clearTimeout(self.appPushStatusTimeout);
1202      self.appPushStatusShowAlert = false;
1203      self.appPushStatusAlertMessage = "";
1204      
1205      self.appPushCallbackCode = null;
1206    },
1207    
1208    
1209    securePhoneSend: function securePhoneSend() {
1210      var self = this;
1211      
1212      function securePhoneSendCountDown() {
1213        self.securePhoneSendSeconds --;
1214        
1215        self.securePhoneSendDisabled = true;
1216        self.securePhoneSendText = "获取验证码" + "("+self.securePhoneSendSeconds+")";
1217        
1218        self.securePhoneSendTimeout = window.setTimeout(securePhoneSendCountDown, 1000);
1219        
1220        if (self.securePhoneSendSeconds <= 0) {
1221          window.clearTimeout(self.securePhoneSendTimeout);
1222          
1223          self.securePhoneSendDisabled = false;
1224          self.securePhoneSendText = "获取验证码";
1225          self.securePhoneSendSeconds = 60;
1226        }
1227      }
1228
1229      self.securePhoneSendDisabled = true;
1230
1231      var url = self.attestServerUrl + '/api/guard/securephone/send';
1232      var postdata = { "gid": self.gid };
1233      
1234      $.ajax({
1235        type: "POST",
1236        url: url,
1237        contentType: 'application/json; charset=UTF-8',
1238        data: JSON.stringify(postdata),
1239        dataType: "json",
1240        success: function success(r) {
1241          console.log(url, r);
1242
1243          self.securePhoneSendDisabled = false;
1244
1245          if (r && r.code == 0) {
1246            self.securePhoneValidShowAlert = true;
1247            self.securePhoneValidAlertMessage = "已发送";
1248            
1249            securePhoneSendCountDown();
1250          } else if (r && r.code != 0 && r.data.result == 'expired') {
1251            self.securePhoneValidShowAlert = true;
1252            self.securePhoneValidAlertMessage = "发送失败,已过期,请重新获取验证码";
1253            
1254            window.setTimeout(function () {
1255              self.initGuard();
1256            }, 500);
1257          } else {
1258            self.securePhoneValidShowAlert = true;
1259            self.securePhoneValidAlertMessage = "发送失败";
1260          }
1261        },
1262        error: function error(err) {
1263          console.log(err);
1264
1265          self.securePhoneSendDisabled = false;
1266
1267          self.securePhoneValidShowAlert = true;
1268          self.securePhoneValidAlertMessage = "发送失败";
1269        }
1270      });
1271    },
1272    securePhoneValid: function securePhoneValid() {
1273      var self = this;
1274      
1275      var url = self.attestServerUrl + '/api/guard/securephone/valid';
1276      var postdata = { "gid": self.gid, "code": self.securePhoneCode };
1277      
1278      $.ajax({
1279        type: "POST",
1280        url: url,
1281        contentType: 'application/json; charset=UTF-8',
1282        data: JSON.stringify(postdata),
1283        dataType: "json",
1284        success: function success(r) {
1285          console.log(url, r);
1286          
1287          if (r && r.code == 0) {
1288            var status = r.data.status;
1289          	
1290            if (status == 2) {
1291              // self.clearSecurePhone();
1292
1293              window.setTimeout(function () {
1294                submitFm1();
1295              }, 500);
1296            } else {
1297              self.securePhoneValidShowAlert = true;
1298              self.securePhoneValidAlertMessage = "验证失败";
1299            }
1300          }
1301
1302        },
1303        error: function error(err) {
1304          console.log(err);
1305        }
1306      });
1307    },
1308
1309    clearSecurePhone: function clearSecurePhone() {
1310      var self = this;
1311      
1312      window.clearTimeout(self.securePhoneSendTimeout);
1313      
1314      self.securePhoneSendDisabled = false;
1315      self.securePhoneSendText = "获取验证码";
1316      self.securePhoneSendSeconds = 60;
1317
1318      self.securePhoneCode = '';
1319      self.securePhoneValidShowAlert = false;
1320      self.securePhoneValidAlertMessage = "";
1321    },
1322
1323
1324    secureEmailSend: function secureEmailSend() {
1325      var self = this;
1326      
1327      function secureEmailSendCountDown() {
1328        self.secureEmailSendSeconds --;
1329        
1330        self.secureEmailSendDisabled = true;
1331        self.secureEmailSendText = "获取验证码" + "("+self.secureEmailSendSeconds+")";
1332        
1333        self.secureEmailSendTimeout = window.setTimeout(secureEmailSendCountDown, 1000);
1334        
1335        if (self.secureEmailSendSeconds <= 0) {
1336          window.clearTimeout(self.secureEmailSendTimeout);
1337          
1338          self.secureEmailSendDisabled = false;
1339          self.secureEmailSendText = "获取验证码";
1340          self.secureEmailSendSeconds = 60;
1341        }
1342      }
1343      
1344      self.secureEmailSendDisabled = true;
1345
1346      var url = self.attestServerUrl + '/api/guard/secureemail/send';
1347      var postdata = { "gid": self.gid };
1348      
1349      $.ajax({
1350        type: "POST",
1351        url: url,
1352        contentType: 'application/json; charset=UTF-8',
1353        data: JSON.stringify(postdata),
1354        dataType: "json",
1355        success: function success(r) {
1356          console.log(url, r);
1357
1358          self.secureEmailSendDisabled = false;
1359
1360          if (r && r.code == 0) {
1361            self.secureEmailValidShowAlert = true;
1362            self.secureEmailValidAlertMessage = "已发送";
1363            
1364            secureEmailSendCountDown();
1365          } else if (r && r.code != 0 && r.data.result == 'expired') {
1366            self.securePhoneValidShowAlert = true;
1367            self.securePhoneValidAlertMessage = "发送失败,已过期,请重新获取验证码";
1368            
1369            window.setTimeout(function () {
1370              self.initGuard();
1371            }, 500);
1372          } else {
1373            self.secureEmailValidShowAlert = true;
1374            self.secureEmailValidAlertMessage = "发送失败";
1375          }
1376        },
1377        error: function error(err) {
1378          console.log(err);
1379
1380          self.secureEmailSendDisabled = false;
1381          
1382          self.secureEmailValidShowAlert = true;
1383          self.secureEmailValidAlertMessage = "发送失败";
1384        }
1385      });
1386    },
1387    secureEmailValid: function secureEmailValid() {
1388      var self = this;
1389      
1390      var url = self.attestServerUrl + '/api/guard/secureemail/valid';
1391      var postdata = { "gid": self.gid, "code": self.secureEmailCode };
1392      
1393      $.ajax({
1394        type: "POST",
1395        url: url,
1396        contentType: 'application/json; charset=UTF-8',
1397        data: JSON.stringify(postdata),
1398        dataType: "json",
1399        success: function success(r) {
1400          console.log(url, r);
1401
1402          if (r && r.code == 0) {
1403            var status = r.data.status;
1404          	
1405            if (status == 2) {
1406              // self.clearSecureEmail();
1407
1408              window.setTimeout(function () {
1409                submitFm1();
1410              }, 500);
1411            } else {
1412              self.secureEmailValidShowAlert = true;
1413              self.secureEmailValidAlertMessage = "验证失败";
1414            }
1415          }
1416        },
1417        error: function error(err) {
1418          console.log(err);
1419        }
1420      });
1421    },
1422
1423    clearSecureEmail: function clearSecureEmail() {
1424      var self = this;
1425
1426      window.clearTimeout(self.secureEmailSendTimeout);
1427      
1428      self.secureEmailSendDisabled = false;
1429      self.secureEmailSendText = "获取验证码";
1430      self.secureEmailSendSeconds = 60;
1431
1432      self.secureEmailCode = '';
1433      self.secureEmailValidShowAlert = false;
1434      self.secureEmailValidAlertMessage = "";
1435    },
1436    
1437    qrCodeInit: function qrCodeInit() {
1438      var self = this;
1439      
1440      if (self.qrCode == null || self.qrCode.scanTypes == null || self.qrCode.scanTypes.length == 0) {
1441        return;
1442      }
1443      
1444      var scanTypeNames = "";
1445      for (var i=0; i<self.qrCode.scanTypes.length; i++) {
1446        var scanType = self.qrCode.scanTypes[i];
1447        if (scanType == "superapp") {
1448          scanTypeNames += "、"+superappName;
1449        } else if (scanType == "qq") {
1450          scanTypeNames += "、QQ";
1451        } else if (scanType == "weixinmp") {
1452          scanTypeNames += "、微信";
1453        } else if (scanType == "workweixinh5") {
1454          scanTypeNames += "、企业微信";
1455        } else if (scanType == "dingtalkh5") {
1456          scanTypeNames += "、钉钉";
1457        }
1458      }
1459      if (scanTypeNames!="") {
1460        scanTypeNames = scanTypeNames.substring(1);
1461      }
1462      
1463      self.qrCodeScanTypeNames = scanTypeNames;
1464      
1465      self.qrCodeSend();
1466    },
1467    
1468    qrCodeSend: function qrCodeSend() {
1469      var self = this;
1470
1471      var url = self.attestServerUrl + '/api/guard/qrcode/send';
1472      var postdata = { "gid": self.gid };
1473      
1474      $.ajax({
1475        type: "POST",
1476        url: url,
1477        contentType: 'application/json; charset=UTF-8',
1478        data: JSON.stringify(postdata),
1479        dataType: "json",
1480        success: function success(r) {
1481          console.log(url, r);
1482
1483          if (r && r.code == 0 && r.data.scanQrcode) {
1484            self.qrCodeStatusShowAlert = false;
1485            self.qrCodeStatusAlertMessage = "";
1486
1487            self.qrCodeScanQrcode = r.data.scanQrcode;
1488            self.qrCodeCallbackCode = r.data.callbackCode;
1489
1490            self.startQrCodeStatus();
1491          } else {
1492            
1493            self.startQrCodeStatus();
1494          }
1495        },
1496        error: function error(err) {
1497          console.log(err);
1498        }
1499      });
1500    },
1501    
1502    qrCodeRefresh: function qrCodeRefresh() {
1503      var self = this;
1504      
1505      self.clearQrCode();
1506      self.initGuard();
1507    },
1508
1509    startQrCodeStatus: function startQrCodeStatus() {
1510      var self = this;
1511
1512      window.clearTimeout(self.appPushStatusTimeout); // 定时
1513      
1514      /*
1515       * status 
1516       * 0 init 新建、初始化, 
1517       * 1 sent 已发送、已扫码等, 
1518       * 2 valid 验证通过, 
1519       * 3 fail 验证失败, 
1520       * 5 cancel 取消, 
1521       * 8 scaned 已扫码
1522       * 9 expired 已过期、不存在
1523       */
1524      function qrCodeStatus() {
1525        var url = self.attestServerUrl + '/api/guard/qrcode/status';
1526        var postdata = { "gid": self.gid };
1527        
1528        $.ajax({
1529          type: "POST",
1530          url: url,
1531          contentType: 'application/json; charset=UTF-8',
1532          data: JSON.stringify(postdata),
1533          dataType: "json",
1534          timeout: 1000,
1535          success: function success(r) {
1536            // console.log(url, r);
1537            if (r && r.code == 0) {
1538              var status = r.data.status;
1539              
1540              if (status == 0) {
1541                
1542                self.qrCodeScanSuccess = false;
1543                self.qrCodeStatusShowAlert = false;
1544                self.qrCodeStatusAlertMessage = "";
1545              } else if (status == 1) {
1546                
1547                self.qrCodeScanSuccess = false;
1548                self.qrCodeStatusShowAlert = false;
1549                self.qrCodeStatusAlertMessage = "";
1550              } else if (status == 2) {
1551                
1552                self.qrCodeScanSuccess = true;
1553                self.qrCodeStatusShowAlert = true;
1554                self.qrCodeStatusAlertMessage = "已确认";
1555
1556                window.clearTimeout(self.qrCodeStatusTimeout);
1557                window.setTimeout(function () {
1558                  submitFm1();
1559                }, 500);
1560              } else if (status == 3) {
1561                
1562                self.qrCodeScanSuccess = false;
1563                self.qrCodeStatusShowAlert = true;
1564                self.qrCodeStatusAlertMessage = "确认失败";
1565                
1566                window.clearTimeout(self.qrCodeStatusTimeout);
1567              } else if (status == 5) {
1568                
1569                self.qrCodeScanSuccess = false;
1570                self.qrCodeStatusShowAlert = true;
1571                self.qrCodeStatusAlertMessage = "已拒绝";
1572                
1573                window.clearTimeout(self.qrCodeStatusTimeout);
1574              } else if (status == 8) {
1575                
1576                self.qrCodeScanSuccess = true;
1577                self.qrCodeStatusShowAlert = true;
1578                self.qrCodeStatusAlertMessage = "已扫码,等待确认";
1579              } else if (status == 9) {
1580                
1581                self.qrCodeScanSuccess = false;
1582                self.qrCodeStatusShowAlert = true;
1583                self.qrCodeStatusAlertMessage = "已失效,请重新发送";
1584                
1585                self.qrCodeCallbackCode = null;
1586                
1587                window.clearTimeout(self.qrCodeStatusTimeout);
1588                
1589                /* window.setTimeout(function () {
1590                  self.initGuard();
1591                }, 500); */
1592                
1593              }
1594              
1595            } else {
1596              window.clearTimeout(self.qrCodeStatusTimeout);
1597            }
1598          },
1599          error: function error(err) {
1600            console.log(err);
1601            window.clearTimeout(self.qrCodeStatusTimeout);
1602          }
1603        });
1604        
1605        self.qrCodeStatusTimeout = window.setTimeout(qrCodeStatus, 2000);
1606      }
1607      
1608      self.qrCodeStatusTimeout = window.setTimeout(qrCodeStatus, 100);
1609    },
1610    
1611    clearQrCode: function clearQrCode() {
1612      var self = this;
1613      
1614      window.clearTimeout(self.qrCodeStatusTimeout);
1615      
1616      self.qrCodeScanQrcode = null;
1617      self.qrCodeScanSuccess = false;
1618      self.qrCodeStatusShowAlert = false;
1619      self.qrCodeStatusAlertMessage = "";
1620
1621      self.qrCodeCallbackCode = null;
1622    },
1623    
1624
1625    faceVerifyInit: function faceVerifyInit() {
1626      var self = this;
1627      
1628      self.faceVerifySend();
1629    },
1630    
1631    faceVerifySend: function faceVerifySend() {
1632      var self = this;
1633
1634      var url = self.attestServerUrl + '/api/guard/faceverify/send';
1635      var postdata = { "gid": self.gid };
1636      
1637      $.ajax({
1638        type: "POST",
1639        url: url,
1640        contentType: 'application/json; charset=UTF-8',
1641        data: JSON.stringify(postdata),
1642        dataType: "json",
1643        success: function success(r) {
1644          console.log(url, r);
1645
1646          if (r && r.code == 0 && r.data.scanFaceverify) {
1647            self.faceVerifyStatusShowAlert = false;
1648            self.faceVerifyStatusAlertMessage = "";
1649
1650            self.faceVerifyScanFaceverify = r.data.scanFaceverify;
1651            self.faceVerifyCallbackCode = r.data.callbackCode;
1652
1653            self.startFaceVerifyStatus();
1654          } else {
1655            
1656            self.startFaceVerifyStatus();
1657          }
1658        },
1659        error: function error(err) {
1660          console.log(err);
1661        }
1662      });
1663    },
1664    
1665    faceVerifyRefresh: function faceVerifyRefresh() {
1666      var self = this;
1667      
1668      self.clearFaceVerify();
1669      self.initGuard();
1670    },
1671
1672    startFaceVerifyStatus: function startFaceVerifyStatus() {
1673      var self = this;
1674
1675      window.clearTimeout(self.appPushStatusTimeout); // 定时
1676      
1677      /*
1678       * status 
1679       * 0 init 新建、初始化, 
1680       * 1 sent 已发送、已扫码等, 
1681       * 2 valid 验证通过, 
1682       * 3 fail 验证失败, 
1683       * 5 cancel 取消, 
1684       * 8 scaned 已扫码
1685       * 9 expired 已过期、不存在
1686       */
1687      function faceVerifyStatus() {
1688        var url = self.attestServerUrl + '/api/guard/faceverify/status';
1689        var postdata = { "gid": self.gid };
1690        
1691        $.ajax({
1692          type: "POST",
1693          url: url,
1694          contentType: 'application/json; charset=UTF-8',
1695          data: JSON.stringify(postdata),
1696          dataType: "json",
1697          timeout: 1000,
1698          success: function success(r) {
1699            // console.log(url, r);
1700            if (r && r.code == 0) {
1701              var status = r.data.status;
1702              
1703              if (status == 0) {
1704                
1705                self.faceVerifyScanSuccess = false;
1706                self.faceVerifyStatusShowAlert = false;
1707                self.faceVerifyStatusAlertMessage = "";
1708              } else if (status == 1) {
1709                
1710                self.faceVerifyScanSuccess = false;
1711                self.faceVerifyStatusShowAlert = false;
1712                self.faceVerifyStatusAlertMessage = "";
1713              } else if (status == 2) {
1714                
1715                self.faceVerifyScanSuccess = true;
1716                self.faceVerifyStatusShowAlert = true;
1717                self.faceVerifyStatusAlertMessage = "人脸识别成功";
1718
1719                window.clearTimeout(self.faceVerifyStatusTimeout);
1720                window.setTimeout(function () {
1721                  submitFm1();
1722                }, 500);
1723              } else if (status == 3) {
1724                
1725                self.faceVerifyScanSuccess = false;
1726                self.faceVerifyStatusShowAlert = true;
1727                self.faceVerifyStatusAlertMessage = "人脸识别失败";
1728                
1729                window.clearTimeout(self.faceVerifyStatusTimeout);
1730              
1731              } else if (status == 11) {
1732                
1733                self.faceVerifyScanSuccess = true;
1734                self.faceVerifyStatusShowAlert = true;
1735                self.faceVerifyStatusAlertMessage = "人脸识别中…";
1736              } else if (status == 9) {
1737                
1738                self.faceVerifyScanSuccess = false;
1739                self.faceVerifyStatusShowAlert = true;
1740                self.faceVerifyStatusAlertMessage = "已失效,请刷新二维码";
1741                
1742                self.faceVerifyCallbackCode = null;
1743                
1744                window.clearTimeout(self.faceVerifyStatusTimeout);
1745                
1746                /* window.setTimeout(function () {
1747                  self.initGuard();
1748                }, 500); */
1749                
1750              }
1751              
1752            } else {
1753              window.clearTimeout(self.faceVerifyStatusTimeout);
1754            }
1755          },
1756          error: function error(err) {
1757            console.log(err);
1758            window.clearTimeout(self.faceVerifyStatusTimeout);
1759          }
1760        });
1761        
1762        self.faceVerifyStatusTimeout = window.setTimeout(faceVerifyStatus, 2000);
1763      }
1764      
1765      self.faceVerifyStatusTimeout = window.setTimeout(faceVerifyStatus, 100);
1766    },
1767    
1768    clearFaceVerify: function clearFaceVerify() {
1769      var self = this;
1770      
1771      window.clearTimeout(self.faceVerifyStatusTimeout);
1772      
1773      self.faceVerifyScanQrcode = null;
1774      self.faceVerifyScanSuccess = false;
1775      self.faceVerifyStatusShowAlert = false;
1776      self.faceVerifyStatusAlertMessage = "";
1777
1778      self.faceVerifyCallbackCode = null;
1779    },
1780    
1781
1782    
1783  }
1784});
1785</script>
1785
1786
1787<script type="text/javascript">
1788
1789function submitFm1() {
1790  // $("#fm1").submit();
1791  $("#fm1").find(":submit").click();
1792}
1793function submitFm2() {
1794  // $("#fm2").submit();
1795  $("#fm2").find(":submit").click();
1796}
1797
1798</script>
1798
1799
1800<script type="text/javascript">
1801function mfaDetect() {
1802  var username = $("#fm1Input").find("#username").val();
1803  var password = $("#fm1Input").find("#password").val();
1804
1805  if (encryptEnabled && password.indexOf('__RSA__') < 0) {
1806    var encodedPassword = "__RSA__"+encrypt.encrypt(password);
1807    password = encodedPassword;
1808  }
1809
1810  var url = "\/cas\/mfa\/detect";
1811//  url += "?username=" + username;
1812  $.ajax({
1813    url: url,
1814    type: "POST",
1815    dataType: "json",
1816    data: "username=" + encodeURIComponent(username)+"&password=" + encodeURIComponent(password),
1817    success: function success(r) {
1818      console.log(url, r);
1819      if (r && r.code == 0) {
1820        var state = r.data.state;
1821        $("#fm1").find('[name="mfaState"]').val(state);
1822
1823        var need = r.data.need;
1824        if (need == true) {
1825          $("#showGuardDialog").click();
1826        } else {
1827          submitFm1();
1828        }
1829      } else {
1830        console.log(r);
1831        // submitFm1();
1832      }
1833    },
1834    error: function error(err) {
1835      console.log(err);
1836      // submitFm1();
1837    }
1838  });
1839
1840}
1841</script>
1841
1842
1843                    
1843<script type="text/javascript">
1844                        var mobilePattern = new RegExp("^1[0-9]{10}$", 'i');
1845
1846                        var i_login = "One moment please...";
1847                        $( document ).ready(function() {
1848                            console.log("fm1Input button", $("#fm1Input").find('[name="button"]'));
1849                          	$("#fm1Input").find('[name="button"]').click(function(){
1850                          	  console.log("submit button click");
1851                              var username = $("#fm1Input").find("#username").val();
1852                              var password = $("#fm1Input").find("#password").val();
1853                              if (username == null || username == '') {
1854                                $("#showErrorMessageUsername").click();
1855                                return false;
1856                              }
1857
1858                              if (password == null || password == '') {
1859                                $("#showErrorMessagePassword").click();
1860                                return false;
1861                              }
1862
1863                              var captcha = $("#fm1Input").find("#captcha").val();
1864                              if (casServerCaptchaEnabled && casServerCaptchaShow ) {
1865                                if (captcha == null || captcha == '') {
1866                                  $("#showErrorMessageCaptcha").click();
1867                                  return false;
1868                                }
1869                              }
1870
1871                              window.setTimeout(function () {
1872                                if (mfaEnabled) {
1873                                  mfaDetect();
1874                                  return;
1875                                }
1876                                
1877                                submitFm1();
1878                              }, 500);
1879
1880                          	  return false;
1881                          	});
1882                          	console.log("fm1", $("#fm1"));
1883                            $("#fm1").submit(function () {
1884                              var username = $("#fm1Input").find("#username").val();
1885                              var password = $("#fm1Input").find("#password").val();
1886                              if (username == null || username == '') {
1887                                $("#showErrorMessageUsername").click();
1888                                return false;
1889                              }
1890
1891                              if (password == null || password == '') {
1892                                $("#showErrorMessagePassword").click();
1893                                return false;
1894                              }
1895
1896                              var captcha = $("#fm1Input").find("#captcha").val();
1897                              if (casServerCaptchaEnabled && casServerCaptchaShow ) {
1898                                if (captcha == null || captcha == '') {
1899                                  $("#showErrorMessageCaptcha").click();
1900                                  return false;
1901                                }
1902                              }
1903
1904                              if (mfaEnabled) {
1905                                var mfaState = $("#fm1").find('[name="mfaState"]').val();
1906                                if (mfaState == null || mfaState == '') {
1907                                  mfaDetect();
1908                                  return false;
1909                                }
1910                              }
1911
1912                              $("#fm1").find('[name="username"]').val(username);
1913                              $("#fm1").find('[name="password"]').val(password);
1914
1915                              if (casServerCaptchaEnabled && (typeof $("#fm1Input").find("#captcha") != 'undefined') ) {
1916                                $("#fm1").find('[name="captcha"]').val(captcha);
1917                              }
1918
1919                              // 前端密码加密
1920                              if (encryptEnabled && password.indexOf('__RSA__') < 0) {
1921                                var encodedPassword = "__RSA__"+encrypt.encrypt(password);
1922                                $("#fm1").find('[name="password"]').val(encodedPassword);
1923                              }
1924
1925                                //$("#fm1").find(":submit").attr("disabled", true);
1926                                //$("#fm1").find(":submit").attr("value", i_login);
1927                                //console.log(i_login);
1928                                
1929                                doLogin();
1930                                return true;
1931                            });
1932                            console.log("fm2Input button", $("#fm2Input").find('[name="button"]'));
1933                            $("#fm2Input").find('[name="button"]').click(function(){
1934                              var mobile = $("#fm2Input").find("#mobile").val();
1935                              var dynamiccode = $("#fm2Input").find("#dynamiccode").val();
1936                              if (mobile == null || mobile == '') {
1937                                $("#showErrorMessageMobile").click();
1938                                return false;
1939                              }
1940                              if (!mobilePattern.test(mobile)) {
1941                                $("#showErrorMessageMobile").click();
1942                                return false;
1943                              }
1944
1945                              if (dynamiccode == null || dynamiccode == '') {
1946                                $("#showErrorMessageDynamicCode").click();
1947                                return false;
1948                              }
1949                              
1950                              window.setTimeout(function () {
1951                                submitFm2();
1952                              }, 500);
1953                              
1954                              return false;
1955                            });
1956                            console.log("fm2", $("#fm2"));
1957                            $("#fm2").submit(function () {
1958                              var mobile = $("#fm2Input").find("#mobile").val();
1959                              var dynamiccode = $("#fm2Input").find("#dynamiccode").val();
1960                              if (mobile == null || mobile == '') {
1961                                $("#showErrorMessageMobile").click();
1962                                return false;
1963                              }
1964                              if (!mobilePattern.test(mobile)) {
1965                                $("#showErrorMessageMobile").click();
1966                                return false;
1967                              }
1968
1969                              if (dynamiccode == null || dynamiccode == '') {
1970                                $("#showErrorMessageDynamicCode").click();
1971                                return false;
1972                              }
1973
1974                              $("#fm2").find('[name="username"]').val(mobile);
1975                              $("#fm2").find('[name="password"]').val(dynamiccode);
1976
1977                                //$("#fm2").find(":submit").attr("disabled", true);
1978                                //$("#fm2").find(":submit").attr("value", i_login);
1979                                //console.log(i_login);
1980                                
1981                                doLogin();
1982                                return true;
1983                            });
1984                        });
1985                    </script>
1985
1986                    
1987                    
1987<script type="text/javascript">
1988                        function refreshCaptchaInMenu(currentMenu) {
1989                          refreshCaptcha($("#fm"+currentMenu+"Input").find("#captcha_img"));
1990                        }
1991                        function refreshCaptcha(obj) { // console.log(obj);
1992                          var captcha_img = $(obj);
1993                          var captcha_container = captcha_img.parents("div.el-form-item");
1994                          captcha_container.find("#captcha_img").attr("src", "\/cas\/captcha.jpg"+"?r=" + (new Date()).getTime() + Math.floor(Math.random()*24));
1995                          captcha_container.find("#captcha").val("");
1996                          captcha_container.find("#captcha").focus();
1997                        }
1998                        function togglePassword(obj) {
1999                          var $obj = $(obj);
2000                          
2001                          var $password = $(obj).parents('.sw-input').find("#password");
2002                          
2003                          if ($password.attr('type') == 'password') {
2004                            $password.attr('type', 'text');
2005                            $obj.removeClass('su-icon-hide').addClass('su-icon-display');
2006                          } else {
2007                            $password.attr('type', 'password');
2008                            $obj.removeClass('su-icon-display').addClass('su-icon-hide');
2009                          }
2010                        }
2011                    </script>
2011
2012                    
2012<script type="text/javascript">
2013                	  var i_sendToken = "Send"
2014                	  var i_sending = "Sending..."
2015                	  var i_send = "Sended"
2016                	  var disableSendToken = false;
2017                        function sendToken(obj) {
2018                          if (disableSendToken) {
2019                            return;
2020                          }
2021                          
2022                          var mobile = $("#fm2Input").find("#mobile").val();
2023                          if (mobile == null || mobile == '') {
2024                            $("#showErrorMessageMobile").click();
2025                            return;
2026                          }
2027                          if (!mobilePattern.test(mobile)) {
2028                            $("#showErrorMessageMobile").click();
2029                            return;
2030                          }
2031                          
2032                          var sendButton = $(obj);
2033                          
2034                          disableSendToken = true;
2035                      	  sendButton.attr("disabled", true);
2036                      	  sendButton.find('span').text(i_sending);
2037                      	  
2038                      	  var time = 60;
2039                      	  var setSended = function() {
2040                      	    sendButton.find('span').text(i_send + '('+time+')');
2041                      	    
2042                      	    time --;
2043                      	    if (time > 0) {
2044                      	      setTimeout(setSended, 1000);
2045                      	    } else {
2046                      	      disableSendToken = false;
2047                      	      sendButton.attr("disabled", false);
2048                      	      sendButton.find('span').text(i_sendToken);
2049                      	    }
2050                      	    
2051                      	  }
2052                          
2053                          $.ajax({
2054                            url: "\/cas\/passwordlessTokenSend",
2055                            type: "POST",
2056                            data: {"username": mobile},
2057                          	dataType: "json",
2058                          	success: function(r) {
2059                          	  console.log(r);
2060                          	  
2061                          	  if (r.data.success) {
2062                            	  // 提示信息
2063                            	  //alert(r.data.success);
2064                                  $("#showSuccessMessageSendCode").click();
2065                            	  // 倒计时 60s
2066                            	  time = 60;
2067                            	  setSended();
2068                          	  }
2069                          	  
2070                          	  if (r.data.error) {
2071                          	    //alert(r.data.error);
2072                          	    $("#showFailureMessageSendCode").click();
2073                          	    time = 0;
2074                          	    setSended();
2075                          	  }
2076                          	}
2077                          });
2078                          
2079                        }
2080                    </script>
2080
2081
2082                    
2082<script type="text/javascript">
2083                        function forgotYourPassword() {
2084                          window.location.href="\/cas\/personal\/forgotYourPassword";
2085                        }
2086                    </script>
2086
2087
2088                    
2088<script type="text/javascript">
2089                        function activeYourAccount() {
2090                          window.location.href="\/cas\/personal\/activeYourAccount";
2091                        }
2092                    </script>
2092
2093
2094  
2094<script type="text/javascript">
2095  function processLoginError(containerFormInput, containerForm, originalUsername, hasErrors, errors) {
2096    console.log(containerForm);
2097    console.log(originalUsername);
2098    console.log(hasErrors);
2099    console.log(errors);
2100    
2101    doLoginFailN(containerFormInput, containerForm, originalUsername, hasErrors, errors);
2102  }
2103  
2104  var casServerCaptchaEnabled = true;
2105  var casServerCaptchaSkipN = true;
2106  var captchaSkipN = "-1";
2107  
2108  var casServerCaptchaShow = false;
2109  
2110  function doLogin() {
2111    var loginN = (localStorage.loginN || "0");
2112    if (loginN == null) {
2113      loginN = "0";
2114    }
2115    
2116    loginN = parseInt(loginN) +1;
2117    localStorage.loginN = loginN;
2118
2119    var nowTimestamp = new Date().getTime();
2120    localStorage.loginNTimestamp = nowTimestamp;
2121  }
2122  
2123  function doLoginFailN(containerFormInput, containerForm, originalUsername, hasErrors, errors) {
2124
2125    var failN = (localStorage.failN || "0");
2126    if (failN == null) {
2127      failN = "0";
2128    }
2129
2130    if (hasErrors) {
2131      failN = parseInt(failN) +1;
2132      localStorage.failN = failN;
2133      
2134      var nowTimestamp = new Date().getTime();
2135      localStorage.failNTimestamp = nowTimestamp;
2136    }
2137
2138    doCaptchaShow(containerFormInput, containerForm, failN);
2139  }
2140  
2141  function doCaptchaShow(containerFormInput, containerForm, failN) {
2142    console.log('show captcha, failN='+failN+", captchaSkipN="+captchaSkipN);
2143
2144    var fialNInput = containerForm.find('[name="failN"]');
2145    fialNInput.val(failN);
2146
2147    var captchaInput = containerFormInput.find('[name="captcha"]');  // console.log(captchaInput.parents("div.el-form-item"));
2148    if (captchaInput.length <= 0) {
2149      return;
2150    }
2151    
2152    captchaInput.parents("div.captcha-input-container").hide();
2153    casServerCaptchaShow = false;
2154
2155    if (failN < 0) {
2156      captchaInput.parents("div.captcha-input-container").show();
2157      casServerCaptchaShow = true;
2158    } else if (failN >= captchaSkipN) {
2159      captchaInput.parents("div.captcha-input-container").show();
2160      casServerCaptchaShow = true;
2161    }
2162  }
2163  
2164  function initCaptchaShow(containerFormInput, containerForm) {
2165    if (casServerCaptchaEnabled) {
2166      if (casServerCaptchaSkipN) {
2167        var loginN = (localStorage.loginN || "0");
2168        if (loginN == null) {
2169          loginN = "0";
2170        }
2171        loginN = parseInt(loginN);
2172        
2173        var failN = (localStorage.failN || "0");
2174        if (failN == null) {
2175          failN = "0";
2176        }
2177        failN = parseInt(failN);
2178        
2179        var failNTimestamp = (localStorage.failNTimestamp || "0");
2180        if (failNTimestamp == null) {
2181          failNTimestamp = "0";
2182        }
2183        
2184        var nowTimestamp = new Date().getTime();
2185        console.log('init captcha, failNTimestamp='+failNTimestamp+", nowTimestamp="+nowTimestamp);
2186        if (failNTimestamp < (nowTimestamp - (1000 * 60 * 60 * 1))) { // FIXME: 如果 1小时后,再登录,则清空 failN
2187          loginN = 0; 
2188          localStorage.loginN = loginN;
2189          failN = 0;
2190          localStorage.failN = failN;
2191        }
2192        
2193        if (failN < loginN) {
2194          loginN = 0; 
2195          localStorage.loginN = loginN;
2196          failN = 0; 
2197          localStorage.failN = failN;
2198        }
2199        
2200        doCaptchaShow(containerFormInput, containerForm, failN); // 显示
2201      } else {
2202        doCaptchaShow(containerFormInput, containerForm, -1); // 始终显示
2203      }
2204    }
2205  }
2206  $( document ).ready(function() {
2207    console.log("trigger initCaptchaShow");
2208  	initCaptchaShow($("#fm1Input"), $("#fm1"));
2209  });
2210  </script>
2210
2211
2212  
2213  
2213<script type="text/javascript">
2214  $( document ).ready(function() {
2215    var location = self.document.location;
2216    var hash = decodeURIComponent(location.hash);
2217    
2218    if (hash != undefined && hash != '' && hash.indexOf('#') === -1) {
2219        hash = '#' + hash;
2220    }
2221    
2222    var action = location.href;
2223  
2224    /* var action = $('#fm1').attr('action');
2225    if (action == undefined) {
2226        action = location.href;
2227    } else {
2228        var qidx = location.href.indexOf('?');
2229        if (qidx != -1) {
2230            var queryParams = location.href.substring(qidx);
2231            action += queryParams;
2232        }
2233    } */
2234    action += hash;
2235    
2236    $('#fm1').attr('action', action);
2237    $('#fm2').attr('action', action);
2238    $('#fm3').attr('action', action);
2239
2240  });
2241  </script>
2241
2242
2243  
2243<script type="text/javascript">
2244  function submitByEnter(event, fmId) {
2245    if(event.which === 13 || event.keyCode === 13) {
2246      $(fmId).find('[name="button"]').click();
2247    }
2248  }
2249  $( document ).ready(function() {
2250    $("#fm1Input").find("#username").keyup(function(event){
2251      submitByEnter(event, "#fm1Input");
2252    });
2253    $("#fm1Input").find("#password").keyup(function(event){
2254      submitByEnter(event, "#fm1Input");
2255    });
2256    $("#fm1Input").find("#captcha").keyup(function(event){
2257      submitByEnter(event, "#fm1Input");
2258    });
2259    $("#fm2Input").find("#mobile").keyup(function(event){
2260      submitByEnter(event, "#fm2Input");
2261    });
2262    $("#fm2Input").find("#dynamiccode").keyup(function(event){
2263      submitByEnter(event, "#fm2Input");
2264    });
2265  });
2266  </script>
2266
2267
2268  
2268<script type="text/javascript">
2269  $( document ).ready(function() {
2270    $(".el-carousel__container").css({"max-height":"1080px", "min-height":"660px"});
2271    $("#vue_main").show();
2272  });
2273  </script>
2273
2274
2275    </div>
2276</main>
2277
2278
2279
2280
2281
2282<script src="/cas/deps/js/fingerprintjs/v3/iife.min.js"></script>
vendor: 1 bytes, line 2282
2282
2283<script>
2284$( document ).ready(function() {
2285  var fpPromise = FingerprintJS.load();
2286  fpPromise
2287    .then(function (fp) { return fp.get() })
2288    .then(function (result) {
2289      // Handle the result
2290      //console.log(result)
2291      $('[name="fpVisitorId"]').val(result.visitorId);
2292    });
2293});
2294</script>
2294
2295
2296</body>
2297</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.