2017-04-21 18:20:35 +08:00
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
2018-03-23 10:00:36 +08:00
<link rel="shortcut icon" href=" { { cdnimg "/favicon.ico" } } ">
2017-04-21 18:20:35 +08:00
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="renderer" content="webkit" />
<meta name="viewport" content="width=device-width, initial-scale=1">
2018-09-19 16:12:32 +08:00
<meta name="author" content="MinDoc" />
2017-04-21 18:20:35 +08:00
<title>用户登录 - Powered by MinDoc</title>
2018-09-19 16:12:32 +08:00
<meta name="keywords" content="MinDoc,文档在线管理系统,WIKI,wiki,wiki在线,文档在线管理,接口文档在线管理,接口文档管理">
<meta name="description" content="MinDoc文档在线管理系统 { { . site_description } } ">
2017-04-21 18:20:35 +08:00
<!-- Bootstrap -->
2017-05-13 13:47:26 +08:00
<link href=" { { cdncss "/static/bootstrap/css/bootstrap.min.css" } } " rel="stylesheet">
<link href=" { { cdncss "/static/font-awesome/css/font-awesome.min.css" } } " rel="stylesheet">
2018-08-15 15:33:22 +08:00
<link href=" { { cdncss "/static/css/main.css" "version" } } " rel="stylesheet">
2017-04-21 18:20:35 +08:00
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
2017-05-13 13:47:26 +08:00
<script src=" { { cdnjs "/static/jquery/1.12.4/jquery.min.js" } } "></script>
2017-04-21 18:20:35 +08:00
</head>
<body class="manual-container">
<header class="navbar navbar-static-top smart-nav navbar-fixed-top manual-header" role="banner">
<div class="container">
<div class="navbar-header col-sm-12 col-md-6 col-lg-5">
2018-02-05 13:41:24 +08:00
<a href=" { { . BaseUrl } } " class="navbar-brand"> { { . SITE_NAME } } </a>
2017-04-21 18:20:35 +08:00
</div>
</div>
</header>
<div class="container manual-body">
<div class="row login">
<div class="login-body">
<form role="form" method="post">
2018-11-14 12:02:52 +08:00
{ { . xsrfdata } }
2017-04-21 18:20:35 +08:00
<h3 class="text-center">用户登录</h3>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-user"></i>
</div>
2018-09-11 16:08:07 +08:00
<input type="text" class="form-control" placeholder="邮箱 / 用户名" name="account" id="account" autocomplete="off">
2017-04-21 18:20:35 +08:00
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-lock"></i>
</div>
2017-04-24 18:25:17 +08:00
<input type="password" class="form-control" placeholder="密码" name="password" id="password" autocomplete="off">
2017-04-21 18:20:35 +08:00
</div>
</div>
2017-05-01 19:33:09 +08:00
{ { if . ENABLED_CAPTCHA } }
2017-04-21 18:20:35 +08:00
{ { if ne . ENABLED_CAPTCHA "false" } }
<div class="form-group">
2017-05-01 12:15:55 +08:00
<div class="input-group" style="float: left;width: 195px;">
2017-04-21 18:20:35 +08:00
<div class="input-group-addon">
<i class="fa fa-check-square"></i>
</div>
<input type="text" name="code" id="code" class="form-control" style="width: 150px" maxlength="5" placeholder="验证码" autocomplete="off">
</div>
2017-05-01 12:15:55 +08:00
<img id="captcha-img" style="width: 140px;height: 40px;display: inline-block;float: right" src=" { { urlfor "AccountController.Captcha" } } " onclick="this.src=' { { urlfor "AccountController.Captcha" } } ?key=login&t='+(new Date()).getTime();" title="点击换一张">
<div class="clearfix"></div>
2017-04-21 18:20:35 +08:00
</div>
{ { end } }
2017-05-01 19:33:09 +08:00
{ { end } }
2017-04-21 18:20:35 +08:00
<div class="checkbox">
<label>
2017-05-01 12:15:55 +08:00
<input type="checkbox" name="is_remember" value="yes"> 保持登录
2017-04-21 18:20:35 +08:00
</label>
<a href=" { { urlfor "AccountController.FindPassword" } } " style="display: inline-block;float: right">忘记密码?</a>
</div>
<div class="form-group">
<button type="button" id="btn-login" class="btn btn-success" style="width: 100%" data-loading-text="正在登录..." autocomplete="off">立即登录</button>
</div>
2021-03-25 15:31:24 +08:00
{ { if . ENABLE_QR_DINGTALK } }
2021-03-25 15:03:35 +08:00
<div class="form-group">
2021-03-25 16:30:12 +08:00
<a id="btn-dingtalk-qr" class="btn btn-default" style="width: 100%" data-loading-text="" autocomplete="off">钉钉扫码登录</a>
2021-03-25 15:03:35 +08:00
</div>
2021-03-25 15:31:24 +08:00
{ { end } }
2017-05-01 19:33:09 +08:00
{ { if . ENABLED_REGISTER } }
2017-04-21 18:20:35 +08:00
{ { if ne . ENABLED_REGISTER "false" } }
<div class="form-group">
还没有账号?<a href=" { { urlfor "AccountController.Register" } } " title="立即注册">立即注册</a>
</div>
{ { end } }
2017-05-01 19:33:09 +08:00
{ { end } }
2017-04-21 18:20:35 +08:00
</form>
2021-03-25 16:30:12 +08:00
<div class="form-group dingtalk-container" style="display: none;">
<div id="dingtalk-qr-container"></div>
<a class="btn btn-default btn-dingtalk" style="width: 100%" data-loading-text="" autocomplete="off">返回账号密码登录</a>
</div>
2017-04-21 18:20:35 +08:00
</div>
</div>
<div class="clearfix"></div>
</div>
{ { template "widgets/footer.tpl" . } }
<!-- Include all compiled plugins (below), or include individual files as needed -->
2017-05-13 13:47:26 +08:00
<script src=" { { cdnjs "/static/bootstrap/js/bootstrap.min.js" } } " type="text/javascript"></script>
<script src=" { { cdnjs "/static/layer/layer.js" } } " type="text/javascript"></script>
2021-03-18 15:02:19 +08:00
<script src=" { { cdnjs "/static/js/dingtalk-jsapi.js" } } " type="text/javascript"></script>
2021-03-25 16:30:12 +08:00
<script src=" { { cdnjs "/static/js/dingtalk-ddlogin.js" } } " type="text/javascript"></script>
2021-03-18 15:02:19 +08:00
<script type="text/javascript">
2021-03-25 16:54:53 +08:00
if (dd.env.platform !== "notInDingTalk") {
dd.ready(function() {
dd.runtime.permission.requestAuthCode( {
corpId: { { . corpID } } , // 企业id
onSuccess: function (info) {
var index = layer.load(1, {
shade: [0.1, '#fff'] // 0.1 透明度的白色背景
})
2021-03-19 10:33:59 +08:00
2021-03-25 16:54:53 +08:00
var formData = $("form").serializeArray()
formData.push( { "name" : "dingtalk_code" , "value" : info . code } )
2021-03-18 15:02:19 +08:00
2021-03-25 16:54:53 +08:00
$.ajax( {
url: " { { urlfor "AccountController.DingTalkLogin" } } ",
data: formData,
dataType: "json",
type: "POST",
complete: function() {
layer.close(index)
},
success: function (res) {
if (res.errcode !== 0) {
layer.msg(res.message)
} else {
window.location = " { { urlfor "HomeController.Index" } } "
2021-03-19 10:33:59 +08:00
}
2021-03-25 16:54:53 +08:00
},
error: function (res) {
layer.msg("发生异常")
}
})
}
2021-03-18 15:02:19 +08:00
});
2021-03-25 16:54:53 +08:00
});
}
2021-03-19 10:33:59 +08:00
2021-03-18 15:02:19 +08:00
</script>
2021-03-25 16:30:12 +08:00
<script type="text/javascript">
var url = 'https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid= { { . dingtalk_qr_key } } &response_type=code&scope=snsapi_login&state=1&redirect_uri= { { urlfor "AccountController.QRLogin" ":app" "dingtalk" } } '
var obj = DDLogin( {
id:"dingtalk-qr-container",
goto: encodeURIComponent(url),
style: "border:none;background-color:#FFFFFF;",
width : "338",
height: "300"
});
var handleMessage = function (event) {
var origin = event.origin;
if( origin == "https://login.dingtalk.com" ) { / / 判 断 是 否 来 自 ddLogin扫码事件 。
layer.load(1, { shade : [ 0.1 , '#fff' ] } )
var loginTmpCode = event.data;
//获取到loginTmpCode后就可以在这里构造跳转链接进行跳转了
console.log("loginTmpCode", loginTmpCode);
url = url + "&loginTmpCode=" + loginTmpCode
window.location = url
}
};
if (typeof window.addEventListener != 'undefined') {
window.addEventListener('message', handleMessage, false);
} else if (typeof window.attachEvent != 'undefined') {
window.attachEvent('onmessage', handleMessage);
}
</script>
2017-04-21 18:20:35 +08:00
<script type="text/javascript">
$(function () {
2018-01-18 19:54:05 +08:00
$("#account,#password,#code").on('focus', function () {
2018-01-09 18:15:40 +08:00
$(this).tooltip('destroy').parents('.form-group').removeClass('has-error');
2017-04-21 18:20:35 +08:00
});
$(document).keydown(function (e) {
var event = document.all ? window.event : e;
2018-01-09 18:15:40 +08:00
if (event.keyCode === 13) {
2017-04-21 18:20:35 +08:00
$("#btn-login").click();
}
});
2018-01-09 18:15:40 +08:00
2021-03-25 16:30:12 +08:00
$("#btn-dingtalk-qr").on('click', function() {
$('form').hide()
$(".dingtalk-container").show()
})
$(".btn-dingtalk").on('click', function() {
$('form').show()
$(".dingtalk-container").hide()
})
2018-01-09 18:15:40 +08:00
$("#btn-login").on('click', function () {
2018-01-18 19:54:05 +08:00
$(this).tooltip('destroy').parents('.form-group').removeClass('has-error');
2017-04-21 18:20:35 +08:00
var $btn = $(this).button('loading');
var account = $.trim($("#account").val());
2017-04-24 18:25:17 +08:00
var password = $.trim($("#password").val());
2017-04-21 18:20:35 +08:00
var code = $("#code").val();
2018-01-09 18:15:40 +08:00
if (account === "") {
$("#account").tooltip( { placement : "auto" , title : "账号不能为空" , trigger : 'manual' } )
2017-04-21 18:20:35 +08:00
.tooltip('show')
.parents('.form-group').addClass('has-error');
$btn.button('reset');
return false;
2018-01-09 18:15:40 +08:00
} else if (password === "") {
$("#password").tooltip( { title : '密码不能为空' , trigger : 'manual' } )
2017-04-21 18:20:35 +08:00
.tooltip('show')
.parents('.form-group').addClass('has-error');
$btn.button('reset');
return false;
2018-01-09 18:15:40 +08:00
} else if (code !== undefined && code === "") {
$("#code").tooltip( { title : '验证码不能为空' , trigger : 'manual' } )
2017-04-21 18:20:35 +08:00
.tooltip('show')
.parents('.form-group').addClass('has-error');
$btn.button('reset');
return false;
2018-01-09 18:15:40 +08:00
} else {
2017-04-21 18:20:35 +08:00
$.ajax( {
2018-01-26 17:17:38 +08:00
url: " { { urlfor "AccountController.Login" "url" . url } } ",
2018-01-09 18:15:40 +08:00
data: $("form").serializeArray(),
dataType: "json",
type: "POST",
success: function (res) {
if (res.errcode !== 0) {
2017-04-21 18:20:35 +08:00
$("#captcha-img").click();
$("#code").val('');
layer.msg(res.message);
$btn.button('reset');
2018-01-09 18:15:40 +08:00
} else {
2018-01-26 17:17:38 +08:00
turl = res.data;
2018-01-09 18:15:40 +08:00
if (turl === "") {
turl = "/";
}
window.location = turl;
2017-04-21 18:20:35 +08:00
}
},
2018-01-09 18:15:40 +08:00
error: function () {
2017-04-21 18:20:35 +08:00
$("#captcha-img").click();
$("#code").val('');
layer.msg('系统错误');
$btn.button('reset');
}
});
}
return false;
});
});
</script>
</body>
</html>