新增手机号短信验证码登录 user.loginByValidCode=true;调整
sysLogin、sysIndex、menuTree、forgetPwd、registerUser 的目录,方便覆写和理解;增加 自定义主题视图 的 readme.txt 帮助文件。
This commit is contained in:
@@ -131,6 +131,9 @@ user:
|
||||
|
||||
# 登录账号是否租户内唯一,否则全局唯一
|
||||
loginCodeCorpUnique: false
|
||||
|
||||
# 是否启用验证码登录(手机、邮箱)
|
||||
loginByValidCode: true
|
||||
|
||||
# 用户类型配置信息(employee员工,member会员,btype往来单位,persion个人,expert专家,...),JSON 格式说明如下:
|
||||
# {"用户类型":{"beanName":"Service或Dao的Bean名称","loginView":"登录页面视图","indexView":"主框架页面视图,支持 redirect: 前缀"}}
|
||||
|
||||
@@ -69,6 +69,10 @@
|
||||
|
||||
登录=Login
|
||||
欢迎回来=Welcome
|
||||
账号登录=Login
|
||||
手机登录=Mobile
|
||||
没有账号=No account
|
||||
点击注册=Register
|
||||
|
||||
请填写登录账号.=Please enter login account.
|
||||
登录账号=Login account
|
||||
@@ -77,6 +81,11 @@
|
||||
请填写登录密码.=Please enter login password.
|
||||
登录密码=Login password
|
||||
|
||||
登录租户=Login tenant
|
||||
请填写手机验证码.=Please enter mobile valid code
|
||||
手机验证码=Mobile valid code
|
||||
获取手机验证码=Get valid code
|
||||
|
||||
公共场所慎用,下次不需要再填写帐号=Use caution in public places.
|
||||
记住账号=Remember account
|
||||
公共场所慎用,下次不需要再填写帐号和密码=Use caution in public places.
|
||||
|
||||
@@ -70,6 +70,10 @@
|
||||
|
||||
登录=ログイン
|
||||
欢迎回来=おかえり
|
||||
账号登录=ログイン
|
||||
手机登录=電話登録
|
||||
没有账号=アカウントなし
|
||||
点击注册=きにゅう
|
||||
|
||||
请填写登录账号.=ログインIDを入力してください.
|
||||
登录账号=ログインアカウント
|
||||
@@ -78,6 +82,11 @@
|
||||
请填写登录密码.=パスワードを入力してください.
|
||||
登录密码=パスワード
|
||||
|
||||
登录租户=テナント登録
|
||||
请填写手机验证码.=携帯電話の検証コード
|
||||
手机验证码=電話の検証コード
|
||||
获取手机验证码=コードを取得
|
||||
|
||||
公共场所慎用,下次不需要再填写帐号=次回からログインIDの入力が不要にします.
|
||||
记住账号=ログインID記憶
|
||||
公共场所慎用,下次不需要再填写帐号和密码=次回からパスワードの入力が不要にします.
|
||||
@@ -90,6 +99,9 @@
|
||||
注册账号=アカウント作成
|
||||
忘记密码=パスワードを忘れた
|
||||
|
||||
注册账号=アカウントを登録する
|
||||
忘记密码=パスワードを忘れる
|
||||
|
||||
# =========== 主框架页 ===========
|
||||
|
||||
仪表盘=計器盤
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
/*!
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
*
|
||||
* @author ThinkGem
|
||||
* @version 2019-1-6
|
||||
*/
|
||||
$(function(){
|
||||
|
||||
$('#fp_validType').change(function(){
|
||||
var val = $(this).val(), action = '';
|
||||
$('.fp-element').addClass('hide').removeClass('block');
|
||||
$('.fp-'+val).addClass('block').removeClass('hide');
|
||||
setTimeout(function(){
|
||||
$('#fp_loginCode').focus();
|
||||
}, 100);
|
||||
if (val == 'mobile' || val == 'email'){
|
||||
var txt = (val == 'mobile' ? '手机' : '邮箱')
|
||||
$('#fpValidCode').attr('placeholder', txt+'验证码')
|
||||
.attr('data-msg-required', '请填写'+txt+'验证码.');
|
||||
$('#sendFpValidCode').val('获取'+txt+'验证码');
|
||||
action = ctxPath + '/account/savePwdByValidCode';
|
||||
}else if(val == 'question'){
|
||||
action = ctxPath + '/account/savePwdByPwdQuestion';
|
||||
}
|
||||
$('#forgetForm').attr('action', action);
|
||||
}).change();
|
||||
|
||||
var waitTime = 60;
|
||||
function sendTime(o) {
|
||||
if (waitTime == 0) {
|
||||
o.removeAttribute("disabled");
|
||||
o.value = "获取验证码";
|
||||
waitTime = 60;
|
||||
} else {
|
||||
o.setAttribute("disabled", true);
|
||||
o.value = "重新发送(" + waitTime + ")";
|
||||
waitTime--;
|
||||
setTimeout(function() {
|
||||
sendTime(o)
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
|
||||
$('#sendFpValidCode').click(function() {
|
||||
var $this = this;
|
||||
js.ajaxSubmit(ctxPath + '/account/getFpValidCode', {
|
||||
validType: $('#fp_validType').val(),
|
||||
loginCode : $('#fp_loginCode').val(),
|
||||
validCode : $('#fp_validCode').val()
|
||||
}, function(data){
|
||||
js.showMessage(data.message);
|
||||
if (data.result == 'true'){
|
||||
sendTime($this);
|
||||
$('#fpValidCode').focus();
|
||||
}else{
|
||||
$('#fp_validCodeImg').click();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('#fp_getQuestion').click(function() {
|
||||
js.ajaxSubmit(ctxPath + '/account/getPwdQuestion', {
|
||||
loginCode : $('#fp_loginCode').val(),
|
||||
validCode : $('#fp_validCode').val()
|
||||
}, function(data){
|
||||
js.showMessage(data.message);
|
||||
if (data.result == 'true'){
|
||||
$('#fp_q1').text(data.pwdQuestion);
|
||||
$('#fp_q2').text(data.pwdQuestion2);
|
||||
$('#fp_q3').text(data.pwdQuestion3);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('#forgetForm').validate({
|
||||
ignore: ":hidden",
|
||||
submitHandler: function(form) {
|
||||
js.ajaxSubmitForm($(form), function(data){
|
||||
if (data.result == "true"){
|
||||
alert(data.message);
|
||||
location = ctx + '/login';
|
||||
}else{
|
||||
js.showMessage(data.message);
|
||||
$('#forgetForm').reset();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('#btnReset').click(function(){
|
||||
location = ctx + '/login';
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
/*!
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
*
|
||||
* @author ThinkGem
|
||||
* @version 2019-1-6
|
||||
*/
|
||||
$(function(){
|
||||
|
||||
$('#reg_validType').change(function(){
|
||||
var val = $(this).val(), action = '';
|
||||
$('.reg-element').addClass('hide').removeClass('block');
|
||||
$('.reg-'+val).addClass('block').removeClass('hide');
|
||||
setTimeout(function(){
|
||||
$('#reg_loginCode').focus();
|
||||
}, 100);
|
||||
if (val == 'mobile' || val == 'email'){
|
||||
var txt = (val == 'mobile' ? '手机' : '邮箱')
|
||||
$('#regValidCode').attr('placeholder', txt+'验证码')
|
||||
.attr('data-msg-required', '请填写'+txt+'验证码.');
|
||||
$('#sendRegValidCode').val('获取'+txt+'验证码');
|
||||
action = ctxPath + '/account/saveRegByValidCode';
|
||||
}else if(val == 'question'){
|
||||
action = ctxPath + '/account/savePwdByPwdQuestion';
|
||||
}
|
||||
$('#registerForm').attr('action', action);
|
||||
}).change();
|
||||
|
||||
var waitTime = 60;
|
||||
function sendTime(o) {
|
||||
if (waitTime == 0) {
|
||||
o.removeAttribute("disabled");
|
||||
o.value = "获取验证码";
|
||||
waitTime = 60;
|
||||
} else {
|
||||
o.setAttribute("disabled", true);
|
||||
o.value = "重新发送(" + waitTime + ")";
|
||||
waitTime--;
|
||||
setTimeout(function() {
|
||||
sendTime(o)
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
|
||||
$('#sendRegValidCode').click(function() {
|
||||
var $this = this;
|
||||
js.ajaxSubmit(ctxPath + '/account/getRegValidCode', {
|
||||
validType: $('#reg_validType').val(),
|
||||
corpCode_ : $('#reg_corpCode').val(),
|
||||
corpName_ : $('#reg_corpName').val(),
|
||||
loginCode : $('#reg_loginCode').val(),
|
||||
userName : $('#reg_userName').val(),
|
||||
email : $('#reg_email').val(),
|
||||
mobile : $('#reg_mobile').val(),
|
||||
userType: $('#reg_userType').val(),
|
||||
validCode : $('#reg_validCode').val()
|
||||
}, function(data){
|
||||
js.showMessage(data.message);
|
||||
if (data.result == 'true'){
|
||||
sendTime($this);
|
||||
$('#regValidCode').focus();
|
||||
}else{
|
||||
$('#reg_validCodeImg').click();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('#registerForm').validate({
|
||||
ignore: ":hidden",
|
||||
submitHandler: function(form) {
|
||||
js.ajaxSubmitForm($(form), function(data){
|
||||
if (data.result == "true"){
|
||||
alert(data.message);
|
||||
location = ctx + '/login';
|
||||
}else{
|
||||
js.showMessage(data.message);
|
||||
$('#registerForm').reset();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('#btnReset').click(function(){
|
||||
location = ctx + '/login';
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -16,28 +16,6 @@
|
||||
<option value="email">使用电子邮箱找回您的密码</option>
|
||||
<option value="question">使用保密问题找回您的密码</option>
|
||||
</select>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
$('#fp_validType').change(function(){
|
||||
var val = $(this).val(), action = '';
|
||||
$('.fp-element').addClass('hide').removeClass('block');
|
||||
$('.fp-'+val).addClass('block').removeClass('hide');
|
||||
setTimeout(function(){
|
||||
$('#fp_loginCode').focus();
|
||||
}, 100);
|
||||
if (val == 'mobile' || val == 'email'){
|
||||
var txt = (val == 'mobile' ? '手机' : '邮箱')
|
||||
$('#fpValidCode').attr('placeholder', txt+'验证码')
|
||||
.attr('data-msg-required', '请填写'+txt+'验证码.');
|
||||
$('#sendFpValidCode').val('获取'+txt+'验证码');
|
||||
action = '${ctxPath}/account/savePwdByValidCode';
|
||||
}else if(val == 'question'){
|
||||
action = '${ctxPath}/account/savePwdByPwdQuestion';
|
||||
}
|
||||
$('#forgetForm').attr('action', action);
|
||||
}).change();
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<span class="fa fa-user form-control-feedback"></span>
|
||||
@@ -54,54 +32,9 @@
|
||||
<input type="button" id="sendFpValidCode" value="获取手机验证码" class="btn btn-flat"/>
|
||||
</span>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var waitTime = 60;
|
||||
function sendTime(o) {
|
||||
if (waitTime == 0) {
|
||||
o.removeAttribute("disabled");
|
||||
o.value = "获取验证码";
|
||||
waitTime = 60;
|
||||
} else {
|
||||
o.setAttribute("disabled", true);
|
||||
o.value = "重新发送(" + waitTime + ")";
|
||||
waitTime--;
|
||||
setTimeout(function() {
|
||||
sendTime(o)
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
$('#sendFpValidCode').click(function() {
|
||||
var $this = this;
|
||||
js.ajaxSubmit('${ctxPath}/account/getFpValidCode', {
|
||||
validType: $('#fp_validType').val(),
|
||||
loginCode : $('#fp_loginCode').val(),
|
||||
validCode : $('#fp_validCode').val()
|
||||
}, function(data){
|
||||
js.showMessage(data.message);
|
||||
if (data.result == 'true'){
|
||||
sendTime($this);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
<div class="form-group has-feedback fp-element fp-question clearfix">
|
||||
<input type="button" id="fp_getQuestion" value="获取保密问题" class="btn btn-default btn-block btn-flat"/>
|
||||
<script type="text/javascript">
|
||||
$('#fp_getQuestion').click(function() {
|
||||
js.ajaxSubmit('${ctxPath}/account/getPwdQuestion', {
|
||||
loginCode : $('#fp_loginCode').val(),
|
||||
validCode : $('#fp_validCode').val()
|
||||
}, function(data){
|
||||
js.showMessage(data.message);
|
||||
if (data.result == 'true'){
|
||||
$('#fp_q1').text(data.pwdQuestion);
|
||||
$('#fp_q2').text(data.pwdQuestion2);
|
||||
$('#fp_q3').text(data.pwdQuestion3);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
<div class="form-group has-feedback fp-element fp-question">
|
||||
问题1:<span id="fp_q1"></span>
|
||||
@@ -167,22 +100,4 @@
|
||||
<script>var secretKey = '${@Global.getConfig("shiro.loginSubmit.secretKey")}';</script>
|
||||
<script src="${ctxStatic}/jquery-toastr/2.1/toastr.min.js?${_version}"></script>
|
||||
<script src="${ctxStatic}/common/des.js?${_version}"></script>
|
||||
<script>
|
||||
$('#forgetForm').validate({
|
||||
ignore: ":hidden",
|
||||
submitHandler: function(form) {
|
||||
js.ajaxSubmitForm($(form), function(data){
|
||||
if (data.result == "true"){
|
||||
alert(data.message);
|
||||
location = "${ctx}/login";
|
||||
}else{
|
||||
js.showMessage(data.message);
|
||||
$('#forgetForm').reset();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
$('#btnReset').click(function(){
|
||||
location = '${ctx}/login';
|
||||
});
|
||||
</script>
|
||||
<script src="${ctxStatic}/modules/sys/forgetPwd.js?${_version}"></script>
|
||||
@@ -15,28 +15,6 @@
|
||||
<option value="email">使用电子邮箱注册账号</option>
|
||||
<option value="mobile">使用手机号码注册账号</option>
|
||||
</select>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
$('#reg_validType').change(function(){
|
||||
var val = $(this).val(), action = '';
|
||||
$('.reg-element').addClass('hide').removeClass('block');
|
||||
$('.reg-'+val).addClass('block').removeClass('hide');
|
||||
setTimeout(function(){
|
||||
$('#reg_loginCode').focus();
|
||||
}, 100);
|
||||
if (val == 'mobile' || val == 'email'){
|
||||
var txt = (val == 'mobile' ? '手机' : '邮箱')
|
||||
$('#regValidCode').attr('placeholder', txt+'验证码')
|
||||
.attr('data-msg-required', '请填写'+txt+'验证码.');
|
||||
$('#sendRegValidCode').val('获取'+txt+'验证码');
|
||||
action = '${ctxPath}/account/saveRegByValidCode';
|
||||
}else if(val == 'question'){
|
||||
action = '${ctxPath}/account/savePwdByPwdQuestion';
|
||||
}
|
||||
$('#registerForm').attr('action', action);
|
||||
}).change();
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
<% if(@Global.isUseCorpModel()){ %>
|
||||
<div class="form-group has-feedback">
|
||||
@@ -75,42 +53,6 @@
|
||||
<input type="button" id="sendRegValidCode" value="获取手机验证码" class="btn btn-flat"/>
|
||||
</span>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var waitTime = 60;
|
||||
function sendTime(o) {
|
||||
if (waitTime == 0) {
|
||||
o.removeAttribute("disabled");
|
||||
o.value = "获取验证码";
|
||||
waitTime = 60;
|
||||
} else {
|
||||
o.setAttribute("disabled", true);
|
||||
o.value = "重新发送(" + waitTime + ")";
|
||||
waitTime--;
|
||||
setTimeout(function() {
|
||||
sendTime(o)
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
$('#sendRegValidCode').click(function() {
|
||||
var $this = this;
|
||||
js.ajaxSubmit('${ctxPath}/account/getRegValidCode', {
|
||||
validType: $('#reg_validType').val(),
|
||||
corpCode_ : $('#reg_corpCode').val(),
|
||||
corpName_ : $('#reg_corpName').val(),
|
||||
loginCode : $('#reg_loginCode').val(),
|
||||
userName : $('#reg_userName').val(),
|
||||
email : $('#reg_email').val(),
|
||||
mobile : $('#reg_mobile').val(),
|
||||
userType: $('#reg_userType').val(),
|
||||
validCode : $('#reg_validCode').val()
|
||||
}, function(data){
|
||||
js.showMessage(data.message);
|
||||
if (data.result == 'true'){
|
||||
sendTime($this);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<span class="fa fa-lock form-control-feedback"></span>
|
||||
@@ -152,22 +94,4 @@
|
||||
</div>
|
||||
<% } %>
|
||||
<script src="${ctxStatic}/jquery-toastr/2.1/toastr.min.js?${_version}"></script>
|
||||
<script>
|
||||
$('#registerForm').validate({
|
||||
ignore: ":hidden",
|
||||
submitHandler: function(form) {
|
||||
js.ajaxSubmitForm($(form), function(data){
|
||||
if (data.result == "true"){
|
||||
alert(data.message);
|
||||
location = "${ctx}/login";
|
||||
}else{
|
||||
js.showMessage(data.message);
|
||||
$('#registerForm').reset();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
$('#btnReset').click(function(){
|
||||
location = '${ctx}/login';
|
||||
});
|
||||
</script>
|
||||
<script src="${ctxStatic}/modules/sys/registerUser.js?${_version}"></script>
|
||||
@@ -9,10 +9,10 @@ var bodyClass = 'fixed noscroll2 sidebar-mini ' + sidebarCollapse;
|
||||
<link rel="stylesheet" href="${ctxStatic}/jquery-toastr/2.1/toastr.min.css?${_version}">
|
||||
<link rel="stylesheet" href="${ctxStatic}/modules/sys/sysIndex.css?${_version}">
|
||||
<header class="main-header">
|
||||
<% include('sysIndex/topMenu.html'){} %>
|
||||
<% include('/include/sysIndex/topMenu.html'){} %>
|
||||
</header>
|
||||
<aside class="main-sidebar">
|
||||
<% include('sysIndex/leftMenu.html'){} %>
|
||||
<% include('/include/sysIndex/leftMenu.html'){} %>
|
||||
</aside>
|
||||
<div class="content-wrapper">
|
||||
<div id="tabpanel"></div>
|
||||
@@ -9,27 +9,23 @@
|
||||
<small>${@Global.getConfig('productVersion')}</small></a>
|
||||
</div>
|
||||
<div class="login-box-body">
|
||||
<#form:form id="loginForm" model="${user!}" action="${ctx}/login" method="post">
|
||||
<h4 class="login-box-msg">${isNotBlank(message!)?message:text('欢迎回来')+'!'}</h4>
|
||||
<!-- <ul class="nav nav-tabs mb20">
|
||||
<li class="active"><a href="#tab-1" data-toggle="tab">账号登录</a></li>
|
||||
<li><a href="#tab-2" data-toggle="tab">邮箱登录</a></li>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="tab-1"></div>
|
||||
<div class="tab-pane" id="tab-2"></div>
|
||||
</div> -->
|
||||
<ul id="loginTab" class="nav nav-tabs ${@Global.getConfigToBoolean('user.loginByValidCode','true')?'':'hide'}">
|
||||
<li class="active"><a href="#tab-1" data-toggle="tab" action="${ctx}/login">${text('账号登录')}</a></li>
|
||||
<li><a href="#tab-2" data-toggle="tab" action="${ctxPath}/account/loginByValidCode">${text('手机登录')}</a></li>
|
||||
</ul>
|
||||
<#form:form id="loginForm" model="${user!}" action="${ctx}/login" method="post" class="tab-content">
|
||||
<% if(isNotBlank(message!)){ %>
|
||||
<h5 class="login-box-msg text-red">${message}</h5>
|
||||
<% } %>
|
||||
<div class="form-group has-feedback">
|
||||
<span class="icon-user form-control-feedback" title="${text('登录账号')}"></span>
|
||||
<#form:input type="text" name="username" class="form-control required"
|
||||
data-msg-required="${text('请填写登录账号.')}" placeholder="${text('登录账号')}"
|
||||
value="${cookie('rememberUserCode')}"/>
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<span class="icon-lock form-control-feedback"
|
||||
title="${text('登录密码,鼠标按下显示密码')}"
|
||||
onmousedown="$('#password').attr('type','text')"
|
||||
onmouseup="$('#password').attr('type','password')"
|
||||
<div class="form-group has-feedback tab-pane tab-1 active">
|
||||
<span class="icon-lock form-control-feedback" title="${text('登录密码,鼠标按下显示密码')}"
|
||||
onmousedown="$('#password').attr('type','text')" onmouseup="$('#password').attr('type','password')"
|
||||
onmouseenter="$(this).removeClass('icon-lock').addClass('icon-eye')"
|
||||
onmouseout="$(this).removeClass('icon-eye').addClass('icon-lock')"></span>
|
||||
<#form:input type="password" name="password" class="form-control required"
|
||||
@@ -44,6 +40,15 @@
|
||||
<div class="form-group has-feedback" id="isValidCodeLogin" style="display:${isValidCodeLogin?'blank':'none'}">
|
||||
<#form:validcode name="validCode" isRequired="true" isRemote="true" isLazy="${!isValidCodeLogin}"/>
|
||||
</div>
|
||||
<div class="form-group has-feedback tab-pane tab-2">
|
||||
<div class="input-group">
|
||||
<input type="text" id="loginValidCode" name="loginValidCode" class="form-control required"
|
||||
data-msg-required="${text('请填写手机验证码.')}" placeholder="${text('手机验证码')}" />
|
||||
<span class="input-group-btn">
|
||||
<input type="button" id="sendLoginValidCode" value="${text('获取手机验证码')}" class="btn btn-flat"/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="mt5 icheck">
|
||||
<label title="${text('公共场所慎用,下次不需要再填写帐号')}"><input type="checkbox"
|
||||
@@ -0,0 +1,21 @@
|
||||
|
||||
======= 说明:
|
||||
|
||||
当前目录:/src/main/resources/views/themes/default/modules/
|
||||
|
||||
是【default】主题的模块视图目录,该目录下的文件,会自动覆盖:
|
||||
|
||||
/src/main/resources/views/modules/ 下的默认视图文件。
|
||||
|
||||
======= 举例:
|
||||
|
||||
拷贝文件:/src/main/resources/views/modules/sys/sysLogin.html
|
||||
|
||||
复制到:/src/main/resources/views/themes/default/modules/sys/sysLogin.html
|
||||
|
||||
这样写,默认的视图文件就会被替换为你自定义的视图文件,从而实现简单的自定义视图。
|
||||
|
||||
======= 更多资料:
|
||||
|
||||
http://jeesite.com/docs/custom-views/
|
||||
|
||||
Reference in New Issue
Block a user