若依3.2

master
RuoYi 6 years ago committed by Limy
parent 5974a99e6b
commit a01f80752b

@ -6,10 +6,17 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.config.Global; import com.ruoyi.common.config.Global;
import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.framework.config.ServerConfig;
import com.ruoyi.framework.util.FileUploadUtils;
/** /**
* *
@ -21,7 +28,21 @@ public class CommonController
{ {
private static final Logger log = LoggerFactory.getLogger(CommonController.class); private static final Logger log = LoggerFactory.getLogger(CommonController.class);
@RequestMapping("common/download") /**
*
*/
public static final String UPLOAD_PATH = "/profile/upload/";
@Autowired
private ServerConfig serverConfig;
/**
*
*
* @param fileName
* @param delete
*/
@GetMapping("common/download")
public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
{ {
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
@ -31,7 +52,8 @@ public class CommonController
response.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data"); response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;fileName=" + setFileDownloadHeader(request, realFileName)); response.setHeader("Content-Disposition",
"attachment;fileName=" + setFileDownloadHeader(request, realFileName));
FileUtils.writeBytes(filePath, response.getOutputStream()); FileUtils.writeBytes(filePath, response.getOutputStream());
if (delete) if (delete)
{ {
@ -44,6 +66,31 @@ public class CommonController
} }
} }
/**
*
*/
@PostMapping("/common/upload")
@ResponseBody
public AjaxResult uploadFile(MultipartFile file) throws Exception
{
try
{
// 上传文件路径
String filePath = Global.getUploadPath();
// 上传并返回新文件名称
String fileName = FileUploadUtils.upload(filePath, file);
String url = serverConfig.getUrl() + UPLOAD_PATH + fileName;
AjaxResult ajax = AjaxResult.success();
ajax.put("fileName", fileName);
ajax.put("url", url);
return ajax;
}
catch (Exception e)
{
return AjaxResult.error(e.getMessage());
}
}
public String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException public String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException
{ {
final String agent = request.getHeader("USER-AGENT"); final String agent = request.getHeader("USER-AGENT");

@ -181,4 +181,16 @@ public class SysRoleController extends BaseController
{ {
return prefix + "/tree"; return prefix + "/tree";
} }
/**
*
*/
@Log(title = "角色管理", businessType = BusinessType.UPDATE)
@RequiresPermissions("system:role:edit")
@PostMapping("/changeStatus")
@ResponseBody
public AjaxResult changeStatus(SysRole role)
{
return toAjax(roleService.changeStatus(role));
}
} }

@ -45,7 +45,7 @@ public class SysUserController extends BaseController
@Autowired @Autowired
private ISysPostService postService; private ISysPostService postService;
@Autowired @Autowired
private SysPasswordService passwordService; private SysPasswordService passwordService;
@ -225,4 +225,16 @@ public class SysUserController extends BaseController
{ {
return userService.checkEmailUnique(user); return userService.checkEmailUnique(user);
} }
/**
*
*/
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@RequiresPermissions("system:user:edit")
@PostMapping("/changeStatus")
@ResponseBody
public AjaxResult changeStatus(SysUser user)
{
return toAjax(userService.changeStatus(user));
}
} }

@ -17,32 +17,33 @@ spring:
username: username:
password: password:
# 初始连接数 # 初始连接数
initial-size: 10 initialSize: 5
# 最大连接池数量
max-active: 100
# 最小连接池数量 # 最小连接池数量
min-idle: 10 minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间 # 配置获取连接等待超时的时间
max-wait: 60000 maxWait: 60000
# 打开PSCache并且指定每个连接上PSCache的大小
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000 timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒 # 配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 300000 minEvictableIdleTimeMillis: 300000
validation-query: SELECT 1 FROM DUAL # 配置一个连接在池中最大生存的时间,单位是毫秒
test-while-idle: true maxEvictableIdleTimeMillis: 900000
test-on-borrow: false # 配置检测连接是否有效
test-on-return: false validationQuery: SELECT 1 FROM DUAL
stat-view-servlet: testWhileIdle: true
testOnBorrow: false
testOnReturn: false
statViewServlet:
enabled: true enabled: true
url-pattern: /monitor/druid/* url-pattern: /monitor/druid/*
filter: filter:
stat: stat:
# 慢SQL记录
log-slow-sql: true log-slow-sql: true
slow-sql-millis: 1000 slow-sql-millis: 1000
merge-sql: false merge-sql: true
wall: wall:
config: config:
multi-statement-allow: true multi-statement-allow: true

@ -3,9 +3,9 @@ ruoyi:
# 名称 # 名称
name: RuoYi name: RuoYi
# 版本 # 版本
version: 3.1.0 version: 3.2.0
# 版权年份 # 版权年份
copyrightYear: 2018 copyrightYear: 2019
# 文件上传路径 # 文件上传路径
profile: D:/profile/ profile: D:/profile/
# 获取ip地址开关 # 获取ip地址开关

@ -1,44 +1,35 @@
/** /**
* @author: Dennis Hernández * 基于bootstrap-table-mobile修改
* @webSite: http://djhvscf.github.io/Blog * 修正部分iPhone手机不显示卡片视图
* @version: v1.1.0 * Copyright (c) 2019 ruoyi
*/ */
!function ($) { !function ($) {
'use strict'; 'use strict';
var showHideColumns = function (that, checked) {
if (that.options.columnsHidden.length > 0 ) {
$.each(that.columns, function (i, column) {
if (that.options.columnsHidden.indexOf(column.field) !== -1) {
if (column.visible !== checked) {
that.toggleColumn($.fn.bootstrapTable.utils.getFieldIndex(that.columns, column.field), checked, true);
}
}
});
}
};
var resetView = function (that) { var resetView = function (that) {
if (that.options.height || that.options.showFooter) { if (that.options.height || that.options.showFooter) {
setTimeout(function(){ setTimeout(that.resetView(), 1);
that.resetView.call(that);
}, 1);
} }
}; };
// 判断是否 iphone
var isIPhone = function () {
let browserName = navigator.userAgent.toLowerCase();
return /(iphone)/i.test(browserName);
};
var changeView = function (that, width, height) { var changeView = function (that, width, height) {
if (that.options.minHeight) { if (that.options.minHeight) {
if ((width <= that.options.minWidth) && (height <= that.options.minHeight)) { if (checkValuesLessEqual(width, that.options.minWidth) && checkValuesLessEqual(height, that.options.minHeight)) {
conditionCardView(that); conditionCardView(that);
} else if ((width > that.options.minWidth) && (height > that.options.minHeight)) { } else if (checkValuesGreater(width, that.options.minWidth) && checkValuesGreater(height, that.options.minHeight)) {
conditionFullView(that); conditionFullView(that);
} }
} else { } else {
if (width <= that.options.minWidth) { if (checkValuesLessEqual(width, that.options.minWidth) || isIPhone()) {
conditionCardView(that); conditionCardView(that);
} else if (width > that.options.minWidth) { } else if (checkValuesGreater(width, that.options.minWidth)) {
conditionFullView(that); conditionFullView(that);
} }
} }
@ -46,14 +37,20 @@
resetView(that); resetView(that);
}; };
var checkValuesLessEqual = function (currentValue, targetValue) {
return currentValue <= targetValue;
};
var checkValuesGreater = function (currentValue, targetValue) {
return currentValue > targetValue;
};
var conditionCardView = function (that) { var conditionCardView = function (that) {
changeTableView(that, false); changeTableView(that, false);
showHideColumns(that, false);
}; };
var conditionFullView = function (that) { var conditionFullView = function (that) {
changeTableView(that, true); changeTableView(that, true);
showHideColumns(that, true);
}; };
var changeTableView = function (that, cardViewState) { var changeTableView = function (that, cardViewState) {
@ -61,27 +58,12 @@
that.toggleView(); that.toggleView();
}; };
var debounce = function(func,wait) {
var timeout;
return function() {
var context = this,
args = arguments;
var later = function() {
timeout = null;
func.apply(context,args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
};
$.extend($.fn.bootstrapTable.defaults, { $.extend($.fn.bootstrapTable.defaults, {
mobileResponsive: false, mobileResponsive: false,
minWidth: 562, minWidth: 562,
minHeight: undefined, minHeight: undefined,
heightThreshold: 100, // just slightly larger than mobile chrome's auto-hiding toolbar
checkOnInit: true, checkOnInit: true,
columnsHidden: [] toggled: false
}); });
var BootstrapTable = $.fn.bootstrapTable.Constructor, var BootstrapTable = $.fn.bootstrapTable.Constructor,
@ -98,39 +80,13 @@
return; return;
} }
if (this.options.minWidth < 100 && this.options.resizable) { var that = this;
console.log("The minWidth when the resizable extension is active should be greater or equal than 100"); $(window).resize(function () {
this.options.minWidth = 100; changeView(that, $(this).width(), $(this).height())
} });
var that = this,
old = {
width: $(window).width(),
height: $(window).height()
};
$(window).on('resize orientationchange',debounce(function (evt) {
// reset view if height has only changed by at least the threshold.
var height = $(this).height(),
width = $(this).width();
if (Math.abs(old.height - height) > that.options.heightThreshold || old.width != width) {
changeView(that, width, height);
old = {
width: width,
height: height
};
}
},200));
if (this.options.checkOnInit) { if (this.options.checkOnInit) {
var height = $(window).height(), changeView(this, $(window).width(), $(window).height());
width = $(window).width();
changeView(this, width, height);
old = {
width: width,
height: height
};
} }
}; };
}(jQuery); }(jQuery);

