mirror of https://gitee.com/y_project/RuoYi.git
若依3.2
parent
04f2607398
commit
57fa243747
|
@ -6,10 +6,17 @@ import javax.servlet.http.HttpServletRequest;
|
|||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
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.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);
|
||||
|
||||
@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)
|
||||
{
|
||||
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
|
||||
|
@ -31,7 +52,8 @@ public class CommonController
|
|||
|
||||
response.setCharacterEncoding("utf-8");
|
||||
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());
|
||||
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
|
||||
{
|
||||
final String agent = request.getHeader("USER-AGENT");
|
||||
|
|
|
@ -181,4 +181,16 @@ public class SysRoleController extends BaseController
|
|||
{
|
||||
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));
|
||||
}
|
||||
}
|
|
@ -225,4 +225,16 @@ public class SysUserController extends BaseController
|
|||
{
|
||||
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:
|
||||
password:
|
||||
# 初始连接数
|
||||
initial-size: 10
|
||||
# 最大连接池数量
|
||||
max-active: 100
|
||||
initialSize: 5
|
||||
# 最小连接池数量
|
||||
min-idle: 10
|
||||
minIdle: 10
|
||||
# 最大连接池数量
|
||||
maxActive: 20
|
||||
# 配置获取连接等待超时的时间
|
||||
max-wait: 60000
|
||||
# 打开PSCache,并且指定每个连接上PSCache的大小
|
||||
pool-prepared-statements: true
|
||||
max-pool-prepared-statement-per-connection-size: 20
|
||||
maxWait: 60000
|
||||
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
|
||||
timeBetweenEvictionRunsMillis: 60000
|
||||
# 配置一个连接在池中最小生存的时间,单位是毫秒
|
||||
min-evictable-idle-time-millis: 300000
|
||||
validation-query: SELECT 1 FROM DUAL
|
||||
test-while-idle: true
|
||||
test-on-borrow: false
|
||||
test-on-return: false
|
||||
stat-view-servlet:
|
||||
minEvictableIdleTimeMillis: 300000
|
||||
# 配置一个连接在池中最大生存的时间,单位是毫秒
|
||||
maxEvictableIdleTimeMillis: 900000
|
||||
# 配置检测连接是否有效
|
||||
validationQuery: SELECT 1 FROM DUAL
|
||||
testWhileIdle: true
|
||||
testOnBorrow: false
|
||||
testOnReturn: false
|
||||
statViewServlet:
|
||||
enabled: true
|
||||
url-pattern: /monitor/druid/*
|
||||
filter:
|
||||
stat:
|
||||
# 慢SQL记录
|
||||
log-slow-sql: true
|
||||
slow-sql-millis: 1000
|
||||
merge-sql: false
|
||||
merge-sql: true
|
||||
wall:
|
||||
config:
|
||||
multi-statement-allow: true
|
|
@ -3,9 +3,9 @@ ruoyi:
|
|||
# 名称
|
||||
name: RuoYi
|
||||
# 版本
|
||||
version: 3.1.0
|
||||
version: 3.2.0
|
||||
# 版权年份
|
||||
copyrightYear: 2018
|
||||
copyrightYear: 2019
|
||||
# 文件上传路径
|
||||
profile: D:/profile/
|
||||
# 获取ip地址开关
|
||||
|
|
|
@ -1,44 +1,35 @@
|
|||
/**
|
||||
* @author: Dennis Hernández
|
||||
* @webSite: http://djhvscf.github.io/Blog
|
||||
* @version: v1.1.0
|
||||
* 基于bootstrap-table-mobile修改
|
||||
* 修正部分iPhone手机不显示卡片视图
|
||||
* Copyright (c) 2019 ruoyi
|
||||
*/
|
||||
|
||||
!function ($) {
|
||||
|
||||
'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) {
|
||||
if (that.options.height || that.options.showFooter) {
|
||||
setTimeout(that.resetView(), 1);
|
||||
}
|
||||
};
|
||||
|
||||
var resetView = function (that) {
|
||||
if (that.options.height || that.options.showFooter) {
|
||||
setTimeout(function(){
|
||||
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) {
|
||||
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);
|
||||
} else if ((width > that.options.minWidth) && (height > that.options.minHeight)) {
|
||||
} else if (checkValuesGreater(width, that.options.minWidth) && checkValuesGreater(height, that.options.minHeight)) {
|
||||
conditionFullView(that);
|
||||
}
|
||||
} else {
|
||||
if (width <= that.options.minWidth) {
|
||||
if (checkValuesLessEqual(width, that.options.minWidth) || isIPhone()) {
|
||||
conditionCardView(that);
|
||||
} else if (width > that.options.minWidth) {
|
||||
} else if (checkValuesGreater(width, that.options.minWidth)) {
|
||||
conditionFullView(that);
|
||||
}
|
||||
}
|
||||
|
@ -46,14 +37,20 @@
|
|||
resetView(that);
|
||||
};
|
||||
|
||||
var checkValuesLessEqual = function (currentValue, targetValue) {
|
||||
return currentValue <= targetValue;
|
||||
};
|
||||
|
||||
var checkValuesGreater = function (currentValue, targetValue) {
|
||||
return currentValue > targetValue;
|
||||
};
|
||||
|
||||
var conditionCardView = function (that) {
|
||||
changeTableView(that, false);
|
||||
showHideColumns(that, false);
|
||||
};
|
||||
|
||||
var conditionFullView = function (that) {
|
||||
changeTableView(that, true);
|
||||
showHideColumns(that, true);
|
||||
};
|
||||
|
||||
var changeTableView = function (that, cardViewState) {
|
||||
|
@ -61,27 +58,12 @@
|
|||
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, {
|
||||
mobileResponsive: false,
|
||||
minWidth: 562,
|
||||
minHeight: undefined,
|
||||
heightThreshold: 100, // just slightly larger than mobile chrome's auto-hiding toolbar
|
||||
checkOnInit: true,
|
||||
columnsHidden: []
|
||||
toggled: false
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
|
@ -98,39 +80,13 @@
|
|||
return;
|
||||
}
|
||||
|
||||
if (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 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));
|
||||
var that = this;
|
||||
$(window).resize(function () {
|
||||
changeView(that, $(this).width(), $(this).height())
|
||||
});
|
||||
|
||||
if (this.options.checkOnInit) {
|
||||
var height = $(window).height(),
|
||||
width = $(window).width();
|
||||
changeView(this, width, height);
|
||||
old = {
|
||||
width: width,
|
||||
height: height
|
||||
};
|
||||
changeView(this, $(window).width(), $(window).height());
|
||||
}
|
||||
};
|
||||
}(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,26 +47,42 @@ a:focus {
|
|||
}
|
||||
|
||||
.nav.navbar-right>li>a {
|
||||
color: #999c9e;
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
height: 50px;
|
||||
padding: 18px 15px;
|
||||
}
|
||||
|
||||
.nav>li.active>a {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.navbar-default .nav>li>a:hover, .navbar-default .nav>li>a:focus {
|
||||
.nav.navbar-right>li>a>.label {
|
||||
position: absolute;
|
||||
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;
|
||||
}
|
||||
|
||||
.navbar-default .nav>li>a:hover,
|
||||
.navbar-default .nav>li>a:focus {
|
||||
background-color: #293846;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.nav .open>a, .nav .open>a:hover, .nav .open>a:focus {
|
||||
.nav .open>a,
|
||||
.nav .open>a:hover,
|
||||
.nav .open>a:focus {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.nav>li>a i {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
.navbar {
|
||||
border: 0;
|
||||
}
|
||||
|
@ -77,12 +93,12 @@ a:focus {
|
|||
position: relative;
|
||||
}
|
||||
|
||||
.navbar-top-links li {
|
||||
.nav.navbar-top-links li {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.navbar-top-links li:last-child {
|
||||
margin-right: 30px;
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
body.body-small .navbar-top-links li:last-child {
|
||||
|
@ -179,7 +195,7 @@ body.body-small .navbar-top-links li:last-child {
|
|||
}
|
||||
|
||||
.nav-header {
|
||||
padding: 33px 25px;
|
||||
padding: 34px 25px 20px 25px;
|
||||
background: url("patterns/header-profile.png") no-repeat;
|
||||
}
|
||||
|
||||
|
@ -211,7 +227,7 @@ body.body-small .navbar-top-links li:last-child {
|
|||
|
||||
.minimalize-styl-2 {
|
||||
padding: 4px 12px;
|
||||
margin: 14px 5px 5px 20px;
|
||||
margin: 12px 5px 5px 15px;
|
||||
font-size: 14px;
|
||||
float: left;
|
||||
}
|
||||
|
@ -368,10 +384,6 @@ body.mini-navbar .navbar-default .nav>li>.nav-second-level li a {
|
|||
z-index: 2030;
|
||||
}
|
||||
|
||||
.navbar-fixed-top, .navbar-static-top {
|
||||
background: #f3f3f4;
|
||||
}
|
||||
|
||||
.fixed-nav #wrapper {
|
||||
padding-top: 60px;
|
||||
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 {
|
||||
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 {
|
||||
|
@ -485,7 +485,6 @@ body.body-small.fixed-sidebar.mini-navbar .navbar-static-side {
|
|||
.fixed-sidebar.mini-navbar .nav li:hover>.nav-second-level {
|
||||
top: 40px;
|
||||
font-size: 12px;
|
||||
/*padding: 10px 10px 0 10px;*/
|
||||
background-color: #2f4050;
|
||||
}
|
||||
|
||||
|
@ -6567,391 +6566,24 @@ body.rtls .top-navigation .footer.fixed, body.rtls.top-navigation .footer.fixed
|
|||
.rtls .ltr-support {
|
||||
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 {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.page-tabs a i {
|
||||
color: #ccc;
|
||||
margin-left: 2px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.page-tabs a.active {
|
||||
background: #2f4050;
|
||||
color: #a7b1c2;
|
||||
background: #eaedf1;
|
||||
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;
|
||||
}
|
||||
|
||||
.skin-blue .img-circle {
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.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;
|
||||
.page-tabs a.active:hover,
|
||||
.page-tabs a.active i:hover {
|
||||
background: #eaedf1;
|
||||
color: #23508e;
|
||||
}
|
||||
|
||||
@media ( min-width : 768px) {
|
||||
|
@ -7279,7 +6911,8 @@ body.skin-yellow {
|
|||
}
|
||||
|
||||
.navbar-header {
|
||||
width: 60%;
|
||||
width: 10%;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.bs-glyphicons {
|
||||
|
@ -7347,3 +6980,99 @@ body.skin-yellow {
|
|||
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样式布局处理
|
||||
* Copyright (c) 2018 ruoyi
|
||||
* Copyright (c) 2019 ruoyi
|
||||
*/
|
||||
|
||||
/** 基础通用 **/
|
||||
|
@ -13,6 +13,18 @@
|
|||
.pb5 {
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
.mt5 {
|
||||
margin-top: 5px;
|
||||
}
|
||||
.mr5 {
|
||||
margin-right: 5px;
|
||||
}
|
||||
.mb5 {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.ml5 {
|
||||
margin-left: 5px;
|
||||
}
|
||||
.mt10 {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
@ -38,6 +50,14 @@
|
|||
margin-left: 20px;
|
||||
}
|
||||
|
||||
/** 弹层组件 禁用样式 **/
|
||||
.layer-disabled {
|
||||
border: 1px #dedede solid !important;
|
||||
background-color: #f1f1f1 !important;
|
||||
color: #333 !important;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/** 用户管理 样式布局 **/
|
||||
.box {
|
||||
position: relative;
|
||||
|
@ -481,3 +501,35 @@ label {
|
|||
display: none;
|
||||
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() {
|
||||
// MetsiMenu
|
||||
$('#side-menu').metisMenu();
|
||||
|
@ -45,6 +51,7 @@ function() {
|
|||
if ($(this).width() < 769) {
|
||||
$('body').addClass('mini-navbar');
|
||||
$('.navbar-static-side').fadeIn();
|
||||
$(".sidebar-collapse .logo").addClass("hide");
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -55,12 +62,14 @@ function NavToggle() {
|
|||
function SmoothlyMenu() {
|
||||
if (!$('body').hasClass('mini-navbar')) {
|
||||
$('#side-menu').hide();
|
||||
$(".sidebar-collapse .logo").removeClass("hide");
|
||||
setTimeout(function() {
|
||||
$('#side-menu').fadeIn(500);
|
||||
},
|
||||
100);
|
||||
} else if ($('body').hasClass('fixed-sidebar')) {
|
||||
$('#side-menu').hide();
|
||||
$(".sidebar-collapse .logo").addClass("hide");
|
||||
setTimeout(function() {
|
||||
$('#side-menu').fadeIn(500);
|
||||
},
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
/**
|
||||
* 通用方法封装处理
|
||||
* Copyright (c) 2018 ruoyi
|
||||
* Copyright (c) 2019 ruoyi
|
||||
*/
|
||||
|
||||
$(function() {
|
||||
// select2复选框事件绑定
|
||||
if ($.fn.select2 !== undefined) {
|
||||
|
@ -191,3 +190,7 @@ $.ajaxSetup({
|
|||
}
|
||||
}
|
||||
});
|
||||
layer.config({
|
||||
extend: 'moon/style.css',
|
||||
skin: 'layer-ext-moon'
|
||||
});
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
* 通用js方法封装处理
|
||||
* Copyright (c) 2018 ruoyi
|
||||
* Copyright (c) 2019 ruoyi
|
||||
*/
|
||||
(function ($) {
|
||||
$.extend({
|
||||
|
@ -18,6 +18,7 @@
|
|||
_sortName = $.common.isEmpty(options.sortName) ? "" : options.sortName;
|
||||
_striped = $.common.isEmpty(options.striped) ? false : options.striped;
|
||||
_escape = $.common.isEmpty(options.escape) ? false : options.escape;
|
||||
_showFooter = $.common.isEmpty(options.showFooter) ? false : options.showFooter;
|
||||
$('#bootstrap-table').bootstrapTable({
|
||||
url: options.url, // 请求后台的URL(*)
|
||||
contentType: "application/x-www-form-urlencoded", // 编码类型
|
||||
|
@ -33,6 +34,7 @@
|
|||
pageSize: 10, // 每页的记录行数(*)
|
||||
pageList: [10, 25, 50], // 可供选择的每页的行数(*)
|
||||
escape: _escape, // 转义HTML字符串
|
||||
showFooter: _showFooter, // 是否显示表尾
|
||||
iconSize: 'outline', // 图标大小:undefined默认的按钮尺寸 xs超小按钮sm小按钮lg大按钮
|
||||
toolbar: '#toolbar', // 指定工作栏
|
||||
sidePagination: "server", // 启用服务端分页
|
||||
|
@ -121,7 +123,7 @@
|
|||
$.form.reset(currentId);
|
||||
layer.open({
|
||||
type: 1,
|
||||
area: ['400px'],
|
||||
area: ['400px', '230px'],
|
||||
fix: false,
|
||||
//不固定
|
||||
maxmin: true,
|
||||
|
@ -138,12 +140,11 @@
|
|||
return false;
|
||||
}
|
||||
var index = layer.load(2, {shade: false});
|
||||
var url = prefix + "/importData";
|
||||
var formData = new FormData();
|
||||
formData.append("file", $('#file')[0].files[0]);
|
||||
formData.append("updateSupport", $("input[name='updateSupport']").is(':checked'));
|
||||
$.ajax({
|
||||
url: url,
|
||||
url: $.table._option.importUrl,
|
||||
data: formData,
|
||||
cache: false,
|
||||
contentType: false,
|
||||
|
@ -466,6 +467,14 @@
|
|||
});
|
||||
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) {
|
||||
$.blockUI({ message: '<div class="loaderbox"><div class="loading-activity"></div> ' + message + '</div>' });
|
||||
|
@ -485,12 +494,14 @@
|
|||
operate: {
|
||||
// 提交数据
|
||||
submit: function(url, type, dataType, data) {
|
||||
$.modal.loading("正在处理中,请稍后...");
|
||||
var config = {
|
||||
url: url,
|
||||
type: type,
|
||||
dataType: dataType,
|
||||
data: data,
|
||||
beforeSend: function () {
|
||||
$.modal.loading("正在处理中,请稍后...");
|
||||
},
|
||||
success: function(result) {
|
||||
$.operate.ajaxSuccess(result);
|
||||
}
|
||||
|
@ -608,12 +619,15 @@
|
|||
},
|
||||
// 保存信息
|
||||
save: function(url, data) {
|
||||
$.modal.loading("正在处理中,请稍后...");
|
||||
var config = {
|
||||
url: url,
|
||||
type: "post",
|
||||
dataType: "json",
|
||||
data: data,
|
||||
beforeSend: function () {
|
||||
$.modal.loading("正在处理中,请稍后...");
|
||||
$.modal.disable();
|
||||
},
|
||||
success: function(result) {
|
||||
$.operate.successCallback(result);
|
||||
}
|
||||
|
@ -657,6 +671,7 @@
|
|||
$.modal.alertError(result.msg);
|
||||
}
|
||||
$.modal.closeLoading();
|
||||
$.modal.enable();
|
||||
}
|
||||
},
|
||||
// 校验封装处理
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<!-- bootstrap-table 表格插件 -->
|
||||
<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/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>
|
||||
<!-- jquery-validate 表单验证插件 -->
|
||||
<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/layer/layer.min.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/ry-ui.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.2.0}"></script>
|
||||
<script src="http://tajs.qq.com/stats?sId=62048022"></script>
|
||||
<script th:inline="javascript"> var ctx = [[@{/}]]; </script>
|
||||
</div>
|
||||
|
|
|
@ -15,7 +15,8 @@
|
|||
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
|
||||
<link th:href="@{/css/animate.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">
|
||||
.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; }
|
||||
|
@ -31,17 +32,22 @@
|
|||
</div>
|
||||
<div class="sidebar-collapse">
|
||||
<ul class="nav" id="side-menu">
|
||||
<li class="nav-header">
|
||||
<div class="dropdown profile-element"> <span>
|
||||
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{/profile/avatar/} + ${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" th:text="${user.userName}">用户</strong></span>
|
||||
<span class="text-muted text-xs block"><span th:text="${user.dept?.deptName}">部门</span> <b class="caret"></b></span> </span> </a>
|
||||
<ul class="dropdown-menu animated fadeInRight m-t-xs">
|
||||
<li><a class="menuItem" th:href="@{/system/user/profile}">个人信息</a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a th:href="@{logout}">退出</a></li>
|
||||
</ul>
|
||||
<li class="logo">
|
||||
<span class="logo-lg">RuoYi</span>
|
||||
</li>
|
||||
<li>
|
||||
<div class="user-panel">
|
||||
<a class="menuItem" title="个人中心" th:href="@{/system/user/profile}">
|
||||
<div class="hide" th:text="个人中心"></div>
|
||||
<div class="pull-left image">
|
||||
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{/profile/avatar/} + ${user.avatar}" class="img-circle" alt="User Image">
|
||||
</div>
|
||||
</a>
|
||||
<div class="pull-left info">
|
||||
<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">
|
||||
|
@ -74,20 +80,35 @@
|
|||
<!--右侧部分开始-->
|
||||
<div id="page-wrapper" class="gray-bg dashbard-1">
|
||||
<div class="row border-bottom">
|
||||
<nav class="navbar navbar-static-top" role="navigation"
|
||||
style="margin-bottom: 0">
|
||||
<nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">
|
||||
<div class="navbar-header">
|
||||
|
||||
<a class="navbar-minimalize minimalize-styl-2 btn btn-default " href="#" title="收起菜单">
|
||||
<a class="navbar-minimalize minimalize-styl-2" style="color:#FFF;" href="#" title="收起菜单">
|
||||
<i class="fa fa-bars"></i>
|
||||
</a>
|
||||
</div>
|
||||
<ul class="nav navbar-top-links navbar-right welcome-message">
|
||||
<li>
|
||||
<span class="m-r-sm text-muted">欢迎来到若依管理后台.</span>
|
||||
<li><a title="全屏显示" id="fullScreen"><i class="fa fa-arrows-alt"></i> 全屏显示</a></li>
|
||||
<li class="dropdown user-menu">
|
||||
<a href="javascript:" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown">
|
||||
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{/profile/avatar/} + ${user.avatar}" class="user-image">
|
||||
<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>
|
||||
<li><a id="fullScreen"><i class="fa fa-arrows-alt"></i>全屏</a></li>
|
||||
<li><a th:href="@{logout}"><i class="fa fa-sign-out"></i>退出</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
|
@ -137,8 +158,16 @@
|
|||
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
|
||||
<script th:src="@{/ajax/libs/layer/layer.min.js}"></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="@{/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>
|
||||
</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/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/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]>
|
||||
<meta http-equiv="refresh" content="0;ie.html" />
|
||||
<![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/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="../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>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -94,13 +94,53 @@
|
|||
<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="#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-heading">
|
||||
<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>
|
||||
</h5>
|
||||
</div>
|
||||
<div id="v31" class="panel-collapse collapse in">
|
||||
<div id="v31" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
<ol>
|
||||
<li>新增内网不获取IP地址</li>
|
||||
|
|
|
@ -107,11 +107,11 @@
|
|||
title: '执行表达式'
|
||||
},
|
||||
{
|
||||
field: 'status',
|
||||
visible: statusFlag == 'hidden' ? false : true,
|
||||
title: '任务状态',
|
||||
align: 'center',
|
||||
formatter: function(value, row, index) {
|
||||
return $.table.selectDictLabel(datas, value);
|
||||
formatter: function (value, row, index) {
|
||||
return statusTools(row);
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -124,7 +124,6 @@
|
|||
align: 'center',
|
||||
formatter: function(value, row, index) {
|
||||
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-warning btn-xs ' + detailFlag + '" href="#" onclick="$.operate.detail(\'' + row.jobId + '\')"><i class="fa fa-search"></i>详细</a> ');
|
||||
return actions.join('');
|
||||
|
@ -134,36 +133,37 @@
|
|||
$.table.init(options);
|
||||
});
|
||||
|
||||
/* 调度任务状态显示 */
|
||||
function statusTools(row) {
|
||||
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 {
|
||||
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) {
|
||||
$.modal.confirm("确认要立即执行任务吗?", function() {
|
||||
$.operate.post(prefix + "/run", { "jobId": jobId});
|
||||
})
|
||||
}
|
||||
|
||||
/*调度任务-停用*/
|
||||
/* 调度任务-停用 */
|
||||
function stop(jobId) {
|
||||
$.modal.confirm("确认要停用任务吗?", function() {
|
||||
$.operate.post(prefix + "/changeStatus", { "jobId": jobId, "status": 1 });
|
||||
})
|
||||
}
|
||||
|
||||
/*调度任务-启用*/
|
||||
/* 调度任务-启用 */
|
||||
function start(jobId) {
|
||||
$.modal.confirm("确认要启用任务吗?", function() {
|
||||
$.operate.post(prefix + "/changeStatus", { "jobId": jobId, "status": 0 });
|
||||
})
|
||||
}
|
||||
|
||||
//调度日志查询
|
||||
/* 调度日志查询 */
|
||||
function jobLog(id) {
|
||||
var url = ctx + 'monitor/jobLog';
|
||||
createMenuItem(url, "调度日志");
|
||||
|
|
|
@ -47,9 +47,39 @@
|
|||
|
||||
$('.summernote').summernote({
|
||||
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({
|
||||
rules:{
|
||||
noticeTitle:{
|
||||
|
|
|
@ -49,12 +49,42 @@
|
|||
$(function() {
|
||||
$('.summernote').summernote({
|
||||
height : '220px',
|
||||
lang : 'zh-CN'
|
||||
lang : 'zh-CN',
|
||||
callbacks: {
|
||||
onImageUpload: function (files) {
|
||||
sendFile(files[0], this);
|
||||
}
|
||||
}
|
||||
});
|
||||
var content = $("#noticeContent").val();
|
||||
$('#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({
|
||||
rules:{
|
||||
noticeTitle:{
|
||||
|
|
|
@ -100,11 +100,11 @@
|
|||
sortable: true
|
||||
},
|
||||
{
|
||||
field: 'status',
|
||||
title: '状态',
|
||||
visible: editFlag == 'hidden' ? false : true,
|
||||
title: '角色状态',
|
||||
align: 'center',
|
||||
formatter: function(value, row, index) {
|
||||
return $.table.selectDictLabel(datas, value);
|
||||
formatter: function (value, row, index) {
|
||||
return statusTools(row);
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -127,11 +127,34 @@
|
|||
$.table.init(options);
|
||||
});
|
||||
|
||||
/*角色管理-分配数据权限*/
|
||||
/* 角色管理-分配数据权限 */
|
||||
function rule(roleId) {
|
||||
var url = prefix + '/rule/' + roleId;
|
||||
$.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>
|
||||
</body>
|
||||
</html>
|
|
@ -151,11 +151,11 @@
|
|||
title: '手机'
|
||||
},
|
||||
{
|
||||
field: 'status',
|
||||
title: '状态',
|
||||
visible: editFlag == 'hidden' ? false : true,
|
||||
title: '用户状态',
|
||||
align: 'center',
|
||||
formatter: function(value, row, index) {
|
||||
return $.table.selectDictLabel(datas, value);
|
||||
formatter: function (value, row, index) {
|
||||
return statusTools(row);
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -211,17 +211,40 @@
|
|||
queryDeptTree();
|
||||
});
|
||||
|
||||
/*用户管理-部门*/
|
||||
/* 用户管理-部门 */
|
||||
function dept() {
|
||||
var url = ctx + "system/dept";
|
||||
createMenuItem(url, "部门管理");
|
||||
}
|
||||
|
||||
/*用户管理-重置密码*/
|
||||
/* 用户管理-重置密码 */
|
||||
function resetPwd(userId) {
|
||||
var url = prefix + '/resetPwd/' + userId;
|
||||
$.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>
|
||||
</body>
|
||||
<form id="importForm" enctype="multipart/form-data" class="mt20 mb10" style="display: none;">
|
||||
|
|
|
@ -122,13 +122,21 @@ public class Global
|
|||
}
|
||||
|
||||
/**
|
||||
* 获取下载上传路径
|
||||
* 获取下载路径
|
||||
*/
|
||||
public static String getDownloadPath()
|
||||
{
|
||||
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.VerticalAlignment;
|
||||
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.xssf.streaming.SXSSFWorkbook;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import com.ruoyi.common.annotation.Excel;
|
||||
|
@ -133,7 +133,7 @@ public class ExcelUtil<T>
|
|||
public List<T> importExcel(String sheetName, InputStream is) throws Exception
|
||||
{
|
||||
this.type = Type.IMPORT;
|
||||
this.wb = new XSSFWorkbook(is);
|
||||
this.wb = WorkbookFactory.create(is);
|
||||
List<T> list = new ArrayList<T>();
|
||||
Sheet sheet = null;
|
||||
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.Configuration;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
|
||||
import com.ruoyi.common.enums.DataSourceType;
|
||||
import com.ruoyi.framework.config.properties.DruidProperties;
|
||||
import com.ruoyi.framework.datasource.DynamicDataSource;
|
||||
|
||||
/**
|
||||
|
@ -22,17 +24,19 @@ public class DruidConfig
|
|||
{
|
||||
@Bean
|
||||
@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
|
||||
@ConfigurationProperties("spring.datasource.druid.slave")
|
||||
@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")
|
||||
|
|
|
@ -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);
|
||||
|
||||
/**
|
||||
* 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
|
||||
*/
|
||||
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 结果
|
||||
*/
|
||||
public int countUserRoleByRoleId(Long roleId);
|
||||
|
||||
/**
|
||||
* 角色状态修改
|
||||
*
|
||||
* @param role 角色信息
|
||||
* @return 结果
|
||||
*/
|
||||
public int changeStatus(SysRole role);
|
||||
}
|
||||
|
|
|
@ -148,4 +148,12 @@ public interface ISysUserService
|
|||
* @return 结果
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 角色状态修改
|
||||
*
|
||||
* @param role 角色信息
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int changeStatus(SysRole role)
|
||||
{
|
||||
return roleMapper.updateRole(role);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -371,6 +371,7 @@ public class SysUserServiceImpl implements ISysUserService
|
|||
* @param operName 操作用户
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName)
|
||||
{
|
||||
if (StringUtils.isNull(userList) || userList.size() == 0)
|
||||
|
@ -428,4 +429,20 @@ public class SysUserServiceImpl implements ISysUserService
|
|||
}
|
||||
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)
|
||||
) 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' );
|
||||
|
||||
|
||||
|
@ -607,7 +607,7 @@ create table sys_notice (
|
|||
notice_id int(4) not null auto_increment comment '公告ID',
|
||||
notice_title varchar(50) not null comment '公告标题',
|
||||
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关闭)',
|
||||
create_by varchar(64) default '' comment '创建者',
|
||||
create_time datetime comment '创建时间',
|
Loading…
Reference in New Issue