若依开源1.1.3发布
This commit is contained in:
@ -1,8 +1,9 @@
|
||||
# 项目名称、版本、版权年份
|
||||
ruoyi:
|
||||
name: RuoYi
|
||||
version: 1.1.2
|
||||
version: 1.1.3
|
||||
copyrightYear: 2018
|
||||
profile: D:/profile/
|
||||
|
||||
#开发环境配置
|
||||
server:
|
||||
@ -64,6 +65,19 @@ shiro:
|
||||
unauthorizedUrl: /unauth
|
||||
# 首页地址
|
||||
indexUrl: /index
|
||||
# 验证码开关
|
||||
captchaEbabled: true
|
||||
# 验证码类型 math 数组计算 char 字符
|
||||
captchaType: math
|
||||
cookie:
|
||||
# 设置Cookie的域名 默认空,即当前访问的域名
|
||||
domain:
|
||||
# 设置cookie的有效访问路径
|
||||
path: /
|
||||
# 设置HttpOnly属性
|
||||
httpOnly: true
|
||||
# 设置Cookie的过期时间,天为单位
|
||||
maxAge: 30
|
||||
session:
|
||||
# Session超时时间(默认30分钟)
|
||||
expireTime: 30
|
||||
|
@ -1,5 +1,6 @@
|
||||
#错误消息
|
||||
not.null=* 必须填写
|
||||
user.jcaptcha.error=验证码错误
|
||||
user.not.exists=用户不存在/密码错误
|
||||
user.password.not.match=用户不存在/密码错误
|
||||
user.password.retry.limit.count=密码输入错误{0}次,{1}
|
||||
@ -13,8 +14,6 @@ length.not.valid=长度必须在{min}到{max}个字符之间
|
||||
user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
|
||||
user.password.not.valid=* 5-50个字符
|
||||
|
||||
user.jcaptcha.error=验证码错误
|
||||
|
||||
user.email.not.valid=邮箱格式错误
|
||||
user.mobile.phone.number.not.valid=手机号格式错误
|
||||
user.login.success=登录成功
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.monitor.job.dao.IJobLogDao">
|
||||
<mapper namespace="com.ruoyi.project.monitor.job.mapper.JobLogMapper">
|
||||
|
||||
<resultMap type="JobLog" id="JobLogResult">
|
||||
<id property="jobLogId" column="job_log_id" />
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.monitor.job.dao.IJobDao">
|
||||
<mapper namespace="com.ruoyi.project.monitor.job.mapper.JobMapper">
|
||||
|
||||
<resultMap type="Job" id="JobResult">
|
||||
<id property="jobId" column="job_id" />
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.monitor.logininfor.dao.ILogininforDao">
|
||||
<mapper namespace="com.ruoyi.project.monitor.logininfor.mapper.LogininforMapper">
|
||||
|
||||
<resultMap type="Logininfor" id="LogininforResult">
|
||||
<id property="infoId" column="info_id" />
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.monitor.online.dao.IUserOnlineDao">
|
||||
<mapper namespace="com.ruoyi.project.monitor.online.mapper.UserOnlineMapper">
|
||||
|
||||
<resultMap type="UserOnline" id="UserOnlineResult">
|
||||
<id property="sessionId" column="sessionId" />
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.monitor.operlog.dao.IOperLogDao">
|
||||
<mapper namespace="com.ruoyi.project.monitor.operlog.mapper.OperLogMapper">
|
||||
|
||||
<resultMap type="OperLog" id="OperLogResult">
|
||||
<id property="operId" column="oper_id" />
|
||||
|
@ -11,16 +11,4 @@ PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
|
||||
<setting name="logImpl" value="SLF4J" /> <!-- 指定 MyBatis 所用日志的具体实现 -->
|
||||
</settings>
|
||||
|
||||
<typeAliases>
|
||||
<!-- 分页 -->
|
||||
<typeAlias type="com.ruoyi.framework.web.page.PageUtilEntity" alias="PageUtilEntity"/>
|
||||
</typeAliases>
|
||||
|
||||
<plugins>
|
||||
<plugin interceptor="com.ruoyi.framework.mybatis.ExecutorPageMethodInterceptor">
|
||||
<property name="dialect" value="mysql" />
|
||||
<property name="pageSqlId" value=".*pageInfoQuery.*" />
|
||||
</plugin>
|
||||
</plugins>
|
||||
|
||||
</configuration>
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.system.dept.dao.IDeptDao">
|
||||
<mapper namespace="com.ruoyi.project.system.dept.mapper.DeptMapper">
|
||||
|
||||
<resultMap type="Dept" id="DeptResult">
|
||||
<id property="deptId" column="dept_id" />
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.system.dict.dao.IDictDataDao">
|
||||
<mapper namespace="com.ruoyi.project.system.dict.mapper.DictDataMapper">
|
||||
|
||||
<resultMap type="DictData" id="DictDataResult">
|
||||
<id property="dictCode" column="dict_code" />
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.system.dict.dao.IDictTypeDao">
|
||||
<mapper namespace="com.ruoyi.project.system.dict.mapper.DictTypeMapper">
|
||||
|
||||
<resultMap type="DictType" id="DictTypeResult">
|
||||
<id property="dictId" column="dict_id" />
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.system.menu.dao.IMenuDao">
|
||||
<mapper namespace="com.ruoyi.project.system.menu.mapper.MenuMapper">
|
||||
|
||||
<resultMap type="Menu" id="MenuResult">
|
||||
<id property="menuId" column="menu_id" />
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.system.post.dao.IPostDao">
|
||||
<mapper namespace="com.ruoyi.project.system.post.mapper.PostMapper">
|
||||
|
||||
<resultMap type="Post" id="PostResult">
|
||||
<id property="postId" column="post_id" />
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.system.role.dao.IRoleDao">
|
||||
<mapper namespace="com.ruoyi.project.system.role.mapper.RoleMapper">
|
||||
|
||||
<resultMap type="Role" id="RoleResult">
|
||||
<id property="roleId" column="role_id" />
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.system.role.dao.IRoleMenuDao">
|
||||
<mapper namespace="com.ruoyi.project.system.role.mapper.RoleMenuMapper">
|
||||
|
||||
<resultMap type="RoleMenu" id="RoleMenuResult">
|
||||
<result property="roleId" column="role_id" />
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.system.user.dao.IUserDao">
|
||||
<mapper namespace="com.ruoyi.project.system.user.mapper.UserMapper">
|
||||
|
||||
<resultMap type="User" id="UserResult">
|
||||
<id property="userId" column="user_id" />
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.system.user.dao.IUserPostDao">
|
||||
<mapper namespace="com.ruoyi.project.system.user.mapper.UserPostMapper">
|
||||
|
||||
<resultMap type="UserPost" id="UserPostResult">
|
||||
<result property="userId" column="user_id" />
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.system.user.dao.IUserRoleDao">
|
||||
<mapper namespace="com.ruoyi.project.system.user.mapper.UserRoleMapper">
|
||||
|
||||
<resultMap type="UserRole" id="UserRoleResult">
|
||||
<result property="userId" column="user_id" />
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.project.tool.gen.dao.IGenDao">
|
||||
<mapper namespace="com.ruoyi.project.tool.gen.mapper.GenMapper">
|
||||
|
||||
<resultMap type="TableInfo" id="TableInfoResult">
|
||||
<id property="tableName" column="table_name" />
|
||||
|
128
src/main/resources/static/ajax/libs/cropbox/cropbox.css
Normal file
128
src/main/resources/static/ajax/libs/cropbox/cropbox.css
Normal file
@ -0,0 +1,128 @@
|
||||
@charset "utf-8";
|
||||
.container {
|
||||
margin: 10px auto 0 auto;
|
||||
position: relative;
|
||||
font-family: 微软雅黑;
|
||||
font-size: 12px;
|
||||
}
|
||||
.container p {
|
||||
line-height: 12px;
|
||||
line-height: 0px;
|
||||
height: 0px;
|
||||
margin: 10px;
|
||||
color: #bbb
|
||||
}
|
||||
.action {
|
||||
width: 400px;
|
||||
height: 30px;
|
||||
margin: 10px 0;
|
||||
}
|
||||
.cropped {
|
||||
position: absolute;
|
||||
left: 500px;
|
||||
top: 0;
|
||||
width: 200px;
|
||||
border: 1px #ddd solid;
|
||||
height: 440px;
|
||||
padding: 4px;
|
||||
box-shadow: 0px 0px 12px #ddd;
|
||||
text-align: center;
|
||||
}
|
||||
.imageBox {
|
||||
position: relative;
|
||||
height: 400px;
|
||||
width: 400px;
|
||||
border: 1px solid #aaa;
|
||||
background: #fff;
|
||||
overflow: hidden;
|
||||
background-repeat: no-repeat;
|
||||
cursor: move;
|
||||
box-shadow: 4px 4px 12px #B0B0B0;
|
||||
}
|
||||
.imageBox .thumbBox {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
margin-top: -100px;
|
||||
margin-left: -100px;
|
||||
box-sizing: border-box;
|
||||
border: 1px solid rgb(102, 102, 102);
|
||||
box-shadow: 0 0 0 1000px rgba(0, 0, 0, 0.5);
|
||||
background: none repeat scroll 0% 0% transparent;
|
||||
}
|
||||
.imageBox .spinner {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
text-align: center;
|
||||
line-height: 400px;
|
||||
background: rgba(0,0,0,0.7);
|
||||
}
|
||||
.Btnsty_peyton{ float: right;
|
||||
width: 46px;
|
||||
display: inline-block;
|
||||
margin-bottom: 10px;
|
||||
height: 37px;
|
||||
line-height: 37px;
|
||||
font-size: 14px;
|
||||
color: #FFFFFF;
|
||||
margin:0px 2px;
|
||||
background-color: #f38e81;
|
||||
border-radius: 3px;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
box-shadow: 0px 0px 5px #B0B0B0;
|
||||
border: 0px #fff solid;}
|
||||
/*选择文件上传*/
|
||||
.new-contentarea {
|
||||
width: 165px;
|
||||
overflow:hidden;
|
||||
margin: 0 auto;
|
||||
position:relative;float:left;
|
||||
}
|
||||
.new-contentarea label {
|
||||
width:100%;
|
||||
height:100%;
|
||||
display:block;
|
||||
}
|
||||
.new-contentarea input[type=file] {
|
||||
width:188px;
|
||||
height:60px;
|
||||
background:#333;
|
||||
margin: 0 auto;
|
||||
position:absolute;
|
||||
right:50%;
|
||||
margin-right:-94px;
|
||||
top:0;
|
||||
right/*\**/:0px\9;
|
||||
margin-right/*\**/:0px\9;
|
||||
width/*\**/:10px\9;
|
||||
opacity:0;
|
||||
filter:alpha(opacity=0);
|
||||
z-index:2;
|
||||
}
|
||||
a.upload-img{
|
||||
width:165px;
|
||||
display: inline-block;
|
||||
margin-bottom: 10px;
|
||||
height:37px;
|
||||
line-height: 37px;
|
||||
font-size: 14px;
|
||||
color: #FFFFFF;
|
||||
background-color: #f38e81;
|
||||
border-radius: 3px;
|
||||
text-decoration:none;
|
||||
cursor:pointer;
|
||||
border: 0px #fff solid;
|
||||
box-shadow: 0px 0px 5px #B0B0B0;
|
||||
}
|
||||
a.upload-img:hover{
|
||||
background-color: #ec7e70;
|
||||
}
|
||||
|
||||
.tc{text-align:center;}
|
||||
/*www.jq22.com*/
|
141
src/main/resources/static/ajax/libs/cropbox/cropbox.js
Normal file
141
src/main/resources/static/ajax/libs/cropbox/cropbox.js
Normal file
@ -0,0 +1,141 @@
|
||||
/**
|
||||
* Created by ezgoing on 14/9/2014.
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
(function (factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define(['jquery'], factory);
|
||||
} else {
|
||||
factory(jQuery);
|
||||
}
|
||||
}(function ($) {
|
||||
var cropbox = function(options, el){
|
||||
var el = el || $(options.imageBox),
|
||||
obj =
|
||||
{
|
||||
state : {},
|
||||
ratio : 1,
|
||||
options : options,
|
||||
imageBox : el,
|
||||
thumbBox : el.find(options.thumbBox),
|
||||
spinner : el.find(options.spinner),
|
||||
image : new Image(),
|
||||
getDataURL: function ()
|
||||
{
|
||||
var width = this.thumbBox.width(),
|
||||
height = this.thumbBox.height(),
|
||||
canvas = document.createElement("canvas"),
|
||||
dim = el.css('background-position').split(' '),
|
||||
size = el.css('background-size').split(' '),
|
||||
dx = parseInt(dim[0]) - el.width()/2 + width/2,
|
||||
dy = parseInt(dim[1]) - el.height()/2 + height/2,
|
||||
dw = parseInt(size[0]),
|
||||
dh = parseInt(size[1]),
|
||||
sh = parseInt(this.image.height),
|
||||
sw = parseInt(this.image.width);
|
||||
|
||||
canvas.width = width;
|
||||
canvas.height = height;
|
||||
var context = canvas.getContext("2d");
|
||||
context.drawImage(this.image, 0, 0, sw, sh, dx, dy, dw, dh);
|
||||
var imageData = canvas.toDataURL('image/png');
|
||||
return imageData;
|
||||
},
|
||||
getBlob: function()
|
||||
{
|
||||
var imageData = this.getDataURL();
|
||||
var b64 = imageData.replace('data:image/png;base64,','');
|
||||
var binary = atob(b64);
|
||||
var array = [];
|
||||
for (var i = 0; i < binary.length; i++) {
|
||||
array.push(binary.charCodeAt(i));
|
||||
}
|
||||
return new Blob([new Uint8Array(array)], {type: 'image/png'});
|
||||
},
|
||||
zoomIn: function ()
|
||||
{
|
||||
this.ratio*=1.1;
|
||||
setBackground();
|
||||
},
|
||||
zoomOut: function ()
|
||||
{
|
||||
this.ratio*=0.9;
|
||||
setBackground();
|
||||
}
|
||||
},
|
||||
setBackground = function()
|
||||
{
|
||||
var w = parseInt(obj.image.width)*obj.ratio;
|
||||
var h = parseInt(obj.image.height)*obj.ratio;
|
||||
|
||||
var pw = (el.width() - w) / 2;
|
||||
var ph = (el.height() - h) / 2;
|
||||
|
||||
el.css({
|
||||
'background-image': 'url(' + obj.image.src + ')',
|
||||
'background-size': w +'px ' + h + 'px',
|
||||
'background-position': pw + 'px ' + ph + 'px',
|
||||
'background-repeat': 'no-repeat'});
|
||||
},
|
||||
imgMouseDown = function(e)
|
||||
{
|
||||
e.stopImmediatePropagation();
|
||||
|
||||
obj.state.dragable = true;
|
||||
obj.state.mouseX = e.clientX;
|
||||
obj.state.mouseY = e.clientY;
|
||||
},
|
||||
imgMouseMove = function(e)
|
||||
{
|
||||
e.stopImmediatePropagation();
|
||||
|
||||
if (obj.state.dragable)
|
||||
{
|
||||
var x = e.clientX - obj.state.mouseX;
|
||||
var y = e.clientY - obj.state.mouseY;
|
||||
|
||||
var bg = el.css('background-position').split(' ');
|
||||
|
||||
var bgX = x + parseInt(bg[0]);
|
||||
var bgY = y + parseInt(bg[1]);
|
||||
|
||||
el.css('background-position', bgX +'px ' + bgY + 'px');
|
||||
|
||||
obj.state.mouseX = e.clientX;
|
||||
obj.state.mouseY = e.clientY;
|
||||
}
|
||||
},
|
||||
imgMouseUp = function(e)
|
||||
{
|
||||
e.stopImmediatePropagation();
|
||||
obj.state.dragable = false;
|
||||
},
|
||||
zoomImage = function(e)
|
||||
{
|
||||
e.originalEvent.wheelDelta > 0 || e.originalEvent.detail < 0 ? obj.ratio*=1.1 : obj.ratio*=0.9;
|
||||
setBackground();
|
||||
}
|
||||
|
||||
obj.spinner.show();
|
||||
obj.image.onload = function() {
|
||||
obj.spinner.hide();
|
||||
setBackground();
|
||||
|
||||
el.bind('mousedown', imgMouseDown);
|
||||
el.bind('mousemove', imgMouseMove);
|
||||
$(window).bind('mouseup', imgMouseUp);
|
||||
el.bind('mousewheel DOMMouseScroll', zoomImage);
|
||||
};
|
||||
obj.image.src = options.imgSrc;
|
||||
el.on('remove', function(){$(window).unbind('mouseup', imgMouseUp)});
|
||||
|
||||
return obj;
|
||||
};
|
||||
|
||||
jQuery.fn.cropbox = function(options){
|
||||
return new cropbox(options, this);
|
||||
};
|
||||
}));
|
||||
|
||||
/*www.jq22.com*/
|
@ -14,20 +14,33 @@
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.icheckbox_square-green {
|
||||
.icheckbox_square-green-login{
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
vertical-align: middle;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
background: url(green-login.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.icheckbox_square-green,.icheckbox_square-green-login {
|
||||
background-position: 0 0;
|
||||
}
|
||||
.icheckbox_square-green.hover {
|
||||
.icheckbox_square-green.hover,.icheckbox_square-green-login.hover {
|
||||
background-position: -24px 0;
|
||||
}
|
||||
.icheckbox_square-green.checked {
|
||||
.icheckbox_square-green.checked,.icheckbox_square-green-login.checked {
|
||||
background-position: -48px 0;
|
||||
}
|
||||
.icheckbox_square-green.disabled {
|
||||
.icheckbox_square-green.disabled,.icheckbox_square-green.disabled-login {
|
||||
background-position: -72px 0;
|
||||
cursor: default;
|
||||
}
|
||||
.icheckbox_square-green.checked.disabled {
|
||||
.icheckbox_square-green.checked.disabled,.icheckbox_square-green-login.checked.disabled {
|
||||
background-position: -96px 0;
|
||||
}
|
||||
|
||||
@ -50,7 +63,7 @@
|
||||
|
||||
/* HiDPI support */
|
||||
@media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) {
|
||||
.icheckbox_square-green,
|
||||
.icheckbox_square-green,.icheckbox_square-green-login,
|
||||
.iradio_square-green {
|
||||
background-image: url(green%402x.png);
|
||||
-webkit-background-size: 240px 24px;
|
||||
|
BIN
src/main/resources/static/ajax/libs/iCheck/green-login.png
Normal file
BIN
src/main/resources/static/ajax/libs/iCheck/green-login.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.7 KiB |
@ -1,205 +1,86 @@
|
||||
html{
|
||||
height: 100%;
|
||||
font-family: PingFangSC-Light,'helvetica neue','hiragino sans gb',arial,'microsoft yahei ui','microsoft yahei',simsun,sans-serif;
|
||||
font-size: 14px;
|
||||
html {
|
||||
height:100%
|
||||
}
|
||||
body.signin {
|
||||
background: #18c8f6;
|
||||
height: auto;
|
||||
background:url("../img/backg02.jpg") no-repeat center fixed;
|
||||
-webkit-background-size: cover;
|
||||
-moz-background-size: cover;
|
||||
-o-background-size: cover;
|
||||
background-size: cover;
|
||||
color: rgba(255,255,255,.95);
|
||||
height:auto;
|
||||
background:url(../img/login-background.jpg) no-repeat center fixed;
|
||||
-webkit-background-size:cover;
|
||||
-moz-background-size:cover;
|
||||
-o-background-size:cover;
|
||||
background-size:cover;
|
||||
color:rgba(255,255,255,.95)
|
||||
}
|
||||
.logopanel h1{
|
||||
font-size: 40px;
|
||||
}
|
||||
.signin-info h3{
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.signinpanel {
|
||||
width: 912px;
|
||||
margin: 7% auto 0 auto;
|
||||
}
|
||||
.btn-login{
|
||||
border: 1px solid #00a3ff;
|
||||
background-color: #00A3FF;
|
||||
color: #fff;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.btn-login:hover{
|
||||
color: #fff;
|
||||
background-color: #0097ee;
|
||||
border: 1px solid #0097ee;
|
||||
width:750px;
|
||||
margin:10% auto 0
|
||||
}
|
||||
.signinpanel .logopanel {
|
||||
float: none;
|
||||
width: auto;
|
||||
padding: 0;
|
||||
background: none;
|
||||
float:none;
|
||||
width:auto;
|
||||
padding:0;
|
||||
background:0 0
|
||||
}
|
||||
|
||||
.signinpanel .signin-info ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 20px 0;
|
||||
font-size: 20px;
|
||||
|
||||
list-style:none;
|
||||
padding:0;
|
||||
margin:20px 0
|
||||
}
|
||||
|
||||
.signinpanel .form-control {
|
||||
display: block;
|
||||
margin-top: 15px;
|
||||
display:block;
|
||||
margin-top:15px
|
||||
}
|
||||
|
||||
.signinpanel .uname {
|
||||
background: #fff url(../img/user.png) no-repeat 95% center;color:#333;
|
||||
background:#fff url(../img/user.png) no-repeat 95% center;
|
||||
color:#333
|
||||
}
|
||||
|
||||
.signinpanel .pword {
|
||||
background: #fff url(../img/locked.png) no-repeat 95% center;color:#333;
|
||||
background:#fff url(../img/locked.png) no-repeat 95% center;
|
||||
color:#333
|
||||
}
|
||||
.signinpanel .code {
|
||||
background: #fff no-repeat 95% center;color:#333; margin:0 0 15px 0;
|
||||
}
|
||||
|
||||
.signinpanel .btn {
|
||||
margin-top: 15px;
|
||||
margin-top:15px
|
||||
}
|
||||
|
||||
.signinpanel form {
|
||||
background: #fff;
|
||||
border: 1px solid rgba(255,255,255,.3);
|
||||
-moz-box-shadow: 0 3px 0 rgba(12, 12, 12, 0.03);
|
||||
-webkit-box-shadow: 0 3px 0 rgba(12, 12, 12, 0.03);
|
||||
box-shadow: 0 3px 0 rgba(12, 12, 12, 0.03);
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
padding: 30px;
|
||||
color:#666;
|
||||
background:rgba(255,255,255,.2);
|
||||
border:1px solid rgba(255,255,255,.3);
|
||||
-moz-box-shadow:0 3px 0 rgba(12,12,12,.03);
|
||||
-webkit-box-shadow:0 3px 0 rgba(12,12,12,.03);
|
||||
box-shadow:0 3px 0 rgba(12,12,12,.03);
|
||||
-moz-border-radius:3px;
|
||||
-webkit-border-radius:3px;
|
||||
border-radius:3px;
|
||||
padding:30px
|
||||
}
|
||||
.signinpanel form >h3{
|
||||
color: #333333;
|
||||
font-size: 24px;
|
||||
font-family: "microsoft yahei";
|
||||
font-weight: 400;
|
||||
.signup-footer {
|
||||
border-top:solid 1px rgba(255,255,255,.3);
|
||||
margin:20px 0;
|
||||
padding-top:15px
|
||||
}
|
||||
.signup-footer{border-top: solid 1px rgba(255,255,255,.3);margin:20px 0;padding-top: 15px;}
|
||||
.outside-login{
|
||||
border-top: #dcdee3 1px solid;
|
||||
padding: 7% 0 0;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
margin: 9% 0% 0;
|
||||
border-radius: 0 0 1% 1%;
|
||||
@media screen and (max-width:768px) {
|
||||
.signinpanel,.signuppanel {
|
||||
margin:0 auto;
|
||||
width:420px!important;
|
||||
padding:20px
|
||||
}
|
||||
.outside-login-tit{
|
||||
position: absolute;
|
||||
top: -8px;
|
||||
left: 50%;
|
||||
margin: 0 0 0 -50px;
|
||||
text-align: center;
|
||||
width: 100px;
|
||||
height: 14px;
|
||||
line-height: 1;
|
||||
color: #999;
|
||||
.signinpanel form {
|
||||
margin-top:20px
|
||||
}
|
||||
.outside-login-tit span{
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
.signup-footer,.signuppanel .form-control {
|
||||
margin-bottom:10px
|
||||
}
|
||||
.outside-login-tit:before {
|
||||
top: 0;
|
||||
left: 0;
|
||||
background-color: #fff;
|
||||
.signup-footer .pull-left,.signup-footer .pull-right {
|
||||
float:none!important;
|
||||
text-align:center
|
||||
}
|
||||
.outside-login-tit:after {
|
||||
top: 7px;
|
||||
left: 0;
|
||||
background-color: #fff;
|
||||
.signinpanel .signin-info ul {
|
||||
display:none
|
||||
}
|
||||
.outside-login-tit:after, .outside-login-tit:before {
|
||||
content: '';
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 7px;
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
}@media screen and (max-width:320px) {
|
||||
.signinpanel,.signuppanel {
|
||||
margin:0 20px;
|
||||
width:auto
|
||||
}
|
||||
.outside-login-con {
|
||||
font-size: 0;
|
||||
padding-top: 10px;
|
||||
}
|
||||
.outside-login-list {
|
||||
width: 116%;
|
||||
margin-left: -8%;
|
||||
}
|
||||
.outside-login-btn {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
width: 33.3333%;
|
||||
}
|
||||
.outside-login-list .actived {
|
||||
display: inline-block;
|
||||
}
|
||||
.outside-login-btn em {
|
||||
display: block;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
line-height: 50px;
|
||||
border-radius: 50%;
|
||||
margin: 0 auto 5px;
|
||||
white-space: normal;
|
||||
font-size: 20px;
|
||||
color: #fff;
|
||||
}
|
||||
.outside-login-btn:first-child, .outside-login-btn:last-child {
|
||||
width: 30.3333%;
|
||||
}
|
||||
.outside-login-btn span {
|
||||
font-size: 14px;
|
||||
color: #333;
|
||||
}
|
||||
.oschina em{
|
||||
background-color: #4ec34d;
|
||||
}
|
||||
.git em{
|
||||
background-color: #211b1b;
|
||||
}
|
||||
.my em{
|
||||
background-color: #ff4700
|
||||
}
|
||||
@media screen and (max-width: 768px) {
|
||||
.signinpanel,
|
||||
.signuppanel {
|
||||
margin: 0 auto;
|
||||
width: 413px!important;
|
||||
padding: 20px;
|
||||
}
|
||||
.signinpanel form {
|
||||
margin-top: 20px;
|
||||
}
|
||||
.signup-footer {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.signuppanel .form-control {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.signup-footer .pull-left,
|
||||
.signup-footer .pull-right {
|
||||
float: none !important;
|
||||
text-align: center;
|
||||
}
|
||||
.signinpanel .signin-info ul {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 320px) {
|
||||
.signinpanel,
|
||||
.signuppanel {
|
||||
margin:0 20px;
|
||||
width:auto;
|
||||
}
|
||||
}
|
||||
|
1
src/main/resources/static/css/login.min.css
vendored
1
src/main/resources/static/css/login.min.css
vendored
@ -1 +0,0 @@
|
||||
html{height:100%}body.signin{height:auto;background:url(../img/login-background.jpg) no-repeat center fixed;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;color:rgba(255,255,255,.95)}.signinpanel{width:750px;margin:10% auto 0}.signinpanel .logopanel{float:none;width:auto;padding:0;background:0 0}.signinpanel .signin-info ul{list-style:none;padding:0;margin:20px 0}.signinpanel .form-control{display:block;margin-top:15px}.signinpanel .uname{background:#fff url(../img/user.png) no-repeat 95% center;color:#333}.signinpanel .pword{background:#fff url(../img/locked.png) no-repeat 95% center;color:#333}.signinpanel .btn{margin-top:15px}.signinpanel form{background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.3);-moz-box-shadow:0 3px 0 rgba(12,12,12,.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,.03);box-shadow:0 3px 0 rgba(12,12,12,.03);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:30px}.signup-footer{border-top:solid 1px rgba(255,255,255,.3);margin:20px 0;padding-top:15px}@media screen and (max-width:768px){.signinpanel,.signuppanel{margin:0 auto;width:420px!important;padding:20px}.signinpanel form{margin-top:20px}.signup-footer,.signuppanel .form-control{margin-bottom:10px}.signup-footer .pull-left,.signup-footer .pull-right{float:none!important;text-align:center}.signinpanel .signin-info ul{display:none}}@media screen and (max-width:320px){.signinpanel,.signuppanel{margin:0 20px;width:auto}}
|
Binary file not shown.
Before Width: | Height: | Size: 69 KiB |
Binary file not shown.
BIN
src/main/resources/static/img/profile.jpg
Normal file
BIN
src/main/resources/static/img/profile.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 79 KiB |
Binary file not shown.
Before Width: | Height: | Size: 16 KiB |
Binary file not shown.
Before Width: | Height: | Size: 16 KiB |
@ -106,6 +106,30 @@ $(function(){
|
||||
columns: _columns
|
||||
});
|
||||
}
|
||||
// 初始bootstrap table 自定义参数
|
||||
$.initTableParams = function (_columns, _url, _queryParams) {
|
||||
$('.bootstrap-table').bootstrapTable({
|
||||
method: 'get', // 请求方式(*)
|
||||
dataType: "json", // 返回格式(*)
|
||||
url: _url, // 请求后台的URL(*)
|
||||
pagination: true, // 是否显示分页(*)
|
||||
pageSize: 10, // 每页的记录行数(*)
|
||||
pageNumber: 1, // 初始化加载第一页,默认第一页
|
||||
pageList: [10, 25, 50], // 可供选择的每页的行数(*)
|
||||
search: true, // 是否显示搜索框功能
|
||||
singleSelect: false, // 是否禁止多选
|
||||
iconSize: 'outline', // 图标大小:undefined默认的按钮尺寸 xs超小按钮sm小按钮lg大按钮
|
||||
toolbar: '#tableToolbar', // 指定工作栏
|
||||
sidePagination: "server", // 启用服务端分页
|
||||
showRefresh: true, // 是否显示刷新按钮
|
||||
showColumns: true, // 是否显示隐藏某列下拉框
|
||||
showToggle: true, // 是否显示详细视图和列表视图的切换按钮
|
||||
cache: false, // 是否使用缓存
|
||||
showExport: true, // 是否支持导出文件
|
||||
queryParams: _queryParams,
|
||||
columns: _columns
|
||||
});
|
||||
}
|
||||
//初始化表格树,并展开树
|
||||
$.initTreeTable = function (_id, _parentId, _columns, _url) {
|
||||
$.initTreeTable(_id, _parentId, _columns, _url, true);
|
||||
|
61
src/main/resources/static/ruoyi/login.js
Normal file
61
src/main/resources/static/ruoyi/login.js
Normal file
@ -0,0 +1,61 @@
|
||||
|
||||
$(function() {
|
||||
validateRule();
|
||||
$(".i-checks").iCheck({checkboxClass:"icheckbox_square-green-login"});
|
||||
$('.imgcode').click(function() {
|
||||
var url = ctx + "captcha/captchaImage?type=" + captchaType + "&s=" + Math.random();
|
||||
$(".imgcode").attr("src", url);
|
||||
});
|
||||
});
|
||||
|
||||
$.validator.setDefaults({
|
||||
submitHandler: function() {
|
||||
login();
|
||||
}
|
||||
});
|
||||
|
||||
function login() {
|
||||
var username = $("input[name='username']").val().trim();
|
||||
var password = $("input[name='password']").val().trim();
|
||||
var validateCode = $("input[name='validateCode']").val().trim();
|
||||
var rememberMe = $("input[name='rememberme']").is(':checked');
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ctx + "login",
|
||||
data: {
|
||||
"username": username,
|
||||
"password": password,
|
||||
"validateCode" : validateCode,
|
||||
"rememberMe": rememberMe
|
||||
},
|
||||
success: function(r) {
|
||||
if (r.code == 0) {
|
||||
parent.location.href = ctx + 'index';
|
||||
} else {
|
||||
layer.msg(r.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function validateRule() {
|
||||
var icon = "<i class='fa fa-times-circle'></i> ";
|
||||
$("#signupForm").validate({
|
||||
rules: {
|
||||
username: {
|
||||
required: true
|
||||
},
|
||||
password: {
|
||||
required: true
|
||||
}
|
||||
},
|
||||
messages: {
|
||||
username: {
|
||||
required: icon + "请输入您的用户名",
|
||||
},
|
||||
password: {
|
||||
required: icon + "请输入您的密码",
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
@ -41,7 +41,7 @@ $(function() {
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'createTime',
|
||||
field: 'createDateTimeStr',
|
||||
title: '创建时间'
|
||||
},
|
||||
{
|
||||
|
@ -41,7 +41,7 @@ $(function() {
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'createTime',
|
||||
field: 'createDateTimeStr',
|
||||
title: '创建时间'
|
||||
},
|
||||
{
|
||||
|
@ -25,10 +25,8 @@ function loading() {
|
||||
}
|
||||
},
|
||||
{
|
||||
title : '创建时间',
|
||||
formatter : function(row, index) {
|
||||
return formatDate(row.createTime,"yyyy-MM-dd");
|
||||
}
|
||||
field: 'createTimeStr',
|
||||
title : '创建时间'
|
||||
},
|
||||
{
|
||||
title : '操作',
|
||||
|
@ -37,7 +37,7 @@ $(function() {
|
||||
title: '备注'
|
||||
},
|
||||
{
|
||||
field: 'createTime',
|
||||
field: 'createDateTimeStr',
|
||||
title: '创建时间'
|
||||
},
|
||||
{
|
||||
|
@ -33,7 +33,7 @@ $(function() {
|
||||
title: '备注'
|
||||
},
|
||||
{
|
||||
field: 'createTime',
|
||||
field: 'createDateTimeStr',
|
||||
title: '创建时间'
|
||||
},
|
||||
{
|
||||
|
@ -32,7 +32,7 @@ $(function() {
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'createTime',
|
||||
field: 'createDateTimeStr',
|
||||
title: '创建时间'
|
||||
},
|
||||
{
|
||||
|
@ -33,7 +33,7 @@ $(function() {
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'createTime',
|
||||
field: 'createDateTimeStr',
|
||||
title: '创建时间'
|
||||
},
|
||||
{
|
||||
|
@ -44,7 +44,7 @@ function queryUserList() {
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'createTime',
|
||||
field: 'createDateTimeStr',
|
||||
title: '创建时间'
|
||||
},
|
||||
{
|
||||
@ -63,7 +63,20 @@ function queryUserList() {
|
||||
}
|
||||
}];
|
||||
var url = prefix + "/list";
|
||||
$.initTable(columns, url);
|
||||
$.initTableParams(columns, url, queryParams);
|
||||
}
|
||||
|
||||
function queryParams(params) {
|
||||
return {
|
||||
// 传递参数查询参数
|
||||
pageSize: params.limit,
|
||||
pageNum: params.offset / params.limit + 1,
|
||||
searchValue: params.search,
|
||||
orderByColumn: params.sort,
|
||||
isAsc: params.order,
|
||||
deptId: $("#deptId").val(),
|
||||
parentId: $("#parentId").val()
|
||||
};
|
||||
}
|
||||
|
||||
function queryDeptTreeDaTa()
|
||||
@ -72,8 +85,9 @@ function queryDeptTreeDaTa()
|
||||
var setting = {view:{selectedMulti:false},data:{key:{title:"title"},simpleData:{enable:true}},
|
||||
callback:{onClick:function(event, treeId, treeNode){
|
||||
tree.expandNode(treeNode);
|
||||
var opt = { query : { deptId : treeNode.id, parentId : treeNode.pId, } };
|
||||
$('.bootstrap-table').bootstrapTable('refresh', opt);
|
||||
$("#deptId").val(treeNode.id);
|
||||
$("#parentId").val(treeNode.pId);
|
||||
$('.bootstrap-table').bootstrapTable('refresh', queryParams);
|
||||
}}
|
||||
}, tree, loadTree = function(){
|
||||
$.get(ctx + "system/dept/treeData", function(data) {
|
||||
|
@ -13,11 +13,11 @@ $(function() {
|
||||
title: '表描述'
|
||||
},
|
||||
{
|
||||
field: 'createTime',
|
||||
field: 'createDateTimeStr',
|
||||
title: '创建时间'
|
||||
},
|
||||
{
|
||||
field: 'updateTime',
|
||||
field: 'updateDateTimeStr',
|
||||
title: '更新时间'
|
||||
},
|
||||
{
|
||||
|
@ -33,8 +33,8 @@
|
||||
<script src="../static/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js" th:src="@{/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js}"></script>
|
||||
<script src="../static/ajax/libs/bootstrap-table/extensions/export/tableExport.js" th:src="@{/ajax/libs/bootstrap-table/extensions/export/tableExport.js}"></script>
|
||||
<script src="../static/ajax/libs/layer/layer.min.js" th:src="@{/ajax/libs/layer/layer.min.js}"></script>
|
||||
<script src="../static/ruoyi/js/common.js?v=1.1.2" th:src="@{/ruoyi/js/common.js?v=1.1.2}"></script>
|
||||
<script src="../static/ruoyi/js/ry-ui.js?v=1.1.2" th:src="@{/ruoyi/js/ry-ui.js?v=1.1.2}"></script>
|
||||
<script src="../static/ruoyi/js/common.js?v=1.1.3" th:src="@{/ruoyi/js/common.js?v=1.1.3}"></script>
|
||||
<script src="../static/ruoyi/js/ry-ui.js?v=1.1.3" th:src="@{/ruoyi/js/ry-ui.js?v=1.1.3}"></script>
|
||||
<script th:inline="javascript"> var ctx = [[@{/}]]; </script>
|
||||
<script src="http://tajs.qq.com/stats?sId=62048022"></script>
|
||||
</div>
|
||||
|
@ -32,7 +32,7 @@
|
||||
<ul class="nav" id="side-menu">
|
||||
<li class="nav-header">
|
||||
<div class="dropdown profile-element"> <span>
|
||||
<img src="img/profile_small.jpg" alt="image" class="img-circle" height="60" width="60"/></span>
|
||||
<img th:src="(${user.avatar} == '') ? '/img/profile.jpg' : '/profile/' + ${user.avatar}" alt="image" class="img-circle" height="60" width="60"/></span>
|
||||
<a data-toggle="dropdown" class="dropdown-toggle" href="#">
|
||||
<span class="clear"><span class="block m-t-xs"><strong class="font-bold">[[${user.userName}]]</strong></span>
|
||||
<span class="text-muted text-xs block"><span>[[${user.dept.deptName}]]</span> <b class="caret"></b></span> </span> </a>
|
||||
@ -128,6 +128,6 @@
|
||||
<script src="../static/js/bootstrap.min.js" th:src="@{/js/bootstrap.min.js}"></script>
|
||||
<script src="../static/js/plugins/metisMenu/jquery.metisMenu.js" th:src="@{/js/plugins/metisMenu/jquery.metisMenu.js}"></script>
|
||||
<script src="../static/js/plugins/slimscroll/jquery.slimscroll.min.js" th:src="@{/js/plugins/slimscroll/jquery.slimscroll.min.js}"></script>
|
||||
<script src="../static/ruoyi/js/index.js" th:src="@{/ruoyi/js/index.js}"></script>
|
||||
<script src="../static/ruoyi/index.js" th:src="@{/ruoyi/index.js}"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -12,6 +12,7 @@
|
||||
<link href="../static/css/font-awesome.css" th:href="@{css/font-awesome.css}" rel="stylesheet"/>
|
||||
<link href="../static/css/style.min.css" th:href="@{css/style.min.css}" rel="stylesheet"/>
|
||||
<link href="../static/css/login.min.css" th:href="@{css/login.min.css}" rel="stylesheet"/>
|
||||
<link href="../static/ajax/libs/iCheck/custom.css" th:href="@{/ajax/libs/iCheck/custom.css}" rel="stylesheet"/>
|
||||
<!--[if lt IE 9]>
|
||||
<meta http-equiv="refresh" content="0;ie.html" />
|
||||
<![endif]-->
|
||||
@ -22,6 +23,7 @@
|
||||
</head>
|
||||
|
||||
<body class="signin">
|
||||
|
||||
<div class="signinpanel">
|
||||
<div class="row">
|
||||
<div class="col-sm-7">
|
||||
@ -47,7 +49,17 @@
|
||||
<p class="m-t-md">你若不离不弃,我必生死相依</p>
|
||||
<input type="text" name="username" class="form-control uname" placeholder="用户名" value="admin" />
|
||||
<input type="password" name="password" class="form-control pword m-b" placeholder="密码" value="admin123" />
|
||||
<a href="#">忘记密码了?</a>
|
||||
<div class="row" th:if="${captchaEbabled==true}">
|
||||
<div class="col-xs-6">
|
||||
<input type="text" name="validateCode" class="form-control code" placeholder="验证码" maxlength="5">
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<a href="javascript:void(0);" title="点击更换验证码">
|
||||
<img th:src="@{captcha/captchaImage(type=${captchaType})}" class="imgcode" width="85%"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<input class="i-checks" type="checkbox" name="rememberme" /> 记住我
|
||||
<button class="btn btn-success btn-block">登录</button>
|
||||
</form>
|
||||
</div>
|
||||
@ -58,7 +70,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script th:inline="javascript"> var ctx = [[@{/}]]; </script>
|
||||
<script th:inline="javascript"> var ctx = [[@{/}]]; var captchaType = [[${captchaType}]]; </script>
|
||||
<!-- 全局js -->
|
||||
<script src="../static/js/jquery.min.js" th:src="@{js/jquery.min.js}"></script>
|
||||
<script src="../static/js/bootstrap.min.js" th:src="@{js/bootstrap.min.js}"></script>
|
||||
@ -66,55 +78,9 @@
|
||||
<script src="../static/ajax/libs/validate/jquery.validate.min.js" th:src="@{ajax/libs/validate/jquery.validate.min.js}"></script>
|
||||
<script src="../static/ajax/libs/validate/messages_zh.min.js" th:src="@{ajax/libs/validate/messages_zh.min.js}"></script>
|
||||
<script src="../static/ajax/libs/layer/layer.min.js" th:src="@{ajax/libs/layer/layer.min.js}"></script>
|
||||
<script src="../static/ajax/libs/iCheck/icheck.min.js" th:src="@{/ajax/libs/iCheck/icheck.min.js}"></script>
|
||||
<script src="http://tajs.qq.com/stats?sId=62048022"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
console.log(ctx);
|
||||
validateRule();
|
||||
});
|
||||
|
||||
$.validator.setDefaults({
|
||||
submitHandler: function() {
|
||||
login();
|
||||
}
|
||||
});
|
||||
|
||||
function login() {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ctx + "login",
|
||||
data: $('#signupForm').serialize(),
|
||||
success: function(r) {
|
||||
if (r.code == 0) {
|
||||
parent.location.href = ctx + 'index';
|
||||
} else {
|
||||
layer.msg(r.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function validateRule() {
|
||||
var icon = "<i class='fa fa-times-circle'></i> ";
|
||||
$("#signupForm").validate({
|
||||
rules: {
|
||||
username: {
|
||||
required: true
|
||||
},
|
||||
password: {
|
||||
required: true
|
||||
}
|
||||
},
|
||||
messages: {
|
||||
username: {
|
||||
required: icon + "请输入您的用户名",
|
||||
},
|
||||
password: {
|
||||
required: icon + "请输入您的密码",
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
<script src="../static/ruoyi/login.js" th:src="@{/ruoyi/login.js}"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -94,13 +94,34 @@
|
||||
<div class="ibox-content no-padding">
|
||||
<div class="panel-body">
|
||||
<div class="panel-group" id="version">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h5 class="panel-title">
|
||||
<a data-toggle="collapse" data-parent="#version" href="#v13">v1.1.3</a><code class="pull-right">2018.05.14</code>
|
||||
</h5>
|
||||
</div>
|
||||
<div id="v13" class="panel-collapse collapse in">
|
||||
<div class="panel-body">
|
||||
<ol>
|
||||
<li>新增验证码(数组计算、字符验证)</li>
|
||||
<li>新增cookie记住我</li>
|
||||
<li>新增头像上传</li>
|
||||
<li>用户名密码长度限制</li>
|
||||
<li>通用字段提取</li>
|
||||
<li>支持自定义条件查询</li>
|
||||
<li>部门名称必填、时间格式调整</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h5 class="panel-title">
|
||||
<a data-toggle="collapse" data-parent="#version" href="#v12">v1.1.2</a><code class="pull-right">2018.05.07</code>
|
||||
</h5>
|
||||
</div>
|
||||
<div id="v12" class="panel-collapse collapse in">
|
||||
<div id="v12" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
<ol>
|
||||
<li>新增个人信息修改</li>
|
||||
|
@ -101,7 +101,7 @@
|
||||
</script>
|
||||
<script src="/ajax/libs/iCheck/icheck.min.js" th:src="@{/ajax/libs/iCheck/icheck.min.js}"></script>
|
||||
<script src="/ajax/libs/select/select2.js" th:src="@{/ajax/libs/select/select2.js}"></script>
|
||||
<script>
|
||||
<script>
|
||||
$(document).ready(function(){$(".i-checks").iCheck({checkboxClass:"icheckbox_square-green",radioClass:"iradio_square-green",})});
|
||||
</script>
|
||||
</body>
|
||||
|
@ -96,7 +96,7 @@
|
||||
</script>
|
||||
<script src="/ajax/libs/iCheck/icheck.min.js" th:src="@{/ajax/libs/iCheck/icheck.min.js}"></script>
|
||||
<script src="/ajax/libs/select/select2.js" th:src="@{/ajax/libs/select/select2.js}"></script>
|
||||
<script>
|
||||
<script>
|
||||
$(document).ready(function(){$(".i-checks").iCheck({checkboxClass:"icheckbox_square-green",radioClass:"iradio_square-green",})});
|
||||
</script>
|
||||
</body>
|
||||
|
81
src/main/resources/templates/system/user/profile/avatar.html
Normal file
81
src/main/resources/templates/system/user/profile/avatar.html
Normal file
@ -0,0 +1,81 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.w3.org/1999/xhtml">
|
||||
<meta charset="utf-8">
|
||||
<title>用户头像修改</title>
|
||||
<link href="/ajax/libs/cropbox/cropbox.css" th:href="@{/ajax/libs/cropbox/cropbox.css}" rel="stylesheet"/>
|
||||
<body class="white-bg">
|
||||
<div class="container">
|
||||
<div class="imageBox">
|
||||
<div class="thumbBox"></div>
|
||||
<div class="spinner" style="display: none">Loading...</div>
|
||||
</div>
|
||||
<div class="action">
|
||||
<div class="new-contentarea tc">
|
||||
<a href="javascript:void(0)" class="upload-img"> <label for="avatar">上传图像</label> </a>
|
||||
<input type="file" class="" name="avatar" id="avatar" />
|
||||
</div>
|
||||
<input type="button" id="btnCrop" class="Btnsty_peyton" value="裁切" />
|
||||
<input type="button" id="btnZoomIn" class="Btnsty_peyton" value="+" />
|
||||
<input type="button" id="btnZoomOut" class="Btnsty_peyton" value="-" />
|
||||
<input type="button" id="blobSubmit" class="Btnsty_peyton" value="提交" />
|
||||
</div>
|
||||
<div class="cropped"></div>
|
||||
</div>
|
||||
<div th:include="include::footer"></div>
|
||||
<script src="/ajax/libs/cropbox/cropbox.js" th:src="@{/ajax/libs/cropbox/cropbox.js}"></script>
|
||||
<script type="text/javascript">
|
||||
$(window).load(function() {
|
||||
var options = {
|
||||
thumbBox: '.thumbBox',
|
||||
spinner: '.spinner',
|
||||
imgSrc: '/img/profile.jpg'
|
||||
}
|
||||
var cropper = $('.imageBox').cropbox(options);
|
||||
$('#avatar').on('change',
|
||||
function() {
|
||||
var reader = new FileReader();
|
||||
reader.onload = function(e) {
|
||||
options.imgSrc = e.target.result;
|
||||
cropper = $('.imageBox').cropbox(options);
|
||||
}
|
||||
reader.readAsDataURL(this.files[0]);
|
||||
})
|
||||
$('#blobSubmit').on('click', function(){
|
||||
var img = cropper.getBlob();
|
||||
var formdata = new FormData();
|
||||
formdata.append("avatarfile", img);
|
||||
formdata.append("userId", 1);
|
||||
$.ajax({
|
||||
url: ctx + "system/user/profile/updateAvatar",
|
||||
data: formdata,
|
||||
type: "post",
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success: function(result) {
|
||||
if (result.code == "0") {
|
||||
parent.layer.msg("修改成功,正在刷新数据请稍后……",{icon:1,time: 500,shade: [0.1,'#fff']},function(){
|
||||
$.parentReload();
|
||||
});
|
||||
}else{
|
||||
$.modalAlert(result.msg, "error");
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
$('#btnCrop').on('click', function(){
|
||||
var img = cropper.getDataURL();
|
||||
$('.cropped').html('');
|
||||
$('.cropped').append('<img src="'+img+'" align="absmiddle" style="width:64px;margin-top:4px;border-radius:64px;box-shadow:0px 0px 12px #7E7E7E;" ><p>64px*64px</p>');
|
||||
$('.cropped').append('<img src="'+img+'" align="absmiddle" style="width:128px;margin-top:4px;border-radius:128px;box-shadow:0px 0px 12px #7E7E7E;"><p>128px*128px</p>');
|
||||
$('.cropped').append('<img src="'+img+'" align="absmiddle" style="width:180px;margin-top:4px;border-radius:180px;box-shadow:0px 0px 12px #7E7E7E;"><p>180px*180px</p>');
|
||||
})
|
||||
$('#btnZoomIn').on('click', function(){
|
||||
cropper.zoomIn();
|
||||
})
|
||||
$('#btnZoomOut').on('click', function(){
|
||||
cropper.zoomOut();
|
||||
})
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -27,6 +27,7 @@
|
||||
<ul class="dropdown-menu dropdown-user">
|
||||
<li><a href="javascript:edit()">修改信息</a></li>
|
||||
<li><a href="javascript:resetPwd()">修改密码</a></li>
|
||||
<li><a href="javascript:avatar()">修改头像</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
@ -34,7 +35,7 @@
|
||||
<div class="contact-box">
|
||||
<div class="col-sm-4">
|
||||
<div class="text-center">
|
||||
<img alt="image" class="img-circle m-t-xs img-responsive" src="/img/profilel.jpg">
|
||||
<img alt="image" class="img-circle m-t-xs img-responsive" th:src="(${user.avatar} == '') ? '/img/profile.jpg' : '/profile/' + ${user.avatar}">
|
||||
<div class="m-t-xs font-bold">CEO</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -45,7 +46,7 @@
|
||||
<p><i class="fa fa-group"></i> [[${user.dept.deptName}]] / [[${#strings.defaultString(postGroup,'无岗位')}]]</p>
|
||||
<p><i class="fa fa-transgender"></i> [[${user.sex}]]</p>
|
||||
<p><i class="fa fa-envelope-o"></i> [[${user.email}]]</p>
|
||||
<p><i class="fa fa-calendar"></i> [[${user.createTime}]]</p>
|
||||
<p><i class="fa fa-calendar"></i> [[${user.createDateTimeStr}]]</p>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</a>
|
||||
@ -68,6 +69,11 @@
|
||||
var url = ctx + 'system/user/profile/resetPwd/' + userId;
|
||||
layer_show("重置密码", url, '800', '500');
|
||||
}
|
||||
/*用户管理-头像*/
|
||||
function avatar() {
|
||||
var url = ctx + 'system/user/profile/avatar/' + userId;
|
||||
layer_showAuto("修改头像", url);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -7,7 +7,6 @@
|
||||
<link href="/ajax/libs/jquery-layout/jquery.layout-latest.css" th:href="@{/ajax/libs/jquery-layout/jquery.layout-latest.css}" rel="stylesheet"/>
|
||||
<link href="/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css" th:href="@{/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/>
|
||||
<body class="white-bg">
|
||||
|
||||
<div class="ui-layout-west">
|
||||
<div class="main-content">
|
||||
<div class="box box-main">
|
||||
@ -38,7 +37,8 @@
|
||||
<i class="glyphicon glyphicon-trash"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<input type="hidden" id="deptId">
|
||||
<input type="hidden" id="parentId">
|
||||
<table class="bootstrap-table" data-mobile-responsive="true"
|
||||
data-sort-name="create_time" data-sort-order="desc">
|
||||
</table>
|
||||
|
@ -18,7 +18,7 @@ import com.ruoyi.framework.web.page.TableDataInfo;
|
||||
import com.ruoyi.framework.web.domain.Message;
|
||||
|
||||
/**
|
||||
* ${tableComment} 控制层处理
|
||||
* ${tableComment} 信息操作处理
|
||||
*
|
||||
* @author ${author}
|
||||
* @date ${datetime}
|
||||
@ -47,7 +47,7 @@ public class ${className}Controller extends BaseController
|
||||
@ResponseBody
|
||||
public TableDataInfo list(${className} ${classname})
|
||||
{
|
||||
setPageInfo(${classname});
|
||||
startPage();
|
||||
List<${className}> list = ${classname}Service.select${className}List(${classname});
|
||||
return getDataTable(list);
|
||||
}
|
||||
@ -84,7 +84,7 @@ public class ${className}Controller extends BaseController
|
||||
{
|
||||
if (${classname}Service.save${className}(${classname}) > 0)
|
||||
{
|
||||
return Message.ok();
|
||||
return Message.success();
|
||||
}
|
||||
return Message.error();
|
||||
}
|
||||
@ -99,7 +99,7 @@ public class ${className}Controller extends BaseController
|
||||
{
|
||||
if (${classname}Service.delete${className}ById(${primaryKey.attrname}) > 0)
|
||||
{
|
||||
return Message.ok();
|
||||
return Message.success();
|
||||
}
|
||||
return Message.error();
|
||||
}
|
||||
@ -115,7 +115,7 @@ public class ${className}Controller extends BaseController
|
||||
int rows = ${classname}Service.batchDelete${className}(${primaryKey.attrname}s);
|
||||
if (rows > 0)
|
||||
{
|
||||
return Message.ok();
|
||||
return Message.success();
|
||||
}
|
||||
return Message.error();
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
package ${package}.dao;
|
||||
package ${package}.mapper;
|
||||
|
||||
import ${package}.domain.${className};
|
||||
import java.util.List;
|
||||
@ -9,7 +9,7 @@ import java.util.List;
|
||||
* @author ${author}
|
||||
* @date ${datetime}
|
||||
*/
|
||||
public interface I${className}Dao
|
||||
public interface I${className}Mapper
|
||||
{
|
||||
|
||||
/**
|
@ -4,7 +4,7 @@ import java.util.List;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import ${package}.dao.I${className}Dao;
|
||||
import ${package}.mapper.I${className}Mapper;
|
||||
import ${package}.domain.${className};
|
||||
import ${package}.service.I${className}Service;
|
||||
|
||||
@ -18,7 +18,7 @@ import ${package}.service.I${className}Service;
|
||||
public class ${className}ServiceImpl implements I${className}Service
|
||||
{
|
||||
@Autowired
|
||||
private I${className}Dao ${classname}Dao;
|
||||
private I${className}Mapper ${classname}Mapper;
|
||||
|
||||
/**
|
||||
* 查询${tableComment}信息
|
||||
@ -29,7 +29,7 @@ public class ${className}ServiceImpl implements I${className}Service
|
||||
@Override
|
||||
public ${className} select${className}ById(${primaryKey.attrType} ${primaryKey.attrname})
|
||||
{
|
||||
return ${classname}Dao.select${className}ById(${primaryKey.attrname});
|
||||
return ${classname}Mapper.select${className}ById(${primaryKey.attrname});
|
||||
}
|
||||
|
||||
/**
|
||||
@ -41,7 +41,7 @@ public class ${className}ServiceImpl implements I${className}Service
|
||||
@Override
|
||||
public List<${className}> select${className}List(${className} ${classname})
|
||||
{
|
||||
return ${classname}Dao.select${className}List(${classname});
|
||||
return ${classname}Mapper.select${className}List(${classname});
|
||||
}
|
||||
|
||||
/**
|
||||
@ -53,7 +53,7 @@ public class ${className}ServiceImpl implements I${className}Service
|
||||
@Override
|
||||
public int insert${className}(${className} ${classname})
|
||||
{
|
||||
return ${classname}Dao.insert${className}(${classname});
|
||||
return ${classname}Mapper.insert${className}(${classname});
|
||||
}
|
||||
|
||||
/**
|
||||
@ -65,7 +65,7 @@ public class ${className}ServiceImpl implements I${className}Service
|
||||
@Override
|
||||
public int update${className}(${className} ${classname})
|
||||
{
|
||||
return ${classname}Dao.update${className}(${classname});
|
||||
return ${classname}Mapper.update${className}(${classname});
|
||||
}
|
||||
|
||||
/**
|
||||
@ -81,11 +81,11 @@ public class ${className}ServiceImpl implements I${className}Service
|
||||
int rows = 0;
|
||||
if (StringUtils.isNotNull(${primaryKey.attrname}))
|
||||
{
|
||||
rows = ${classname}Dao.update${className}(${classname});
|
||||
rows = ${classname}Mapper.update${className}(${classname});
|
||||
}
|
||||
else
|
||||
{
|
||||
rows = ${classname}Dao.insert${className}(${classname});
|
||||
rows = ${classname}Mapper.insert${className}(${classname});
|
||||
}
|
||||
return rows;
|
||||
}
|
||||
@ -99,7 +99,7 @@ public class ${className}ServiceImpl implements I${className}Service
|
||||
@Override
|
||||
public int delete${className}ById(${primaryKey.attrType} ${primaryKey.attrname})
|
||||
{
|
||||
return ${classname}Dao.delete${className}ById(${primaryKey.attrname});
|
||||
return ${classname}Mapper.delete${className}ById(${primaryKey.attrname});
|
||||
}
|
||||
|
||||
/**
|
||||
@ -111,7 +111,7 @@ public class ${className}ServiceImpl implements I${className}Service
|
||||
@Override
|
||||
public int batchDelete${className}(${primaryKey.attrType}[] ${primaryKey.attrname}s)
|
||||
{
|
||||
return ${classname}Dao.batchDelete${className}(${primaryKey.attrname}s);
|
||||
return ${classname}Mapper.batchDelete${className}(${primaryKey.attrname}s);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
package ${package}.domain;
|
||||
|
||||
import java.io.Serializable;
|
||||
import com.ruoyi.framework.web.page.PageDomain;
|
||||
import com.ruoyi.framework.web.domain.BaseEntity;
|
||||
#if(${hasBigDecimal})
|
||||
import java.math.BigDecimal;
|
||||
#end
|
||||
@ -12,7 +11,7 @@ import java.math.BigDecimal;
|
||||
* @author ${author}
|
||||
* @date ${datetime}
|
||||
*/
|
||||
public class ${className} extends PageDomain implements Serializable
|
||||
public class ${className} extends BaseEntity
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="${package}.dao.I${className}Dao">
|
||||
<mapper namespace="${package}.mapper.I${className}Mapper">
|
||||
|
||||
<resultMap type="${className}" id="${className}Result">
|
||||
#foreach ($column in $columns)
|
||||
@ -25,32 +25,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</select>
|
||||
|
||||
<insert id="insert${className}" parameterType="${className}"#if($primaryKey.extra == 'auto_increment') useGeneratedKeys="true" keyProperty="$primaryKey.attrname"#end>
|
||||
insert into ${tableName}
|
||||
(
|
||||
#foreach($column in $columns)
|
||||
#if($column.columnName != $primaryKey.columnName || $primaryKey.extra != 'auto_increment')
|
||||
$column.columnName#if($velocityCount != $columns.size()), #end
|
||||
#end
|
||||
#end
|
||||
)
|
||||
values
|
||||
(
|
||||
#foreach($column in $columns)
|
||||
#if($column.columnName != $primaryKey.columnName || $primaryKey.extra != 'auto_increment')
|
||||
#{$column.attrname}#if($velocityCount != $columns.size()), #end
|
||||
#end
|
||||
#end
|
||||
)
|
||||
insert into ${tableName} (
|
||||
#foreach($column in $columns)
|
||||
#if($column.columnName != $primaryKey.columnName || $primaryKey.extra != 'auto_increment')
|
||||
$column.columnName#if($velocityCount != $columns.size()), #end
|
||||
#end
|
||||
#end
|
||||
)
|
||||
values (
|
||||
#foreach($column in $columns)
|
||||
#if($column.columnName != $primaryKey.columnName || $primaryKey.extra != 'auto_increment')
|
||||
#{$column.attrname}#if($velocityCount != $columns.size()), #end
|
||||
#end
|
||||
#end
|
||||
)
|
||||
</insert>
|
||||
|
||||
<update id="update${className}" parameterType="${className}">
|
||||
update ${tableName}
|
||||
<set>
|
||||
#foreach($column in $columns)
|
||||
#if($column.columnName != $primaryKey.columnName)
|
||||
<if test="$column.attrname != null">`$column.columnName` = #{$column.attrname}#if($velocityCount != $columns.size()), #end</if>
|
||||
#end
|
||||
#end
|
||||
#foreach($column in $columns)
|
||||
#if($column.columnName != $primaryKey.columnName)
|
||||
<if test="$column.attrname != null">$column.columnName = #{$column.attrname}#if($velocityCount != $columns.size()), #end</if>
|
||||
#end
|
||||
#end
|
||||
</set>
|
||||
where ${primaryKey.columnName} = #{${primaryKey.attrname}}
|
||||
</update>
|
||||
|
Reference in New Issue
Block a user