Compare commits

..

22 Commits

Author SHA1 Message Date
thinkgem
233a00ad89 新增2套主题风格 2022-02-14 19:57:52 +08:00
thinkgem
52c1dec7a8 update readme 2022-02-14 16:29:59 +08:00
thinkgem
288f9d56c5 4.3.3 2022-02-14 11:06:46 +08:00
thinkgem
a610528ba6 update readme 2022-02-14 10:54:11 +08:00
thinkgem
3e9268e27e update demo 2022-02-09 11:35:26 +08:00
thinkgem
2dd963c049 tomcat 9.0.58 2022-02-09 00:01:24 +08:00
thinkgem
df530be41b update 2022-01-27 10:27:31 +08:00
thinkgem
9b42881648 新增yml环境配置实例 2022-01-25 09:55:32 +08:00
thinkgem
a60605d412 spring boot 2.5.9 2022-01-25 09:52:32 +08:00
thinkgem
4b6f7f1ae6 升级 layer 3.5,升级注意:查找替换 /3.1/layer.js 为 /3.5/layer.js 2022-01-24 12:11:17 +08:00
thinkgem
660087f613 升级 laydate 5.3 升级注意:查找替换 /5.0/laydate.js 为 /5.3/laydate.js 2022-01-17 12:03:13 +08:00
thinkgem
9d79ae73ec jdk17 2022-01-13 20:07:47 +08:00
wy
870976f6cf 优化组织机构带用户加载树算法 2022-01-13 20:04:08 +08:00
thinkgem
bd71d5126b update cms script 2022-01-11 19:05:08 +08:00
jeesite
3c698cf6ad 新增系统管理员管理默认角色不能取消提示 2022-01-11 12:39:56 +08:00
thinkgem
19b9cd8205 start 4.3.3 2022-01-06 12:04:26 +08:00
thinkgem
f9c0f5a72f mybatis 3.5.9、jsqlparser 4.3 2022-01-05 00:31:34 +08:00
thinkgem
5f8e8ba3f9 update 2021-12-30 23:21:31 +08:00
thinkgem
2dde6aa8e7 layer.msg 加空值判断 2021-12-30 23:20:34 +08:00
thinkgem
04b310b0f8 remove filter css 2021-12-29 15:55:58 +08:00
thinkgem
7fa7cdb224 细节处理 2021-12-29 14:22:57 +08:00
thinkgem
87f6703e6e 支持jdk17 2021-12-28 22:11:26 +08:00
62 changed files with 4675 additions and 2844 deletions

View File

