From 3a5c9fc5c93f7d618ee2c4fe1745ddc52668048c Mon Sep 17 00:00:00 2001 From: thinkgem Date: Tue, 26 Feb 2019 22:03:25 +0800 Subject: [PATCH 01/23] update --- .../core/src/main/resources/i18n/core/common/i18n_en.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/core/src/main/resources/i18n/core/common/i18n_en.properties b/modules/core/src/main/resources/i18n/core/common/i18n_en.properties index 97610765..4e606c29 100644 --- a/modules/core/src/main/resources/i18n/core/common/i18n_en.properties +++ b/modules/core/src/main/resources/i18n/core/common/i18n_en.properties @@ -59,7 +59,7 @@ sys.error.returnButton=Previous page # =========== 文件上传相关 =========== -sys.file.uploadFileIsEmpty=No files to upload! +sys.file.uploadFileIsEmpty=This is a new file, please upload file! sys.file.uploadValidNotBlank=File md5 and file name cannot be empty! sys.file.uploadValidImage=Can only upload images ({0}) sys.file.uploadValidVideo=Can only upload video ({0}) From 85790225afcd185dce28a482dafb1e42b85e59d0 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Wed, 27 Feb 2019 21:37:49 +0800 Subject: [PATCH 02/23] =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BC=A0=E9=80=92=5F=5Furl=E5=8F=82=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E6=8C=87=E5=AE=9A=E7=99=BB=E5=BD=95=E5=90=8E=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=E7=9A=84=E9=A1=B5=E9=9D=A2=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shiro/filter/CasAuthenticationFilter.java | 16 ++++------------ .../shiro/filter/FormAuthenticationFilter.java | 15 ++------------- .../jeesite/modules/sys/web/LoginController.java | 16 ++++++++++++---- .../themes/default/modules/sys/sysLogin.html | 1 + 4 files changed, 19 insertions(+), 29 deletions(-) diff --git a/modules/core/src/main/java/com/jeesite/common/shiro/filter/CasAuthenticationFilter.java b/modules/core/src/main/java/com/jeesite/common/shiro/filter/CasAuthenticationFilter.java index 34df47fc..dcb8126e 100644 --- a/modules/core/src/main/java/com/jeesite/common/shiro/filter/CasAuthenticationFilter.java +++ b/modules/core/src/main/java/com/jeesite/common/shiro/filter/CasAuthenticationFilter.java @@ -38,12 +38,8 @@ public class CasAuthenticationFilter extends org.apache.shiro.cas.CasFilter { // 登录成功后初始化授权信息并处理登录后的操作 authorizingRealm.onLoginSuccess((LoginInfo)subject.getPrincipal(), (HttpServletRequest)request); - String url = request.getParameter("__url"); - if (StringUtils.isNotBlank(url)) { - WebUtils.issueRedirect(request, response, url, null, true); - } else { - WebUtils.issueRedirect(request, response, getSuccessUrl(), null, true); - } + // AJAX不支持Redirect改用Forward + request.getRequestDispatcher(getSuccessUrl()).forward(request, response); return false; } @@ -55,12 +51,8 @@ public class CasAuthenticationFilter extends org.apache.shiro.cas.CasFilter { Subject subject = getSubject(request, response); if (subject.isAuthenticated() || subject.isRemembered()) { try { - String url = request.getParameter("__url"); - if (StringUtils.isNotBlank(url)) { - WebUtils.issueRedirect(request, response, url, null, true); - } else { - WebUtils.issueRedirect(request, response, getSuccessUrl(), null, true); - } + // AJAX不支持Redirect改用Forward + request.getRequestDispatcher(getSuccessUrl()).forward(request, response); } catch (Exception e) { e.printStackTrace(); } diff --git a/modules/core/src/main/java/com/jeesite/common/shiro/filter/FormAuthenticationFilter.java b/modules/core/src/main/java/com/jeesite/common/shiro/filter/FormAuthenticationFilter.java index bc69ba63..ec4777c6 100644 --- a/modules/core/src/main/java/com/jeesite/common/shiro/filter/FormAuthenticationFilter.java +++ b/modules/core/src/main/java/com/jeesite/common/shiro/filter/FormAuthenticationFilter.java @@ -235,19 +235,8 @@ public class FormAuthenticationFilter extends org.apache.shiro.web.filter.authc. // 登录成功后初始化授权信息并处理登录后的操作 authorizingRealm.onLoginSuccess((LoginInfo)subject.getPrincipal(), (HttpServletRequest) request); - // 登录操作如果是Ajax操作,直接返回登录信息字符串。 - if (ServletUtils.isAjaxRequest((HttpServletRequest) request)) { - request.getRequestDispatcher(getSuccessUrl()).forward(request, response); // AJAX不支持Redirect改用Forward - } - // 登录成功直接返回到首页 - else { - String url = request.getParameter("__url"); - if (StringUtils.isNotBlank(url)) { - WebUtils.issueRedirect(request, response, url, null, true); - } else { - WebUtils.issueRedirect(request, response, getSuccessUrl(), null, true); - } - } + // AJAX不支持Redirect改用Forward + request.getRequestDispatcher(getSuccessUrl()).forward(request, response); return false; } diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java b/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java index 6e055a21..de522cc7 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java @@ -252,10 +252,10 @@ public class LoginController extends BaseController{ } } - // 获取登录成功页面 - String successUrl = Global.getProperty("shiro.successUrl"); - if (!StringUtils.contains(successUrl, "://")){ - successUrl = request.getContextPath() + successUrl; + // 获取登录成功后跳转的页面 + String successUrl = request.getParameter("__url"); + if (StringUtils.isBlank(successUrl)){ + successUrl = Global.getProperty("shiro.successUrl"); } // 登录操作如果是Ajax操作,直接返回登录信息字符串。 @@ -268,6 +268,9 @@ public class LoginController extends BaseController{ model.addAttribute("message", text("sys.login.getInfo")); } model.addAttribute("sessionid", (String)session.getId()); + if (!StringUtils.contains(successUrl, "://")){ + successUrl = request.getContextPath() + successUrl; + } model.addAttribute("__url", successUrl); // 告诉浏览器登录后跳转的页面 return ServletUtils.renderObject(response, model); } @@ -301,6 +304,11 @@ public class LoginController extends BaseController{ return null; } + // 非无类型用户,自动根据用户类型设置默认菜单的归属系统(个性化示例) + //if (!User.USER_TYPE_NONE.equals(user.getUserType())){ + // session.setAttribute("sysCode", user.getUserType()); + //} + // 返回指定用户类型的首页视图 String view = UserUtils.getUserTypeValue(user.getUserType(), "indexView"); if(StringUtils.isNotBlank(view)){ diff --git a/modules/core/src/main/resources/views/themes/default/modules/sys/sysLogin.html b/modules/core/src/main/resources/views/themes/default/modules/sys/sysLogin.html index 2c0657e4..f0e66fe0 100644 --- a/modules/core/src/main/resources/views/themes/default/modules/sys/sysLogin.html +++ b/modules/core/src/main/resources/views/themes/default/modules/sys/sysLogin.html @@ -47,6 +47,7 @@
+ From 2ce628456f3399cb797dc4352c7bbc878831ada9 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Wed, 27 Feb 2019 21:40:06 +0800 Subject: [PATCH 03/23] remove file_md5 unique index --- modules/core/db/core.erm | 6 +++--- modules/core/db/db2/core.sql | 2 +- modules/core/db/mssql/core.sql | 2 +- modules/core/db/mysql/core.sql | 3 +-- modules/core/db/oracle/core.sql | 2 +- modules/core/db/postgresql/core.sql | 2 +- .../main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql | 3 +++ .../main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql | 5 +++++ .../main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql | 3 +++ .../db/upgrade/core/postgresql/postgresql_4.1.4.sql | 4 ++++ web/db/mssql/core.sql | 2 +- web/db/mysql/core.sql | 3 +-- web/db/oracle/core.sql | 2 +- web/db/postgresql/core.sql | 2 +- 14 files changed, 27 insertions(+), 14 deletions(-) create mode 100644 modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql create mode 100644 modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql create mode 100644 modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql create mode 100644 modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql diff --git a/modules/core/db/core.erm b/modules/core/db/core.erm index 29733dfa..ddce01a7 100644 --- a/modules/core/db/core.erm +++ b/modules/core/db/core.erm @@ -11,8 +11,8 @@ 0 1.0 - 2606 - 1945 + 1129 + 1486 128 128 @@ -4664,7 +4664,7 @@ false true false - true + false diff --git a/modules/core/db/db2/core.sql b/modules/core/db/db2/core.sql index d70e74f8..7a7d77b6 100644 --- a/modules/core/db/db2/core.sql +++ b/modules/core/db/db2/core.sql @@ -289,7 +289,7 @@ CREATE TABLE js_sys_employee_post CREATE TABLE js_sys_file_entity ( file_id varchar(64) NOT NULL, - file_md5 varchar(64) NOT NULL UNIQUE, + file_md5 varchar(64) NOT NULL, file_path varchar(1000) NOT NULL, file_content_type varchar(200) NOT NULL, file_extension varchar(100) NOT NULL, diff --git a/modules/core/db/mssql/core.sql b/modules/core/db/mssql/core.sql index 213e0e98..93c2f692 100644 --- a/modules/core/db/mssql/core.sql +++ b/modules/core/db/mssql/core.sql @@ -289,7 +289,7 @@ CREATE TABLE [js_sys_employee_post] CREATE TABLE [js_sys_file_entity] ( [file_id] varchar(64) NOT NULL, - [file_md5] varchar(64) NOT NULL UNIQUE, + [file_md5] varchar(64) NOT NULL, [file_path] nvarchar(1000) NOT NULL, [file_content_type] varchar(200) NOT NULL, [file_extension] varchar(100) NOT NULL, diff --git a/modules/core/db/mysql/core.sql b/modules/core/db/mysql/core.sql index 3a70049c..5ca75ed7 100644 --- a/modules/core/db/mysql/core.sql +++ b/modules/core/db/mysql/core.sql @@ -295,8 +295,7 @@ CREATE TABLE js_sys_file_entity file_content_type varchar(200) NOT NULL COMMENT '文件内容类型', file_extension varchar(100) NOT NULL COMMENT '文件后缀扩展名', file_size decimal(31) NOT NULL COMMENT '文件大小(单位B)', - PRIMARY KEY (file_id), - UNIQUE (file_md5) + PRIMARY KEY (file_id) ) COMMENT = '文件实体表'; diff --git a/modules/core/db/oracle/core.sql b/modules/core/db/oracle/core.sql index 0caed7d0..7fd96dc6 100644 --- a/modules/core/db/oracle/core.sql +++ b/modules/core/db/oracle/core.sql @@ -289,7 +289,7 @@ CREATE TABLE js_sys_employee_post CREATE TABLE js_sys_file_entity ( file_id varchar2(64) NOT NULL, - file_md5 varchar2(64) NOT NULL UNIQUE, + file_md5 varchar2(64) NOT NULL, file_path nvarchar2(1000) NOT NULL, file_content_type varchar2(200) NOT NULL, file_extension varchar2(100) NOT NULL, diff --git a/modules/core/db/postgresql/core.sql b/modules/core/db/postgresql/core.sql index b0cf5453..95abd1ae 100644 --- a/modules/core/db/postgresql/core.sql +++ b/modules/core/db/postgresql/core.sql @@ -289,7 +289,7 @@ CREATE TABLE js_sys_employee_post CREATE TABLE js_sys_file_entity ( file_id varchar(64) NOT NULL, - file_md5 varchar(64) NOT NULL UNIQUE, + file_md5 varchar(64) NOT NULL, file_path varchar(1000) NOT NULL, file_content_type varchar(200) NOT NULL, file_extension varchar(100) NOT NULL, diff --git a/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql new file mode 100644 index 00000000..0be2026d --- /dev/null +++ b/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql @@ -0,0 +1,3 @@ + +-- 删除sys_file_entity表的file_md5唯一索引 +-- ALTER TABLE [js_sys_file_entity] DROP CONSTRAINT [UQ__js_sys_f__3BD63C9E32E0915F] \ No newline at end of file diff --git a/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql new file mode 100644 index 00000000..c74ad94b --- /dev/null +++ b/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql @@ -0,0 +1,5 @@ + +-- 删除sys_file_entity表的file_md5唯一索引 +ALTER TABLE `js_sys_file_entity` + DROP INDEX `file_md5`, + ADD INDEX `file_md5`(`file_md5`); \ No newline at end of file diff --git a/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql new file mode 100644 index 00000000..4719276d --- /dev/null +++ b/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql @@ -0,0 +1,3 @@ + +-- 删除sys_file_entity表的file_md5唯一索引 +-- ALTER TABLE "JS_SYS_FILE_ENTITY" DROP CONSTRAINT "SYS_C0019398" \ No newline at end of file diff --git a/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql new file mode 100644 index 00000000..86ef63e3 --- /dev/null +++ b/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql @@ -0,0 +1,4 @@ + +-- 删除sys_file_entity表的file_md5唯一索引 +ALTER TABLE "js_sys_file_entity" + DROP CONSTRAINT "js_sys_file_entity_file_md5_key"; \ No newline at end of file diff --git a/web/db/mssql/core.sql b/web/db/mssql/core.sql index 213e0e98..93c2f692 100644 --- a/web/db/mssql/core.sql +++ b/web/db/mssql/core.sql @@ -289,7 +289,7 @@ CREATE TABLE [js_sys_employee_post] CREATE TABLE [js_sys_file_entity] ( [file_id] varchar(64) NOT NULL, - [file_md5] varchar(64) NOT NULL UNIQUE, + [file_md5] varchar(64) NOT NULL, [file_path] nvarchar(1000) NOT NULL, [file_content_type] varchar(200) NOT NULL, [file_extension] varchar(100) NOT NULL, diff --git a/web/db/mysql/core.sql b/web/db/mysql/core.sql index 3a70049c..5ca75ed7 100644 --- a/web/db/mysql/core.sql +++ b/web/db/mysql/core.sql @@ -295,8 +295,7 @@ CREATE TABLE js_sys_file_entity file_content_type varchar(200) NOT NULL COMMENT '文件内容类型', file_extension varchar(100) NOT NULL COMMENT '文件后缀扩展名', file_size decimal(31) NOT NULL COMMENT '文件大小(单位B)', - PRIMARY KEY (file_id), - UNIQUE (file_md5) + PRIMARY KEY (file_id) ) COMMENT = '文件实体表'; diff --git a/web/db/oracle/core.sql b/web/db/oracle/core.sql index 0caed7d0..7fd96dc6 100644 --- a/web/db/oracle/core.sql +++ b/web/db/oracle/core.sql @@ -289,7 +289,7 @@ CREATE TABLE js_sys_employee_post CREATE TABLE js_sys_file_entity ( file_id varchar2(64) NOT NULL, - file_md5 varchar2(64) NOT NULL UNIQUE, + file_md5 varchar2(64) NOT NULL, file_path nvarchar2(1000) NOT NULL, file_content_type varchar2(200) NOT NULL, file_extension varchar2(100) NOT NULL, diff --git a/web/db/postgresql/core.sql b/web/db/postgresql/core.sql index b0cf5453..95abd1ae 100644 --- a/web/db/postgresql/core.sql +++ b/web/db/postgresql/core.sql @@ -289,7 +289,7 @@ CREATE TABLE js_sys_employee_post CREATE TABLE js_sys_file_entity ( file_id varchar(64) NOT NULL, - file_md5 varchar(64) NOT NULL UNIQUE, + file_md5 varchar(64) NOT NULL, file_path varchar(1000) NOT NULL, file_content_type varchar(200) NOT NULL, file_extension varchar(100) NOT NULL, From 2e4ca4b2ad6682369dfe48b3964902ba4798383d Mon Sep 17 00:00:00 2001 From: thinkgem Date: Thu, 28 Feb 2019 23:16:22 +0800 Subject: [PATCH 04/23] =?UTF-8?q?JTA=E4=BA=8B=E7=89=A9=E8=B6=85=E6=97=B6?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E8=AE=BE=E7=BD=AE3=E5=88=86=E9=92=9F?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/core/src/main/resources/config/jeesite-core.yml | 2 ++ web/src/main/resources/config/application.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/modules/core/src/main/resources/config/jeesite-core.yml b/modules/core/src/main/resources/config/jeesite-core.yml index d0e50737..47c21021 100644 --- a/modules/core/src/main/resources/config/jeesite-core.yml +++ b/modules/core/src/main/resources/config/jeesite-core.yml @@ -47,6 +47,8 @@ jdbc: # JTA 分布式事务(v4.0.4+) jta: enabled: false + # 事务超时时间,单位毫秒(3分钟) + transactionTimeout: 180000 # 表名前缀 tablePrefix: js_ diff --git a/web/src/main/resources/config/application.yml b/web/src/main/resources/config/application.yml index 049138af..3eb2fa4b 100644 --- a/web/src/main/resources/config/application.yml +++ b/web/src/main/resources/config/application.yml @@ -124,6 +124,8 @@ jdbc: # # JTA 分布式事务(v4.0.4+) # jta: # enabled: false +# # 事务超时时间,单位毫秒(3分钟) +# transactionTimeout: 180000 # # 表名前缀 # tablePrefix: js_ From ee9f3fd5805fe919b974e2b6ed4dfd44f08b5f3a Mon Sep 17 00:00:00 2001 From: thinkgem Date: Tue, 5 Mar 2019 22:10:09 +0800 Subject: [PATCH 05/23] =?UTF-8?q?job=E6=B7=BB=E5=8A=A0instanceName?= =?UTF-8?q?=E9=9B=86=E7=BE=A4=E7=9A=84=E5=AE=9E=E4=BE=8B=E5=90=8D=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=E4=B8=8Eyml=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=80=E8=87=B4=EF=BC=8C=E5=9C=A8=E5=BE=AE=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=A8=A1=E5=9D=97=E4=B8=AD=E4=BD=BF=E7=94=A8=E9=9D=9E?= =?UTF-8?q?=E5=B8=B8=E9=87=8D=E8=A6=81=EF=BC=9B=E4=BC=98=E5=8C=96job?= =?UTF-8?q?=E7=9B=AE=E6=A0=87=E5=AD=97=E7=AC=A6=E4=B8=B2=E4=B8=AD=E5=8C=85?= =?UTF-8?q?=E5=90=AB=E5=8D=95=E5=BC=95=E5=8F=B7=E7=9A=84=E6=97=B6=E5=80=99?= =?UTF-8?q?XSS=E9=97=AE=E9=A2=98=EF=BC=9B=E8=8B=A5=E4=BD=A0=E9=87=8D?= =?UTF-8?q?=E5=86=99=E4=BA=86jobForm.html=E4=BD=A0=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=B8=8B=E6=AC=A1=E6=AD=A4=E6=96=87=E4=BB=B6?= =?UTF-8?q?=EF=BC=9B=E8=8B=A5=E4=BD=A0=E5=9C=A8yml=E4=B8=AD=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BA=86instanceName=E5=90=8D=E5=AD=97=EF=BC=8C?= =?UTF-8?q?=E4=BD=A0=E9=9C=80=E8=A6=81=E6=9B=B4=E6=96=B0=E4=B8=8Bsys=5Fjob?= =?UTF-8?q?=E7=9A=84instanceName=E5=AD=97=E6=AE=B5=E4=B8=BA=E4=BD=A0?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9A=84=E5=90=8D=E5=AD=97=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/static/common/base64.js | 108 +++ modules/core/db/core.erm | 677 ++++++++++-------- modules/core/db/db2/core.sql | 1 + modules/core/db/mssql/core.sql | 1 + modules/core/db/mysql/core.sql | 1 + modules/core/db/oracle/core.sql | 2 + modules/core/db/postgresql/core.sql | 2 + .../db/upgrade/core/mssql/mssql_4.1.4.sql | 4 +- .../db/upgrade/core/mysql/mysql_4.1.4.sql | 8 +- .../db/upgrade/core/oracle/oracle_4.1.4.sql | 6 +- .../core/postgresql/postgresql_4.1.4.sql | 9 +- .../main/resources/mybatis/mybatis-config.xml | 3 + 12 files changed, 502 insertions(+), 320 deletions(-) create mode 100644 common/src/main/resources/static/common/base64.js diff --git a/common/src/main/resources/static/common/base64.js b/common/src/main/resources/static/common/base64.js new file mode 100644 index 00000000..af766b54 --- /dev/null +++ b/common/src/main/resources/static/common/base64.js @@ -0,0 +1,108 @@ +(function() { + + this.Base64 = new Base64(); + + function Base64() { + + // private property + _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + + // public method for encoding + this.encode = function (input) { + var output = ""; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + input = _utf8_encode(input); + while (i < input.length) { + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + output = output + + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); + } + return output; + } + + // public method for decoding + this.decode = function (input) { + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + while (i < input.length) { + enc1 = _keyStr.indexOf(input.charAt(i++)); + enc2 = _keyStr.indexOf(input.charAt(i++)); + enc3 = _keyStr.indexOf(input.charAt(i++)); + enc4 = _keyStr.indexOf(input.charAt(i++)); + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + output = output + String.fromCharCode(chr1); + if (enc3 != 64) { + output = output + String.fromCharCode(chr2); + } + if (enc4 != 64) { + output = output + String.fromCharCode(chr3); + } + } + output = _utf8_decode(output); + return output; + } + + // private method for UTF-8 encoding + _utf8_encode = function (string) { + string = string.replace(/\r\n/g,"\n"); + var utftext = ""; + for (var n = 0; n < string.length; n++) { + var c = string.charCodeAt(n); + if (c < 128) { + utftext += String.fromCharCode(c); + } else if((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + + } + return utftext; + } + + // private method for UTF-8 decoding + _utf8_decode = function (utftext) { + var string = ""; + var i = 0; + var c = c1 = c2 = 0; + while ( i < utftext.length ) { + c = utftext.charCodeAt(i); + if (c < 128) { + string += String.fromCharCode(c); + i++; + } else if((c > 191) && (c < 224)) { + c2 = utftext.charCodeAt(i+1); + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } else { + c2 = utftext.charCodeAt(i+1); + c3 = utftext.charCodeAt(i+2); + string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + } + return string; + } + } +})(); \ No newline at end of file diff --git a/modules/core/db/core.erm b/modules/core/db/core.erm index ddce01a7..c6ada2b3 100644 --- a/modules/core/db/core.erm +++ b/modules/core/db/core.erm @@ -11,8 +11,8 @@ 0 1.0 - 1129 - 1486 + 0 + 2239 128 128 @@ -1671,6 +1671,22 @@ id varchar(n) + + f69037f9c9f1c4e8dd771b537b5cf3bc26d7ac3f + 64 + null + false + null + false + false + false + + false + + 集群的实例名字 + instance_name + varchar(n) + e2663716e6af40682333d3e8495a04bceff16647 1000 @@ -8270,7 +8286,7 @@ - 7d511abc9d985f7c911dcafd7fe2eec93ccbd8a4 + 78c6c210e1b15ba33ee65931a26f8a40512ba11c cf06de3277f0d1dbf7ef6dc8750ad12ff49c8c9c f32de7f0ee93167beb39e00a9bacf941b9e09eb5 -1 @@ -8335,7 +8351,7 @@ 6d5f3e5ef4d28e57966c33c4b4ef424f1dc42b7b 55c7d0a9ab8650c264a75bb1bf958cac2fe68152 - 7d511abc9d985f7c911dcafd7fe2eec93ccbd8a4 + 78c6c210e1b15ba33ee65931a26f8a40512ba11c @@ -8369,7 +8385,7 @@ 91110163a8a31ee61a4153360707026b5498dd65 443772d4627c23aef484c324c8e431121b921a44 - 7d511abc9d985f7c911dcafd7fe2eec93ccbd8a4 + 78c6c210e1b15ba33ee65931a26f8a40512ba11c @@ -15539,315 +15555,6 @@ - - cf06de3277f0d1dbf7ef6dc8750ad12ff49c8c9c - 386 - 426 - Segoe UI - 9 - 968 - 2244 - - 128 - 128 - 192 - - - - js_sys_job - 作业调度表 - - - - - - - 70abca97f16eab0d562a2104ec1a0ede326b1c46 - 55c7d0a9ab8650c264a75bb1bf958cac2fe68152 - - - - - varchar(n) - - - false - false - true - true - false - - - - - - - - - - - false - false - false - - - 0 - - - - 2fe17467ad48944f125de4abf28e973234a9bcb4 - 443772d4627c23aef484c324c8e431121b921a44 - - - - - varchar(n) - - - false - false - true - true - false - - - - - - - - - - - false - false - false - - - 0 - - - - 6cf6b1b94ad089cda04f9ed8ea2ad13bd9de0dd0 - 225e6d868b8d45320dc7f79db6296db64985b308 - - - - - nvarchar(n) - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - e2663716e6af40682333d3e8495a04bceff16647 - c5abf897611d8a927582d1dcb3deceef5c164614 - - - - - nvarchar(n) - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 03debcf1d4bf27cdad9acd24fda84a6ee9cdd908 - d8ece7f15423d813de0dc100fa1c67e047ca4a08 - - - - - varchar(n) - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 44ce4edd5ad45896934d6f90f14af5884b98ba5b - 7041a843a37e89ce935ad9309fa1a3b2548920e5 - - - - - decimal(p) - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 261aca14bc2dd0bef97fa78a1256a95b5cb94171 - 91c2e73c20940e4a715ffb02148e2f3a1bb72334 - - - - - character(n) - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 481c1a6225e0f2a86dbf4f752e9455afac57f897 - 644c88074f6f9cbe4b29b12b9633f4e238a2761b - - - - - character(n) - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - 85024a2953cf3e3c9c1cce49b2351853ab0d125b - - - - false - true - idx_sys_job_status - - - - - 644c88074f6f9cbe4b29b12b9633f4e238a2761b - false - - - - - - - - - -
bccc82daf981c93b1f698f012a4fbbe4aa9f728a360 @@ -16234,6 +15941,348 @@
+ + cf06de3277f0d1dbf7ef6dc8750ad12ff49c8c9c + 386 + 426 + Segoe UI + 9 + 968 + 2244 + + 128 + 128 + 192 + + + + js_sys_job + 作业调度表 + + + + + + + 70abca97f16eab0d562a2104ec1a0ede326b1c46 + 55c7d0a9ab8650c264a75bb1bf958cac2fe68152 + + + + + varchar(n) + + + false + false + true + true + false + + + + + + + + + + + false + false + false + + + 0 + + + + 2fe17467ad48944f125de4abf28e973234a9bcb4 + 443772d4627c23aef484c324c8e431121b921a44 + + + + + varchar(n) + + + false + false + true + true + false + + + + + + + + + + + false + false + false + + + 0 + + + + 6cf6b1b94ad089cda04f9ed8ea2ad13bd9de0dd0 + 225e6d868b8d45320dc7f79db6296db64985b308 + + + + + nvarchar(n) + + + false + false + true + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + e2663716e6af40682333d3e8495a04bceff16647 + c5abf897611d8a927582d1dcb3deceef5c164614 + + + + + nvarchar(n) + + + false + false + true + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 03debcf1d4bf27cdad9acd24fda84a6ee9cdd908 + d8ece7f15423d813de0dc100fa1c67e047ca4a08 + + + + + varchar(n) + + + false + false + true + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 44ce4edd5ad45896934d6f90f14af5884b98ba5b + 7041a843a37e89ce935ad9309fa1a3b2548920e5 + + + + + decimal(p) + + + false + false + true + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 261aca14bc2dd0bef97fa78a1256a95b5cb94171 + 91c2e73c20940e4a715ffb02148e2f3a1bb72334 + + + + + character(n) + + + false + false + true + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + f69037f9c9f1c4e8dd771b537b5cf3bc26d7ac3f + 599b9798d287db98af97bda02a378aa97b0c62c4 + + + + + varchar(n) + + JeeSiteScheduler + false + false + true + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 481c1a6225e0f2a86dbf4f752e9455afac57f897 + 644c88074f6f9cbe4b29b12b9633f4e238a2761b + + + + + character(n) + + + false + false + true + false + false + + + + + + + + + + + false + false + false + + + 0 + + + 85024a2953cf3e3c9c1cce49b2351853ab0d125b + + + + false + true + idx_sys_job_status + + + + + 644c88074f6f9cbe4b29b12b9633f4e238a2761b + false + + + + + + + + + +
diff --git a/modules/core/db/db2/core.sql b/modules/core/db/db2/core.sql index 7a7d77b6..0d87713b 100644 --- a/modules/core/db/db2/core.sql +++ b/modules/core/db/db2/core.sql @@ -327,6 +327,7 @@ CREATE TABLE js_sys_job cron_expression varchar(255) NOT NULL, misfire_instruction decimal(1) NOT NULL, concurrent char(1) NOT NULL, + instance_name varchar(64) DEFAULT 'JeeSiteScheduler' NOT NULL, status char(1) NOT NULL, create_by varchar(64) NOT NULL, create_date timestamp NOT NULL, diff --git a/modules/core/db/mssql/core.sql b/modules/core/db/mssql/core.sql index 93c2f692..a7be803d 100644 --- a/modules/core/db/mssql/core.sql +++ b/modules/core/db/mssql/core.sql @@ -327,6 +327,7 @@ CREATE TABLE [js_sys_job] [cron_expression] varchar(255) NOT NULL, [misfire_instruction] decimal(1) NOT NULL, [concurrent] char(1) NOT NULL, + [instance_name] varchar(64) DEFAULT 'JeeSiteScheduler' NOT NULL, [status] char(1) NOT NULL, [create_by] varchar(64) NOT NULL, [create_date] datetime NOT NULL, diff --git a/modules/core/db/mysql/core.sql b/modules/core/db/mysql/core.sql index 5ca75ed7..ada699d9 100644 --- a/modules/core/db/mysql/core.sql +++ b/modules/core/db/mysql/core.sql @@ -328,6 +328,7 @@ CREATE TABLE js_sys_job cron_expression varchar(255) NOT NULL COMMENT 'Cron执行表达式', misfire_instruction decimal(1) NOT NULL COMMENT '计划执行错误策略', concurrent char(1) NOT NULL COMMENT '是否并发执行', + instance_name varchar(64) DEFAULT 'JeeSiteScheduler' NOT NULL COMMENT '集群的实例名字', status char(1) NOT NULL COMMENT '状态(0正常 1删除 2暂停)', create_by varchar(64) NOT NULL COMMENT '创建者', create_date datetime NOT NULL COMMENT '创建时间', diff --git a/modules/core/db/oracle/core.sql b/modules/core/db/oracle/core.sql index 7fd96dc6..84b64596 100644 --- a/modules/core/db/oracle/core.sql +++ b/modules/core/db/oracle/core.sql @@ -327,6 +327,7 @@ CREATE TABLE js_sys_job cron_expression varchar2(255) NOT NULL, misfire_instruction number(1) NOT NULL, concurrent char(1) NOT NULL, + instance_name varchar2(64) DEFAULT 'JeeSiteScheduler' NOT NULL, status char(1) NOT NULL, create_by varchar2(64) NOT NULL, create_date timestamp NOT NULL, @@ -1133,6 +1134,7 @@ COMMENT ON COLUMN js_sys_job.invoke_target IS '调用目标字符串'; COMMENT ON COLUMN js_sys_job.cron_expression IS 'Cron执行表达式'; COMMENT ON COLUMN js_sys_job.misfire_instruction IS '计划执行错误策略'; COMMENT ON COLUMN js_sys_job.concurrent IS '是否并发执行'; +COMMENT ON COLUMN js_sys_job.instance_name IS '集群的实例名字'; COMMENT ON COLUMN js_sys_job.status IS '状态(0正常 1删除 2暂停)'; COMMENT ON COLUMN js_sys_job.create_by IS '创建者'; COMMENT ON COLUMN js_sys_job.create_date IS '创建时间'; diff --git a/modules/core/db/postgresql/core.sql b/modules/core/db/postgresql/core.sql index 95abd1ae..b8008810 100644 --- a/modules/core/db/postgresql/core.sql +++ b/modules/core/db/postgresql/core.sql @@ -327,6 +327,7 @@ CREATE TABLE js_sys_job cron_expression varchar(255) NOT NULL, misfire_instruction decimal(1) NOT NULL, concurrent char(1) NOT NULL, + instance_name varchar(64) DEFAULT 'JeeSiteScheduler' NOT NULL, status char(1) NOT NULL, create_by varchar(64) NOT NULL, create_date timestamp NOT NULL, @@ -1133,6 +1134,7 @@ COMMENT ON COLUMN js_sys_job.invoke_target IS '调用目标字符串'; COMMENT ON COLUMN js_sys_job.cron_expression IS 'Cron执行表达式'; COMMENT ON COLUMN js_sys_job.misfire_instruction IS '计划执行错误策略'; COMMENT ON COLUMN js_sys_job.concurrent IS '是否并发执行'; +COMMENT ON COLUMN js_sys_job.instance_name IS '集群的实例名字'; COMMENT ON COLUMN js_sys_job.status IS '状态(0正常 1删除 2暂停)'; COMMENT ON COLUMN js_sys_job.create_by IS '创建者'; COMMENT ON COLUMN js_sys_job.create_date IS '创建时间'; diff --git a/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql index 0be2026d..ce716764 100644 --- a/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql +++ b/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql @@ -1,3 +1,5 @@ -- 删除sys_file_entity表的file_md5唯一索引 --- ALTER TABLE [js_sys_file_entity] DROP CONSTRAINT [UQ__js_sys_f__3BD63C9E32E0915F] \ No newline at end of file +-- ALTER TABLE [${_prefix}sys_file_entity] DROP CONSTRAINT [UQ__js_sys_f__3BD63C9E32E0915F]; + +ALTER TABLE [${_prefix}sys_job] ADD [instance_name] varchar(64) DEFAULT JeeSiteScheduler NOT NULL; diff --git a/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql index c74ad94b..45de21ce 100644 --- a/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql +++ b/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql @@ -1,5 +1,9 @@ -- 删除sys_file_entity表的file_md5唯一索引 -ALTER TABLE `js_sys_file_entity` +ALTER TABLE `${_prefix}sys_file_entity` DROP INDEX `file_md5`, - ADD INDEX `file_md5`(`file_md5`); \ No newline at end of file + ADD INDEX `file_md5`(`file_md5`); + +-- 集群的实例名字 +ALTER TABLE `${_prefix}sys_job` + ADD COLUMN `instance_name` varchar(64) NOT NULL DEFAULT JeeSiteScheduler COMMENT '集群的实例名字' AFTER `concurrent`; \ No newline at end of file diff --git a/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql index 4719276d..3fc612ca 100644 --- a/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql +++ b/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql @@ -1,3 +1,7 @@ -- 删除sys_file_entity表的file_md5唯一索引 --- ALTER TABLE "JS_SYS_FILE_ENTITY" DROP CONSTRAINT "SYS_C0019398" \ No newline at end of file +-- ALTER TABLE "${_prefix}SYS_FILE_ENTITY" DROP CONSTRAINT "SYS_C0019398" + +ALTER TABLE "${_prefix}SYS_JOB" +ADD ("instance_name" VARCHAR2(64) DEFAULT JeeSiteScheduler NOT NULL ); +COMMENT ON COLUMN "${_prefix}SYS_JOB"."instance_name" IS '集群的实例名字' \ No newline at end of file diff --git a/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql index 86ef63e3..475a09cb 100644 --- a/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql +++ b/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql @@ -1,4 +1,9 @@ -- 删除sys_file_entity表的file_md5唯一索引 -ALTER TABLE "js_sys_file_entity" - DROP CONSTRAINT "js_sys_file_entity_file_md5_key"; \ No newline at end of file +ALTER TABLE "${_prefix}sys_file_entity" + DROP CONSTRAINT "${_prefix}sys_file_entity_file_md5_key"; + +-- 集群的实例名字 +ALTER TABLE "${_prefix}sys_job" + ADD COLUMN "instance_name" varchar(255) NOT NULL DEFAULT JeeSiteScheduler; +COMMENT ON COLUMN "${_prefix}sys_job"."instance_name" IS '集群的实例名字'; \ No newline at end of file diff --git a/modules/core/src/main/resources/mybatis/mybatis-config.xml b/modules/core/src/main/resources/mybatis/mybatis-config.xml index b66bc042..5b67d5b7 100644 --- a/modules/core/src/main/resources/mybatis/mybatis-config.xml +++ b/modules/core/src/main/resources/mybatis/mybatis-config.xml @@ -37,6 +37,9 @@ + + From 3aa20f63d04b29f1b0bcc080f51adc30380d7b69 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Tue, 5 Mar 2019 23:27:46 +0800 Subject: [PATCH 06/23] =?UTF-8?q?=E5=8F=96=E6=B6=88Shiro=E5=86=85=E9=83=A8?= =?UTF-8?q?=E5=AF=86=E7=A0=81=E9=AA=8C=E8=AF=81=EF=BC=8C=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E4=BD=BF=E7=94=A8validatePassword=E5=AF=86=E7=A0=81=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E6=96=B9=E6=B3=95=EF=BC=8C=E7=AE=80=E5=8C=96=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E5=AD=98=E5=82=A8=E7=9A=84=E4=B8=AA=E6=80=A7=E5=8C=96?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeesite/common/shiro/realm/AuthorizingRealm.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/modules/core/src/main/java/com/jeesite/common/shiro/realm/AuthorizingRealm.java b/modules/core/src/main/java/com/jeesite/common/shiro/realm/AuthorizingRealm.java index 4f1e7d1a..83b4167c 100644 --- a/modules/core/src/main/java/com/jeesite/common/shiro/realm/AuthorizingRealm.java +++ b/modules/core/src/main/java/com/jeesite/common/shiro/realm/AuthorizingRealm.java @@ -5,8 +5,6 @@ package com.jeesite.common.shiro.realm; import javax.servlet.http.HttpServletRequest; -import org.apache.shiro.authc.credential.HashedCredentialsMatcher; - import com.jeesite.common.codec.EncodeUtils; import com.jeesite.common.codec.Sha1Utils; import com.jeesite.common.utils.SpringUtils; @@ -31,10 +29,10 @@ public class AuthorizingRealm extends BaseAuthorizingRealm { public AuthorizingRealm() { super(); - // 设定密码校验的Hash算法与迭代次数 - HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(HASH_ALGORITHM); - matcher.setHashIterations(HASH_INTERATIONS); - this.setCredentialsMatcher(matcher); +// // 设定密码校验的Hash算法与迭代次数(V4.1.4及以上版本不需要了,统一使用validatePassword验证密码) +// HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(HASH_ALGORITHM); +// matcher.setHashIterations(HASH_INTERATIONS); +// this.setCredentialsMatcher(matcher); } /** From 8aa9700ae512e1ad37687bd37d3bb4df65f6fbc7 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Thu, 7 Mar 2019 21:17:45 +0800 Subject: [PATCH 07/23] =?UTF-8?q?mybatis=E8=BF=94=E5=9B=9E=E5=80=BC?= =?UTF-8?q?=E4=B8=BAMap=E6=97=B6=EF=BC=8C=E5=BD=93=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=A9=BA=E5=80=BC=E5=AD=97=E6=AE=B5=E6=97=B6=EF=BC=8C=E4=BB=8D?= =?UTF-8?q?=E7=84=B6=E9=9C=80=E8=A6=81=E8=BF=94=E5=9B=9E=E8=BF=99=E4=B8=AA?= =?UTF-8?q?Key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/core/src/main/resources/mybatis/mybatis-config.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/core/src/main/resources/mybatis/mybatis-config.xml b/modules/core/src/main/resources/mybatis/mybatis-config.xml index 5b67d5b7..764d897d 100644 --- a/modules/core/src/main/resources/mybatis/mybatis-config.xml +++ b/modules/core/src/main/resources/mybatis/mybatis-config.xml @@ -37,8 +37,8 @@ - + + From 0c9e3bf92fe74cca3b6a88be38bea1a9d5f64d1c Mon Sep 17 00:00:00 2001 From: thinkgem Date: Thu, 7 Mar 2019 23:27:04 +0800 Subject: [PATCH 08/23] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=B8=BA=E4=B8=AD=E5=8D=88=E7=9A=84=E6=97=B6=E5=80=99=E6=8A=A5?= =?UTF-8?q?=E9=94=99=E5=88=B0cookie=E4=B9=B1=E7=A0=81=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E3=80=82#IS654?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeesite/common/shiro/filter/FormAuthenticationFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/core/src/main/java/com/jeesite/common/shiro/filter/FormAuthenticationFilter.java b/modules/core/src/main/java/com/jeesite/common/shiro/filter/FormAuthenticationFilter.java index ec4777c6..1c2f32f9 100644 --- a/modules/core/src/main/java/com/jeesite/common/shiro/filter/FormAuthenticationFilter.java +++ b/modules/core/src/main/java/com/jeesite/common/shiro/filter/FormAuthenticationFilter.java @@ -95,7 +95,7 @@ public class FormAuthenticationFilter extends org.apache.shiro.web.filter.authc. } // 登录成功后,判断是否需要记住用户名 if (WebUtils.isTrue(request, DEFAULT_REMEMBER_USERCODE_PARAM)) { - rememberUserCodeCookie.setValue(EncodeUtils.xssFilter(username)); + rememberUserCodeCookie.setValue(EncodeUtils.encodeUrl(EncodeUtils.xssFilter(username))); rememberUserCodeCookie.saveTo((HttpServletRequest)request, (HttpServletResponse)response); } else { rememberUserCodeCookie.removeFrom((HttpServletRequest)request, (HttpServletResponse)response); From 2dc8e6a675b54c39679afb29360fcf34fcd47d96 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Fri, 8 Mar 2019 22:55:01 +0800 Subject: [PATCH 09/23] =?UTF-8?q?=E6=94=AF=E6=8C=81fileupload=E5=88=86?= =?UTF-8?q?=E7=89=87=E4=B8=8A=E4=BC=A0=EF=BC=8C=E5=A4=9A=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=EF=BC=88=E9=BB=98=E8=AE=A4=E5=85=B3=E9=97=AD?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/core/src/main/resources/config/jeesite-core.yml | 9 ++++++++- .../main/resources/i18n/core/common/i18n_en.properties | 3 ++- .../resources/i18n/core/common/i18n_zh_CN.properties | 3 ++- web/src/main/resources/config/application.yml | 7 +++++++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/modules/core/src/main/resources/config/jeesite-core.yml b/modules/core/src/main/resources/config/jeesite-core.yml index 47c21021..3408d311 100644 --- a/modules/core/src/main/resources/config/jeesite-core.yml +++ b/modules/core/src/main/resources/config/jeesite-core.yml @@ -500,7 +500,14 @@ file: # application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document, # application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, # application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation - + + # 是否开启分片上传 + chunked: false + # 分片大小,单位字节(10M) + chunkSize: 10485760 + # 最大上传线程数 + threads: 1 + # 是否用文件流方式下载(支持断点续传) isFileStreamDown: true diff --git a/modules/core/src/main/resources/i18n/core/common/i18n_en.properties b/modules/core/src/main/resources/i18n/core/common/i18n_en.properties index 4e606c29..53401299 100644 --- a/modules/core/src/main/resources/i18n/core/common/i18n_en.properties +++ b/modules/core/src/main/resources/i18n/core/common/i18n_en.properties @@ -59,7 +59,7 @@ sys.error.returnButton=Previous page # =========== 文件上传相关 =========== -sys.file.uploadFileIsEmpty=This is a new file, please upload file! +sys.file.uploadFileIsEmpty=This file is not on the server! sys.file.uploadValidNotBlank=File md5 and file name cannot be empty! sys.file.uploadValidImage=Can only upload images ({0}) sys.file.uploadValidVideo=Can only upload video ({0}) @@ -70,3 +70,4 @@ sys.file.uploadValidContent=File content format not allowed! sys.file.uploadSuccessSeconds=Seconds upload success , time {0} sys.file.uploadSuccess=Upload success {0} sys.file.downloadFileNotExist=File lost or non-existent! +sys.file.chunkUploading=Uploading {0}/{1} diff --git a/modules/core/src/main/resources/i18n/core/common/i18n_zh_CN.properties b/modules/core/src/main/resources/i18n/core/common/i18n_zh_CN.properties index c3440dfa..31e46b3b 100644 --- a/modules/core/src/main/resources/i18n/core/common/i18n_zh_CN.properties +++ b/modules/core/src/main/resources/i18n/core/common/i18n_zh_CN.properties @@ -60,7 +60,7 @@ sys.error.returnButton=返回上一页 # =========== 文件上传相关 =========== -sys.file.uploadFileIsEmpty=没有找到上传的文件! +sys.file.uploadFileIsEmpty=服务器上没有这个文件! sys.file.uploadValidNotBlank=文件校验码和文件名不能为空! sys.file.uploadValidImage=只能上传图片({0}) sys.file.uploadValidVideo=只能上传视频({0}) @@ -71,3 +71,4 @@ sys.file.uploadValidContent=文件内容格式不允许! sys.file.uploadSuccessSeconds=秒传成功,用时{0} sys.file.uploadSuccess=上传成功,用时{0} sys.file.downloadFileNotExist=文件已丢失或不存在! +sys.file.chunkUploading=正在上传 {0}/{1} diff --git a/web/src/main/resources/config/application.yml b/web/src/main/resources/config/application.yml index 3eb2fa4b..95d067a9 100644 --- a/web/src/main/resources/config/application.yml +++ b/web/src/main/resources/config/application.yml @@ -514,6 +514,13 @@ logging: ## application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, ## application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation # +# # 是否开启分片上传 +# chunked: false +# # 分片大小,单位字节(10M) +# chunkSize: 10485760 +# # 最大上传线程数 +# threads: 1 +# # # 是否用文件流方式下载(支持断点续传) # isFileStreamDown: true From 57a00dfb977094ce80c624bff86a088f54a0f251 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Mon, 11 Mar 2019 10:22:51 +0800 Subject: [PATCH 10/23] =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E6=8E=A7=E4=BB=B6=E5=A2=9E=E5=8A=A0fileMeta=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E6=9D=A5=E5=AD=98=E5=9C=A8=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=EF=BC=8C=E4=BE=8B=E5=A6=82=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E5=8F=AF=E5=AD=98=E5=82=A8=E5=AE=BD=E9=AB=98=EF=BC=8C=E7=94=A8?= =?UTF-8?q?=E6=9D=A5=E5=81=9A=E7=80=91=E5=B8=83=E6=B5=81=E5=BC=8F=E5=B8=83?= =?UTF-8?q?=E5=B1=80=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/core/db/core.erm | 57 ++++- modules/core/db/db2/core.sql | 205 +++++++++--------- modules/core/db/mssql/core.sql | 1 + modules/core/db/mysql/core.sql | 1 + modules/core/db/oracle/core.sql | 2 + modules/core/db/postgresql/core.sql | 2 + .../db/upgrade/core/mssql/mssql_4.1.4.sql | 4 + .../db/upgrade/core/mysql/mysql_4.1.4.sql | 12 +- .../db/upgrade/core/oracle/oracle_4.1.4.sql | 14 +- .../core/postgresql/postgresql_4.1.4.sql | 15 +- web/db/mssql/core.sql | 2 + web/db/mysql/core.sql | 2 + web/db/oracle/core.sql | 4 + web/db/postgresql/core.sql | 4 + 14 files changed, 206 insertions(+), 119 deletions(-) diff --git a/modules/core/db/core.erm b/modules/core/db/core.erm index c6ada2b3..64e3b7a5 100644 --- a/modules/core/db/core.erm +++ b/modules/core/db/core.erm @@ -11,8 +11,8 @@ 0 1.0 - 0 - 2239 + 1232 + 988 128 128 @@ -1447,6 +1447,22 @@ file_md5 varchar(n)
+ + e2e0369af3191a268fc1d03ea0eef107d0392be0 + 255 + null + false + null + false + false + false + + false + + 文件信息(JSON格式) + file_meta + varchar(n) + 7295c82faa1ac317a2e7b0e11fbc9b7f8a1bc1e4 500 @@ -4831,6 +4847,39 @@ 0
+ + e2e0369af3191a268fc1d03ea0eef107d0392be0 + c1a441e7ef57c97818f59db365d7162fda7cc0df + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + @@ -4881,7 +4930,7 @@ - 2e69f023ad8cecebbe06f5330a9d65c6524a5b39 + 21533fba2463605c6cca43bbbb642eeaa8530a5b 6ce90f0c465f8e4480cf489e2f1cfcb423be63d9 bee7bb4881e285bf50f380b8829edff3c2a1ddbf -1 @@ -4946,7 +4995,7 @@ fc44d466dd6009e48b5222d1d71e38d025194ff0 54b86f255d95078898534902087fb704b4265b60 - 2e69f023ad8cecebbe06f5330a9d65c6524a5b39 + 21533fba2463605c6cca43bbbb642eeaa8530a5b diff --git a/modules/core/db/db2/core.sql b/modules/core/db/db2/core.sql index 0d87713b..935a20ed 100644 --- a/modules/core/db/db2/core.sql +++ b/modules/core/db/db2/core.sql @@ -43,7 +43,7 @@ CREATE TABLE js_gen_table ( table_name varchar(64) NOT NULL, class_name varchar(100) NOT NULL, - comments varchar(500) NOT NULL, + comments vargraphic(500) NOT NULL, parent_table_name varchar(64), parent_table_fk_name varchar(64), data_source_name varchar(64), @@ -51,16 +51,16 @@ CREATE TABLE js_gen_table package_name varchar(500), module_name varchar(30), sub_module_name varchar(30), - function_name varchar(200), - function_name_simple varchar(50), - function_author varchar(50), - gen_base_dir varchar(1000), - options varchar(1000), + function_name vargraphic(200), + function_name_simple vargraphic(50), + function_author vargraphic(50), + gen_base_dir vargraphic(1000), + options vargraphic(1000), create_by varchar(64) NOT NULL, create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), PRIMARY KEY (table_name) ); @@ -73,8 +73,8 @@ CREATE TABLE js_gen_table_column column_name varchar(64) NOT NULL, column_sort decimal(10), column_type varchar(100) NOT NULL, - column_label varchar(50), - comments varchar(500) NOT NULL, + column_label vargraphic(50), + comments vargraphic(500) NOT NULL, attr_name varchar(200) NOT NULL, attr_type varchar(200) NOT NULL, is_pk char(1), @@ -86,7 +86,7 @@ CREATE TABLE js_gen_table_column query_type varchar(200), is_edit char(1), show_type varchar(200), - options varchar(1000), + options vargraphic(1000), PRIMARY KEY (id) ); @@ -102,14 +102,14 @@ CREATE TABLE js_sys_area tree_leaf char(1) NOT NULL, tree_level decimal(4) NOT NULL, tree_names varchar(1000) NOT NULL, - area_name varchar(100) NOT NULL, + area_name vargraphic(100) NOT NULL, area_type char(1), status char(1) DEFAULT '0' NOT NULL, create_by varchar(64) NOT NULL, create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), PRIMARY KEY (area_code) ); @@ -126,25 +126,25 @@ CREATE TABLE js_sys_company tree_level decimal(4) NOT NULL, tree_names varchar(1000) NOT NULL, view_code varchar(100) NOT NULL, - company_name varchar(200) NOT NULL, - full_name varchar(200) NOT NULL, + company_name vargraphic(200) NOT NULL, + full_name vargraphic(200) NOT NULL, area_code varchar(100), status char(1) DEFAULT '0' NOT NULL, create_by varchar(64) NOT NULL, create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), corp_code varchar(64) DEFAULT '0' NOT NULL, - corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL, - extend_s1 varchar(500), - extend_s2 varchar(500), - extend_s3 varchar(500), - extend_s4 varchar(500), - extend_s5 varchar(500), - extend_s6 varchar(500), - extend_s7 varchar(500), - extend_s8 varchar(500), + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + extend_s1 vargraphic(500), + extend_s2 vargraphic(500), + extend_s3 vargraphic(500), + extend_s4 vargraphic(500), + extend_s5 vargraphic(500), + extend_s6 vargraphic(500), + extend_s7 vargraphic(500), + extend_s8 vargraphic(500), extend_i1 decimal(19), extend_i2 decimal(19), extend_i3 decimal(19), @@ -174,15 +174,15 @@ CREATE TABLE js_sys_company_office CREATE TABLE js_sys_config ( id varchar(64) NOT NULL, - config_name varchar(100) NOT NULL, + config_name vargraphic(100) NOT NULL, config_key varchar(100) NOT NULL, - config_value varchar(1000), + config_value vargraphic(1000), is_sys char(1) NOT NULL, create_by varchar(64) NOT NULL, create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), PRIMARY KEY (id) ); @@ -198,29 +198,29 @@ CREATE TABLE js_sys_dict_data tree_leaf char(1) NOT NULL, tree_level decimal(4) NOT NULL, tree_names varchar(1000) NOT NULL, - dict_label varchar(100) NOT NULL, + dict_label vargraphic(100) NOT NULL, dict_value varchar(100) NOT NULL, dict_type varchar(100) NOT NULL, is_sys char(1) NOT NULL, - description varchar(500), - css_style varchar(500), - css_class varchar(500), + description vargraphic(500), + css_style vargraphic(500), + css_class vargraphic(500), status char(1) DEFAULT '0' NOT NULL, create_by varchar(64) NOT NULL, create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), corp_code varchar(64) DEFAULT '0' NOT NULL, - corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL, - extend_s1 varchar(500), - extend_s2 varchar(500), - extend_s3 varchar(500), - extend_s4 varchar(500), - extend_s5 varchar(500), - extend_s6 varchar(500), - extend_s7 varchar(500), - extend_s8 varchar(500), + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + extend_s1 vargraphic(500), + extend_s2 vargraphic(500), + extend_s3 vargraphic(500), + extend_s4 vargraphic(500), + extend_s5 vargraphic(500), + extend_s6 vargraphic(500), + extend_s7 vargraphic(500), + extend_s8 vargraphic(500), extend_i1 decimal(19), extend_i2 decimal(19), extend_i3 decimal(19), @@ -241,7 +241,7 @@ CREATE TABLE js_sys_dict_data CREATE TABLE js_sys_dict_type ( id varchar(64) NOT NULL, - dict_name varchar(100) NOT NULL, + dict_name vargraphic(100) NOT NULL, dict_type varchar(100) NOT NULL, is_sys char(1) NOT NULL, status char(1) DEFAULT '0' NOT NULL, @@ -249,7 +249,7 @@ CREATE TABLE js_sys_dict_type create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), PRIMARY KEY (id) ); @@ -258,20 +258,20 @@ CREATE TABLE js_sys_dict_type CREATE TABLE js_sys_employee ( emp_code varchar(64) NOT NULL, - emp_name varchar(100) NOT NULL, + emp_name vargraphic(100) NOT NULL, emp_name_en varchar(100), office_code varchar(64) NOT NULL, - office_name varchar(100) NOT NULL, + office_name vargraphic(100) NOT NULL, company_code varchar(64), - company_name varchar(200), + company_name vargraphic(200), status char(1) NOT NULL, create_by varchar(64) NOT NULL, create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), corp_code varchar(64) DEFAULT '0' NOT NULL, - corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, PRIMARY KEY (emp_code) ); @@ -290,10 +290,11 @@ CREATE TABLE js_sys_file_entity ( file_id varchar(64) NOT NULL, file_md5 varchar(64) NOT NULL, - file_path varchar(1000) NOT NULL, + file_path vargraphic(1000) NOT NULL, file_content_type varchar(200) NOT NULL, file_extension varchar(100) NOT NULL, file_size decimal(31) NOT NULL, + file_meta varchar(255), PRIMARY KEY (file_id) ); @@ -303,7 +304,7 @@ CREATE TABLE js_sys_file_upload ( id varchar(64) NOT NULL, file_id varchar(64) NOT NULL, - file_name varchar(500) NOT NULL, + file_name vargraphic(500) NOT NULL, file_type varchar(20) NOT NULL, biz_key varchar(64), biz_type varchar(64), @@ -312,7 +313,7 @@ CREATE TABLE js_sys_file_upload create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), PRIMARY KEY (id) ); @@ -322,8 +323,8 @@ CREATE TABLE js_sys_job ( job_name varchar(64) NOT NULL, job_group varchar(64) NOT NULL, - description varchar(100) NOT NULL, - invoke_target varchar(1000) NOT NULL, + description vargraphic(100) NOT NULL, + invoke_target vargraphic(1000) NOT NULL, cron_expression varchar(255) NOT NULL, misfire_instruction decimal(1) NOT NULL, concurrent char(1) NOT NULL, @@ -333,7 +334,7 @@ CREATE TABLE js_sys_job create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), PRIMARY KEY (job_name, job_group) ); @@ -359,14 +360,14 @@ CREATE TABLE js_sys_lang ( id varchar(64) NOT NULL, module_code varchar(64) NOT NULL, - lang_code varchar(500) NOT NULL, - lang_text varchar(500) NOT NULL, + lang_code vargraphic(500) NOT NULL, + lang_text vargraphic(500) NOT NULL, lang_type varchar(50) NOT NULL, create_by varchar(64) NOT NULL, create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), PRIMARY KEY (id) ); @@ -376,11 +377,11 @@ CREATE TABLE js_sys_log ( id varchar(64) NOT NULL, log_type varchar(50) NOT NULL, - log_title varchar(500) NOT NULL, + log_title vargraphic(500) NOT NULL, create_by varchar(64) NOT NULL, - create_by_name varchar(100) NOT NULL, + create_by_name vargraphic(100) NOT NULL, create_date timestamp NOT NULL, - request_uri varchar(500), + request_uri vargraphic(500), request_method varchar(10), request_params clob, diff_modify_data clob, @@ -390,12 +391,12 @@ CREATE TABLE js_sys_log server_addr varchar(255) NOT NULL, is_exception char(1), exception_info clob, - user_agent varchar(500), + user_agent vargraphic(500), device_name varchar(100), browser_name varchar(100), execute_time decimal(19), corp_code varchar(64) DEFAULT '0' NOT NULL, - corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, PRIMARY KEY (id) ); @@ -427,15 +428,15 @@ CREATE TABLE js_sys_menu create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), - extend_s1 varchar(500), - extend_s2 varchar(500), - extend_s3 varchar(500), - extend_s4 varchar(500), - extend_s5 varchar(500), - extend_s6 varchar(500), - extend_s7 varchar(500), - extend_s8 varchar(500), + remarks vargraphic(500), + extend_s1 vargraphic(500), + extend_s2 vargraphic(500), + extend_s3 vargraphic(500), + extend_s4 vargraphic(500), + extend_s5 vargraphic(500), + extend_s6 vargraphic(500), + extend_s7 vargraphic(500), + extend_s8 vargraphic(500), extend_i1 decimal(19), extend_i2 decimal(19), extend_i3 decimal(19), @@ -457,7 +458,7 @@ CREATE TABLE js_sys_module ( module_code varchar(64) NOT NULL, module_name varchar(100) NOT NULL, - description varchar(500), + description vargraphic(500), main_class_name varchar(500), current_version varchar(50), upgrade_info varchar(300), @@ -466,7 +467,7 @@ CREATE TABLE js_sys_module create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), PRIMARY KEY (module_code) ); @@ -492,7 +493,7 @@ CREATE TABLE js_sys_msg_inner create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), PRIMARY KEY (id) ); @@ -575,7 +576,7 @@ CREATE TABLE js_sys_msg_template id varchar(64) NOT NULL, module_code varchar(64), tpl_key varchar(100) NOT NULL, - tpl_name varchar(100) NOT NULL, + tpl_name vargraphic(100) NOT NULL, tpl_type varchar(16) NOT NULL, tpl_content clob NOT NULL, status char(1) DEFAULT '0' NOT NULL, @@ -583,7 +584,7 @@ CREATE TABLE js_sys_msg_template create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), PRIMARY KEY (id) ); @@ -600,7 +601,7 @@ CREATE TABLE js_sys_office tree_level decimal(4) NOT NULL, tree_names varchar(1000) NOT NULL, view_code varchar(100) NOT NULL, - office_name varchar(100) NOT NULL, + office_name vargraphic(100) NOT NULL, full_name varchar(200) NOT NULL, office_type char(1) NOT NULL, leader varchar(100), @@ -613,17 +614,17 @@ CREATE TABLE js_sys_office create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), corp_code varchar(64) DEFAULT '0' NOT NULL, - corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL, - extend_s1 varchar(500), - extend_s2 varchar(500), - extend_s3 varchar(500), - extend_s4 varchar(500), - extend_s5 varchar(500), - extend_s6 varchar(500), - extend_s7 varchar(500), - extend_s8 varchar(500), + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + extend_s1 vargraphic(500), + extend_s2 vargraphic(500), + extend_s3 vargraphic(500), + extend_s4 vargraphic(500), + extend_s5 vargraphic(500), + extend_s6 vargraphic(500), + extend_s7 vargraphic(500), + extend_s8 vargraphic(500), extend_i1 decimal(19), extend_i2 decimal(19), extend_i3 decimal(19), @@ -652,9 +653,9 @@ CREATE TABLE js_sys_post create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), corp_code varchar(64) DEFAULT '0' NOT NULL, - corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, PRIMARY KEY (post_code) ); @@ -674,9 +675,9 @@ CREATE TABLE js_sys_role create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), corp_code varchar(64) DEFAULT '0' NOT NULL, - corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, PRIMARY KEY (role_code) ); @@ -713,7 +714,7 @@ CREATE TABLE js_sys_user phone varchar(100), sex char(1), avatar varchar(1000), - sign varchar(200), + sign vargraphic(200), wx_openid varchar(100), mobile_imei varchar(100), user_type varchar(16) NOT NULL, @@ -740,17 +741,17 @@ CREATE TABLE js_sys_user create_date timestamp NOT NULL, update_by varchar(64) NOT NULL, update_date timestamp NOT NULL, - remarks varchar(500), + remarks vargraphic(500), corp_code varchar(64) DEFAULT '0' NOT NULL, - corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL, - extend_s1 varchar(500), - extend_s2 varchar(500), - extend_s3 varchar(500), - extend_s4 varchar(500), - extend_s5 varchar(500), - extend_s6 varchar(500), - extend_s7 varchar(500), - extend_s8 varchar(500), + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + extend_s1 vargraphic(500), + extend_s2 vargraphic(500), + extend_s3 vargraphic(500), + extend_s4 vargraphic(500), + extend_s5 vargraphic(500), + extend_s6 vargraphic(500), + extend_s7 vargraphic(500), + extend_s8 vargraphic(500), extend_i1 decimal(19), extend_i2 decimal(19), extend_i3 decimal(19), diff --git a/modules/core/db/mssql/core.sql b/modules/core/db/mssql/core.sql index a7be803d..0cf1045d 100644 --- a/modules/core/db/mssql/core.sql +++ b/modules/core/db/mssql/core.sql @@ -294,6 +294,7 @@ CREATE TABLE [js_sys_file_entity] [file_content_type] varchar(200) NOT NULL, [file_extension] varchar(100) NOT NULL, [file_size] decimal(31) NOT NULL, + [file_meta] varchar(255), PRIMARY KEY ([file_id]) ); diff --git a/modules/core/db/mysql/core.sql b/modules/core/db/mysql/core.sql index ada699d9..8725c462 100644 --- a/modules/core/db/mysql/core.sql +++ b/modules/core/db/mysql/core.sql @@ -295,6 +295,7 @@ CREATE TABLE js_sys_file_entity file_content_type varchar(200) NOT NULL COMMENT '文件内容类型', file_extension varchar(100) NOT NULL COMMENT '文件后缀扩展名', file_size decimal(31) NOT NULL COMMENT '文件大小(单位B)', + file_meta varchar(255) COMMENT '文件信息(JSON格式)', PRIMARY KEY (file_id) ) COMMENT = '文件实体表'; diff --git a/modules/core/db/oracle/core.sql b/modules/core/db/oracle/core.sql index 84b64596..b29424e7 100644 --- a/modules/core/db/oracle/core.sql +++ b/modules/core/db/oracle/core.sql @@ -294,6 +294,7 @@ CREATE TABLE js_sys_file_entity file_content_type varchar2(200) NOT NULL, file_extension varchar2(100) NOT NULL, file_size number(31) NOT NULL, + file_meta varchar2(255), PRIMARY KEY (file_id) ); @@ -1113,6 +1114,7 @@ COMMENT ON COLUMN js_sys_file_entity.file_path IS '文件相对路径'; COMMENT ON COLUMN js_sys_file_entity.file_content_type IS '文件内容类型'; COMMENT ON COLUMN js_sys_file_entity.file_extension IS '文件后缀扩展名'; COMMENT ON COLUMN js_sys_file_entity.file_size IS '文件大小(单位B)'; +COMMENT ON COLUMN js_sys_file_entity.file_meta IS '文件信息(JSON格式)'; COMMENT ON TABLE js_sys_file_upload IS '文件上传表'; COMMENT ON COLUMN js_sys_file_upload.id IS '编号'; COMMENT ON COLUMN js_sys_file_upload.file_id IS '文件编号'; diff --git a/modules/core/db/postgresql/core.sql b/modules/core/db/postgresql/core.sql index b8008810..f7a01cf4 100644 --- a/modules/core/db/postgresql/core.sql +++ b/modules/core/db/postgresql/core.sql @@ -294,6 +294,7 @@ CREATE TABLE js_sys_file_entity file_content_type varchar(200) NOT NULL, file_extension varchar(100) NOT NULL, file_size decimal(31) NOT NULL, + file_meta varchar(255), PRIMARY KEY (file_id) ) WITHOUT OIDS; @@ -1113,6 +1114,7 @@ COMMENT ON COLUMN js_sys_file_entity.file_path IS '文件相对路径'; COMMENT ON COLUMN js_sys_file_entity.file_content_type IS '文件内容类型'; COMMENT ON COLUMN js_sys_file_entity.file_extension IS '文件后缀扩展名'; COMMENT ON COLUMN js_sys_file_entity.file_size IS '文件大小(单位B)'; +COMMENT ON COLUMN js_sys_file_entity.file_meta IS '文件信息(JSON格式)'; COMMENT ON TABLE js_sys_file_upload IS '文件上传表'; COMMENT ON COLUMN js_sys_file_upload.id IS '编号'; COMMENT ON COLUMN js_sys_file_upload.file_id IS '文件编号'; diff --git a/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql index ce716764..80f8f640 100644 --- a/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql +++ b/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql @@ -2,4 +2,8 @@ -- 删除sys_file_entity表的file_md5唯一索引 -- ALTER TABLE [${_prefix}sys_file_entity] DROP CONSTRAINT [UQ__js_sys_f__3BD63C9E32E0915F]; +-- 增加文件信息字段(可存储图片大小) +ALTER TABLE [${_prefix}js_sys_file_entity] ADD [file_meta] varchar(64) NULL; + +-- 集群的实例名字 ALTER TABLE [${_prefix}sys_job] ADD [instance_name] varchar(64) DEFAULT JeeSiteScheduler NOT NULL; diff --git a/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql index 45de21ce..2efffd57 100644 --- a/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql +++ b/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql @@ -1,9 +1,13 @@ -- 删除sys_file_entity表的file_md5唯一索引 ALTER TABLE `${_prefix}sys_file_entity` - DROP INDEX `file_md5`, - ADD INDEX `file_md5`(`file_md5`); - +DROP INDEX `file_md5`, +ADD INDEX `file_md5`(`file_md5`); + +-- 增加文件信息字段(可存储图片大小) +ALTER TABLE `${_prefix}js_sys_file_entity` +ADD COLUMN `file_meta` varchar(255) NULL COMMENT '文件信息(JSON格式)' AFTER `file_size`; + -- 集群的实例名字 ALTER TABLE `${_prefix}sys_job` - ADD COLUMN `instance_name` varchar(64) NOT NULL DEFAULT JeeSiteScheduler COMMENT '集群的实例名字' AFTER `concurrent`; \ No newline at end of file +ADD COLUMN `instance_name` varchar(64) NOT NULL DEFAULT JeeSiteScheduler COMMENT '集群的实例名字' AFTER `concurrent`; \ No newline at end of file diff --git a/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql index 3fc612ca..a275f4b4 100644 --- a/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql +++ b/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql @@ -1,7 +1,13 @@ -- 删除sys_file_entity表的file_md5唯一索引 --- ALTER TABLE "${_prefix}SYS_FILE_ENTITY" DROP CONSTRAINT "SYS_C0019398" +-- ALTER TABLE ${_prefix}SYS_FILE_ENTITY DROP CONSTRAINT SYS_C0019398 -ALTER TABLE "${_prefix}SYS_JOB" -ADD ("instance_name" VARCHAR2(64) DEFAULT JeeSiteScheduler NOT NULL ); -COMMENT ON COLUMN "${_prefix}SYS_JOB"."instance_name" IS '集群的实例名字' \ No newline at end of file +-- 增加文件信息字段(可存储图片大小) +ALTER TABLE ${_prefix}SYS_FILE_ENTITY +ADD (file_meta VARCHAR2(64) NULL ); +COMMENT ON COLUMN ${_prefix}SYS_FILE_ENTITY.file_meta IS '文件信息(JSON格式)' + +-- 集群的实例名字 +ALTER TABLE ${_prefix}SYS_JOB +ADD (instance_name VARCHAR2(64) DEFAULT JeeSiteScheduler NOT NULL ); +COMMENT ON COLUMN ${_prefix}SYS_JOB.instance_name IS '集群的实例名字' \ No newline at end of file diff --git a/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql index 475a09cb..95fecce7 100644 --- a/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql +++ b/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql @@ -1,9 +1,14 @@ -- 删除sys_file_entity表的file_md5唯一索引 -ALTER TABLE "${_prefix}sys_file_entity" - DROP CONSTRAINT "${_prefix}sys_file_entity_file_md5_key"; +ALTER TABLE ${_prefix}sys_file_entity +DROP CONSTRAINT ${_prefix}sys_file_entity_file_md5_key; + +-- 增加文件信息字段(可存储图片大小) +ALTER TABLE ${_prefix}sys_file_entity +ADD COLUMN file_meta varchar(255) NULL; +COMMENT ON COLUMN ${_prefix}sys_file_entity.file_meta IS '文件信息(JSON格式)'; -- 集群的实例名字 -ALTER TABLE "${_prefix}sys_job" - ADD COLUMN "instance_name" varchar(255) NOT NULL DEFAULT JeeSiteScheduler; -COMMENT ON COLUMN "${_prefix}sys_job"."instance_name" IS '集群的实例名字'; \ No newline at end of file +ALTER TABLE ${_prefix}sys_job +ADD COLUMN instance_name varchar(255) NOT NULL DEFAULT JeeSiteScheduler; +COMMENT ON COLUMN ${_prefix}sys_job.instance_name IS '集群的实例名字'; \ No newline at end of file diff --git a/web/db/mssql/core.sql b/web/db/mssql/core.sql index 93c2f692..0cf1045d 100644 --- a/web/db/mssql/core.sql +++ b/web/db/mssql/core.sql @@ -294,6 +294,7 @@ CREATE TABLE [js_sys_file_entity] [file_content_type] varchar(200) NOT NULL, [file_extension] varchar(100) NOT NULL, [file_size] decimal(31) NOT NULL, + [file_meta] varchar(255), PRIMARY KEY ([file_id]) ); @@ -327,6 +328,7 @@ CREATE TABLE [js_sys_job] [cron_expression] varchar(255) NOT NULL, [misfire_instruction] decimal(1) NOT NULL, [concurrent] char(1) NOT NULL, + [instance_name] varchar(64) DEFAULT 'JeeSiteScheduler' NOT NULL, [status] char(1) NOT NULL, [create_by] varchar(64) NOT NULL, [create_date] datetime NOT NULL, diff --git a/web/db/mysql/core.sql b/web/db/mysql/core.sql index 5ca75ed7..8725c462 100644 --- a/web/db/mysql/core.sql +++ b/web/db/mysql/core.sql @@ -295,6 +295,7 @@ CREATE TABLE js_sys_file_entity file_content_type varchar(200) NOT NULL COMMENT '文件内容类型', file_extension varchar(100) NOT NULL COMMENT '文件后缀扩展名', file_size decimal(31) NOT NULL COMMENT '文件大小(单位B)', + file_meta varchar(255) COMMENT '文件信息(JSON格式)', PRIMARY KEY (file_id) ) COMMENT = '文件实体表'; @@ -328,6 +329,7 @@ CREATE TABLE js_sys_job cron_expression varchar(255) NOT NULL COMMENT 'Cron执行表达式', misfire_instruction decimal(1) NOT NULL COMMENT '计划执行错误策略', concurrent char(1) NOT NULL COMMENT '是否并发执行', + instance_name varchar(64) DEFAULT 'JeeSiteScheduler' NOT NULL COMMENT '集群的实例名字', status char(1) NOT NULL COMMENT '状态(0正常 1删除 2暂停)', create_by varchar(64) NOT NULL COMMENT '创建者', create_date datetime NOT NULL COMMENT '创建时间', diff --git a/web/db/oracle/core.sql b/web/db/oracle/core.sql index 7fd96dc6..b29424e7 100644 --- a/web/db/oracle/core.sql +++ b/web/db/oracle/core.sql @@ -294,6 +294,7 @@ CREATE TABLE js_sys_file_entity file_content_type varchar2(200) NOT NULL, file_extension varchar2(100) NOT NULL, file_size number(31) NOT NULL, + file_meta varchar2(255), PRIMARY KEY (file_id) ); @@ -327,6 +328,7 @@ CREATE TABLE js_sys_job cron_expression varchar2(255) NOT NULL, misfire_instruction number(1) NOT NULL, concurrent char(1) NOT NULL, + instance_name varchar2(64) DEFAULT 'JeeSiteScheduler' NOT NULL, status char(1) NOT NULL, create_by varchar2(64) NOT NULL, create_date timestamp NOT NULL, @@ -1112,6 +1114,7 @@ COMMENT ON COLUMN js_sys_file_entity.file_path IS '文件相对路径'; COMMENT ON COLUMN js_sys_file_entity.file_content_type IS '文件内容类型'; COMMENT ON COLUMN js_sys_file_entity.file_extension IS '文件后缀扩展名'; COMMENT ON COLUMN js_sys_file_entity.file_size IS '文件大小(单位B)'; +COMMENT ON COLUMN js_sys_file_entity.file_meta IS '文件信息(JSON格式)'; COMMENT ON TABLE js_sys_file_upload IS '文件上传表'; COMMENT ON COLUMN js_sys_file_upload.id IS '编号'; COMMENT ON COLUMN js_sys_file_upload.file_id IS '文件编号'; @@ -1133,6 +1136,7 @@ COMMENT ON COLUMN js_sys_job.invoke_target IS '调用目标字符串'; COMMENT ON COLUMN js_sys_job.cron_expression IS 'Cron执行表达式'; COMMENT ON COLUMN js_sys_job.misfire_instruction IS '计划执行错误策略'; COMMENT ON COLUMN js_sys_job.concurrent IS '是否并发执行'; +COMMENT ON COLUMN js_sys_job.instance_name IS '集群的实例名字'; COMMENT ON COLUMN js_sys_job.status IS '状态(0正常 1删除 2暂停)'; COMMENT ON COLUMN js_sys_job.create_by IS '创建者'; COMMENT ON COLUMN js_sys_job.create_date IS '创建时间'; diff --git a/web/db/postgresql/core.sql b/web/db/postgresql/core.sql index 95abd1ae..f7a01cf4 100644 --- a/web/db/postgresql/core.sql +++ b/web/db/postgresql/core.sql @@ -294,6 +294,7 @@ CREATE TABLE js_sys_file_entity file_content_type varchar(200) NOT NULL, file_extension varchar(100) NOT NULL, file_size decimal(31) NOT NULL, + file_meta varchar(255), PRIMARY KEY (file_id) ) WITHOUT OIDS; @@ -327,6 +328,7 @@ CREATE TABLE js_sys_job cron_expression varchar(255) NOT NULL, misfire_instruction decimal(1) NOT NULL, concurrent char(1) NOT NULL, + instance_name varchar(64) DEFAULT 'JeeSiteScheduler' NOT NULL, status char(1) NOT NULL, create_by varchar(64) NOT NULL, create_date timestamp NOT NULL, @@ -1112,6 +1114,7 @@ COMMENT ON COLUMN js_sys_file_entity.file_path IS '文件相对路径'; COMMENT ON COLUMN js_sys_file_entity.file_content_type IS '文件内容类型'; COMMENT ON COLUMN js_sys_file_entity.file_extension IS '文件后缀扩展名'; COMMENT ON COLUMN js_sys_file_entity.file_size IS '文件大小(单位B)'; +COMMENT ON COLUMN js_sys_file_entity.file_meta IS '文件信息(JSON格式)'; COMMENT ON TABLE js_sys_file_upload IS '文件上传表'; COMMENT ON COLUMN js_sys_file_upload.id IS '编号'; COMMENT ON COLUMN js_sys_file_upload.file_id IS '文件编号'; @@ -1133,6 +1136,7 @@ COMMENT ON COLUMN js_sys_job.invoke_target IS '调用目标字符串'; COMMENT ON COLUMN js_sys_job.cron_expression IS 'Cron执行表达式'; COMMENT ON COLUMN js_sys_job.misfire_instruction IS '计划执行错误策略'; COMMENT ON COLUMN js_sys_job.concurrent IS '是否并发执行'; +COMMENT ON COLUMN js_sys_job.instance_name IS '集群的实例名字'; COMMENT ON COLUMN js_sys_job.status IS '状态(0正常 1删除 2暂停)'; COMMENT ON COLUMN js_sys_job.create_by IS '创建者'; COMMENT ON COLUMN js_sys_job.create_date IS '创建时间'; From 23b2aab97cb874bd38a35581084f9e2974824d29 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Tue, 12 Mar 2019 14:51:48 +0800 Subject: [PATCH 11/23] =?UTF-8?q?=E6=96=87=E5=AD=97=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=EF=BC=9A=E4=BF=9D=E5=AF=86->=E5=AF=86=E4=BF=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/i18n/core/sys/i18n_en.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/core/src/main/resources/i18n/core/sys/i18n_en.properties b/modules/core/src/main/resources/i18n/core/sys/i18n_en.properties index 3e5bf84b..dfd14635 100644 --- a/modules/core/src/main/resources/i18n/core/sys/i18n_en.properties +++ b/modules/core/src/main/resources/i18n/core/sys/i18n_en.properties @@ -103,11 +103,11 @@ 您还未设置过密保问题,您可以根据登录密码设置新的密保问题及答案。=You have not set up the security problem, you can set up the new security problem and answer according to the login password. 旧的密保问题及答案=Old secret questions and answers -旧保密问题=Old secret questions -旧保密问题答案=Old secret answers +旧密保问题=Old secret questions +旧密保问题答案=Old secret answers 新的密保问题及答案=New secret questions and answers -新保密问题=New secret questions -新保密问题答案=New secret answers +新密保问题=New secret questions +新密保问题答案=New secret answers # =========== 用户管理 =========== From fb12bde12003927560ce3d0ba20c1211c18a6625 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Tue, 12 Mar 2019 22:32:30 +0800 Subject: [PATCH 12/23] =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E5=B7=A6=E4=BE=A7=E6=A0=91=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=97=B6reset=E6=8C=89=E9=92=AE=E8=B0=83=E7=94=A8=E4=B8=8D?= =?UTF-8?q?=E5=AF=B9=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/views/modules/sys/user/empUserIndex.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/core/src/main/resources/views/modules/sys/user/empUserIndex.html b/modules/core/src/main/resources/views/modules/sys/user/empUserIndex.html index c4b17ba9..3c469ba6 100644 --- a/modules/core/src/main/resources/views/modules/sys/user/empUserIndex.html +++ b/modules/core/src/main/resources/views/modules/sys/user/empUserIndex.html @@ -37,7 +37,7 @@ var win = $("#mainFrame")[0].contentWindow; var setting = {view:{selectedMulti:false},data:{key:{title:"title"},simpleData:{enable:true}}, callback:{onClick:function(event, treeId, treeNode){ tree.expandNode(treeNode); - win.$('input[type=reset]').click(); + win.$('button[type=reset]').click(); win.$('#officeCode').val(treeNode.id); win.$('#officeName').val(treeNode.name); win.page(); From d5f42ee1834c8fb95d71faf62239a0cce9b4f9f2 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Wed, 13 Mar 2019 18:35:47 +0800 Subject: [PATCH 13/23] =?UTF-8?q?=E5=B2=97=E4=BD=8D=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jeesite/modules/sys/entity/Post.java | 2 +- .../modules/sys/web/PostController.java | 30 + web/db/test.erm | 1072 ++++++++--------- 3 files changed, 567 insertions(+), 537 deletions(-) diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/entity/Post.java b/modules/core/src/main/java/com/jeesite/modules/sys/entity/Post.java index a9a2b8a5..735a4c4a 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/entity/Post.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/entity/Post.java @@ -19,7 +19,7 @@ import com.jeesite.common.mybatis.mapper.query.QueryType; @Column(name="post_name", attrName="postName", label="岗位名称"), @Column(name="post_type", attrName="postType", label="岗位分类", comment="岗位分类(高管、中层、基层)"), @Column(name="post_sort", attrName="postSort", label="岗位排序", comment="岗位排序(升序)"), - }, orderBy="a.update_date DESC" + }, orderBy="a.post_sort ASC" ) public class Post extends DataEntity { diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/web/PostController.java b/modules/core/src/main/java/com/jeesite/modules/sys/web/PostController.java index 26d9f077..8a5e62e8 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/web/PostController.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/web/PostController.java @@ -3,6 +3,9 @@ */ package com.jeesite.modules.sys.web; +import java.util.List; +import java.util.Map; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -17,8 +20,11 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import com.jeesite.common.collect.ListUtils; +import com.jeesite.common.collect.MapUtils; import com.jeesite.common.config.Global; import com.jeesite.common.entity.Page; +import com.jeesite.common.lang.StringUtils; import com.jeesite.common.web.BaseController; import com.jeesite.modules.sys.entity.Post; import com.jeesite.modules.sys.service.PostService; @@ -122,5 +128,29 @@ public class PostController extends BaseController { } return Global.FALSE; } + + /** + * 获取岗位树结构数据 + * @param isAll 是否显示所有机构(true:不进行权限过滤) + * @param isShowCode 是否显示编码(true or 1:显示在左侧;2:显示在右侧;false or null:不显示) + * @return + */ + @RequiresPermissions("user") + @RequestMapping(value = "treeData") + @ResponseBody + public List> treeData(String userType, String isShowCode, String ctrlPermi) { + List> mapList = ListUtils.newArrayList(); + Post where = new Post(); + where.setStatus(Post.STATUS_NORMAL); + List list = postService.findList(where); + list.forEach(e -> { + Map map = MapUtils.newHashMap(); + map.put("id", e.getId()); + map.put("pId", "0"); + map.put("name", StringUtils.getTreeNodeName(isShowCode, e.getPostCode(), e.getPostName())); + mapList.add(map); + }); + return mapList; + } } \ No newline at end of file diff --git a/web/db/test.erm b/web/db/test.erm index 0e62cfae..39bf064e 100644 --- a/web/db/test.erm +++ b/web/db/test.erm @@ -11,8 +11,8 @@ 0 1.0 - 131 - 31 + 0 + 0 128 128 @@ -168,7 +168,7 @@ - b6d7af0ea5dad1a0925ff63d5bd2d33946640369 + 136ca02f1b3a96a8f2e242d5dd64d48f566143ef 64 null false @@ -184,7 +184,7 @@ varchar(n) - 810c114a1c22e1766589ec6b6da020db683137f8 + f116706ac00cd3a3ee88b2a88debf7ebc3eeb12d 100 null false @@ -1020,538 +1020,12 @@ - fb11bc47b30b0d8e468d3cd16ed660bf57bc8863 - 217 - 320 + e553474c37270813e70025e433a4cf8a64653e13 + 438 + 387Segoe UI9 - 396 - 36 - - 128 - 128 - 192 - - - - test_data_child - 测试数据子表 - - - - - - - 869fc70cf3a4e92e8056b40814df8e03f9f9efde - 34477707bcf8a7810e12e9565aff085f6fb1e0ad - - - - - varchar(n) - - - false - false - true - true - false - - - - - - - - - - - false - false - false - - - 0 - - - - ae103dc1fb50094552e56afd72015481271913db - ec8a047dffe3cf2e4d95ba3e26c3bac0382d95c9 - - - - - integer - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - d829e707316a49d39e5a11da5f5d36030a856b86 - b095c44611ed08156277676d9a3a0ce52b9b05ef - - - - - varchar(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - ac02f2d1fff63fa66db583735eb1c8e9b466872f - 78715aa66a10a9b190ad69b8ed792e9a2f4946e3 - - - - - varchar(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 2fed92437d28f1427e913aba1251fe0807c7b209 - 693f8af2fe6cf45255b6f2bc7e9077f3630c3dd8 - - - - - nvarchar(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 6697b12cf2f6d7135570c2a581212ee067c13206 - 04216c384533b70b8e86b571fa2beef7157bab5a - - - - - varchar(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 68b9381c1fb6668186fef70f52fc0c14b1bd6f1c - 0b6f63094be90aa8674460cce26be10327827ceb - - - - - varchar(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 791691b791efedc2d14867a152b4de58f4567326 - 363e8cfcf4a6b228e656decadacba29280906555 - - - - - varchar(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - cdc46f802299958a2b3140200410caf5cbeb8a27 - 7875aa5fee3d6f9587180fb8fce9343a56cdc34e - - - - - varchar(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - a27ebfd109532e2f551b101a0c78b3f50a3d58dd - 61c49a2f7807c55c8f85110c30889d5b403e4b04 - - - - - datetime - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 95ec23c1b2704817cca94d169aed5e11deb0adbb - b91171b99f3628aadb0e6986fbfa30cc547b280e - - - - - datetime - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 2eda719a62fb7e1d3face62555046d938abddda9 - 9f33d190101e56f93f5ece0fd7c5cdda3e704b4c - - - - - varchar(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - e2270df5e0974bf471fdfe36e29bc9a8aa1774cb - 16121b5aa08fc170883408ec2d0487281a132d9d - - - - - varchar(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 23b25e48c87be0e4f3952f7a8330594e9d511a4e - 1afc7f146271f5c90ea811aa24c08ce25d12552e - - - - - varchar(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 8bc627205b6e55931d09079fcd07bfacbbd38f41 - 343f0db997b913f299b0496c4306d3617ad708de - - - - - nvarchar(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - - - - - - - -
- - b7226377b79c26a490f7bf5789c1f74ed96e1b6f - 359 - 323 - Segoe UI - 9 - 756 + 86436 128 @@ -2105,6 +1579,532 @@
+ + 5a836e654b7b7d19f102e87336fefa079d98a2e6 + 438 + 346 + Segoe UI + 9 + 468 + 36 + + 128 + 128 + 192 + + + + test_data_child + 测试数据子表 + + + + + + + 869fc70cf3a4e92e8056b40814df8e03f9f9efde + 34477707bcf8a7810e12e9565aff085f6fb1e0ad + + + + + varchar(n) + + + false + false + true + true + false + + + + + + + + + + + false + false + false + + + 0 + + + + ae103dc1fb50094552e56afd72015481271913db + ec8a047dffe3cf2e4d95ba3e26c3bac0382d95c9 + + + + + integer + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + d829e707316a49d39e5a11da5f5d36030a856b86 + b095c44611ed08156277676d9a3a0ce52b9b05ef + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + ac02f2d1fff63fa66db583735eb1c8e9b466872f + 78715aa66a10a9b190ad69b8ed792e9a2f4946e3 + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 2fed92437d28f1427e913aba1251fe0807c7b209 + 693f8af2fe6cf45255b6f2bc7e9077f3630c3dd8 + + + + + nvarchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 6697b12cf2f6d7135570c2a581212ee067c13206 + 04216c384533b70b8e86b571fa2beef7157bab5a + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 68b9381c1fb6668186fef70f52fc0c14b1bd6f1c + 0b6f63094be90aa8674460cce26be10327827ceb + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 791691b791efedc2d14867a152b4de58f4567326 + 363e8cfcf4a6b228e656decadacba29280906555 + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + cdc46f802299958a2b3140200410caf5cbeb8a27 + 7875aa5fee3d6f9587180fb8fce9343a56cdc34e + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + a27ebfd109532e2f551b101a0c78b3f50a3d58dd + 61c49a2f7807c55c8f85110c30889d5b403e4b04 + + + + + datetime + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 95ec23c1b2704817cca94d169aed5e11deb0adbb + b91171b99f3628aadb0e6986fbfa30cc547b280e + + + + + datetime + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 2eda719a62fb7e1d3face62555046d938abddda9 + 9f33d190101e56f93f5ece0fd7c5cdda3e704b4c + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + e2270df5e0974bf471fdfe36e29bc9a8aa1774cb + 16121b5aa08fc170883408ec2d0487281a132d9d + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 23b25e48c87be0e4f3952f7a8330594e9d511a4e + 1afc7f146271f5c90ea811aa24c08ce25d12552e + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 8bc627205b6e55931d09079fcd07bfacbbd38f41 + 343f0db997b913f299b0496c4306d3617ad708de + + + + + nvarchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + + + + + + + +
@@ -2184,7 +2184,7 @@ BaseEntityCorp - b6d7af0ea5dad1a0925ff63d5bd2d33946640369 + 136ca02f1b3a96a8f2e242d5dd64d48f566143ef b8ea4b73d6d32a222e5abfd453287575ae518480 @@ -2217,7 +2217,7 @@ - 810c114a1c22e1766589ec6b6da020db683137f8 + f116706ac00cd3a3ee88b2a88debf7ebc3eeb12d b94f5fe344185c40739cf93d1090686001bb11e0 From 5fd3547aa2505d3ba08e40cc7f1767d2099fb850 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Mon, 18 Mar 2019 15:48:55 +0800 Subject: [PATCH 14/23] update --- README.md | 46 ++++++++----------- .../modules/sys/sysIndex/topMenuCorp.html | 2 +- 2 files changed, 20 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index f1814153..a91e49a9 100644 --- a/README.md +++ b/README.md @@ -54,31 +54,9 @@ JeeSite 自 2013 年发布以来已被广大爱好者用到了企业、政府、 1. 部署运行: 2. 常见问题: -## 开发手册 +## 在线文档 -* 代码生成 / 快速入门 (Guide): -* 持久层 / 数据库操作 (MyBatis): -* 业务层 / 数据权限 (Service): -* 视图层 / 表单组件 (Beetl): -* 功能权限基础文档 (Shiro): -* 常用JS类库API (jeesite.js): -* 数据表格API (DataGrid.js): -* 修改 (默认) 视图,新增主题: -* 手机 API 接口调用、前后分离: -* 消息提醒中心使用手册: -* 常见问题: - -## 今后如何升级? - -尽量不修改web项目以外的源码项目,如 jeesite-common、jeesite-modele-core,如果修改了,请 Pull Requests 上来,否则代码编码将与官方不同步,将对你的日后升级带来困难。 - -JeeSite的小版本(4.1.x)升级是非常便捷的,你只需要将 pom.xml 文件中的 parent.version 版本修改到最新版本即可,同版本下你可进行Maven快照强制更新,即可将最新版的依赖jar更新到本地,下面介绍一下在Eclipse里如何操作: - -在web项目上右键,选择菜单 -> Maven -> Update Project...(或按Alt+F5) -> 点击 Select All 按钮 -> 选择 Force Update of Snapshots/Releases 复选框 -> 点击OK按钮即可。 - -如果您修改了其它依赖模块代码,这时你需要与官方Git仓库代码进行同步。 - -如果进行相对大的版本(4.x.x)升级这里我们会附加一个声明,帮助你进行迁移操作。 +* ## 授权协议声明 @@ -89,11 +67,13 @@ JeeSite的小版本(4.1.x)升级是非常便捷的,你只需要将 pom.xml 5. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议、版权声明和其他原作者规定需要包含的说明(请尊重原作者的著作权,不要删除或修改文件中的`@author`信息)。 6. 您可以应用于商业软件,但必须遵循以上条款原则(请协助改进本作品)。 7. 关系平台的发展战略考虑,底层部分代码暂未开源,但这不影响您的二次开发。 -8. 请知悉社区版,用户数不可超过100个,最大允许10个用户同时在线(不含匿名)。 +8. 请知悉社区版,用户数不可超过100个,最大允许20个用户同时在线(不含匿名)。 -### 获得技术服务支持: +## 技术服务与支持 -* 我们深知,没有资金的支撑就很难得到发展,特别是一个好的产品,如果 JeeSite 帮助了您,请为我们点赞。支持我们,您可以得到一些回报,有了这些我们会把开源事业做的更好,回报社区和社会,请给我们一些动力吧,在此非常感谢已支持我们的朋友! +* 没有资金的支撑就很难得到发展,特别是一个好的产品,如果 JeeSite 帮助了您,请为我们点赞。支持我们,您可以得到一些回报,有了这些我们会把公益事业做的更好,回报社区和社会,请给我们一些动力吧,在此非常感谢已支持我们的朋友! +* **联系方式(官方商务)QQ:[1766571055](http://sighttp.qq.com/msgrd?v=1&uin=1766571055)** +* 技术服务支持网页: # 技术交流方式 @@ -108,6 +88,18 @@ JeeSite的小版本(4.1.x)升级是非常便捷的,你只需要将 pom.xml ![JeeSite4微信公众号](https://static.oschina.net/uploads/space/2018/0302/145133_OGZf_941661.jpg "JeeSite4微信公众号") +## 今后如何升级? + +尽量不修改web项目以外的源码项目,如 jeesite-common、jeesite-modele-core,如果修改了,请 Pull Requests 上来,否则代码编码将与官方不同步,将对你的日后升级带来困难。 + +JeeSite的小版本(4.1.x)升级是非常便捷的,你只需要将 pom.xml 文件中的 parent.version 版本修改到最新版本即可,同版本下你可进行Maven快照强制更新,即可将最新版的依赖jar更新到本地,下面介绍一下在Eclipse里如何操作: + +在web项目上右键,选择菜单 -> Maven -> Update Project...(或按Alt+F5) -> 点击 Select All 按钮 -> 选择 Force Update of Snapshots/Releases 复选框 -> 点击OK按钮即可。 + +如果您修改了其它依赖模块代码,这时你需要与官方Git仓库代码进行同步。 + +如果进行相对大的版本(4.x.x)升级这里我们会附加一个声明,帮助你进行迁移操作。 + # Git 全局设置技巧 ``` diff --git a/modules/core/src/main/resources/views/themes/default/modules/sys/sysIndex/topMenuCorp.html b/modules/core/src/main/resources/views/themes/default/modules/sys/sysIndex/topMenuCorp.html index 4e7bfe20..8fd0ea30 100644 --- a/modules/core/src/main/resources/views/themes/default/modules/sys/sysIndex/topMenuCorp.html +++ b/modules/core/src/main/resources/views/themes/default/modules/sys/sysIndex/topMenuCorp.html @@ -1,7 +1,7 @@ <% if(@Global.getConfigToBoolean('user.useCorpModel', 'false') && user.superAdmin){ %>
  • - 当前租户:(${session.corpCode}) ${session.corpName} + ${text('当前租户')}:(${session.corpCode}) ${session.corpName}
    <#form:treeselect id="switchCorpSelect" title="${text('租户切换')}" allowClear="false" url="${ctx}/sys/corpAdmin/treeData?isShowCode=true" callbackFuncName="switchCorpSelectCallback"/> From 88d0615c4a0befce399d0b7fb288c1272ab34a17 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Mon, 18 Mar 2019 22:45:24 +0800 Subject: [PATCH 15/23] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=EF=BC=88=E8=BE=93=E5=85=A5=E6=A1=86=E3=80=81=E5=8D=95=E9=80=89?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E3=80=81=E5=A4=8D=E9=80=89=E6=A1=86=E3=80=81?= =?UTF-8?q?=E4=B8=8B=E6=8B=89=E6=A1=86=EF=BC=89=E7=9A=84=E8=BE=B9=E6=A1=86?= =?UTF-8?q?=E9=A2=9C=E8=89=B2=E5=8A=A0=E9=87=8D=E4=B8=80=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../static/adminlte/css/AdminLTE.css | 68 +++++++++--------- .../static/adminlte/css/AdminLTE.min.css | 8 +-- .../static/icheck/1.0/minimal/grey.png | Bin 1408 -> 2271 bytes .../static/icheck/1.0/minimal/grey.psd | Bin 51916 -> 42146 bytes 4 files changed, 38 insertions(+), 38 deletions(-) diff --git a/common/src/main/resources/static/adminlte/css/AdminLTE.css b/common/src/main/resources/static/adminlte/css/AdminLTE.css index f5f21c42..1b5033cb 100644 --- a/common/src/main/resources/static/adminlte/css/AdminLTE.css +++ b/common/src/main/resources/static/adminlte/css/AdminLTE.css @@ -94,7 +94,7 @@ body { background: #fff; padding: 15px; color: #444; - border-top: 1px solid #d2d6de; + border-top: 1px solid #caced6; } /* Fixed layout */ .fixed .main-header, @@ -350,7 +350,7 @@ a:focus { top: 0; right: 0; float: none; - background: #d2d6de; + background: #caced6; padding-left: 10px; } .content-header > .breadcrumb li:before { @@ -859,10 +859,10 @@ a:focus { .control-sidebar-light, .control-sidebar-light + .control-sidebar-bg { background: #f9fafc; - border-left: 1px solid #d2d6de; + border-left: 1px solid #caced6; } .control-sidebar-light .nav-tabs.control-sidebar-tabs { - border-bottom: #d2d6de; + border-bottom: #caced6; } .control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a { background: #e8ecf4; @@ -871,8 +871,8 @@ a:focus { .control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a, .control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover, .control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus { - border-left-color: #d2d6de; - border-bottom-color: #d2d6de; + border-left-color: #caced6; + border-bottom-color: #caced6; } .control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover, .control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus, @@ -1235,7 +1235,7 @@ a:focus { .form-control { /*border-radius: 0;*/ box-shadow: none; - border-color: #d2d6de; + border-color: #caced6; } .form-control:focus { border-color: #3c8dbc; @@ -1288,7 +1288,7 @@ a:focus { /* Input group */ .input-group .input-group-addon { /*border-radius: 0;*/ - border-color: #d2d6de; + border-color: #caced6; background-color: #fff; } /* button groups */ @@ -1530,7 +1530,7 @@ a:focus { position: relative; border-radius: 3px; background: #ffffff; - border-top: 3px solid #d2d6de; + border-top: 3px solid #caced6; margin-bottom: 20px; width: 100%; box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); @@ -1551,7 +1551,7 @@ a:focus { border-top-color: #00a65a; } .box.box-default { - border-top-color: #d2d6de; + border-top-color: #caced6; } .box.collapsed-box .box-body, .box.collapsed-box .box-footer { @@ -1585,12 +1585,12 @@ a:focus { background: rgba(0, 0, 0, 0.1); } .box.box-solid.box-default { - border: 1px solid #d2d6de; + border: 1px solid #caced6; } .box.box-solid.box-default > .box-header { color: #444444; - background: #d2d6de; - background-color: #d2d6de; + background: #caced6; + background-color: #caced6; } .box.box-solid.box-default > .box-header a, .box.box-solid.box-default > .box-header .btn { @@ -1913,7 +1913,7 @@ a:focus { font-weight: 500; } .todo-list > li.done .label { - background: #d2d6de !important; + background: #caced6 !important; } .todo-list .danger { border-left-color: #dd4b39; @@ -2150,7 +2150,7 @@ a:focus { line-height: 30px; position: absolute; color: #666; - background: #d2d6de; + background: #caced6; border-radius: 50%; text-align: center; left: 18px; @@ -2573,7 +2573,7 @@ a:focus { border-top-color: #00a65a; } .nav-tabs-custom.tab-default > .nav-tabs > li.active { - border-top-color: #d2d6de; + border-top-color: #caced6; } /* PAGINATION */ .pagination > li > a { @@ -2691,7 +2691,7 @@ table.text-center th { * ---------------- */ .label-default { - background-color: #d2d6de; + background-color: #caced6; color: #444; } /* @@ -2746,8 +2746,8 @@ table.text-center th { border-radius: 5px; position: relative; padding: 5px 10px; - background: #d2d6de; - border: 1px solid #d2d6de; + background: #caced6; + border: 1px solid #caced6; margin: 5px 0 0 50px; color: #444444; } @@ -2757,7 +2757,7 @@ table.text-center th { right: 100%; top: 15px; border: solid transparent; - border-right-color: #d2d6de; + border-right-color: #caced6; content: ' '; height: 0; width: 0; @@ -2780,7 +2780,7 @@ table.text-center th { right: auto; left: 100%; border-right-color: transparent; - border-left-color: #d2d6de; + border-left-color: #caced6; } .direct-chat-img { border-radius: 50%; @@ -3169,7 +3169,7 @@ table.text-center th { */ /* ADD THIS CLASS TO THE TAG */ .lockscreen { - background: #d2d6de; + background: #caced6; } .lockscreen-logo { font-size: 35px; @@ -3246,7 +3246,7 @@ table.text-center th { } .login-page, .register-page { - background: #d2d6de; + background: #caced6; } .login-box, .register-box { @@ -3344,14 +3344,14 @@ table.text-center th { margin: 0 auto; width: 100px; padding: 3px; - border: 3px solid #d2d6de; + border: 3px solid #caced6; } .profile-username { font-size: 21px; margin-top: 5px; } .post { - border-bottom: 1px solid #d2d6de; + border-bottom: 1px solid #caced6; margin-bottom: 15px; padding-bottom: 15px; color: #666; @@ -4231,7 +4231,7 @@ table.text-center th { } .select2-container--default .select2-selection--single, .select2-selection .select2-selection--single { - border: 1px solid #d2d6de; + border: 1px solid #caced6; /*border-radius: 0;*/ padding: 6px 12px; height: 34px; @@ -4240,7 +4240,7 @@ table.text-center th { border-color: #3c8dbc; } .select2-dropdown { - border: 1px solid #d2d6de; + border: 1px solid #caced6; /*border-radius: 0;*/ } .select2-container--default .select2-results__option--highlighted[aria-selected] { @@ -4271,7 +4271,7 @@ table.text-center th { } .select2-dropdown .select2-search__field, .select2-search--inline .select2-search__field { - border: 1px solid #d2d6de; + border: 1px solid #caced6; } .select2-dropdown .select2-search__field:focus, .select2-search--inline .select2-search__field:focus { @@ -4292,14 +4292,14 @@ table.text-center th { color: #444; } .select2-container--default .select2-selection--multiple { - border: 1px solid #d2d6de; + border: 1px solid #caced6; /*border-radius: 0;*/ } .select2-container--default .select2-selection--multiple:focus { border-color: #3c8dbc; } .select2-container--default.select2-container--focus .select2-selection--multiple { - border-color: #d2d6de; + border-color: #caced6; } .select2-container--default .select2-selection--multiple .select2-selection__choice { background-color: #3c8dbc; @@ -4441,7 +4441,7 @@ table.text-center th { } .bg-gray { color: #000; - background-color: #d2d6de !important; + background-color: #caced6 !important; } .bg-gray-light { background-color: #f7f7f7; @@ -4595,7 +4595,7 @@ table.text-center th { color: #00a65a !important; } .text-gray { - color: #d2d6de !important; + color: #caced6 !important; } .text-navy { color: #001f3f !important; @@ -4868,11 +4868,11 @@ table.text-center th { margin-left: 110px; } .img-bordered { - border: 3px solid #d2d6de; + border: 3px solid #caced6; padding: 3px; } .img-bordered-sm { - border: 2px solid #d2d6de; + border: 2px solid #caced6; padding: 2px; } .attachment-block { diff --git a/common/src/main/resources/static/adminlte/css/AdminLTE.min.css b/common/src/main/resources/static/adminlte/css/AdminLTE.min.css index 18e24ac9..1b708d5a 100644 --- a/common/src/main/resources/static/adminlte/css/AdminLTE.min.css +++ b/common/src/main/resources/static/adminlte/css/AdminLTE.min.css @@ -1,4 +1,4 @@ -html,body{height:100%}.layout-boxed html,.layout-boxed body{height:100%}body{font-family:'Source Sans Pro','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:400;overflow-x:hidden;overflow-y:auto}.wrapper{height:100%;position:relative;overflow-x:hidden;overflow-y:auto}.wrapper:before,.wrapper:after{content:" ";display:table}.wrapper:after{clear:both}.layout-boxed .wrapper{max-width:1250px;margin:0 auto;min-height:100%;box-shadow:0 0 8px rgba(0,0,0,0.5);position:relative}.layout-boxed{background:url('../img/boxed-bg.jpg') repeat fixed}.content-wrapper,.main-footer{-webkit-transition:-webkit-transform .3s ease-in-out,margin .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,margin .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,margin .3s ease-in-out;transition:transform .3s ease-in-out,margin .3s ease-in-out;margin-left:230px;z-index:820}.layout-top-nav .content-wrapper,.layout-top-nav .main-footer{margin-left:0}@media(max-width:767px){.content-wrapper,.main-footer{margin-left:0}}@media(min-width:768px){.sidebar-collapse .content-wrapper,.sidebar-collapse .main-footer{margin-left:0}}@media(max-width:767px){.sidebar-open .content-wrapper,.sidebar-open .main-footer{-webkit-transform:translate(230px,0);-ms-transform:translate(230px,0);-o-transform:translate(230px,0);transform:translate(230px,0)}}.content-wrapper{min-height:100%;background-color:#ecf0f5;z-index:800}.main-footer{background:#fff;padding:15px;color:#444;border-top:1px solid #d2d6de}.fixed .main-header,.fixed .main-sidebar,.fixed .left-side{position:fixed}.fixed .main-header{top:0;right:0;left:0}.fixed .content-wrapper,.fixed .right-side{padding-top:50px}@media(max-width:767px){.fixed .content-wrapper,.fixed .right-side{padding-top:100px}}.fixed.layout-boxed .wrapper{max-width:100%}.fixed .wrapper{overflow:hidden}.hold-transition .content-wrapper,.hold-transition .right-side,.hold-transition .main-footer,.hold-transition .main-sidebar,.hold-transition .left-side,.hold-transition .main-header .navbar,.hold-transition .main-header .logo,.hold-transition .menu-open .fa-angle-left{-webkit-transition:none;-o-transition:none;transition:none}.content{min-height:250px;padding:15px;margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:'Source Sans Pro',sans-serif}a{color:#3c8dbc}a:hover,a:active,a:focus{outline:0;text-decoration:none;color:#72afd2}.page-header{margin:10px 0 20px 0;font-size:22px}.page-header>small{color:#666;display:block;margin-top:5px}.main-header{position:relative;max-height:100px;z-index:1030}.main-header .navbar{-webkit-transition:margin-left .3s ease-in-out;-o-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out;margin-bottom:0;margin-left:230px;border:0;min-height:50px}.layout-top-nav .main-header .navbar{margin-left:0}.main-header #navbar-search-input.form-control{background:rgba(255,255,255,0.2);border-color:transparent}.main-header #navbar-search-input.form-control:focus,.main-header #navbar-search-input.form-control:active{border-color:rgba(0,0,0,0.1);background:rgba(255,255,255,0.9)}.main-header #navbar-search-input.form-control::-moz-placeholder{color:#ccc;opacity:1}.main-header #navbar-search-input.form-control:-ms-input-placeholder{color:#ccc}.main-header #navbar-search-input.form-control::-webkit-input-placeholder{color:#ccc}.main-header .navbar-custom-menu,.main-header .navbar-right{float:right}@media(max-width:991px){.main-header .navbar-custom-menu a,.main-header .navbar-right a{color:inherit;background:transparent}}@media(max-width:767px){.main-header .navbar-right{float:none}.navbar-collapse .main-header .navbar-right{margin:7.5px -15px}.main-header .navbar-right>li{color:inherit;border:0}}.main-header .sidebar-toggle{float:left;background-color:transparent;background-image:none;padding:15px 15px;font-family:fontAwesome}.main-header .sidebar-toggle:before{content:"\f0c9"}.main-header .sidebar-toggle:hover{color:#fff}.main-header .sidebar-toggle:focus,.main-header .sidebar-toggle:active{background:transparent}.main-header .sidebar-toggle .icon-bar{display:none}.main-header .navbar .nav>li.user>a>.fa,.main-header .navbar .nav>li.user>a>.glyphicon,.main-header .navbar .nav>li.user>a>.ion{margin-right:5px}.main-header .navbar .nav>li>a>.label{position:absolute;top:9px;right:7px;text-align:center;font-size:9px;padding:2px 3px;line-height:.9}.main-header .logo{-webkit-transition:width .3s ease-in-out;-o-transition:width .3s ease-in-out;transition:width .3s ease-in-out;display:block;float:left;height:50px;font-size:20px;line-height:50px;text-align:center;width:230px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;padding:0 15px;font-weight:300;overflow:hidden}.main-header .logo .logo-lg{display:block}.main-header .logo .logo-mini{display:none}.main-header .navbar-brand{color:#fff}.content-header{position:relative;padding:15px 15px 0 15px}.content-header>h1{margin:0;font-size:24px}.content-header>h1>small{font-size:15px;display:inline-block;padding-left:4px;font-weight:300}.content-header>.breadcrumb{float:right;background:transparent;margin-top:0;margin-bottom:0;font-size:12px;padding:7px 5px;position:absolute;top:15px;right:10px;border-radius:2px}.content-header>.breadcrumb>li>a{color:#444;text-decoration:none;display:inline-block}.content-header>.breadcrumb>li>a>.fa,.content-header>.breadcrumb>li>a>.glyphicon,.content-header>.breadcrumb>li>a>.ion{margin-right:5px}.content-header>.breadcrumb>li+li:before{content:'>\00a0'}@media(max-width:991px){.content-header>.breadcrumb{position:relative;margin-top:5px;top:0;right:0;float:none;background:#d2d6de;padding-left:10px}.content-header>.breadcrumb li:before{color:#97a0b3}}.navbar-toggle{color:#fff;border:0;margin:0;padding:15px 15px}@media(max-width:991px){.navbar-custom-menu .navbar-nav>li{float:left}.navbar-custom-menu .navbar-nav{margin:0;float:left}.navbar-custom-menu .navbar-nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px}}@media(max-width:767px){.main-header{position:relative}.main-header .logo,.main-header .navbar{width:100%;float:none}.main-header .navbar{margin:0}.main-header .navbar-custom-menu{float:right}}@media(max-width:991px){.navbar-collapse.pull-left{float:none!important}.navbar-collapse.pull-left+.navbar-custom-menu{display:block;position:absolute;top:0;right:40px}}.main-sidebar{position:absolute;top:0;left:0;padding-top:50px;min-height:100%;width:230px;z-index:810;-webkit-transition:-webkit-transform .3s ease-in-out,width .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,width .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,width .3s ease-in-out;transition:transform .3s ease-in-out,width .3s ease-in-out}@media(max-width:767px){.main-sidebar{padding-top:100px}}@media(max-width:767px){.main-sidebar{-webkit-transform:translate(-230px,0);-ms-transform:translate(-230px,0);-o-transform:translate(-230px,0);transform:translate(-230px,0)}}@media(min-width:768px){.sidebar-collapse .main-sidebar{-webkit-transform:translate(-230px,0);-ms-transform:translate(-230px,0);-o-transform:translate(-230px,0);transform:translate(-230px,0)}}@media(max-width:767px){.sidebar-open .main-sidebar{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}}.sidebar{padding-bottom:10px}.sidebar-form input:focus{border-color:transparent}.user-panel{position:relative;width:100%;padding:10px;overflow:hidden}.user-panel:before,.user-panel:after{content:" ";display:table}.user-panel:after{clear:both}.user-panel>.image>img{width:100%;max-width:45px;height:auto}.user-panel>.info{padding:5px 5px 5px 15px;line-height:1;position:absolute;left:55px}.user-panel>.info>p{font-weight:600;margin-bottom:9px}.user-panel>.info>a{text-decoration:none;padding-right:5px;margin-top:3px;font-size:11px}.user-panel>.info>a>.fa,.user-panel>.info>a>.ion,.user-panel>.info>a>.glyphicon{margin-right:3px}.sidebar-menu{list-style:none;margin:0;padding:0}.sidebar-menu>li{position:relative;margin:0;padding:0}.sidebar-menu>li>a{padding:12px 5px 12px 15px;display:block}.sidebar-menu>li>a>.fa,.sidebar-menu>li>a>.glyphicon,.sidebar-menu>li>a>.ion{width:20px}.sidebar-menu>li .label,.sidebar-menu>li .badge{margin-right:5px}.sidebar-menu>li .badge{margin-top:3px}.sidebar-menu li.header{padding:10px 25px 10px 15px;font-size:12px}.sidebar-menu li>a>.fa-angle-left,.sidebar-menu li>a>.pull-right-container>.fa-angle-left{width:auto;height:auto;padding:0;margin-right:10px;-webkit-transition:transform .5s ease;-o-transition:transform .5s ease;transition:transform .5s ease}.sidebar-menu li>a>.fa-angle-left{position:absolute;top:50%;right:10px;margin-top:-8px}.sidebar-menu .menu-open>a>.fa-angle-left,.sidebar-menu .menu-open>a>.pull-right-container>.fa-angle-left{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.sidebar-menu .active>.treeview-menu{display:block}@media(min-width:768px){.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .right-side,.sidebar-mini.sidebar-collapse .main-footer{margin-left:50px!important;z-index:840}.sidebar-mini.sidebar-collapse .main-sidebar{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0);width:50px!important;z-index:850}.sidebar-mini.sidebar-collapse .sidebar-menu>li{position:relative}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a{margin-right:0}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span{border-top-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li:not(.treeview)>a>span{border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{padding-top:5px;padding-bottom:5px;border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel>.info,.sidebar-mini.sidebar-collapse .sidebar-form,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span,.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>.pull-right,.sidebar-mini.sidebar-collapse .sidebar-menu li.header{display:none!important;-webkit-transform:translateZ(0)}.sidebar-mini.sidebar-collapse .main-header .logo{width:50px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-mini{display:block;margin-left:-15px;margin-right:-15px;font-size:18px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-lg{display:none}.sidebar-mini.sidebar-collapse .main-header .navbar{margin-left:50px}}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span:not(.pull-right),.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{display:block!important;position:absolute;width:180px;left:50px}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span{top:0;margin-left:-3px;padding:12px 5px 12px 20px;background-color:inherit}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container{position:relative!important;float:right;width:auto!important;left:180px!important;top:-22px!important;z-index:900}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container>.label:not(:first-of-type){display:none}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{top:44px;margin-left:0}.sidebar-expanded-on-hover .main-footer,.sidebar-expanded-on-hover .content-wrapper{margin-left:50px}.sidebar-expanded-on-hover .main-sidebar{box-shadow:3px 0 8px rgba(0,0,0,0.125)}.sidebar-menu,.main-sidebar .user-panel,.sidebar-menu>li.header{white-space:nowrap;overflow:hidden}.sidebar-menu:hover{overflow:visible}.sidebar-form,.sidebar-menu>li.header{overflow:hidden;text-overflow:clip}.sidebar-menu li>a{position:relative}.sidebar-menu li>a>.pull-right-container{position:absolute;right:10px;top:50%;margin-top:-7px}.control-sidebar-bg{position:fixed;z-index:1000;bottom:0}.control-sidebar-bg,.control-sidebar{top:0;right:-230px;width:230px;-webkit-transition:right .3s ease-in-out;-o-transition:right .3s ease-in-out;transition:right .3s ease-in-out}.control-sidebar{position:absolute;padding-top:50px;z-index:1010}@media(max-width:768px){.control-sidebar{padding-top:100px}}.control-sidebar>.tab-content{padding:10px 15px}.control-sidebar.control-sidebar-open,.control-sidebar.control-sidebar-open+.control-sidebar-bg{right:0}.control-sidebar-open .control-sidebar-bg,.control-sidebar-open .control-sidebar{right:0}@media(min-width:768px){.control-sidebar-open .content-wrapper,.control-sidebar-open .right-side,.control-sidebar-open .main-footer{margin-right:230px}}.fixed .control-sidebar{position:fixed;height:100%;overflow-y:auto;padding-bottom:50px}.nav-tabs.control-sidebar-tabs>li:first-of-type>a,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:hover,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:focus{border-left-width:0}.nav-tabs.control-sidebar-tabs>li>a,.nav-tabs.control-sidebar-tabs>li>a:hover{border-top:0;border-right:0;border-left:1px solid transparent;border-bottom:1px solid transparent}.nav-tabs.control-sidebar-tabs>li>a .icon{font-size:16px}.nav-tabs.control-sidebar-tabs>li.active>a,.nav-tabs.control-sidebar-tabs>li.active>a:hover,.nav-tabs.control-sidebar-tabs>li.active>a:focus,.nav-tabs.control-sidebar-tabs>li.active>a:active{border-top:0;border-right:0;border-bottom:0}@media(max-width:768px){.nav-tabs.control-sidebar-tabs{display:table}.nav-tabs.control-sidebar-tabs>li{display:table-cell}}.control-sidebar-heading{font-weight:400;font-size:16px;padding:10px 0;margin-bottom:10px}.control-sidebar-subheading{display:block;font-weight:400;font-size:14px}.control-sidebar-menu{list-style:none;padding:0;margin:0 -15px}.control-sidebar-menu>li>a{display:block;padding:10px 15px}.control-sidebar-menu>li>a:before,.control-sidebar-menu>li>a:after{content:" ";display:table}.control-sidebar-menu>li>a:after{clear:both}.control-sidebar-menu>li>a>.control-sidebar-subheading{margin-top:0}.control-sidebar-menu .menu-icon{float:left;width:35px;height:35px;border-radius:50%;text-align:center;line-height:35px}.control-sidebar-menu .menu-info{margin-left:45px;margin-top:3px}.control-sidebar-menu .menu-info>.control-sidebar-subheading{margin:0}.control-sidebar-menu .menu-info>p{margin:0;font-size:11px}.control-sidebar-menu .progress{margin:0}.control-sidebar-dark{color:#b8c7ce}.control-sidebar-dark,.control-sidebar-dark+.control-sidebar-bg{background:#222d32}.control-sidebar-dark .nav-tabs.control-sidebar-tabs{border-bottom:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a{background:#181f23;color:#b8c7ce}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#141a1d;border-bottom-color:#141a1d}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:active{background:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover{color:#fff}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#222d32;color:#fff}.control-sidebar-dark .control-sidebar-heading,.control-sidebar-dark .control-sidebar-subheading{color:#fff}.control-sidebar-dark .control-sidebar-menu>li>a:hover{background:#1e282c}.control-sidebar-dark .control-sidebar-menu>li>a .menu-info>p{color:#b8c7ce}.control-sidebar-light{color:#5e5e5e}.control-sidebar-light,.control-sidebar-light+.control-sidebar-bg{background:#f9fafc;border-left:1px solid #d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs{border-bottom:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a{background:#e8ecf4;color:#444}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#d2d6de;border-bottom-color:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:active{background:#eff1f7}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#f9fafc;color:#111}.control-sidebar-light .control-sidebar-heading,.control-sidebar-light .control-sidebar-subheading{color:#111}.control-sidebar-light .control-sidebar-menu{margin-left:-14px}.control-sidebar-light .control-sidebar-menu>li>a:hover{background:#f4f4f5}.control-sidebar-light .control-sidebar-menu>li>a .menu-info>p{color:#5e5e5e}.dropdown-menu{box-shadow:none;border-color:#eee}.dropdown-menu>li>a{color:#777}.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}.navbar-nav>.notifications-menu>.dropdown-menu,.navbar-nav>.messages-menu>.dropdown-menu,.navbar-nav>.tasks-menu>.dropdown-menu{width:280px;padding:0;margin:0;top:100%}.navbar-nav>.notifications-menu>.dropdown-menu>li,.navbar-nav>.messages-menu>.dropdown-menu>li,.navbar-nav>.tasks-menu>.dropdown-menu>li{position:relative}.navbar-nav>.notifications-menu>.dropdown-menu>li.header,.navbar-nav>.messages-menu>.dropdown-menu>li.header,.navbar-nav>.tasks-menu>.dropdown-menu>li.header{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:#fff;padding:7px 10px;border-bottom:1px solid #f4f4f4;color:#444;font-size:14px}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px;font-size:12px;background-color:#fff;padding:7px 10px;border-bottom:1px solid #eee;color:#444!important;text-align:center}@media(max-width:991px){.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{background:#fff!important;color:#444!important}}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a:hover{text-decoration:none;font-weight:normal}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu,.navbar-nav>.messages-menu>.dropdown-menu>li .menu,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu{max-height:200px;margin:0;padding:0;list-style:none;overflow-x:hidden}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{display:block;white-space:nowrap;border-bottom:1px solid #f4f4f4}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a:hover{background:#f4f4f4;text-decoration:none}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a{color:#444;overflow:hidden;text-overflow:ellipsis;padding:10px}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.glyphicon,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.fa,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.ion{width:20px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a{margin:0;padding:10px 10px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>div>img{margin:auto 10px auto auto;width:40px;height:40px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4{padding:0;margin:0 0 0 45px;color:#444;font-size:15px;position:relative}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4>small{color:#999;font-size:10px;position:absolute;top:0;right:0}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>p{margin:0 0 0 45px;font-size:12px;color:#888}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:before,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{content:" ";display:table}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{clear:both}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{padding:10px}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>h3{font-size:14px;padding:0;margin:0 0 10px 0;color:#666}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>.progress{padding:0;margin:0}.navbar-nav>.user-menu>.dropdown-menu{border-top-right-radius:0;border-top-left-radius:0;padding:1px 0 0 0;border-top-width:0;width:280px}.navbar-nav>.user-menu>.dropdown-menu,.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header{height:175px;padding:10px;text-align:center}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>img{z-index:5;height:90px;width:90px;border:3px solid;border-color:transparent;border-color:rgba(255,255,255,0.2)}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p{z-index:5;color:#fff;color:rgba(255,255,255,0.8);font-size:17px;margin-top:10px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small{display:block;font-size:12px}.navbar-nav>.user-menu>.dropdown-menu>.user-body{padding:15px;border-bottom:1px solid #f4f4f4;border-top:1px solid #ddd}.navbar-nav>.user-menu>.dropdown-menu>.user-body:before,.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-body a{color:#444!important}@media(max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-body a{background:#fff!important;color:#444!important}}.navbar-nav>.user-menu>.dropdown-menu>.user-footer{background-color:#f9f9f9;padding:10px}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:before,.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default{color:#666}@media(max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover{background-color:#f9f9f9}}.navbar-nav>.user-menu .user-image{float:left;width:25px;height:25px;border-radius:50%;margin-right:10px;margin-top:-2px}@media(max-width:767px){.navbar-nav>.user-menu .user-image{float:none;margin-right:0;margin-top:-8px;line-height:10px}}.open:not(.dropup)>.animated-dropdown-menu{backface-visibility:visible!important;-webkit-animation:flipInX .7s both;-o-animation:flipInX .7s both;animation:flipInX .7s both}@keyframes flipInX{0%{transform:perspective(400px) rotate3d(1,0,0,90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(1,0,0,-20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{transform:perspective(400px)}}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px)}}.navbar-custom-menu>.navbar-nav>li{position:relative}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:0;left:auto}@media(max-width:991px){.navbar-custom-menu>.navbar-nav{float:right}.navbar-custom-menu>.navbar-nav>li{position:static}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff}}.form-control{box-shadow:none;border-color:#d2d6de}.form-control:focus{border-color:#3c8dbc;box-shadow:none}.form-control::-moz-placeholder,.form-control:-ms-input-placeholder,.form-control::-webkit-input-placeholder{color:#bbb;opacity:1}.form-control:not(select){-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-group.has-success label{color:#00a65a}.form-group.has-success .form-control,.form-group.has-success .input-group-addon{border-color:#00a65a;box-shadow:none}.form-group.has-success .help-block{color:#00a65a}.form-group.has-warning label{color:#f39c12}.form-group.has-warning .form-control,.form-group.has-warning .input-group-addon{border-color:#f39c12;box-shadow:none}.form-group.has-warning .help-block{color:#f39c12}.form-group.has-error label{color:#dd4b39}.form-group.has-error .form-control,.form-group.has-error .input-group-addon{border-color:#dd4b39;box-shadow:none}.form-group.has-error .help-block{color:#dd4b39}.input-group .input-group-addon{border-color:#d2d6de;background-color:#fff}.icheck>label{padding-left:0}.form-control-feedback.fa{line-height:34px}.input-lg+.form-control-feedback.fa,.input-group-lg+.form-control-feedback.fa,.form-group-lg .form-control+.form-control-feedback.fa{line-height:46px}.input-sm+.form-control-feedback.fa,.input-group-sm+.form-control-feedback.fa,.form-group-sm .form-control+.form-control-feedback.fa{line-height:30px}.progress,.progress>.progress-bar{-webkit-box-shadow:none;box-shadow:none}.progress,.progress>.progress-bar,.progress .progress-bar,.progress>.progress-bar .progress-bar{border-radius:1px}.progress.sm,.progress-sm{height:10px}.progress.sm,.progress-sm,.progress.sm .progress-bar,.progress-sm .progress-bar{border-radius:1px}.progress.xs,.progress-xs{height:7px}.progress.xs,.progress-xs,.progress.xs .progress-bar,.progress-xs .progress-bar{border-radius:1px}.progress.xxs,.progress-xxs{height:3px}.progress.xxs,.progress-xxs,.progress.xxs .progress-bar,.progress-xxs .progress-bar{border-radius:1px}.progress.vertical{position:relative;width:30px;height:200px;display:inline-block;margin-right:10px}.progress.vertical>.progress-bar{width:100%;position:absolute;bottom:0}.progress.vertical.sm,.progress.vertical.progress-sm{width:20px}.progress.vertical.xs,.progress.vertical.progress-xs{width:10px}.progress.vertical.xxs,.progress.vertical.progress-xxs{width:3px}.progress-group .progress-text{font-weight:600}.progress-group .progress-number{float:right}.table tr>td .progress{margin:0}.progress-bar-light-blue,.progress-bar-primary{background-color:#3c8dbc}.progress-striped .progress-bar-light-blue,.progress-striped .progress-bar-primary{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-green,.progress-bar-success{background-color:#00a65a}.progress-striped .progress-bar-green,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-aqua,.progress-bar-info{background-color:#00c0ef}.progress-striped .progress-bar-aqua,.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-yellow,.progress-bar-warning{background-color:#f39c12}.progress-striped .progress-bar-yellow,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)} -.progress-bar-red,.progress-bar-danger{background-color:#dd4b39}.progress-striped .progress-bar-red,.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.small-box{border-radius:2px;position:relative;display:block;margin-bottom:20px;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.small-box>.inner{padding:10px}.small-box>.small-box-footer{position:relative;text-align:center;padding:3px 0;color:#fff;color:rgba(255,255,255,0.8);display:block;z-index:10;background:rgba(0,0,0,0.1);text-decoration:none}.small-box>.small-box-footer:hover{color:#fff;background:rgba(0,0,0,0.15)}.small-box h3{font-size:38px;font-weight:bold;margin:0 0 10px 0;white-space:nowrap;padding:0}.small-box p{font-size:15px}.small-box p>small{display:block;color:#f9f9f9;font-size:13px;margin-top:5px}.small-box h3,.small-box p{z-index:5}.small-box .icon{-webkit-transition:all .3s linear;-o-transition:all .3s linear;transition:all .3s linear;position:absolute;top:-10px;right:10px;z-index:0;font-size:90px;color:rgba(0,0,0,0.15)}.small-box:hover{text-decoration:none;color:#f9f9f9}.small-box:hover .icon{font-size:95px}@media(max-width:767px){.small-box{text-align:center}.small-box .icon{display:none}.small-box p{font-size:12px}}.box{position:relative;border-radius:3px;background:#fff;border-top:3px solid #d2d6de;margin-bottom:20px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.box.box-primary{border-top-color:#3c8dbc}.box.box-info{border-top-color:#00c0ef}.box.box-danger{border-top-color:#dd4b39}.box.box-warning{border-top-color:#f39c12}.box.box-success{border-top-color:#00a65a}.box.box-default{border-top-color:#d2d6de}.box.collapsed-box .box-body,.box.collapsed-box .box-footer{display:none}.box .nav-stacked>li{border-bottom:1px solid #f4f4f4;margin:0}.box .nav-stacked>li:last-of-type{border-bottom:0}.box.height-control .box-body{max-height:300px;overflow:auto}.box .border-right{border-right:1px solid #f4f4f4}.box .border-left{border-left:1px solid #f4f4f4}.box.box-solid{border-top:0}.box.box-solid>.box-header .btn.btn-default{background:transparent}.box.box-solid>.box-header .btn:hover,.box.box-solid>.box-header a:hover{background:rgba(0,0,0,0.1)}.box.box-solid.box-default{border:1px solid #d2d6de}.box.box-solid.box-default>.box-header{color:#444;background:#d2d6de;background-color:#d2d6de}.box.box-solid.box-default>.box-header a,.box.box-solid.box-default>.box-header .btn{color:#444}.box.box-solid.box-primary{border:1px solid #3c8dbc}.box.box-solid.box-primary>.box-header{color:#fff;background:#3c8dbc;background-color:#3c8dbc}.box.box-solid.box-primary>.box-header a,.box.box-solid.box-primary>.box-header .btn{color:#fff}.box.box-solid.box-info{border:1px solid #00c0ef}.box.box-solid.box-info>.box-header{color:#fff;background:#00c0ef;background-color:#00c0ef}.box.box-solid.box-info>.box-header a,.box.box-solid.box-info>.box-header .btn{color:#fff}.box.box-solid.box-danger{border:1px solid #dd4b39}.box.box-solid.box-danger>.box-header{color:#fff;background:#dd4b39;background-color:#dd4b39}.box.box-solid.box-danger>.box-header a,.box.box-solid.box-danger>.box-header .btn{color:#fff}.box.box-solid.box-warning{border:1px solid #f39c12}.box.box-solid.box-warning>.box-header{color:#fff;background:#f39c12;background-color:#f39c12}.box.box-solid.box-warning>.box-header a,.box.box-solid.box-warning>.box-header .btn{color:#fff}.box.box-solid.box-success{border:1px solid #00a65a}.box.box-solid.box-success>.box-header{color:#fff;background:#00a65a;background-color:#00a65a}.box.box-solid.box-success>.box-header a,.box.box-solid.box-success>.box-header .btn{color:#fff}.box.box-solid>.box-header>.box-tools .btn{border:0;box-shadow:none}.box.box-solid[class*='bg']>.box-header{color:#fff}.box .box-group>.box{margin-bottom:5px}.box .knob-label{text-align:center;color:#333;font-weight:100;font-size:12px;margin-bottom:.3em}.box>.overlay,.overlay-wrapper>.overlay,.box>.loading-img,.overlay-wrapper>.loading-img{position:absolute;top:0;left:0;width:100%;height:100%}.box .overlay,.overlay-wrapper .overlay{z-index:50;background:rgba(255,255,255,0.7);border-radius:3px}.box .overlay>.fa,.overlay-wrapper .overlay>.fa{position:absolute;top:50%;left:50%;margin-left:-15px;margin-top:-15px;color:#000;font-size:30px}.box .overlay.dark,.overlay-wrapper .overlay.dark{background:rgba(0,0,0,0.5)}.box-header:before,.box-body:before,.box-footer:before,.box-header:after,.box-body:after,.box-footer:after{content:" ";display:table}.box-header:after,.box-body:after,.box-footer:after{clear:both}.box-header{color:#444;display:block;padding:10px;position:relative}.box-header.with-border{border-bottom:1px solid #f4f4f4}.collapsed-box .box-header.with-border{border-bottom:0}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion,.box-header .box-title{display:inline-block;font-size:18px;margin:0;line-height:1}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion{margin-right:5px}.box-header>.box-tools{position:absolute;right:10px;top:5px}.box-header>.box-tools [data-toggle="tooltip"]{position:relative}.box-header>.box-tools.pull-right .dropdown-menu{right:0;left:auto}.box-header>.box-tools .dropdown-menu>li>a{color:#444!important}.btn-box-tool{padding:5px;font-size:12px;background:transparent;color:#97a0b3}.open .btn-box-tool,.btn-box-tool:hover{color:#606c84}.btn-box-tool.btn:active{box-shadow:none}.box-body{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;padding:10px}.no-header .box-body{border-top-right-radius:3px;border-top-left-radius:3px}.box-body>.table{margin-bottom:0}.box-body .fc{margin-top:5px}.box-body .full-width-chart{margin:-19px}.box-body.no-padding .full-width-chart{margin:-9px}.box-body .box-pane{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:3px}.box-body .box-pane-right{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:0}.box-footer{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-top:1px solid #f4f4f4;padding:10px;background-color:#fff}.chart-legend{margin:10px 0}@media(max-width:991px){.chart-legend>li{float:left;margin-right:10px}}.box-comments{background:#f7f7f7}.box-comments .box-comment{padding:8px 0;border-bottom:1px solid #eee}.box-comments .box-comment:before,.box-comments .box-comment:after{content:" ";display:table}.box-comments .box-comment:after{clear:both}.box-comments .box-comment:last-of-type{border-bottom:0}.box-comments .box-comment:first-of-type{padding-top:0}.box-comments .box-comment img{float:left}.box-comments .comment-text{margin-left:40px;color:#555}.box-comments .username{color:#444;display:block;font-weight:600}.box-comments .text-muted{font-weight:400;font-size:12px}.todo-list{margin:0;padding:0;list-style:none;overflow:auto}.todo-list>li{border-radius:2px;padding:10px;background:#f4f4f4;margin-bottom:2px;border-left:2px solid #e6e7e8;color:#444}.todo-list>li:last-of-type{margin-bottom:0}.todo-list>li>input[type='checkbox']{margin:0 10px 0 5px}.todo-list>li .text{display:inline-block;margin-left:5px;font-weight:600}.todo-list>li .label{margin-left:10px;font-size:9px}.todo-list>li .tools{display:none;float:right;color:#dd4b39}.todo-list>li .tools>.fa,.todo-list>li .tools>.glyphicon,.todo-list>li .tools>.ion{margin-right:5px;cursor:pointer}.todo-list>li:hover .tools{display:inline-block}.todo-list>li.done{color:#999}.todo-list>li.done .text{text-decoration:line-through;font-weight:500}.todo-list>li.done .label{background:#d2d6de!important}.todo-list .danger{border-left-color:#dd4b39}.todo-list .warning{border-left-color:#f39c12}.todo-list .info{border-left-color:#00c0ef}.todo-list .success{border-left-color:#00a65a}.todo-list .primary{border-left-color:#3c8dbc}.todo-list .handle{display:inline-block;cursor:move;margin:0 5px}.chat{padding:5px 20px 5px 10px}.chat .item{margin-bottom:10px}.chat .item:before,.chat .item:after{content:" ";display:table}.chat .item:after{clear:both}.chat .item>img{width:40px;height:40px;border:2px solid transparent;border-radius:50%}.chat .item>.online{border:2px solid #00a65a}.chat .item>.offline{border:2px solid #dd4b39}.chat .item>.message{margin-left:55px;margin-top:-40px}.chat .item>.message>.name{display:block;font-weight:600}.chat .item>.attachment{border-radius:3px;background:#f4f4f4;margin-left:65px;margin-right:15px;padding:10px}.chat .item>.attachment>h4{margin:0 0 5px 0;font-weight:600;font-size:14px}.chat .item>.attachment>p,.chat .item>.attachment>.filename{font-weight:600;font-size:13px;font-style:italic;margin:0}.chat .item>.attachment:before,.chat .item>.attachment:after{content:" ";display:table}.chat .item>.attachment:after{clear:both}.box-input{max-width:200px}.modal .panel-body{color:#444}.info-box{display:block;min-height:90px;background:#fff;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:2px;margin-bottom:15px}.info-box small{font-size:14px}.info-box .progress{background:rgba(0,0,0,0.2);margin:5px -10px 5px -10px;height:2px}.info-box .progress .progress-bar{background:#fff}.info-box-icon{border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px;display:block;float:left;height:90px;width:90px;text-align:center;font-size:45px;line-height:90px;background:rgba(0,0,0,0.2)}.info-box-icon>img{max-width:100%}.info-box-content{padding:5px 10px;margin-left:90px}.info-box-number{display:block;font-weight:bold;font-size:18px}.progress-description,.info-box-text{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.info-box-text{text-transform:uppercase}.info-box-more{display:block}.progress-description{margin:0}.timeline{position:relative;margin:0 0 30px 0;padding:0;list-style:none}.timeline:before{content:'';position:absolute;top:0;bottom:0;width:4px;background:#ddd;left:31px;margin:0;border-radius:2px}.timeline>li{position:relative;margin-right:10px;margin-bottom:15px}.timeline>li:before,.timeline>li:after{content:" ";display:table}.timeline>li:after{clear:both}.timeline>li>.timeline-item{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;margin-top:0;background:#fff;color:#444;margin-left:60px;margin-right:15px;padding:0;position:relative}.timeline>li>.timeline-item>.time{color:#999;float:right;padding:10px;font-size:12px}.timeline>li>.timeline-item>.timeline-header{margin:0;color:#555;border-bottom:1px solid #f4f4f4;padding:10px;font-size:16px;line-height:1.1}.timeline>li>.timeline-item>.timeline-header>a{font-weight:600}.timeline>li>.timeline-item>.timeline-body,.timeline>li>.timeline-item>.timeline-footer{padding:10px}.timeline>li>.fa,.timeline>li>.glyphicon,.timeline>li>.ion{width:30px;height:30px;font-size:15px;line-height:30px;position:absolute;color:#666;background:#d2d6de;border-radius:50%;text-align:center;left:18px;top:0}.timeline>.time-label>span{font-weight:600;padding:5px;display:inline-block;background-color:#fff;border-radius:4px}.timeline-inverse>li>.timeline-item{background:#f0f0f0;border:1px solid #ddd;-webkit-box-shadow:none;box-shadow:none}.timeline-inverse>li>.timeline-item>.timeline-header{border-bottom-color:#ddd}.btn{border-radius:4px;-webkit-box-shadow:none;box-shadow:none;border:1px solid transparent}.btn.uppercase{text-transform:uppercase}.btn.btn-flat{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border-width:1px}.btn:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:focus{outline:0}.btn.btn-file{position:relative;overflow:hidden}.btn.btn-file>input[type='file']{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;opacity:0;filter:alpha(opacity=0);outline:0;background:white;cursor:inherit;display:block}.btn-default{background-color:#f4f4f4;color:#444;border-color:#ddd}.btn-default:hover,.btn-default:active,.btn-default.hover{background-color:#e7e7e7}.btn-primary{background-color:#3c8dbc;border-color:#367fa9}.btn-primary:hover,.btn-primary:active,.btn-primary.hover{background-color:#367fa9}.btn-success{background-color:#00a65a;border-color:#008d4c}.btn-success:hover,.btn-success:active,.btn-success.hover{background-color:#008d4c}.btn-info{background-color:#00c0ef;border-color:#00acd6}.btn-info:hover,.btn-info:active,.btn-info.hover{background-color:#00acd6}.btn-danger{background-color:#dd4b39;border-color:#d73925}.btn-danger:hover,.btn-danger:active,.btn-danger.hover{background-color:#d73925}.btn-warning{background-color:#f39c12;border-color:#e08e0b}.btn-warning:hover,.btn-warning:active,.btn-warning.hover{background-color:#e08e0b}.btn-outline{border:1px solid #fff;background:transparent;color:#fff}.btn-outline:hover,.btn-outline:focus,.btn-outline:active{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)}.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn[class*='bg-']:hover{-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,0.2);box-shadow:inset 0 0 100px rgba(0,0,0,0.2)}.btn-app{border-radius:3px;position:relative;padding:15px 5px;margin:0 0 10px 10px;min-width:80px;height:60px;text-align:center;color:#666;border:1px solid #ddd;background-color:#f4f4f4;font-size:12px}.btn-app>.fa,.btn-app>.glyphicon,.btn-app>.ion{font-size:20px;display:block}.btn-app:hover{background:#f4f4f4;color:#444;border-color:#aaa}.btn-app:active,.btn-app:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-app>.badge{position:absolute;top:-3px;right:-10px;font-size:10px;font-weight:400}.callout{border-radius:3px;margin:0 0 20px 0;padding:15px 30px 15px 15px;border-left:5px solid #eee}.callout a{color:#fff;text-decoration:underline}.callout a:hover{color:#eee}.callout h4{margin-top:0;font-weight:600}.callout p:last-child{margin-bottom:0}.callout code,.callout .highlight{background-color:#fff}.callout.callout-danger{border-color:#c23321}.callout.callout-warning{border-color:#c87f0a}.callout.callout-info{border-color:#0097bc}.callout.callout-success{border-color:#00733e}.alert{border-radius:3px}.alert h4{font-weight:600}.alert .icon{margin-right:10px}.alert .close{color:#000;opacity:.2;filter:alpha(opacity=20)}.alert .close:hover{opacity:.5;filter:alpha(opacity=50)}.alert a{color:#fff;text-decoration:underline}.alert-success{border-color:#008d4c}.alert-danger,.alert-error{border-color:#d73925}.alert-warning{border-color:#e08e0b}.alert-info{border-color:#00acd6}.nav>li>a:hover,.nav>li>a:active,.nav>li>a:focus{color:#444;background:#f7f7f7}.nav-pills>li>a{border-top:3px solid transparent;color:#444}.nav-pills>li>a>.fa,.nav-pills>li>a>.glyphicon,.nav-pills>li>a>.ion{margin-right:5px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{border-top-color:#3c8dbc}.nav-pills>li.active>a{font-weight:600}.nav-stacked>li>a{border-top:0;border-left:3px solid transparent;color:#444}.nav-stacked>li.active>a,.nav-stacked>li.active>a:hover{background:transparent;color:#444;border-top:0;border-left-color:#3c8dbc}.nav-stacked>li.header{border-bottom:1px solid #ddd;color:#777;margin-bottom:10px;padding:5px 10px;text-transform:uppercase}.nav-tabs-custom{margin-bottom:20px;background:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px}.nav-tabs-custom>.nav-tabs{margin:0;border-bottom-color:#f4f4f4;border-top-right-radius:3px;border-top-left-radius:3px}.nav-tabs-custom>.nav-tabs>li{border-top:3px solid transparent;margin-bottom:-2px;margin-right:5px}.nav-tabs-custom>.nav-tabs>li.disabled>a{color:#777}.nav-tabs-custom>.nav-tabs>li>a{color:#444}.nav-tabs-custom>.nav-tabs>li>a.text-muted{color:#999}.nav-tabs-custom>.nav-tabs>li>a,.nav-tabs-custom>.nav-tabs>li>a:hover{background:transparent;margin:0}.nav-tabs-custom>.nav-tabs>li>a:hover{color:#999}.nav-tabs-custom>.nav-tabs>li:not(.active)>a:hover,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:focus,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:active{border-color:transparent}.nav-tabs-custom>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom>.nav-tabs>li.active>a,.nav-tabs-custom>.nav-tabs>li.active:hover>a{background-color:#fff;color:#444}.nav-tabs-custom>.nav-tabs>li.active>a{border-top-color:transparent;border-left-color:#f4f4f4;border-right-color:#f4f4f4}.nav-tabs-custom>.nav-tabs>li:first-of-type{margin-left:0}.nav-tabs-custom>.nav-tabs>li:first-of-type.active>a{border-left-color:transparent}.nav-tabs-custom>.nav-tabs.pull-right{float:none!important}.nav-tabs-custom>.nav-tabs.pull-right>li{float:right}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type{margin-right:0}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type>a{border-left-width:1px}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type.active>a{border-left-color:#f4f4f4;border-right-color:transparent}.nav-tabs-custom>.nav-tabs>li.header{line-height:35px;padding:0 10px;font-size:20px;color:#444}.nav-tabs-custom>.nav-tabs>li.header>.fa,.nav-tabs-custom>.nav-tabs>li.header>.glyphicon,.nav-tabs-custom>.nav-tabs>li.header>.ion{margin-right:5px}.nav-tabs-custom>.tab-content{background:#fff;padding:10px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.nav-tabs-custom .dropdown.open>a:active,.nav-tabs-custom .dropdown.open>a:focus{background:transparent;color:#999}.nav-tabs-custom.tab-primary>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom.tab-info>.nav-tabs>li.active{border-top-color:#00c0ef}.nav-tabs-custom.tab-danger>.nav-tabs>li.active{border-top-color:#dd4b39}.nav-tabs-custom.tab-warning>.nav-tabs>li.active{border-top-color:#f39c12}.nav-tabs-custom.tab-success>.nav-tabs>li.active{border-top-color:#00a65a}.nav-tabs-custom.tab-default>.nav-tabs>li.active{border-top-color:#d2d6de}.pagination>li>a{background:#fafafa;color:#666}.pagination.pagination-flat>li>a{border-radius:0!important}.products-list{list-style:none;margin:0;padding:0}.products-list>.item{border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);padding:10px 0;background:#fff}.products-list>.item:before,.products-list>.item:after{content:" ";display:table}.products-list>.item:after{clear:both}.products-list .product-img{float:left}.products-list .product-img img{width:50px;height:50px}.products-list .product-info{margin-left:60px}.products-list .product-title{font-weight:600}.products-list .product-description{display:block;color:#999;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.product-list-in-box>.item{-webkit-box-shadow:none;box-shadow:none;border-bottom:1px solid #f4f4f4}.product-list-in-box>.item:last-of-type{border-bottom-width:0}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{border-top:1px solid #f4f4f4}.table>thead>tr>th{border-bottom:2px solid #f4f4f4}.table tr td .progress{margin-top:5px}.table-bordered{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table.no-border,.table.no-border td,.table.no-border th{border:0}table.text-center,table.text-center td,table.text-center th{text-align:center}.table.align th{text-align:left}.table.align td{text-align:right}.label-default{background-color:#d2d6de;color:#444}.direct-chat .box-body{border-bottom-right-radius:0;border-bottom-left-radius:0;position:relative;overflow-x:hidden;padding:0}.direct-chat.chat-pane-open .direct-chat-contacts{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.direct-chat-messages{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0);padding:10px;height:250px;overflow:auto}.direct-chat-msg,.direct-chat-text{display:block}.direct-chat-msg{margin-bottom:10px}.direct-chat-msg:before,.direct-chat-msg:after{content:" ";display:table}.direct-chat-msg:after{clear:both}.direct-chat-messages,.direct-chat-contacts{-webkit-transition:-webkit-transform .5s ease-in-out;-moz-transition:-moz-transform .5s ease-in-out;-o-transition:-o-transform .5s ease-in-out;transition:transform .5s ease-in-out}.direct-chat-text{border-radius:5px;position:relative;padding:5px 10px;background:#d2d6de;border:1px solid #d2d6de;margin:5px 0 0 50px;color:#444}.direct-chat-text:after,.direct-chat-text:before{position:absolute;right:100%;top:15px;border:solid transparent;border-right-color:#d2d6de;content:' ';height:0;width:0;pointer-events:none}.direct-chat-text:after{border-width:5px;margin-top:-5px}.direct-chat-text:before{border-width:6px;margin-top:-6px}.right .direct-chat-text{margin-right:50px;margin-left:0}.right .direct-chat-text:after,.right .direct-chat-text:before{right:auto;left:100%;border-right-color:transparent;border-left-color:#d2d6de}.direct-chat-img{border-radius:50%;float:left;width:40px;height:40px}.right .direct-chat-img{float:right}.direct-chat-info{display:block;margin-bottom:2px;font-size:12px}.direct-chat-name{font-weight:600}.direct-chat-timestamp{color:#999}.direct-chat-contacts-open .direct-chat-contacts{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.direct-chat-contacts{-webkit-transform:translate(101%,0);-ms-transform:translate(101%,0);-o-transform:translate(101%,0);transform:translate(101%,0);position:absolute;top:0;bottom:0;height:250px;width:100%;background:#222d32;color:#fff;overflow:auto}.contacts-list>li{border-bottom:1px solid rgba(0,0,0,0.2);padding:10px;margin:0}.contacts-list>li:before,.contacts-list>li:after{content:" ";display:table}.contacts-list>li:after{clear:both}.contacts-list>li:last-of-type{border-bottom:0}.contacts-list-img{border-radius:50%;width:40px;float:left}.contacts-list-info{margin-left:45px;color:#fff}.contacts-list-name,.contacts-list-status{display:block}.contacts-list-name{font-weight:600}.contacts-list-status{font-size:12px}.contacts-list-date{color:#aaa;font-weight:normal}.contacts-list-msg{color:#999}.direct-chat-danger .right>.direct-chat-text{background:#dd4b39;border-color:#dd4b39;color:#fff}.direct-chat-danger .right>.direct-chat-text:after,.direct-chat-danger .right>.direct-chat-text:before{border-left-color:#dd4b39}.direct-chat-primary .right>.direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff}.direct-chat-primary .right>.direct-chat-text:after,.direct-chat-primary .right>.direct-chat-text:before{border-left-color:#3c8dbc}.direct-chat-warning .right>.direct-chat-text{background:#f39c12;border-color:#f39c12;color:#fff}.direct-chat-warning .right>.direct-chat-text:after,.direct-chat-warning .right>.direct-chat-text:before{border-left-color:#f39c12}.direct-chat-info .right>.direct-chat-text{background:#00c0ef;border-color:#00c0ef;color:#fff}.direct-chat-info .right>.direct-chat-text:after,.direct-chat-info .right>.direct-chat-text:before{border-left-color:#00c0ef}.direct-chat-success .right>.direct-chat-text{background:#00a65a;border-color:#00a65a;color:#fff}.direct-chat-success .right>.direct-chat-text:after,.direct-chat-success .right>.direct-chat-text:before{border-left-color:#00a65a}.users-list>li{width:25%;float:left;padding:10px;text-align:center}.users-list>li img{border-radius:50%;max-width:100%;height:auto}.users-list>li>a:hover,.users-list>li>a:hover .users-list-name{color:#999}.users-list-name,.users-list-date{display:block}.users-list-name{font-weight:600;color:#444;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.users-list-date{color:#999;font-size:12px}.carousel-control.left,.carousel-control.right{background-image:none}.carousel-control>.fa{font-size:40px;position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-20px}.modal{background:rgba(0,0,0,0.3)}.modal-content{-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125);border:0}@media(min-width:768px){.modal-content{-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125)}}.modal-header{border-bottom-color:#f4f4f4}.modal-footer{border-top-color:#f4f4f4}.modal-primary .modal-header,.modal-primary .modal-footer{border-color:#307095}.modal-warning .modal-header,.modal-warning .modal-footer{border-color:#c87f0a}.modal-info .modal-header,.modal-info .modal-footer{border-color:#0097bc}.modal-success .modal-header,.modal-success .modal-footer{border-color:#00733e}.modal-danger .modal-header,.modal-danger .modal-footer{border-color:#c23321}.box-widget{border:0;position:relative}.widget-user .widget-user-header{padding:20px;height:120px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user .widget-user-username{margin-top:0;margin-bottom:5px;font-size:25px;font-weight:300;text-shadow:0 1px 1px rgba(0,0,0,0.2)}.widget-user .widget-user-desc{margin-top:0}.widget-user .widget-user-image{position:absolute;top:65px;left:50%;margin-left:-45px}.widget-user .widget-user-image>img{width:90px;height:auto;border:3px solid #fff}.widget-user .box-footer{padding-top:30px}.widget-user-2 .widget-user-header{padding:20px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user-2 .widget-user-username{margin-top:5px;margin-bottom:5px;font-size:25px;font-weight:300}.widget-user-2 .widget-user-desc{margin-top:0}.widget-user-2 .widget-user-username,.widget-user-2 .widget-user-desc{margin-left:75px}.widget-user-2 .widget-user-image>img{width:65px;height:auto;float:left}.treeview-menu{display:none;list-style:none;padding:0;margin:0;padding-left:5px}.treeview-menu .treeview-menu{padding-left:20px}.treeview-menu>li{margin:0}.treeview-menu>li>a{padding:5px 5px 5px 15px;display:block;font-size:14px}.treeview-menu>li>a>.fa,.treeview-menu>li>a>.glyphicon,.treeview-menu>li>a>.ion{width:20px}.treeview-menu>li>a>.pull-right-container>.fa-angle-left,.treeview-menu>li>a>.pull-right-container>.fa-angle-down,.treeview-menu>li>a>.fa-angle-left,.treeview-menu>li>a>.fa-angle-down{width:auto}.mailbox-messages>.table{margin:0}.mailbox-controls{padding:5px}.mailbox-controls.with-border{border-bottom:1px solid #f4f4f4}.mailbox-read-info{border-bottom:1px solid #f4f4f4;padding:10px}.mailbox-read-info h3{font-size:20px;margin:0}.mailbox-read-info h5{margin:0;padding:5px 0 0 0}.mailbox-read-time{color:#999;font-size:13px}.mailbox-read-message{padding:10px}.mailbox-attachments li{float:left;width:200px;border:1px solid #eee;margin-bottom:10px;margin-right:10px}.mailbox-attachment-name{font-weight:bold;color:#666}.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block}.mailbox-attachment-info{padding:10px;background:#f4f4f4}.mailbox-attachment-size{color:#999;font-size:12px}.mailbox-attachment-icon{text-align:center;font-size:65px;color:#666;padding:20px 10px}.mailbox-attachment-icon.has-img{padding:0}.mailbox-attachment-icon.has-img>img{max-width:100%;height:auto}.lockscreen{background:#d2d6de}.lockscreen-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.lockscreen-logo a{color:#444}.lockscreen-wrapper{max-width:400px;margin:0 auto;margin-top:10%}.lockscreen .lockscreen-name{text-align:center;font-weight:600}.lockscreen-item{border-radius:4px;padding:0;background:#fff;position:relative;margin:10px auto 30px auto;width:290px}.lockscreen-image{border-radius:50%;position:absolute;left:-10px;top:-25px;background:#fff;padding:5px;z-index:10}.lockscreen-image>img{border-radius:50%;width:70px;height:70px}.lockscreen-credentials{margin-left:70px}.lockscreen-credentials .form-control{border:0}.lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px}.lockscreen-footer{margin-top:10px}.login-logo,.register-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.login-logo a,.register-logo a{color:#444}.login-page,.register-page{background:#d2d6de}.login-box,.register-box{width:360px;margin:7% auto}@media(max-width:768px){.login-box,.register-box{width:90%;margin-top:20px}}.login-box-body,.register-box-body{background:#fff;padding:20px;border-top:0;color:#666}.login-box-body .form-control-feedback,.register-box-body .form-control-feedback{color:#777}.login-box-msg,.register-box-msg{margin:0;text-align:center;padding:0 20px 20px 20px}.social-auth-links{margin:10px 0}.error-page{width:600px;margin:20px auto 0 auto}@media(max-width:991px){.error-page{width:100%}}.error-page>.headline{float:left;font-size:100px;font-weight:300}@media(max-width:991px){.error-page>.headline{float:none;text-align:center}}.error-page>.error-content{margin-left:190px;display:block}@media(max-width:991px){.error-page>.error-content{margin-left:0}}.error-page>.error-content>h3{font-weight:300;font-size:25px}@media(max-width:991px){.error-page>.error-content>h3{text-align:center}} -.invoice{position:relative;background:#fff;border:1px solid #f4f4f4;padding:20px;margin:10px 25px}.invoice-title{margin-top:0}.profile-user-img{margin:0 auto;width:100px;padding:3px;border:3px solid #d2d6de}.profile-username{font-size:21px;margin-top:5px}.post{border-bottom:1px solid #d2d6de;margin-bottom:15px;padding-bottom:15px;color:#666}.post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.post .user-block{margin-bottom:15px}.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon>:first-child{border:0;text-align:center;width:100%}.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0}.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0}.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0}.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none}.btn-adn .badge{color:#d87a68;background-color:#fff}.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none}.btn-bitbucket .badge{color:#205081;background-color:#fff}.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none}.btn-dropbox .badge{color:#1087dd;background-color:#fff}.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none}.btn-facebook .badge{color:#3b5998;background-color:#fff}.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none}.btn-flickr .badge{color:#ff0084;background-color:#fff}.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none}.btn-foursquare .badge{color:#f94877;background-color:#fff}.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none}.btn-github .badge{color:#444;background-color:#fff}.btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{background-image:none}.btn-google .badge{color:#dd4b39;background-color:#fff}.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none}.btn-instagram .badge{color:#3f729b;background-color:#fff}.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none}.btn-linkedin .badge{color:#007bb6;background-color:#fff}.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none}.btn-microsoft .badge{color:#2672ec;background-color:#fff}.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none}.btn-openid .badge{color:#f7931e;background-color:#fff}.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none}.btn-pinterest .badge{color:#cb2027;background-color:#fff}.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:hover{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none}.btn-reddit .badge{color:#eff7ff;background-color:#000}.btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none}.btn-soundcloud .badge{color:#f50;background-color:#fff}.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none}.btn-tumblr .badge{color:#2c4762;background-color:#fff}.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none}.btn-twitter .badge{color:#55acee;background-color:#fff}.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none}.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none}.btn-vk .badge{color:#587ea3;background-color:#fff}.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none}.btn-yahoo .badge{color:#720e9e;background-color:#fff}.fc-button{background:#f4f4f4;background-image:none;color:#444;border-color:#ddd;border-bottom-color:#ddd}.fc-button:hover,.fc-button:active,.fc-button.hover{background-color:#e9e9e9}.fc-header-title h2{font-size:15px;line-height:1.6em;color:#666;margin-left:10px}.fc-header-right{padding-right:10px}.fc-header-left{padding-left:10px}.fc-widget-header{background:#fafafa}.fc-grid{width:100%;border:0}.fc-widget-header:first-of-type,.fc-widget-content:first-of-type{border-left:0;border-right:0}.fc-widget-header:last-of-type,.fc-widget-content:last-of-type{border-right:0}.fc-toolbar{padding:10px;margin:0}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px}.fc-color-picker{list-style:none;margin:0;padding:0}.fc-color-picker>li{float:left;font-size:30px;margin-right:5px;line-height:30px}.fc-color-picker>li .fa{-webkit-transition:-webkit-transform linear .3s;-moz-transition:-moz-transform linear .3s;-o-transition:-o-transform linear .3s;transition:transform linear .3s}.fc-color-picker>li .fa:hover{-webkit-transform:rotate(30deg);-ms-transform:rotate(30deg);-o-transform:rotate(30deg);transform:rotate(30deg)}#add-new-event{-webkit-transition:all linear .3s;-o-transition:all linear .3s;transition:all linear .3s}.external-event{padding:5px 10px;font-weight:bold;margin-bottom:4px;box-shadow:0 1px 1px rgba(0,0,0,0.1);text-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;cursor:move}.external-event:hover{box-shadow:inset 0 0 90px rgba(0,0,0,0.2)}.select2-container--default.select2-container--focus,.select2-selection.select2-container--focus,.select2-container--default:focus,.select2-selection:focus,.select2-container--default:active,.select2-selection:active{outline:0}.select2-container--default .select2-selection--single,.select2-selection .select2-selection--single{border:1px solid #d2d6de;padding:6px 12px;height:34px}.select2-container--default.select2-container--open{border-color:#3c8dbc}.select2-dropdown{border:1px solid #d2d6de}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#3c8dbc;color:white}.select2-results__option{padding:6px 12px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{padding-left:0;padding-right:0;height:auto;margin-top:-4px}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:28px;right:3px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-dropdown .select2-search__field,.select2-search--inline .select2-search__field{border:1px solid #d2d6de}.select2-dropdown .select2-search__field:focus,.select2-search--inline .select2-search__field:focus{outline:0}.select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default .select2-search--dropdown .select2-search__field{border-color:#3c8dbc!important}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#444}.select2-container--default .select2-selection--multiple{border:1px solid #d2d6de}.select2-container--default .select2-selection--multiple:focus{border-color:#3c8dbc}.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#d2d6de}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;padding:1px 10px;color:#fff}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{margin-right:5px;color:rgba(255,255,255,0.7)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container .select2-selection--single .select2-selection__rendered{padding-right:10px}.box .datepicker-inline,.box .datepicker-inline .datepicker-days,.box .datepicker-inline>table,.box .datepicker-inline .datepicker-days>table{width:100%}.box .datepicker-inline td:hover,.box .datepicker-inline .datepicker-days td:hover,.box .datepicker-inline>table td:hover,.box .datepicker-inline .datepicker-days>table td:hover{background-color:rgba(255,255,255,0.3)}.box .datepicker-inline td.day.old,.box .datepicker-inline .datepicker-days td.day.old,.box .datepicker-inline>table td.day.old,.box .datepicker-inline .datepicker-days>table td.day.old,.box .datepicker-inline td.day.new,.box .datepicker-inline .datepicker-days td.day.new,.box .datepicker-inline>table td.day.new,.box .datepicker-inline .datepicker-days>table td.day.new{color:#777}.pad{padding:10px}.margin{margin:10px}.margin-bottom{margin-bottom:20px}.margin-bottom-none{margin-bottom:0}.margin-r-5{margin-right:5px}.inline{display:inline}.description-block{display:block;margin:10px 0;text-align:center}.description-block.margin-bottom{margin-bottom:25px}.description-block>.description-header{margin:0;padding:0;font-weight:600;font-size:16px}.description-block>.description-text{text-transform:uppercase}.bg-red,.bg-yellow,.bg-aqua,.bg-blue,.bg-light-blue,.bg-green,.bg-navy,.bg-teal,.bg-olive,.bg-lime,.bg-orange,.bg-fuchsia,.bg-purple,.bg-maroon,.bg-black,.bg-red-active,.bg-yellow-active,.bg-aqua-active,.bg-blue-active,.bg-light-blue-active,.bg-green-active,.bg-navy-active,.bg-teal-active,.bg-olive-active,.bg-lime-active,.bg-orange-active,.bg-fuchsia-active,.bg-purple-active,.bg-maroon-active,.bg-black-active,.callout.callout-danger,.callout.callout-warning,.callout.callout-info,.callout.callout-success,.alert-success,.alert-danger,.alert-error,.alert-warning,.alert-info,.label-danger,.label-info,.label-warning,.label-primary,.label-success,.modal-primary .modal-body,.modal-primary .modal-header,.modal-primary .modal-footer,.modal-warning .modal-body,.modal-warning .modal-header,.modal-warning .modal-footer,.modal-info .modal-body,.modal-info .modal-header,.modal-info .modal-footer,.modal-success .modal-body,.modal-success .modal-header,.modal-success .modal-footer,.modal-danger .modal-body,.modal-danger .modal-header,.modal-danger .modal-footer{color:#fff!important}.bg-gray{color:#000;background-color:#d2d6de!important}.bg-gray-light{background-color:#f7f7f7}.bg-black{background-color:#111!important}.bg-red,.callout.callout-danger,.alert-danger,.alert-error,.label-danger,.modal-danger .modal-body{background-color:#dd4b39!important}.bg-yellow,.callout.callout-warning,.alert-warning,.label-warning,.modal-warning .modal-body{background-color:#f39c12!important}.bg-aqua,.callout.callout-info,.alert-info,.label-info,.modal-info .modal-body{background-color:#00c0ef!important}.bg-blue{background-color:#0073b7!important}.bg-light-blue,.label-primary,.modal-primary .modal-body{background-color:#3c8dbc!important}.bg-green,.callout.callout-success,.alert-success,.label-success,.modal-success .modal-body{background-color:#00a65a!important}.bg-navy{background-color:#001f3f!important}.bg-teal{background-color:#39cccc!important}.bg-olive{background-color:#3d9970!important}.bg-lime{background-color:#01ff70!important}.bg-orange{background-color:#ff851b!important}.bg-fuchsia{background-color:#f012be!important}.bg-purple{background-color:#605ca8!important}.bg-maroon{background-color:#d81b60!important}.bg-gray-active{color:#000;background-color:#b5bbc8!important}.bg-black-active{background-color:#000!important}.bg-red-active,.modal-danger .modal-header,.modal-danger .modal-footer{background-color:#d33724!important}.bg-yellow-active,.modal-warning .modal-header,.modal-warning .modal-footer{background-color:#db8b0b!important}.bg-aqua-active,.modal-info .modal-header,.modal-info .modal-footer{background-color:#00a7d0!important}.bg-blue-active{background-color:#005384!important}.bg-light-blue-active,.modal-primary .modal-header,.modal-primary .modal-footer{background-color:#357ca5!important}.bg-green-active,.modal-success .modal-header,.modal-success .modal-footer{background-color:#008d4c!important}.bg-navy-active{background-color:#001a35!important}.bg-teal-active{background-color:#30bbbb!important}.bg-olive-active{background-color:#368763!important}.bg-lime-active{background-color:#00e765!important}.bg-orange-active{background-color:#ff7701!important}.bg-fuchsia-active{background-color:#db0ead!important}.bg-purple-active{background-color:#555299!important}.bg-maroon-active{background-color:#ca195a!important}[class^="bg-"].disabled{opacity:.65;filter:alpha(opacity=65)}.text-red{color:#dd4b39!important}.text-yellow{color:#f39c12!important}.text-aqua{color:#00c0ef!important}.text-blue{color:#0073b7!important}.text-black{color:#111!important}.text-light-blue{color:#3c8dbc!important}.text-green{color:#00a65a!important}.text-gray{color:#d2d6de!important}.text-navy{color:#001f3f!important}.text-teal{color:#39cccc!important}.text-olive{color:#3d9970!important}.text-lime{color:#01ff70!important}.text-orange{color:#ff851b!important}.text-fuchsia{color:#f012be!important}.text-purple{color:#605ca8!important}.text-maroon{color:#d81b60!important}.link-muted{color:#7a869d}.link-muted:hover,.link-muted:focus{color:#606c84}.link-black{color:#666}.link-black:hover,.link-black:focus{color:#999}.hide{display:none!important}.no-border{border:0!important}.no-padding{padding:0!important}.no-margin{margin:0!important}.no-shadow{box-shadow:none!important}.list-unstyled,.chart-legend,.contacts-list,.users-list,.mailbox-attachments{list-style:none;margin:0;padding:0}.list-group-unbordered>.list-group-item{border-left:0;border-right:0;padding-left:0;padding-right:0}.flat{border-radius:0!important}.text-bold,.text-bold.table td,.text-bold.table th{font-weight:700}.text-sm{font-size:12px}.jqstooltip{padding:5px!important;width:auto!important;height:auto!important}.bg-teal-gradient{background:#39cccc!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#39cccc),color-stop(1,#7adddd))!important;background:-ms-linear-gradient(bottom,#39cccc,#7adddd)!important;background:-moz-linear-gradient(center bottom,#39cccc 0,#7adddd 100%)!important;background:-o-linear-gradient(#7adddd,#39cccc)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd',endColorstr='#39cccc',GradientType=0)!important;color:#fff}.bg-light-blue-gradient{background:#3c8dbc!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#3c8dbc),color-stop(1,#67a8ce))!important;background:-ms-linear-gradient(bottom,#3c8dbc,#67a8ce)!important;background:-moz-linear-gradient(center bottom,#3c8dbc 0,#67a8ce 100%)!important;background:-o-linear-gradient(#67a8ce,#3c8dbc)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce',endColorstr='#3c8dbc',GradientType=0)!important;color:#fff}.bg-blue-gradient{background:#0073b7!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#0073b7),color-stop(1,#0089db))!important;background:-ms-linear-gradient(bottom,#0073b7,#0089db)!important;background:-moz-linear-gradient(center bottom,#0073b7 0,#0089db 100%)!important;background:-o-linear-gradient(#0089db,#0073b7)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db',endColorstr='#0073b7',GradientType=0)!important;color:#fff}.bg-aqua-gradient{background:#00c0ef!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#00c0ef),color-stop(1,#14d1ff))!important;background:-ms-linear-gradient(bottom,#00c0ef,#14d1ff)!important;background:-moz-linear-gradient(center bottom,#00c0ef 0,#14d1ff 100%)!important;background:-o-linear-gradient(#14d1ff,#00c0ef)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff',endColorstr='#00c0ef',GradientType=0)!important;color:#fff}.bg-yellow-gradient{background:#f39c12!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#f39c12),color-stop(1,#f7bc60))!important;background:-ms-linear-gradient(bottom,#f39c12,#f7bc60)!important;background:-moz-linear-gradient(center bottom,#f39c12 0,#f7bc60 100%)!important;background:-o-linear-gradient(#f7bc60,#f39c12)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60',endColorstr='#f39c12',GradientType=0)!important;color:#fff}.bg-purple-gradient{background:#605ca8!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#605ca8),color-stop(1,#9491c4))!important;background:-ms-linear-gradient(bottom,#605ca8,#9491c4)!important;background:-moz-linear-gradient(center bottom,#605ca8 0,#9491c4 100%)!important;background:-o-linear-gradient(#9491c4,#605ca8)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4',endColorstr='#605ca8',GradientType=0)!important;color:#fff}.bg-green-gradient{background:#00a65a!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#00a65a),color-stop(1,#00ca6d))!important;background:-ms-linear-gradient(bottom,#00a65a,#00ca6d)!important;background:-moz-linear-gradient(center bottom,#00a65a 0,#00ca6d 100%)!important;background:-o-linear-gradient(#00ca6d,#00a65a)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d',endColorstr='#00a65a',GradientType=0)!important;color:#fff}.bg-red-gradient{background:#dd4b39!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#dd4b39),color-stop(1,#e47365))!important;background:-ms-linear-gradient(bottom,#dd4b39,#e47365)!important;background:-moz-linear-gradient(center bottom,#dd4b39 0,#e47365 100%)!important;background:-o-linear-gradient(#e47365,#dd4b39)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365',endColorstr='#dd4b39',GradientType=0)!important;color:#fff}.bg-black-gradient{background:#111!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#111),color-stop(1,#2b2b2b))!important;background:-ms-linear-gradient(bottom,#111,#2b2b2b)!important;background:-moz-linear-gradient(center bottom,#111 0,#2b2b2b 100%)!important;background:-o-linear-gradient(#2b2b2b,#111)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b',endColorstr='#111111',GradientType=0)!important;color:#fff}.bg-maroon-gradient{background:#d81b60!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#d81b60),color-stop(1,#e73f7c))!important;background:-ms-linear-gradient(bottom,#d81b60,#e73f7c)!important;background:-moz-linear-gradient(center bottom,#d81b60 0,#e73f7c 100%)!important;background:-o-linear-gradient(#e73f7c,#d81b60)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c',endColorstr='#d81b60',GradientType=0)!important;color:#fff}.description-block .description-icon{font-size:16px}.no-pad-top{padding-top:0}.position-static{position:static!important}.list-header{font-size:15px;padding:10px 4px;font-weight:bold;color:#666}.list-seperator{height:1px;background:#f4f4f4;margin:15px 0 9px 0}.list-link>a{padding:4px;color:#777}.list-link>a:hover{color:#222}.font-light{font-weight:300}.user-block:before,.user-block:after{content:" ";display:table}.user-block:after{clear:both}.user-block img{width:40px;height:40px;float:left}.user-block .username,.user-block .description,.user-block .comment{display:block;margin-left:50px}.user-block .username{font-size:16px;font-weight:600}.user-block .description{color:#999;font-size:13px}.user-block.user-block-sm .username,.user-block.user-block-sm .description,.user-block.user-block-sm .comment{margin-left:40px}.user-block.user-block-sm .username{font-size:14px}.img-sm,.img-md,.img-lg,.box-comments .box-comment img,.user-block.user-block-sm img{float:left}.img-sm,.box-comments .box-comment img,.user-block.user-block-sm img{width:30px!important;height:30px!important}.img-sm+.img-push{margin-left:40px}.img-md{width:60px;height:60px}.img-md+.img-push{margin-left:70px}.img-lg{width:100px;height:100px}.img-lg+.img-push{margin-left:110px} -.img-bordered{border:3px solid #d2d6de;padding:3px}.img-bordered-sm{border:2px solid #d2d6de;padding:2px}.attachment-block{border:1px solid #f4f4f4;padding:5px;margin-bottom:10px;background:#f7f7f7}.attachment-block .attachment-img{max-width:100px;max-height:100px;height:auto;float:left}.attachment-block .attachment-pushed{margin-left:110px}.attachment-block .attachment-heading{margin:0}.attachment-block .attachment-text{color:#555}.connectedSortable{min-height:100px}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sort-highlight{background:#f4f4f4;border:1px dashed #ddd;margin-bottom:10px}.full-opacity-hover{opacity:.65;filter:alpha(opacity=65)}.full-opacity-hover:hover{opacity:1;filter:alpha(opacity=100)}.chart{position:relative;overflow:hidden;width:100%}.chart svg,.chart canvas{width:100%!important}@media print{.no-print,.main-sidebar,.left-side,.main-header,.content-header{display:none!important}.content-wrapper,.right-side,.main-footer{margin-left:0!important;min-height:0!important;-webkit-transform:translate(0,0)!important;-ms-transform:translate(0,0)!important;-o-transform:translate(0,0)!important;transform:translate(0,0)!important}.fixed .content-wrapper,.fixed .right-side{padding-top:0!important}.invoice{width:100%;border:0;margin:0;padding:0}.invoice-col{float:left;width:33.3333333%}.table-responsive{overflow:auto}.table-responsive>.table tr th,.table-responsive>.table tr td{white-space:normal!important}} \ No newline at end of file +html,body{height:100%}.layout-boxed html,.layout-boxed body{height:100%}body{font-family:'Source Sans Pro','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:400;overflow-x:hidden;overflow-y:auto}.wrapper{height:100%;position:relative;overflow-x:hidden;overflow-y:auto}.wrapper:before,.wrapper:after{content:" ";display:table}.wrapper:after{clear:both}.layout-boxed .wrapper{max-width:1250px;margin:0 auto;min-height:100%;box-shadow:0 0 8px rgba(0,0,0,0.5);position:relative}.layout-boxed{background:url('../img/boxed-bg.jpg') repeat fixed}.content-wrapper,.main-footer{-webkit-transition:-webkit-transform .3s ease-in-out,margin .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,margin .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,margin .3s ease-in-out;transition:transform .3s ease-in-out,margin .3s ease-in-out;margin-left:230px;z-index:820}.layout-top-nav .content-wrapper,.layout-top-nav .main-footer{margin-left:0}@media(max-width:767px){.content-wrapper,.main-footer{margin-left:0}}@media(min-width:768px){.sidebar-collapse .content-wrapper,.sidebar-collapse .main-footer{margin-left:0}}@media(max-width:767px){.sidebar-open .content-wrapper,.sidebar-open .main-footer{-webkit-transform:translate(230px,0);-ms-transform:translate(230px,0);-o-transform:translate(230px,0);transform:translate(230px,0)}}.content-wrapper{min-height:100%;background-color:#ecf0f5;z-index:800}.main-footer{background:#fff;padding:15px;color:#444;border-top:1px solid #caced6}.fixed .main-header,.fixed .main-sidebar,.fixed .left-side{position:fixed}.fixed .main-header{top:0;right:0;left:0}.fixed .content-wrapper,.fixed .right-side{padding-top:50px}@media(max-width:767px){.fixed .content-wrapper,.fixed .right-side{padding-top:100px}}.fixed.layout-boxed .wrapper{max-width:100%}.fixed .wrapper{overflow:hidden}.hold-transition .content-wrapper,.hold-transition .right-side,.hold-transition .main-footer,.hold-transition .main-sidebar,.hold-transition .left-side,.hold-transition .main-header .navbar,.hold-transition .main-header .logo,.hold-transition .menu-open .fa-angle-left{-webkit-transition:none;-o-transition:none;transition:none}.content{min-height:250px;padding:15px;margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:'Source Sans Pro',sans-serif}a{color:#3c8dbc}a:hover,a:active,a:focus{outline:0;text-decoration:none;color:#72afd2}.page-header{margin:10px 0 20px 0;font-size:22px}.page-header>small{color:#666;display:block;margin-top:5px}.main-header{position:relative;max-height:100px;z-index:1030}.main-header .navbar{-webkit-transition:margin-left .3s ease-in-out;-o-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out;margin-bottom:0;margin-left:230px;border:0;min-height:50px}.layout-top-nav .main-header .navbar{margin-left:0}.main-header #navbar-search-input.form-control{background:rgba(255,255,255,0.2);border-color:transparent}.main-header #navbar-search-input.form-control:focus,.main-header #navbar-search-input.form-control:active{border-color:rgba(0,0,0,0.1);background:rgba(255,255,255,0.9)}.main-header #navbar-search-input.form-control::-moz-placeholder{color:#ccc;opacity:1}.main-header #navbar-search-input.form-control:-ms-input-placeholder{color:#ccc}.main-header #navbar-search-input.form-control::-webkit-input-placeholder{color:#ccc}.main-header .navbar-custom-menu,.main-header .navbar-right{float:right}@media(max-width:991px){.main-header .navbar-custom-menu a,.main-header .navbar-right a{color:inherit;background:transparent}}@media(max-width:767px){.main-header .navbar-right{float:none}.navbar-collapse .main-header .navbar-right{margin:7.5px -15px}.main-header .navbar-right>li{color:inherit;border:0}}.main-header .sidebar-toggle{float:left;background-color:transparent;background-image:none;padding:15px 15px;font-family:fontAwesome}.main-header .sidebar-toggle:before{content:"\f0c9"}.main-header .sidebar-toggle:hover{color:#fff}.main-header .sidebar-toggle:focus,.main-header .sidebar-toggle:active{background:transparent}.main-header .sidebar-toggle .icon-bar{display:none}.main-header .navbar .nav>li.user>a>.fa,.main-header .navbar .nav>li.user>a>.glyphicon,.main-header .navbar .nav>li.user>a>.ion{margin-right:5px}.main-header .navbar .nav>li>a>.label{position:absolute;top:9px;right:7px;text-align:center;font-size:9px;padding:2px 3px;line-height:.9}.main-header .logo{-webkit-transition:width .3s ease-in-out;-o-transition:width .3s ease-in-out;transition:width .3s ease-in-out;display:block;float:left;height:50px;font-size:20px;line-height:50px;text-align:center;width:230px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;padding:0 15px;font-weight:300;overflow:hidden}.main-header .logo .logo-lg{display:block}.main-header .logo .logo-mini{display:none}.main-header .navbar-brand{color:#fff}.content-header{position:relative;padding:15px 15px 0 15px}.content-header>h1{margin:0;font-size:24px}.content-header>h1>small{font-size:15px;display:inline-block;padding-left:4px;font-weight:300}.content-header>.breadcrumb{float:right;background:transparent;margin-top:0;margin-bottom:0;font-size:12px;padding:7px 5px;position:absolute;top:15px;right:10px;border-radius:2px}.content-header>.breadcrumb>li>a{color:#444;text-decoration:none;display:inline-block}.content-header>.breadcrumb>li>a>.fa,.content-header>.breadcrumb>li>a>.glyphicon,.content-header>.breadcrumb>li>a>.ion{margin-right:5px}.content-header>.breadcrumb>li+li:before{content:'>\00a0'}@media(max-width:991px){.content-header>.breadcrumb{position:relative;margin-top:5px;top:0;right:0;float:none;background:#caced6;padding-left:10px}.content-header>.breadcrumb li:before{color:#97a0b3}}.navbar-toggle{color:#fff;border:0;margin:0;padding:15px 15px}@media(max-width:991px){.navbar-custom-menu .navbar-nav>li{float:left}.navbar-custom-menu .navbar-nav{margin:0;float:left}.navbar-custom-menu .navbar-nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px}}@media(max-width:767px){.main-header{position:relative}.main-header .logo,.main-header .navbar{width:100%;float:none}.main-header .navbar{margin:0}.main-header .navbar-custom-menu{float:right}}@media(max-width:991px){.navbar-collapse.pull-left{float:none!important}.navbar-collapse.pull-left+.navbar-custom-menu{display:block;position:absolute;top:0;right:40px}}.main-sidebar{position:absolute;top:0;left:0;padding-top:50px;min-height:100%;width:230px;z-index:810;-webkit-transition:-webkit-transform .3s ease-in-out,width .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,width .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,width .3s ease-in-out;transition:transform .3s ease-in-out,width .3s ease-in-out}@media(max-width:767px){.main-sidebar{padding-top:100px}}@media(max-width:767px){.main-sidebar{-webkit-transform:translate(-230px,0);-ms-transform:translate(-230px,0);-o-transform:translate(-230px,0);transform:translate(-230px,0)}}@media(min-width:768px){.sidebar-collapse .main-sidebar{-webkit-transform:translate(-230px,0);-ms-transform:translate(-230px,0);-o-transform:translate(-230px,0);transform:translate(-230px,0)}}@media(max-width:767px){.sidebar-open .main-sidebar{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}}.sidebar{padding-bottom:10px}.sidebar-form input:focus{border-color:transparent}.user-panel{position:relative;width:100%;padding:10px;overflow:hidden}.user-panel:before,.user-panel:after{content:" ";display:table}.user-panel:after{clear:both}.user-panel>.image>img{width:100%;max-width:45px;height:auto}.user-panel>.info{padding:5px 5px 5px 15px;line-height:1;position:absolute;left:55px}.user-panel>.info>p{font-weight:600;margin-bottom:9px}.user-panel>.info>a{text-decoration:none;padding-right:5px;margin-top:3px;font-size:11px}.user-panel>.info>a>.fa,.user-panel>.info>a>.ion,.user-panel>.info>a>.glyphicon{margin-right:3px}.sidebar-menu{list-style:none;margin:0;padding:0}.sidebar-menu>li{position:relative;margin:0;padding:0}.sidebar-menu>li>a{padding:12px 5px 12px 15px;display:block}.sidebar-menu>li>a>.fa,.sidebar-menu>li>a>.glyphicon,.sidebar-menu>li>a>.ion{width:20px}.sidebar-menu>li .label,.sidebar-menu>li .badge{margin-right:5px}.sidebar-menu>li .badge{margin-top:3px}.sidebar-menu li.header{padding:10px 25px 10px 15px;font-size:12px}.sidebar-menu li>a>.fa-angle-left,.sidebar-menu li>a>.pull-right-container>.fa-angle-left{width:auto;height:auto;padding:0;margin-right:10px;-webkit-transition:transform .5s ease;-o-transition:transform .5s ease;transition:transform .5s ease}.sidebar-menu li>a>.fa-angle-left{position:absolute;top:50%;right:10px;margin-top:-8px}.sidebar-menu .menu-open>a>.fa-angle-left,.sidebar-menu .menu-open>a>.pull-right-container>.fa-angle-left{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.sidebar-menu .active>.treeview-menu{display:block}@media(min-width:768px){.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .right-side,.sidebar-mini.sidebar-collapse .main-footer{margin-left:50px!important;z-index:840}.sidebar-mini.sidebar-collapse .main-sidebar{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0);width:50px!important;z-index:850}.sidebar-mini.sidebar-collapse .sidebar-menu>li{position:relative}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a{margin-right:0}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span{border-top-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li:not(.treeview)>a>span{border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{padding-top:5px;padding-bottom:5px;border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel>.info,.sidebar-mini.sidebar-collapse .sidebar-form,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span,.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>.pull-right,.sidebar-mini.sidebar-collapse .sidebar-menu li.header{display:none!important;-webkit-transform:translateZ(0)}.sidebar-mini.sidebar-collapse .main-header .logo{width:50px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-mini{display:block;margin-left:-15px;margin-right:-15px;font-size:18px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-lg{display:none}.sidebar-mini.sidebar-collapse .main-header .navbar{margin-left:50px}}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span:not(.pull-right),.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{display:block!important;position:absolute;width:180px;left:50px}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span{top:0;margin-left:-3px;padding:12px 5px 12px 20px;background-color:inherit}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container{position:relative!important;float:right;width:auto!important;left:180px!important;top:-22px!important;z-index:900}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container>.label:not(:first-of-type){display:none}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{top:44px;margin-left:0}.sidebar-expanded-on-hover .main-footer,.sidebar-expanded-on-hover .content-wrapper{margin-left:50px}.sidebar-expanded-on-hover .main-sidebar{box-shadow:3px 0 8px rgba(0,0,0,0.125)}.sidebar-menu,.main-sidebar .user-panel,.sidebar-menu>li.header{white-space:nowrap;overflow:hidden}.sidebar-menu:hover{overflow:visible}.sidebar-form,.sidebar-menu>li.header{overflow:hidden;text-overflow:clip}.sidebar-menu li>a{position:relative}.sidebar-menu li>a>.pull-right-container{position:absolute;right:10px;top:50%;margin-top:-7px}.control-sidebar-bg{position:fixed;z-index:1000;bottom:0}.control-sidebar-bg,.control-sidebar{top:0;right:-230px;width:230px;-webkit-transition:right .3s ease-in-out;-o-transition:right .3s ease-in-out;transition:right .3s ease-in-out}.control-sidebar{position:absolute;padding-top:50px;z-index:1010}@media(max-width:768px){.control-sidebar{padding-top:100px}}.control-sidebar>.tab-content{padding:10px 15px}.control-sidebar.control-sidebar-open,.control-sidebar.control-sidebar-open+.control-sidebar-bg{right:0}.control-sidebar-open .control-sidebar-bg,.control-sidebar-open .control-sidebar{right:0}@media(min-width:768px){.control-sidebar-open .content-wrapper,.control-sidebar-open .right-side,.control-sidebar-open .main-footer{margin-right:230px}}.fixed .control-sidebar{position:fixed;height:100%;overflow-y:auto;padding-bottom:50px}.nav-tabs.control-sidebar-tabs>li:first-of-type>a,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:hover,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:focus{border-left-width:0}.nav-tabs.control-sidebar-tabs>li>a,.nav-tabs.control-sidebar-tabs>li>a:hover{border-top:0;border-right:0;border-left:1px solid transparent;border-bottom:1px solid transparent}.nav-tabs.control-sidebar-tabs>li>a .icon{font-size:16px}.nav-tabs.control-sidebar-tabs>li.active>a,.nav-tabs.control-sidebar-tabs>li.active>a:hover,.nav-tabs.control-sidebar-tabs>li.active>a:focus,.nav-tabs.control-sidebar-tabs>li.active>a:active{border-top:0;border-right:0;border-bottom:0}@media(max-width:768px){.nav-tabs.control-sidebar-tabs{display:table}.nav-tabs.control-sidebar-tabs>li{display:table-cell}}.control-sidebar-heading{font-weight:400;font-size:16px;padding:10px 0;margin-bottom:10px}.control-sidebar-subheading{display:block;font-weight:400;font-size:14px}.control-sidebar-menu{list-style:none;padding:0;margin:0 -15px}.control-sidebar-menu>li>a{display:block;padding:10px 15px}.control-sidebar-menu>li>a:before,.control-sidebar-menu>li>a:after{content:" ";display:table}.control-sidebar-menu>li>a:after{clear:both}.control-sidebar-menu>li>a>.control-sidebar-subheading{margin-top:0}.control-sidebar-menu .menu-icon{float:left;width:35px;height:35px;border-radius:50%;text-align:center;line-height:35px}.control-sidebar-menu .menu-info{margin-left:45px;margin-top:3px}.control-sidebar-menu .menu-info>.control-sidebar-subheading{margin:0}.control-sidebar-menu .menu-info>p{margin:0;font-size:11px}.control-sidebar-menu .progress{margin:0}.control-sidebar-dark{color:#b8c7ce}.control-sidebar-dark,.control-sidebar-dark+.control-sidebar-bg{background:#222d32}.control-sidebar-dark .nav-tabs.control-sidebar-tabs{border-bottom:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a{background:#181f23;color:#b8c7ce}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#141a1d;border-bottom-color:#141a1d}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:active{background:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover{color:#fff}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#222d32;color:#fff}.control-sidebar-dark .control-sidebar-heading,.control-sidebar-dark .control-sidebar-subheading{color:#fff}.control-sidebar-dark .control-sidebar-menu>li>a:hover{background:#1e282c}.control-sidebar-dark .control-sidebar-menu>li>a .menu-info>p{color:#b8c7ce}.control-sidebar-light{color:#5e5e5e}.control-sidebar-light,.control-sidebar-light+.control-sidebar-bg{background:#f9fafc;border-left:1px solid #caced6}.control-sidebar-light .nav-tabs.control-sidebar-tabs{border-bottom:#caced6}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a{background:#e8ecf4;color:#444}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#caced6;border-bottom-color:#caced6}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:active{background:#eff1f7}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#f9fafc;color:#111}.control-sidebar-light .control-sidebar-heading,.control-sidebar-light .control-sidebar-subheading{color:#111}.control-sidebar-light .control-sidebar-menu{margin-left:-14px}.control-sidebar-light .control-sidebar-menu>li>a:hover{background:#f4f4f5}.control-sidebar-light .control-sidebar-menu>li>a .menu-info>p{color:#5e5e5e}.dropdown-menu{box-shadow:none;border-color:#eee}.dropdown-menu>li>a{color:#777}.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}.navbar-nav>.notifications-menu>.dropdown-menu,.navbar-nav>.messages-menu>.dropdown-menu,.navbar-nav>.tasks-menu>.dropdown-menu{width:280px;padding:0;margin:0;top:100%}.navbar-nav>.notifications-menu>.dropdown-menu>li,.navbar-nav>.messages-menu>.dropdown-menu>li,.navbar-nav>.tasks-menu>.dropdown-menu>li{position:relative}.navbar-nav>.notifications-menu>.dropdown-menu>li.header,.navbar-nav>.messages-menu>.dropdown-menu>li.header,.navbar-nav>.tasks-menu>.dropdown-menu>li.header{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:#fff;padding:7px 10px;border-bottom:1px solid #f4f4f4;color:#444;font-size:14px}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px;font-size:12px;background-color:#fff;padding:7px 10px;border-bottom:1px solid #eee;color:#444!important;text-align:center}@media(max-width:991px){.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{background:#fff!important;color:#444!important}}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a:hover{text-decoration:none;font-weight:normal}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu,.navbar-nav>.messages-menu>.dropdown-menu>li .menu,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu{max-height:200px;margin:0;padding:0;list-style:none;overflow-x:hidden}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{display:block;white-space:nowrap;border-bottom:1px solid #f4f4f4}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a:hover{background:#f4f4f4;text-decoration:none}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a{color:#444;overflow:hidden;text-overflow:ellipsis;padding:10px}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.glyphicon,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.fa,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.ion{width:20px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a{margin:0;padding:10px 10px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>div>img{margin:auto 10px auto auto;width:40px;height:40px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4{padding:0;margin:0 0 0 45px;color:#444;font-size:15px;position:relative}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4>small{color:#999;font-size:10px;position:absolute;top:0;right:0}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>p{margin:0 0 0 45px;font-size:12px;color:#888}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:before,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{content:" ";display:table}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{clear:both}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{padding:10px}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>h3{font-size:14px;padding:0;margin:0 0 10px 0;color:#666}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>.progress{padding:0;margin:0}.navbar-nav>.user-menu>.dropdown-menu{border-top-right-radius:0;border-top-left-radius:0;padding:1px 0 0 0;border-top-width:0;width:280px}.navbar-nav>.user-menu>.dropdown-menu,.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header{height:175px;padding:10px;text-align:center}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>img{z-index:5;height:90px;width:90px;border:3px solid;border-color:transparent;border-color:rgba(255,255,255,0.2)}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p{z-index:5;color:#fff;color:rgba(255,255,255,0.8);font-size:17px;margin-top:10px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small{display:block;font-size:12px}.navbar-nav>.user-menu>.dropdown-menu>.user-body{padding:15px;border-bottom:1px solid #f4f4f4;border-top:1px solid #ddd}.navbar-nav>.user-menu>.dropdown-menu>.user-body:before,.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-body a{color:#444!important}@media(max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-body a{background:#fff!important;color:#444!important}}.navbar-nav>.user-menu>.dropdown-menu>.user-footer{background-color:#f9f9f9;padding:10px}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:before,.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default{color:#666}@media(max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover{background-color:#f9f9f9}}.navbar-nav>.user-menu .user-image{float:left;width:25px;height:25px;border-radius:50%;margin-right:10px;margin-top:-2px}@media(max-width:767px){.navbar-nav>.user-menu .user-image{float:none;margin-right:0;margin-top:-8px;line-height:10px}}.open:not(.dropup)>.animated-dropdown-menu{backface-visibility:visible!important;-webkit-animation:flipInX .7s both;-o-animation:flipInX .7s both;animation:flipInX .7s both}@keyframes flipInX{0%{transform:perspective(400px) rotate3d(1,0,0,90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(1,0,0,-20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{transform:perspective(400px)}}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px)}}.navbar-custom-menu>.navbar-nav>li{position:relative}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:0;left:auto}@media(max-width:991px){.navbar-custom-menu>.navbar-nav{float:right}.navbar-custom-menu>.navbar-nav>li{position:static}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff}}.form-control{box-shadow:none;border-color:#caced6}.form-control:focus{border-color:#3c8dbc;box-shadow:none}.form-control::-moz-placeholder,.form-control:-ms-input-placeholder,.form-control::-webkit-input-placeholder{color:#bbb;opacity:1}.form-control:not(select){-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-group.has-success label{color:#00a65a}.form-group.has-success .form-control,.form-group.has-success .input-group-addon{border-color:#00a65a;box-shadow:none}.form-group.has-success .help-block{color:#00a65a}.form-group.has-warning label{color:#f39c12}.form-group.has-warning .form-control,.form-group.has-warning .input-group-addon{border-color:#f39c12;box-shadow:none}.form-group.has-warning .help-block{color:#f39c12}.form-group.has-error label{color:#dd4b39}.form-group.has-error .form-control,.form-group.has-error .input-group-addon{border-color:#dd4b39;box-shadow:none}.form-group.has-error .help-block{color:#dd4b39}.input-group .input-group-addon{border-color:#caced6;background-color:#fff}.icheck>label{padding-left:0}.form-control-feedback.fa{line-height:34px}.input-lg+.form-control-feedback.fa,.input-group-lg+.form-control-feedback.fa,.form-group-lg .form-control+.form-control-feedback.fa{line-height:46px}.input-sm+.form-control-feedback.fa,.input-group-sm+.form-control-feedback.fa,.form-group-sm .form-control+.form-control-feedback.fa{line-height:30px}.progress,.progress>.progress-bar{-webkit-box-shadow:none;box-shadow:none}.progress,.progress>.progress-bar,.progress .progress-bar,.progress>.progress-bar .progress-bar{border-radius:1px}.progress.sm,.progress-sm{height:10px}.progress.sm,.progress-sm,.progress.sm .progress-bar,.progress-sm .progress-bar{border-radius:1px}.progress.xs,.progress-xs{height:7px}.progress.xs,.progress-xs,.progress.xs .progress-bar,.progress-xs .progress-bar{border-radius:1px}.progress.xxs,.progress-xxs{height:3px}.progress.xxs,.progress-xxs,.progress.xxs .progress-bar,.progress-xxs .progress-bar{border-radius:1px}.progress.vertical{position:relative;width:30px;height:200px;display:inline-block;margin-right:10px}.progress.vertical>.progress-bar{width:100%;position:absolute;bottom:0}.progress.vertical.sm,.progress.vertical.progress-sm{width:20px}.progress.vertical.xs,.progress.vertical.progress-xs{width:10px}.progress.vertical.xxs,.progress.vertical.progress-xxs{width:3px}.progress-group .progress-text{font-weight:600}.progress-group .progress-number{float:right}.table tr>td .progress{margin:0}.progress-bar-light-blue,.progress-bar-primary{background-color:#3c8dbc}.progress-striped .progress-bar-light-blue,.progress-striped .progress-bar-primary{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-green,.progress-bar-success{background-color:#00a65a}.progress-striped .progress-bar-green,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-aqua,.progress-bar-info{background-color:#00c0ef}.progress-striped .progress-bar-aqua,.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-yellow,.progress-bar-warning{background-color:#f39c12}.progress-striped .progress-bar-yellow,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)} +.progress-bar-red,.progress-bar-danger{background-color:#dd4b39}.progress-striped .progress-bar-red,.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.small-box{border-radius:2px;position:relative;display:block;margin-bottom:20px;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.small-box>.inner{padding:10px}.small-box>.small-box-footer{position:relative;text-align:center;padding:3px 0;color:#fff;color:rgba(255,255,255,0.8);display:block;z-index:10;background:rgba(0,0,0,0.1);text-decoration:none}.small-box>.small-box-footer:hover{color:#fff;background:rgba(0,0,0,0.15)}.small-box h3{font-size:38px;font-weight:bold;margin:0 0 10px 0;white-space:nowrap;padding:0}.small-box p{font-size:15px}.small-box p>small{display:block;color:#f9f9f9;font-size:13px;margin-top:5px}.small-box h3,.small-box p{z-index:5}.small-box .icon{-webkit-transition:all .3s linear;-o-transition:all .3s linear;transition:all .3s linear;position:absolute;top:-10px;right:10px;z-index:0;font-size:90px;color:rgba(0,0,0,0.15)}.small-box:hover{text-decoration:none;color:#f9f9f9}.small-box:hover .icon{font-size:95px}@media(max-width:767px){.small-box{text-align:center}.small-box .icon{display:none}.small-box p{font-size:12px}}.box{position:relative;border-radius:3px;background:#fff;border-top:3px solid #caced6;margin-bottom:20px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.box.box-primary{border-top-color:#3c8dbc}.box.box-info{border-top-color:#00c0ef}.box.box-danger{border-top-color:#dd4b39}.box.box-warning{border-top-color:#f39c12}.box.box-success{border-top-color:#00a65a}.box.box-default{border-top-color:#caced6}.box.collapsed-box .box-body,.box.collapsed-box .box-footer{display:none}.box .nav-stacked>li{border-bottom:1px solid #f4f4f4;margin:0}.box .nav-stacked>li:last-of-type{border-bottom:0}.box.height-control .box-body{max-height:300px;overflow:auto}.box .border-right{border-right:1px solid #f4f4f4}.box .border-left{border-left:1px solid #f4f4f4}.box.box-solid{border-top:0}.box.box-solid>.box-header .btn.btn-default{background:transparent}.box.box-solid>.box-header .btn:hover,.box.box-solid>.box-header a:hover{background:rgba(0,0,0,0.1)}.box.box-solid.box-default{border:1px solid #caced6}.box.box-solid.box-default>.box-header{color:#444;background:#caced6;background-color:#caced6}.box.box-solid.box-default>.box-header a,.box.box-solid.box-default>.box-header .btn{color:#444}.box.box-solid.box-primary{border:1px solid #3c8dbc}.box.box-solid.box-primary>.box-header{color:#fff;background:#3c8dbc;background-color:#3c8dbc}.box.box-solid.box-primary>.box-header a,.box.box-solid.box-primary>.box-header .btn{color:#fff}.box.box-solid.box-info{border:1px solid #00c0ef}.box.box-solid.box-info>.box-header{color:#fff;background:#00c0ef;background-color:#00c0ef}.box.box-solid.box-info>.box-header a,.box.box-solid.box-info>.box-header .btn{color:#fff}.box.box-solid.box-danger{border:1px solid #dd4b39}.box.box-solid.box-danger>.box-header{color:#fff;background:#dd4b39;background-color:#dd4b39}.box.box-solid.box-danger>.box-header a,.box.box-solid.box-danger>.box-header .btn{color:#fff}.box.box-solid.box-warning{border:1px solid #f39c12}.box.box-solid.box-warning>.box-header{color:#fff;background:#f39c12;background-color:#f39c12}.box.box-solid.box-warning>.box-header a,.box.box-solid.box-warning>.box-header .btn{color:#fff}.box.box-solid.box-success{border:1px solid #00a65a}.box.box-solid.box-success>.box-header{color:#fff;background:#00a65a;background-color:#00a65a}.box.box-solid.box-success>.box-header a,.box.box-solid.box-success>.box-header .btn{color:#fff}.box.box-solid>.box-header>.box-tools .btn{border:0;box-shadow:none}.box.box-solid[class*='bg']>.box-header{color:#fff}.box .box-group>.box{margin-bottom:5px}.box .knob-label{text-align:center;color:#333;font-weight:100;font-size:12px;margin-bottom:.3em}.box>.overlay,.overlay-wrapper>.overlay,.box>.loading-img,.overlay-wrapper>.loading-img{position:absolute;top:0;left:0;width:100%;height:100%}.box .overlay,.overlay-wrapper .overlay{z-index:50;background:rgba(255,255,255,0.7);border-radius:3px}.box .overlay>.fa,.overlay-wrapper .overlay>.fa{position:absolute;top:50%;left:50%;margin-left:-15px;margin-top:-15px;color:#000;font-size:30px}.box .overlay.dark,.overlay-wrapper .overlay.dark{background:rgba(0,0,0,0.5)}.box-header:before,.box-body:before,.box-footer:before,.box-header:after,.box-body:after,.box-footer:after{content:" ";display:table}.box-header:after,.box-body:after,.box-footer:after{clear:both}.box-header{color:#444;display:block;padding:10px;position:relative}.box-header.with-border{border-bottom:1px solid #f4f4f4}.collapsed-box .box-header.with-border{border-bottom:0}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion,.box-header .box-title{display:inline-block;font-size:18px;margin:0;line-height:1}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion{margin-right:5px}.box-header>.box-tools{position:absolute;right:10px;top:5px}.box-header>.box-tools [data-toggle="tooltip"]{position:relative}.box-header>.box-tools.pull-right .dropdown-menu{right:0;left:auto}.box-header>.box-tools .dropdown-menu>li>a{color:#444!important}.btn-box-tool{padding:5px;font-size:12px;background:transparent;color:#97a0b3}.open .btn-box-tool,.btn-box-tool:hover{color:#606c84}.btn-box-tool.btn:active{box-shadow:none}.box-body{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;padding:10px}.no-header .box-body{border-top-right-radius:3px;border-top-left-radius:3px}.box-body>.table{margin-bottom:0}.box-body .fc{margin-top:5px}.box-body .full-width-chart{margin:-19px}.box-body.no-padding .full-width-chart{margin:-9px}.box-body .box-pane{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:3px}.box-body .box-pane-right{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:0}.box-footer{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-top:1px solid #f4f4f4;padding:10px;background-color:#fff}.chart-legend{margin:10px 0}@media(max-width:991px){.chart-legend>li{float:left;margin-right:10px}}.box-comments{background:#f7f7f7}.box-comments .box-comment{padding:8px 0;border-bottom:1px solid #eee}.box-comments .box-comment:before,.box-comments .box-comment:after{content:" ";display:table}.box-comments .box-comment:after{clear:both}.box-comments .box-comment:last-of-type{border-bottom:0}.box-comments .box-comment:first-of-type{padding-top:0}.box-comments .box-comment img{float:left}.box-comments .comment-text{margin-left:40px;color:#555}.box-comments .username{color:#444;display:block;font-weight:600}.box-comments .text-muted{font-weight:400;font-size:12px}.todo-list{margin:0;padding:0;list-style:none;overflow:auto}.todo-list>li{border-radius:2px;padding:10px;background:#f4f4f4;margin-bottom:2px;border-left:2px solid #e6e7e8;color:#444}.todo-list>li:last-of-type{margin-bottom:0}.todo-list>li>input[type='checkbox']{margin:0 10px 0 5px}.todo-list>li .text{display:inline-block;margin-left:5px;font-weight:600}.todo-list>li .label{margin-left:10px;font-size:9px}.todo-list>li .tools{display:none;float:right;color:#dd4b39}.todo-list>li .tools>.fa,.todo-list>li .tools>.glyphicon,.todo-list>li .tools>.ion{margin-right:5px;cursor:pointer}.todo-list>li:hover .tools{display:inline-block}.todo-list>li.done{color:#999}.todo-list>li.done .text{text-decoration:line-through;font-weight:500}.todo-list>li.done .label{background:#caced6!important}.todo-list .danger{border-left-color:#dd4b39}.todo-list .warning{border-left-color:#f39c12}.todo-list .info{border-left-color:#00c0ef}.todo-list .success{border-left-color:#00a65a}.todo-list .primary{border-left-color:#3c8dbc}.todo-list .handle{display:inline-block;cursor:move;margin:0 5px}.chat{padding:5px 20px 5px 10px}.chat .item{margin-bottom:10px}.chat .item:before,.chat .item:after{content:" ";display:table}.chat .item:after{clear:both}.chat .item>img{width:40px;height:40px;border:2px solid transparent;border-radius:50%}.chat .item>.online{border:2px solid #00a65a}.chat .item>.offline{border:2px solid #dd4b39}.chat .item>.message{margin-left:55px;margin-top:-40px}.chat .item>.message>.name{display:block;font-weight:600}.chat .item>.attachment{border-radius:3px;background:#f4f4f4;margin-left:65px;margin-right:15px;padding:10px}.chat .item>.attachment>h4{margin:0 0 5px 0;font-weight:600;font-size:14px}.chat .item>.attachment>p,.chat .item>.attachment>.filename{font-weight:600;font-size:13px;font-style:italic;margin:0}.chat .item>.attachment:before,.chat .item>.attachment:after{content:" ";display:table}.chat .item>.attachment:after{clear:both}.box-input{max-width:200px}.modal .panel-body{color:#444}.info-box{display:block;min-height:90px;background:#fff;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:2px;margin-bottom:15px}.info-box small{font-size:14px}.info-box .progress{background:rgba(0,0,0,0.2);margin:5px -10px 5px -10px;height:2px}.info-box .progress .progress-bar{background:#fff}.info-box-icon{border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px;display:block;float:left;height:90px;width:90px;text-align:center;font-size:45px;line-height:90px;background:rgba(0,0,0,0.2)}.info-box-icon>img{max-width:100%}.info-box-content{padding:5px 10px;margin-left:90px}.info-box-number{display:block;font-weight:bold;font-size:18px}.progress-description,.info-box-text{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.info-box-text{text-transform:uppercase}.info-box-more{display:block}.progress-description{margin:0}.timeline{position:relative;margin:0 0 30px 0;padding:0;list-style:none}.timeline:before{content:'';position:absolute;top:0;bottom:0;width:4px;background:#ddd;left:31px;margin:0;border-radius:2px}.timeline>li{position:relative;margin-right:10px;margin-bottom:15px}.timeline>li:before,.timeline>li:after{content:" ";display:table}.timeline>li:after{clear:both}.timeline>li>.timeline-item{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;margin-top:0;background:#fff;color:#444;margin-left:60px;margin-right:15px;padding:0;position:relative}.timeline>li>.timeline-item>.time{color:#999;float:right;padding:10px;font-size:12px}.timeline>li>.timeline-item>.timeline-header{margin:0;color:#555;border-bottom:1px solid #f4f4f4;padding:10px;font-size:16px;line-height:1.1}.timeline>li>.timeline-item>.timeline-header>a{font-weight:600}.timeline>li>.timeline-item>.timeline-body,.timeline>li>.timeline-item>.timeline-footer{padding:10px}.timeline>li>.fa,.timeline>li>.glyphicon,.timeline>li>.ion{width:30px;height:30px;font-size:15px;line-height:30px;position:absolute;color:#666;background:#caced6;border-radius:50%;text-align:center;left:18px;top:0}.timeline>.time-label>span{font-weight:600;padding:5px;display:inline-block;background-color:#fff;border-radius:4px}.timeline-inverse>li>.timeline-item{background:#f0f0f0;border:1px solid #ddd;-webkit-box-shadow:none;box-shadow:none}.timeline-inverse>li>.timeline-item>.timeline-header{border-bottom-color:#ddd}.btn{border-radius:4px;-webkit-box-shadow:none;box-shadow:none;border:1px solid transparent}.btn.uppercase{text-transform:uppercase}.btn.btn-flat{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border-width:1px}.btn:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:focus{outline:0}.btn.btn-file{position:relative;overflow:hidden}.btn.btn-file>input[type='file']{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;opacity:0;filter:alpha(opacity=0);outline:0;background:white;cursor:inherit;display:block}.btn-default{background-color:#f4f4f4;color:#444;border-color:#ddd}.btn-default:hover,.btn-default:active,.btn-default.hover{background-color:#e7e7e7}.btn-primary{background-color:#3c8dbc;border-color:#367fa9}.btn-primary:hover,.btn-primary:active,.btn-primary.hover{background-color:#367fa9}.btn-success{background-color:#00a65a;border-color:#008d4c}.btn-success:hover,.btn-success:active,.btn-success.hover{background-color:#008d4c}.btn-info{background-color:#00c0ef;border-color:#00acd6}.btn-info:hover,.btn-info:active,.btn-info.hover{background-color:#00acd6}.btn-danger{background-color:#dd4b39;border-color:#d73925}.btn-danger:hover,.btn-danger:active,.btn-danger.hover{background-color:#d73925}.btn-warning{background-color:#f39c12;border-color:#e08e0b}.btn-warning:hover,.btn-warning:active,.btn-warning.hover{background-color:#e08e0b}.btn-outline{border:1px solid #fff;background:transparent;color:#fff}.btn-outline:hover,.btn-outline:focus,.btn-outline:active{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)}.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn[class*='bg-']:hover{-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,0.2);box-shadow:inset 0 0 100px rgba(0,0,0,0.2)}.btn-app{border-radius:3px;position:relative;padding:15px 5px;margin:0 0 10px 10px;min-width:80px;height:60px;text-align:center;color:#666;border:1px solid #ddd;background-color:#f4f4f4;font-size:12px}.btn-app>.fa,.btn-app>.glyphicon,.btn-app>.ion{font-size:20px;display:block}.btn-app:hover{background:#f4f4f4;color:#444;border-color:#aaa}.btn-app:active,.btn-app:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-app>.badge{position:absolute;top:-3px;right:-10px;font-size:10px;font-weight:400}.callout{border-radius:3px;margin:0 0 20px 0;padding:15px 30px 15px 15px;border-left:5px solid #eee}.callout a{color:#fff;text-decoration:underline}.callout a:hover{color:#eee}.callout h4{margin-top:0;font-weight:600}.callout p:last-child{margin-bottom:0}.callout code,.callout .highlight{background-color:#fff}.callout.callout-danger{border-color:#c23321}.callout.callout-warning{border-color:#c87f0a}.callout.callout-info{border-color:#0097bc}.callout.callout-success{border-color:#00733e}.alert{border-radius:3px}.alert h4{font-weight:600}.alert .icon{margin-right:10px}.alert .close{color:#000;opacity:.2;filter:alpha(opacity=20)}.alert .close:hover{opacity:.5;filter:alpha(opacity=50)}.alert a{color:#fff;text-decoration:underline}.alert-success{border-color:#008d4c}.alert-danger,.alert-error{border-color:#d73925}.alert-warning{border-color:#e08e0b}.alert-info{border-color:#00acd6}.nav>li>a:hover,.nav>li>a:active,.nav>li>a:focus{color:#444;background:#f7f7f7}.nav-pills>li>a{border-top:3px solid transparent;color:#444}.nav-pills>li>a>.fa,.nav-pills>li>a>.glyphicon,.nav-pills>li>a>.ion{margin-right:5px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{border-top-color:#3c8dbc}.nav-pills>li.active>a{font-weight:600}.nav-stacked>li>a{border-top:0;border-left:3px solid transparent;color:#444}.nav-stacked>li.active>a,.nav-stacked>li.active>a:hover{background:transparent;color:#444;border-top:0;border-left-color:#3c8dbc}.nav-stacked>li.header{border-bottom:1px solid #ddd;color:#777;margin-bottom:10px;padding:5px 10px;text-transform:uppercase}.nav-tabs-custom{margin-bottom:20px;background:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px}.nav-tabs-custom>.nav-tabs{margin:0;border-bottom-color:#f4f4f4;border-top-right-radius:3px;border-top-left-radius:3px}.nav-tabs-custom>.nav-tabs>li{border-top:3px solid transparent;margin-bottom:-2px;margin-right:5px}.nav-tabs-custom>.nav-tabs>li.disabled>a{color:#777}.nav-tabs-custom>.nav-tabs>li>a{color:#444}.nav-tabs-custom>.nav-tabs>li>a.text-muted{color:#999}.nav-tabs-custom>.nav-tabs>li>a,.nav-tabs-custom>.nav-tabs>li>a:hover{background:transparent;margin:0}.nav-tabs-custom>.nav-tabs>li>a:hover{color:#999}.nav-tabs-custom>.nav-tabs>li:not(.active)>a:hover,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:focus,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:active{border-color:transparent}.nav-tabs-custom>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom>.nav-tabs>li.active>a,.nav-tabs-custom>.nav-tabs>li.active:hover>a{background-color:#fff;color:#444}.nav-tabs-custom>.nav-tabs>li.active>a{border-top-color:transparent;border-left-color:#f4f4f4;border-right-color:#f4f4f4}.nav-tabs-custom>.nav-tabs>li:first-of-type{margin-left:0}.nav-tabs-custom>.nav-tabs>li:first-of-type.active>a{border-left-color:transparent}.nav-tabs-custom>.nav-tabs.pull-right{float:none!important}.nav-tabs-custom>.nav-tabs.pull-right>li{float:right}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type{margin-right:0}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type>a{border-left-width:1px}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type.active>a{border-left-color:#f4f4f4;border-right-color:transparent}.nav-tabs-custom>.nav-tabs>li.header{line-height:35px;padding:0 10px;font-size:20px;color:#444}.nav-tabs-custom>.nav-tabs>li.header>.fa,.nav-tabs-custom>.nav-tabs>li.header>.glyphicon,.nav-tabs-custom>.nav-tabs>li.header>.ion{margin-right:5px}.nav-tabs-custom>.tab-content{background:#fff;padding:10px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.nav-tabs-custom .dropdown.open>a:active,.nav-tabs-custom .dropdown.open>a:focus{background:transparent;color:#999}.nav-tabs-custom.tab-primary>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom.tab-info>.nav-tabs>li.active{border-top-color:#00c0ef}.nav-tabs-custom.tab-danger>.nav-tabs>li.active{border-top-color:#dd4b39}.nav-tabs-custom.tab-warning>.nav-tabs>li.active{border-top-color:#f39c12}.nav-tabs-custom.tab-success>.nav-tabs>li.active{border-top-color:#00a65a}.nav-tabs-custom.tab-default>.nav-tabs>li.active{border-top-color:#caced6}.pagination>li>a{background:#fafafa;color:#666}.pagination.pagination-flat>li>a{border-radius:0!important}.products-list{list-style:none;margin:0;padding:0}.products-list>.item{border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);padding:10px 0;background:#fff}.products-list>.item:before,.products-list>.item:after{content:" ";display:table}.products-list>.item:after{clear:both}.products-list .product-img{float:left}.products-list .product-img img{width:50px;height:50px}.products-list .product-info{margin-left:60px}.products-list .product-title{font-weight:600}.products-list .product-description{display:block;color:#999;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.product-list-in-box>.item{-webkit-box-shadow:none;box-shadow:none;border-bottom:1px solid #f4f4f4}.product-list-in-box>.item:last-of-type{border-bottom-width:0}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{border-top:1px solid #f4f4f4}.table>thead>tr>th{border-bottom:2px solid #f4f4f4}.table tr td .progress{margin-top:5px}.table-bordered{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table.no-border,.table.no-border td,.table.no-border th{border:0}table.text-center,table.text-center td,table.text-center th{text-align:center}.table.align th{text-align:left}.table.align td{text-align:right}.label-default{background-color:#caced6;color:#444}.direct-chat .box-body{border-bottom-right-radius:0;border-bottom-left-radius:0;position:relative;overflow-x:hidden;padding:0}.direct-chat.chat-pane-open .direct-chat-contacts{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.direct-chat-messages{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0);padding:10px;height:250px;overflow:auto}.direct-chat-msg,.direct-chat-text{display:block}.direct-chat-msg{margin-bottom:10px}.direct-chat-msg:before,.direct-chat-msg:after{content:" ";display:table}.direct-chat-msg:after{clear:both}.direct-chat-messages,.direct-chat-contacts{-webkit-transition:-webkit-transform .5s ease-in-out;-moz-transition:-moz-transform .5s ease-in-out;-o-transition:-o-transform .5s ease-in-out;transition:transform .5s ease-in-out}.direct-chat-text{border-radius:5px;position:relative;padding:5px 10px;background:#caced6;border:1px solid #caced6;margin:5px 0 0 50px;color:#444}.direct-chat-text:after,.direct-chat-text:before{position:absolute;right:100%;top:15px;border:solid transparent;border-right-color:#caced6;content:' ';height:0;width:0;pointer-events:none}.direct-chat-text:after{border-width:5px;margin-top:-5px}.direct-chat-text:before{border-width:6px;margin-top:-6px}.right .direct-chat-text{margin-right:50px;margin-left:0}.right .direct-chat-text:after,.right .direct-chat-text:before{right:auto;left:100%;border-right-color:transparent;border-left-color:#caced6}.direct-chat-img{border-radius:50%;float:left;width:40px;height:40px}.right .direct-chat-img{float:right}.direct-chat-info{display:block;margin-bottom:2px;font-size:12px}.direct-chat-name{font-weight:600}.direct-chat-timestamp{color:#999}.direct-chat-contacts-open .direct-chat-contacts{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.direct-chat-contacts{-webkit-transform:translate(101%,0);-ms-transform:translate(101%,0);-o-transform:translate(101%,0);transform:translate(101%,0);position:absolute;top:0;bottom:0;height:250px;width:100%;background:#222d32;color:#fff;overflow:auto}.contacts-list>li{border-bottom:1px solid rgba(0,0,0,0.2);padding:10px;margin:0}.contacts-list>li:before,.contacts-list>li:after{content:" ";display:table}.contacts-list>li:after{clear:both}.contacts-list>li:last-of-type{border-bottom:0}.contacts-list-img{border-radius:50%;width:40px;float:left}.contacts-list-info{margin-left:45px;color:#fff}.contacts-list-name,.contacts-list-status{display:block}.contacts-list-name{font-weight:600}.contacts-list-status{font-size:12px}.contacts-list-date{color:#aaa;font-weight:normal}.contacts-list-msg{color:#999}.direct-chat-danger .right>.direct-chat-text{background:#dd4b39;border-color:#dd4b39;color:#fff}.direct-chat-danger .right>.direct-chat-text:after,.direct-chat-danger .right>.direct-chat-text:before{border-left-color:#dd4b39}.direct-chat-primary .right>.direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff}.direct-chat-primary .right>.direct-chat-text:after,.direct-chat-primary .right>.direct-chat-text:before{border-left-color:#3c8dbc}.direct-chat-warning .right>.direct-chat-text{background:#f39c12;border-color:#f39c12;color:#fff}.direct-chat-warning .right>.direct-chat-text:after,.direct-chat-warning .right>.direct-chat-text:before{border-left-color:#f39c12}.direct-chat-info .right>.direct-chat-text{background:#00c0ef;border-color:#00c0ef;color:#fff}.direct-chat-info .right>.direct-chat-text:after,.direct-chat-info .right>.direct-chat-text:before{border-left-color:#00c0ef}.direct-chat-success .right>.direct-chat-text{background:#00a65a;border-color:#00a65a;color:#fff}.direct-chat-success .right>.direct-chat-text:after,.direct-chat-success .right>.direct-chat-text:before{border-left-color:#00a65a}.users-list>li{width:25%;float:left;padding:10px;text-align:center}.users-list>li img{border-radius:50%;max-width:100%;height:auto}.users-list>li>a:hover,.users-list>li>a:hover .users-list-name{color:#999}.users-list-name,.users-list-date{display:block}.users-list-name{font-weight:600;color:#444;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.users-list-date{color:#999;font-size:12px}.carousel-control.left,.carousel-control.right{background-image:none}.carousel-control>.fa{font-size:40px;position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-20px}.modal{background:rgba(0,0,0,0.3)}.modal-content{-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125);border:0}@media(min-width:768px){.modal-content{-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125)}}.modal-header{border-bottom-color:#f4f4f4}.modal-footer{border-top-color:#f4f4f4}.modal-primary .modal-header,.modal-primary .modal-footer{border-color:#307095}.modal-warning .modal-header,.modal-warning .modal-footer{border-color:#c87f0a}.modal-info .modal-header,.modal-info .modal-footer{border-color:#0097bc}.modal-success .modal-header,.modal-success .modal-footer{border-color:#00733e}.modal-danger .modal-header,.modal-danger .modal-footer{border-color:#c23321}.box-widget{border:0;position:relative}.widget-user .widget-user-header{padding:20px;height:120px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user .widget-user-username{margin-top:0;margin-bottom:5px;font-size:25px;font-weight:300;text-shadow:0 1px 1px rgba(0,0,0,0.2)}.widget-user .widget-user-desc{margin-top:0}.widget-user .widget-user-image{position:absolute;top:65px;left:50%;margin-left:-45px}.widget-user .widget-user-image>img{width:90px;height:auto;border:3px solid #fff}.widget-user .box-footer{padding-top:30px}.widget-user-2 .widget-user-header{padding:20px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user-2 .widget-user-username{margin-top:5px;margin-bottom:5px;font-size:25px;font-weight:300}.widget-user-2 .widget-user-desc{margin-top:0}.widget-user-2 .widget-user-username,.widget-user-2 .widget-user-desc{margin-left:75px}.widget-user-2 .widget-user-image>img{width:65px;height:auto;float:left}.treeview-menu{display:none;list-style:none;padding:0;margin:0;padding-left:5px}.treeview-menu .treeview-menu{padding-left:20px}.treeview-menu>li{margin:0}.treeview-menu>li>a{padding:5px 5px 5px 15px;display:block;font-size:14px}.treeview-menu>li>a>.fa,.treeview-menu>li>a>.glyphicon,.treeview-menu>li>a>.ion{width:20px}.treeview-menu>li>a>.pull-right-container>.fa-angle-left,.treeview-menu>li>a>.pull-right-container>.fa-angle-down,.treeview-menu>li>a>.fa-angle-left,.treeview-menu>li>a>.fa-angle-down{width:auto}.mailbox-messages>.table{margin:0}.mailbox-controls{padding:5px}.mailbox-controls.with-border{border-bottom:1px solid #f4f4f4}.mailbox-read-info{border-bottom:1px solid #f4f4f4;padding:10px}.mailbox-read-info h3{font-size:20px;margin:0}.mailbox-read-info h5{margin:0;padding:5px 0 0 0}.mailbox-read-time{color:#999;font-size:13px}.mailbox-read-message{padding:10px}.mailbox-attachments li{float:left;width:200px;border:1px solid #eee;margin-bottom:10px;margin-right:10px}.mailbox-attachment-name{font-weight:bold;color:#666}.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block}.mailbox-attachment-info{padding:10px;background:#f4f4f4}.mailbox-attachment-size{color:#999;font-size:12px}.mailbox-attachment-icon{text-align:center;font-size:65px;color:#666;padding:20px 10px}.mailbox-attachment-icon.has-img{padding:0}.mailbox-attachment-icon.has-img>img{max-width:100%;height:auto}.lockscreen{background:#caced6}.lockscreen-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.lockscreen-logo a{color:#444}.lockscreen-wrapper{max-width:400px;margin:0 auto;margin-top:10%}.lockscreen .lockscreen-name{text-align:center;font-weight:600}.lockscreen-item{border-radius:4px;padding:0;background:#fff;position:relative;margin:10px auto 30px auto;width:290px}.lockscreen-image{border-radius:50%;position:absolute;left:-10px;top:-25px;background:#fff;padding:5px;z-index:10}.lockscreen-image>img{border-radius:50%;width:70px;height:70px}.lockscreen-credentials{margin-left:70px}.lockscreen-credentials .form-control{border:0}.lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px}.lockscreen-footer{margin-top:10px}.login-logo,.register-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.login-logo a,.register-logo a{color:#444}.login-page,.register-page{background:#caced6}.login-box,.register-box{width:360px;margin:7% auto}@media(max-width:768px){.login-box,.register-box{width:90%;margin-top:20px}}.login-box-body,.register-box-body{background:#fff;padding:20px;border-top:0;color:#666}.login-box-body .form-control-feedback,.register-box-body .form-control-feedback{color:#777}.login-box-msg,.register-box-msg{margin:0;text-align:center;padding:0 20px 20px 20px}.social-auth-links{margin:10px 0}.error-page{width:600px;margin:20px auto 0 auto}@media(max-width:991px){.error-page{width:100%}}.error-page>.headline{float:left;font-size:100px;font-weight:300}@media(max-width:991px){.error-page>.headline{float:none;text-align:center}}.error-page>.error-content{margin-left:190px;display:block}@media(max-width:991px){.error-page>.error-content{margin-left:0}}.error-page>.error-content>h3{font-weight:300;font-size:25px}@media(max-width:991px){.error-page>.error-content>h3{text-align:center}} +.invoice{position:relative;background:#fff;border:1px solid #f4f4f4;padding:20px;margin:10px 25px}.invoice-title{margin-top:0}.profile-user-img{margin:0 auto;width:100px;padding:3px;border:3px solid #caced6}.profile-username{font-size:21px;margin-top:5px}.post{border-bottom:1px solid #caced6;margin-bottom:15px;padding-bottom:15px;color:#666}.post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.post .user-block{margin-bottom:15px}.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon>:first-child{border:0;text-align:center;width:100%}.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0}.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0}.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0}.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none}.btn-adn .badge{color:#d87a68;background-color:#fff}.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none}.btn-bitbucket .badge{color:#205081;background-color:#fff}.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none}.btn-dropbox .badge{color:#1087dd;background-color:#fff}.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none}.btn-facebook .badge{color:#3b5998;background-color:#fff}.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none}.btn-flickr .badge{color:#ff0084;background-color:#fff}.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none}.btn-foursquare .badge{color:#f94877;background-color:#fff}.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none}.btn-github .badge{color:#444;background-color:#fff}.btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{background-image:none}.btn-google .badge{color:#dd4b39;background-color:#fff}.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none}.btn-instagram .badge{color:#3f729b;background-color:#fff}.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none}.btn-linkedin .badge{color:#007bb6;background-color:#fff}.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none}.btn-microsoft .badge{color:#2672ec;background-color:#fff}.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none}.btn-openid .badge{color:#f7931e;background-color:#fff}.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none}.btn-pinterest .badge{color:#cb2027;background-color:#fff}.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:hover{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none}.btn-reddit .badge{color:#eff7ff;background-color:#000}.btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none}.btn-soundcloud .badge{color:#f50;background-color:#fff}.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none}.btn-tumblr .badge{color:#2c4762;background-color:#fff}.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none}.btn-twitter .badge{color:#55acee;background-color:#fff}.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none}.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none}.btn-vk .badge{color:#587ea3;background-color:#fff}.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none}.btn-yahoo .badge{color:#720e9e;background-color:#fff}.fc-button{background:#f4f4f4;background-image:none;color:#444;border-color:#ddd;border-bottom-color:#ddd}.fc-button:hover,.fc-button:active,.fc-button.hover{background-color:#e9e9e9}.fc-header-title h2{font-size:15px;line-height:1.6em;color:#666;margin-left:10px}.fc-header-right{padding-right:10px}.fc-header-left{padding-left:10px}.fc-widget-header{background:#fafafa}.fc-grid{width:100%;border:0}.fc-widget-header:first-of-type,.fc-widget-content:first-of-type{border-left:0;border-right:0}.fc-widget-header:last-of-type,.fc-widget-content:last-of-type{border-right:0}.fc-toolbar{padding:10px;margin:0}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px}.fc-color-picker{list-style:none;margin:0;padding:0}.fc-color-picker>li{float:left;font-size:30px;margin-right:5px;line-height:30px}.fc-color-picker>li .fa{-webkit-transition:-webkit-transform linear .3s;-moz-transition:-moz-transform linear .3s;-o-transition:-o-transform linear .3s;transition:transform linear .3s}.fc-color-picker>li .fa:hover{-webkit-transform:rotate(30deg);-ms-transform:rotate(30deg);-o-transform:rotate(30deg);transform:rotate(30deg)}#add-new-event{-webkit-transition:all linear .3s;-o-transition:all linear .3s;transition:all linear .3s}.external-event{padding:5px 10px;font-weight:bold;margin-bottom:4px;box-shadow:0 1px 1px rgba(0,0,0,0.1);text-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;cursor:move}.external-event:hover{box-shadow:inset 0 0 90px rgba(0,0,0,0.2)}.select2-container--default.select2-container--focus,.select2-selection.select2-container--focus,.select2-container--default:focus,.select2-selection:focus,.select2-container--default:active,.select2-selection:active{outline:0}.select2-container--default .select2-selection--single,.select2-selection .select2-selection--single{border:1px solid #caced6;padding:6px 12px;height:34px}.select2-container--default.select2-container--open{border-color:#3c8dbc}.select2-dropdown{border:1px solid #caced6}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#3c8dbc;color:white}.select2-results__option{padding:6px 12px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{padding-left:0;padding-right:0;height:auto;margin-top:-4px}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:28px;right:3px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-dropdown .select2-search__field,.select2-search--inline .select2-search__field{border:1px solid #caced6}.select2-dropdown .select2-search__field:focus,.select2-search--inline .select2-search__field:focus{outline:0}.select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default .select2-search--dropdown .select2-search__field{border-color:#3c8dbc!important}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#444}.select2-container--default .select2-selection--multiple{border:1px solid #caced6}.select2-container--default .select2-selection--multiple:focus{border-color:#3c8dbc}.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#caced6}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;padding:1px 10px;color:#fff}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{margin-right:5px;color:rgba(255,255,255,0.7)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container .select2-selection--single .select2-selection__rendered{padding-right:10px}.box .datepicker-inline,.box .datepicker-inline .datepicker-days,.box .datepicker-inline>table,.box .datepicker-inline .datepicker-days>table{width:100%}.box .datepicker-inline td:hover,.box .datepicker-inline .datepicker-days td:hover,.box .datepicker-inline>table td:hover,.box .datepicker-inline .datepicker-days>table td:hover{background-color:rgba(255,255,255,0.3)}.box .datepicker-inline td.day.old,.box .datepicker-inline .datepicker-days td.day.old,.box .datepicker-inline>table td.day.old,.box .datepicker-inline .datepicker-days>table td.day.old,.box .datepicker-inline td.day.new,.box .datepicker-inline .datepicker-days td.day.new,.box .datepicker-inline>table td.day.new,.box .datepicker-inline .datepicker-days>table td.day.new{color:#777}.pad{padding:10px}.margin{margin:10px}.margin-bottom{margin-bottom:20px}.margin-bottom-none{margin-bottom:0}.margin-r-5{margin-right:5px}.inline{display:inline}.description-block{display:block;margin:10px 0;text-align:center}.description-block.margin-bottom{margin-bottom:25px}.description-block>.description-header{margin:0;padding:0;font-weight:600;font-size:16px}.description-block>.description-text{text-transform:uppercase}.bg-red,.bg-yellow,.bg-aqua,.bg-blue,.bg-light-blue,.bg-green,.bg-navy,.bg-teal,.bg-olive,.bg-lime,.bg-orange,.bg-fuchsia,.bg-purple,.bg-maroon,.bg-black,.bg-red-active,.bg-yellow-active,.bg-aqua-active,.bg-blue-active,.bg-light-blue-active,.bg-green-active,.bg-navy-active,.bg-teal-active,.bg-olive-active,.bg-lime-active,.bg-orange-active,.bg-fuchsia-active,.bg-purple-active,.bg-maroon-active,.bg-black-active,.callout.callout-danger,.callout.callout-warning,.callout.callout-info,.callout.callout-success,.alert-success,.alert-danger,.alert-error,.alert-warning,.alert-info,.label-danger,.label-info,.label-warning,.label-primary,.label-success,.modal-primary .modal-body,.modal-primary .modal-header,.modal-primary .modal-footer,.modal-warning .modal-body,.modal-warning .modal-header,.modal-warning .modal-footer,.modal-info .modal-body,.modal-info .modal-header,.modal-info .modal-footer,.modal-success .modal-body,.modal-success .modal-header,.modal-success .modal-footer,.modal-danger .modal-body,.modal-danger .modal-header,.modal-danger .modal-footer{color:#fff!important}.bg-gray{color:#000;background-color:#caced6!important}.bg-gray-light{background-color:#f7f7f7}.bg-black{background-color:#111!important}.bg-red,.callout.callout-danger,.alert-danger,.alert-error,.label-danger,.modal-danger .modal-body{background-color:#dd4b39!important}.bg-yellow,.callout.callout-warning,.alert-warning,.label-warning,.modal-warning .modal-body{background-color:#f39c12!important}.bg-aqua,.callout.callout-info,.alert-info,.label-info,.modal-info .modal-body{background-color:#00c0ef!important}.bg-blue{background-color:#0073b7!important}.bg-light-blue,.label-primary,.modal-primary .modal-body{background-color:#3c8dbc!important}.bg-green,.callout.callout-success,.alert-success,.label-success,.modal-success .modal-body{background-color:#00a65a!important}.bg-navy{background-color:#001f3f!important}.bg-teal{background-color:#39cccc!important}.bg-olive{background-color:#3d9970!important}.bg-lime{background-color:#01ff70!important}.bg-orange{background-color:#ff851b!important}.bg-fuchsia{background-color:#f012be!important}.bg-purple{background-color:#605ca8!important}.bg-maroon{background-color:#d81b60!important}.bg-gray-active{color:#000;background-color:#b5bbc8!important}.bg-black-active{background-color:#000!important}.bg-red-active,.modal-danger .modal-header,.modal-danger .modal-footer{background-color:#d33724!important}.bg-yellow-active,.modal-warning .modal-header,.modal-warning .modal-footer{background-color:#db8b0b!important}.bg-aqua-active,.modal-info .modal-header,.modal-info .modal-footer{background-color:#00a7d0!important}.bg-blue-active{background-color:#005384!important}.bg-light-blue-active,.modal-primary .modal-header,.modal-primary .modal-footer{background-color:#357ca5!important}.bg-green-active,.modal-success .modal-header,.modal-success .modal-footer{background-color:#008d4c!important}.bg-navy-active{background-color:#001a35!important}.bg-teal-active{background-color:#30bbbb!important}.bg-olive-active{background-color:#368763!important}.bg-lime-active{background-color:#00e765!important}.bg-orange-active{background-color:#ff7701!important}.bg-fuchsia-active{background-color:#db0ead!important}.bg-purple-active{background-color:#555299!important}.bg-maroon-active{background-color:#ca195a!important}[class^="bg-"].disabled{opacity:.65;filter:alpha(opacity=65)}.text-red{color:#dd4b39!important}.text-yellow{color:#f39c12!important}.text-aqua{color:#00c0ef!important}.text-blue{color:#0073b7!important}.text-black{color:#111!important}.text-light-blue{color:#3c8dbc!important}.text-green{color:#00a65a!important}.text-gray{color:#caced6!important}.text-navy{color:#001f3f!important}.text-teal{color:#39cccc!important}.text-olive{color:#3d9970!important}.text-lime{color:#01ff70!important}.text-orange{color:#ff851b!important}.text-fuchsia{color:#f012be!important}.text-purple{color:#605ca8!important}.text-maroon{color:#d81b60!important}.link-muted{color:#7a869d}.link-muted:hover,.link-muted:focus{color:#606c84}.link-black{color:#666}.link-black:hover,.link-black:focus{color:#999}.hide{display:none!important}.no-border{border:0!important}.no-padding{padding:0!important}.no-margin{margin:0!important}.no-shadow{box-shadow:none!important}.list-unstyled,.chart-legend,.contacts-list,.users-list,.mailbox-attachments{list-style:none;margin:0;padding:0}.list-group-unbordered>.list-group-item{border-left:0;border-right:0;padding-left:0;padding-right:0}.flat{border-radius:0!important}.text-bold,.text-bold.table td,.text-bold.table th{font-weight:700}.text-sm{font-size:12px}.jqstooltip{padding:5px!important;width:auto!important;height:auto!important}.bg-teal-gradient{background:#39cccc!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#39cccc),color-stop(1,#7adddd))!important;background:-ms-linear-gradient(bottom,#39cccc,#7adddd)!important;background:-moz-linear-gradient(center bottom,#39cccc 0,#7adddd 100%)!important;background:-o-linear-gradient(#7adddd,#39cccc)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd',endColorstr='#39cccc',GradientType=0)!important;color:#fff}.bg-light-blue-gradient{background:#3c8dbc!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#3c8dbc),color-stop(1,#67a8ce))!important;background:-ms-linear-gradient(bottom,#3c8dbc,#67a8ce)!important;background:-moz-linear-gradient(center bottom,#3c8dbc 0,#67a8ce 100%)!important;background:-o-linear-gradient(#67a8ce,#3c8dbc)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce',endColorstr='#3c8dbc',GradientType=0)!important;color:#fff}.bg-blue-gradient{background:#0073b7!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#0073b7),color-stop(1,#0089db))!important;background:-ms-linear-gradient(bottom,#0073b7,#0089db)!important;background:-moz-linear-gradient(center bottom,#0073b7 0,#0089db 100%)!important;background:-o-linear-gradient(#0089db,#0073b7)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db',endColorstr='#0073b7',GradientType=0)!important;color:#fff}.bg-aqua-gradient{background:#00c0ef!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#00c0ef),color-stop(1,#14d1ff))!important;background:-ms-linear-gradient(bottom,#00c0ef,#14d1ff)!important;background:-moz-linear-gradient(center bottom,#00c0ef 0,#14d1ff 100%)!important;background:-o-linear-gradient(#14d1ff,#00c0ef)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff',endColorstr='#00c0ef',GradientType=0)!important;color:#fff}.bg-yellow-gradient{background:#f39c12!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#f39c12),color-stop(1,#f7bc60))!important;background:-ms-linear-gradient(bottom,#f39c12,#f7bc60)!important;background:-moz-linear-gradient(center bottom,#f39c12 0,#f7bc60 100%)!important;background:-o-linear-gradient(#f7bc60,#f39c12)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60',endColorstr='#f39c12',GradientType=0)!important;color:#fff}.bg-purple-gradient{background:#605ca8!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#605ca8),color-stop(1,#9491c4))!important;background:-ms-linear-gradient(bottom,#605ca8,#9491c4)!important;background:-moz-linear-gradient(center bottom,#605ca8 0,#9491c4 100%)!important;background:-o-linear-gradient(#9491c4,#605ca8)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4',endColorstr='#605ca8',GradientType=0)!important;color:#fff}.bg-green-gradient{background:#00a65a!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#00a65a),color-stop(1,#00ca6d))!important;background:-ms-linear-gradient(bottom,#00a65a,#00ca6d)!important;background:-moz-linear-gradient(center bottom,#00a65a 0,#00ca6d 100%)!important;background:-o-linear-gradient(#00ca6d,#00a65a)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d',endColorstr='#00a65a',GradientType=0)!important;color:#fff}.bg-red-gradient{background:#dd4b39!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#dd4b39),color-stop(1,#e47365))!important;background:-ms-linear-gradient(bottom,#dd4b39,#e47365)!important;background:-moz-linear-gradient(center bottom,#dd4b39 0,#e47365 100%)!important;background:-o-linear-gradient(#e47365,#dd4b39)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365',endColorstr='#dd4b39',GradientType=0)!important;color:#fff}.bg-black-gradient{background:#111!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#111),color-stop(1,#2b2b2b))!important;background:-ms-linear-gradient(bottom,#111,#2b2b2b)!important;background:-moz-linear-gradient(center bottom,#111 0,#2b2b2b 100%)!important;background:-o-linear-gradient(#2b2b2b,#111)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b',endColorstr='#111111',GradientType=0)!important;color:#fff}.bg-maroon-gradient{background:#d81b60!important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#d81b60),color-stop(1,#e73f7c))!important;background:-ms-linear-gradient(bottom,#d81b60,#e73f7c)!important;background:-moz-linear-gradient(center bottom,#d81b60 0,#e73f7c 100%)!important;background:-o-linear-gradient(#e73f7c,#d81b60)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c',endColorstr='#d81b60',GradientType=0)!important;color:#fff}.description-block .description-icon{font-size:16px}.no-pad-top{padding-top:0}.position-static{position:static!important}.list-header{font-size:15px;padding:10px 4px;font-weight:bold;color:#666}.list-seperator{height:1px;background:#f4f4f4;margin:15px 0 9px 0}.list-link>a{padding:4px;color:#777}.list-link>a:hover{color:#222}.font-light{font-weight:300}.user-block:before,.user-block:after{content:" ";display:table}.user-block:after{clear:both}.user-block img{width:40px;height:40px;float:left}.user-block .username,.user-block .description,.user-block .comment{display:block;margin-left:50px}.user-block .username{font-size:16px;font-weight:600}.user-block .description{color:#999;font-size:13px}.user-block.user-block-sm .username,.user-block.user-block-sm .description,.user-block.user-block-sm .comment{margin-left:40px}.user-block.user-block-sm .username{font-size:14px}.img-sm,.img-md,.img-lg,.box-comments .box-comment img,.user-block.user-block-sm img{float:left}.img-sm,.box-comments .box-comment img,.user-block.user-block-sm img{width:30px!important;height:30px!important}.img-sm+.img-push{margin-left:40px}.img-md{width:60px;height:60px}.img-md+.img-push{margin-left:70px}.img-lg{width:100px;height:100px}.img-lg+.img-push{margin-left:110px} +.img-bordered{border:3px solid #caced6;padding:3px}.img-bordered-sm{border:2px solid #caced6;padding:2px}.attachment-block{border:1px solid #f4f4f4;padding:5px;margin-bottom:10px;background:#f7f7f7}.attachment-block .attachment-img{max-width:100px;max-height:100px;height:auto;float:left}.attachment-block .attachment-pushed{margin-left:110px}.attachment-block .attachment-heading{margin:0}.attachment-block .attachment-text{color:#555}.connectedSortable{min-height:100px}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sort-highlight{background:#f4f4f4;border:1px dashed #ddd;margin-bottom:10px}.full-opacity-hover{opacity:.65;filter:alpha(opacity=65)}.full-opacity-hover:hover{opacity:1;filter:alpha(opacity=100)}.chart{position:relative;overflow:hidden;width:100%}.chart svg,.chart canvas{width:100%!important}@media print{.no-print,.main-sidebar,.left-side,.main-header,.content-header{display:none!important}.content-wrapper,.right-side,.main-footer{margin-left:0!important;min-height:0!important;-webkit-transform:translate(0,0)!important;-ms-transform:translate(0,0)!important;-o-transform:translate(0,0)!important;transform:translate(0,0)!important}.fixed .content-wrapper,.fixed .right-side{padding-top:0!important}.invoice{width:100%;border:0;margin:0;padding:0}.invoice-col{float:left;width:33.3333333%}.table-responsive{overflow:auto}.table-responsive>.table tr th,.table-responsive>.table tr td{white-space:normal!important}} \ No newline at end of file diff --git a/common/src/main/resources/static/icheck/1.0/minimal/grey.png b/common/src/main/resources/static/icheck/1.0/minimal/grey.png index bb1a0fe7d6d821d404268f4c3a4b150f2d659100..dc8e6833692d6795a7d05d013c77fa8f9b54f265 100644 GIT binary patch literal 2271 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 delta 1353 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 literal 51916 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 From 8827d04222f7a2f47696e8e711921d1f1438af4a Mon Sep 17 00:00:00 2001 From: thinkgem Date: Mon, 18 Mar 2019 22:45:56 +0800 Subject: [PATCH 16/23] =?UTF-8?q?jqgrid=E6=96=B0=E5=A2=9E=E2=80=9C?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E7=AC=A6=E5=90=88=E6=95=B0=E6=8D=AE=E2=80=9D?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/main/resources/views/modules/test/testDataList.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/web/src/main/resources/views/modules/test/testDataList.html b/web/src/main/resources/views/modules/test/testDataList.html index d958dcb0..ed094cf8 100644 --- a/web/src/main/resources/views/modules/test/testDataList.html +++ b/web/src/main/resources/views/modules/test/testDataList.html @@ -166,8 +166,10 @@ $('#dataGrid').dataGrid({ }} ], // 加载成功后执行事件 - ajaxSuccess: function(data){ - + ajaxSuccess: function(data){ +// if (data.count == 0){ +// $("#dataGrid").parent().append("
    没有符合数据
    "); +// } } }); \ No newline at end of file From c50d07b9491983971fc81e322945841c604a4585 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Mon, 18 Mar 2019 22:52:12 +0800 Subject: [PATCH 17/23] =?UTF-8?q?EmpUserService=E6=B7=BB=E5=8A=A0=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E7=94=A8=E6=88=B7=E6=9C=80=E5=9F=BA=E6=9C=AC=E7=9A=84?= =?UTF-8?q?=E4=BF=A1=E6=81=AFAPI=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeesite/modules/sys/dao/EmpUserDao.java | 22 ++++++ .../jeesite/modules/sys/entity/EmpUser.java | 12 ++- .../modules/sys/service/EmpUserService.java | 22 ++++++ .../support/EmpUserServiceSupport.java | 28 +++++++ .../mappings/modules/sys/EmpUserDao.xml | 77 +++++++++++++++++++ .../views/modules/sys/user/empUserIndex.html | 1 + 6 files changed, 161 insertions(+), 1 deletion(-) diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/dao/EmpUserDao.java b/modules/core/src/main/java/com/jeesite/modules/sys/dao/EmpUserDao.java index b320d9f3..d26eac69 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/dao/EmpUserDao.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/dao/EmpUserDao.java @@ -3,6 +3,8 @@ */ package com.jeesite.modules.sys.dao; +import java.util.List; + import com.jeesite.common.dao.CrudDao; import com.jeesite.common.datasource.DataSourceHolder; import com.jeesite.common.mybatis.annotation.MyBatisDao; @@ -16,4 +18,24 @@ import com.jeesite.modules.sys.entity.EmpUser; @MyBatisDao(dataSourceName=DataSourceHolder.DEFAULT) public interface EmpUserDao extends CrudDao { + /** + * 查询全部用户,仅返回基本信息 + */ + public List findUserList(EmpUser empUser); + + /** + * 根据部门编码查询用户,仅返回基本信息 + */ + public List findUserListByOfficeCodes(EmpUser empUser); + + /** + * 根据角色编码查询用户,仅返回基本信息 + */ + public List findUserListByRoleCodes(EmpUser empUser); + + /** + * 根据岗位编码查询用户,仅返回基本信息 + */ + public List findUserListByPostCodes(EmpUser empUser); + } \ No newline at end of file diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/entity/EmpUser.java b/modules/core/src/main/java/com/jeesite/modules/sys/entity/EmpUser.java index 22fbf587..6e576c52 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/entity/EmpUser.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/entity/EmpUser.java @@ -68,7 +68,9 @@ import com.jeesite.common.utils.excel.fieldtype.OfficeType; public class EmpUser extends User { private static final long serialVersionUID = 1L; - + + private String[] codes; // 查询用 + public EmpUser() { this(null); } @@ -103,5 +105,13 @@ public class EmpUser extends User { public void setEmployee(Employee employee){ super.setRefObj(employee); } + + public String[] getCodes() { + return codes; + } + + public void setCodes(String[] codes) { + this.codes = codes; + } } \ No newline at end of file diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/service/EmpUserService.java b/modules/core/src/main/java/com/jeesite/modules/sys/service/EmpUserService.java index a89e9121..4114d7ed 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/service/EmpUserService.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/service/EmpUserService.java @@ -3,6 +3,8 @@ */ package com.jeesite.modules.sys.service; +import java.util.List; + import org.springframework.web.multipart.MultipartFile; import com.jeesite.common.entity.Page; @@ -35,6 +37,26 @@ public interface EmpUserService extends CrudServiceApi { */ @Override public Page findPage(EmpUser empUser); + + /** + * 查询全部用户,仅返回基本信息 + */ + public List findUserList(EmpUser empUser); + + /** + * 根据部门编码查询用户,仅返回基本信息 + */ + public List findUserListByOfficeCodes(EmpUser empUser); + + /** + * 根据角色编码查询用户,仅返回基本信息 + */ + public List findUserListByRoleCodes(EmpUser empUser); + + /** + * 根据岗位编码查询用户,仅返回基本信息 + */ + public List findUserListByPostCodes(EmpUser empUser); /** * 保存用户员工 diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/service/support/EmpUserServiceSupport.java b/modules/core/src/main/java/com/jeesite/modules/sys/service/support/EmpUserServiceSupport.java index 8f0a0ef5..0e0198fc 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/service/support/EmpUserServiceSupport.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/service/support/EmpUserServiceSupport.java @@ -74,6 +74,34 @@ public class EmpUserServiceSupport extends CrudService return super.findPage(empUser); } + /** + * 查询全部用户,仅返回基本信息 + */ + public List findUserList(EmpUser empUser){ + return dao.findUserList(empUser); + } + + /** + * 根据部门编码查询用户,仅返回基本信息 + */ + public List findUserListByOfficeCodes(EmpUser empUser){ + return dao.findUserListByOfficeCodes(empUser); + } + + /** + * 根据角色编码查询用户,仅返回基本信息 + */ + public List findUserListByRoleCodes(EmpUser empUser){ + return dao.findUserListByRoleCodes(empUser); + } + + /** + * 根据岗位编码查询用户,仅返回基本信息 + */ + public List findUserListByPostCodes(EmpUser empUser){ + return dao.findUserListByPostCodes(empUser); + } + /** * 保存用户员工 */ diff --git a/modules/core/src/main/resources/mappings/modules/sys/EmpUserDao.xml b/modules/core/src/main/resources/mappings/modules/sys/EmpUserDao.xml index f9d499b7..78990e14 100644 --- a/modules/core/src/main/resources/mappings/modules/sys/EmpUserDao.xml +++ b/modules/core/src/main/resources/mappings/modules/sys/EmpUserDao.xml @@ -24,4 +24,81 @@ ORDER BY ${sqlMap.order.toSql()} + + a.user_code as "userCode", + a.user_name as "userName" + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/core/src/main/resources/views/modules/sys/user/empUserIndex.html b/modules/core/src/main/resources/views/modules/sys/user/empUserIndex.html index 3c469ba6..dc75620f 100644 --- a/modules/core/src/main/resources/views/modules/sys/user/empUserIndex.html +++ b/modules/core/src/main/resources/views/modules/sys/user/empUserIndex.html @@ -29,6 +29,7 @@ \ No newline at end of file diff --git a/modules/core/src/main/resources/views/modules/msg/msgInnerList.html b/modules/core/src/main/resources/views/modules/msg/msgInnerList.html new file mode 100644 index 00000000..b7dc2a1f --- /dev/null +++ b/modules/core/src/main/resources/views/modules/msg/msgInnerList.html @@ -0,0 +1,107 @@ +<% layout('/layouts/default.html', {title: '站内消息', libs: ['dataGrid']}){ %> +
    +
    +
    +
    + ${text('站内消息')} +
    +
    + ${text('查询')} + <% if(hasPermi('msg:msgInner:edit')){ %> + ${text('新增')} + <% } %> +
    +
    +
    + <#form:form id="searchForm" model="${msgInner}" action="${ctx}/msg/msgInner/listData" method="post" class="form-inline hide" + data-page-no="${parameter.pageNo}" data-page-size="${parameter.pageSize}" data-order-by="${parameter.orderBy}"> +
    + +
    + <#form:input path="msgTitle" maxlength="200" class="form-control width-120"/> +
    +
    +
    + +
    + <#form:select path="contentLevel" dictType="msg_inner_content_level" blankOption="true" class="form-control"/> +
    +
    +
    + +
    + <#form:select path="contentType" dictType="msg_inner_content_type" blankOption="true" class="form-control"/> +
    +
    +
    + +
    + <#form:input path="sendDate_gte" readonly="true" maxlength="20" class="form-control Wdate-date" + dataFormat="date" onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false,onpicked:function(){sendDate_lte.click()}});"/> +  --  + <#form:input path="sendDate_lte" readonly="true" maxlength="20" class="form-control Wdate-date" + dataFormat="date" onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/> +
    +
    +
    + +
    + <#form:select path="status" dictType="msg_inner_msg_status" blankOption="true" class="form-control"/> +
    +
    +
    + + +
    + +
    +
    +
    +
    +
    +<% } %> + \ No newline at end of file diff --git a/modules/core/src/main/resources/views/modules/msg/msgInnerView.html b/modules/core/src/main/resources/views/modules/msg/msgInnerView.html new file mode 100644 index 00000000..96573a0a --- /dev/null +++ b/modules/core/src/main/resources/views/modules/msg/msgInnerView.html @@ -0,0 +1,50 @@ +<%/* Copyright (c) 2013-Now http://jeesite.com All rights reserved. */ %> +<% layout('/layouts/default.html', {title: '查看消息', libs: ['validate','fileupload']}){ %> +
    +
    +
    +
    + ${text('查看消息')} +
    +
    + +
    +
    +
    +

    ${msgInner.msgTitle}

    +
    + + ${msgInner.msgContent} + <% if(msgInner.isAttac == @Global.YES){ %> +
    + <#form:fileupload id="uploadFile" bizKey="${msgInner.id}" bizType="msgInner_file" + uploadType="all" class="" readonly="true" preview="weboffice"/> +
    + <% } %> +
    + + <% if (readList! != null && readList.~size > 0){ %> + <% } %> + <% if (unReadList! != null && unReadList.~size > 0){ %> + <% } %> +
    + +
    +
    +<% } %> \ No newline at end of file diff --git a/web/db/db2/core.sql b/web/db/db2/core.sql new file mode 100644 index 00000000..0a9c0737 --- /dev/null +++ b/web/db/db2/core.sql @@ -0,0 +1,920 @@ + +/* Drop Tables */ + +DROP TABLE js_gen_table_column; +DROP TABLE js_gen_table; +DROP TABLE js_sys_company_office; +DROP TABLE js_sys_employee_post; +DROP TABLE js_sys_user_data_scope; +DROP TABLE js_sys_user_role; +DROP TABLE js_sys_user; +DROP TABLE js_sys_employee; +DROP TABLE js_sys_company; +DROP TABLE js_sys_area; +DROP TABLE js_sys_config; +DROP TABLE js_sys_dict_data; +DROP TABLE js_sys_dict_type; +DROP TABLE js_sys_file_upload; +DROP TABLE js_sys_file_entity; +DROP TABLE js_sys_job_log; +DROP TABLE js_sys_job; +DROP TABLE js_sys_lang; +DROP TABLE js_sys_log; +DROP TABLE js_sys_role_menu; +DROP TABLE js_sys_menu; +DROP TABLE js_sys_module; +DROP TABLE js_sys_msg_inner_record; +DROP TABLE js_sys_msg_inner; +DROP TABLE js_sys_msg_push; +DROP TABLE js_sys_msg_pushed; +DROP TABLE js_sys_msg_template; +DROP TABLE js_sys_office; +DROP TABLE js_sys_post; +DROP TABLE js_sys_role_data_scope; +DROP TABLE js_sys_role; + + + + +/* Create Tables */ + +-- 代码生成表 +CREATE TABLE js_gen_table +( + table_name varchar(64) NOT NULL, + class_name varchar(100) NOT NULL, + comments vargraphic(500) NOT NULL, + parent_table_name varchar(64), + parent_table_fk_name varchar(64), + data_source_name varchar(64), + tpl_category varchar(200), + package_name varchar(500), + module_name varchar(30), + sub_module_name varchar(30), + function_name vargraphic(200), + function_name_simple vargraphic(50), + function_author vargraphic(50), + gen_base_dir vargraphic(1000), + options vargraphic(1000), + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (table_name) +); + + +-- 代码生成表列 +CREATE TABLE js_gen_table_column +( + id varchar(64) NOT NULL, + table_name varchar(64) NOT NULL, + column_name varchar(64) NOT NULL, + column_sort decimal(10), + column_type varchar(100) NOT NULL, + column_label vargraphic(50), + comments vargraphic(500) NOT NULL, + attr_name varchar(200) NOT NULL, + attr_type varchar(200) NOT NULL, + is_pk char(1), + is_null char(1), + is_insert char(1), + is_update char(1), + is_list char(1), + is_query char(1), + query_type varchar(200), + is_edit char(1), + show_type varchar(200), + options vargraphic(1000), + PRIMARY KEY (id) +); + + +-- 行政区划 +CREATE TABLE js_sys_area +( + area_code varchar(100) NOT NULL, + parent_code varchar(64) NOT NULL, + parent_codes varchar(1000) NOT NULL, + tree_sort decimal(10) NOT NULL, + tree_sorts varchar(1000) NOT NULL, + tree_leaf char(1) NOT NULL, + tree_level decimal(4) NOT NULL, + tree_names varchar(1000) NOT NULL, + area_name vargraphic(100) NOT NULL, + area_type char(1), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (area_code) +); + + +-- 公司表 +CREATE TABLE js_sys_company +( + company_code varchar(64) NOT NULL, + parent_code varchar(64) NOT NULL, + parent_codes varchar(1000) NOT NULL, + tree_sort decimal(10) NOT NULL, + tree_sorts varchar(1000) NOT NULL, + tree_leaf char(1) NOT NULL, + tree_level decimal(4) NOT NULL, + tree_names varchar(1000) NOT NULL, + view_code varchar(100) NOT NULL, + company_name vargraphic(200) NOT NULL, + full_name vargraphic(200) NOT NULL, + area_code varchar(100), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + extend_s1 vargraphic(500), + extend_s2 vargraphic(500), + extend_s3 vargraphic(500), + extend_s4 vargraphic(500), + extend_s5 vargraphic(500), + extend_s6 vargraphic(500), + extend_s7 vargraphic(500), + extend_s8 vargraphic(500), + extend_i1 decimal(19), + extend_i2 decimal(19), + extend_i3 decimal(19), + extend_i4 decimal(19), + extend_f1 decimal(19,4), + extend_f2 decimal(19,4), + extend_f3 decimal(19,4), + extend_f4 decimal(19,4), + extend_d1 timestamp, + extend_d2 timestamp, + extend_d3 timestamp, + extend_d4 timestamp, + PRIMARY KEY (company_code) +); + + +-- 公司部门关联表 +CREATE TABLE js_sys_company_office +( + company_code varchar(64) NOT NULL, + office_code varchar(64) NOT NULL, + PRIMARY KEY (company_code, office_code) +); + + +-- 参数配置表 +CREATE TABLE js_sys_config +( + id varchar(64) NOT NULL, + config_name vargraphic(100) NOT NULL, + config_key varchar(100) NOT NULL, + config_value vargraphic(1000), + is_sys char(1) NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (id) +); + + +-- 字典数据表 +CREATE TABLE js_sys_dict_data +( + dict_code varchar(64) NOT NULL, + parent_code varchar(64) NOT NULL, + parent_codes varchar(1000) NOT NULL, + tree_sort decimal(10) NOT NULL, + tree_sorts varchar(1000) NOT NULL, + tree_leaf char(1) NOT NULL, + tree_level decimal(4) NOT NULL, + tree_names varchar(1000) NOT NULL, + dict_label vargraphic(100) NOT NULL, + dict_value varchar(100) NOT NULL, + dict_type varchar(100) NOT NULL, + is_sys char(1) NOT NULL, + description vargraphic(500), + css_style vargraphic(500), + css_class vargraphic(500), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + extend_s1 vargraphic(500), + extend_s2 vargraphic(500), + extend_s3 vargraphic(500), + extend_s4 vargraphic(500), + extend_s5 vargraphic(500), + extend_s6 vargraphic(500), + extend_s7 vargraphic(500), + extend_s8 vargraphic(500), + extend_i1 decimal(19), + extend_i2 decimal(19), + extend_i3 decimal(19), + extend_i4 decimal(19), + extend_f1 decimal(19,4), + extend_f2 decimal(19,4), + extend_f3 decimal(19,4), + extend_f4 decimal(19,4), + extend_d1 timestamp, + extend_d2 timestamp, + extend_d3 timestamp, + extend_d4 timestamp, + PRIMARY KEY (dict_code) +); + + +-- 字典类型表 +CREATE TABLE js_sys_dict_type +( + id varchar(64) NOT NULL, + dict_name vargraphic(100) NOT NULL, + dict_type varchar(100) NOT NULL, + is_sys char(1) NOT NULL, + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (id) +); + + +-- 员工表 +CREATE TABLE js_sys_employee +( + emp_code varchar(64) NOT NULL, + emp_name vargraphic(100) NOT NULL, + emp_name_en varchar(100), + office_code varchar(64) NOT NULL, + office_name vargraphic(100) NOT NULL, + company_code varchar(64), + company_name vargraphic(200), + status char(1) NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + PRIMARY KEY (emp_code) +); + + +-- 员工与岗位关联表 +CREATE TABLE js_sys_employee_post +( + emp_code varchar(64) NOT NULL, + post_code varchar(64) NOT NULL, + PRIMARY KEY (emp_code, post_code) +); + + +-- 文件实体表 +CREATE TABLE js_sys_file_entity +( + file_id varchar(64) NOT NULL, + file_md5 varchar(64) NOT NULL, + file_path vargraphic(1000) NOT NULL, + file_content_type varchar(200) NOT NULL, + file_extension varchar(100) NOT NULL, + file_size decimal(31) NOT NULL, + file_meta varchar(255), + PRIMARY KEY (file_id) +); + + +-- 文件上传表 +CREATE TABLE js_sys_file_upload +( + id varchar(64) NOT NULL, + file_id varchar(64) NOT NULL, + file_name vargraphic(500) NOT NULL, + file_type varchar(20) NOT NULL, + biz_key varchar(64), + biz_type varchar(64), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (id) +); + + +-- 作业调度表 +CREATE TABLE js_sys_job +( + job_name varchar(64) NOT NULL, + job_group varchar(64) NOT NULL, + description vargraphic(100) NOT NULL, + invoke_target vargraphic(1000) NOT NULL, + cron_expression varchar(255) NOT NULL, + misfire_instruction decimal(1) NOT NULL, + concurrent char(1) NOT NULL, + instance_name varchar(64) DEFAULT 'JeeSiteScheduler' NOT NULL, + status char(1) NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (job_name, job_group) +); + + +-- 作业调度日志表 +CREATE TABLE js_sys_job_log +( + id varchar(64) NOT NULL, + job_name varchar(64) NOT NULL, + job_group varchar(64) NOT NULL, + job_type varchar(50), + job_event varchar(200), + job_message varchar(500), + is_exception char(1), + exception_info clob, + create_date timestamp, + PRIMARY KEY (id) +); + + +-- 国际化语言 +CREATE TABLE js_sys_lang +( + id varchar(64) NOT NULL, + module_code varchar(64) NOT NULL, + lang_code vargraphic(500) NOT NULL, + lang_text vargraphic(500) NOT NULL, + lang_type varchar(50) NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (id) +); + + +-- 操作日志表 +CREATE TABLE js_sys_log +( + id varchar(64) NOT NULL, + log_type varchar(50) NOT NULL, + log_title vargraphic(500) NOT NULL, + create_by varchar(64) NOT NULL, + create_by_name vargraphic(100) NOT NULL, + create_date timestamp NOT NULL, + request_uri vargraphic(500), + request_method varchar(10), + request_params clob, + diff_modify_data clob, + biz_key varchar(64), + biz_type varchar(64), + remote_addr varchar(255) NOT NULL, + server_addr varchar(255) NOT NULL, + is_exception char(1), + exception_info clob, + user_agent vargraphic(500), + device_name varchar(100), + browser_name varchar(100), + execute_time decimal(19), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + PRIMARY KEY (id) +); + + +-- 菜单表 +CREATE TABLE js_sys_menu +( + menu_code varchar(64) NOT NULL, + parent_code varchar(64) NOT NULL, + parent_codes varchar(1000) NOT NULL, + tree_sort decimal(10) NOT NULL, + tree_sorts varchar(1000) NOT NULL, + tree_leaf char(1) NOT NULL, + tree_level decimal(4) NOT NULL, + tree_names varchar(1000) NOT NULL, + menu_name varchar(100) NOT NULL, + menu_type char(1) NOT NULL, + menu_href varchar(1000), + menu_target varchar(20), + menu_icon varchar(100), + menu_color varchar(50), + permission varchar(1000), + weight decimal(4), + is_show char(1) NOT NULL, + sys_code varchar(64) NOT NULL, + module_codes varchar(500) NOT NULL, + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + extend_s1 vargraphic(500), + extend_s2 vargraphic(500), + extend_s3 vargraphic(500), + extend_s4 vargraphic(500), + extend_s5 vargraphic(500), + extend_s6 vargraphic(500), + extend_s7 vargraphic(500), + extend_s8 vargraphic(500), + extend_i1 decimal(19), + extend_i2 decimal(19), + extend_i3 decimal(19), + extend_i4 decimal(19), + extend_f1 decimal(19,4), + extend_f2 decimal(19,4), + extend_f3 decimal(19,4), + extend_f4 decimal(19,4), + extend_d1 timestamp, + extend_d2 timestamp, + extend_d3 timestamp, + extend_d4 timestamp, + PRIMARY KEY (menu_code) +); + + +-- 模块表 +CREATE TABLE js_sys_module +( + module_code varchar(64) NOT NULL, + module_name varchar(100) NOT NULL, + description vargraphic(500), + main_class_name varchar(500), + current_version varchar(50), + upgrade_info varchar(300), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (module_code) +); + + +-- 内部消息 +CREATE TABLE js_sys_msg_inner +( + id varchar(64) NOT NULL, + msg_title varchar(200) NOT NULL, + content_level char(1) NOT NULL, + content_type char(1), + msg_content clob NOT NULL, + receive_type char(1) NOT NULL, + receive_codes clob, + receive_names clob, + send_user_code varchar(64), + send_user_name varchar(100), + send_date timestamp, + is_attac char(1), + notify_types varchar(100), + status char(1) NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (id) +); + + +-- 内部消息发送记录表 +CREATE TABLE js_sys_msg_inner_record +( + id varchar(64) NOT NULL, + msg_inner_id varchar(64) NOT NULL, + receive_user_code varchar(64), + receive_user_name varchar(100) NOT NULL, + read_status char(1) NOT NULL, + read_date timestamp, + is_star char(1), + PRIMARY KEY (id) +); + + +-- 消息推送表 +CREATE TABLE js_sys_msg_push +( + id varchar(64) NOT NULL, + msg_type varchar(16) NOT NULL, + msg_title varchar(200) NOT NULL, + msg_content clob NOT NULL, + biz_key varchar(64), + biz_type varchar(64), + receive_code varchar(64) NOT NULL, + receive_user_code varchar(64) NOT NULL, + receive_user_name varchar(100) NOT NULL, + send_user_code varchar(64) NOT NULL, + send_user_name varchar(100) NOT NULL, + send_date timestamp NOT NULL, + is_merge_push char(1), + plan_push_date timestamp, + push_number int, + push_return_code varchar(200), + push_return_msg_id varchar(200), + push_return_content clob, + push_status char(1), + push_date timestamp, + read_status char(1), + read_date timestamp, + PRIMARY KEY (id) +); + + +-- 消息已推送表 +CREATE TABLE js_sys_msg_pushed +( + id varchar(64) NOT NULL, + msg_type varchar(16) NOT NULL, + msg_title varchar(200) NOT NULL, + msg_content clob NOT NULL, + biz_key varchar(64), + biz_type varchar(64), + receive_code varchar(64) NOT NULL, + receive_user_code varchar(64) NOT NULL, + receive_user_name varchar(100) NOT NULL, + send_user_code varchar(64) NOT NULL, + send_user_name varchar(100) NOT NULL, + send_date timestamp NOT NULL, + is_merge_push char(1), + plan_push_date timestamp, + push_number int, + push_return_content clob, + push_return_code varchar(200), + push_return_msg_id varchar(200), + push_status char(1), + push_date timestamp, + read_status char(1), + read_date timestamp, + PRIMARY KEY (id) +); + + +-- 消息模板 +CREATE TABLE js_sys_msg_template +( + id varchar(64) NOT NULL, + module_code varchar(64), + tpl_key varchar(100) NOT NULL, + tpl_name vargraphic(100) NOT NULL, + tpl_type varchar(16) NOT NULL, + tpl_content clob NOT NULL, + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (id) +); + + +-- 组织机构表 +CREATE TABLE js_sys_office +( + office_code varchar(64) NOT NULL, + parent_code varchar(64) NOT NULL, + parent_codes varchar(1000) NOT NULL, + tree_sort decimal(10) NOT NULL, + tree_sorts varchar(1000) NOT NULL, + tree_leaf char(1) NOT NULL, + tree_level decimal(4) NOT NULL, + tree_names varchar(1000) NOT NULL, + view_code varchar(100) NOT NULL, + office_name vargraphic(100) NOT NULL, + full_name varchar(200) NOT NULL, + office_type char(1) NOT NULL, + leader varchar(100), + phone varchar(100), + address varchar(255), + zip_code varchar(100), + email varchar(300), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + extend_s1 vargraphic(500), + extend_s2 vargraphic(500), + extend_s3 vargraphic(500), + extend_s4 vargraphic(500), + extend_s5 vargraphic(500), + extend_s6 vargraphic(500), + extend_s7 vargraphic(500), + extend_s8 vargraphic(500), + extend_i1 decimal(19), + extend_i2 decimal(19), + extend_i3 decimal(19), + extend_i4 decimal(19), + extend_f1 decimal(19,4), + extend_f2 decimal(19,4), + extend_f3 decimal(19,4), + extend_f4 decimal(19,4), + extend_d1 timestamp, + extend_d2 timestamp, + extend_d3 timestamp, + extend_d4 timestamp, + PRIMARY KEY (office_code) +); + + +-- 员工岗位表 +CREATE TABLE js_sys_post +( + post_code varchar(64) NOT NULL, + post_name varchar(100) NOT NULL, + post_type varchar(100), + post_sort decimal(10), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + PRIMARY KEY (post_code) +); + + +-- 角色表 +CREATE TABLE js_sys_role +( + role_code varchar(64) NOT NULL, + role_name varchar(100) NOT NULL, + role_type varchar(100), + role_sort decimal(10), + is_sys char(1), + user_type varchar(16), + data_scope char(1), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + PRIMARY KEY (role_code) +); + + +-- 角色数据权限表 +CREATE TABLE js_sys_role_data_scope +( + role_code varchar(64) NOT NULL, + ctrl_type varchar(20) NOT NULL, + ctrl_data varchar(64) NOT NULL, + ctrl_permi varchar(64) NOT NULL, + PRIMARY KEY (role_code, ctrl_type, ctrl_data, ctrl_permi) +); + + +-- 角色与菜单关联表 +CREATE TABLE js_sys_role_menu +( + role_code varchar(64) NOT NULL, + menu_code varchar(64) NOT NULL, + PRIMARY KEY (role_code, menu_code) +); + + +-- 用户表 +CREATE TABLE js_sys_user +( + user_code varchar(100) NOT NULL, + login_code varchar(100) NOT NULL, + user_name varchar(100) NOT NULL, + password varchar(100) NOT NULL, + email varchar(300), + mobile varchar(100), + phone varchar(100), + sex char(1), + avatar varchar(1000), + sign vargraphic(200), + wx_openid varchar(100), + mobile_imei varchar(100), + user_type varchar(16) NOT NULL, + ref_code varchar(64), + ref_name varchar(100), + mgr_type char(1) NOT NULL, + pwd_security_level decimal(1), + pwd_update_date timestamp, + pwd_update_record varchar(1000), + pwd_question varchar(200), + pwd_question_answer varchar(200), + pwd_question_2 varchar(200), + pwd_question_answer_2 varchar(200), + pwd_question_3 varchar(200), + pwd_question_answer_3 varchar(200), + pwd_quest_update_date timestamp, + last_login_ip varchar(100), + last_login_date timestamp, + freeze_date timestamp, + freeze_cause varchar(200), + user_weight decimal(8) DEFAULT 0, + status char NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + extend_s1 vargraphic(500), + extend_s2 vargraphic(500), + extend_s3 vargraphic(500), + extend_s4 vargraphic(500), + extend_s5 vargraphic(500), + extend_s6 vargraphic(500), + extend_s7 vargraphic(500), + extend_s8 vargraphic(500), + extend_i1 decimal(19), + extend_i2 decimal(19), + extend_i3 decimal(19), + extend_i4 decimal(19), + extend_f1 decimal(19,4), + extend_f2 decimal(19,4), + extend_f3 decimal(19,4), + extend_f4 decimal(19,4), + extend_d1 timestamp, + extend_d2 timestamp, + extend_d3 timestamp, + extend_d4 timestamp, + PRIMARY KEY (user_code) +); + + +-- 用户数据权限表 +CREATE TABLE js_sys_user_data_scope +( + user_code varchar(100) NOT NULL, + ctrl_type varchar(20) NOT NULL, + ctrl_data varchar(64) NOT NULL, + ctrl_permi varchar(64) NOT NULL, + PRIMARY KEY (user_code, ctrl_type, ctrl_data, ctrl_permi) +); + + +-- 用户与角色关联表 +CREATE TABLE js_sys_user_role +( + user_code varchar(100) NOT NULL, + role_code varchar(64) NOT NULL, + PRIMARY KEY (user_code, role_code) +); + + + +/* Create Indexes */ + +CREATE INDEX idx_gen_table_ptn ON js_gen_table (parent_table_name); +CREATE INDEX idx_gen_table_column_tn ON js_gen_table_column (table_name); +CREATE INDEX idx_sys_area_pc ON js_sys_area (parent_code); +CREATE INDEX idx_sys_area_ts ON js_sys_area (tree_sort); +CREATE INDEX idx_sys_area_status ON js_sys_area (status); +CREATE INDEX idx_sys_area_pcs ON js_sys_area (parent_codes); +CREATE INDEX idx_sys_area_tss ON js_sys_area (tree_sorts); +CREATE INDEX idx_sys_company_cc ON js_sys_company (corp_code); +CREATE INDEX idx_sys_company_pc ON js_sys_company (parent_code); +CREATE INDEX idx_sys_company_ts ON js_sys_company (tree_sort); +CREATE INDEX idx_sys_company_status ON js_sys_company (status); +CREATE INDEX idx_sys_company_vc ON js_sys_company (view_code); +CREATE INDEX idx_sys_company_pcs ON js_sys_company (parent_codes); +CREATE INDEX idx_sys_company_tss ON js_sys_company (tree_sorts); +CREATE UNIQUE INDEX idx_sys_config_key ON js_sys_config (config_key); +CREATE INDEX idx_sys_dict_data_cc ON js_sys_dict_data (corp_code); +CREATE INDEX idx_sys_dict_data_dt ON js_sys_dict_data (dict_type); +CREATE INDEX idx_sys_dict_data_pc ON js_sys_dict_data (parent_code); +CREATE INDEX idx_sys_dict_data_status ON js_sys_dict_data (status); +CREATE INDEX idx_sys_dict_data_pcs ON js_sys_dict_data (parent_codes); +CREATE INDEX idx_sys_dict_data_ts ON js_sys_dict_data (tree_sort); +CREATE INDEX idx_sys_dict_data_tss ON js_sys_dict_data (tree_sorts); +CREATE INDEX idx_sys_dict_data_dv ON js_sys_dict_data (dict_value); +CREATE INDEX idx_sys_dict_type_is ON js_sys_dict_type (is_sys); +CREATE INDEX idx_sys_dict_type_status ON js_sys_dict_type (status); +CREATE INDEX idx_sys_employee_cco ON js_sys_employee (company_code); +CREATE INDEX idx_sys_employee_cc ON js_sys_employee (corp_code); +CREATE INDEX idx_sys_employee_ud ON js_sys_employee (update_date); +CREATE INDEX idx_sys_employee_oc ON js_sys_employee (office_code); +CREATE INDEX idx_sys_employee_status ON js_sys_employee (status); +CREATE INDEX idx_sys_file_entity_md5 ON js_sys_file_entity (file_md5); +CREATE INDEX idx_sys_file_entity_size ON js_sys_file_entity (file_size); +CREATE INDEX idx_sys_file_biz_ft ON js_sys_file_upload (file_type); +CREATE INDEX idx_sys_file_biz_fi ON js_sys_file_upload (file_id); +CREATE INDEX idx_sys_file_biz_status ON js_sys_file_upload (status); +CREATE INDEX idx_sys_file_biz_cb ON js_sys_file_upload (create_by); +CREATE INDEX idx_sys_file_biz_ud ON js_sys_file_upload (update_date); +CREATE INDEX idx_sys_file_biz_bt ON js_sys_file_upload (biz_type); +CREATE INDEX idx_sys_file_biz_bk ON js_sys_file_upload (biz_key); +CREATE INDEX idx_sys_job_status ON js_sys_job (status); +CREATE INDEX idx_sys_job_log_jn ON js_sys_job_log (job_name); +CREATE INDEX idx_sys_job_log_jg ON js_sys_job_log (job_group); +CREATE INDEX idx_sys_job_log_t ON js_sys_job_log (job_type); +CREATE INDEX idx_sys_job_log_e ON js_sys_job_log (job_event); +CREATE INDEX idx_sys_job_log_ie ON js_sys_job_log (is_exception); +CREATE INDEX idx_sys_lang_code ON js_sys_lang (lang_code); +CREATE INDEX idx_sys_lang_type ON js_sys_lang (lang_type); +CREATE INDEX idx_sys_log_cb ON js_sys_log (create_by); +CREATE INDEX idx_sys_log_cc ON js_sys_log (corp_code); +CREATE INDEX idx_sys_log_lt ON js_sys_log (log_type); +CREATE INDEX idx_sys_log_bk ON js_sys_log (biz_key); +CREATE INDEX idx_sys_log_bt ON js_sys_log (biz_type); +CREATE INDEX idx_sys_log_ie ON js_sys_log (is_exception); +CREATE INDEX idx_sys_log_cd ON js_sys_log (create_date); +CREATE INDEX idx_sys_menu_pc ON js_sys_menu (parent_code); +CREATE INDEX idx_sys_menu_ts ON js_sys_menu (tree_sort); +CREATE INDEX idx_sys_menu_status ON js_sys_menu (status); +CREATE INDEX idx_sys_menu_mt ON js_sys_menu (menu_type); +CREATE INDEX idx_sys_menu_pss ON js_sys_menu (parent_codes); +CREATE INDEX idx_sys_menu_tss ON js_sys_menu (tree_sorts); +CREATE INDEX idx_sys_menu_sc ON js_sys_menu (sys_code); +CREATE INDEX idx_sys_menu_is ON js_sys_menu (is_show); +CREATE INDEX idx_sys_menu_mcs ON js_sys_menu (module_codes); +CREATE INDEX idx_sys_menu_wt ON js_sys_menu (weight); +CREATE INDEX idx_sys_module_status ON js_sys_module (status); +CREATE INDEX idx_sys_msg_inner_cb ON js_sys_msg_inner (create_by); +CREATE INDEX idx_sys_msg_inner_status ON js_sys_msg_inner (status); +CREATE INDEX idx_sys_msg_inner_cl ON js_sys_msg_inner (content_level); +CREATE INDEX idx_sys_msg_inner_sc ON js_sys_msg_inner (send_user_code); +CREATE INDEX idx_sys_msg_inner_sd ON js_sys_msg_inner (send_date); +CREATE INDEX idx_sys_msg_inner_r_mi ON js_sys_msg_inner_record (msg_inner_id); +CREATE INDEX idx_sys_msg_inner_r_ruc ON js_sys_msg_inner_record (receive_user_code); +CREATE INDEX idx_sys_msg_inner_r_status ON js_sys_msg_inner_record (read_status); +CREATE INDEX idx_sys_msg_inner_r_star ON js_sys_msg_inner_record (is_star); +CREATE INDEX idx_sys_msg_push_type ON js_sys_msg_push (msg_type); +CREATE INDEX idx_sys_msg_push_rc ON js_sys_msg_push (receive_code); +CREATE INDEX idx_sys_msg_push_uc ON js_sys_msg_push (receive_user_code); +CREATE INDEX idx_sys_msg_push_suc ON js_sys_msg_push (send_user_code); +CREATE INDEX idx_sys_msg_push_pd ON js_sys_msg_push (plan_push_date); +CREATE INDEX idx_sys_msg_push_ps ON js_sys_msg_push (push_status); +CREATE INDEX idx_sys_msg_push_rs ON js_sys_msg_push (read_status); +CREATE INDEX idx_sys_msg_push_bk ON js_sys_msg_push (biz_key); +CREATE INDEX idx_sys_msg_push_bt ON js_sys_msg_push (biz_type); +CREATE INDEX idx_sys_msg_push_imp ON js_sys_msg_push (is_merge_push); +CREATE INDEX idx_sys_msg_pushed_type ON js_sys_msg_pushed (msg_type); +CREATE INDEX idx_sys_msg_pushed_rc ON js_sys_msg_pushed (receive_code); +CREATE INDEX idx_sys_msg_pushed_uc ON js_sys_msg_pushed (receive_user_code); +CREATE INDEX idx_sys_msg_pushed_suc ON js_sys_msg_pushed (send_user_code); +CREATE INDEX idx_sys_msg_pushed_pd ON js_sys_msg_pushed (plan_push_date); +CREATE INDEX idx_sys_msg_pushed_ps ON js_sys_msg_pushed (push_status); +CREATE INDEX idx_sys_msg_pushed_rs ON js_sys_msg_pushed (read_status); +CREATE INDEX idx_sys_msg_pushed_bk ON js_sys_msg_pushed (biz_key); +CREATE INDEX idx_sys_msg_pushed_bt ON js_sys_msg_pushed (biz_type); +CREATE INDEX idx_sys_msg_pushed_imp ON js_sys_msg_pushed (is_merge_push); +CREATE INDEX idx_sys_msg_tpl_key ON js_sys_msg_template (tpl_key); +CREATE INDEX idx_sys_msg_tpl_type ON js_sys_msg_template (tpl_type); +CREATE INDEX idx_sys_msg_tpl_status ON js_sys_msg_template (status); +CREATE INDEX idx_sys_office_cc ON js_sys_office (corp_code); +CREATE INDEX idx_sys_office_pc ON js_sys_office (parent_code); +CREATE INDEX idx_sys_office_pcs ON js_sys_office (parent_codes); +CREATE INDEX idx_sys_office_status ON js_sys_office (status); +CREATE INDEX idx_sys_office_ot ON js_sys_office (office_type); +CREATE INDEX idx_sys_office_vc ON js_sys_office (view_code); +CREATE INDEX idx_sys_office_ts ON js_sys_office (tree_sort); +CREATE INDEX idx_sys_office_tss ON js_sys_office (tree_sorts); +CREATE INDEX idx_sys_post_cc ON js_sys_post (corp_code); +CREATE INDEX idx_sys_post_status ON js_sys_post (status); +CREATE INDEX idx_sys_post_ps ON js_sys_post (post_sort); +CREATE INDEX idx_sys_role_cc ON js_sys_role (corp_code); +CREATE INDEX idx_sys_role_is ON js_sys_role (is_sys); +CREATE INDEX idx_sys_role_status ON js_sys_role (status); +CREATE INDEX idx_sys_role_rs ON js_sys_role (role_sort); +CREATE INDEX idx_sys_user_lc ON js_sys_user (login_code); +CREATE INDEX idx_sys_user_email ON js_sys_user (email); +CREATE INDEX idx_sys_user_mobile ON js_sys_user (mobile); +CREATE INDEX idx_sys_user_wo ON js_sys_user (wx_openid); +CREATE INDEX idx_sys_user_imei ON js_sys_user (mobile_imei); +CREATE INDEX idx_sys_user_rt ON js_sys_user (user_type); +CREATE INDEX idx_sys_user_rc ON js_sys_user (ref_code); +CREATE INDEX idx_sys_user_mt ON js_sys_user (mgr_type); +CREATE INDEX idx_sys_user_us ON js_sys_user (user_weight); +CREATE INDEX idx_sys_user_ud ON js_sys_user (update_date); +CREATE INDEX idx_sys_user_status ON js_sys_user (status); +CREATE INDEX idx_sys_user_cc ON js_sys_user (corp_code); + + + diff --git a/web/db/mssql/core.sql b/web/db/mssql/core.sql index 0cf1045d..593862fd 100644 --- a/web/db/mssql/core.sql +++ b/web/db/mssql/core.sql @@ -481,13 +481,13 @@ CREATE TABLE [js_sys_msg_inner] [content_type] char(1), [msg_content] text NOT NULL, [receive_type] char(1) NOT NULL, - [receive_codes] text NOT NULL, - [receive_names] text NOT NULL, - [send_user_code] varchar(64) NOT NULL, - [send_user_name] varchar(100) NOT NULL, - [send_date] datetime NOT NULL, + [receive_codes] text, + [receive_names] text, + [send_user_code] varchar(64), + [send_user_name] varchar(100), + [send_date] datetime, [is_attac] char(1), - [notify_types] varchar(100) NOT NULL, + [notify_types] varchar(100), [status] char(1) NOT NULL, [create_by] varchar(64) NOT NULL, [create_date] datetime NOT NULL, diff --git a/web/db/mysql/core.sql b/web/db/mysql/core.sql index 8725c462..cf0b337a 100644 --- a/web/db/mysql/core.sql +++ b/web/db/mysql/core.sql @@ -481,14 +481,14 @@ CREATE TABLE js_sys_msg_inner content_level char(1) NOT NULL COMMENT '内容级别(1普通 2一般 3紧急)', content_type char(1) COMMENT '内容类型(1公告 2新闻 3会议 4其它)', msg_content text NOT NULL COMMENT '消息内容', - receive_type char(1) NOT NULL COMMENT '接受者类型(1用户 2部门 3角色 4岗位)', - receive_codes text NOT NULL COMMENT '接受者字符串', - receive_names text NOT NULL COMMENT '接受者名称字符串', - send_user_code varchar(64) NOT NULL COMMENT '发送者用户编码', - send_user_name varchar(100) NOT NULL COMMENT '发送者用户姓名', - send_date datetime NOT NULL COMMENT '发送时间', + receive_type char(1) NOT NULL COMMENT '接受者类型(0全部 1用户 2部门 3角色 4岗位)', + receive_codes text COMMENT '接受者字符串', + receive_names text COMMENT '接受者名称字符串', + send_user_code varchar(64) COMMENT '发送者用户编码', + send_user_name varchar(100) COMMENT '发送者用户姓名', + send_date datetime COMMENT '发送时间', is_attac char(1) COMMENT '是否有附件', - notify_types varchar(100) NOT NULL COMMENT '通知类型(PC APP 短信 邮件 微信)多选', + notify_types varchar(100) COMMENT '通知类型(PC APP 短信 邮件 微信)多选', status char(1) NOT NULL COMMENT '状态(0正常 1删除 4审核 5驳回 9草稿)', create_by varchar(64) NOT NULL COMMENT '创建者', create_date datetime NOT NULL COMMENT '创建时间', diff --git a/web/db/oracle/core.sql b/web/db/oracle/core.sql index b29424e7..9943b4e1 100644 --- a/web/db/oracle/core.sql +++ b/web/db/oracle/core.sql @@ -481,13 +481,13 @@ CREATE TABLE js_sys_msg_inner content_type char(1), msg_content clob NOT NULL, receive_type char(1) NOT NULL, - receive_codes clob NOT NULL, - receive_names clob NOT NULL, - send_user_code varchar2(64) NOT NULL, - send_user_name varchar2(100) NOT NULL, - send_date timestamp NOT NULL, + receive_codes clob, + receive_names clob, + send_user_code varchar2(64), + send_user_name varchar2(100), + send_date timestamp, is_attac char(1), - notify_types varchar2(100) NOT NULL, + notify_types varchar2(100), status char(1) NOT NULL, create_by varchar2(64) NOT NULL, create_date timestamp NOT NULL, @@ -1252,7 +1252,7 @@ COMMENT ON COLUMN js_sys_msg_inner.msg_title IS '消息标题'; COMMENT ON COLUMN js_sys_msg_inner.content_level IS '内容级别(1普通 2一般 3紧急)'; COMMENT ON COLUMN js_sys_msg_inner.content_type IS '内容类型(1公告 2新闻 3会议 4其它)'; COMMENT ON COLUMN js_sys_msg_inner.msg_content IS '消息内容'; -COMMENT ON COLUMN js_sys_msg_inner.receive_type IS '接受者类型(1用户 2部门 3角色 4岗位)'; +COMMENT ON COLUMN js_sys_msg_inner.receive_type IS '接受者类型(0全部 1用户 2部门 3角色 4岗位)'; COMMENT ON COLUMN js_sys_msg_inner.receive_codes IS '接受者字符串'; COMMENT ON COLUMN js_sys_msg_inner.receive_names IS '接受者名称字符串'; COMMENT ON COLUMN js_sys_msg_inner.send_user_code IS '发送者用户编码'; diff --git a/web/db/postgresql/core.sql b/web/db/postgresql/core.sql index f7a01cf4..0a0403c5 100644 --- a/web/db/postgresql/core.sql +++ b/web/db/postgresql/core.sql @@ -481,13 +481,13 @@ CREATE TABLE js_sys_msg_inner content_type char(1), msg_content text NOT NULL, receive_type char(1) NOT NULL, - receive_codes text NOT NULL, - receive_names text NOT NULL, - send_user_code varchar(64) NOT NULL, - send_user_name varchar(100) NOT NULL, - send_date timestamp NOT NULL, + receive_codes text, + receive_names text, + send_user_code varchar(64), + send_user_name varchar(100), + send_date timestamp, is_attac char(1), - notify_types varchar(100) NOT NULL, + notify_types varchar(100), status char(1) NOT NULL, create_by varchar(64) NOT NULL, create_date timestamp NOT NULL, @@ -1252,7 +1252,7 @@ COMMENT ON COLUMN js_sys_msg_inner.msg_title IS '消息标题'; COMMENT ON COLUMN js_sys_msg_inner.content_level IS '内容级别(1普通 2一般 3紧急)'; COMMENT ON COLUMN js_sys_msg_inner.content_type IS '内容类型(1公告 2新闻 3会议 4其它)'; COMMENT ON COLUMN js_sys_msg_inner.msg_content IS '消息内容'; -COMMENT ON COLUMN js_sys_msg_inner.receive_type IS '接受者类型(1用户 2部门 3角色 4岗位)'; +COMMENT ON COLUMN js_sys_msg_inner.receive_type IS '接受者类型(0全部 1用户 2部门 3角色 4岗位)'; COMMENT ON COLUMN js_sys_msg_inner.receive_codes IS '接受者字符串'; COMMENT ON COLUMN js_sys_msg_inner.receive_names IS '接受者名称字符串'; COMMENT ON COLUMN js_sys_msg_inner.send_user_code IS '发送者用户编码'; From a22539808f4a7ea97ada5998c92c98090ffcd16f Mon Sep 17 00:00:00 2001 From: thinkgem Date: Wed, 20 Mar 2019 00:24:02 +0800 Subject: [PATCH 20/23] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=86=85=E9=83=A8?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E7=AB=99=E5=86=85=E4=BF=A1=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jeesite/modules/msg/dao/MsgInnerRecordDao.java | 2 +- .../com/jeesite/modules/msg/service/MsgInnerService.java | 4 ++-- .../resources/mappings/modules/msg/MsgInnerRecordDao.xml | 9 +++++++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/modules/core/src/main/java/com/jeesite/modules/msg/dao/MsgInnerRecordDao.java b/modules/core/src/main/java/com/jeesite/modules/msg/dao/MsgInnerRecordDao.java index 5a1e9c8a..dff9ab26 100644 --- a/modules/core/src/main/java/com/jeesite/modules/msg/dao/MsgInnerRecordDao.java +++ b/modules/core/src/main/java/com/jeesite/modules/msg/dao/MsgInnerRecordDao.java @@ -18,6 +18,6 @@ public interface MsgInnerRecordDao extends CrudDao { /** * 根据消息编号和接受者用户名更新读取状态 */ - public void updateReadStatus(MsgInnerRecord msgInnerRecord); + public long updateReadStatus(MsgInnerRecord msgInnerRecord); } \ No newline at end of file diff --git a/modules/core/src/main/java/com/jeesite/modules/msg/service/MsgInnerService.java b/modules/core/src/main/java/com/jeesite/modules/msg/service/MsgInnerService.java index 9d19ec28..2a014ce2 100644 --- a/modules/core/src/main/java/com/jeesite/modules/msg/service/MsgInnerService.java +++ b/modules/core/src/main/java/com/jeesite/modules/msg/service/MsgInnerService.java @@ -158,7 +158,7 @@ public class MsgInnerService extends CrudService { BaseMsgContent msgContent = null; if (MsgPush.TYPE_PC.equals(type)){ msgContent = new PcMsgContent(); - msgContent.setContent("你有一条内部消息,请点击“详情”进行查阅。"); + msgContent.setContent("你有一条内部消息,点击“详情”进行查阅。"); ((PcMsgContent)msgContent).addButton(new String[]{ "详情", "/a/msg/msgInner/view?id="+msgInner.getId()}); }else if (MsgPush.TYPE_APP.equals(type)){ @@ -170,7 +170,7 @@ public class MsgInnerService extends CrudService { } if (msgContent != null){ msgContent.setTitle(msgInner.getMsgTitle()); - if (msgContent.getContent() != null){ + if (msgContent.getContent() == null){ msgContent.setContent("你有一条内部消息请查阅:" + StringUtils.abbr(msgInner.getMsgTitle(), 30)); } diff --git a/modules/core/src/main/resources/mappings/modules/msg/MsgInnerRecordDao.xml b/modules/core/src/main/resources/mappings/modules/msg/MsgInnerRecordDao.xml index dc56159e..55cb9413 100644 --- a/modules/core/src/main/resources/mappings/modules/msg/MsgInnerRecordDao.xml +++ b/modules/core/src/main/resources/mappings/modules/msg/MsgInnerRecordDao.xml @@ -12,4 +12,13 @@ ORDER BY ${sqlMap.order.toSql()} --> + + UPDATE ${_prefix}sys_msg_inner_record SET + read_status = #{readStatus}, + read_date = #{readDate} + WHERE msg_inner_id = #{msgInnerId} + AND receive_user_code = #{receiveUserCode} + AND read_date is null + + \ No newline at end of file From 49e503809e5a0c15df4c9fdaa38febd4ffd7d4db Mon Sep 17 00:00:00 2001 From: thinkgem Date: Wed, 20 Mar 2019 11:05:16 +0800 Subject: [PATCH 21/23] =?UTF-8?q?beetl=E5=8D=87=E7=BA=A7=E5=88=B02.9.8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/views/modules/msg/msgInnerForm.html | 9 +++++---- parent/pom.xml | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/modules/core/src/main/resources/views/modules/msg/msgInnerForm.html b/modules/core/src/main/resources/views/modules/msg/msgInnerForm.html index 97f3ce02..67f93ecc 100644 --- a/modules/core/src/main/resources/views/modules/msg/msgInnerForm.html +++ b/modules/core/src/main/resources/views/modules/msg/msgInnerForm.html @@ -84,12 +84,13 @@
  • -
    +
    -
    diff --git a/parent/pom.xml b/parent/pom.xml index 39f9f1a6..efa3f424 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -48,7 +48,7 @@ 1.1.10 1.4.0 2.7.0-release - 2.7-SNAPSHOT + 2.9-SNAPSHOT 1.5.20 From b0676503eec918218c2cb3bc3dc36c9756bb5419 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Wed, 20 Mar 2019 17:43:13 +0800 Subject: [PATCH 22/23] update --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index a91e49a9..1ee14f4b 100644 --- a/README.md +++ b/README.md @@ -4,19 +4,17 @@ JeeSite 是一个 Java EE 企业级快速开发平台,基于经典技术组合 JeeSite 快速开发平台的主要目的是能够让初级的研发人员快速的开发出复杂的业务功能(经典架构会的人多),让开发者注重专注业务,其余有平台来封装技术细节,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。 -JeeSite 自 2013 年发布以来已被广大爱好者用到了企业、政府、医疗、金融、互联网等各个领域中,JeeSite 依架构简单精良、易于扩展、大众思维的设计模式,深入开发者的内心,并得到一致好评,于[2016](http://www.oschina.net/project/top_cn_2016?sort=1)和[2017](http://www.oschina.net/project/top_cn_2017?sort=1)连续两年获得开源中国《最受欢迎中国开源软件》奖杯,期间也帮助了不少刚毕业的大学生作为入门教材,快速的去实践。 +JeeSite 1.x 自 2013 年发布以来已被广大爱好者用到了企业、政府、医疗、金融、互联网等各个领域中,JeeSite 依架构简单精良、易于扩展、大众思维的设计模式,深入开发者的内心,并得到一致好评,于[2016](http://www.oschina.net/project/top_cn_2016?sort=1)和[2017](http://www.oschina.net/project/top_cn_2017?sort=1)连续两年获得开源中国《最受欢迎中国开源软件》奖杯,期间也帮助了不少刚毕业的大学生作为入门教材,快速的去实践。 -4.x 的升级,作者结合了多年总结和经验,以及各方面的应用案例,对架构完成了一次全部重构,也纳入很多新的思想。不管是从开发者模式、底层架构、逻辑处理还是到用户界面,用户交互体验上都有很大的进步,在不忘学习成本、提高开发效率的情况下,安全方面也做和很多工作,包括:身份认证、密码策略、安全审计、日志收集。 +JeeSite 4.x 的升级,作者结合了多年总结和经验,以及各方面的应用案例,对架构完成了一次全部重构,也纳入很多新的思想。不管是从开发者模式、底层架构、逻辑处理还是到用户界面,用户交互体验上都有很大的进步,在不忘学习成本、提高开发效率的情况下,安全方面也做和很多工作,包括:身份认证、密码策略、安全审计、日志收集。 -### 4.x 新特性: - -* **我们的优势:** 整体架构清晰、稳定技术先进、入门简单、易于维护、易于扩展、安全稳定。 +### 4.x 的新特性及优势: ## 技术选型 * 主框架:Spring Boot 2.0、Spring Framework 5.0、Apache Shiro 1.4、J2Cache * 持久层:Apache MyBatis 3.4、Hibernate Validation 6.0、Alibaba Druid 1.1 -* 视图层:Spring MVC 5.0、Beetl 2.7 替换JSP、Bootstrap 3.3、AdminLTE 2.4 +* 视图层:Spring MVC 5.0、Beetl 2.9 替换JSP、Bootstrap 3.3、AdminLTE 2.4 * 前端组件:jQuery 1.12、jqGrid 4.7、layer 3.0、zTree 3.5、jquery-validation * 工具组件:Apache Commons、Logback 1.1、Jackson 2.8、POI 3.14、Quartz 2.2 * 技术选型详情: @@ -82,6 +80,7 @@ JeeSite 自 2013 年发布以来已被广大爱好者用到了企业、政府、 * 码云Gitee: * GitHub: * 作者博客: +* **技术服务:** * 官方网站: * 官方论坛: * 微信公众号: From 7ccd4f09a01a745abb696957bf4a07969e7e499d Mon Sep 17 00:00:00 2001 From: thinkgem Date: Wed, 20 Mar 2019 20:57:55 +0800 Subject: [PATCH 23/23] v4.1.4 --- common/pom.xml | 2 +- modules/core/pom.xml | 2 +- .../core/src/main/resources/db/upgrade/core/versions | 3 ++- modules/template/pom.xml | 2 +- parent/pom.xml | 2 +- root/pom.xml | 2 +- web/.settings/org.eclipse.wst.common.component | 10 +++++----- web/pom.xml | 2 +- 8 files changed, 13 insertions(+), 12 deletions(-) diff --git a/common/pom.xml b/common/pom.xml index a2456780..06d516a0 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -6,7 +6,7 @@ com.jeesite jeesite-parent - 4.1.3-SNAPSHOT + 4.1.4-SNAPSHOT ../parent/pom.xml diff --git a/modules/core/pom.xml b/modules/core/pom.xml index da5d32c8..def35ee4 100644 --- a/modules/core/pom.xml +++ b/modules/core/pom.xml @@ -6,7 +6,7 @@ com.jeesite jeesite-parent - 4.1.3-SNAPSHOT + 4.1.4-SNAPSHOT ../../parent/pom.xml diff --git a/modules/core/src/main/resources/db/upgrade/core/versions b/modules/core/src/main/resources/db/upgrade/core/versions index 65e4973c..a33d2623 100644 --- a/modules/core/src/main/resources/db/upgrade/core/versions +++ b/modules/core/src/main/resources/db/upgrade/core/versions @@ -9,4 +9,5 @@ 4.1.0 4.1.1 4.1.2 -4.1.3 \ No newline at end of file +4.1.3 +4.1.4 \ No newline at end of file diff --git a/modules/template/pom.xml b/modules/template/pom.xml index 2b7e46ee..d99b01bd 100644 --- a/modules/template/pom.xml +++ b/modules/template/pom.xml @@ -6,7 +6,7 @@ com.jeesite jeesite-parent - 4.1.3-SNAPSHOT + 4.1.4-SNAPSHOT ../../parent/pom.xml diff --git a/parent/pom.xml b/parent/pom.xml index efa3f424..921bbcea 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -11,7 +11,7 @@ com.jeesite jeesite-parent - 4.1.3-SNAPSHOT + 4.1.4-SNAPSHOT pom JeeSite Parent diff --git a/root/pom.xml b/root/pom.xml index 5f196ae3..ee3b6003 100644 --- a/root/pom.xml +++ b/root/pom.xml @@ -5,7 +5,7 @@ com.jeesite jeesite-root - 4.1.3-SNAPSHOT + 4.1.4-SNAPSHOT pom JeeSite diff --git a/web/.settings/org.eclipse.wst.common.component b/web/.settings/org.eclipse.wst.common.component index a48b8143..6d9ca87d 100644 --- a/web/.settings/org.eclipse.wst.common.component +++ b/web/.settings/org.eclipse.wst.common.component @@ -1,18 +1,18 @@ - + uses - + uses - + uses - + uses - + uses diff --git a/web/pom.xml b/web/pom.xml index 63c80c08..8e526087 100644 --- a/web/pom.xml +++ b/web/pom.xml @@ -6,7 +6,7 @@ com.jeesite jeesite-parent - 4.1.3-SNAPSHOT + 4.1.4-SNAPSHOT ../parent/pom.xml