@ -1,7 +0,0 @@
/*
* bootstrap-table - v1.11.0 - 2016-07-02
* https://github.com/wenzhixin/bootstrap-table
* Copyright (c) 2016 zhixin wen
* Licensed MIT License
*/
!function(a){"use strict";var b=function(b,c){b.options.columnsHidden.length>0&&a.each(b.columns,function(d,e){-1!==b.options.columnsHidden.indexOf(e.field)&&e.visible!==c&&b.toggleColumn(a.fn.bootstrapTable.utils.getFieldIndex(b.columns,e.field),c,!0)})},c=function(a){(a.options.height||a.options.showFooter)&&setTimeout(function(){a.resetView.call(a)},1)},d=function(a,b,d){a.options.minHeight?b<=a.options.minWidth&&d<=a.options.minHeight?e(a):b>a.options.minWidth&&d>a.options.minHeight&&f(a):b<=a.options.minWidth?e(a):b>a.options.minWidth&&f(a),c(a)},e=function(a){g(a,!1),b(a,!1)},f=function(a){g(a,!0),b(a,!0)},g=function(a,b){a.options.cardView=b,a.toggleView()},h=function(a,b){var c;return function(){var d=this,e=arguments,f=function(){c=null,a.apply(d,e)};clearTimeout(c),c=setTimeout(f,b)}};a.extend(a.fn.bootstrapTable.defaults,{mobileResponsive:!1,minWidth:562,minHeight:void 0,heightThreshold:100,checkOnInit:!0,columnsHidden:[]});var i=a.fn.bootstrapTable.Constructor,j=i.prototype.init;i.prototype.init=function(){if(j.apply(this,Array.prototype.slice.apply(arguments)),this.options.mobileResponsive&&this.options.minWidth){this.options.minWidth<100&&this.options.resizable&&(console.log("The minWidth when the resizable extension is active should be greater or equal than 100"),this.options.minWidth=100);var b=this,c={width:a(window).width(),height:a(window).height()};if(a(window).on("resize orientationchange",h(function(){var e=a(this).height(),f=a(this).width();(Math.abs(c.height-e)>b.options.heightThreshold||c.width!=f)&&(d(b,f,e),c={width:f,height:e})},200)),this.options.checkOnInit){var e=a(window).height(),f=a(window).width();d(this,f,e),c={width:f,height:e}}}}}(jQuery);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

@ -0,0 +1,138 @@
/**
* layer
* Copyright (c) 2019 ruoyi
*/
html #layui_layer_skinmoonstylecss {
display: none;
position: absolute;
width: 1989px;
}
body .layer-ext-moon[type="dialog"] {
min-width: 320px;
}
body .layer-ext-moon-msg[type="dialog"]{min-width:200px;}
body .layer-ext-moon .layui-layer-title {
background: #F8F8F8;
color: #333;
font-size: 14px;
height: 42px;
line-height: 42px;
border-bottom: 1px solid #eee;
}
body .layer-ext-moon .layui-layer-content .layui-layer-ico {
height: 32px;
width: 32px;
top:18.5px;
}
body .layer-ext-moon .layui-layer-ico0 {
background: url(default.png) no-repeat -96px 0;
;
}
body .layer-ext-moon .layui-layer-ico1 {
background: url(default.png) no-repeat -224px 0;
;
}
body .layer-ext-moon .layui-layer-ico2 {
background: url(default.png) no-repeat -192px 0;
}
body .layer-ext-moon .layui-layer-ico3 {
background: url(default.png) no-repeat -160px 0;
}
body .layer-ext-moon .layui-layer-ico4 {
background: url(default.png) no-repeat -320px 0;
}
body .layer-ext-moon .layui-layer-ico5 {
background: url(default.png) no-repeat -288px 0;
}
body .layer-ext-moon .layui-layer-ico6 {
background: url(default.png) -256px 0;
}
body .layer-ext-moon .layui-layer-ico7 {
background: url(default.png) no-repeat -128px 0;
}
body .layer-ext-moon .layui-layer-setwin {
top: 15px;
right: 15px;
}
body .layer-ext-moon .layui-layer-setwin a {
width: 16px;
height: 16px;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-min cite:hover {
background-color: #56abe4;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-max {
background: url(default.png) no-repeat -80px 0;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-max:hover {
background: url(default.png) no-repeat -64px 0;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-maxmin {
background: url(default.png) no-repeat -32px 0;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-maxmin:hover {
background: url(default.png) no-repeat -16px 0;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-close1,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2 {
background: url(default.png) 0 0;
}
body .layer-ext-moon .layui-layer-setwin .layui-layer-close1:hover,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2:hover {
background: url(default.png) -48px 0;
}
body .layer-ext-moon .layui-layer-padding{padding-top: 24px;}
body .layer-ext-moon .layui-layer-btn {
text-align: right;
padding: 10px 15px 12px;
background: #f0f4f7;
border-top: 1px #c7c7c7 solid;
}
body .layer-ext-moon .layui-layer-btn a {
font-size: 12px;
font-weight: normal;
margin: 0 3px;
margin-right: 7px;
margin-left: 7px;
padding: 0 15px;
color: #fff;
border: 1px solid #0064b6;
background: #0071ce;
border-radius: 3px;
display: inline-block;
height: 30px;
line-height: 30px;
text-align: center;
vertical-align: middle;
background-repeat: no-repeat;
text-decoration: none;
outline: none;
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
body .layer-ext-moon .layui-layer-btn .layui-layer-btn0 {
background: #0071ce;
}
body .layer-ext-moon .layui-layer-btn .layui-layer-btn1 {
background: #fff;
color: #404a58;
border: 1px solid #c0c4cd;
border-radius: 3px;
}
body .layer-ext-moon .layui-layer-btn .layui-layer-btn2 {
background: #f60;
color: #fff;
border: 1px solid #f60;
border-radius: 3px;
}
body .layer-ext-moon .layui-layer-btn .layui-layer-btn3 {
background: #f00;
color: #fff;
border: 1px solid #f00;
border-radius: 3px;
}
body .layer-ext-moon .layui-layer-title span.layui-layer-tabnow{
height:47px;
}

@ -0,0 +1,822 @@
/*
*
* SKIN blue
* NAME - blue/green/purple/red/yellow
*
*/
/** 蓝色主题 skin-blue **/
.skin-blue .navbar {
background-color: #3c8dbc
}
.skin-blue .navbar .nav>li>a {
color: #fff
}
.skin-blue .navbar .nav>li>a:hover,
.skin-blue .navbar .nav>li>a:active,
.skin-blue .navbar .nav>li>a:focus,
.skin-blue .navbar .nav .open>a,
.skin-blue .navbar .nav .open>a:hover,
.skin-blue .navbar .nav .open>a:focus,
.skin-blue .navbar .nav>.active>a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6
}
.skin-blue .navbar .sidebar-toggle {
color: #fff
}
.skin-blue .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1)
}
.skin-blue .navbar .sidebar-toggle {
color: #fff
}
.skin-blue .navbar .sidebar-toggle:hover {
background-color: #367fa9
}
@media ( max-width :767px) {
.skin-blue .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1)
}
.skin-blue .navbar .dropdown-menu li a {
color: #fff
}
.skin-blue .navbar .dropdown-menu li a:hover {
background: #367fa9
}
}
.skin-blue .logo {
background-color: #367fa9;
color: #fff;
border-bottom: 0 solid transparent
}
.skin-blue .logo:hover {
background-color: #357ca5
}
.skin-blue li.user-header {
background-color: #3c8dbc
}
.skin-blue .content-header {
background: transparent
}
.skin-blue .wrapper,
.skin-blue .main-sidebar,
.skin-blue .left-side {
background-color: #222d32
}
.skin-blue .user-panel>.info,
.skin-blue .user-panel>.info>a {
color: #fff
}
.skin-blue .nav>li.header {
color: #4b646f;
background: #1a2226
}
.skin-blue .nav>li.active {
color: #fff;
background: #293846;
border-left: 3px solid #3c8dbc;
}
.skin-blue .nav>li.active:last-child {
border-left: none;
}
.skin-blue .nav>li>.treeview-menu {
margin: 0 1px;
background: #2c3b41
}
.skin-blue .sidebar a {
color: #b8c7ce
}
.skin-blue .sidebar a:hover {
text-decoration: none
}
.skin-blue .treeview-menu>li>a {
color: #8aa4af
}
.skin-blue .treeview-menu>li.active>a,
.skin-blue .treeview-menu>li>a:hover {
color: #fff
}
.skin-blue .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px
}
.skin-blue .sidebar-form input[type="text"],
.skin-blue .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px
}
.skin-blue .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px
}
.skin-blue .sidebar-form input[type="text"]:focus,
.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
background-color: #fff;
color: #666
}
.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
border-left-color: #fff
}
.skin-blue .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0
}
.skin-blue.layout-top-nav>.logo {
background-color: #3c8dbc;
color: #fff;
border-bottom: 0 solid transparent
}
.skin-blue.layout-top-nav>.logo:hover {
background-color: #3b8ab8
}
.skin-blue .content-tabs {
border-bottom: solid 2px #e7eaec;
}
.skin-blue.layout-top-nav>.logo {
background-color: #3c8dbc;
color: #fff;
border-bottom: 0 solid transparent
}
.skin-blue.layout-top-nav>.logo:hover {
background-color: #3b8ab8
}
/** 绿色主题 skin-green **/
.skin-green .navbar {
background-color: #00a65a;
}
.skin-green .content-tabs {
border-bottom: solid 2px #e7eaec;
}
.skin-green .navbar .nav>li>a {
color: #fff
}
.skin-green .navbar .nav>li>a:hover,
.skin-green .navbar .nav>li>a:active,
.skin-green .navbar .nav>li>a:focus,
.skin-green .navbar .nav .open>a,
.skin-green .navbar .nav .open>a:hover,
.skin-green .navbar .nav .open>a:focus,
.skin-green .navbar .nav>.active>a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6
}
.skin-green .navbar .sidebar-toggle {
color: #fff
}
.skin-green .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1)
}
.skin-green .navbar .sidebar-toggle {
color: #fff
}
.skin-green .navbar .sidebar-toggle:hover {
background-color: #008d4c
}
@media ( max-width :767px) {
.skin-green .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1)
}
.skin-green .navbar .dropdown-menu li a {
color: #fff
}
.skin-green .navbar .dropdown-menu li a:hover {
background: #008d4c
}
}
.skin-green .logo {
background-color: #008d4c;
color: #fff;
border-bottom: 0 solid transparent
}
.skin-green .logo:hover {
background-color: #008749
}
.skin-green li.user-header {
background-color: #00a65a
}
.skin-green .content-header {
background: transparent
}
.skin-green .wrapper,
.skin-green .main-sidebar,
.skin-green .left-side {
background-color: #222d32
}
.skin-green .user-panel>.info,
.skin-green .user-panel>.info>a {
color: #fff
}
.skin-green .nav>li.header {
color: #4b646f;
background: #1a2226;
}
.skin-green .nav>li.active {
color: #fff;
background: #293846;
border-left: 3px solid #00a65a;
}
.skin-green .nav>li.active:last-child {
border-left: none;
}
.skin-green .nav>li>.treeview-menu {
margin: 0 1px;
background: #2c3b41
}
.skin-green .sidebar a {
color: #b8c7ce
}
.skin-green .sidebar a:hover {
text-decoration: none
}
.skin-green .treeview-menu>li>a {
color: #8aa4af
}
.skin-green .treeview-menu>li.active>a,
.skin-green .treeview-menu>li>a:hover {
color: #fff
}
.skin-green .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px
}
.skin-green .sidebar-form input[type="text"],
.skin-green .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px
}
.skin-green .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px
}
.skin-green .sidebar-form input[type="text"]:focus,
.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
background-color: #fff;
color: #666
}
.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
border-left-color: #fff
}
.skin-green .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0
}
/** 红色主题 skin-red **/
.skin-red .navbar {
background-color: #dd4b39
}
.skin-red .navbar .nav>li>a {
color: #fff
}
.skin-red .navbar .nav>li>a:hover,
.skin-red .navbar .nav>li>a:active,
.skin-red .navbar .nav>li>a:focus,
.skin-red .navbar .nav .open>a,
.skin-red .navbar .nav .open>a:hover,
.skin-red .navbar .nav .open>a:focus,
.skin-red .navbar .nav>.active>a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6
}
.skin-red .navbar .sidebar-toggle {
color: #fff
}
.skin-red .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1)
}
.skin-red .navbar .sidebar-toggle {
color: #fff
}
.skin-red .navbar .sidebar-toggle:hover {
background-color: #d73925
}
@media ( max-width :767px) {
.skin-red .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1)
}
.skin-red .navbar .dropdown-menu li a {
color: #fff
}
.skin-red .navbar .dropdown-menu li a:hover {
background: #d73925
}
}
.skin-red .logo {
background-color: #d73925;
color: #fff;
border-bottom: 0 solid transparent
}
.skin-red .logo:hover {
background-color: #d33724
}
.skin-red li.user-header {
background-color: #dd4b39
}
.skin-red .content-header {
background: transparent
}
.skin-red .wrapper,
.skin-red .main-sidebar,
.skin-red .left-side {
background-color: #222d32
}
.skin-red .user-panel>.info,
.skin-red .user-panel>.info>a {
color: #fff
}
.skin-red .nav>li.header {
color: #4b646f;
background: #1a2226
}
.skin-red .nav>li.active {
color: #fff;
border-left: 3px solid #dd4b39;
background: #293846;
}
.skin-red .nav>li.active:last-child {
border-left: none;
}
.skin-red .content-tabs {
border-bottom: solid 2px #e7eaec;
}
.skin-red .nav>li>.treeview-menu {
margin: 0 1px;
background: #2c3b41
}
.skin-red .sidebar a {
color: #b8c7ce
}
.skin-red .sidebar a:hover {
text-decoration: none
}
.skin-red .treeview-menu>li>a {
color: #8aa4af
}
.skin-red .treeview-menu>li.active>a,
.skin-red .treeview-menu>li>a:hover {
color: #fff
}
.skin-red .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px
}
.skin-red .sidebar-form input[type="text"],
.skin-red .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px
}
.skin-red .sidebar-form input[type="text"] {
color: #fff;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px
}
.skin-red .sidebar-form input[type="text"]:focus,
.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
background-color: #fff;
color: #666
}
.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
border-left-color: #fff
}
.skin-red .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0
}
/** 黄色主题 skin-red **/
.skin-yellow .navbar {
background-color: #f39c12
}
.skin-yellow .navbar .nav>li>a {
color: #fff
}
.skin-yellow .navbar .nav>li>a:hover,
.skin-yellow .navbar .nav>li>a:active,
.skin-yellow .navbar .nav>li>a:focus,
.skin-yellow .navbar .nav .open>a,
.skin-yellow .navbar .nav .open>a:hover,
.skin-yellow .navbar .nav .open>a:focus,
.skin-yellow .navbar .nav>.active>a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6
}
.skin-yellow .navbar .sidebar-toggle {
color: #fff
}
.skin-yellow .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1)
}
.skin-yellow .navbar .sidebar-toggle {
color: #fff
}
.skin-yellow .navbar .sidebar-toggle:hover {
background-color: #e08e0b
}
@media ( max-width :767px) {
.skin-yellow .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1)
}
.skin-yellow .navbar .dropdown-menu li a {
color: #fff
}
.skin-yellow .navbar .dropdown-menu li a:hover {
background: #e08e0b
}
}
.skin-yellow .logo {
background-color: #e08e0b;
color: #fff;
border-bottom: 0 solid transparent
}
.skin-yellow .logo:hover {
background-color: #db8b0b
}
.skin-yellow li.user-header {
background-color: #f39c12
}
.skin-yellow .content-header {
background: transparent
}
.skin-yellow .wrapper,
.skin-yellow .main-sidebar,
.skin-yellow .left-side {
background-color: #222d32
}
.skin-yellow .user-panel>.info,
.skin-yellow .user-panel>.info>a {
color: #fff
}
.skin-yellow .nav>li.header {
color: #4b646f;
background: #1a2226
}
.skin-yellow .nav>li.active {
color: #fff;
background: #293846;
border-left: 3px solid #f39c12;
}
.skin-yellow .nav>li.active:last-child {
border-left: none;
}
.skin-yellow .content-tabs {
border-bottom: solid 2px #e7eaec;
}
.skin-yellow .nav>li>.treeview-menu {
margin: 0 1px;
background: #2c3b41
}
.skin-yellow .sidebar a {
color: #b8c7ce
}
.skin-yellow .sidebar a:hover {
text-decoration: none
}
.skin-yellow .treeview-menu>li>a {
color: #8aa4af
}
.skin-yellow .treeview-menu>li.active>a,
.skin-yellow .treeview-menu>li>a:hover {
color: #fff
}
.skin-yellow .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px
}
.skin-yellow .sidebar-form input[type="text"],
.skin-yellow .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px
}
.skin-yellow .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px
}
.skin-yellow .sidebar-form input[type="text"]:focus,
.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
background-color: #fff;
color: #666
}
.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
border-left-color: #fff
}
.skin-yellow .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0
}
/** 紫色主题 skin-purple **/
.skin-purple .navbar {
background-color: #605ca8
}
.skin-purple .navbar .nav>li>a {
color: #fff
}
.skin-purple .navbar .nav>li>a:hover,
.skin-purple .navbar .nav>li>a:active,
.skin-purple .navbar .nav>li>a:focus,
.skin-purple .navbar .nav .open>a,
.skin-purple .navbar .nav .open>a:hover,
.skin-purple .navbar .nav .open>a:focus,
.skin-purple .navbar .nav>.active>a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6
}
.skin-purple .navbar .sidebar-toggle {
color: #fff
}
.skin-purple .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1)
}
.skin-purple .navbar .sidebar-toggle {
color: #fff
}
.skin-purple .navbar .sidebar-toggle:hover {
background-color: #555299
}
@media ( max-width :767px) {
.skin-purple .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1)
}
.skin-purple .navbar .dropdown-menu li a {
color: #fff
}
.skin-purple .navbar .dropdown-menu li a:hover {
background: #555299
}
}
.skin-purple .logo {
background-color: #555299;
color: #fff;
border-bottom: 0 solid transparent
}
.skin-purple .logo:hover {
background-color: #545096
}
.skin-purple li.user-header {
background-color: #605ca8
}
.skin-purple .content-header {
background: transparent
}
.skin-purple .wrapper,
.skin-purple .main-sidebar,
.skin-purple .left-side {
background-color: #222d32
}
.skin-purple .user-panel>.info,
.skin-purple .user-panel>.info>a {
color: #fff
}
.skin-purple .nav>li.header {
color: #4b646f;
background: #1a2226
}
.skin-purple .nav>li.active {
color: #fff;
background: #293846;
border-left: 3px solid #605ca8;
}
.skin-purple .nav>li.active:last-child {
border-left: none;
}
.skin-purple .content-tabs {
border-bottom: solid 2px #e7eaec;
}
.skin-purple .nav>li>.treeview-menu {
margin: 0 1px;
background: #2c3b41
}
.skin-purple .sidebar a {
color: #b8c7ce
}
.skin-purple .sidebar a:hover {
text-decoration: none
}
.skin-purple .treeview-menu>li>a {
color: #8aa4af
}
.skin-purple .treeview-menu>li.active>a,
.skin-purple .treeview-menu>li>a:hover {
color: #fff
}
.skin-purple .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px
}
.skin-purple .sidebar-form input[type="text"],
.skin-purple .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px
}
.skin-purple .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px
}
.skin-purple .sidebar-form input[type="text"]:focus,
.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
background-color: #fff;
color: #666
}
.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
border-left-color: #fff
}
.skin-purple .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0
}