@@ -21,13 +21,13 @@
* 问题反馈:<http://jeesite.net> [【新手必读】](https://gitee.com/thinkgem/jeesite4/issues/I18ARR) * 问题反馈:<http://jeesite.net> [【新手必读】](https://gitee.com/thinkgem/jeesite4/issues/I18ARR)
* 关注微信公众号,了解最新动态: * 关注微信公众号,了解最新动态:
![JeeSite4微信公众号](https://images.gitee.com/uploads/images/2020/0727/091951_a3ab258c_6732.jpeg "JeeSite4微信公众号") ![JeeSite微信公众号](https://images.gitee.com/uploads/images/2020/0727/091951_a3ab258c_6732.jpeg "JeeSite微信公众号")
## 平台介绍 ## 平台介绍
JeeSite 快速开发平台,不仅仅是一个后台开发框架,它是一个企业级快速开发解决方案,基于经典技术组合Spring Boot、Spring MVC、Apache Shiro、MyBatisBeetl、Bootstrap、AdminLTE)采用经典开发模式,让初学者能够更快的入门并投入到团队开发中去。提供在线代码生成功能包括模块如组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、工作流等。采用松耦合设计模块增减便捷界面无刷新一键换肤众多账号安全设置密码策略文件在线预览消息推送多元化第三方登录在线定时任务配置支持集群支持SAAS支持多数据源支持读写分离、分库分表支持微服务应用。 JeeSite 快速开发平台,不仅仅是一个后台开发框架,它是一个企业级快速开发解决方案,后端基于经典组合 Spring Boot、Shiro、MyBatis,前端采用 Beetl、Bootstrap、AdminLTE 经典开发模式,或者分离版 Vue3、Vite、Ant Design Vue、TypeScript、Vben Admin 最先进技术栈。提供在线代码生成功能,包括模块如:组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、工作流等。采用松耦合设计,微内核和插件架构,模块增减便捷界面无刷新一键换肤众多账号安全设置密码策略文件在线预览消息推送多元化第三方登录在线定时任务配置支持集群支持SAAS支持多数据源支持读写分离、分库分表支持微服务应用。
JeeSite 快速开发平台的主要目的是能够让初级的研发人员快速的开发出复杂的业务功能(经典架构会的人多),让开发者注重专注业务,其余有平台来封装技术细节,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。 JeeSite 快速开发平台的主要目的是能够让初级的研发人员快速的开发出复杂的业务功能,中高级人员有时间做一些更有用的事情。让开发者注重专注业务,其余有平台来封装技术细节,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。
JeeSite 自 2013 年发布以来已被广大爱好者用到了企业、政府、医疗、金融、互联网等各个领域中JeeSite 架构精良、易于扩展、大众思维的设计模式、工匠精神打磨每一个细节,深入开发者的内心,并荣获开源中国《最受欢迎中国开源软件》奖杯,期间也帮助了不少刚毕业的大学生,教师作为入门教材,快速的去实践。 JeeSite 自 2013 年发布以来已被广大爱好者用到了企业、政府、医疗、金融、互联网等各个领域中JeeSite 架构精良、易于扩展、大众思维的设计模式、工匠精神打磨每一个细节,深入开发者的内心,并荣获开源中国《最受欢迎中国开源软件》奖杯,期间也帮助了不少刚毕业的大学生,教师作为入门教材,快速的去实践。
@@ -37,31 +37,33 @@ JeeSite4 的升级,作者结合了多年总结和经验,以及各方面的
JeeSite 整体架构清晰、稳定技术先进、源代码书写规范、经典技术会的人多、易于维护、易于扩展、安全稳定。 JeeSite 整体架构清晰、稳定技术先进、源代码书写规范、经典技术会的人多、易于维护、易于扩展、安全稳定。
JeeSite 功能全,JeeSite 的知识点非常多,也非常少。因为她使用的都是一些通用的技术,通俗的设计风格,大多数基础知识点多数人都能掌握,所以每一个 JeeSite 的功能点都非常容易掌握。只要你学会使用这些功能和组件的应用,就可以顺利的完成系统开发了。 JeeSite 功能全,知识点非常多,也非常少。因为她使用的都是一些通用的技术,通俗的设计风格,大多数基础知识点多数人都能掌握,所以每一个 JeeSite 的功能点都非常容易掌握。只要你学会使用这些功能和组件的应用,就可以顺利的完成系统开发了。
JeeSite 是一个低代码开发平台具有较高的封装度、扩展性封装不是限制你去做一些事情而是在便捷的同时也具有较好的扩展性在不具备一些功能的情况下JeeSite 提供了扩展接口,提供了原生调用方法。 JeeSite 是一个低代码开发平台具有较高的封装度、扩展性封装不是限制你去做一些事情而是在便捷的同时也具有较好的扩展性在不具备一些功能的情况下JeeSite 提供了扩展接口,提供了原生调用方法。
大家都在用 Spring 在学习 Spring 架构的优点Spring 提供了较好的扩展性可又有多少人去修改它的源代码呢退一步说大家去修改了 Spring 的源码反而会对未来升级造成很大困扰您说不是呢这样的例子很多所以不要纠结JeeSite 也一样具备强大的扩展性。 大家都在用 Spring在学习 Spring 的优点Spring 提供了较好的扩展性可又有多少人去修改它的源代码呢退一步说大家去修改了 Spring 的源码反而会对未来升级造成很大困扰您说不是呢这样的例子很多所以不要纠结我们非常注重着一块,JeeSite 也一样具备强大的扩展性。
**发展至今 JeeSite 平台架构已经非常稳定JeeSite 是一个专业的平台,是一个让你使用放心的平台。** * 至今 JeeSite 平台架构已经非常稳定
* JeeSite 精益求精,用心打磨每一个细节。
* JeeSite 是一个专业的平台,是一个让你使用放心的平台。
### v4 架构特点安全方面等等的优势:<https://jeesite.com/docs/feature/> ### 架构特点安全方面的优势:<https://jeesite.com/docs/feature/>
## 技术选型 ## 技术选型
* 主框架Spring Boot 2.5、Spring Framework 5.3、Apache Shiro 1.8、J2Cache * 主框架Spring Boot 2.5、Spring Framework 5.3、Apache Shiro 1.8、J2Cache
* 持久层Apache MyBatis 3.5、Hibernate Validator 6.2、Alibaba Druid 1.2 * 持久层Apache MyBatis 3.5、Hibernate Validator 6.2、Alibaba Druid 1.2
* 视图层Spring MVC 5.3、Beetl 3.3替换JSP、Bootstrap 3.3、AdminLTE 2.4 * 视图层Spring MVC 5.3、Beetl 3.3替换JSP、Bootstrap 3.3、AdminLTE 2.4
* 前端组件jQuery 3.5、jqGrid 4.7、layer 3.1、zTree 3.5、jQuery Validation * 前端组件jQuery 3.5、jqGrid 4.7、layer 3.5、zTree 3.5、jQuery Validation
* 支持 IE9 及以上版本及其他所有现代浏览器,如:谷歌浏览器、火狐浏览器、国产浏览器 等 * 支持 IE9 及以上版本及其他所有现代浏览器,如:谷歌浏览器、火狐浏览器、国产浏览器 等
* 工作流引擎Flowable 6.6、符合 BPMN 规范、在线流程设计器、中国式流程、退回、撤回、自由流 * 工作流引擎Flowable 6.6、符合 BPMN 规范、在线流程设计器、中国式流程、退回、撤回、自由流
* 技术选型(详细):<http://jeesite.com/docs/technology/> * 技术选型(详细):<http://jeesite.com/docs/technology/>
疑问:为什么不使用 Bootstrap、AdminLTE 新版 疑问:为什么不使用 Bootstrap、AdminLTE 新版?
1. 前端发展迅速,向下兼容性是前端最大的弊端,会造成升级 JeeSite 变的困难,无法做到平滑升级。 1. 前端发展迅速,向下兼容性是前端最大的弊端,会造成升级 JeeSite 变的困难,无法做到平滑升级。
2. 其实 JeeSite 一直为前端组件做相应升级,满足各种需求场景,可以达到相应的效果,并向下兼容。 2. 其实 JeeSite 一直为前端组件做相应升级,满足各种需求场景,可以达到相应的效果,并向下兼容。
3. 为了兼容 IE 浏览器2020 年浏览器国内市场份额分析,还是有一定的 IE 占有率。 3. 为了兼容 IE 浏览器2020 年浏览器国内市场份额分析,还是有一定的 IE 占有率。
4. JeeSite 也提供了更先进的分离端版本:<http://vue.jeesite.com> 4. JeeSite 也提供了更先进的**分离端版本**<http://jeesite.com/docs/jeesite-vue/>
## 更多介绍 ## 更多介绍
@@ -78,7 +80,7 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
* Flowable业务流程模块BPM<http://jeesite.com/docs/bpm/> * Flowable业务流程模块BPM<http://jeesite.com/docs/bpm/>
* 内容管理模块CMS<https://gitee.com/thinkgem/jeesite4-cms> * 内容管理模块CMS<https://gitee.com/thinkgem/jeesite4-cms>
* 手机端移动端:<https://gitee.com/thinkgem/jeesite4-uniapp> * 手机端移动端:<https://gitee.com/thinkgem/jeesite4-uniapp>
* Vue3分离版本<http://vue.jeesite.com> * Vue3分离版本<http://jeesite.com/docs/jeesite-vue/>
## 快速体验 ## 快速体验
@@ -90,7 +92,7 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
### 本地运行 ### 本地运行
1. 环境准备:`JDK 1.8 or 11``Maven 3.6+``MySQL 5.7 or 8.0`[支持更多数据库](https://jeesite.com/docs/technology/#8已支持数据库) 1. 环境准备:`JDK 1.8 or 11、17``Maven 3.6+``MySQL 5.7 or 8.0`[支持更多数据库](https://jeesite.com/docs/technology/#8已支持数据库)
2. 执行命令:`git clone https://gitee.com/thinkgem/jeesite4.git` 下载源码master分支 2. 执行命令:`git clone https://gitee.com/thinkgem/jeesite4.git` 下载源码master分支
3. 打开文件:`/web/src/main/resources/config/application.yml` 配置JDBC连接 3. 打开文件:`/web/src/main/resources/config/application.yml` 配置JDBC连接
4. 执行脚本:`/web/bin/init-data.bat` 初始化数据库 4. 执行脚本:`/web/bin/init-data.bat` 初始化数据库

View File

@@ -6,7 +6,7 @@
<parent> <parent>
<groupId>com.jeesite</groupId> <groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId> <artifactId>jeesite-parent</artifactId>
<version>4.3.2-SNAPSHOT</version> <version>4.3.3-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath> <relativePath>../parent/pom.xml</relativePath>
</parent> </parent>

View File

@@ -26,6 +26,12 @@ import org.springframework.core.NamedThreadLocal;
public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils { public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
private static Logger logger = LoggerFactory.getLogger(ObjectUtils.class); private static Logger logger = LoggerFactory.getLogger(ObjectUtils.class);
private static final boolean isJavaSerialize;
static {
String[] ver = StringUtils.split(System.getProperty("java.version"), '.');
isJavaSerialize = ver.length > 0 && Integer.parseInt(ver[0]) > 1;
}
/** /**
* 转换为 Double 类型 * 转换为 Double 类型
@@ -155,8 +161,12 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
* @return * @return
*/ */
public static byte[] serialize(Object object) { public static byte[] serialize(Object object) {
if (isJavaSerialize) {
return ObjectUtils.serializeJava(object);
}else {
return ObjectUtils.serializeFst(object); return ObjectUtils.serializeFst(object);
} }
}
/** /**
* 反序列化对象 * 反序列化对象
@@ -164,8 +174,12 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
* @return * @return
*/ */
public static Object unserialize(byte[] bytes) { public static Object unserialize(byte[] bytes) {
if (isJavaSerialize) {
return ObjectUtils.unserializeJava(bytes);
}else {
return ObjectUtils.unserializeFst(bytes); return ObjectUtils.unserializeFst(bytes);
} }
}
/** /**
* 序列化对象 * 序列化对象
@@ -212,7 +226,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
} }
} }
long totalTime = System.currentTimeMillis() - beginTime; long totalTime = System.currentTimeMillis() - beginTime;
if (totalTime > 3000){ if (totalTime > 3000 && object != null){
logger.warn(object.getClass() + " unserialize time: " + TimeUtils.formatDateAgo(totalTime)); logger.warn(object.getClass() + " unserialize time: " + TimeUtils.formatDateAgo(totalTime));
} }
return object; return object;
@@ -255,7 +269,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
long beginTime = System.currentTimeMillis(); long beginTime = System.currentTimeMillis();
Object object = fstConfiguration.get().asObject(bytes); Object object = fstConfiguration.get().asObject(bytes);
long totalTime = System.currentTimeMillis() - beginTime; long totalTime = System.currentTimeMillis() - beginTime;
if (totalTime > 3000){ if (totalTime > 3000 && object != null){
logger.warn(object.getClass() + " fst unserialize time: " + TimeUtils.formatDateAgo(totalTime)); logger.warn(object.getClass() + " fst unserialize time: " + TimeUtils.formatDateAgo(totalTime));
} }
return object; return object;

View File

@@ -10,7 +10,6 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
background: -ms-linear-gradient(left, #2684f5, #1890ff); background: -ms-linear-gradient(left, #2684f5, #1890ff);
background: -moz-linear-gradient(left top, #2684f5 0%, #1890ff 100%); background: -moz-linear-gradient(left top, #2684f5 0%, #1890ff 100%);
background: -o-linear-gradient(#1890ff, #2684f5); background: -o-linear-gradient(#1890ff, #2684f5);
filter: progid:DXImageTransform.Microsoft.gradient(GradientType = 1,startColorstr='#1890ff', endColorstr='#2684f5');
} }
.main-header .navbar .nav > li > a { .main-header .navbar .nav > li > a {
color: #ffffff; color: #ffffff;
@@ -164,9 +163,9 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.sidebar-menu {padding:0 8px 0 7px;} .sidebar-menu {padding:0 8px 0 7px;}
.sidebar-menu li>a>.pull-right-container {left:0;} .sidebar-menu li>a>.pull-right-container {left:0;}
.sidebar-menu .treeview-item.active > a {color:#1890ff;background-color:#e1f1ff;border-right:0;border-radius:6px;} .sidebar-menu .treeview-item.active > a {color:#1890ff;background-color:#e7f4ff;border-right:0;border-radius:6px;}
.content-wrapper, .right-side, body {background-color:#f8f8f8;} .content-wrapper, .right-side, body {background-color:#f0f2f5;}
.btn-primary, .btn-primary:hover, .btn-primary:active, .btn-primary, .btn-primary:hover, .btn-primary:active,
.btn-primary.hover, .btn-primary.focus, .btn-primary:focus, .btn-primary.hover, .btn-primary.focus, .btn-primary:focus,
@@ -180,7 +179,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1890ff;} .form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1890ff;}
.form-unit {border-bottom: 1px solid #eee;} .form-unit {border-bottom: 1px solid #eee;}
.tabpanel_mover li {padding:1px 16px 2px 3px;margin:6px 0 6px 6px;border:1px solid #e4e4e4;border-radius:3px;background:#fff;} .tabpanel_mover li {height:26px;padding:1px 16px 2px 3px;margin:6px 0 6px 6px;border:1px solid #e4e4e4;border-radius:3px;background:#fff;}
.tabpanel_mover li.active {background-color:#3aa0ff;box-shadow:0 0 5px #e6e6e6;} .tabpanel_mover li.active {background-color:#3aa0ff;box-shadow:0 0 5px #e6e6e6;}
.tabpanel_mover li.active div {color:#fff;} .tabpanel_mover li.active div {color:#fff;}
.tabpanel_mover li .closer {font:11px/1 FontAwesome;top:6px;right:2px;background:none;opacity:0.7;} .tabpanel_mover li .closer {font:11px/1 FontAwesome;top:6px;right:2px;background:none;opacity:0.7;}
@@ -218,5 +217,5 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.ui-jqgrid tr.ui-row-rtl td, .ui-jqgrid tr.ui-row-ltr td:last-child {border-color:#eaeaea;} .ui-jqgrid tr.ui-row-rtl td, .ui-jqgrid tr.ui-row-ltr td:last-child {border-color:#eaeaea;}
.ui-state-hover td, .ui-widget-content .ui-state-hover td, .ui-widget-header .ui-state-hover td, .ui-state-hover td, .ui-widget-content .ui-state-hover td, .ui-widget-header .ui-state-hover td,
.ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {background:#f5f5f5;} .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {background:#f5f5f5;}
.ui-jqgrid tr.ui-state-highlight.ui-row-ltr td {background-color:#e6f7ff;} .ui-jqgrid tr.ui-state-highlight.ui-row-ltr td {background-color:#ecf9ff;}
/* .ui-jqgrid tr.ui-row-ltr td {border-right:0!important;} 解开注释,可去除表格单元格的竖边框线 */ /* .ui-jqgrid tr.ui-row-ltr td {border-right:0!important;} 解开注释,可去除表格单元格的竖边框线 */

View File

@@ -0,0 +1,241 @@
/*
* http://jeesite.com
*/
a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sortable {
color:#1890ff;
}
.main-header .navbar {
background: #1890ff;
background: -webkit-gradient(linear, left bottom, right top, color-stop(0, #2684f5), color-stop(1, #1890ff));
background: -ms-linear-gradient(left, #2684f5, #1890ff);
background: -moz-linear-gradient(left top, #2684f5 0%, #1890ff 100%);
background: -o-linear-gradient(#1890ff, #2684f5);
}
.main-header .navbar .nav > li > a {
color: #ffffff;
}
.main-header .navbar .nav > li > a:hover,
.main-header .navbar .nav > li > a:active,
.main-header .navbar .nav > li > a:focus,
.main-header .navbar .nav .open > a,
.main-header .navbar .nav .open > a:hover,
.main-header .navbar .nav .open > a:focus,
.main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.main-header .navbar .sidebar-toggle {
color: #ffffff;
}
.main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.main-header .navbar .sidebar-toggle {
color: #fff;
}
.main-header .navbar .sidebar-toggle:hover {
background-color: #367fa9;
}
@media (max-width: 767px) {
.main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.main-header .navbar .dropdown-menu li a {
color: #fff;
}
.main-header .navbar .dropdown-menu li a:hover {
background: #367fa9;
}
}
.main-header .logo {
background-color: transparent;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.main-header .logo:hover {
background-color: #1890ff;
}
.main-header li.user-header {
background-color: #1890ff;
}
.content-header {
background: transparent;
}
.sidebar,
.left-side {
background-color: #ffffff;
}
.content-wrapper,
.main-footer {
border-left: 1px solid #eeeeee;
}
.user-panel > .info,
.user-panel > .info > a {
color: #555;
}
.sidebar-menu > li {
-webkit-transition: border-left-color 0.3s ease;
-o-transition: border-left-color 0.3s ease;
transition: border-left-color 0.3s ease;
}
.sidebar-menu > li.header {
color: #848484;
background: #f8f8f8;
}
.sidebar-menu > li > a {
border-left: 3px solid transparent;
font-weight: 600;
}
.sidebar-menu > li:hover > a,
.sidebar-menu > li.active > a {
color: #000;
background: #ffffff;
}
.sidebar-menu > li.active {
border-left-color: #1890ff;
}
.sidebar-menu > li.active > a {
font-weight: 600;
}
.sidebar-menu > li.menu-open > a,
.sidebar-menu > li > .treeview-menu {
background: #ffffff;
}
.sidebar a {
color: #555;
}
.sidebar a:hover {
text-decoration: none;
}
.treeview-menu > li > a {
color: #555;
}
.treeview-menu > li.active > a,
.treeview-menu > li > a:hover {
color: #000;
}
.sidebar-form {
border-radius: 3px;
border: 1px solid #d2d6de;
margin: 10px 10px;
}
.sidebar-form input[type="text"],
.sidebar-form .btn {
box-shadow: none;
background-color: #fff;
border: 1px solid transparent;
height: 35px;
}
.sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.sidebar-form input[type="text"]:focus,
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.main-footer {
border-top-color: #d2d6de;
}
.skin-blue.layout-top-nav .main-header > .logo {
background-color: #1890ff;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.skin-blue.layout-top-nav .main-header > .logo:hover {
background-color: #3b8ab8;
}
.sidebar-menu {padding:0 8px 0 7px;}
.sidebar-menu li>a>.pull-right-container {left:0;}
.sidebar-menu .treeview-item.active > a {color:#1890ff;background-color:#e7f4ff;border-right:0;border-radius:6px;}
.btn-primary, .btn-primary:hover, .btn-primary:active,
.btn-primary.hover, .btn-primary.focus, .btn-primary:focus,
.btn-primary.active.focus, .btn-primary.active:focus, .btn-primary.active:hover,
.btn-primary:active.focus, .btn-primary:active:focus, .btn-primary:active:hover,
.open>.dropdown-toggle.btn-primary.focus, .open>.dropdown-toggle.btn-primary:focus,
.open>.dropdown-toggle.btn-primary:hover, .layui-layer-btn .layui-layer-btn0,
.select2-container--default .select2-selection--multiple .select2-selection__choice,
.select2-container--default .select2-results__option--highlighted[aria-selected],
.wup_container .placeholder .webuploader-pick {background-color:#1890ff!important;border-color:#1890ff;}
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1890ff;}
.form-unit {border-bottom: 1px solid #eee;}
.box-main>.box-header {border-bottom-color:#eeeeee;}
.box-main>.box-header .box-title .fa {color:#1890ff;}
.nav-tabs-custom>.nav-tabs>li.active {border-top-color:#3aa0ff;}
.form-control:focus,.select2-container--default.select2-container--focus .select2-selection--multiple,
.select2-container--default .select2-search--dropdown .select2-search__field,
.select2-container--default.select2-container--focus .select2-selection--single,
.select2-container--default.select2-container--focus .select2-selection--multiple {border-color:#40a9ff!important;box-shadow:0 0 0 2px rgba(24,144,255,.2);}
.table thead tr, .ui-jqgrid-htable thead tr, .ui-jqgrid-hdiv, .ui-jqgrid-hbox {background-color:#f6f6f6;}
.ui-jqgrid .ui-jqgrid-htable th.ui-th-column-header, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column,
.ui-jqgrid .ui-jqgrid-labels th, .ui-jqgrid .ui-widget-content, .ui-jqgrid tr.ui-row-ltr td,
.ui-jqgrid tr.ui-row-rtl td, .ui-jqgrid tr.ui-row-ltr td:last-child {border-color:#eaeaea;}
.ui-state-hover td, .ui-widget-content .ui-state-hover td, .ui-widget-header .ui-state-hover td,
.ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {background:#f5f5f5;}
.ui-jqgrid tr.ui-state-highlight.ui-row-ltr td {background-color:#ecf9ff;}
/* .ui-jqgrid tr.ui-row-ltr td {border-right:0!important;} 解开注释,可去除表格单元格的竖边框线 */
/* 内容页面,内边距风格 */
.content-wrapper, .right-side, body, iframe {background-color:#f0f2f5;}
.ui-layout-container, .main-content {padding:15px 15px 13px 15px;}
.ui-layout-resizer {background:transparent;}
.ui-layout-pane>.main-content {padding:0;}
.ui-layout-content>.wrapper>.main-content {padding:0;}
.box-main,.nav-main,.ui-layout-pane{border-radius:5px;}
/* 页签-无界风格 */
.tabpanel_mover li {height:26px;padding:2px 16px 2px 3px;margin:11px 0 0px 9px;border:0;border-radius:4px;background:#fff;}
.tabpanel_mover li .title {padding-left:0;text-align:center;}
.tabpanel_mover li.active {background-color:#3aa0ff;}
.tabpanel_mover li.active div {color:#fff;}
.tabpanel_mover li .closer {font:11px/1 FontAwesome;top:6px;right:4px;background:none;opacity:0.7;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform:scale(1.2);-webkit-transform:scale(1.2);
-o-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2);color:#d30606;}
.tabpanel_mover li.active .closer:hover {color:#fff;opacity:0.9;}
.tabpanel_tab_content {background-color:transparent;border-bottom-color:#eeeeee;overflow:visible;}
.tabpanel_tab_content .tabpanel_left_scroll, .tabpanel_tab_content .tabpanel_right_scroll {top:10px;}
.tabpanel_tab_content .tabpanel_mover {margin:0 5px;}
.tabpanel_content .html_content {margin-top:-1px;}
/* 页签-经典风格
.tabpanel_mover li {height:26px;padding:1px 16px 2px 3px;margin:6px 0 6px 6px;border:1px solid #e4e4e4;border-radius:3px;background:#fff;}
.tabpanel_mover li.active {background-color:#3aa0ff;box-shadow:0 0 5px #e6e6e6;}
.tabpanel_mover li.active div {color:#fff;}
.tabpanel_mover li .closer {font:11px/1 FontAwesome;top:6px;right:2px;background:none;opacity:0.7;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform:scale(1.2);-webkit-transform:scale(1.2);
-o-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2);color:#d30606;}
.tabpanel_mover li.active .closer:hover {color:#fff;opacity:0.9;}
.tabpanel_tab_content {background-color:#fafafa;border-bottom-color:#eeeeee;overflow:visible;} */
/* 页签-下划线风格
.tabpanel_mover li {background:#fff;border:0;padding:5px 16px 5px 3px;}
.tabpanel_mover li .title {padding-left:0;text-align:center;}
.tabpanel_mover li.active {background-color:#fff;border-bottom:2px solid #3aa0ff;}
.tabpanel_mover li.active div {color:#0975d9;}
.tabpanel_mover li .closer {background:none;font:11px/1 FontAwesome;opacity:0.6;right:3px;top:10px;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform: scale(1.2);-webkit-transform: scale(1.2);
-o-transform: scale(1.2);-ms-transform: scale(1.2);transform: scale(1.2);color:#d30606;}
.tabpanel_tab_content {height:32px;line-height:32px;border:0;background-color:#fff;overflow:visible;}
.tabpanel_tab_content .tabpanel_move_content {min-height:32px;}
.tabpanel_tab_content .tabpanel_left_scroll, .tabpanel_tab_content .tabpanel_right_scroll {top:4px;} */

View File

@@ -10,7 +10,6 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
background: -ms-linear-gradient(left, #1951be, #2780ec); background: -ms-linear-gradient(left, #1951be, #2780ec);
background: -moz-linear-gradient(left top, #1951be 0%, #2780ec 100%); background: -moz-linear-gradient(left top, #1951be 0%, #2780ec 100%);
background: -o-linear-gradient(#2780ec, #1951be); background: -o-linear-gradient(#2780ec, #1951be);
filter: progid:DXImageTransform.Microsoft.gradient(GradientType = 1,startColorstr='#2780ec', endColorstr='#1951be');
} }
.main-header .navbar .nav > li > a { .main-header .navbar .nav > li > a {
color: #ffffff; color: #ffffff;
@@ -166,7 +165,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.sidebar-menu li>a>.pull-right-container {left:0;} .sidebar-menu li>a>.pull-right-container {left:0;}
.sidebar-menu .treeview-item.active > a {color:#2a50ec;background-color:#edf2fc;border-right:0;border-radius:6px;} .sidebar-menu .treeview-item.active > a {color:#2a50ec;background-color:#edf2fc;border-right:0;border-radius:6px;}
.content-wrapper, .right-side, body {background-color:#f8f8f8;} .content-wrapper, .right-side, body {background-color:#f0f2f5;}
.btn-primary, .btn-primary:hover, .btn-primary:active, .btn-primary, .btn-primary:hover, .btn-primary:active,
.btn-primary.hover, .btn-primary.focus, .btn-primary:focus, .btn-primary.hover, .btn-primary.focus, .btn-primary:focus,
@@ -180,7 +179,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1e5edb;} .form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1e5edb;}
.form-unit {border-bottom: 1px solid #eee;} .form-unit {border-bottom: 1px solid #eee;}
.tabpanel_mover li {padding:1px 16px 2px 3px;margin:6px 0 6px 6px;border:1px solid #e4e4e4;border-radius:3px;background:#fff;} .tabpanel_mover li {height:26px;padding:1px 16px 2px 3px;margin:6px 0 6px 6px;border:1px solid #e4e4e4;border-radius:3px;background:#fff;}
.tabpanel_mover li.active {background-color:#1e5edb;box-shadow:0 0 5px #e6e6e6;} .tabpanel_mover li.active {background-color:#1e5edb;box-shadow:0 0 5px #e6e6e6;}
.tabpanel_mover li.active div {color:#fff;} .tabpanel_mover li.active div {color:#fff;}
.tabpanel_mover li .closer {font:11px/1 FontAwesome;top:6px;right:2px;background:none;opacity:0.7;} .tabpanel_mover li .closer {font:11px/1 FontAwesome;top:6px;right:2px;background:none;opacity:0.7;}

View File

@@ -0,0 +1,248 @@
/*
* http://jeesite.com
*/
a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sortable {
color:#1e5edb;
}
.main-header .navbar {
background: #1951be;
background: -webkit-gradient(linear, left bottom, right top, color-stop(0, #1951be), color-stop(1, #2780ec));
background: -ms-linear-gradient(left, #1951be, #2780ec);
background: -moz-linear-gradient(left top, #1951be 0%, #2780ec 100%);
background: -o-linear-gradient(#2780ec, #1951be);
}
.main-header .navbar .nav > li > a {
color: #ffffff;
}
.main-header .navbar .nav > li > a:hover,
.main-header .navbar .nav > li > a:active,
.main-header .navbar .nav > li > a:focus,
.main-header .navbar .nav .open > a,
.main-header .navbar .nav .open > a:hover,
.main-header .navbar .nav .open > a:focus,
.main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.main-header .navbar .sidebar-toggle {
color: #ffffff;
}
.main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.main-header .navbar .sidebar-toggle {
color: #fff;
}
.main-header .navbar .sidebar-toggle:hover {
background-color: #367fa9;
}
@media (max-width: 767px) {
.main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.main-header .navbar .dropdown-menu li a {
color: #fff;
}
.main-header .navbar .dropdown-menu li a:hover {
background: #367fa9;
}
}
.main-header .logo {
background-color: transparent;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.main-header .logo:hover {
background-color: #1951be;
}
.main-header li.user-header {
background-color: #1951be;
}
.content-header {
background: transparent;
}
.sidebar,
.left-side {
background-color: #ffffff;
}
.content-wrapper,
.main-footer {
border-left: 1px solid #eeeeee;
}
.user-panel > .info,
.user-panel > .info > a {
color: #555;
}
.sidebar-menu > li {
-webkit-transition: border-left-color 0.3s ease;
-o-transition: border-left-color 0.3s ease;
transition: border-left-color 0.3s ease;
}
.sidebar-menu > li.header {
color: #848484;
background: #f8f8f8;
}
.sidebar-menu > li > a {
border-left: 3px solid transparent;
font-weight: 600;
}
.sidebar-menu > li:hover > a,
.sidebar-menu > li.active > a {
color: #000;
background: #ffffff;
}
.sidebar-menu > li.active {
border-left-color: #1e5edb;
}
.sidebar-menu > li.active > a {
font-weight: 600;
}
.sidebar-menu > li.menu-open > a,
.sidebar-menu > li > .treeview-menu {
background: #ffffff;
}
.sidebar a {
color: #555;
}
.sidebar a:hover {
text-decoration: none;
}
.treeview-menu > li > a {
color: #555;
}
.treeview-menu > li.active > a,
.treeview-menu > li > a:hover {
color: #000;
}
.sidebar-form {
border-radius: 3px;
border: 1px solid #d2d6de;
margin: 10px 10px;
}
.sidebar-form input[type="text"],
.sidebar-form .btn {
box-shadow: none;
background-color: #fff;
border: 1px solid transparent;
height: 35px;
}
.sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.sidebar-form input[type="text"]:focus,
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.main-footer {
border-top-color: #d2d6de;
}
.skin-blue.layout-top-nav .main-header > .logo {
background-color: #1e5edb;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.skin-blue.layout-top-nav .main-header > .logo:hover {
background-color: #3b8ab8;
}
.sidebar-menu {padding:0 8px 0 7px;}
.sidebar-menu li>a>.pull-right-container {left:0;}
.sidebar-menu .treeview-item.active > a {color:#2a50ec;background-color:#edf2fc;border-right:0;border-radius:6px;}
.btn-primary, .btn-primary:hover, .btn-primary:active,
.btn-primary.hover, .btn-primary.focus, .btn-primary:focus,
.btn-primary.active.focus, .btn-primary.active:focus, .btn-primary.active:hover,
.btn-primary:active.focus, .btn-primary:active:focus, .btn-primary:active:hover,
.open>.dropdown-toggle.btn-primary.focus, .open>.dropdown-toggle.btn-primary:focus,
.open>.dropdown-toggle.btn-primary:hover, .layui-layer-btn .layui-layer-btn0,
.select2-container--default .select2-selection--multiple .select2-selection__choice,
.select2-container--default .select2-results__option--highlighted[aria-selected],
.wup_container .placeholder .webuploader-pick {background-color:#1e5edb!important;border-color:#1e5edb!important;}
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1e5edb;}
.form-unit {border-bottom: 1px solid #eee;}
/* .main-content {padding:10px;}
.ui-layout-container {padding:10px;}
.ui-layout-resizer {background:transparent;}
.ui-layout-pane {box-shadow:0 0 5px #e0e0e0;}
.ui-layout-pane>.main-content {padding:0;}
.ui-layout-content>.wrapper>.main-content {padding:0;}
.box-main,.nav-main{border-radius:3px;box-shadow:0 0 5px #e0e0e0;} 解开注释,可给内容页面,添加内边距样式 */
.box-main>.box-header {border-bottom-color:#eeeeee;}
.box-main>.box-header .box-title .fa {color:#1e5edb;}
.nav-tabs-custom>.nav-tabs>li.active {border-top-color:#1e5edb;}
.form-control:focus,.select2-container--default.select2-container--focus .select2-selection--multiple,
.select2-container--default .select2-search--dropdown .select2-search__field,
.select2-container--default.select2-container--focus .select2-selection--single,
.select2-container--default.select2-container--focus .select2-selection--multiple {border-color:#557bfa!important;box-shadow:0 0 0 2px rgba(24,80,236,.2);}
.table thead tr, .ui-jqgrid-htable thead tr, .ui-jqgrid-hdiv, .ui-jqgrid-hbox {background-color:#f6f6f6;}
.ui-jqgrid .ui-jqgrid-htable th.ui-th-column-header, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column,
.ui-jqgrid .ui-jqgrid-labels th, .ui-jqgrid .ui-widget-content, .ui-jqgrid tr.ui-row-ltr td,
.ui-jqgrid tr.ui-row-rtl td, .ui-jqgrid tr.ui-row-ltr td:last-child {border-color:#eaeaea;}
.ui-state-hover td, .ui-widget-content .ui-state-hover td, .ui-widget-header .ui-state-hover td,
.ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {background:#f5f5f5;}
.ui-jqgrid tr.ui-state-highlight.ui-row-ltr td {background-color:#f0f5ff;}
/* .ui-jqgrid tr.ui-row-ltr td {border-right:0!important;} 解开注释,可去除表格单元格的竖边框线 */
/* 内容页面,内边距风格 */
.content-wrapper, .right-side, body, iframe {background-color:#f0f2f5;}
.ui-layout-container, .main-content {padding:15px 15px 13px 15px;}
.ui-layout-resizer {background:transparent;}
.ui-layout-pane>.main-content {padding:0;}
.ui-layout-content>.wrapper>.main-content {padding:0;}
.box-main,.nav-main,.ui-layout-pane{border-radius:5px;}
/* 页签-无界风格 */
.tabpanel_mover li {height:26px;padding:2px 16px 2px 3px;margin:11px 0 0px 9px;border:0;border-radius:4px;background:#fff;}
.tabpanel_mover li .title {padding-left:0;text-align:center;}
.tabpanel_mover li.active {background-color:#316ee6;}
.tabpanel_mover li.active div {color:#fff;}
.tabpanel_mover li .closer {font:11px/1 FontAwesome;top:6px;right:4px;background:none;opacity:0.7;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform:scale(1.2);-webkit-transform:scale(1.2);
-o-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2);color:#d30606;}
.tabpanel_mover li.active .closer:hover {color:#fff;opacity:0.9;}
.tabpanel_tab_content {background-color:transparent;border-bottom-color:#eeeeee;overflow:visible;}
.tabpanel_tab_content .tabpanel_left_scroll, .tabpanel_tab_content .tabpanel_right_scroll {top:10px;}
.tabpanel_tab_content .tabpanel_mover {margin:0 5px;}
.tabpanel_content .html_content {margin-top:-1px;}
/* 页签-经典风格
.tabpanel_mover li {height:26px;padding:1px 16px 2px 3px;margin:6px 0 6px 6px;border:1px solid #e4e4e4;border-radius:3px;background:#fff;}
.tabpanel_mover li.active {background-color:#1e5edb;box-shadow:0 0 5px #e6e6e6;}
.tabpanel_mover li.active div {color:#fff;}
.tabpanel_mover li .closer {font:11px/1 FontAwesome;top:6px;right:2px;background:none;opacity:0.7;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform:scale(1.2);-webkit-transform:scale(1.2);
-o-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2);color:#d30606;}
.tabpanel_mover li.active .closer:hover {color:#fff;opacity:0.9;}
.tabpanel_tab_content {background-color:#fafafa;border-bottom-color:#eeeeee;overflow:visible;} */
/* 页签-下划线风格
.tabpanel_mover li {background:#fff;border:0;padding:5px 16px 5px 3px;}
.tabpanel_mover li .title {padding-left:0;text-align:center;}
.tabpanel_mover li.active {background-color:#fff;border-bottom:2px solid #1e5edb;}
.tabpanel_mover li.active div {color:#0975d9;}
.tabpanel_mover li .closer {background:none;font:11px/1 FontAwesome;opacity:0.6;right:3px;top:10px;}
.tabpanel_mover li .closer:before {content:"\f00d";}
.tabpanel_mover li .closer:hover {background:none;-moz-transform: scale(1.2);-webkit-transform: scale(1.2);
-o-transform: scale(1.2);-ms-transform: scale(1.2);transform: scale(1.2);color:#d30606;}
.tabpanel_tab_content {height:32px;line-height:32px;border:0;background-color:#fff;overflow:visible;}
.tabpanel_tab_content .tabpanel_move_content {min-height:32px;}
.tabpanel_tab_content .tabpanel_left_scroll, .tabpanel_tab_content .tabpanel_right_scroll {top:4px;} */

View File

@@ -1,174 +0,0 @@
/** 图标字体 **/
@font-face {font-family:'laydate-icon';
src:url('./font/iconfont.eot');
src:url('./font/iconfont.eot#iefix') format('embedded-opentype'),
url('./font/iconfont.svg#iconfont') format('svg'),
url('./font/iconfont.woff') format('woff'),
url('./font/iconfont.ttf') format('truetype');
}
.laydate-icon{
font-family:"laydate-icon"!important;
font-size:16px;
font-style:normal;
-webkit-font-smoothing:antialiased;
-moz-osx-font-smoothing:grayscale;
}
/**
@Name:laydata
@Author:贤心
**/
html #layuicss-laydate{display:none;position:absolute;width:1989px;}
/* 初始化 */
.layui-laydate *{margin:0;padding:0;}
/* 主体结构 */
.layui-laydate, .layui-laydate *{box-sizing:border-box;}
.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:0.3s;animation-duration:0.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;}
.layui-laydate-main{width:260px;}
.layui-laydate-header *,
.layui-laydate-content td,
.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s;}
@-webkit-keyframes laydate-upbit{ /* 微微往上滑入 */
from {-webkit-transform:translate3d(0, 20px, 0);opacity:0.3;}
to {-webkit-transform:translate3d(0, 0, 0); opacity:1;}
}
@keyframes laydate-upbit{
from {transform:translate3d(0, 20px, 0); opacity:0.3;}
to {transform:translate3d(0, 0, 0); opacity:1;}
}
.layui-laydate{-webkit-animation-name:laydate-upbit;animation-name:laydate-upbit;}
.layui-laydate-static{ position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none;}
/* 展开年月列表时 */
.laydate-ym-show .laydate-prev-m,
.laydate-ym-show .laydate-next-m{display:none!important;}
.laydate-ym-show .laydate-prev-y,
.laydate-ym-show .laydate-next-y{display:inline-block!important;}
.laydate-ym-show .laydate-set-ym span[lay-type="month"]{display:none!important;}
/* 展开时间列表时 */
.laydate-time-show .layui-laydate-header .layui-icon,
.laydate-time-show .laydate-set-ym span[lay-type="year"],
.laydate-time-show .laydate-set-ym span[lay-type="month"]{display:none!important;}
/* 头部结构 */
.layui-laydate-header{position:relative;line-height:22px;padding:6px 50px 5px;}
.layui-laydate-header *{display:inline-block;vertical-align:bottom;}
.layui-laydate-header i{position:absolute;top:6px;padding:0 2px;color:#999;font-size:14px;cursor:pointer;}
.layui-laydate-header i.laydate-prev-y{left:15px;}
.layui-laydate-header i.laydate-prev-m{left:45px;}
.layui-laydate-header i.laydate-next-y{right:15px;}
.layui-laydate-header i.laydate-next-m{right:45px;}
.laydate-set-ym{width:100%;text-align:center;box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;}
.laydate-set-ym span{padding:0 5px;cursor:pointer;}
.laydate-time-text{cursor:default!important;}
/* 主体结构 */
.layui-laydate-content{position:relative;padding:5px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;}
.layui-laydate-content table{border-collapse:collapse;border-spacing:0;}
.layui-laydate-content th,
.layui-laydate-content td{width:36px;height:30px;padding:0px;text-align:center;}
.layui-laydate-content th{font-weight:400;}
.layui-laydate-content td{position:relative;cursor:pointer;}
.laydate-day-mark{position:absolute;left:0;top:0;width:100%;height:100%;line-height:30px;font-size:12px;overflow:hidden;}
.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%;}
/* 底部结构 */
.layui-laydate-footer{position:relative;height:36px;line-height:22px;padding:6px 15px;}
.layui-laydate-footer span{margin-right:15px;display:inline-block;cursor:pointer;font-size:12px;}
.layui-laydate-footer span:hover{color:#08c;}
.laydate-footer-btns{position:absolute;right:5px;top:5px;}
.laydate-footer-btns span{margin:0 0 0 3px;padding:0 8px;border:1px solid #C9C9C9;background-color:#fff; white-space:nowrap;vertical-align:top;border-radius:4px;}
/* 年月列表 */
.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;box-sizing:border-box;background-color:#fff;}
.layui-laydate-list>li{position:relative;display:inline-block;width:33.3%;height:36px;line-height:36px;margin:3px 0;vertical-align:middle;text-align:center;cursor:pointer;}
.laydate-month-list>li{width:25%;margin:17px 0;}
.laydate-time-list{}
.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default;}
.laydate-time-list p{position:relative;top:-4px;line-height:29px;}
.laydate-time-list ol{height:181px;overflow:hidden;}
.laydate-time-list>li:hover ol{overflow-y:auto;}
.laydate-time-list ol li{width:130%;padding-left:27px;line-height:30px;text-align:left;cursor:pointer;}
/* 提示 */
.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px;color:#FF5722;}
/* 双日历 */
.layui-laydate-range{width:523px;}
.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle;}
.layui-laydate-range .laydate-main-list-0 .laydate-next-m,
.layui-laydate-range .laydate-main-list-0 .laydate-next-y,
.layui-laydate-range .laydate-main-list-1 .laydate-prev-y,
.layui-laydate-range .laydate-main-list-1 .laydate-prev-m{display:none;}
.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:1px solid #e2e2e2;}
/* 默认简约主题 */
.layui-laydate, .layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);border-radius:5px;background-color:#fff;color:#666;}
.layui-laydate-header{border-bottom:1px solid #e2e2e2;}
.layui-laydate-header i:hover,
.layui-laydate-header span:hover{color:#08c;}
.layui-laydate-content{border-top:none 0;border-bottom:none 0;}
.layui-laydate-content th{color:#333;}
.layui-laydate-content td{color:#666;}
.layui-laydate-content td.laydate-selected{background-color:#c2eaff;}
.laydate-selected:hover{background-color:#c2eaff!important;}
.layui-laydate-content td:hover,
.layui-laydate-list li:hover{background-color:#eaeaea;color:#333;}
.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0;}
.laydate-time-list li:first-child ol{border-left-width:1px;}
.laydate-time-list>li:hover{background:none;}
.layui-laydate-content .laydate-day-prev,
.layui-laydate-content .laydate-day-next{color:#d2d2d2;}
.laydate-selected.laydate-day-prev,
.laydate-selected.laydate-day-next{background-color:#f8f8f8!important;}
.layui-laydate-footer{border-top:1px solid #e2e2e2;}
.layui-laydate-hint{color:#FF5722;}
.laydate-day-mark::after{background-color:#08c;}
.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none;}
.layui-laydate-footer span[lay-type="date"]{color:#08c;}
.layui-laydate .layui-this{background-color:#08c!important;color:#fff!important;}
.layui-laydate .laydate-btns-confirm{background-color:#139ce0;border:1px solid #139ce0;color:#fff;}
.layui-laydate .laydate-btns-confirm:hover{background-color:#08c;color:#fff;}
.layui-laydate .laydate-disabled,
.layui-laydate .laydate-disabled:hover{background:none!important;color:#d2d2d2!important;border-color:#d2d2d2;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;}
/* 墨绿/自定义背景色主题 */
.laydate-theme-molv{border:none;}
.laydate-theme-molv.layui-laydate-range{width:548px}
.laydate-theme-molv .layui-laydate-main{width:274px;}
.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688;}
.laydate-theme-molv .layui-laydate-header i,
.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6;}
.laydate-theme-molv .layui-laydate-header i:hover,
.laydate-theme-molv .layui-laydate-header span:hover{color:#fff;}
.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none;}
.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none;}
.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2;}
/* 格子主题 */
.laydate-theme-grid .layui-laydate-content td,
.laydate-theme-grid .layui-laydate-content thead,
.laydate-theme-grid .laydate-year-list>li,
.laydate-theme-grid .laydate-month-list>li{border:1px solid #e2e2e2;}
.laydate-theme-grid .laydate-selected,
.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important;}
.laydate-theme-grid .laydate-selected.laydate-day-prev,
.laydate-theme-grid .laydate-selected.laydate-day-next{color:#d2d2d2!important;}
.laydate-theme-grid .laydate-year-list,
.laydate-theme-grid .laydate-month-list{margin:1px 0 0 1px;}
.laydate-theme-grid .laydate-year-list>li,
.laydate-theme-grid .laydate-month-list>li{margin:0 -1px -1px 0;}
.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px;}
.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px;}

View File

@@ -0,0 +1,171 @@
/** 图标字体 **/
@font-face {font-family: 'laydate-icon';
src: url('./font/iconfont.eot');
src: url('./font/iconfont.eot#iefix') format('embedded-opentype'),
url('./font/iconfont.svg#iconfont') format('svg'),
url('./font/iconfont.woff') format('woff'),
url('./font/iconfont.ttf') format('truetype');
}
.laydate-icon{
font-family:"laydate-icon" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/**
@Name: laydata
**/
html #layuicss-laydate{display: none; position: absolute; width: 1989px;}
/* 初始化 */
.layui-laydate *{margin: 0; padding: 0;}
/* 主体结构 */
.layui-laydate, .layui-laydate *{box-sizing: border-box;}
.layui-laydate{position: absolute; z-index: 66666666; margin: 5px 0; border-radius: 2px; font-size: 14px; -webkit-animation-duration: 0.2s; animation-duration: 0.2s; -webkit-animation-fill-mode: both; animation-fill-mode: both;}
.layui-laydate-main{width: 260px;}
.layui-laydate-header *,
.layui-laydate-content td,
.layui-laydate-list li{transition-duration: .3s; -webkit-transition-duration: .3s;}
/* 微微往下滑入 */
@keyframes laydate-downbit {
0% {opacity: 0.3; transform: translate3d(0, -5px, 0);}
100% {opacity: 1; transform: translate3d(0, 0, 0);}
}
.layui-laydate{animation-name: laydate-downbit;}
.layui-laydate-static{ position: relative; z-index: 0; display: inline-block; margin: 0; -webkit-animation: none; animation: none;}
/* 展开年月列表时 */
.laydate-ym-show .laydate-prev-m,
.laydate-ym-show .laydate-next-m{display: none !important;}
.laydate-ym-show .laydate-prev-y,
.laydate-ym-show .laydate-next-y{display: inline-block !important;}
.laydate-ym-show .laydate-set-ym span[lay-type="month"]{display: none !important;}
/* 展开时间列表时 */
.laydate-time-show .layui-laydate-header .layui-icon,
.laydate-time-show .laydate-set-ym span[lay-type="year"],
.laydate-time-show .laydate-set-ym span[lay-type="month"]{display: none !important;}
/* 头部结构 */
.layui-laydate-header{position: relative; line-height: 22px; padding: 6px 50px 5px;}
.layui-laydate-header *{display: inline-block; vertical-align: bottom;}
.layui-laydate-header i{position: absolute; top: 6px; padding: 0 2px; color: #999; font-size: 14px; cursor: pointer;}
.layui-laydate-header i.laydate-prev-y{left: 15px;}
.layui-laydate-header i.laydate-prev-m{left: 45px;}
.layui-laydate-header i.laydate-next-y{right: 15px;}
.layui-laydate-header i.laydate-next-m{right: 45px;}
.laydate-set-ym{width: 100%; text-align: center; box-sizing: border-box; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}
.laydate-set-ym span{padding: 0 5px; cursor: pointer;}
.laydate-time-text{cursor: default !important;}
/* 主体结构 */
.layui-laydate-content{position: relative; padding: 5px; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none;}
.layui-laydate-content table{border-collapse: collapse; border-spacing: 0;}
.layui-laydate-content th,
.layui-laydate-content td{width: 36px; height: 30px; padding: 5px; text-align: center;}
.layui-laydate-content th{font-weight: 400;}
.layui-laydate-content td{position: relative; cursor: pointer;}
.laydate-day-mark{position: absolute; left: 0; top: 0; width: 100%; line-height: 30px; font-size: 12px; overflow: hidden;}
.laydate-day-mark::after{position: absolute; content:''; right: 2px; top: 2px; width: 5px; height: 5px; border-radius: 50%;}
/* 底部结构 */
.layui-laydate-footer{position: relative; height: 36px; line-height: 22px; padding: 6px 15px;}
.layui-laydate-footer span{display: inline-block; vertical-align: top; height: 24px; line-height: 22px; padding: 0 10px; border: 1px solid #C9C9C9; border-radius: 2px; background-color: #fff; font-size: 12px; cursor: pointer; white-space: nowrap; transition: all .3s;}
.layui-laydate-footer span:hover{color: #08c;}
.layui-laydate-footer span.layui-laydate-preview{cursor: default; border-color: transparent !important;}
.layui-laydate-footer span.layui-laydate-preview:hover{color: #666;}
.layui-laydate-footer span:first-child.layui-laydate-preview{padding-left: 0;}
.laydate-footer-btns{position: absolute; right: 5px; top: 5px;}
.laydate-footer-btns span{margin:0 0 0 3px;padding:0 8px;border:1px solid #C9C9C9;background-color:#fff; white-space:nowrap;vertical-align:top;border-radius:4px;}
/* 年月列表 */
.layui-laydate-list{position: absolute; left: 0; top: 0; width: 100%; height: 100%; padding: 10px; box-sizing: border-box; background-color: #fff;}
.layui-laydate-list>li{position: relative; display: inline-block; width: 33.3%; height: 36px; line-height: 36px; margin: 3px 0; vertical-align: middle; text-align: center; cursor: pointer;}
.laydate-month-list>li{width: 25%; margin: 17px 0;}
.laydate-time-list{}
.laydate-time-list>li{height: 100%; margin: 0; line-height: normal; cursor: default;}
.laydate-time-list p{position: relative; top: -4px; line-height: 29px;}
.laydate-time-list ol{height: 181px; overflow: hidden;}
.laydate-time-list>li:hover ol{overflow-y: auto;}
.laydate-time-list ol li{width: 130%; padding-left: 27px; height: 30px; line-height: 30px; text-align: left; cursor: pointer;}
/* 提示 */
.layui-laydate-hint{position: absolute; top: 115px; left: 50%; width: 250px; margin-left: -125px; line-height: 20px; padding: 15px; text-align: center; font-size: 12px; color: #FF5722;}
/* 双日历 */
.layui-laydate-range{width: 546px;}
.layui-laydate-range .layui-laydate-main{display: inline-block; vertical-align: middle;}
.layui-laydate-range .laydate-main-list-1 .layui-laydate-header,
.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left: 1px solid #e2e2e2;}
/* 默认简约主题 */
.layui-laydate, .layui-laydate-hint{border: 1px solid #d2d2d2; box-shadow: 0 2px 4px rgba(0,0,0,.12); background-color: #fff; color: #666;}
.layui-laydate-header{border-bottom: 1px solid #e2e2e2;}
.layui-laydate-header i:hover,
.layui-laydate-header span:hover{color: #08c;}
.layui-laydate-content{border-top: none 0; border-bottom: none 0;}
.layui-laydate-content th{color: #333;}
.layui-laydate-content td{color: #666;}
.layui-laydate-content td.laydate-selected{background-color: #c2eaff;}
.laydate-selected:hover{background-color: #c2eaff !important;}
.layui-laydate-content td:hover,
.layui-laydate-list li:hover{background-color: #eaeaea; color: #333;}
.laydate-time-list li ol{margin: 0; padding: 0; border: 1px solid #e2e2e2; border-left-width: 0;}
.laydate-time-list li:first-child ol{border-left-width: 1px;}
.laydate-time-list>li:hover{background: none;}
.layui-laydate-content .laydate-day-prev,
.layui-laydate-content .laydate-day-next{color: #d2d2d2;}
.laydate-selected.laydate-day-prev,
.laydate-selected.laydate-day-next{background-color: #f8f8f8 !important;}
.layui-laydate-footer{border-top: 1px solid #e2e2e2;}
.layui-laydate-hint{color: #FF5722;}
.laydate-day-mark::after{background-color: #08c;}
.layui-laydate-content td.layui-this .laydate-day-mark::after{display: none;}
.layui-laydate-footer span[lay-type="date"]{color: #08c;}
.layui-laydate .layui-this{background-color: #08c !important; color: #fff !important;}
.layui-laydate .laydate-btns-confirm{background-color:#139ce0;border:1px solid #139ce0;color:#fff;}
.layui-laydate .laydate-btns-confirm:hover{background-color:#08c;color:#fff;}
.layui-laydate .laydate-disabled,
.layui-laydate .laydate-disabled:hover{background:none !important; color: #d2d2d2 !important; cursor: not-allowed !important; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none;}
/* 墨绿/自定义背景色主题 */
.laydate-theme-molv{border: none;}
.laydate-theme-molv.layui-laydate-range{width: 548px}
.laydate-theme-molv .layui-laydate-main{width: 274px;}
.laydate-theme-molv .layui-laydate-header{border: none; background-color: #009688;}
.laydate-theme-molv .layui-laydate-header i,
.laydate-theme-molv .layui-laydate-header span{color: #f6f6f6;}
.laydate-theme-molv .layui-laydate-header i:hover,
.laydate-theme-molv .layui-laydate-header span:hover{color: #fff;}
.laydate-theme-molv .layui-laydate-content{border: 1px solid #e2e2e2; border-top: none; border-bottom: none;}
.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left: none;}
.laydate-theme-molv .layui-laydate-footer{border: 1px solid #e2e2e2;}
/* 格子主题 */
.laydate-theme-grid .layui-laydate-content td,
.laydate-theme-grid .layui-laydate-content thead,
.laydate-theme-grid .laydate-year-list>li,
.laydate-theme-grid .laydate-month-list>li{border: 1px solid #e2e2e2;}
.laydate-theme-grid .laydate-selected,
.laydate-theme-grid .laydate-selected:hover{background-color: #f2f2f2 !important; color: #009688 !important;}
.laydate-theme-grid .laydate-selected.laydate-day-prev,
.laydate-theme-grid .laydate-selected.laydate-day-next{color: #d2d2d2 !important;}
.laydate-theme-grid .laydate-year-list,
.laydate-theme-grid .laydate-month-list{margin: 1px 0 0 1px;}
.laydate-theme-grid .laydate-year-list>li,
.laydate-theme-grid .laydate-month-list>li{margin: 0 -1px -1px 0;}
.laydate-theme-grid .laydate-year-list>li{height: 43px; line-height: 43px;}
.laydate-theme-grid .laydate-month-list>li{height: 71px; line-height: 71px;}

View File

@@ -1,9 +1,7 @@
/**
@Namelayer v3.1.1 Web弹层组件
@Author贤心
@Sitehttp://layer.layui.com
@LicenseMIT
/*!
* layer 3.5.1 通用 Web 弹出层组件
* MIT Licensed
*/ */
;!function(window, undefined){ ;!function(window, undefined){
@@ -22,8 +20,9 @@ var isLayui = window.layui && layui.define, $, win, ready = {
} }
} }
return src || js[last].src; return src || js[last].src;
}(); }()
return jsPath.substring(0, jsPath.lastIndexOf('/') + 1); ,GLOBAL = window.LAYUI_GLOBAL || {};
return GLOBAL.layer_dir || jsPath.substring(0, jsPath.lastIndexOf('/') + 1);
}(), }(),
config: {}, end: {}, minIndex: 0, minLeft: [], config: {}, end: {}, minIndex: 0, minLeft: [],
@@ -38,16 +37,20 @@ var isLayui = window.layui && layui.define, $, win, ready = {
return style[style.getPropertyValue ? 'getPropertyValue' : 'getAttribute'](name); return style[style.getPropertyValue ? 'getPropertyValue' : 'getAttribute'](name);
}, },
//载入CSS配件 //载入 CSS 依赖
link: function(href, fn, cssname){ link: function(href, fn, cssname){
//未设置路径则不主动加载css //未设置路径则不主动加载css
if(!layer.path) return; if(!layer.path) return;
var head = document.getElementsByTagName("head")[0], link = document.createElement('link'); var head = document.getElementsByTagName("head")[0]
,link = document.createElement('link');
if(typeof fn === 'string') cssname = fn; if(typeof fn === 'string') cssname = fn;
var app = (cssname || href).replace(/\.|\//g, ''); var app = (cssname || href).replace(/\.|\//g, '');
var id = 'layuicss-'+ app, timeout = 0; var id = 'layuicss-'+ app
,STAUTS_NAME = 'creating'
,timeout = 0;
link.rel = 'stylesheet'; link.rel = 'stylesheet';
link.href = layer.path + href; link.href = layer.path + href;
@@ -59,19 +62,38 @@ var isLayui = window.layui && layui.define, $, win, ready = {
if(typeof fn !== 'function') return; if(typeof fn !== 'function') return;
//轮询css是否加载完毕 //轮询 css 是否加载完毕
(function poll() { (function poll(status) {
if(++timeout > 8 * 1000 / 100){ var delay = 100
return window.console && console.error('layer.css: Invalid'); ,getLinkElem = document.getElementById(id); //获取动态插入的 link 元素
//如果轮询超过指定秒数,则视为请求文件失败或 css 文件不符合规范
if(++timeout > 10 * 1000 / delay){
return window.console && console.error(app +'.css: Invalid');
}; };
parseInt(ready.getStyle(document.getElementById(id), 'width')) === 1989 ? fn() : setTimeout(poll, 100);
//css 加载就绪
if(parseInt(ready.getStyle(getLinkElem, 'width')) === 1989){
//如果参数来自于初始轮询(即未加载就绪时的),则移除 link 标签状态
if(status === STAUTS_NAME) getLinkElem.removeAttribute('lay-status');
//如果 link 标签的状态仍为「创建中」,则继续进入轮询,直到状态改变,则执行回调
getLinkElem.getAttribute('lay-status') === STAUTS_NAME ? setTimeout(poll, delay) : fn();
} else {
getLinkElem.setAttribute('lay-status', STAUTS_NAME);
setTimeout(function(){
poll(STAUTS_NAME);
}, delay);
}
//parseInt(ready.getStyle(document.getElementById(id), 'width')) === 1989 ? fn() : setTimeout(poll, 1000);
}()); }());
} }
}; };
//默认内置方法。 //默认内置方法。
var layer = { var layer = {
v: '3.1.1', v: '3.5.1',
i18n: { // ThinkGem 国际化支持 i18n: { // ThinkGem 国际化支持
btnOk: '确定', btnOk: '确定',
btnCancel: '取消', btnCancel: '取消',
@@ -97,13 +119,14 @@ var layer = {
layer.path = ready.config.path || layer.path; layer.path = ready.config.path || layer.path;
typeof options.extend === 'string' && (options.extend = [options.extend]); typeof options.extend === 'string' && (options.extend = [options.extend]);
//如果设置了路径,则加载样式
if(ready.config.path) layer.ready(); if(ready.config.path) layer.ready();
if(!options.extend) return this; if(!options.extend) return this;
isLayui isLayui
? layui.addcss('modules/layer/' + options.extend) ? layui.addcss('modules/layer/' + options.extend)
: ready.link('skin/' + options.extend); : ready.link('theme/' + options.extend);
return this; return this;
}, },
@@ -111,7 +134,7 @@ var layer = {
//主体CSS等待事件 //主体CSS等待事件
ready: function(callback){ ready: function(callback){
var cssname = 'layer', ver = '' var cssname = 'layer', ver = ''
,path = (isLayui ? 'modules/layer/' : 'skin/') + 'default/layer.css?v='+ layer.v + ver; ,path = (isLayui ? 'modules/layer/' : 'theme/') + 'default/layer.css?v='+ layer.v + ver;
isLayui ? layui.addcss(path, callback, cssname) : ready.link(path, callback, cssname); isLayui ? layui.addcss(path, callback, cssname) : ready.link(path, callback, cssname);
return this; return this;
}, },
@@ -144,7 +167,6 @@ var layer = {
msg: function(content, options, end){ //最常用提示层 msg: function(content, options, end){ //最常用提示层
var type = typeof options === 'function', rskin = ready.config.skin; var type = typeof options === 'function', rskin = ready.config.skin;
var skin = (rskin ? rskin + ' ' + rskin + '-msg' : '')||'layui-layer-msg'; var skin = (rskin ? rskin + ' ' + rskin + '-msg' : '')||'layui-layer-msg';
skin = skin + ' ' + (options.positionClass || '');
var anim = doms.anim.length - 1; var anim = doms.anim.length - 1;
if(type) end = options; if(type) end = options;
return layer.open($.extend({ return layer.open($.extend({
@@ -187,17 +209,20 @@ var layer = {
shade: false, shade: false,
resize: false, resize: false,
fixed: false, fixed: false,
maxWidth: 210 maxWidth: 260
}, options)); }, options));
} }
}; };
var Class = function(setings){ var Class = function(setings){
var that = this; var that = this, creat = function(){
that.index = ++layer.index;
that.config = $.extend({}, that.config, ready.config, setings);
document.body ? that.creat() : setTimeout(function(){
that.creat(); that.creat();
};
that.index = ++layer.index;
that.config.maxWidth = $(win).width() - 15*2; //初始最大宽度:当前屏幕宽,左右留 15px 边距
that.config = $.extend({}, that.config, ready.config, setings);
document.body ? creat() : setTimeout(function(){
creat();
}, 30); }, 30);
}; };
@@ -207,6 +232,9 @@ Class.pt = Class.prototype;
var doms = ['layui-layer', '.layui-layer-title', '.layui-layer-main', '.layui-layer-dialog', 'layui-layer-iframe', 'layui-layer-content', 'layui-layer-btn', 'layui-layer-close']; var doms = ['layui-layer', '.layui-layer-title', '.layui-layer-main', '.layui-layer-dialog', 'layui-layer-iframe', 'layui-layer-content', 'layui-layer-btn', 'layui-layer-close'];
doms.anim = ['layer-anim-00', 'layer-anim-01', 'layer-anim-02', 'layer-anim-03', 'layer-anim-04', 'layer-anim-05', 'layer-anim-06']; doms.anim = ['layer-anim-00', 'layer-anim-01', 'layer-anim-02', 'layer-anim-03', 'layer-anim-04', 'layer-anim-05', 'layer-anim-06'];
doms.SHADE = 'layui-layer-shade';
doms.MOVE = 'layui-layer-move';
//默认配置 //默认配置
Class.pt.config = { Class.pt.config = {
type: 0, type: 0,
@@ -221,7 +249,8 @@ Class.pt.config = {
zIndex: 19891014, zIndex: 19891014,
maxWidth: 360, maxWidth: 360,
anim: 0, anim: 0,
isOutAnim: true, isOutAnim: true, //退出动画
minStack: true, //最小化堆叠
icon: -1, icon: -1,
moveType: 1, moveType: 1,
resize: true, resize: true,
@@ -241,18 +270,17 @@ Class.pt.vessel = function(conType, callback){
config.zIndex = zIndex; config.zIndex = zIndex;
callback([ callback([
//遮罩 //遮罩
config.shade ? ('<div class="layui-layer-shade" id="layui-layer-shade'+ times +'" times="'+ times +'" style="'+ ('z-index:'+ (zIndex-1) +'; ') +'"></div>') : '', config.shade ? ('<div class="'+ doms.SHADE +'" id="'+ doms.SHADE + times +'" times="'+ times +'" style="'+ ('z-index:'+ (zIndex-1) +'; ') +'"></div>') : '',
//主体 //主体
'<div class="'+ doms[0] + (' layui-layer-'+ready.type[config.type]) + (((config.type == 0 || config.type == 2) && !config.shade) ? ' layui-layer-border' : '') + ' ' + (config.skin||'') +'" id="'+ doms[0] + times +'" type="'+ ready.type[config.type] +'" times="'+ times +'" showtime="'+ config.time +'" conType="'+ (conType ? 'object' : 'string') +'" style="z-index: '+ zIndex +'; width:'+ config.area[0] + ';height:' + config.area[1] + (config.fixed ? '' : ';position:absolute;') +'">' '<div class="'+ doms[0] + (' layui-layer-'+ready.type[config.type]) + (((config.type == 0 || config.type == 2) && !config.shade) ? ' layui-layer-border' : '') + ' ' + (config.skin||'') +'" id="'+ doms[0] + times +'" type="'+ ready.type[config.type] +'" times="'+ times +'" showtime="'+ config.time +'" conType="'+ (conType ? 'object' : 'string') +'" style="z-index: '+ zIndex +'; width:'+ config.area[0] + ';height:' + config.area[1] + ';position:'+ (config.fixed ? 'fixed;' : 'absolute;') +'">'
+ (conType && config.type != 2 ? '' : titleHTML) + (conType && config.type != 2 ? '' : titleHTML)
+ '<div id="'+ (config.id||'') +'" class="layui-layer-content'+ ((config.type == 0 && config.icon !== -1) ? ' layui-layer-padding' :'') + (config.type == 3 ? ' layui-layer-loading'+config.icon : '') +'">' + '<div id="'+ (config.id||'') +'" class="layui-layer-content'+ ((config.type == 0 && config.icon !== -1) ? ' layui-layer-padding' :'') + (config.type == 3 ? ' layui-layer-loading'+config.icon : '') +'">'
+ (config.type == 0 && config.icon !== -1 ? '<i class="layui-layer-ico layui-layer-ico'+ config.icon +'"></i>' : '') + (config.type == 0 && config.icon !== -1 ? '<i class="layui-layer-ico layui-layer-ico'+ config.icon +'"></i>' : '')
+ (config.type == 1 && conType ? '' : (config.content||'')) + (config.type == 1 && conType ? '' : (config.content||''))
+ '</div>' + '</div>'
+ '<span class="layui-layer-setwin">'+ function(){ + '<span class="layui-layer-setwin">'+ function(){
var closebtn = ismax && config.title ? '<a class="layui-layer-min" href="javascript:;"><cite></cite></a>' : ''; // ThinkGem 必须有标题的清空下才能最小化 var closebtn = ismax && config.title ? '<a class="layui-layer-min" href="javascript:;"><cite></cite></a><a class="layui-layer-ico layui-layer-max" href="javascript:;"></a>' : ''; // ThinkGem 必须有标题的清空下才能最小化
closebtn += ismax ? '<a class="layui-layer-ico layui-layer-max" href="javascript:;"></a>' : '';
config.closeBtn && (closebtn += '<a class="layui-layer-ico '+ doms[7] +' '+ doms[7] + (config.title ? config.closeBtn : (config.type == 4 ? '1' : '2')) +'" href="javascript:;"></a>'); config.closeBtn && (closebtn += '<a class="layui-layer-ico '+ doms[7] +' '+ doms[7] + (config.title ? config.closeBtn : (config.type == 4 ? '1' : '2')) +'" href="javascript:;"></a>');
return closebtn; return closebtn;
}() + '</span>' }() + '</span>'
@@ -262,11 +290,11 @@ Class.pt.vessel = function(conType, callback){
for(var i = 0, len = config.btn.length; i < len; i++){ for(var i = 0, len = config.btn.length; i < len; i++){
button += '<a class="'+ doms[6] +''+ i +'">'+ config.btn[i] +'</a>' button += '<a class="'+ doms[6] +''+ i +'">'+ config.btn[i] +'</a>'
} }
return '<div class="'+ doms[6] + (config.btnAlign ? (' layui-layer-btn-' + config.btnAlign) : '') +'">'+ button +'</div>' return '<div class="'+ doms[6] + (config.btnAlign ? (' layui-layer-btn-' + (config.btnAlign||'')) : '') +'">'+ button +'</div>'
}() : '') }() : '')
+ (config.resize ? '<span class="layui-layer-resize"></span>' : '') + (config.resize ? '<span class="layui-layer-resize"></span>' : '')
+ '</div>' + '</div>'
], titleHTML, $('<div class="layui-layer-move"></div>')); ], titleHTML, $('<div class="'+ doms.MOVE +'" id="'+ doms.MOVE +'"></div>'));
return that; return that;
}; };
@@ -296,16 +324,16 @@ Class.pt.creat = function(){
switch(config.type){ switch(config.type){
case 0: case 0:
//config.btn = ('btn' in config) ? config.btn : ready.btn[0]; ThinkGem //config.btn = ('btn' in config) ? config.btn : ready.btn[0];
config.btn = ('btn' in config) ? config.btn : layer.i18n.btnOk;// ThinkGem config.btn = ('btn' in config) ? config.btn : layer.i18n.btnOk;// ThinkGem
layer.closeAll('dialog'); layer.closeAll('dialog');
break; break;
case 2: case 2:
var content = config.content = conType ? config.content : [config.content, 'auto']; var content = config.content = conType ? config.content : [config.content||'', 'auto'];
// config.content = '<iframe scrolling="'+ (config.content[1]||'auto') +'" allowtransparency="true" id="' //config.content = '<iframe scrolling="'+ (config.content[1]||'auto') +'" allowtransparency="true" id="'
// + doms[4] +''+ times +'" name="'+ doms[4] +''+ times // + doms[4] +''+ times +'" name="'+ doms[4] +''+ times
// +'" onload="this.className=\'\';" class="layui-layer-load" frameborder="0" src="' // +'" onload="this.className=\'\';" class="layui-layer-load" frameborder="0" src="'
// + config.content[0] + '"></iframe>'; // + config.content[0] + '"></iframe>';
// 2017-5-13 ThinkGem 支持post方式提交iframe // 2017-5-13 ThinkGem 支持post方式提交iframe
config.content = '<iframe scrolling="'+ (config.content[1]||'auto') +'" allowtransparency="true" id="' config.content = '<iframe scrolling="'+ (config.content[1]||'auto') +'" allowtransparency="true" id="'
+ doms[4] + times +'" name="'+ doms[4] +''+ times + doms[4] + times +'" name="'+ doms[4] +''+ times
@@ -342,15 +370,18 @@ Class.pt.creat = function(){
} }
}(); }();
}() : body.append(html[1]); }() : body.append(html[1]);
$('.layui-layer-move')[0] || body.append(ready.moveElem = moveElem); $('#'+ doms.MOVE)[0] || body.append(ready.moveElem = moveElem);
that.layero = $('#'+ doms[0] + times); that.layero = $('#'+ doms[0] + times);
that.shadeo = $('#'+ doms.SHADE + times);
config.scrollbar || doms.html.css('overflow', 'hidden').attr('layer-full', times); config.scrollbar || doms.html.css('overflow', 'hidden').attr('layer-full', times);
}).auto(times); }).auto(times);
//遮罩 //遮罩
$('#layui-layer-shade'+ that.index).css({ that.shadeo.css({
'background-color': config.shade[1] || '#000' 'background-color': config.shade[1] || '#000'
,'opacity': config.shade[0]||config.shade ,'opacity': config.shade[0] || config.shade
}); });
//config.type == 2 && layer.ie == 6 && that.layero.find('iframe').attr('src', content[0]); // ThinkGem 不需要ie6 //config.type == 2 && layer.ie == 6 && that.layero.find('iframe').attr('src', content[0]); // ThinkGem 不需要ie6
@@ -373,7 +404,19 @@ Class.pt.creat = function(){
} }
} }
//坐标自适应浏览器窗口尺寸 //坐标自适应浏览器窗口尺寸
config.type == 4 ? that.tips() : that.offset(); config.type == 4 ? that.tips() : function(){
that.offset()
//首次弹出时,若 css 尚未加载,则等待 css 加载完毕后,重新设定尺寸
parseInt(ready.getStyle(document.getElementById(doms.MOVE), 'z-index')) || function(){
that.layero.css('visibility', 'hidden');
layer.ready(function(){
that.offset();
that.layero.css('visibility', 'visible');
});
}();
}();
//如果是固定定位
if(config.fixed){ if(config.fixed){
win.on('resize', function(){ win.on('resize', function(){
that.offset(); that.offset();
@@ -383,7 +426,7 @@ Class.pt.creat = function(){
} }
config.time <= 0 || setTimeout(function(){ config.time <= 0 || setTimeout(function(){
layer.close(that.index) layer.close(that.index);
}, config.time); }, config.time);
that.move().callback(); that.move().callback();
@@ -706,15 +749,15 @@ Class.pt.callback = function(){
layero.find('.'+ doms[7]).on('click', cancel); layero.find('.'+ doms[7]).on('click', cancel);
//点遮罩关闭 //点遮罩关闭
if(config.shadeClose || config.shadeClose == undefined){ if(config.shadeClose){
$('#layui-layer-shade'+ that.index).on('click', function(){ that.shadeo.on('click', function(){
layer.close(that.index); layer.close(that.index);
}); });
} }
//最小化 //最小化
layero.find('.layui-layer-min').on('click', function(){ layero.find('.layui-layer-min').on('click', function(){
var min = config.min && config.min(layero); var min = config.min && config.min(layero, that.index);
min === false || layer.min(that.index, config); min === false || layer.min(that.index, config);
}); });
@@ -722,11 +765,11 @@ Class.pt.callback = function(){
layero.find('.layui-layer-max').on('click', function(){ layero.find('.layui-layer-max').on('click', function(){
if($(this).hasClass('layui-layer-maxmin')){ if($(this).hasClass('layui-layer-maxmin')){
layer.restore(that.index); layer.restore(that.index);
config.restore && config.restore(layero); config.restore && config.restore(layero, that.index);
} else { } else {
layer.full(that.index, config); layer.full(that.index, config);
setTimeout(function(){ setTimeout(function(){
config.full && config.full(layero); config.full && config.full(layero, that.index);
}, 100); }, 100);
} }
}); });
@@ -773,6 +816,7 @@ Class.pt.openLayer = function(){
}; };
}; };
//记录宽高坐标,用于还原
ready.record = function(layero){ ready.record = function(layero){
var area = [ var area = [
layero.width(), layero.width(),
@@ -815,10 +859,8 @@ layer.getFrameIndex = function(name){
}; };
//iframe层自适应宽高diffVal差值范围内进行自适应高度 //iframe层自适应宽高diffVal差值范围内进行自适应高度
layer.iframeAuto = function(index, diffVal){ layer.iframeAuto = function(index, diffVal, $this){
if(!index){ if(!index) return;
return;
}
var iframe = document.getElementById(doms[4] + index); var iframe = document.getElementById(doms[4] + index);
if (iframe) { if (iframe) {
var iframeWin = iframe.contentWindow || iframe.contentDocument.parentWindow; var iframeWin = iframe.contentWindow || iframe.contentDocument.parentWindow;
@@ -826,15 +868,15 @@ layer.iframeAuto = function(index, diffVal){
var layero = $('#'+ doms[0] + index); var layero = $('#'+ doms[0] + index);
var titHeight = layero.find(doms[1]).outerHeight() || 0; var titHeight = layero.find(doms[1]).outerHeight() || 0;
var btnHeight = layero.find('.'+doms[6]).outerHeight() || 0; var btnHeight = layero.find('.'+doms[6]).outerHeight() || 0;
// var heg = layer.getChildFrame('html', index).outerHeight(); // var heg = layer.getChildFrame('html', index).outerHeight();
var heg = iframeWin.document.body.scrollHeight; var heg = iframeWin.document.body.scrollHeight;
var layerHeight = heg + titHeight + btnHeight; var layerHeight = heg + titHeight + btnHeight;
var layerTop = ($(window).height() - layerHeight) / 2; var layerTop = ($(window).height() - layerHeight) / 2;
if (layerTop > 0){ if (layerTop > 0){
var $iframe = layero.find('iframe'); var $iframe = layero.find('iframe');
if (Math.abs($iframe.height() - heg) < (diffVal || 9000)){ if (Math.abs($iframe.height() - heg) < (diffVal || 9000)){
layero.css({height: layerHeight, top: layerTop}); layero.animate({height: layerHeight, top: layerTop}, 20);
$iframe.css({height: heg}); $iframe.animate({height: heg}, 20);
} }
} }
} }
@@ -880,7 +922,7 @@ layer.style = function(index, options, limit){
} }
layero.css(options); layero.css(options);
// btnHeight = layero.find('.'+doms[6]).outerHeight(); //btnHeight = layero.find('.'+doms[6]).outerHeight();
btnHeight = layero.find('.'+doms[6]).outerHeight() || 0; // ThinkGem 兼容 jQuery 3.5 btnHeight = layero.find('.'+doms[6]).outerHeight() || 0; // ThinkGem 兼容 jQuery 3.5
if(type === ready.type[2]){ if(type === ready.type[2]){
@@ -898,11 +940,20 @@ layer.style = function(index, options, limit){
//最小化 //最小化
layer.min = function(index, options){ layer.min = function(index, options){
options = options || {};
var layero = $('#'+ doms[0] + index) var layero = $('#'+ doms[0] + index)
,shadeo = $('#'+ doms.SHADE + index)
,titHeight = layero.find(doms[1]).outerHeight() || 0 ,titHeight = layero.find(doms[1]).outerHeight() || 0
,left = layero.attr('minLeft') || (181*ready.minIndex)+'px' ,left = layero.attr('minLeft') || (181*ready.minIndex)+'px'
,position = layero.css('position'); ,position = layero.css('position')
,settings = {
width: 180
,height: titHeight
,position: 'fixed'
,overflow: 'hidden'
};
//记录宽高坐标,用于还原
ready.record(layero); ready.record(layero);
if(ready.minLeft[0]){ if(ready.minLeft[0]){
@@ -910,31 +961,33 @@ layer.min = function(index, options){
ready.minLeft.shift(); ready.minLeft.shift();
} }
layero.attr('position', position); //是否堆叠在左下角
if(options.minStack){
settings.left = left;
settings.top = win.height() - titHeight;
layero.attr('minLeft') || ready.minIndex++; //初次执行,最小化操作索引自增
layero.attr('minLeft', left);
}
layer.style(index, { layero.attr('position', position);
width: 180 layer.style(index, settings, true);
,height: titHeight
,left: left
,top: win.height() - titHeight
,position: 'fixed'
,overflow: 'hidden'
}, true);
layero.find('.layui-layer-min').hide(); layero.find('.layui-layer-min').hide();
layero.attr('type') === 'page' && layero.find(doms[4]).hide(); layero.attr('type') === 'page' && layero.find(doms[4]).hide();
ready.rescollbar(index); ready.rescollbar(index);
if(!layero.attr('minLeft')){ //隐藏遮罩
ready.minIndex++; shadeo.hide();
}
layero.attr('minLeft', left);
}; };
//还原 //还原
layer.restore = function(index){ layer.restore = function(index){
var layero = $('#'+ doms[0] + index), area = layero.attr('area').split(','); var layero = $('#'+ doms[0] + index)
var type = layero.attr('type'); ,shadeo = $('#'+ doms.SHADE + index)
,area = layero.attr('area').split(',')
,type = layero.attr('type');
//恢复原来尺寸
layer.style(index, { layer.style(index, {
width: parseFloat(area[0]), width: parseFloat(area[0]),
height: parseFloat(area[1]), height: parseFloat(area[1]),
@@ -943,10 +996,14 @@ layer.restore = function(index){
position: layero.attr('position'), position: layero.attr('position'),
overflow: 'visible' overflow: 'visible'
}, true); }, true);
layero.find('.layui-layer-max').removeClass('layui-layer-maxmin'); layero.find('.layui-layer-max').removeClass('layui-layer-maxmin');
layero.find('.layui-layer-min').show(); layero.find('.layui-layer-min').show();
layero.attr('type') === 'page' && layero.find(doms[4]).show(); layero.attr('type') === 'page' && layero.find(doms[4]).show();
ready.rescollbar(index); ready.rescollbar(index);
//恢复遮罩
shadeo.show();
}; };
//全屏 //全屏
@@ -976,7 +1033,7 @@ layer.title = function(name, index){
}; };
//关闭layer总方法 //关闭layer总方法
layer.close = function(index){ layer.close = function(index, callback){
var layero = $('#'+ doms[0] + index), type = layero.attr('type'), closeAnim = 'layer-anim-close'; var layero = $('#'+ doms[0] + index), type = layero.attr('type'), closeAnim = 'layer-anim-close';
if(!layero[0]) return; if(!layero[0]) return;
var WRAP = 'layui-layer-wrap', remove = function(){ var WRAP = 'layui-layer-wrap', remove = function(){
@@ -1002,13 +1059,14 @@ layer.close = function(index){
} }
typeof ready.end[index] === 'function' && ready.end[index](); typeof ready.end[index] === 'function' && ready.end[index]();
delete ready.end[index]; delete ready.end[index];
typeof callback === 'function' && callback();
}; };
if(layero.data('isOutAnim')){ if(layero.data('isOutAnim')){
layero.addClass('layer-anim '+ closeAnim); layero.addClass('layer-anim '+ closeAnim);
} }
$('#layui-layer-moves, #layui-layer-shade' + index).remove(); $('#layui-layer-moves, #'+ doms.SHADE + index).remove();
layer.ie == 6 && ready.reselect(); layer.ie == 6 && ready.reselect();
ready.rescollbar(index); ready.rescollbar(index);
if(layero.attr('minLeft')){ if(layero.attr('minLeft')){
@@ -1026,17 +1084,25 @@ layer.close = function(index){
}; };
//关闭所有层 //关闭所有层
layer.closeAll = function(type){ layer.closeAll = function(type, callback){
$.each($('.'+doms[0]), function(){ if(typeof type === 'function'){
callback = type;
type = null;
};
var domsElem = $('.'+doms[0]);
$.each(domsElem, function(_index){
var othis = $(this); var othis = $(this);
var is = type ? (othis.attr('type') === type) : 1; var is = type ? (othis.attr('type') === type) : 1;
is && layer.close(othis.attr('times')); is && layer.close(othis.attr('times'), _index === domsElem.length - 1 ? callback : null);
is = null; is = null;
}); });
if(domsElem.length === 0) typeof callback === 'function' && callback();
}; };
/** /**
拓展模块layui开始合并在一起
拓展模块layui 开始合并在一起
*/ */
var cache = layer.cache||{}, skin = function(type){ var cache = layer.cache||{}, skin = function(type){
@@ -1055,8 +1121,8 @@ layer.prompt = function(options, yes){
style = 'style="width: '+ area[0] +'; height: '+ area[1] + ';"'; style = 'style="width: '+ area[0] +'; height: '+ area[1] + ';"';
delete options.area; delete options.area;
} }
var prompt, content = options.formType == 2 ? '<textarea class="layui-layer-input"' + style +'>' + (options.value||'') +'</textarea>' : function(){ var prompt, content = options.formType == 2 ? '<textarea class="layui-layer-input"' + style +'></textarea>' : function(){
return '<input type="'+ (options.formType == 1 ? 'password' : 'text') +'" class="layui-layer-input" value="'+ (options.value||'') +'">'; return '<input type="'+ (options.formType == 1 ? 'password' : 'text') +'" class="layui-layer-input">';
}(); }();
var success = options.success; var success = options.success;
@@ -1070,7 +1136,7 @@ layer.prompt = function(options, yes){
,maxWidth: win.width() ,maxWidth: win.width()
,success: function(layero){ ,success: function(layero){
prompt = layero.find('.layui-layer-input'); prompt = layero.find('.layui-layer-input');
prompt.focus(); prompt.val(options.value || '').focus();
typeof success === 'function' && success(layero); typeof success === 'function' && success(layero);
} }
,resize: false ,resize: false
@@ -1141,17 +1207,21 @@ layer.photos = function(options, loop, key){
var dict = {}; var dict = {};
options = options || {}; options = options || {};
if(!options.photos) return; if(!options.photos) return;
var type = options.photos.constructor === Object;
var photos = type ? options.photos : {}, data = photos.data || [];
var start = photos.start || 0;
dict.imgIndex = (start|0) + 1;
//若 photos 并非选择器或 jQuery 对象,则为普通 object
var isObject = !(typeof options.photos === 'string' || options.photos instanceof $)
,photos = isObject ? options.photos : {}
,data = photos.data || []
,start = photos.start || 0;
dict.imgIndex = (start|0) + 1;
options.img = options.img || 'img'; options.img = options.img || 'img';
var success = options.success; var success = options.success;
delete options.success; delete options.success;
if(!type){ //页面直接获取 //如果 options.photos 不是一个对象
if(!isObject){ //页面直接获取
var parent = $(options.photos), pushData = function(){ var parent = $(options.photos), pushData = function(){
data = []; data = [];
parent.find(options.img).each(function(index){ parent.find(options.img).each(function(index){
@@ -1163,7 +1233,7 @@ layer.photos = function(options, loop, key){
src: othis.attr('layer-src') || othis.attr('src'), src: othis.attr('layer-src') || othis.attr('src'),
thumb: othis.attr('src') thumb: othis.attr('src')
}); });
}) });
}; };
pushData(); pushData();
@@ -1171,6 +1241,7 @@ layer.photos = function(options, loop, key){
if (data.length === 0) return; if (data.length === 0) return;
loop || parent.on('click', options.img, function(){ loop || parent.on('click', options.img, function(){
pushData();
var othis = $(this), index = othis.attr('layer-index'); var othis = $(this), index = othis.attr('layer-index');
layer.photos($.extend(options, { layer.photos($.extend(options, {
photos: { photos: {
@@ -1180,8 +1251,7 @@ layer.photos = function(options, loop, key){
}, },
full: options.full full: options.full
}), true); }), true);
pushData(); });
})
//不直接弹出 //不直接弹出
if(!loop) return; if(!loop) return;
@@ -1237,20 +1307,22 @@ layer.photos = function(options, loop, key){
//一些动作 //一些动作
dict.event = function(){ dict.event = function(){
/*
dict.bigimg.hover(function(){ dict.bigimg.hover(function(){
dict.imgsee.show(); dict.imgsee.show();
}, function(){ }, function(){
dict.imgsee.hide(); dict.imgsee.hide();
}); });
*/
dict.bigimg.find('.layui-layer-imgprev').on('click', function(event){ dict.bigimg.find('.layui-layer-imgprev').on('click', function(event){
event.preventDefault(); event.preventDefault();
dict.imgprev(); dict.imgprev(true);
}); });
dict.bigimg.find('.layui-layer-imgnext').on('click', function(event){ dict.bigimg.find('.layui-layer-imgnext').on('click', function(event){
event.preventDefault(); event.preventDefault();
dict.imgnext(); dict.imgnext(true);
}); });
$(document).on('keyup', dict.keyup); $(document).on('keyup', dict.keyup);
@@ -1280,6 +1352,11 @@ layer.photos = function(options, loop, key){
loadImage(data[start].src, function(img){ loadImage(data[start].src, function(img){
layer.close(dict.loadi); layer.close(dict.loadi);
//切换图片时不出现动画
if(key) options.anim = -1;
//弹出图片层
dict.index = layer.open($.extend({ dict.index = layer.open($.extend({
type: 1, type: 1,
id: 'layui-layer-photos', id: 'layui-layer-photos',
@@ -1309,19 +1386,24 @@ layer.photos = function(options, loop, key){
moveType: 1, moveType: 1,
scrollbar: false, scrollbar: false,
moveOut: true, moveOut: true,
//anim: Math.random()*5|0, anim: 5,
isOutAnim: false, isOutAnim: false,
skin: 'layui-layer-photos' + skin('photos'), skin: 'layui-layer-photos' + skin('photos'),
content: '<div class="layui-layer-phimg">' content: '<div class="layui-layer-phimg">'
+'<img src="'+ data[start].src +'" alt="'+ (data[start].alt||'') +'" layer-pid="'+ data[start].pid +'">' +'<img src="'+ data[start].src +'" alt="'+ (data[start].alt||'') +'" layer-pid="'+ data[start].pid +'">'
+'<div class="layui-layer-imgsee">' +function(){
+(data.length > 1 ? '<span class="layui-layer-imguide"><a href="javascript:;" class="layui-layer-iconext layui-layer-imgprev"></a><a href="javascript:;" class="layui-layer-iconext layui-layer-imgnext"></a></span>' : '') if(data.length > 1){
+'<div class="layui-layer-imgbar" style="display:'+ (key ? 'block' : '') +'"><span class="layui-layer-imgtit"><a href="javascript:;">'+ (data[start].alt||'') +'</a><em>'+ dict.imgIndex +'/'+ data.length +'</em></span></div>' return '<div class="layui-layer-imgsee">'
+'<span class="layui-layer-imguide"><a href="javascript:;" class="layui-layer-iconext layui-layer-imgprev"></a><a href="javascript:;" class="layui-layer-iconext layui-layer-imgnext"></a></span>'
+'<div class="layui-layer-imgbar" style="display:'+ (key ? 'block' : '') +'"><span class="layui-layer-imgtit"><a href="javascript:;">'+ (data[start].alt || '') +'</a><em>'+ dict.imgIndex +' / '+ data.length +'</em></span></div>'
+'</div>' +'</div>'
}
return '';
}()
+'</div>', +'</div>',
success: function(layero, index){ success: function(layero, index){
dict.bigimg = layero.find('.layui-layer-phimg'); dict.bigimg = layero.find('.layui-layer-phimg');
dict.imgsee = layero.find('.layui-layer-imguide,.layui-layer-imgbar'); dict.imgsee = layero.find('.layui-layer-imgbar');
dict.event(layero); dict.event(layero);
options.tab && options.tab(data[start], layero); options.tab && options.tab(data[start], layero);
typeof success === 'function' && success(layero); typeof success === 'function' && success(layero);
@@ -1356,7 +1438,7 @@ ready.run = function(_$){
//加载方式 //加载方式
window.layui && layui.define ? ( window.layui && layui.define ? (
layer.ready() layer.ready()
,layui.define('jquery', function(exports){ //layui加载 ,layui.define('jquery', function(exports){ //layui 加载
layer.path = layui.cache.dir; layer.path = layui.cache.dir;
ready.run(layui.$); ready.run(layui.$);
@@ -1365,12 +1447,12 @@ window.layui && layui.define ? (
exports('layer', layer); exports('layer', layer);
}) })
) : ( ) : (
(typeof define === 'function' && define.amd) ? define(['jquery'], function(){ //requirejs加载 (typeof define === 'function' && define.amd) ? define(['jquery'], function(){ //requirejs 加载
ready.run(window.jQuery); ready.run(window.jQuery);
return layer; return layer;
}) : function(){ //普通script标签加载 }) : function(){ //普通 script 标签加载
ready.run(window.jQuery);
layer.ready(); layer.ready();
ready.run(window.jQuery);
}() }()
); );

View File

@@ -2,8 +2,7 @@
@Namelayer mobile v2.0 弹层组件移动版 @Namelayer mobile v2.0 弹层组件移动版
@Author贤心 @Author贤心
@Sitehttp://layer.layui.com/mobie/ @LicenseMIT
@LicenseLGPL
*/ */

View File

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -1,7 +1,6 @@
/** /**
@Name: layer @Name: layer
@Author: 贤心
**/ **/
@@ -14,7 +13,7 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
.layui-layer{-webkit-overflow-scrolling: touch;} .layui-layer{-webkit-overflow-scrolling: touch;}
.layui-layer{top:150px; left: 0; margin:0; padding:0; background-color:#fff; -webkit-background-clip: content; border-radius: 3px; box-shadow: 1px 1px 50px rgba(0,0,0,.3);} .layui-layer{top:150px; left: 0; margin:0; padding:0; background-color:#fff; -webkit-background-clip: content; border-radius: 3px; box-shadow: 1px 1px 50px rgba(0,0,0,.3);}
.layui-layer-close{position:absolute;} .layui-layer-close{position:absolute;}
.layui-layer-content{position:relative;} .layui-layer-content{position:relative; overflow: hidden;}
.layui-layer-border{border: 1px solid #B2B2B2; border: 1px solid rgba(0,0,0,.1); box-shadow: 1px 1px 5px rgba(0,0,0,.2);} .layui-layer-border{border: 1px solid #B2B2B2; border: 1px solid rgba(0,0,0,.1); box-shadow: 1px 1px 5px rgba(0,0,0,.2);}
.layui-layer-load{background:url(loading-1.gif) #eee center center no-repeat;} .layui-layer-load{background:url(loading-1.gif) #eee center center no-repeat;}
.layui-layer-ico{ background:url(icon.png) no-repeat;} .layui-layer-ico{ background:url(icon.png) no-repeat;}
@@ -51,8 +50,8 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}} @-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}
/* 标题栏 */ /* 标题栏 */
.layui-layer-title{padding:0 80px 0 20px; height:42px; line-height:42px; border-bottom:1px solid #eee; font-size:14px; color:#333; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; background-color: #F8F8F8; border-radius: 3px 3px 0 0;} .layui-layer-title{padding:0 80px 0 20px; height: 50px; line-height: 50px; border-bottom:1px solid #F0F0F0; font-size: 14px; color:#333; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; border-radius: 2px 2px 0 0;}
.layui-layer-setwin{position:absolute; right:15px; *right:0; top:15px; font-size:0; line-height: initial;} .layui-layer-setwin{position:absolute; right: 15px; *right:0; top: 15px; font-size:0; line-height: initial;}
.layui-layer-setwin a{position:relative; width: 16px; height:16px; margin-left:10px; font-size:12px; _overflow:hidden;} .layui-layer-setwin a{position:relative; width: 16px; height:16px; margin-left:10px; font-size:12px; _overflow:hidden;}
.layui-layer-setwin .layui-layer-min cite{position:absolute; width:14px; height:2px; left:0; top:50%; margin-top:-1px; background-color:#2E2D3C; cursor:pointer; _overflow:hidden;} .layui-layer-setwin .layui-layer-min cite{position:absolute; width:14px; height:2px; left:0; top:50%; margin-top:-1px; background-color:#2E2D3C; cursor:pointer; _overflow:hidden;}
.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA; } .layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA; }
@@ -75,7 +74,7 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
.layui-layer-btn-c{text-align: center;} .layui-layer-btn-c{text-align: center;}
/* 定制化 */ /* 定制化 */
.layui-layer-dialog{min-width:260px;} .layui-layer-dialog{min-width: 300px;}
.layui-layer-dialog .layui-layer-content{position: relative; padding:20px; line-height:24px; word-break: break-all; overflow:hidden; font-size:14px; overflow-x: hidden; overflow-y:auto;} .layui-layer-dialog .layui-layer-content{position: relative; padding:20px; line-height:24px; word-break: break-all; overflow:hidden; font-size:14px; overflow-x: hidden; overflow-y:auto;}
.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute; top:16px; left:15px; _left:-40px; width:30px; height:30px;} .layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute; top:16px; left:15px; _left:-40px; width:30px; height:30px;}
.layui-layer-ico1{background-position:-30px 0 } .layui-layer-ico1{background-position:-30px 0 }
@@ -93,7 +92,6 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
.layui-layer-page .layui-layer-btn,.layui-layer-iframe .layui-layer-btn{padding-top:10px;} .layui-layer-page .layui-layer-btn,.layui-layer-iframe .layui-layer-btn{padding-top:10px;}
.layui-layer-nobg{background:none;} .layui-layer-nobg{background:none;}
.layui-layer-iframe iframe{display: block; width: 100%; border-radius: 3px;} .layui-layer-iframe iframe{display: block; width: 100%; border-radius: 3px;}
/* .layui-layer-iframe, .layui-layer-iframe iframe {transition:top 0.2s ease-in-out;} 去掉动画IE下效果不好 */
.layui-layer-loading{border-radius:100%; background:none; box-shadow:none; border:none;} .layui-layer-loading{border-radius:100%; background:none; box-shadow:none; border:none;}
.layui-layer-loading .layui-layer-content{width:60px; height:24px; background:url(loading-0.gif) no-repeat;} .layui-layer-loading .layui-layer-content{width:60px; height:24px; background:url(loading-0.gif) no-repeat;}
@@ -130,7 +128,7 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
.layui-layer-iconext{background:url(icon-ext.png) no-repeat;} .layui-layer-iconext{background:url(icon-ext.png) no-repeat;}
/* prompt模式 */ /* prompt模式 */
.layui-layer-prompt .layui-layer-input{display: block; width: 230px; height: 36px; margin: 0 auto; line-height: 30px; padding-left: 10px; border: 1px solid #e6e6e6; color: #333;} .layui-layer-prompt .layui-layer-input{display: block; width: 260px; height: 36px; margin: 0 auto; line-height: 30px; padding-left: 10px; border: 1px solid #e6e6e6; color: #333;}
.layui-layer-prompt textarea.layui-layer-input{width: 300px; height: 100px; line-height: 20px; padding: 6px 10px;} .layui-layer-prompt textarea.layui-layer-input{width: 300px; height: 100px; line-height: 20px; padding: 6px 10px;}
.layui-layer-prompt .layui-layer-content{padding: 20px;} .layui-layer-prompt .layui-layer-content{padding: 20px;}
.layui-layer-prompt .layui-layer-btn{padding-top: 0;} .layui-layer-prompt .layui-layer-btn{padding-top: 0;}
@@ -138,24 +136,23 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
/* tab模式 */ /* tab模式 */
.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4);} .layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4);}
.layui-layer-tab .layui-layer-title{padding-left:0; overflow: visible;} .layui-layer-tab .layui-layer-title{padding-left:0; overflow: visible;}
.layui-layer-tab .layui-layer-title span{position:relative; float:left; min-width:80px; max-width:260px; padding:0 20px; text-align:center; cursor:default; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer;} .layui-layer-tab .layui-layer-title span{position:relative; float:left; min-width:80px; max-width: 300px; padding:0 20px; text-align:center; cursor:default; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer;}
.layui-layer-tab .layui-layer-title span.layui-this{height: 43px; border-left: 1px solid #eee; border-right: 1px solid #eee; background-color: #fff; z-index: 10;} .layui-layer-tab .layui-layer-title span.layui-this{height: 51px; border-left: 1px solid #eee; border-right: 1px solid #eee; background-color: #fff; z-index: 10;}
.layui-layer-tab .layui-layer-title span:first-child{border-left:none;} .layui-layer-tab .layui-layer-title span:first-child{border-left:none;}
.layui-layer-tabmain{line-height:24px; clear:both;} .layui-layer-tabmain{line-height:24px; clear:both;}
.layui-layer-tabmain .layui-layer-tabli{display:none;} .layui-layer-tabmain .layui-layer-tabli{display:none;}
.layui-layer-tabmain .layui-layer-tabli.layui-this{display: block;} .layui-layer-tabmain .layui-layer-tabli.layui-this{display: block;}
/* photo模式 */ /* photo模式 */
.layui-layer-photos{-webkit-animation-duration: .8s; animation-duration: .8s;} .layui-layer-photos{background: none; box-shadow: none;}
.layui-layer-photos .layui-layer-content{overflow:hidden; text-align: center;} .layui-layer-photos .layui-layer-content{overflow:hidden; text-align: center;}
.layui-layer-photos .layui-layer-phimg img{position: relative; width:100%; display: inline-block; *display:inline; *zoom:1; vertical-align:top;} .layui-layer-photos .layui-layer-phimg img{position: relative; width:100%; display: inline-block; *display:inline; *zoom:1; vertical-align:top;}
.layui-layer-imguide,.layui-layer-imgbar{display:none;} .layui-layer-imgprev, .layui-layer-imgnext{position: fixed; top: 50%; width: 27px; _width: 44px; height: 44px; margin-top:-22px; outline:none;blr:expression(this.onFocus=this.blur());}
.layui-layer-imgprev, .layui-layer-imgnext{position:absolute; top:50%; width:27px; _width:44px; height:44px; margin-top:-22px; outline:none;blr:expression(this.onFocus=this.blur());} .layui-layer-imgprev{left: 30px; background-position:-5px -5px; _background-position:-70px -5px;}
.layui-layer-imgprev{left:10px; background-position:-5px -5px; _background-position:-70px -5px;}
.layui-layer-imgprev:hover{background-position:-33px -5px; _background-position:-120px -5px;} .layui-layer-imgprev:hover{background-position:-33px -5px; _background-position:-120px -5px;}
.layui-layer-imgnext{right:10px; _right:8px; background-position:-5px -50px; _background-position:-70px -50px;} .layui-layer-imgnext{right: 30px; _right:8px; background-position:-5px -50px; _background-position:-70px -50px;}
.layui-layer-imgnext:hover{background-position:-33px -50px; _background-position:-120px -50px;} .layui-layer-imgnext:hover{background-position: -33px -50px; _background-position: -120px -50px;}
.layui-layer-imgbar{position:absolute; left:0; bottom:0; width:100%; height:32px; line-height:32px; background-color:rgba(0,0,0,.8); background-color:#000\9; filter:Alpha(opacity=80); color:#fff; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; font-size:0;} .layui-layer-imgbar{position: fixed; left:0; right: 0; bottom:0; width:100%; height: 40px; line-height: 40px; background-color:#000\9; filter:Alpha(opacity=60); background-color: rgba(2,0,0,.35); color: #fff; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; font-size:0;}
.layui-layer-imgtit{/*position:absolute; left:20px;*/} .layui-layer-imgtit{/*position:absolute; left:20px;*/}
.layui-layer-imgtit *{display:inline-block; *display:inline; *zoom:1; vertical-align:top; font-size:12px;} .layui-layer-imgtit *{display:inline-block; *display:inline; *zoom:1; vertical-align:top; font-size:12px;}
.layui-layer-imgtit a{max-width:65%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; color:#fff;} .layui-layer-imgtit a{max-width:65%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; color:#fff;}
@@ -187,3 +184,4 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
padding-top:3px;padding-bottom:10px;} padding-top:3px;padding-bottom:10px;}
.layui-layer-btn .layui-layer-btn0{border-color:#367fa9;background-color:#367fa9;} .layui-layer-btn .layui-layer-btn0{border-color:#367fa9;background-color:#367fa9;}
.layui-layer-btn a {height:auto;padding:0 12px;font-size:13px;background-color:#f4f4f4;} .layui-layer-btn a {height:auto;padding:0 12px;font-size:13px;background-color:#f4f4f4;}
.layui-layer.toast-top-full-width {min-width: 60%;}

View File

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

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

View File

@@ -1,8 +1,20 @@
# jeesite4-cms
# 技术交流
* 交流 QQ 群(千人大群):`127515876``209330483``223507718``709534275``730390092``1373527``183903863(外包)`
* 码云Gitee<https://gitee.com/thinkgem/jeesite4>
* GitHub<https://github.com/thinkgem/jeesite4>
* 作者博客:<https://my.oschina.net/thinkgem>
* **帮助文档:**<http://docs.jeesite.com>
* 官方网站:<http://jeesite.com>
* 问题反馈:<http://jeesite.net> [【新手必读】](https://gitee.com/thinkgem/jeesite4/issues/I18ARR)
* 关注微信公众号,了解最新动态:
![JeeSite微信公众号](https://images.gitee.com/uploads/images/2020/0727/091951_a3ab258c_6732.jpeg "JeeSite微信公众号")
## 项目介绍 ## 项目介绍
JeeSite4 CMS 内容管理模块 JeeSite CMS 内容管理模块
包含功能:站点管理、栏目管理、模板管理、内容发布 包含功能:站点管理、栏目管理、模板管理、内容发布
@@ -19,18 +31,19 @@ JeeSite4 CMS 内容管理模块
### 本地运行 ### 本地运行
1. 环境准备:`JDK 1.8 or 11``Maven 3.6+``MySQL 5.7 or 8.0` 1. 环境准备:`JDK 1.8 or 11、17``Maven 3.6+``MySQL 5.7 or 8.0`
2. 下载源码:<https://gitee.com/thinkgem/jeesite4-cms> 2. 下载源码:<https://gitee.com/thinkgem/jeesite4/tree/master/modules/cms>
3. 打开文件:/web`/src/main/resources/config/application.yml` 配置JDBC连接 3. 打开文件:/web`/src/main/resources/config/application.yml` 配置JDBC连接
4. 执行脚本/web`/bin/init-data.bat` 初始化数据库 4. 打开文件/web`/pom.xml` 打开 `jeesite-module-cms` 模块(去掉的注释标记)
5. 执行脚本:/web`/bin/init-data.bat` 初始化数据库
5. 执行脚本:/web`/bin/run-tomcat.bat` 启动服务即可 5. 执行脚本:/web`/bin/run-tomcat.bat` 启动服务即可
6. 浏览器访问:<http://127.0.0.1:8980/js/> 账号 system 密码 admin 6. 浏览器访问:<http://127.0.0.1:8980/js/> 账号 system 密码 admin
7. 部署常见问题:<http://jeesite.com/?t=284210> 7. 部署常见问题:<https://jeesite.com/docs/faq/>
### 开发环境 ### 开发环境
1. 部署运行:<http://jeesite.com/?t=267354> 1. 部署运行文档<https://jeesite.com/docs/install-deploy/>
2. 常见问题:<http://jeesite.com/?t=284210> 2. 部署常见问题:<https://jeesite.com/docs/faq/>
## 在线文档 ## 在线文档
@@ -38,46 +51,35 @@ JeeSite4 CMS 内容管理模块
## 授权协议声明 ## 授权协议声明
1. 已开源的代码,授权协议采用 AGPL v3 + Apache Licence v2 进行发行 1. 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款
2. 您可以免费使用、修改和衍生代码,但不允许修改后和衍生的代码做为闭源软件发布 2. 不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为
3. 修改后和衍生的代码必须也按照AGPL协议进行流通对修改后和衍生的代码必须向社会公开。 3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议、版权声明和其他原作者
4. 如果您修改了代码,需要在被修改文件中进行说明,并遵守代码格式规范,帮助他人更好的理解您的用意。 规定需要包含的说明(请尊重原作者的著作权,不要删除或修改文件中`Copyright``@author`信息)
5. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议、版权声明和其他原作者规定 更不要,全局替换源代码中的 jeesite 或 ThinkGem 等字样,否则你将违反本协议条款承担责任。
需要包含的说明(请尊重原作者的著作权,不要删除或修改文件中的`@author`信息)。 4. 您若套用本软件的一些代码或功能参考,请保留源文件中的版权和作者,需要在您的软件介绍明显位置
6. 您可以应用于商业软件,但必须遵循以上条款原则(请协助改进本作品)。 说明出处,举例:本软件基于 JeeSite 快速开发平台并附带链接http://jeesite.com
7. 关系平台的发展战略考虑,底层部分代码暂未开源,但这不影响您的二次开发 5. 任何基于本软件而产生的一切法律纠纷和责任,均于我司无关
8. 请知悉社区版用户数不可超过100个最大允许20个用户同时在线不含匿名 6. 如果你对本软件有改进,希望可以贡献给我们,共同进步
7. 本项目已申请软件著作权,请尊重开源,感谢阅读。
8. 本版本无用户数限制,无在线人数限制。
## 技术服务与支持 ## 技术服务与支持
* 没有资金的支撑就很难得到发展,特别是一个好的产品,如果 JeeSite 帮助了您,请为我们点赞。支持我们,您可以得到一些回报,有了这些我们会把公益事业做的更好,回报社区和社会,请给我们一些动力吧,在此非常感谢已支持我们的朋友! * 没有资金的支撑就很难得到发展,特别是一个好的产品,如果 JeeSite 帮助了您,请为我们点赞。支持我们,您可以得到一些回报,有了这些我们会把公益事业做的更好,回报社区和社会,请给我们一些动力吧,在此非常感谢已支持我们的朋友!
* **联系方式官方商务QQ[1766571055](http://wpa.qq.com/msgrd?v=3&uin=1766571055&site=qq&menu=yes)** * **联系我们**:请访问技术支持服务页面:<https://jeesite.com/docs/support/>
* 技术服务支持网页:<http://s.jeesite.com>
# 技术交流方式
* QQ 群号:`127515876``209330483``223507718``709534275``730390092``1373527``183903863(外包)`
* 问题反馈:<https://gitee.com/thinkgem/jeesite4/issues>  [【新手必读】](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md)
* 码云Gitee<https://gitee.com/thinkgem/jeesite4>
* GitHub<https://github.com/thinkgem/jeesite4>
* 作者博客:<https://my.oschina.net/thinkgem>
* **技术服务:**<http://s.jeesite.com>
* 官方网站:<http://jeesite.com>
* 官方论坛:<http://jeesite.net>
* 微信公众号(关注动态):
![JeeSite4微信公众号](https://static.oschina.net/uploads/space/2018/0302/145133_OGZf_941661.jpg "JeeSite4微信公众号")
## 今后如何升级? ## 今后如何升级?
尽量不修改 web 项目以外的源码项目,如 jeesite-common、jeesite-modele-core如果修改了请 Pull Requests 上来,否则代码与官方不同步,会将对你的日后升级增加难度。 尽量不修改 web 项目以外的源码项目,如 jeesite-common、jeesite-modele-core如果修改了请 Pull Requests 上来,否则代码与官方不同步,可能会将对你的日后升级增加难度。
如果您修改了依赖模块代码,也没关系,这时你需要利用 Git 版本控制工具,与官方仓库代码进行同步,合并代码即可。 如果您修改了依赖模块代码,也没关系,这时你需要利用 Git 版本控制工具,与官方仓库代码进行同步,合并代码即可。
每个版本升级,我们都会附带详细更新日志:<http://jeesite.com/?t=273830> 每个版本升级,我们都会附带详细更新日志:<https://jeesite.com/docs/upgrade/>
在这里,你可以看到 JeeSite 新增哪些新功能和改进,在每个版本下都有对应升级方法。 在这里,你可以看到 JeeSite 新增哪些新功能和改进,在每个版本下都有对应升级方法。
如果跨版本升级,可以将版本号直接修改为最新版本,然后去看每个版本的升级方法,修改对应业务。
# Git 全局设置技巧 # Git 全局设置技巧
``` ```

16
modules/cms/bin/deploy.sh Normal file
View File

@@ -0,0 +1,16 @@
#!/bin/sh
# /**
# * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
# * No deletion without permission, or be held responsible to law.
# *
# * Author: ThinkGem@163.com
# *
# */
echo ""
echo "[信息] 部署工程版本到Nexus服务器。"
echo ""
cd ..
mvn clean deploy -Dmaven.test.skip=true -Pdeploy
cd bin

View File

@@ -1,19 +0,0 @@
@echo off
rem /**
rem * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
rem * No deletion without permission, or be held responsible to law.
rem *
rem * Author: ThinkGem@163.com
rem */
echo.
echo [<5B><>Ϣ] <20><><EFBFBD><EFBFBD><EBB9A4>Javadoc<6F><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD>jar<61><72><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
echo.
%~d0
cd %~dp0
cd ..
call mvn clean package -Pjavadoc
cd bin
pause

View File

@@ -0,0 +1,16 @@
#!/bin/sh
# /**
# * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
# * No deletion without permission, or be held responsible to law.
# *
# * Author: ThinkGem@163.com
# *
# */
echo ""
echo "[信息] 打包Web工程生成war/jar包文件。"
echo ""
cd ..
mvn clean install -Dmaven.test.skip=true -Ppackage
cd bin

View File

@@ -6,7 +6,7 @@
<parent> <parent>
<groupId>com.jeesite</groupId> <groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId> <artifactId>jeesite-parent</artifactId>
<version>4.3.2-SNAPSHOT</version> <version>4.3.3-SNAPSHOT</version>
<relativePath>../../parent/pom.xml</relativePath> <relativePath>../../parent/pom.xml</relativePath>
</parent> </parent>

View File

@@ -10,3 +10,4 @@
4.3.0 4.3.0
4.3.1 4.3.1
4.3.2 4.3.2
4.3.3

View File

@@ -1,5 +1,5 @@
<% layout('layouts/default.html', {title: '全站搜索', libs: []}){ %> <% layout('layouts/default.html', {title: '全站搜索', libs: []}){ %>
<script src="${ctxStatic}/laydate/5.0/laydate.js?${_version}"></script> <script src="${ctxStatic}/laydate/5.3/laydate.js?${_version}"></script>
<style type="text/css"> <style type="text/css">
form.search {margin:12px 20px 5px;} form.search {margin:12px 20px 5px;}
form.search input.txt {padding:4px 8px;font-size:16px;width:300px;margin:5px;border:1px solid #bbb;border-radius:3px;} form.search input.txt {padding:4px 8px;font-size:16px;width:300px;margin:5px;border:1px solid #bbb;border-radius:3px;}

View File

@@ -6,7 +6,7 @@
<parent> <parent>
<groupId>com.jeesite</groupId> <groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId> <artifactId>jeesite-parent</artifactId>
<version>4.3.2-SNAPSHOT</version> <version>4.3.3-SNAPSHOT</version>
<relativePath>../../parent/pom.xml</relativePath> <relativePath>../../parent/pom.xml</relativePath>
</parent> </parent>

View File

@@ -265,7 +265,7 @@ public class OfficeController extends BaseController {
/** /**
* 获取机构树结构数据 * 获取机构树结构数据
* @param excludeCode 排除的ID * @param excludeCode 排除的ID
* @param parentCode 上级Code * @param parentCode 设置父级编码返回一级
* @param isAll 是否显示所有机构true不进行权限过滤 * @param isAll 是否显示所有机构true不进行权限过滤
* @param officeTypes 机构类型1省级公司2市级公司3部门 * @param officeTypes 机构类型1省级公司2市级公司3部门
* @param companyCode 仅查询公司下的机构 * @param companyCode 仅查询公司下的机构
@@ -281,7 +281,7 @@ public class OfficeController extends BaseController {
@ResponseBody @ResponseBody
public List<Map<String, Object>> treeData(String excludeCode, String parentCode, Boolean isAll, public List<Map<String, Object>> treeData(String excludeCode, String parentCode, Boolean isAll,
String officeTypes, String companyCode, String isShowCode, String isShowFullName, String officeTypes, String companyCode, String isShowCode, String isShowFullName,
String isLoadUser, String postCode, String roleCode, String ctrlPermi) { String isLoadUser, String userIdPrefix, String postCode, String roleCode, String ctrlPermi) {
List<Map<String, Object>> mapList = ListUtils.newArrayList(); List<Map<String, Object>> mapList = ListUtils.newArrayList();
Office where = new Office(); Office where = new Office();
where.setStatus(Office.STATUS_NORMAL); where.setStatus(Office.STATUS_NORMAL);
@@ -297,6 +297,7 @@ public class OfficeController extends BaseController {
if (StringUtils.isNotBlank(officeTypes)){ if (StringUtils.isNotBlank(officeTypes)){
where.setOfficeType_in(officeTypes.split(",")); where.setOfficeType_in(officeTypes.split(","));
} }
List<String> idList = ListUtils.newArrayList();
List<Office> list = officeService.findList(where); List<Office> list = officeService.findList(where);
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
Office e = list.get(i); Office e = list.get(i);
@@ -313,6 +314,7 @@ public class OfficeController extends BaseController {
continue; continue;
} }
} }
idList.add(e.getId());
Map<String, Object> map = MapUtils.newHashMap(); Map<String, Object> map = MapUtils.newHashMap();
map.put("id", e.getId()); map.put("id", e.getId());
map.put("pId", e.getParentCode()); map.put("pId", e.getParentCode());
@@ -323,23 +325,21 @@ public class OfficeController extends BaseController {
map.put("code", e.getViewCode()); map.put("code", e.getViewCode());
map.put("name", StringUtils.getTreeNodeName(isShowCode, e.getViewCode(), name)); map.put("name", StringUtils.getTreeNodeName(isShowCode, e.getViewCode(), name));
map.put("title", e.getFullName()); map.put("title", e.getFullName());
// 如果需要加载用户,则处理用户数据 // 返回是否是父节点,如果需要加载用户,则全部都是父节点,来加载用户数据
if (StringUtils.inString(isLoadUser, "true", "lazy")) { map.put("isParent", !e.getIsTreeLeaf() || StringUtils.inString(isLoadUser, "true", "lazy"));
map.put("isParent", true); mapList.add(map);
}
// 一次性后台加载用户,若数据量比较大,建议使用懒加载 // 一次性后台加载用户,若数据量比较大,建议使用懒加载
if (StringUtils.equals(isLoadUser, "true")) { if (StringUtils.equals(isLoadUser, "true") && idList.size() > 0) {
List<Map<String, Object>> userList = List<Map<String, Object>> userList =
empUserController.treeData("u_", e.getOfficeCode(), e.getOfficeCode(), empUserController.treeData(userIdPrefix, idList.toArray(new String[idList.size()]),
companyCode, postCode, roleCode, isAll, isShowCode, ctrlPermi); companyCode, postCode, roleCode, isAll, isShowCode, ctrlPermi);
mapList.addAll(userList); mapList.addAll(userList);
} }
}
mapList.add(map);
}
// 懒加载用户,点击叶子节点的时候再去加载部门(懒加载无法回显,数据量大时,建议使用 listselect 实现列表选择用户) // 懒加载用户,点击叶子节点的时候再去加载部门(懒加载无法回显,数据量大时,建议使用 listselect 实现列表选择用户)
if (StringUtils.inString(isLoadUser, "lazy") && StringUtils.isNotBlank(parentCode)) { if (StringUtils.inString(isLoadUser, "lazy") && StringUtils.isNotBlank(parentCode)) {
List<Map<String, Object>> userList = List<Map<String, Object>> userList =
empUserController.treeData("u_", parentCode, parentCode, empUserController.treeData(userIdPrefix, new String[]{parentCode},
companyCode, postCode, roleCode, isAll, isShowCode, ctrlPermi); companyCode, postCode, roleCode, isAll, isShowCode, ctrlPermi);
mapList.addAll(userList); mapList.addAll(userList);
} }

View File

@@ -93,7 +93,10 @@ public class CorpAdminController extends BaseController {
// 获取当前用户所拥有的角色 // 获取当前用户所拥有的角色
Role role = new Role(); Role role = new Role();
role.setUserCode(user.getUserCode()); role.setUserCode(user.getUserCode());
model.addAttribute("roleList", roleService.findListByUserCode(role)); List<Role> roleList = roleService.findListByUserCode(role);
roleList.add(new Role(Role.CORP_ADMIN_ROLE_CODE));
model.addAttribute("roleList", roleList);
model.addAttribute("corpAdminRoleCode", Role.CORP_ADMIN_ROLE_CODE);
// 操作类型addCorp: 添加租户; addAdmin: 添加管理员; edit: 编辑 // 操作类型addCorp: 添加租户; addAdmin: 添加管理员; edit: 编辑
model.addAttribute("op", op); model.addAttribute("op", op);
model.addAttribute("user", user); model.addAttribute("user", user);

View File

@@ -33,6 +33,7 @@ import com.jeesite.common.collect.MapUtils;
import com.jeesite.common.config.Global; import com.jeesite.common.config.Global;
import com.jeesite.common.entity.Page; import com.jeesite.common.entity.Page;
import com.jeesite.common.lang.DateUtils; import com.jeesite.common.lang.DateUtils;
import com.jeesite.common.lang.ObjectUtils;
import com.jeesite.common.lang.StringUtils; import com.jeesite.common.lang.StringUtils;
import com.jeesite.common.shiro.realm.AuthorizingRealm; import com.jeesite.common.shiro.realm.AuthorizingRealm;
import com.jeesite.common.utils.excel.ExcelExport; import com.jeesite.common.utils.excel.ExcelExport;
@@ -381,7 +382,6 @@ public class EmpUserController extends BaseController {
/** /**
* 根据机构查询用户树格式 * 根据机构查询用户树格式
* @param idPrefix id前缀默认 u_ * @param idPrefix id前缀默认 u_
* @param pId 父级编码,默认 0
* @param officeCode 机构Code * @param officeCode 机构Code
* @param companyCode 公司Code * @param companyCode 公司Code
* @param postCode 岗位Code * @param postCode 岗位Code
@@ -393,13 +393,17 @@ public class EmpUserController extends BaseController {
@RequiresPermissions("user") @RequiresPermissions("user")
@RequestMapping(value = "treeData") @RequestMapping(value = "treeData")
@ResponseBody @ResponseBody
public List<Map<String, Object>> treeData(String idPrefix, String pId, public List<Map<String, Object>> treeData(String idPrefix,
String officeCode, String companyCode, String postCode, String roleCode, String[] officeCode, String companyCode, String postCode, String roleCode,
Boolean isAll, String isShowCode, String ctrlPermi) { Boolean isAll, String isShowCode, String ctrlPermi) {
List<Map<String, Object>> mapList = ListUtils.newArrayList(); List<Map<String, Object>> mapList = ListUtils.newArrayList();
EmpUser empUser = new EmpUser(); EmpUser empUser = new EmpUser();
Employee employee = empUser.getEmployee(); Employee employee = empUser.getEmployee();
employee.getOffice().setOfficeCode(officeCode); if (officeCode != null && officeCode.length == 1) {
employee.getOffice().setOfficeCode(officeCode[0]);
}else {
employee.getOffice().setId_in(officeCode);
}
employee.getOffice().setIsQueryChildren(false); employee.getOffice().setIsQueryChildren(false);
employee.getCompany().setCompanyCode(companyCode); employee.getCompany().setCompanyCode(companyCode);
employee.getCompany().setIsQueryChildren(false); employee.getCompany().setIsQueryChildren(false);
@@ -414,8 +418,8 @@ public class EmpUserController extends BaseController {
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
EmpUser e = list.get(i); EmpUser e = list.get(i);
Map<String, Object> map = MapUtils.newHashMap(); Map<String, Object> map = MapUtils.newHashMap();
map.put("id", StringUtils.defaultIfBlank(idPrefix, "u_") + e.getId()); map.put("id", ObjectUtils.defaultIfNull(idPrefix, "u_") + e.getId());
map.put("pId", StringUtils.defaultIfBlank(pId, "0")); map.put("pId", StringUtils.defaultIfBlank(e.getEmployee().getOffice().getOfficeCode(), "0"));
map.put("name", StringUtils.getTreeNodeName(isShowCode, e.getLoginCode(), e.getUserName())); map.put("name", StringUtils.getTreeNodeName(isShowCode, e.getLoginCode(), e.getUserName()));
mapList.add(map); mapList.add(map);
} }

View File

@@ -280,8 +280,7 @@ job:
isClustered: true isClustered: true
dataSourceName: job dataSourceName: job
clusterCheckinInterval: 1000 clusterCheckinInterval: 1000
# className: org.quartz.impl.jdbcjobstore.JobStoreTX #className: org.springframework.scheduling.quartz.LocalDataSourceJobStore
# className: org.quartz.impl.jdbcjobstore.JobStoreCMT
# 调度日志配置 # 调度日志配置
log: log:

View File

@@ -118,8 +118,10 @@
绿灰=Green Grey 绿灰=Green Grey
红灰=Red Grey 红灰=Red Grey
黄灰=Yellow Grey 黄灰=Yellow Grey
亮蓝(新)=Bright Blue 亮蓝(经典)=Bright Blue
浅蓝(新)=Light Blue 浅蓝(经典)=Light Blue
亮蓝(无界)=Bright Blue2
浅蓝(无界)=Light Blue2
表单弹窗模式=Form popup mode 表单弹窗模式=Form popup mode
取消页签模式=Cancel tab mode 取消页签模式=Cancel tab mode

View File

@@ -10,8 +10,11 @@
<script src="${ctxStatic}/jquery/jquery-3.5.0.min.js"></script> <script src="${ctxStatic}/jquery/jquery-3.5.0.min.js"></script>
<script src="${ctxStatic}/jquery/jquery-migrate-3.2.0.min.js"></script> <script src="${ctxStatic}/jquery/jquery-migrate-3.2.0.min.js"></script>
<!--[if lt IE 9]><script src="${ctxStatic}/common/h5fix.min.js"></script><![endif]--> <!--[if lt IE 9]><script src="${ctxStatic}/common/h5fix.min.js"></script><![endif]-->
<% if(parameter.__layer! == 'true'){ if(parameter.__layer_title! == 'false'){ %> <% if(parameter.__layer! == 'true'){ %>
<style>.main-content>.box-main>.box-header{padding-right:45px;}</style> <style>.ui-layout-container,.main-content{padding:0!important}</style>
<% if(parameter.__layer_title! == 'false'){ %>
<style>.main-content>.box-main>.box-header{padding-right:45px}</style>
<% }else{ %> <% }else{ %>
<style>.main-content>.box-main>.box-header{display:none;}</style> <style>.main-content>.box-main>.box-header{display:none}</style>
<% } } %> <% }
} %>

View File

@@ -3,8 +3,8 @@
<script src="${ctxStatic}/bootstrap/js/bootstrap.min.js"></script> <script src="${ctxStatic}/bootstrap/js/bootstrap.min.js"></script>
<script src="${ctxStatic}/select2/4.0/select2.js?${_version}"></script> <script src="${ctxStatic}/select2/4.0/select2.js?${_version}"></script>
<script src="${ctxStatic}/select2/4.0/i18n/${lang()}.js?${_version}"></script> <script src="${ctxStatic}/select2/4.0/i18n/${lang()}.js?${_version}"></script>
<script src="${ctxStatic}/layer/3.1/layer.js?${_version}"></script> <script src="${ctxStatic}/layer/3.5/layer.js?${_version}"></script>
<script src="${ctxStatic}/laydate/5.0/laydate.js?${_version}"></script> <script src="${ctxStatic}/laydate/5.3/laydate.js?${_version}"></script>
<% if (@ListUtils.inString('zTree', libs!)){ %> <% if (@ListUtils.inString('zTree', libs!)){ %>
<script src="${ctxStatic}/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js?${_version}"></script> <script src="${ctxStatic}/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js?${_version}"></script>
<% } %> <% } %>

View File

@@ -104,7 +104,7 @@ $("#inputForm").validate({
if(data.result == Global.TRUE){ if(data.result == Global.TRUE){
js.closeCurrentTabPage(function(contentWindow){ js.closeCurrentTabPage(function(contentWindow){
(contentWindow.win||contentWindow).$('#dataGrid').dataGrid('refreshTreeChildren', (contentWindow.win||contentWindow).$('#dataGrid').dataGrid('refreshTreeChildren',
$('#parentCode').val(), '${company.id}'); $('#parentCode').val(), '${area.id}');
}); });
} }
}, "json"); }, "json");

View File

@@ -1,8 +1,7 @@
<% layout('/layouts/default.html', {title:'切换主题'}){ %> <% layout('/layouts/default.html', {title:'切换主题'}){ %>
<link rel="stylesheet" href="${ctxStatic}/icheck/1.0/square/blue.css?${_version}">
<style> <style>
.list-unstyled{margin:10px;} .list-unstyled{margin:10px;}
.full-opacity-hover{opacity:1;filter:alpha(opacity=1);border:1px solid #fff} .full-opacity-hover{opacity:1;filter:none;border:1px solid #fff}
.full-opacity-hover:hover{border:1px solid #f00;} .full-opacity-hover:hover{border:1px solid #f00;}
</style> </style>
<ul class="list-unstyled clearfix"> <ul class="list-unstyled clearfix">
@@ -139,7 +138,7 @@
<span style="display:block;width:20%;float:left;height:30px;background:#f9fafc"></span> <span style="display:block;width:20%;float:left;height:30px;background:#f9fafc"></span>
<span style="display:block;width:80%;float:left;height:30px;background:#f4f5f7"></span> <span style="display:block;width:80%;float:left;height:30px;background:#f4f5f7"></span>
</a> </a>
<p class="text-center no-margin">${text('亮蓝(新)')}</p> <p class="text-center no-margin">${text('亮蓝(经典)')}</p>
</li> </li>
<li style="float:left;width:16.66666%;padding:5px;"> <li style="float:left;width:16.66666%;padding:5px;">
<a href="javascript:" data-skin="skin-blue-light2" style="display:block;box-shadow:0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover"> <a href="javascript:" data-skin="skin-blue-light2" style="display:block;box-shadow:0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
@@ -148,11 +147,29 @@
<span style="display:block;width:20%;float:left;height:30px;background:#f9fafc"></span> <span style="display:block;width:20%;float:left;height:30px;background:#f9fafc"></span>
<span style="display:block;width:80%;float:left;height:30px;background:#f4f5f7"></span> <span style="display:block;width:80%;float:left;height:30px;background:#f4f5f7"></span>
</a> </a>
<p class="text-center no-margin">${text('浅蓝(新)')}</p> <p class="text-center no-margin">${text('浅蓝(经典)')}</p>
</li> </li>
<li style="float:left;padding:18px 0 0 45px;"> <li style="float:left;width:16.66666%;padding:5px;">
<#form:checkbox name="formLayerModel" label="${text('表单弹窗模式')}" class="form-control" data-style="square-blue" style="margin-right:20px"/> <a href="javascript:" data-skin="skin-blue3" style="display:block;box-shadow:0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
<#form:checkbox name="tabPageModel" label="${text('取消页签模式')}" class="form-control" data-style="square-blue"/> <span style="display:block;width:20%;float:left;height:13px;background:#1648ab"></span>
<span style="display:block;width:80%;float:left;height:13px;background:#1951be"></span>
<span style="display:block;width:20%;float:left;height:30px;background:#f9fafc"></span>
<span style="display:block;width:80%;float:left;height:30px;background:#f4f5f7"></span>
</a>
<p class="text-center no-margin">${text('亮蓝(无界)')}</p>
</li>
<li style="float:left;width:16.66666%;padding:5px;">
<a href="javascript:" data-skin="skin-blue-light3" style="display:block;box-shadow:0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
<span style="display:block;width:20%;float:left;height:13px;background:#1681e5"></span>
<span style="display:block;width:80%;float:left;height:13px;background:#1890ff"></span>
<span style="display:block;width:20%;float:left;height:30px;background:#f9fafc"></span>
<span style="display:block;width:80%;float:left;height:30px;background:#f4f5f7"></span>
</a>
<p class="text-center no-margin">${text('浅蓝(无界)')}</p>
</li>
<li style="float:left;width:32%;padding-top:8px;text-align:center;">
<#form:checkbox name="formLayerModel" label="${text('表单弹窗模式')}" class="form-control"/>
<#form:checkbox name="tabPageModel" label="${text('取消页签模式')}" class="form-control"/>
</li> </li>
</ul> </ul>
<% } %> <% } %>

View File

@@ -190,6 +190,18 @@ var roleGrid = $("#roleGrid").dataGrid({
autoGridWidth: function(){ autoGridWidth: function(){
return $('#inputForm .box-body').width()-20; return $('#inputForm .box-body').width()-20;
}, },
onSelectRow: function(id, isSelect, event){
if (!isSelect && id == '${corpAdminRoleCode}') {
js.showMessage('${text("该角色为管理员默认,不能取消。")}');
}
},
onSelectAll: function(ids, isSelect){
for (var i=0; i<ids.length; i++){
if (!isSelect && ids[i] == '${corpAdminRoleCode}') {
js.showMessage('${text("该角色为管理员默认,不能取消。")}');
}
}
},
ajaxSuccess: function(){ ajaxSuccess: function(){
<% for (role in roleList!){ %> <% for (role in roleList!){ %>
roleGrid.dataGrid('setSelectRow', '${role.roleCode}'); roleGrid.dataGrid('setSelectRow', '${role.roleCode}');

View File

@@ -295,7 +295,7 @@ var roleGrid = $("#roleGrid").dataGrid({
<% } %> <% } %>
$("#inputForm").validate({ $("#inputForm").validate({
submitHandler: function(form){ submitHandler: function(form){
<% if(hasPermi('sys:empUser:authRole') && (op == 'add' || op == 'auth')) { // 获取选中角色 %> <% if(hasPermi('sys:empUser:authRole') && (op == 'add' || op == 'auth')) { %>
$("#userRoleString").val(roleGrid.dataGrid('getSelectRows').join(',')); $("#userRoleString").val(roleGrid.dataGrid('getSelectRows').join(','));
<% } %> <% } %>
var empNo = $('#employee_empNo').val(); var empNo = $('#employee_empNo').val();

View File

@@ -5,7 +5,7 @@ companyName: ThinkGem
# 产品版本、版权年份 # 产品版本、版权年份
productVersion: V4.3 productVersion: V4.3
copyrightYear: 2021 copyrightYear: 2022
# 数据库连接 # 数据库连接
jdbc: jdbc:

View File

@@ -6,7 +6,7 @@
<parent> <parent>
<groupId>com.jeesite</groupId> <groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId> <artifactId>jeesite-parent</artifactId>
<version>4.3.2-SNAPSHOT</version> <version>4.3.3-SNAPSHOT</version>
<relativePath>../../parent/pom.xml</relativePath> <relativePath>../../parent/pom.xml</relativePath>
<!-- ====== 这是一个新增模块示例项目,你可以拷贝此项目,修改 artifactId 为您的模块即可 ====== --> <!-- ====== 这是一个新增模块示例项目,你可以拷贝此项目,修改 artifactId 为您的模块即可 ====== -->

View File

@@ -5,3 +5,4 @@
4.3.0 4.3.0
4.3.1 4.3.1
4.3.2 4.3.2
4.3.3

View File

@@ -6,12 +6,12 @@
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version> <version>2.5.9</version>
</parent> </parent>
<groupId>com.jeesite</groupId> <groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId> <artifactId>jeesite-parent</artifactId>
<version>4.3.2-SNAPSHOT</version> <version>4.3.3-SNAPSHOT</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>JeeSite Parent</name> <name>JeeSite Parent</name>
@@ -45,15 +45,14 @@
<groovy.version>3.0.9</groovy.version> <groovy.version>3.0.9</groovy.version>
<!-- framework version setting --> <!-- framework version setting -->
<mybatis.version>3.5.7</mybatis.version> <mybatis.version>3.5.9</mybatis.version>
<mybatis-spring.version>2.0.6</mybatis-spring.version> <mybatis-spring.version>2.0.6</mybatis-spring.version>
<jsqlparser.version>4.0</jsqlparser.version> <jsqlparser.version>4.3</jsqlparser.version>
<druid.version>1.2.8</druid.version> <druid.version>1.2.8</druid.version>
<shiro.version>1.8.0</shiro.version> <shiro.version>1.8.0</shiro.version>
<j2cache.version>2.8.0-release</j2cache.version> <j2cache.version>2.8.0-release</j2cache.version>
<beetl.version>3.3-SNAPSHOT</beetl.version>
<swagger.version>1.6.0</swagger.version> <swagger.version>1.6.0</swagger.version>
<log4j2.version>2.17.0</log4j2.version> <log4j2.version>2.17.1</log4j2.version>
<!-- jdbc setting --> <!-- jdbc setting -->
<!-- <mysql.version>5.1.49</mysql.version> --> <!-- <mysql.version>5.1.49</mysql.version> -->
@@ -61,7 +60,7 @@
<!-- environment setting --> <!-- environment setting -->
<java.version>1.8</java.version> <java.version>1.8</java.version>
<!-- <tomcat.version>9.0.54</tomcat.version> --> <tomcat.version>9.0.58</tomcat.version>
<maven.test.skip>true</maven.test.skip> <maven.test.skip>true</maven.test.skip>
<maven-surefire-plugin.version>2.18.1</maven-surefire-plugin.version><!-- 降级到该版本新版本可能会出现VM崩溃 --> <maven-surefire-plugin.version>2.18.1</maven-surefire-plugin.version><!-- 降级到该版本新版本可能会出现VM崩溃 -->
<eclipse-plugin-download-sources>false</eclipse-plugin-download-sources> <eclipse-plugin-download-sources>false</eclipse-plugin-download-sources>

View File

@@ -5,7 +5,7 @@
<groupId>com.jeesite</groupId> <groupId>com.jeesite</groupId>
<artifactId>jeesite-root</artifactId> <artifactId>jeesite-root</artifactId>
<version>4.3.2-SNAPSHOT</version> <version>4.3.3-SNAPSHOT</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>JeeSite</name> <name>JeeSite</name>

View File

@@ -6,7 +6,7 @@
<parent> <parent>
<groupId>com.jeesite</groupId> <groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId> <artifactId>jeesite-parent</artifactId>
<version>4.3.2-SNAPSHOT</version> <version>4.3.3-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath> <relativePath>../parent/pom.xml</relativePath>
</parent> </parent>

View File

@@ -0,0 +1,35 @@
# 使用环境配置,只需 JVM 参数里加:-Dspring.profiles.active=prod
#======================================#
#========== Server settings ===========#
#======================================#
server:
port: 8980
servlet:
context-path: /js
#======================================#
#========== Database sttings ==========#
#======================================#
# 数据库连接
jdbc:
# Mysql 数据库配置
type: mysql
driver: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jeesite?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai
username: root
password: 123456
testSql: SELECT 1
#======================================#
#========== Spring settings ===========#
#======================================#
# 日志配置
logging:
config: classpath:config/logback-spring-prod.xml

View File

@@ -9,7 +9,7 @@ companyName: ThinkGem
# 产品版本、版权年份 # 产品版本、版权年份
productVersion: V4.3 productVersion: V4.3
copyrightYear: 2021 copyrightYear: 2022
#是否演示模式 #是否演示模式
demoMode: false demoMode: false

View File

@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">
<!-- Log file path -->
<property name="log.path" value="${logPath:-${java.io.tmpdir:-.}}/logs" />
<!-- Framework level setting -->
<include resource="config/logger-core.xml"/>
<logger name="org.mybatis.spring.transaction" level="INFO" />
<logger name="org.flowable.ui.modeler.domain" level="INFO" />
<logger name="org.flowable.idm.engine.impl.persistence" level="INFO" />
<logger name="org.flowable.task.service.impl.persistence" level="INFO" />
<logger name="org.flowable.identitylink.service.impl.persistence" level="INFO" />
<logger name="org.flowable.variable.service.impl.persistence" level="INFO" />
<logger name="org.flowable.engine.impl.persistence" level="INFO" />
<logger name="com.jeesite" level="INFO" />
<logger name="com.jeesite.common.mybatis.mapper" level="INFO" />
<!-- Project level setting -->
<!-- <logger name="your.package" level="DEBUG" /> -->
<!-- Console log output -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{MM-dd HH:mm:ss.SSS} %clr(%-5p) %clr([%-39logger{39}]){cyan} - %m%n%wEx</pattern>
</encoder>
</appender>
<!-- Log file debug output -->
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/debug.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p ${PID:- } [%15.15t] [%-39logger{39}] [%X{TRACE_ID}] - %m%n%wEx</pattern>
</encoder>
<!--<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>NEUTRAL</onMismatch>
</filter>-->
</appender>
<!-- Log file error output -->
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p ${PID:- } [%15.15t] [%-39logger{39}] [%X{TRACE_ID}] - %m%n%wEx</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 -->
<root level="WARN">
<appender-ref ref="console" />
<appender-ref ref="debug" />
<appender-ref ref="error" />
</root>
</configuration>

View File

@@ -133,7 +133,7 @@ $('#dataGrid').dataGrid({
editable:true, edittype:'select', editoptions:{'class':'form-control', editable:true, edittype:'select', editoptions:{'class':'form-control',
items: $.merge([{dictLabel:'&nbsp;',dictValue:''}], ${@DictUtils.getDictListJson('sys_menu_type')}), items: $.merge([{dictLabel:'&nbsp;',dictValue:''}], ${@DictUtils.getDictListJson('sys_menu_type')}),
itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){ itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
$(element).select2().on("change",function(){$(this).resetValid()}); js.select2(element).on("change",function(){$(this).resetValid()});
} }
}, unformat: function(val, obj, cell){return $('#'+obj.rowId+'_'+obj.colModel.name, cell).val();} }, unformat: function(val, obj, cell){return $('#'+obj.rowId+'_'+obj.colModel.name, cell).val();}
}, },
@@ -141,7 +141,7 @@ $('#dataGrid').dataGrid({
// editable:true, edittype:'select', editoptions:{multiple:true, 'class':'form-control', // editable:true, edittype:'select', editoptions:{multiple:true, 'class':'form-control',
// items: $.merge([], ${@DictUtils.getDictListJson('sys_menu_type')}), // items: $.merge([], ${@DictUtils.getDictListJson('sys_menu_type')}),
// itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){ // itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
// $(element).select2().on("change",function(){$(this).resetValid()}); // js.select2(element).on("change",function(){$(this).resetValid()});
// } // }
// }, unformat: function(val, obj, cell){return $('#'+obj.rowId+'_'+obj.colModel.name, cell).val();} // }, unformat: function(val, obj, cell){return $('#'+obj.rowId+'_'+obj.colModel.name, cell).val();}
// }, // },

View File

@@ -333,7 +333,7 @@ $("#testDataChildDataGrid").dataGrid({
editable:true, edittype:'select', editoptions:{'class':'form-control', editable:true, edittype:'select', editoptions:{'class':'form-control',
items: $.merge([{dictLabel:'&nbsp;',dictValue:''}], ${@DictUtils.getDictListJson('sys_menu_type')}), items: $.merge([{dictLabel:'&nbsp;',dictValue:''}], ${@DictUtils.getDictListJson('sys_menu_type')}),
itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){ itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
$(element).select2().on("change",function(){$(this).resetValid()}); js.select2(element).on("change",function(){$(this).resetValid()});
} }
} }
}, },
@@ -341,7 +341,7 @@ $("#testDataChildDataGrid").dataGrid({
editable:true, edittype:'select', editoptions:{multiple:true, 'class':'form-control', editable:true, edittype:'select', editoptions:{multiple:true, 'class':'form-control',
items: $.merge([], ${@DictUtils.getDictListJson('sys_menu_type')}), items: $.merge([], ${@DictUtils.getDictListJson('sys_menu_type')}),
itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){ itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
$(element).select2().on("change",function(){$(this).resetValid()}); js.select2(element).on("change",function(){$(this).resetValid()});
} }
} }
}, },
@@ -349,7 +349,7 @@ $("#testDataChildDataGrid").dataGrid({
editable:true, edittype:'select', editoptions:{'class':'form-control', editable:true, edittype:'select', editoptions:{'class':'form-control',
items: $.merge([{dictLabel:'&nbsp;',dictValue:''}], ${@DictUtils.getDictListJson('sys_menu_type')}), items: $.merge([{dictLabel:'&nbsp;',dictValue:''}], ${@DictUtils.getDictListJson('sys_menu_type')}),
itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){ itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
$(element).select2().on("change",function(){$(this).resetValid()}); js.select2(element).on("change",function(){$(this).resetValid()});
} }
} }
}, },
@@ -357,7 +357,7 @@ $("#testDataChildDataGrid").dataGrid({
editable:true, edittype:'select', editoptions:{multiple:true, 'class':'form-control', editable:true, edittype:'select', editoptions:{multiple:true, 'class':'form-control',
items: $.merge([], ${@DictUtils.getDictListJson('sys_menu_type')}), items: $.merge([], ${@DictUtils.getDictListJson('sys_menu_type')}),
itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){ itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
$(element).select2().on("change",function(){$(this).resetValid()}); js.select2(element).on("change",function(){$(this).resetValid()});
} }
} }
}, },

View File

@@ -163,7 +163,7 @@ $("#testDataChildDataGrid").dataGrid({
editable:true, edittype:'select', editoptions:{'class':'form-control', editable:true, edittype:'select', editoptions:{'class':'form-control',
items: $.merge([{dictLabel:'&nbsp;',dictValue:''}], ${@DictUtils.getDictListJson('sys_menu_type')}), items: $.merge([{dictLabel:'&nbsp;',dictValue:''}], ${@DictUtils.getDictListJson('sys_menu_type')}),
itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){ itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
$(element).select2().on("change",function(){$(this).resetValid()}); js.select2(element).on("change",function(){$(this).resetValid()});
} }
} }
}, },

View File

@@ -14,11 +14,11 @@
<div class="form-unit">${text('基本信息')}</div> <div class="form-unit">${text('基本信息')}</div>
<#form:hidden path="id"/> <#form:hidden path="id"/>
<div class="row"> <div class="row">
<div class="col-xs-6"> <div class="col-xs-12">
<div class="form-group"> <div class="form-group">
<label class="control-label col-sm-4" title=""> <label class="control-label col-sm-2" title="">
<span class="required hide">*</span> ${text('单行文本')}<i class="fa icon-question hide"></i></label> <span class="required hide">*</span> ${text('单行文本')}<i class="fa icon-question hide"></i></label>
<div class="col-sm-8"> <div class="col-sm-10">
<#form:input path="testInput" maxlength="200" class="form-control"/> <#form:input path="testInput" maxlength="200" class="form-control"/>
</div> </div>
</div> </div>
@@ -202,73 +202,100 @@ $("#testDataChildDataGrid").dataGrid({
// 设置数据表格列 // 设置数据表格列
columnModel: [ columnModel: [
{header:'${text("操作")}', name:'actions', width:40, align:"center", formatter: function(val, obj, row, act){
var actions = [];
if (val == 'new'){
actions.push('<a href="#" onclick="js.confirm(\'${text("你确认要删除这条数据吗?")}\', function(){$(\'#testDataChildDataGrid\').dataGrid(\'delRowData\',\''+obj.rowId+'\')});return false;"><i class="fa fa-trash-o"></i></a>&nbsp;');
}else{
actions.push('<a href="#" onclick="js.confirm(\'${text("你确认要删除这条数据吗?")}\', function(){$(\'#testDataChildDataGrid\').dataGrid(\'setRowData\',\''+obj.rowId+'\',null,{display:\'none\'});$(\'#'+obj.rowId+'_status\').val(\''+Global.STATUS_DELETE+'\');});return false;"><i class="fa fa-trash-o"></i></a>&nbsp;');
}
return actions.join('');
}, editoptions: {defaultValue: 'new'}},
{header:'状态', name:'status', editable:true, hidden:true}, {header:'状态', name:'status', editable:true, hidden:true},
{header:'主键', name:'id', editable:true, hidden:true}, {header:'主键', name:'id', editable:true, hidden:true},
{header:'${text("排序号")}', name:'testSort', width:130, editable:true, edittype:'text', editoptions:{'maxlength':'11', 'class':'form-control digits'}}, {header:'${text("排序号")}', name:'testSort', width:100, editable:true, edittype:'text', editoptions:{'maxlength':'11', 'class':'form-control digits'}},
{header:'${text("父表主键")}', name:'testData.id', editable:true, hidden:true}, {header:'${text("父表主键")}', name:'testData.id', editable:true, hidden:true},
{header:'${text("单行文本")}', name:'testInput', width:130, editable:true, edittype:'text', editoptions:{'maxlength':'200', 'class':'form-control'}}, {header:'${text("单行文本")}', name:'testInput', width:100, editable:true, edittype:'text', editoptions:{'maxlength':'200', 'class':'form-control'}},
{header:'${text("多行文本")}', name:'testTextarea', width:130, editable:true, edittype:'textarea', editoptions:{'maxlength':'200', 'class':'form-control', 'rows':'1'}}, {header:'${text("多行文本")}', name:'testTextarea', width:100, editable:true, edittype:'textarea', editoptions:{'maxlength':'200', 'class':'form-control', 'rows':'1'}},
{header:'${text("下拉框")}', name:'testSelect', width:100, {header:'${text("下拉框")}', name:'testSelect', width:100,
editable:true, edittype:'select', editoptions:{'class':'form-control', editable:true, edittype:'select', editoptions:{'class':'form-control',
items: $.merge([{dictLabel:'&nbsp;',dictValue:''}], ${@DictUtils.getDictListJson('sys_menu_type')}), items: $.merge([{dictLabel:'&nbsp;',dictValue:''}], ${@DictUtils.getDictListJson('sys_menu_type')}),
itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){ itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
$(element).select2().on("change",function(){$(this).resetValid()}); js.select2(element).on("change",function(){$(this).resetValid()});
} }
} }
}, },
{header:'${text("下拉多选")}', name:'testSelectMultiple', width:130, {header:'${text("下拉多选")}', name:'testSelectMultiple', width:90, fixed: true,
editable:true, edittype:'select', editoptions:{multiple:true, 'class':'form-control', editable:true, edittype:'select', editoptions:{multiple:true, 'class':'form-control',
items: $.merge([], ${@DictUtils.getDictListJson('sys_menu_type')}), items: $.merge([], ${@DictUtils.getDictListJson('sys_menu_type')}),
itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){ itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
$(element).select2().on("change",function(){$(this).resetValid()}); js.select2(element).on("change",function(){$(this).resetValid()});
} }
} }
}, },
{header:'${text("单选框")}', name:'testRadio', width:100, {header:'${text("单选框")}', name:'testRadio', width:135, fixed: true,
editable:true, edittype:'select', editoptions:{'class':'form-control', editable:true, edittype:'radio', editoptions:{'class':'form-control icheck',
items: $.merge([{dictLabel:'&nbsp;',dictValue:''}], ${@DictUtils.getDictListJson('sys_menu_type')}), items: $.merge([], ${@DictUtils.getDictListJson('sys_menu_type')}),
itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){ itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
$(element).select2().on("change",function(){$(this).resetValid()}); js.iCheck(element).on("ifChanged",function(){$(this).resetValid()});
} }
} }
}, },
{header:'${text("日期选择")}', name:'testDate', width:150, {header:'${text("复选框")}', name:'testCheckbox', width:135, fixed: true,
editable:true, edittype:'checkbox', editoptions:{'class':'form-control icheck',
items: $.merge([], ${@DictUtils.getDictListJson('sys_menu_type')}),
itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
js.iCheck(element).on("ifChanged",function(){$(this).resetValid()});
}
}
},
{header:'${text("日期选择")}', name:'testDate', width:120,
formatter:'date', formatoptions:{srcformat:'Y-m-d H:i:s',newformat:'Y-m-d'}, formatter:'date', formatoptions:{srcformat:'Y-m-d H:i:s',newformat:'Y-m-d'},
editable:true, edittype:'text', editoptions:{'class':'form-control laydate', 'readonly':'true', editable:true, edittype:'text', editoptions:{'class':'form-control laydate', 'readonly':'true',
dataInit: function(element){ dataInit: function(element){
laydate.render({elem:element, type:'date', format:'yyyy-MM-dd', done: function(){ laydate.render({elem:element, type:'date', format:'yyyy-MM-dd', done: function(){
// 选择日期后,自动给下一个输入框赋值(联动实例) // 选择日期后,自动给下一个输入框赋值(联动实例)
// $(element).closest('td').next().find('.form-control').val('2020-11-26 10:10:10'); // $(element).closest('td').next().find('.form-control').val('2020-11-26 10:10');
}}); }});
} }
} }
}, },
// {header:'${text("用户选择")}', name:'testUser', width:150, {header:'${text("日期时间")}', name:'testDatetime', width:155,
// formatter: function(val, obj, row, act){ formatter:'date', formatoptions:{srcformat:'Y-m-d H:i:s',newformat:'Y-m-d H:i'},
// return js.val(row, 'testUser.userCode')+'|'+js.val(row, 'testUser.userName'); editable:true, edittype:'text', editoptions:{'class':'form-control laydate', 'readonly':'true',
// }, editable: true, edittype: "custom", editoptions: { dataInit: function(element){
// custom_element: function(val, editOptions) { laydate.render({elem:element, type:'datetime', format:'yyyy-MM-dd HH:mm'});
// return js.template('treeselectTpl', { }
// id: 'user_'+editOptions.id, title: '用户选择', }
// name: 'testUser.userCode', value: val.split('|')[0], },
// labelName: 'testUser.userName', labelValue: val.split('|')[1], {header:'${text("用户选择")}', name:'testUser', width:100,
// url: '${ctx}/sys/office/treeData?isLoadUser=true', cssClass: '', readonly: false formatter: function(val, obj, row, act){
// }); return js.val(row, 'testUser.userCode')+'|'+js.val(row, 'testUser.userName');
// }, }, editable: true, edittype: "custom", editoptions: {
// custom_value: function(element, act){ custom_element: function(val, editOptions) {
// return {userCode: element.find('[type=hidden]').val(), return js.template('treeselectTpl', {
// userName: element.find('[type=text]').val()}; id: 'user_'+editOptions.id, title: '用户选择',
// }, name: 'testUser.userCode', value: val.split('|')[0],
// dataInit: function(element){ labelName: 'testUser.userName', labelValue: val.split('|')[1],
// // 初始化控件后设置只读模式(实例) url: '${ctx}/sys/office/treeData?isLoadUser=true', cssClass: '', readonly: false
// // $(element).find('.form-control, .btn').addClass('disabled'); });
// } },
// }, custom_value: function(element, act){
// unformat: function(val, obj, cell){ return {userCode: element.find('[type=hidden]').val(),
// return $('#user_'+obj.rowId+'_'+obj.colModel.name+'Code', cell).val(); userName: element.find('[type=text]').val()};
// } },
// }, dataInit: function(element){
{header:'${text("用户选择")}', name:'testUser2', width:150, // 初始化控件后设置只读模式(实例)
// $(element).find('.form-control, .btn').addClass('disabled');
}
},
unformat: function(val, obj, cell){
return $('#user_'+obj.rowId+'_'+obj.colModel.name+'Code', cell).val();
}
},
{header:'${text("用户选择")}', name:'testUser2', width:100,
formatter: function(val, obj, row, act){ formatter: function(val, obj, row, act){
return js.val(row, 'testUser.userCode')+'|'+js.val(row, 'testUser.userName'); return js.val(row, 'testUser.userCode')+'|'+js.val(row, 'testUser.userName');
}, editable: true, edittype: "custom", editoptions: { }, editable: true, edittype: "custom", editoptions: {
@@ -283,7 +310,7 @@ $("#testDataChildDataGrid").dataGrid({
} }
} }
}, },
{header:'${text("机构选择")}', name:'testOffice', width:150, title:false, {header:'${text("机构选择")}', name:'testOffice', width:100, title:false,
formatter: function(val, obj, row, act){ formatter: function(val, obj, row, act){
return js.val(row, 'testOffice.officeCode')+'|'+js.val(row, 'testOffice.officeName'); return js.val(row, 'testOffice.officeCode')+'|'+js.val(row, 'testOffice.officeName');
}, editable: true, edittype: "custom", editoptions: { }, editable: true, edittype: "custom", editoptions: {
@@ -297,7 +324,7 @@ $("#testDataChildDataGrid").dataGrid({
} }
} }
}, },
{header:'${text("区域选择")}', name:'testAreaCode', width:150, {header:'${text("区域选择")}', name:'testAreaCode', width:100,
formatter: function(val, obj, row, act){ formatter: function(val, obj, row, act){
return js.val(row, 'testAreaCode')+'|'+js.val(row, 'testAreaName'); return js.val(row, 'testAreaCode')+'|'+js.val(row, 'testAreaName');
}, editable: true, edittype: "custom", editoptions: { }, editable: true, edittype: "custom", editoptions: {
@@ -320,17 +347,9 @@ $("#testDataChildDataGrid").dataGrid({
}); });
} }
} }
},
{header:'${text("操作")}', name:'actions', width:60, sortable:false, fixed:true, formatter: function(val, obj, row, act){
var actions = [];
if (val == 'new'){
actions.push('<a href="#" onclick="js.confirm(\'${text("你确认要删除这条数据吗?")}\', function(){$(\'#testDataChildDataGrid\').dataGrid(\'delRowData\',\''+obj.rowId+'\')});return false;"><i class="fa fa-trash-o"></i></a>&nbsp;');
}else{
actions.push('<a href="#" onclick="js.confirm(\'${text("你确认要删除这条数据吗?")}\', function(){$(\'#testDataChildDataGrid\').dataGrid(\'setRowData\',\''+obj.rowId+'\',null,{display:\'none\'});$(\'#'+obj.rowId+'_status\').val(\''+Global.STATUS_DELETE+'\');});return false;"><i class="fa fa-trash-o"></i></a>&nbsp;');
} }
return actions.join('');
}, editoptions: {defaultValue: 'new'}}
], ],
shrinkToFit: false, // 是否按百分比自动调整列宽
// 编辑表格参数 // 编辑表格参数
editGrid: true, // 是否是编辑表格 editGrid: true, // 是否是编辑表格