123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- <%@ page contentType="text/html;charset=UTF-8" %>
- <%@ page import="org.apache.shiro.web.filter.authc.FormAuthenticationFilter" %>
- <%@ include file="/WEB-INF/views/include/taglib.jsp" %>
- <html>
- <head>
- <title>${fns:getConfig('productName')} 登录</title>
- <meta name="decorator" content="blank"/>
- <style type="text/css">
- html, body, table {
- background-color: #f5f5f5;
- width: 100%;
- text-align: center;
- }
- .form-signin-heading {
- font-family: Helvetica, Georgia, Arial, sans-serif, 黑体;
- font-size: 36px;
- margin-bottom: 20px;
- color: #0663a2;
- }
- .form-signin {
- position: relative;
- text-align: left;
- width: 300px;
- padding: 25px 29px 29px;
- margin: 0 auto 20px;
- background-color: #fff;
- border: 1px solid #e5e5e5;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
- -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
- box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
- }
- .form-signin .checkbox {
- margin-bottom: 10px;
- color: #0663a2;
- }
- .form-signin .input-label {
- font-size: 16px;
- line-height: 23px;
- color: #999;
- }
- .form-signin .input-block-level {
- font-size: 16px;
- height: auto;
- margin-bottom: 15px;
- padding: 7px;
- *width: 283px;
- *padding-bottom: 0;
- _padding: 7px 7px 9px 7px;
- }
- .form-signin .btn.btn-large {
- width: 100%;
- height: 40px;
- font-size: 14px;
- margin-bottom: 10px;
- }
- .form-signin #themeSwitch {
- position: absolute;
- right: 15px;
- bottom: 10px;
- }
- .form-signin div.validateCode {
- padding-bottom: 15px;
- }
- .mid {
- vertical-align: middle;
- }
- .header {
- height: 80px;
- padding-top: 20px;
- }
- .alert {
- position: relative;
- width: 300px;
- margin: 0 auto;
- *padding-bottom: 0px;
- }
- label.error {
- background: none;
- width: 270px;
- font-weight: normal;
- color: inherit;
- margin: 0;
- }
- .verify-wrap {
- width: 240px !important;
- border-radius: 5px;
- margin-bottom: 15px;
- }
- .fix-tips {
- background: -webkit-gradient(linear, left top, right top, color-stop(0, #4d4d4d), color-stop(.4, #4d4d4d), color-stop(.5, #fff), color-stop(.6, #4d4d4d), color-stop(1, #4d4d4d));
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
- -webkit-animation: slidetounlock 3s infinite;
- color: #787878 !important;
- }
- @keyframes slidetounlock {
- 0% {
- background-position: -100px 0;
- }
- 100% {
- background-position: 100px 0;
- }
- }
- .verify-wrap .drag-btn{
- border-radius: 5px;
- height: 38px;
- top: 0;
- left: 0;
- }
- </style>
- <script type="text/javascript">
- $(document).ready(function () {
- var isSlideFinishState = false;
- $('#submitButton').attr('disabled',"true");
- var SlideVerifyPlug = window.slideVerifyPlug;
- var slideVerify = new SlideVerifyPlug('#verify-wrap', {
- wrapWidth: '350',//设置 容器的宽度 ,不设置的话,会设置成100%,需要自己在外层包层div,设置宽度,这是为了适应方便点;
- initText: '请向右滑动滑块', //设置 初始的 显示文字
- sucessText: '验证通过',//设置 验证通过 显示的文字
- getSuccessState: function (res) {
- //当验证完成的时候 会 返回 res 值 true,只留了这个应该够用了
- console.log(res);
- if (slideVerify.slideFinishState) {
- $('.value').html(slideVerify.slideFinishState)
- $('#resetBtn').removeClass('prohibit')
- $('#submitButton').removeAttr("disabled");
- isSlideFinishState = true;
- }
- }
- });
- $("#loginForm").validate({
- rules: {
- validateCode: {remote: "${pageContext.request.contextPath}/servlet/validateCodeServlet"}
- },
- messages: {
- username: {required: "请填写用户名."}, password: {required: "请填写密码."},
- validateCode: {remote: "验证码不正确.", required: "请填写验证码."}
- },
- errorLabelContainer: "#messageBox",
- errorPlacement: function (error, element) {
- error.appendTo($("#loginError").parent());
- }
- });
- });
- // 如果在框架或在对话框中,则弹出提示并跳转到首页
- if (self.frameElement && self.frameElement.tagName == "IFRAME" || $('#left').length > 0 || $('.jbox').length > 0) {
- alert('未登录或登录超时。请重新登录,谢谢!');
- top.location = "${ctx}";
- }
- </script>
- </head>
- <body>
- <!--[if lte IE 6]><br/>
- <div class='alert alert-block' style="text-align:left;padding-bottom:10px;"><a class="close" data-dismiss="alert">x</a>
- <h4>温馨提示:</h4>
- <p>你使用的浏览器版本过低。为了获得更好的浏览体验,我们强烈建议您 <a href="http://browsehappy.com" target="_blank">升级</a> 到最新版本的IE浏览器,或者使用较新版本的
- Chrome、Firefox、Safari 等。</p></div><![endif]-->
- <div class="header">
- <div id="messageBox" class="alert alert-error ${empty message ? 'hide' : ''}">
- <button data-dismiss="alert" class="close">×</button>
- <label id="loginError" class="error">${message}</label>
- </div>
- </div>
- <h1 class="form-signin-heading">${fns:getConfig('productName')}</h1>
- <form id="loginForm" class="form-signin" action="${ctx}/login" method="post">
- <label class="input-label" for="username">登录名</label>
- <input type="text" id="username" name="username" class="input-block-level required" value="${username}">
- <label class="input-label" for="password">密码</label>
- <input type="password" id="password" name="password" class="input-block-level required">
- <!-- 滑动验证 -->
- <div class="verify-wrap" id="verify-wrap"></div>
- <c:if test="${isValidateCodeLogin}">
- <div class="validateCode">
- <label class="input-label mid" for="validateCode">验证码</label>
- <sys:validateCode name="validateCode" inputCssStyle="margin-bottom:0;"/>
- </div>
- </c:if>
- <%--
- <label for="mobile" title="手机登录"><input type="checkbox" id="mobileLogin" name="mobileLogin" ${mobileLogin ? 'checked' : ''}/></label> --%>
- <button class="btn btn-large btn-primary" type="submit" id="submitButton">登录</button>
- <%--<label for="rememberMe" title="下次不需要再登录"><input type="checkbox" id="rememberMe" name="rememberMe" ${rememberMe ? 'checked' : ''}/> 记住我(公共场所慎用)</label>--%>
- <div id="themeSwitch" class="dropdown">
- <a class="dropdown-toggle" data-toggle="dropdown"
- href="#">${fns:getDictLabel(cookie.theme.value,'theme','默认主题')}<b class="caret"></b></a>
- <ul class="dropdown-menu">
- <c:forEach items="${fns:getDictList('theme')}" var="dict">
- <li><a href="#"
- onclick="location='${pageContext.request.contextPath}/theme/${dict.value}?url='+location.href">${dict.label}</a>
- </li>
- </c:forEach>
- </ul>
- <!--[if lte IE 6]>
- <script type="text/javascript">$('#themeSwitch').hide();</script><![endif]-->
- </div>
- </form>
- <div class="footer">
- Copyright © 2014 - <span id="copyrightYear"></span> ${fns:getConfig('productName')} ${fns:getConfig('version')}
- </div>
- <script src="${ctxStatic}/flash/zoom.min.js" type="text/javascript"></script>
- <script src="${ctxStatic}/slideVerify/slideVerify.js" type="text/javascript"></script>
- <script>
- $(function () {
- let date = new Date()
- $('#copyrightYear').text( date.getFullYear())
- })
- </script>
- </body>
- </html>
|