2017-04-21 18:20:35 +08:00
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
2022-07-20 15:04:01 +08:00
<link rel="shortcut icon" href=" { { cdnimg "/static/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" />
2021-03-30 16:18:02 +08:00
<title> { { i18n . Lang "common.login" } } - 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">
2022-05-07 18:06:46 +08:00
{ { if . CanLoginWorkWeixin } }
<style type="text/css">
#wxwork-login-line > a {
display: block;
text-align: center;
border: 1px solid #ccc;
border-radius: 0.3em;
padding-top: 0.8em;
padding-bottom: 0.75em;
}
#wxwork-login-line > a:hover {
color: #fff;
background-color: #5cb85c;
border-color: #4cae4c;
}
</style>
{ { end } }
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 } }
2021-03-30 16:18:02 +08:00
<h3 class="text-center"> { { i18n . Lang "common.login" } } </h3>
2017-04-21 18:20:35 +08:00
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-user"></i>
</div>
2021-03-30 16:18:02 +08:00
<input type="text" class="form-control" placeholder=" { { i18n . Lang "common.email" } } / { { i18n . Lang "common.username" } } " 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>
2021-03-30 16:18:02 +08:00
<input type="password" class="form-control" placeholder=" { { i18n . Lang "common.password" } } " 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>
2021-03-30 16:18:02 +08:00
<input type="text" name="code" id="code" class="form-control" style="width: 150px" maxlength="5" placeholder=" { { i18n . Lang "common.captcha" } } " autocomplete="off">
2017-04-21 18:20:35 +08:00
</div>
2021-03-30 16:18:02 +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= { { i18n . Lang "message.click_to_change" } } >
2017-05-01 12:15:55 +08:00
<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>
2021-03-30 16:18:02 +08:00
<input type="checkbox" name="is_remember" value="yes"> { { i18n . Lang "common.keep_login" } }
2017-04-21 18:20:35 +08:00
</label>
2021-03-30 16:18:02 +08:00
<a href=" { { urlfor "AccountController.FindPassword" } } " style="display: inline-block;float: right"> { { i18n . Lang "common.forgot_password" } } </a>
2017-04-21 18:20:35 +08:00
</div>
<div class="form-group">
2021-03-30 16:18:02 +08:00
<button type="button" id="btn-login" class="btn btn-success" style="width: 100%" data-loading-text=" { { i18n . Lang "common.logging_in" } } " autocomplete="off"> { { i18n . Lang "common.login" } } </button>
2017-04-21 18:20:35 +08:00
</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-30 16:18:02 +08:00
<a id="btn-dingtalk-qr" class="btn btn-default" style="width: 100%" data-loading-text="" autocomplete="off"> { { i18n . Lang "common.dingtalk_login" } } </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">
2021-03-30 18:37:24 +08:00
{ { i18n . Lang "message.no_account_yet" } } <a href=" { { urlfor "AccountController.Register" } } " title= { { i18n . Lang "common.register" } } > { { i18n . Lang "common.register" } } </a>
2017-04-21 18:20:35 +08:00
</div>
{ { end } }
2017-05-01 19:33:09 +08:00
{ { end } }
2022-05-07 18:06:46 +08:00
{ { if . CanLoginWorkWeixin } }
<div class="form-group">
<div id="wxwork-login-line">
<a href=" { { . workweixin_login_url } } " title="手机企业微信-扫码登录">手机企业微信-扫码登录</a>
</div>
</div>
{ { 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>
2021-03-30 16:18:02 +08:00
<a class="btn btn-default btn-dingtalk" style="width: 100%" data-loading-text="" autocomplete="off"> { { i18n . Lang "message.return_account_login" } } </a>
2021-03-25 16:30:12 +08:00
</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>
2022-05-07 18:06:46 +08:00
{ { if . ENABLE_QR_DINGTALK } }
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
2022-05-07 18:06:46 +08:00
$(document).ready(function () {
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"
});
$(window).on('message', 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
}
});
$("#btn-dingtalk-qr").on('click', function() {
$('form').hide()
$(".dingtalk-container").show()
})
2021-03-25 16:30:12 +08:00
2022-05-07 18:06:46 +08:00
$(".btn-dingtalk").on('click', function() {
$('form').show()
$(".dingtalk-container").hide()
})
2021-03-25 16:30:12 +08:00
});
</script>
2022-05-07 18:06:46 +08:00
{ { end } }
2021-03-25 16:30:12 +08:00
2017-04-21 18:20:35 +08:00
<script type="text/javascript">
2022-05-07 18:06:46 +08:00
$(document).ready(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
$("#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 === "") {
2021-03-30 16:18:02 +08:00
$("#account").tooltip( { placement : "auto" , title : "{{i18n .Lang " message . account_empty "}}" , 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 === "") {
2021-03-30 16:18:02 +08:00
$("#password").tooltip( { title : '{{i18n .Lang "message.password_empty"}}' , 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 === "") {
2021-03-30 16:18:02 +08:00
$("#code").tooltip( { title : '{{i18n .Lang "message.captcha_empty"}}' , 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('');
2021-03-30 16:18:02 +08:00
layer.msg(' { { i18n . Lang "message.system_error" } } ');
2017-04-21 18:20:35 +08:00
$btn.button('reset');
}
});
}
return false;
});
});
</script>
</body>
</html>