@ -47,28 +47,44 @@ a:focus {
} }
.nav.navbar-right>li>a { .nav.navbar-right>li>a {
color: #999c9e; color: #fff;
font-size: 14px;
height: 50px;
padding: 18px 15px;
} }
.nav>li.active>a { .nav>li.active>a {
color: #ffffff; color: #ffffff;
} }
.navbar-default .nav>li>a:hover, .navbar-default .nav>li>a:focus { .nav.navbar-right>li>a>.label {
background-color: #293846; position: absolute;
color: white; top: 9px;
right: 5px;
text-align: center;
font-size: 9px;
padding: 2px 4px;
line-height: .9;
}
.nav.navbar-right>li>a:hover {
background-color: #367fa9;
color: #fff;
} }
.nav .open>a, .nav .open>a:hover, .nav .open>a:focus { .navbar-default .nav>li>a:hover,
background: #fff; .navbar-default .nav>li>a:focus {
background-color: #293846;
color: white;
} }
.nav>li>a i { .nav .open>a,
margin-right: 6px; .nav .open>a:hover,
.nav .open>a:focus {
background: #fff;
} }
.navbar { .navbar {
border: 0; border: 0;
} }
.navbar-default { .navbar-default {
@ -77,12 +93,12 @@ a:focus {
position: relative; position: relative;
} }
.navbar-top-links li { .nav.navbar-top-links li {
display: inline-block; display: inline-block;
} }
.navbar-top-links li:last-child { .navbar-top-links li:last-child {
margin-right: 30px; margin-right: 16px;
} }
body.body-small .navbar-top-links li:last-child { body.body-small .navbar-top-links li:last-child {
@ -179,7 +195,7 @@ body.body-small .navbar-top-links li:last-child {
} }
.nav-header { .nav-header {
padding: 33px 25px; padding: 34px 25px 20px 25px;
background: url("patterns/header-profile.png") no-repeat; background: url("patterns/header-profile.png") no-repeat;
} }
@ -211,7 +227,7 @@ body.body-small .navbar-top-links li:last-child {
.minimalize-styl-2 { .minimalize-styl-2 {
padding: 4px 12px; padding: 4px 12px;
margin: 14px 5px 5px 20px; margin: 12px 5px 5px 15px;
font-size: 14px; font-size: 14px;
float: left; float: left;
} }
@ -368,10 +384,6 @@ body.mini-navbar .navbar-default .nav>li>.nav-second-level li a {
z-index: 2030; z-index: 2030;
} }
.navbar-fixed-top, .navbar-static-top {
background: #f3f3f4;
}
.fixed-nav #wrapper { .fixed-nav #wrapper {
padding-top: 60px; padding-top: 60px;
box-sizing: border-box; box-sizing: border-box;
@ -460,18 +472,6 @@ body.body-small.fixed-sidebar.mini-navbar .navbar-static-side {
.fixed-sidebar.mini-navbar .nav li.active { .fixed-sidebar.mini-navbar .nav li.active {
border-left-width: 0; border-left-width: 0;
} }
/*.fixed-sidebar.mini-navbar .nav li:hover>.nav-second-level, .canvas-menu.mini-navbar .nav li:hover>.nav-second-level*/
/*{*/
/*position: absolute;*/
/*left: 70px;*/
/*top: 40px;*/
/*background-color: #2f4050;*/
/*padding: 10px 10px 0 10px;*/
/*font-size: 12px;*/
/*display: block;*/
/*min-width: 140px;*/
/*border-radius: 2px;*/
/*}*/
/*伸缩菜单*/ /*伸缩菜单*/
.fixed-sidebar.mini-navbar .nav li:hover>a> span.nav-label { .fixed-sidebar.mini-navbar .nav li:hover>a> span.nav-label {
@ -485,7 +485,6 @@ body.body-small.fixed-sidebar.mini-navbar .navbar-static-side {
.fixed-sidebar.mini-navbar .nav li:hover>.nav-second-level { .fixed-sidebar.mini-navbar .nav li:hover>.nav-second-level {
top: 40px; top: 40px;
font-size: 12px; font-size: 12px;
/*padding: 10px 10px 0 10px;*/
background-color: #2f4050; background-color: #2f4050;
} }
@ -6567,391 +6566,24 @@ body.rtls .top-navigation .footer.fixed, body.rtls.top-navigation .footer.fixed
.rtls .ltr-support { .rtls .ltr-support {
direction: ltr; direction: ltr;
} }
/*
*
* This is style for skin config
* Use only in demo theme
*
*/
.skin-setttings .title {
background: #efefef;
text-align: center;
text-transform: uppercase;
font-weight: 600;
display: block;
padding: 10px 15px;
font-size: 12px;
}
.setings-item {
padding: 10px 30px;
}
.setings-item.nb {
border: none;
}
.setings-item.skin {
text-align: center;
}
.setings-item .switch {
float: right;
}
.skin-name a {
text-transform: uppercase;
}
.setings-item a {
color: #fff;
}
.default-skin, .blue-skin, .ultra-skin, .yellow-skin {
text-align: center;
}
.default-skin {
font-weight: 600;
background: #1ab394;
}
.default-skin:hover {
background: #199d82;
}
.blue-skin {
font-weight: 600;
background: url("patterns/header-profile-skin-blue.png") repeat scroll 0 0;
}
.blue-skin:hover {
background: #0d8ddb;
}
.yellow-skin {
font-weight: 600;
background: url("patterns/header-profile-skin-yellow.png") repeat scroll 0 100%;
}
.yellow-skin:hover {
background: #ce8735;
}
.content-tabs {
border-bottom: solid 2px #2f4050;
}
.page-tabs a { .page-tabs a {
color: #999; color: #999;
} }
.page-tabs a i { .page-tabs a i {
color: #ccc; color: #ccc;
margin-left: 2px;
font-size: 13px;
} }
.page-tabs a.active { .page-tabs a.active {
background: #2f4050; background: #eaedf1;
color: #a7b1c2; color: #23508e;
}
.page-tabs a.active:hover, .page-tabs a.active i:hover {
background: #293846;
color: #fff;
}
/*
*
* SKIN blue
* NAME - blue/purple
*
*/
.skin-blue .minimalize-styl-2 {
margin: 14px 5px 5px 30px;
}
.skin-blue .navbar-top-links li:last-child {
margin-right: 30px;
}
.skin-blue.fixed-nav .minimalize-styl-2 {
margin: 14px 5px 5px 15px;
}
.skin-blue .spin-icon {
background: #0e9aef !important;
}
.skin-blue .nav-header {
background: #0e9aef;
background: url('patterns/header-profile-skin-blue.png');
}
.skin-blue.mini-navbar .nav-second-level {
background: #3e495f;
}
.skin-blue .breadcrumb {
background: transparent;
}
.skin-blue .page-heading {
border: none;
}
.skin-blue .nav>li.active {
background: #3a4459;
}
.skin-blue .nav>li>a {
color: #9ea6b9;
}
.skin-blue .nav>li.active>a {
color: #fff;
}
.skin-blue .navbar-minimalize {
background: #0e9aef;
border-color: #0e9aef;
}
body.skin-blue {
background: #3e495f;
}
.skin-blue .navbar-static-top {
background: #ffffff;
}
.skin-blue .dashboard-header {
background: transparent;
border-bottom: none !important;
border-top: none;
padding: 20px 30px 10px 30px;
}
.fixed-nav.skin-blue .navbar-fixed-top {
background: #fff;
}
.skin-blue .wrapper-content {
padding: 30px 15px;
}
.skin-blue #page-wrapper {
background: #f4f6fa;
}
.skin-blue .ibox-title, .skin-blue .ibox-content {
border-width: 1px;
}
.skin-blue .ibox-content:last-child {
border-style: solid solid solid solid;
}
.skin-blue .nav>li.active {
border: none;
}
.skin-blue .nav-header {
padding: 35px 25px 25px 25px;
}
.skin-blue .nav-header a.dropdown-toggle {
color: #fff;
margin-top: 10px;
}
.skin-blue .nav-header a.dropdown-toggle .text-muted {
color: #fff;
opacity: 0.8;
}
.skin-blue .profile-element {
text-align: center;
} }
.page-tabs a.active:hover,
.skin-blue .img-circle { .page-tabs a.active i:hover {
border-radius: 5px; background: #eaedf1;
} color: #23508e;
.skin-blue .navbar-default .nav>li>a:hover, .skin-blue .navbar-default .nav>li>a:focus {
background: #39aef5;
color: #fff;
}
.skin-blue .nav.nav-tabs>li.active>a {
color: #555;
}
.skin-blue .content-tabs {
border-bottom: solid 2px #39aef5;
}
.skin-blue .nav.nav-tabs>li.active {
background: transparent;
}
.skin-blue .page-tabs a.active {
background: #39aef5;
color: #fff;
}
.skin-blue .page-tabs a.active:hover, .skin-blue .page-tabs a.active i:hover {
background: #0e9aef;
color: #fff;
}
/*
*
* SKIN Yellow
* NAME - Yellow/purple
*
*/
.skin-yellow .minimalize-styl-2 {
margin: 14px 5px 5px 30px;
}
.skin-yellow .navbar-top-links li:last-child {
margin-right: 30px;
}
.skin-yellow.fixed-nav .minimalize-styl-2 {
margin: 14px 5px 5px 15px;
}
.skin-yellow .spin-icon {
background: #ecba52 !important;
}
body.boxed-layout.skin-yellow #wrapper {
background: #3e2c42;
}
.skin-yellow .nav-header {
background: #ecba52;
background: url('patterns/header-profile-skin-yellow.png');
}
.skin-yellow.mini-navbar .nav-second-level {
background: #3e2c42;
}
.skin-yellow .breadcrumb {
background: transparent;
}
.skin-yellow .page-heading {
border: none;
}
.skin-yellow .nav>li.active {
background: #38283c;
}
.fixed-nav.skin-yellow .navbar-fixed-top {
background: #fff;
}
.skin-yellow .nav>li>a {
color: #948b96;
}
.skin-yellow .nav>li.active>a {
color: #fff;
}
.skin-yellow .navbar-minimalize {
background: #ecba52;
border-color: #ecba52;
}
body.skin-yellow {
background: #3e2c42;
}
.skin-yellow .navbar-static-top {
background: #ffffff;
}
.skin-yellow .dashboard-header {
background: transparent;
border-bottom: none !important;
border-top: none;
padding: 20px 30px 10px 30px;
}
.skin-yellow .wrapper-content {
padding: 30px 15px;
}
.skin-yellow #page-wrapper {
background: #f4f6fa;
}
.skin-yellow .ibox-title, .skin-yellow .ibox-content {
border-width: 1px;
}
.skin-yellow .ibox-content:last-child {
border-style: solid solid solid solid;
}
.skin-yellow .nav>li.active {
border: none;
}
.skin-yellow .nav-header {
padding: 35px 25px 25px 25px;
}
.skin-yellow .nav-header a.dropdown-toggle {
color: #fff;
margin-top: 10px;
}
.skin-yellow .nav-header a.dropdown-toggle .text-muted {
color: #fff;
opacity: 0.8;
}
.skin-yellow .profile-element {
text-align: center;
}
.skin-yellow .img-circle {
border-radius: 5px;
}
.skin-yellow .navbar-default .nav>li>a:hover, .skin-yellow .navbar-default .nav>li>a:focus {
background: #38283c;
color: #fff;
}
.skin-yellow .nav.nav-tabs>li.active>a {
color: #555;
}
.skin-yellow .nav.nav-tabs>li.active {
background: transparent;
}
.skin-yellow .content-tabs {
border-bottom: solid 2px #3e2c42;
}
.skin-yellow .nav.nav-tabs>li.active {
background: transparent;
}
.skin-yellow .page-tabs a.active {
background: #3e2c42;
color: #fff;
}
.skin-yellow .page-tabs a.active:hover, .skin-yellow .page-tabs a.active i:hover {
background: #38283c;
color: #fff;
} }
@media ( min-width : 768px) { @media ( min-width : 768px) {
@ -7279,7 +6911,8 @@ body.skin-yellow {
} }
.navbar-header { .navbar-header {
width: 60%; width: 10%;
height: 50px;
} }
.bs-glyphicons { .bs-glyphicons {
@ -7347,3 +6980,99 @@ body.skin-yellow {
border-color: #cccccc!important; border-color: #cccccc!important;
} }
.folder-list li.active a {
color: #2791df;
background: #f5f5f5;
}
.nav .logo {
background-color: #367fa9;
color: #fff;
border-bottom: 0 solid transparent;
-webkit-transition: width .3s ease-in-out;
-o-transition: width .3s ease-in-out;
transition: width .3s ease-in-out;
display: block;
height: 50px;
font-size: 20px;
line-height: 50px;
text-align: center;
width: 220px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
padding: 0 15px;
font-weight: 300;
overflow: hidden
}
.logo-mini {
display: none;
}
.logo-lg {
display: block;
}
.roleList {
color: #d5d5d5;
margin-right: 10px;
padding-top: 10px;
line-height: 1;
white-space: nowrap;
overflow: hidden;
width: 110px;
}
.sidebar-collapse .user-panel {
white-space: nowrap;
position: relative;
width: 100%;
padding: 15px;
overflow: hidden;
}
.sidebar-collapse .user-panel .image>img {
width: 100%;
max-width: 45px;
height: auto;
}
.sidebar-collapse .user-panel>.info {
padding: 5px 5px 5px 15px;
line-height: 1;
position: absolute;
left: 55px;
}
.sidebar-collapse .user-panel>.info a {
color: #fff;
font-size: 12px;
}
.sidebar-collapse .user-panel>.info>p {
font-weight: 600;
margin-bottom: 9px;
color: #fff;
font-size: 12px;
}
.user-panel>.info>a>.fa,
.user-panel>.info>a>.ion,
.user-panel>.info>a>.glyphicon {
margin-right: 3px;
}
.nav>li:hover .dropdown-menu {
display: block;
}
#content-main.max {
height: calc(100% - 110px);
overflow: hidden;
width: 100%;
height: 100%;
left: 0px;
position: absolute;
top: 0px;
z-index: 9998;
margin: 0;
}

@ -1,6 +1,6 @@
/** /**
* css * css
* Copyright (c) 2018 ruoyi * Copyright (c) 2019 ruoyi
*/ */
/** 基础通用 **/ /** 基础通用 **/
@ -13,6 +13,18 @@
.pb5 { .pb5 {
padding-bottom: 5px; padding-bottom: 5px;
} }
.mt5 {
margin-top: 5px;
}
.mr5 {
margin-right: 5px;
}
.mb5 {
margin-bottom: 5px;
}
.ml5 {
margin-left: 5px;
}
.mt10 { .mt10 {
margin-top: 10px; margin-top: 10px;
} }
@ -38,6 +50,14 @@
margin-left: 20px; margin-left: 20px;
} }
/** 弹层组件 禁用样式 **/
.layer-disabled {
border: 1px #dedede solid !important;
background-color: #f1f1f1 !important;
color: #333 !important;
pointer-events: none;
}
/** 用户管理 样式布局 **/ /** 用户管理 样式布局 **/
.box { .box {
position: relative; position: relative;
@ -481,3 +501,35 @@ label {
display: none; display: none;
color: #ccc; color: #ccc;
} }
.navbar-right > .user-menu > .dropdown-menu {
border-top-right-radius:0;
border-top-left-radius:0;
padding:1px 0 0 0;
border-top-width:0;
width:138px;
}
.navbar-right > .user-menu .user-image {
float:left;
width:27px;
height:27px;
border-radius:50%;
margin-right:8px;
margin-top:-3px;
}
@media (max-width:767px) {
.navbar-right > .user-menu .user-image {
float:none;
margin-right:0;
margin-top:-8px;
line-height:10px;
}
}.dropdown-menu > li > a > .glyphicon,.dropdown-menu > li > a > .fa,.dropdown-menu > li > a > .ion {
margin-right:10px;
}
.dropdown-menu > li > a:hover {
background-color:#e1e3e9;
color:#333;
}
.dropdown-menu > .divider {
background-color:#eee;
}

@ -1,6 +1,12 @@
/** /**
* 菜单处理 * 首页方法封装处理
* Copyright (c) 2019 ruoyi
*/ */
layer.config({
extend: 'moon/style.css',
skin: 'layer-ext-moon'
});
$(function() { $(function() {
// MetsiMenu // MetsiMenu
$('#side-menu').metisMenu(); $('#side-menu').metisMenu();
@ -45,6 +51,7 @@ function() {
if ($(this).width() < 769) { if ($(this).width() < 769) {
$('body').addClass('mini-navbar'); $('body').addClass('mini-navbar');
$('.navbar-static-side').fadeIn(); $('.navbar-static-side').fadeIn();
$(".sidebar-collapse .logo").addClass("hide");
} }
}); });
@ -55,12 +62,14 @@ function NavToggle() {
function SmoothlyMenu() { function SmoothlyMenu() {
if (!$('body').hasClass('mini-navbar')) { if (!$('body').hasClass('mini-navbar')) {
$('#side-menu').hide(); $('#side-menu').hide();
$(".sidebar-collapse .logo").removeClass("hide");
setTimeout(function() { setTimeout(function() {
$('#side-menu').fadeIn(500); $('#side-menu').fadeIn(500);
}, },
100); 100);
} else if ($('body').hasClass('fixed-sidebar')) { } else if ($('body').hasClass('fixed-sidebar')) {
$('#side-menu').hide(); $('#side-menu').hide();
$(".sidebar-collapse .logo").addClass("hide");
setTimeout(function() { setTimeout(function() {
$('#side-menu').fadeIn(500); $('#side-menu').fadeIn(500);
}, },

@ -1,8 +1,7 @@
/** /**
* 通用方法封装处理 * 通用方法封装处理
* Copyright (c) 2018 ruoyi * Copyright (c) 2019 ruoyi
*/ */
$(function() { $(function() {
// select2复选框事件绑定 // select2复选框事件绑定
if ($.fn.select2 !== undefined) { if ($.fn.select2 !== undefined) {
@ -191,3 +190,7 @@ $.ajaxSetup({
} }
} }
}); });
layer.config({
extend: 'moon/style.css',
skin: 'layer-ext-moon'
});

@ -1,6 +1,6 @@
/** /**
* 通用js方法封装处理 * 通用js方法封装处理
* Copyright (c) 2018 ruoyi * Copyright (c) 2019 ruoyi
*/ */
(function ($) { (function ($) {
$.extend({ $.extend({
@ -18,6 +18,7 @@
_sortName = $.common.isEmpty(options.sortName) ? "" : options.sortName; _sortName = $.common.isEmpty(options.sortName) ? "" : options.sortName;
_striped = $.common.isEmpty(options.striped) ? false : options.striped; _striped = $.common.isEmpty(options.striped) ? false : options.striped;
_escape = $.common.isEmpty(options.escape) ? false : options.escape; _escape = $.common.isEmpty(options.escape) ? false : options.escape;
_showFooter = $.common.isEmpty(options.showFooter) ? false : options.showFooter;
$('#bootstrap-table').bootstrapTable({ $('#bootstrap-table').bootstrapTable({
url: options.url, // 请求后台的URL* url: options.url, // 请求后台的URL*
contentType: "application/x-www-form-urlencoded", // 编码类型 contentType: "application/x-www-form-urlencoded", // 编码类型
@ -33,6 +34,7 @@
pageSize: 10, // 每页的记录行数(* pageSize: 10, // 每页的记录行数(*
pageList: [10, 25, 50], // 可供选择的每页的行数(* pageList: [10, 25, 50], // 可供选择的每页的行数(*
escape: _escape, // 转义HTML字符串 escape: _escape, // 转义HTML字符串
showFooter: _showFooter, // 是否显示表尾
iconSize: 'outline', // 图标大小undefined默认的按钮尺寸 xs超小按钮sm小按钮lg大按钮 iconSize: 'outline', // 图标大小undefined默认的按钮尺寸 xs超小按钮sm小按钮lg大按钮
toolbar: '#toolbar', // 指定工作栏 toolbar: '#toolbar', // 指定工作栏
sidePagination: "server", // 启用服务端分页 sidePagination: "server", // 启用服务端分页
@ -121,7 +123,7 @@
$.form.reset(currentId); $.form.reset(currentId);
layer.open({ layer.open({
type: 1, type: 1,
area: ['400px'], area: ['400px', '230px'],
fix: false, fix: false,
//不固定 //不固定
maxmin: true, maxmin: true,
@ -138,12 +140,11 @@
return false; return false;
} }
var index = layer.load(2, {shade: false}); var index = layer.load(2, {shade: false});
var url = prefix + "/importData";
var formData = new FormData(); var formData = new FormData();
formData.append("file", $('#file')[0].files[0]); formData.append("file", $('#file')[0].files[0]);
formData.append("updateSupport", $("input[name='updateSupport']").is(':checked')); formData.append("updateSupport", $("input[name='updateSupport']").is(':checked'));
$.ajax({ $.ajax({
url: url, url: $.table._option.importUrl,
data: formData, data: formData,
cache: false, cache: false,
contentType: false, contentType: false,
@ -466,6 +467,14 @@
}); });
layer.full(index); layer.full(index);
}, },
// 禁用按钮
disable: function() {
$("a[class*=layui-layer-btn]", window.parent.document).addClass("layer-disabled");
},
// 启用按钮
enable: function() {
$("a[class*=layui-layer-btn]", window.parent.document).removeClass("layer-disabled");
},
// 打开遮罩层 // 打开遮罩层
loading: function (message) { loading: function (message) {
$.blockUI({ message: '<div class="loaderbox"><div class="loading-activity"></div> ' + message + '</div>' }); $.blockUI({ message: '<div class="loaderbox"><div class="loading-activity"></div> ' + message + '</div>' });
@ -485,12 +494,14 @@
operate: { operate: {
// 提交数据 // 提交数据
submit: function(url, type, dataType, data) { submit: function(url, type, dataType, data) {
$.modal.loading("正在处理中,请稍后...");
var config = { var config = {
url: url, url: url,
type: type, type: type,
dataType: dataType, dataType: dataType,
data: data, data: data,
beforeSend: function () {
$.modal.loading("正在处理中,请稍后...");
},
success: function(result) { success: function(result) {
$.operate.ajaxSuccess(result); $.operate.ajaxSuccess(result);
} }
@ -608,12 +619,15 @@
}, },
// 保存信息 // 保存信息
save: function(url, data) { save: function(url, data) {
$.modal.loading("正在处理中,请稍后...");
var config = { var config = {
url: url, url: url,
type: "post", type: "post",
dataType: "json", dataType: "json",
data: data, data: data,
beforeSend: function () {
$.modal.loading("正在处理中,请稍后...");
$.modal.disable();
},
success: function(result) { success: function(result) {
$.operate.successCallback(result); $.operate.successCallback(result);
} }
@ -657,6 +671,7 @@
$.modal.alertError(result.msg); $.modal.alertError(result.msg);
} }
$.modal.closeLoading(); $.modal.closeLoading();
$.modal.enable();
} }
}, },
// 校验封装处理 // 校验封装处理

@ -22,7 +22,7 @@
<!-- bootstrap-table 表格插件 --> <!-- bootstrap-table 表格插件 -->
<script th:src="@{/ajax/libs/bootstrap-table/bootstrap-table.min.js}"></script> <script th:src="@{/ajax/libs/bootstrap-table/bootstrap-table.min.js}"></script>
<script th:src="@{/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js}"></script> <script th:src="@{/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js}"></script>
<script th:src="@{/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js}"></script> <script th:src="@{/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js}"></script>
<script th:src="@{/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.min.js}"></script> <script th:src="@{/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.min.js}"></script>
<!-- jquery-validate 表单验证插件 --> <!-- jquery-validate 表单验证插件 -->
<script th:src="@{/ajax/libs/validate/jquery.validate.min.js}"></script> <script th:src="@{/ajax/libs/validate/jquery.validate.min.js}"></script>
@ -38,8 +38,8 @@
<script th:src="@{/ajax/libs/iCheck/icheck.min.js}"></script> <script th:src="@{/ajax/libs/iCheck/icheck.min.js}"></script>
<script th:src="@{/ajax/libs/layer/layer.min.js}"></script> <script th:src="@{/ajax/libs/layer/layer.min.js}"></script>
<script th:src="@{/ajax/libs/layui/layui.js}"></script> <script th:src="@{/ajax/libs/layui/layui.js}"></script>
<script th:src="@{/ruoyi/js/common.js?v=3.1.0}"></script> <script th:src="@{/ruoyi/js/common.js?v=3.2.0}"></script>
<script th:src="@{/ruoyi/js/ry-ui.js?v=3.1.0}"></script> <script th:src="@{/ruoyi/js/ry-ui.js?v=3.2.0}"></script>
<script src="http://tajs.qq.com/stats?sId=62048022"></script> <script src="http://tajs.qq.com/stats?sId=62048022"></script>
<script th:inline="javascript"> var ctx = [[@{/}]]; </script> <script th:inline="javascript"> var ctx = [[@{/}]]; </script>
</div> </div>

@ -15,7 +15,8 @@
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/> <link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
<link th:href="@{/css/animate.css}" rel="stylesheet"/> <link th:href="@{/css/animate.css}" rel="stylesheet"/>
<link th:href="@{/css/style.css}" rel="stylesheet"/> <link th:href="@{/css/style.css}" rel="stylesheet"/>
<link th:href="@{/ruoyi/css/ry-ui.css?v=3.1.0}" rel="stylesheet"/> <link th:href="@{/css/skins.css}" rel="stylesheet"/>
<link th:href="@{/ruoyi/css/ry-ui.css?v=3.2.0}" rel="stylesheet"/>
<style type="text/css"> <style type="text/css">
.nav > li:hover .dropdown-menu {display: block;} .nav > li:hover .dropdown-menu {display: block;}
#content-main.max { height: calc(100% - 110px); overflow: hidden; width: 100%; height: 100%; left: 0px; position: absolute; top: 0px; z-index: 9998; margin: 0; } #content-main.max { height: calc(100% - 110px); overflow: hidden; width: 100%; height: 100%; left: 0px; position: absolute; top: 0px; z-index: 9998; margin: 0; }
@ -31,19 +32,24 @@
</div> </div>
<div class="sidebar-collapse"> <div class="sidebar-collapse">
<ul class="nav" id="side-menu"> <ul class="nav" id="side-menu">
<li class="nav-header"> <li class="logo">
<div class="dropdown profile-element"> <span> <span class="logo-lg">RuoYi</span>
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{/profile/avatar/} + ${user.avatar}" alt="image" class="img-circle" height="60" width="60"/></span> </li>
<a data-toggle="dropdown" class="dropdown-toggle" href="#"> <li>
<span class="clear"><span class="block m-t-xs"><strong class="font-bold" th:text="${user.userName}">用户</strong></span> <div class="user-panel">
<span class="text-muted text-xs block"><span th:text="${user.dept?.deptName}">部门</span> <b class="caret"></b></span> </span> </a> <a class="menuItem" title="个人中心" th:href="@{/system/user/profile}">
<ul class="dropdown-menu animated fadeInRight m-t-xs"> <div class="hide" th:text="个人中心"></div>
<li><a class="menuItem" th:href="@{/system/user/profile}">个人信息</a></li> <div class="pull-left image">
<li class="divider"></li> <img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{/profile/avatar/} + ${user.avatar}" class="img-circle" alt="User Image">
<li><a th:href="@{logout}">退出</a></li> </div>
</ul> </a>
</div> <div class="pull-left info">
</li> <p>[[${user.loginName}]]</p>
<a href="#"><i class="fa fa-circle text-success"></i> 在线</a>
<a th:href="@{logout}" style="padding-left:5px;"><i class="fa fa-sign-out text-danger"></i> 注销</a>
</div>
</div>
</li>
<li class="active"> <li class="active">
<a href="index.html"><i class="fa fa-home"></i> <span class="nav-label">主页</span> <span class="fa arrow"></span></a> <a href="index.html"><i class="fa fa-home"></i> <span class="nav-label">主页</span> <span class="fa arrow"></span></a>
<ul class="nav nav-second-level"> <ul class="nav nav-second-level">
@ -74,20 +80,35 @@
<!--右侧部分开始--> <!--右侧部分开始-->
<div id="page-wrapper" class="gray-bg dashbard-1"> <div id="page-wrapper" class="gray-bg dashbard-1">
<div class="row border-bottom"> <div class="row border-bottom">
<nav class="navbar navbar-static-top" role="navigation" <nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">
style="margin-bottom: 0">
<div class="navbar-header"> <div class="navbar-header">
<a class="navbar-minimalize minimalize-styl-2" style="color:#FFF;" href="#" title="收起菜单">
<a class="navbar-minimalize minimalize-styl-2 btn btn-default " href="#" title="收起菜单">
<i class="fa fa-bars"></i> <i class="fa fa-bars"></i>
</a> </a>
</div> </div>
<ul class="nav navbar-top-links navbar-right welcome-message"> <ul class="nav navbar-top-links navbar-right welcome-message">
<li> <li><a title="全屏显示" id="fullScreen"><i class="fa fa-arrows-alt"></i> 全屏显示</a></li>
<span class="m-r-sm text-muted">欢迎来到若依管理后台.</span> <li class="dropdown user-menu">
</li> <a href="javascript:" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown">
<li><a id="fullScreen"><i class="fa fa-arrows-alt"></i>全屏</a></li> <img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{/profile/avatar/} + ${user.avatar}" class="user-image">
<li><a th:href="@{logout}"><i class="fa fa-sign-out"></i>退出</a></li> <span class="hidden-xs">[[${user.userName}]]</span>
</a>
<ul class="dropdown-menu">
<li class="mt5">
<a th:href="@{/system/user/profile}" class="menuItem">
<i class="fa fa-user"></i> 个人中心</a>
</li>
<li>
<a onclick="resetPwd()" class="menuItem">
<i class="fa fa-key"></i> 修改密码</a>
</li>
<li class="divider"></li>
<li>
<a th:href="@{logout}">
<i class="fa fa-sign-out"></i> 退出登录</a>
</li>
</ul>
</li>
</ul> </ul>
</nav> </nav>
</div> </div>
@ -137,8 +158,16 @@
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script> <script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
<script th:src="@{/ajax/libs/layer/layer.min.js}"></script> <script th:src="@{/ajax/libs/layer/layer.min.js}"></script>
<script src="http://tajs.qq.com/stats?sId=62048022"></script> <script src="http://tajs.qq.com/stats?sId=62048022"></script>
<script th:src="@{/ruoyi/js/ry-ui.js?v=3.1.0}"></script> <script th:src="@{/ruoyi/js/ry-ui.js?v=3.2.0}"></script>
<script th:src="@{/ruoyi/index.js}"></script> <script th:src="@{/ruoyi/index.js}"></script>
<script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script> <script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script>
<script th:inline="javascript">
var ctx = [[@{/}]];
/*用户管理-重置密码*/
function resetPwd() {
var url = ctx + 'system/user/profile/resetPwd';
$.modal.open("重置密码", url, '800', '500');
}
</script>
</body> </body>
</html> </html>

@ -11,7 +11,7 @@
<link href="../static/css/font-awesome.min.css" th:href="@{css/font-awesome.min.css}" rel="stylesheet"/> <link href="../static/css/font-awesome.min.css" th:href="@{css/font-awesome.min.css}" rel="stylesheet"/>
<link href="../static/css/style.css" th:href="@{css/style.css}" rel="stylesheet"/> <link href="../static/css/style.css" th:href="@{css/style.css}" rel="stylesheet"/>
<link href="../static/css/login.min.css" th:href="@{css/login.min.css}" rel="stylesheet"/> <link href="../static/css/login.min.css" th:href="@{css/login.min.css}" rel="stylesheet"/>
<link href="../static/ruoyi/css/ry-ui.css" th:href="@{/ruoyi/css/ry-ui.css?v=3.1.0}" rel="stylesheet"/> <link href="../static/ruoyi/css/ry-ui.css" th:href="@{/ruoyi/css/ry-ui.css?v=3.2.0}" rel="stylesheet"/>
<!--[if lt IE 9]> <!--[if lt IE 9]>
<meta http-equiv="refresh" content="0;ie.html" /> <meta http-equiv="refresh" content="0;ie.html" />
<![endif]--> <![endif]-->
@ -83,7 +83,7 @@
<script src="../static/ajax/libs/layer/layer.min.js" th:src="@{/ajax/libs/layer/layer.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/blockUI/jquery.blockUI.js" th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script> <script src="../static/ajax/libs/blockUI/jquery.blockUI.js" th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
<script src="http://tajs.qq.com/stats?sId=62048022"></script> <script src="http://tajs.qq.com/stats?sId=62048022"></script>
<script src="../static/ruoyi/js/ry-ui.js" th:src="@{/ruoyi/js/ry-ui.js?v=3.1.0}"></script> <script src="../static/ruoyi/js/ry-ui.js" th:src="@{/ruoyi/js/ry-ui.js?v=3.2.0}"></script>
<script src="../static/ruoyi/login.js" th:src="@{/ruoyi/login.js}"></script> <script src="../static/ruoyi/login.js" th:src="@{/ruoyi/login.js}"></script>
</body> </body>
</html> </html>

@ -94,13 +94,53 @@
<div class="ibox-content no-padding"> <div class="ibox-content no-padding">
<div class="panel-body"> <div class="panel-body">
<div class="panel-group" id="version"> <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="#v32">v3.2.0</a><code class="pull-right">2019.01.18</code>
</h5>
</div>
<div id="v32" class="panel-collapse collapse in">
<div class="panel-body">
<ol>
<li>部门修改时不允许选择最后节点</li>
<li>修复部门菜单排序字段无效</li>
<li>修复光驱磁盘导致服务监控异常</li>
<li>登录界面去除check插件</li>
<li>验证码文本字符间距修正</li>
<li>升级SpringBoot到最新版本2.1.1</li>
<li>升级MYSQL驱动</li>
<li>修正登录必填项位置偏移</li>
<li>Session会话检查优化</li>
<li>Excel注解支持多级获取</li>
<li>新增序列号生成方法</li>
<li>修复WAR部署tomcat退出线程异常</li>
<li>全屏操作增加默认确认/关闭</li>
<li>修复个人信息可能导致漏洞</li>
<li>字典数据根据下拉选择新增类型</li>
<li>升级Summernote到最新版本v0.8.11</li>
<li>新增用户数据导入</li>
<li>首页主题样式更换</li>
<li>layer扩展主题更换</li>
<li>用户管理移动端默认隐藏左侧布局</li>
<li>详细信息弹出层显示在顶层</li>
<li>表格支持切换状态(用户/角色/定时任务)</li>
<li>Druid数据源支持配置继承</li>
<li>修正部分iPhone手机端表格适配问题</li>
<li>新增防止重复提交表单方法</li>
<li>新增表格数据统计汇总方法</li>
<li>支持富文本上传图片文件</li>
</ol>
</div>
</div>
</div>
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h5 class="panel-title"> <h5 class="panel-title">
<a data-toggle="collapse" data-parent="#version" href="#v31">v3.1.0</a><code class="pull-right">2018.12.03</code> <a data-toggle="collapse" data-parent="#version" href="#v31">v3.1.0</a><code class="pull-right">2018.12.03</code>
</h5> </h5>
</div> </div>
<div id="v31" class="panel-collapse collapse in"> <div id="v31" class="panel-collapse collapse">
<div class="panel-body"> <div class="panel-body">
<ol> <ol>
<li>新增内网不获取IP地址</li> <li>新增内网不获取IP地址</li>

@ -107,12 +107,12 @@
title: '执行表达式' title: '执行表达式'
}, },
{ {
field: 'status', visible: statusFlag == 'hidden' ? false : true,
title: '任务状态', title: '任务状态',
align: 'center', align: 'center',
formatter: function(value, row, index) { formatter: function (value, row, index) {
return $.table.selectDictLabel(datas, value); return statusTools(row);
} }
}, },
{ {
field: 'createTime', field: 'createTime',
@ -124,7 +124,6 @@
align: 'center', align: 'center',
formatter: function(value, row, index) { formatter: function(value, row, index) {
var actions = []; var actions = [];
actions.push(statusTools(row));
actions.push('<a class="btn btn-primary btn-xs ' + statusFlag + '" href="#" onclick="run(\'' + row.jobId + '\')"><i class="fa fa-play-circle-o"></i> 执行</a> '); actions.push('<a class="btn btn-primary btn-xs ' + statusFlag + '" href="#" onclick="run(\'' + row.jobId + '\')"><i class="fa fa-play-circle-o"></i> 执行</a> ');
actions.push('<a class="btn btn-warning btn-xs ' + detailFlag + '" href="#" onclick="$.operate.detail(\'' + row.jobId + '\')"><i class="fa fa-search"></i>详细</a> '); actions.push('<a class="btn btn-warning btn-xs ' + detailFlag + '" href="#" onclick="$.operate.detail(\'' + row.jobId + '\')"><i class="fa fa-search"></i>详细</a> ');
return actions.join(''); return actions.join('');
@ -133,37 +132,38 @@
}; };
$.table.init(options); $.table.init(options);
}); });
/* 调度任务状态显示 */
function statusTools(row) { function statusTools(row) {
if (row.status == 1) { if (row.status == 1) {
return '<a class="btn btn-info btn-xs ' + statusFlag + '" href="#" onclick="start(\'' + row.jobId + '\')"><i class="fa fa-play"></i>启用</a> '; return '<i class=\"fa fa-toggle-off text-info fa-2x\" onclick="start(\'' + row.jobId + '\')"></i> ';
} else { } else {
return '<a class="btn btn-danger btn-xs ' + statusFlag + '" href="#" onclick="stop(\'' + row.jobId + '\')"><i class="fa fa-pause"></i>暂停</a> '; return '<i class=\"fa fa-toggle-on text-info fa-2x\" onclick="stop(\'' + row.jobId + '\')"></i> ';
} }
} }
/*立即执行一次*/ /* 立即执行一次 */
function run(jobId) { function run(jobId) {
$.modal.confirm("确认要立即执行任务吗?", function() { $.modal.confirm("确认要立即执行任务吗?", function() {
$.operate.post(prefix + "/run", { "jobId": jobId}); $.operate.post(prefix + "/run", { "jobId": jobId});
}) })
} }
/*调度任务-停用*/ /* 调度任务-停用 */
function stop(jobId) { function stop(jobId) {
$.modal.confirm("确认要停用任务吗?", function() { $.modal.confirm("确认要停用任务吗?", function() {
$.operate.post(prefix + "/changeStatus", { "jobId": jobId, "status": 1 }); $.operate.post(prefix + "/changeStatus", { "jobId": jobId, "status": 1 });
}) })
} }
/*调度任务-启用*/ /* 调度任务-启用 */
function start(jobId) { function start(jobId) {
$.modal.confirm("确认要启用任务吗?", function() { $.modal.confirm("确认要启用任务吗?", function() {
$.operate.post(prefix + "/changeStatus", { "jobId": jobId, "status": 0 }); $.operate.post(prefix + "/changeStatus", { "jobId": jobId, "status": 0 });
}) })
} }
//调度日志查询 /* 调度日志查询 */
function jobLog(id) { function jobLog(id) {
var url = ctx + 'monitor/jobLog'; var url = ctx + 'monitor/jobLog';
createMenuItem(url, "调度日志"); createMenuItem(url, "调度日志");

@ -47,8 +47,38 @@
$('.summernote').summernote({ $('.summernote').summernote({
height : '220px', height : '220px',
lang : 'zh-CN' lang : 'zh-CN',
callbacks: {
onImageUpload: function (files) {
sendFile(files[0], this);
}
}
}); });
// 上传文件
function sendFile(file, obj) {
var data = new FormData();
data.append("file", file);
$.ajax({
type: "POST",
url: ctx + "common/upload",
data: data,
cache: false,
contentType: false,
processData: false,
dataType: 'json',
success: function(result) {
if (result.code == web_status.SUCCESS) {
$(obj).summernote('editor.insertImage', result.url, result.fileName);
} else {
$.modal.alertError(result.msg);
}
},
error: function(error) {
$.modal.alertWarning("图片上传失败。");
}
});
}
$("#form-notice-add").validate({ $("#form-notice-add").validate({
rules:{ rules:{

@ -48,13 +48,43 @@
$(function() { $(function() {
$('.summernote').summernote({ $('.summernote').summernote({
height : '220px', height : '220px',
lang : 'zh-CN' lang : 'zh-CN',
callbacks: {
onImageUpload: function (files) {
sendFile(files[0], this);
}
}
}); });
var content = $("#noticeContent").val(); var content = $("#noticeContent").val();
$('#editor').summernote('code', content); $('#editor').summernote('code', content);
}); });
// 上传文件
function sendFile(file, obj) {
var data = new FormData();
data.append("file", file);
$.ajax({
type: "POST",
url: ctx + "common/upload",
data: data,
cache: false,
contentType: false,
processData: false,
dataType: 'json',
success: function(result) {
if (result.code == web_status.SUCCESS) {
$(obj).summernote('editor.insertImage', result.url, result.fileName);
} else {
$.modal.alertError(result.msg);
}
},
error: function(error) {
$.modal.alertWarning("图片上传失败。");
}
});
}
$("#form-notice-edit").validate({ $("#form-notice-edit").validate({
rules:{ rules:{
noticeTitle:{ noticeTitle:{

@ -100,12 +100,12 @@
sortable: true sortable: true
}, },
{ {
field: 'status', visible: editFlag == 'hidden' ? false : true,
title: '状态', title: '角色状态',
align: 'center', align: 'center',
formatter: function(value, row, index) { formatter: function (value, row, index) {
return $.table.selectDictLabel(datas, value); return statusTools(row);
} }
}, },
{ {
field: 'createTime', field: 'createTime',
@ -127,11 +127,34 @@
$.table.init(options); $.table.init(options);
}); });
/*角色管理-分配数据权限*/ /* 角色管理-分配数据权限 */
function rule(roleId) { function rule(roleId) {
var url = prefix + '/rule/' + roleId; var url = prefix + '/rule/' + roleId;
$.modal.open("分配数据权限", url); $.modal.open("分配数据权限", url);
} }
/* 角色状态显示 */
function statusTools(row) {
if (row.status == 1) {
return '<i class=\"fa fa-toggle-off text-info fa-2x\" onclick="enable(\'' + row.roleId + '\')"></i> ';
} else {
return '<i class=\"fa fa-toggle-on text-info fa-2x\" onclick="disable(\'' + row.roleId + '\')"></i> ';
}
}
/* 角色管理-停用 */
function disable(roleId) {
$.modal.confirm("确认要停用角色吗?", function() {
$.operate.post(prefix + "/changeStatus", { "roleId": roleId, "status": 1 });
})
}
/* 角色管理启用 */
function enable(roleId) {
$.modal.confirm("确认要启用角色吗?", function() {
$.operate.post(prefix + "/changeStatus", { "roleId": roleId, "status": 0 });
})
}
</script> </script>
</body> </body>
</html> </html>

@ -151,12 +151,12 @@
title: '手机' title: '手机'
}, },
{ {
field: 'status', visible: editFlag == 'hidden' ? false : true,
title: '状态', title: '用户状态',
align: 'center', align: 'center',
formatter: function(value, row, index) { formatter: function (value, row, index) {
return $.table.selectDictLabel(datas, value); return statusTools(row);
} }
}, },
{ {
field: 'createTime', field: 'createTime',
@ -211,17 +211,40 @@
queryDeptTree(); queryDeptTree();
}); });
/*用户管理-部门*/ /* 用户管理-部门 */
function dept() { function dept() {
var url = ctx + "system/dept"; var url = ctx + "system/dept";
createMenuItem(url, "部门管理"); createMenuItem(url, "部门管理");
} }
/*用户管理-重置密码*/ /* 用户管理-重置密码 */
function resetPwd(userId) { function resetPwd(userId) {
var url = prefix + '/resetPwd/' + userId; var url = prefix + '/resetPwd/' + userId;
$.modal.open("重置密码", url, '800', '300'); $.modal.open("重置密码", url, '800', '300');
} }
/* 用户状态显示 */
function statusTools(row) {
if (row.status == 1) {
return '<i class=\"fa fa-toggle-off text-info fa-2x\" onclick="enable(\'' + row.userId + '\')"></i> ';
} else {
return '<i class=\"fa fa-toggle-on text-info fa-2x\" onclick="disable(\'' + row.userId + '\')"></i> ';
}
}
/* 用户管理-停用 */
function disable(userId) {
$.modal.confirm("确认要停用用户吗?", function() {
$.operate.post(prefix + "/changeStatus", { "userId": userId, "status": 1 });
})
}
/* 用户管理启用 */
function enable(userId) {
$.modal.confirm("确认要启用用户吗?", function() {
$.operate.post(prefix + "/changeStatus", { "userId": userId, "status": 0 });
})
}
</script> </script>
</body> </body>
<form id="importForm" enctype="multipart/form-data" class="mt20 mb10" style="display: none;"> <form id="importForm" enctype="multipart/form-data" class="mt20 mb10" style="display: none;">

@ -122,13 +122,21 @@ public class Global
} }
/** /**
* *
*/ */
public static String getDownloadPath() public static String getDownloadPath()
{ {
return getConfig("ruoyi.profile") + "download/"; return getConfig("ruoyi.profile") + "download/";
} }
/**
*
*/
public static String getUploadPath()
{
return getConfig("ruoyi.profile") + "upload/";
}
/** /**
* *
*/ */

@ -30,9 +30,9 @@ import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.Excel;
@ -133,7 +133,7 @@ public class ExcelUtil<T>
public List<T> importExcel(String sheetName, InputStream is) throws Exception public List<T> importExcel(String sheetName, InputStream is) throws Exception
{ {
this.type = Type.IMPORT; this.type = Type.IMPORT;
this.wb = new XSSFWorkbook(is); this.wb = WorkbookFactory.create(is);
List<T> list = new ArrayList<T>(); List<T> list = new ArrayList<T>();
Sheet sheet = null; Sheet sheet = null;
if (StringUtils.isNotEmpty(sheetName)) if (StringUtils.isNotEmpty(sheetName))

@ -8,8 +8,10 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.framework.config.properties.DruidProperties;
import com.ruoyi.framework.datasource.DynamicDataSource; import com.ruoyi.framework.datasource.DynamicDataSource;
/** /**
@ -22,17 +24,19 @@ public class DruidConfig
{ {
@Bean @Bean
@ConfigurationProperties("spring.datasource.druid.master") @ConfigurationProperties("spring.datasource.druid.master")
public DataSource masterDataSource() public DataSource masterDataSource(DruidProperties druidProperties)
{ {
return DruidDataSourceBuilder.create().build(); DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
return druidProperties.dataSource(dataSource);
} }
@Bean @Bean
@ConfigurationProperties("spring.datasource.druid.slave") @ConfigurationProperties("spring.datasource.druid.slave")
@ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true") @ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true")
public DataSource slaveDataSource() public DataSource slaveDataSource(DruidProperties druidProperties)
{ {
return DruidDataSourceBuilder.create().build(); DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
return druidProperties.dataSource(dataSource);
} }
@Bean(name = "dynamicDataSource") @Bean(name = "dynamicDataSource")

@ -0,0 +1,40 @@
package com.ruoyi.framework.config;
import org.springframework.boot.web.context.WebServerInitializedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
*
*
* @author ruoyi
*
*/
@Component
public class ServerConfig implements ApplicationListener<WebServerInitializedEvent>
{
private int serverPort;
public String getUrl()
{
InetAddress address = null;
try
{
address = InetAddress.getLocalHost();
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
return "http://" + address.getHostAddress() + ":" + this.serverPort;
}
@Override
public void onApplicationEvent(WebServerInitializedEvent event)
{
this.serverPort = event.getWebServer().getPort();
}
}

@ -0,0 +1,77 @@
package com.ruoyi.framework.config.properties;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import com.alibaba.druid.pool.DruidDataSource;
/**
* druid
*
* @author ruoyi
*/
@Configuration
public class DruidProperties
{
@Value("${spring.datasource.druid.initialSize}")
private int initialSize;
@Value("${spring.datasource.druid.minIdle}")
private int minIdle;
@Value("${spring.datasource.druid.maxActive}")
private int maxActive;
@Value("${spring.datasource.druid.maxWait}")
private int maxWait;
@Value("${spring.datasource.druid.timeBetweenEvictionRunsMillis}")
private int timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.druid.minEvictableIdleTimeMillis}")
private int minEvictableIdleTimeMillis;
@Value("${spring.datasource.druid.maxEvictableIdleTimeMillis}")
private int maxEvictableIdleTimeMillis;
@Value("${spring.datasource.druid.validationQuery}")
private String validationQuery;
@Value("${spring.datasource.druid.testWhileIdle}")
private boolean testWhileIdle;
@Value("${spring.datasource.druid.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.druid.testOnReturn}")
private boolean testOnReturn;
public DruidDataSource dataSource(DruidDataSource datasource)
{
/** 配置初始化大小、最小、最大 */
datasource.setInitialSize(initialSize);
datasource.setMaxActive(maxActive);
datasource.setMinIdle(minIdle);
/** 配置获取连接等待超时的时间 */
datasource.setMaxWait(maxWait);
/** 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 */
datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
/** 配置一个连接在池中最小、最大生存的时间,单位是毫秒 */
datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);
/**
* sqlselect 'x'validationQuerynulltestOnBorrowtestOnReturntestWhileIdle
*/
datasource.setValidationQuery(validationQuery);
/** 建议配置为true不影响性能并且保证安全性。申请连接的时候检测如果空闲时间大于timeBetweenEvictionRunsMillis执行validationQuery检测连接是否有效。 */
datasource.setTestWhileIdle(testWhileIdle);
/** 申请连接时执行validationQuery检测连接是否有效做了这个配置会降低性能。 */
datasource.setTestOnBorrow(testOnBorrow);
/** 归还连接时执行validationQuery检测连接是否有效做了这个配置会降低性能。 */
datasource.setTestOnReturn(testOnReturn);
return datasource;
}
}

@ -114,4 +114,12 @@ public interface ISysRoleService
* @return * @return
*/ */
public int countUserRoleByRoleId(Long roleId); public int countUserRoleByRoleId(Long roleId);
/**
*
*
* @param role
* @return
*/
public int changeStatus(SysRole role);
} }

@ -148,4 +148,12 @@ public interface ISysUserService
* @return * @return
*/ */
public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName); public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
/**
*
*
* @param user
* @return
*/
public int changeStatus(SysUser user);
} }

@ -298,4 +298,16 @@ public class SysRoleServiceImpl implements ISysRoleService
{ {
return userRoleMapper.countUserRoleByRoleId(roleId); return userRoleMapper.countUserRoleByRoleId(roleId);
} }
/**
*
*
* @param role
* @return
*/
@Override
public int changeStatus(SysRole role)
{
return roleMapper.updateRole(role);
}
} }

@ -49,7 +49,7 @@ public class SysUserServiceImpl implements ISysUserService
@Autowired @Autowired
private SysUserRoleMapper userRoleMapper; private SysUserRoleMapper userRoleMapper;
@Autowired @Autowired
private ISysConfigService configService; private ISysConfigService configService;
@ -371,6 +371,7 @@ public class SysUserServiceImpl implements ISysUserService
* @param operName * @param operName
* @return * @return
*/ */
@Override
public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName)
{ {
if (StringUtils.isNull(userList) || userList.size() == 0) if (StringUtils.isNull(userList) || userList.size() == 0)
@ -428,4 +429,20 @@ public class SysUserServiceImpl implements ISysUserService
} }
return successMsg.toString(); return successMsg.toString();
} }
/**
*
*
* @param user
* @return
*/
@Override
public int changeStatus(SysUser user)
{
if (SysUser.isAdmin(user.getUserId()))
{
throw new BusinessException("不允许修改超级管理员用户");
}
return userMapper.updateUser(user);
}
} }

@ -514,7 +514,7 @@ create table sys_config (
primary key (config_id) primary key (config_id)
) engine=innodb auto_increment=100 default charset=utf8 comment = '参数配置表'; ) engine=innodb auto_increment=100 default charset=utf8 comment = '参数配置表';
insert into sys_config values(1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-default', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '默认 skin-default、蓝色 skin-blue、黄色 skin-yellow' ); insert into sys_config values(1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow' );
insert into sys_config values(2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '初始化密码 123456' ); insert into sys_config values(2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '初始化密码 123456' );
@ -607,7 +607,7 @@ create table sys_notice (
notice_id int(4) not null auto_increment comment '公告ID', notice_id int(4) not null auto_increment comment '公告ID',
notice_title varchar(50) not null comment '公告标题', notice_title varchar(50) not null comment '公告标题',
notice_type char(1) not null comment '公告类型1通知 2公告', notice_type char(1) not null comment '公告类型1通知 2公告',
notice_content varchar(500) default '' comment '公告内容', notice_content varchar(2000) default '' comment '公告内容',
status char(1) default '0' comment '公告状态0正常 1关闭', status char(1) default '0' comment '公告状态0正常 1关闭',
create_by varchar(64) default '' comment '创建者', create_by varchar(64) default '' comment '创建者',
create_time datetime comment '创建时间', create_time datetime comment '创建时间',
Loading…
Cancel
Save