Compare commits
246 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f18af7130b | ||
|
|
e0780b464d | ||
|
|
926c25c18b | ||
|
|
1b22ee0591 | ||
|
|
4a2a8afe72 | ||
|
|
470a8998fb | ||
|
|
a3199ff716 | ||
|
|
a358118658 | ||
|
|
4733ed375a | ||
|
|
a22a91c482 | ||
|
|
a30f1d51c4 | ||
|
|
96d1d7c4fd | ||
|
|
26f6781a62 | ||
|
|
a861ba7c80 | ||
|
|
a38cdb3e5a | ||
|
|
edb3c078ae | ||
|
|
101484d938 | ||
|
|
31775c0255 | ||
|
|
1b4b70a9ac | ||
|
|
e31a810437 | ||
|
|
fdedcc4f79 | ||
|
|
7c6e79b06b | ||
|
|
d0e0cbdf7a | ||
|
|
bb5db42ed5 | ||
|
|
b40fc1c35c | ||
|
|
21fcae1e97 | ||
|
|
0150e054c2 | ||
|
|
d8c85389b7 | ||
|
|
9c5b2d232c | ||
|
|
743c31d768 | ||
|
|
b169727263 | ||
|
|
3716cdfa87 | ||
|
|
03a0a51de9 | ||
|
|
d5b0aa9a14 | ||
|
|
ef6716e83c | ||
|
|
b5c7fd1a23 | ||
|
|
fbda5d558e | ||
|
|
ed38197ce1 | ||
|
|
6cb76ee31c | ||
|
|
7d73ba299c | ||
|
|
d3b5c67edd | ||
|
|
aed37d61fc | ||
|
|
6b89b2a15b | ||
|
|
c3cf990986 | ||
|
|
2e361e82a0 | ||
|
|
835ef5c82d | ||
|
|
3f51716843 | ||
|
|
05b65b9ac4 | ||
|
|
0dc0d31066 | ||
|
|
47f9f37e25 | ||
|
|
d5944598c2 | ||
|
|
91e418fcec | ||
|
|
b8162c5d69 | ||
|
|
dce899c3f4 | ||
|
|
26d8ae7486 | ||
|
|
4c26dd9abf | ||
|
|
67063a6dd7 | ||
|
|
0a123a137b | ||
|
|
8c7540f838 | ||
|
|
a9e728f3a6 | ||
|
|
6a2655b7e1 | ||
|
|
7a4499640c | ||
|
|
e03991b347 | ||
|
|
f470fcfdfd | ||
|
|
208fbb7320 | ||
|
|
9dc50ca0d9 | ||
|
|
1e21b15201 | ||
|
|
5f61c98b49 | ||
|
|
63dc0f8935 | ||
|
|
6e0632b694 | ||
|
|
5090fd0d44 | ||
|
|
109919d715 | ||
|
|
02c635c8af | ||
|
|
21a94f701d | ||
|
|
9f2f393d3f | ||
|
|
8fd22731f8 | ||
|
|
0c477d19df | ||
|
|
d19d9f0bfe | ||
|
|
a99b658ba7 | ||
|
|
630af59c3b | ||
|
|
441fea32fb | ||
|
|
cb8a4d2f73 | ||
|
|
f5031e51ac | ||
|
|
0840bb590d | ||
|
|
42341583ed | ||
|
|
ab1f973765 | ||
|
|
4ae255ae45 | ||
|
|
22751ae9e8 | ||
|
|
4154cc5328 | ||
|
|
edd04b116b | ||
|
|
d8138e7098 | ||
|
|
c0078030f4 | ||
|
|
faa2cdb3b3 | ||
|
|
537ed1f0ea | ||
|
|
a516967393 | ||
|
|
39d42657e4 | ||
|
|
9d295eda35 | ||
|
|
7484c990d7 | ||
|
|
b704cdc55b | ||
|
|
b16d6bd4bd | ||
|
|
858b04ff75 | ||
|
|
c5eded94c0 | ||
|
|
5c39029c62 | ||
|
|
c06e83f3b2 | ||
|
|
91f41a886f | ||
|
|
6dce23a32f | ||
|
|
93a09be05d | ||
|
|
07e705fee7 | ||
|
|
a612ce1acb | ||
|
|
401f5d0efd | ||
|
|
46f508ea38 | ||
|
|
6257b8ace7 | ||
|
|
b31364a794 | ||
|
|
a0d6ef9097 | ||
|
|
ddc67f0189 | ||
|
|
1cbb9c8c4f | ||
|
|
0bcf6e8921 | ||
|
|
318c751ec2 | ||
|
|
5398f57fe1 | ||
|
|
1054c544bf | ||
|
|
8ff65b3b26 | ||
|
|
1e8f06c019 | ||
|
|
320f891278 | ||
|
|
4163d48838 | ||
|
|
35834e1e8d | ||
|
|
3d3ec2a152 | ||
|
|
627cd062c6 | ||
|
|
d5098e7ed2 | ||
|
|
f1317888fb | ||
|
|
e4b2866c4d | ||
|
|
efab785f1b | ||
|
|
a5ce5cd56b | ||
|
|
e6b69fa5e0 | ||
|
|
032d6a525a | ||
|
|
2a02d43c05 | ||
|
|
c0a7443ede | ||
|
|
d7608663db | ||
|
|
e3bafc4ac8 | ||
|
|
0b1cfba5c3 | ||
|
|
f27728a647 | ||
|
|
bfcc0a8a97 | ||
|
|
e1e80b57bd | ||
|
|
195bc56c3d | ||
|
|
01a078864a | ||
|
|
f599959962 | ||
|
|
0650ff2dde | ||
|
|
6e26d9677b | ||
|
|
51b630f963 | ||
|
|
ace080f67f | ||
|
|
6751a4f92f | ||
|
|
41aaca5b20 | ||
|
|
3730a5fe4c | ||
|
|
23d221b88e | ||
|
|
0901144fb4 | ||
|
|
005b0079ca | ||
|
|
96cf2a3aaf | ||
|
|
18fcbfb11e | ||
|
|
21579f705a | ||
|
|
6655214eb2 | ||
|
|
3aef4ad672 | ||
|
|
630b28f452 | ||
|
|
00ff5288f1 | ||
|
|
2cd649e009 | ||
|
|
701c178d83 | ||
|
|
f4d8d6772a | ||
|
|
958d019cd5 | ||
|
|
2272f36588 | ||
|
|
4bbb63a4b6 | ||
|
|
3719e62fb6 | ||
|
|
57e172802d | ||
|
|
53ceb352e0 | ||
|
|
9e2e122128 | ||
|
|
a0b5957d25 | ||
|
|
6d179000df | ||
|
|
64b490183e | ||
|
|
333ca9b78b | ||
|
|
840af32ba3 | ||
|
|
fb24ef1a7b | ||
|
|
3b7b16e08c | ||
|
|
ecab037d71 | ||
|
|
77a2d6ea66 | ||
|
|
c1f0f8e581 | ||
|
|
c6d8d6e1ac | ||
|
|
b2c8bb07e4 | ||
|
|
37091b1a58 | ||
|
|
3af98f56de | ||
|
|
d5c95c3acc | ||
|
|
45b2c6ae95 | ||
|
|
6de1f82511 | ||
|
|
b6762cacd0 | ||
|
|
364752f876 | ||
|
|
8c1386d71f | ||
|
|
53734b1849 | ||
|
|
1c508b8c3b | ||
|
|
1a02335645 | ||
|
|
4aa69607ee | ||
|
|
1decb82081 | ||
|
|
b2a43e3cef | ||
|
|
3c00e7dee1 | ||
|
|
28e3e4a20e | ||
|
|
6cf828ab44 | ||
|
|
aec3f28af8 | ||
|
|
b355f62d49 | ||
|
|
cbb7667779 | ||
|
|
edbe454a73 | ||
|
|
6b8cbe0bad | ||
|
|
dddf34e3aa | ||
|
|
e49d6f25af | ||
|
|
5a62f9d38d | ||
|
|
f07973c7c7 | ||
|
|
4edfd359cf | ||
|
|
319c6f533a | ||
|
|
0b8ad07f37 | ||
|
|
8b4fa39916 | ||
|
|
fb7c4cd68d | ||
|
|
fe95d79c9c | ||
|
|
9d128e42fa | ||
|
|
da54dbfe41 | ||
|
|
f195e1f120 | ||
|
|
09ca6c68a9 | ||
|
|
77d1fde546 | ||
|
|
a9fccbb40f | ||
|
|
3c769e17e1 | ||
|
|
1fe1067930 | ||
|
|
90de804cf3 | ||
|
|
f5d5b16a16 | ||
|
|
f5fa369b97 | ||
|
|
aebdb2b567 | ||
|
|
6f85d699fd | ||
|
|
4199a689fb | ||
|
|
2a7784555c | ||
|
|
50811f8f0c | ||
|
|
dd850c88a0 | ||
|
|
611cd1cdc8 | ||
|
|
bf2e686df1 | ||
|
|
6c84e153b1 | ||
|
|
81634a4ee4 | ||
|
|
dbc0161c93 | ||
|
|
7fbb65a93c | ||
|
|
0322127a74 | ||
|
|
eb9c84a2d9 | ||
|
|
08cd366d1f | ||
|
|
817f8e032d | ||
|
|
eed65d732a | ||
|
|
a929eb13e6 | ||
|
|
9e25ba658c |
24
README.md
24
README.md
@@ -4,8 +4,8 @@
|
||||
</p>
|
||||
<h3 align="center" style="margin:30px 0 30px;font-weight:bold;font-size:30px;">快速开发平台 - Spring Boot</h3>
|
||||
<p align="center">
|
||||
<a href="https://jeesite.com/docs/upgrade/" target="__blank"><img alt="JeeSite-V4.5" src="https://img.shields.io/badge/JeeSite-V4.5-success.svg"></a>
|
||||
<a href="https://spring.io/projects/spring-boot#learn" target="__blank"><img alt="SpringBoot-2.6" src="https://img.shields.io/badge/SpringBoot-2.6-blue.svg"></a>
|
||||
<a href="https://jeesite.com/docs/upgrade/" target="__blank"><img alt="JeeSite-V5.2" src="https://img.shields.io/badge/JeeSite-V5.2-success.svg"></a>
|
||||
<a href="https://spring.io/projects/spring-boot#learn" target="__blank"><img alt="SpringBoot-2.7" src="https://img.shields.io/badge/SpringBoot-2.7-blue.svg"></a>
|
||||
<a href="https://gitee.com/thinkgem/jeesite4/stargazers" target="__blank"><img alt="star" src="https://gitee.com/thinkgem/jeesite4/badge/star.svg?theme=dark"></a>
|
||||
<a href="https://gitee.com/thinkgem/jeesite4/members" target="__blank"><img alt="fork" src="https://gitee.com/thinkgem/jeesite4/badge/fork.svg?theme=dark"></a>
|
||||
</p>
|
||||
@@ -51,11 +51,11 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
|
||||
|
||||
## 技术选型
|
||||
|
||||
* 主框架:Spring Boot 2.6、Spring Framework 5.3、Apache Shiro 1.9、J2Cache
|
||||
* 主框架:Spring Boot 2.7、Spring Framework 5.3、Apache Shiro 1.10、J2Cache
|
||||
* 持久层: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.10(替换JSP)、Bootstrap 3.3、AdminLTE 2.4
|
||||
* 前端组件:jQuery 3.5、jqGrid 4.7、layer 3.5、zTree 3.5、jQuery Validation
|
||||
* 分离前端版:Node.js、TypeScript、Vue3、Vite、Ant Design Vue、Vue Vben Admin
|
||||
* 分离前端版:Node.js、TypeScript、Vue3、Vite、Ant Design Vue3、Vue Vben Admin
|
||||
* 工作流引擎:Flowable 6.6、符合 BPMN 规范、在线流程设计器、中国式流程、退回、撤回、自由流
|
||||
* Bootstrap 版 支持 IE9 及以上版本及其他所有现代浏览器,如:谷歌、火狐、国产浏览器 等
|
||||
* Vue3 版 支持现代浏览器,如:谷歌 Chrome 86+、火狐、国产浏览器 等
|
||||
@@ -88,12 +88,22 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
|
||||
### 本地运行
|
||||
|
||||
1. 环境准备:`JDK 1.8 or 11、17`、`Maven 3.6+`、使用 `MySQL 5.7 or 8.0` 数据库、[其它数据库](https://jeesite.com/docs/technology/#_8、已支持数据库)
|
||||
2. 下载源码:<https://gitee.com/thinkgem/jeesite4/repository/archive/v4.5.zip> 并解压
|
||||
2. 下载源码:<https://gitee.com/thinkgem/jeesite4/repository/archive/v5.2.zip> 并解压
|
||||
3. 打开文件:`/web/src/main/resources/config/application.yml` 配置JDBC连接
|
||||
4. 执行脚本:`/web/bin/init-data.bat` 初始化数据库
|
||||
5. 执行脚本:`/web/bin/run-tomcat.bat` 启动服务即可
|
||||
6. 浏览器访问:<http://127.0.0.1:8980/js/> 账号 system 密码 admin
|
||||
7. 部署常见问题:<https://jeesite.com/docs/faq/>
|
||||
8. 分离端安装:<https://jeesite.com/docs/vue-install-deploy/>
|
||||
|
||||
### 快速运行
|
||||
|
||||
1. 环境准备:`JDK 1.8 or 11、17`、`Maven 3.6+`、无需准备数据库(使用内嵌 H2 DB)
|
||||
2. 下载源码:<https://gitee.com/thinkgem/jeesite4/repository/archive/v5.0_dev.zip> 并解压
|
||||
3. 执行脚本:`/web-fast/bin/run-tomcat.bat` 启动服务即可(自动初始化库)
|
||||
4. 浏览器访问:<http://127.0.0.1:8980/js/> 账号 system 密码 admin
|
||||
5. 部署常见问题:<https://jeesite.com/docs/faq/>
|
||||
8. 分离端安装:<https://jeesite.com/docs/vue-install-deploy/>
|
||||
|
||||
### 容器运行
|
||||
|
||||
@@ -107,11 +117,13 @@ docker run -d -p 8980:8980 --name jeesite-web -v /data:/data \
|
||||
thinkgem/jeesite-web && docker logs -f jeesite-web
|
||||
```
|
||||
- 浏览器访问:<http://127.0.0.1:8980/js/> 账号 system 密码 admin
|
||||
- 分离端安装:<https://jeesite.com/docs/vue-install-deploy/>
|
||||
|
||||
### 开发环境
|
||||
|
||||
1. 部署运行文档:<https://jeesite.com/docs/install-deploy/>
|
||||
2. 部署常见问题:<https://jeesite.com/docs/faq/>
|
||||
3. 分离端安装:<https://jeesite.com/docs/vue-install-deploy/>
|
||||
|
||||
## 技术文章
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>4.6.0-SNAPSHOT</version>
|
||||
<version>5.2.1-SNAPSHOT</version>
|
||||
<relativePath>../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-text</artifactId>
|
||||
<version>${commons-text.version}</version>
|
||||
<version>${commons-text.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
@@ -48,7 +48,7 @@
|
||||
<dependency>
|
||||
<groupId>commons-beanutils</groupId>
|
||||
<artifactId>commons-beanutils</artifactId>
|
||||
<version>${commons-beanutils.version}</version>
|
||||
<version>${commons-beanutils.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Java serialization -->
|
||||
@@ -243,6 +243,7 @@
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-beans</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
|
||||
@@ -6,6 +6,8 @@ package com.jeesite.common.idgen;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* 来自于twitter项目snowflake的id产生方案,全局唯一,时间有序。
|
||||
* 64位ID (42(毫秒)+5(机器ID)+5(业务编码)+12(重复累加))
|
||||
@@ -42,23 +44,39 @@ public class IdWorker {
|
||||
private final long datacenterId;
|
||||
|
||||
public IdWorker(long workerId, long datacenterId) {
|
||||
if (workerId > maxWorkerId || workerId < 0) {
|
||||
if (workerId == -1){
|
||||
this.workerId = new Random().nextInt((int)maxWorkerId);
|
||||
}else{
|
||||
String wid = System.getProperty("workerId");
|
||||
if (StringUtils.isNotBlank(wid)) {
|
||||
try {
|
||||
workerId = Integer.parseInt(wid);
|
||||
} catch (Exception e) {
|
||||
throw new IllegalArgumentException(
|
||||
"worker Id can't be greater than %d or less than 0");
|
||||
"jvm param -DworkerId can't be greater than %d or less than 0");
|
||||
}
|
||||
}
|
||||
String dcid = System.getProperty("datacenterId");
|
||||
if (StringUtils.isNotBlank(dcid)) {
|
||||
try {
|
||||
workerId = Integer.parseInt(dcid);
|
||||
} catch (Exception e) {
|
||||
throw new IllegalArgumentException(
|
||||
"jvm param -DdatacenterId can't be greater than %d or less than 0");
|
||||
}
|
||||
}
|
||||
if (workerId == -1){
|
||||
workerId = new Random().nextInt((int)maxWorkerId);
|
||||
}
|
||||
if (datacenterId == -1){
|
||||
datacenterId = new Random().nextInt((int)maxDatacenterId);
|
||||
}
|
||||
if (workerId > maxWorkerId || workerId < 0) {
|
||||
throw new IllegalArgumentException(
|
||||
"worker Id can't be greater than %d or less than 0");
|
||||
}else{
|
||||
this.workerId = workerId;
|
||||
}
|
||||
if (datacenterId > maxDatacenterId || datacenterId < 0) {
|
||||
if (datacenterId == -1){
|
||||
this.datacenterId = new Random().nextInt((int)maxDatacenterId);
|
||||
}else{
|
||||
throw new IllegalArgumentException(
|
||||
"datacenter Id can't be greater than %d or less than 0");
|
||||
}
|
||||
throw new IllegalArgumentException(
|
||||
"datacenter Id can't be greater than %d or less than 0");
|
||||
}else{
|
||||
this.datacenterId = datacenterId;
|
||||
}
|
||||
|
||||
@@ -171,7 +171,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
|
||||
return ObjectUtils.serializeFst(object);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("serialize: {}", e.getMessage(), e);
|
||||
logger.error("serialize: {}", e.getMessage());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -214,7 +214,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
|
||||
}
|
||||
long totalTime = System.currentTimeMillis() - beginTime;
|
||||
if (totalTime > 30000){
|
||||
logger.warn(object.getClass() + " serialize time: " + TimeUtils.formatDateAgo(totalTime));
|
||||
logger.warn(object.getClass() + " serialize time: " + TimeUtils.formatTime(totalTime));
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
@@ -240,7 +240,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
|
||||
}
|
||||
long totalTime = System.currentTimeMillis() - beginTime;
|
||||
if (totalTime > 30000 && object != null){
|
||||
logger.warn(object.getClass() + " unserialize time: " + TimeUtils.formatDateAgo(totalTime));
|
||||
logger.warn(object.getClass() + " unserialize time: " + TimeUtils.formatTime(totalTime));
|
||||
}
|
||||
return object;
|
||||
}
|
||||
@@ -248,7 +248,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
|
||||
private static ThreadLocal<FSTConfiguration> fstConfiguration =
|
||||
new NamedThreadLocal<FSTConfiguration>("FSTConfiguration") {
|
||||
@Override
|
||||
public FSTConfiguration initialValue() {
|
||||
public FSTConfiguration initialValue() {
|
||||
return FSTConfiguration.createDefaultConfiguration();
|
||||
}
|
||||
};
|
||||
@@ -266,7 +266,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
|
||||
byte[] bytes = fstConfiguration.get().asByteArray(object);
|
||||
long totalTime = System.currentTimeMillis() - beginTime;
|
||||
if (totalTime > 30000){
|
||||
logger.warn(object.getClass() + " fst serialize time: " + TimeUtils.formatDateAgo(totalTime));
|
||||
logger.warn(object.getClass() + " fst serialize time: " + TimeUtils.formatTime(totalTime));
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
@@ -284,7 +284,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
|
||||
Object object = fstConfiguration.get().asObject(bytes);
|
||||
long totalTime = System.currentTimeMillis() - beginTime;
|
||||
if (totalTime > 30000 && object != null){
|
||||
logger.warn(object.getClass() + " fst unserialize time: " + TimeUtils.formatDateAgo(totalTime));
|
||||
logger.warn(object.getClass() + " fst unserialize time: " + TimeUtils.formatTime(totalTime));
|
||||
}
|
||||
return object;
|
||||
}
|
||||
|
||||
@@ -13,10 +13,31 @@ import java.util.Date;
|
||||
*/
|
||||
public class TimeUtils {
|
||||
|
||||
public static final String[] CN = new String[] {"毫秒", "秒", "分", "时", "天"};
|
||||
public static final String[] EN = new String[] {" millisecond ", " second", " minute", " hour", " day"};
|
||||
|
||||
public static final String[] AGO_CN = new String[] {"刚刚", "秒前", "分钟前", "小时前", "天前"};
|
||||
public static final String[] AGO_EN = new String[] {"just now", " seconds ago", " minutes ago", " hours ago", " days ago"};
|
||||
|
||||
/**
|
||||
* 将毫秒数转换为:xx天,xx时,xx分,xx秒(v5.1 替换为 formatTime)
|
||||
*/
|
||||
@Deprecated
|
||||
public static String formatDateAgo(long millisecond) {
|
||||
return formatTime(millisecond, CN);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将毫秒数转换为:xx天,xx时,xx分,xx秒
|
||||
*/
|
||||
public static String formatDateAgo(long millisecond) {
|
||||
public static String formatTime(long millisecond) {
|
||||
return formatTime(millisecond, CN);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将毫秒数转换为:xx天,xx时,xx分,xx秒
|
||||
*/
|
||||
public static String formatTime(long millisecond, String[] lang) {
|
||||
long ms = millisecond;
|
||||
int ss = 1000;
|
||||
int mi = ss * 60;
|
||||
@@ -28,19 +49,19 @@ public class TimeUtils {
|
||||
long second = (ms - day * dd - hour * hh - minute * mi) / ss;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (ms >= 0 && ms < 1000) {
|
||||
sb.append(ms).append("毫秒");
|
||||
sb.append(ms).append(lang[0]);
|
||||
} else {
|
||||
if (day > 0) {
|
||||
sb.append(day).append("天");
|
||||
sb.append(day).append(lang[4]);
|
||||
}
|
||||
if (hour > 0) {
|
||||
sb.append(hour).append("时");
|
||||
sb.append(hour).append(lang[3]);
|
||||
}
|
||||
if (minute > 0) {
|
||||
sb.append(minute).append("分");
|
||||
sb.append(minute).append(lang[2]);
|
||||
}
|
||||
if (second > 0) {
|
||||
sb.append(second).append("秒");
|
||||
sb.append(second).append(lang[1]);
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
@@ -57,32 +78,39 @@ public class TimeUtils {
|
||||
* 将过去的时间转为为,刚刚,xx秒,xx分钟,xx小时前、xx天前,大于3天的显示日期
|
||||
*/
|
||||
public static String formatTimeAgo(Date dateTime) {
|
||||
return formatTimeAgo(dateTime, AGO_CN);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将过去的时间转为为,刚刚,xx秒,xx分钟,xx小时前、xx天前,大于3天的显示日期
|
||||
*/
|
||||
public static String formatTimeAgo(Date dateTime, String[] lang) {
|
||||
String interval = null;
|
||||
// 得出的时间间隔是毫秒
|
||||
long time = System.currentTimeMillis() - dateTime.getTime();
|
||||
// 如果时间间隔小于10秒则显示“刚刚”time/10得出的时间间隔的单位是秒
|
||||
if (time / 1000 < 10 && time / 1000 >= 0) {
|
||||
interval = "刚刚";
|
||||
interval = lang[0];
|
||||
}
|
||||
// 如果时间间隔大于24小时则显示多少天前
|
||||
else if (time / 3600000 < 24 * 4 && time / 3600000 >= 24) {
|
||||
int d = (int) (time / (3600000 * 24));// 得出的时间间隔的单位是天
|
||||
interval = d + "天前";
|
||||
interval = d + lang[4];
|
||||
}
|
||||
// 如果时间间隔小于24小时则显示多少小时前
|
||||
else if (time / 3600000 < 24 && time / 3600000 >= 1) {
|
||||
int h = (int) (time / 3600000);// 得出的时间间隔的单位是小时
|
||||
interval = h + "小时前";
|
||||
interval = h + lang[3];
|
||||
}
|
||||
// 如果时间间隔小于60分钟则显示多少分钟前
|
||||
else if (time / 60000 < 60 && time / 60000 >= 1) {
|
||||
int m = (int) ((time % 3600000) / 60000);// 得出的时间间隔的单位是分钟
|
||||
interval = m + "分钟前";
|
||||
interval = m + lang[2];
|
||||
}
|
||||
// 如果时间间隔小于60秒则显示多少秒前
|
||||
else if (time / 1000 < 60 && time / 1000 >= 10) {
|
||||
int se = (int) ((time % 60000) / 1000);
|
||||
interval = se + "秒前";
|
||||
interval = se + lang[1];
|
||||
}
|
||||
// 大于3天的,则显示正常的时间,但是不显示秒
|
||||
else {
|
||||
|
||||
@@ -1,168 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2005-2012 springside.org.cn
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
*/
|
||||
package com.jeesite.common.mapper;
|
||||
|
||||
import com.jeesite.common.lang.ExceptionUtils;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
import com.jeesite.common.reflect.ReflectUtils;
|
||||
|
||||
import javax.xml.bind.*;
|
||||
import javax.xml.bind.annotation.XmlAnyElement;
|
||||
import javax.xml.namespace.QName;
|
||||
import java.io.StringReader;
|
||||
import java.io.StringWriter;
|
||||
import java.util.Collection;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
/**
|
||||
* 使用Jaxb2.0实现XML<->Java Object的Mapper.
|
||||
*
|
||||
* 在创建时需要设定所有需要序列化的Root对象的Class.
|
||||
* 特别支持Root对象是Collection的情形.
|
||||
*
|
||||
* @author calvin
|
||||
* @version 2013-01-15
|
||||
*/
|
||||
@Deprecated
|
||||
@SuppressWarnings("rawtypes")
|
||||
public class JaxbMapper {
|
||||
|
||||
private static ConcurrentMap<Class, JAXBContext> jaxbContexts = new ConcurrentHashMap<Class, JAXBContext>();
|
||||
|
||||
/**
|
||||
* Java Object->Xml without encoding.
|
||||
*/
|
||||
public static String toXml(Object root) {
|
||||
Class clazz = ReflectUtils.getUserClass(root);
|
||||
return toXml(root, clazz, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Java Object->Xml with encoding.
|
||||
*/
|
||||
public static String toXml(Object root, String encoding) {
|
||||
Class clazz = ReflectUtils.getUserClass(root);
|
||||
return toXml(root, clazz, encoding);
|
||||
}
|
||||
|
||||
/**
|
||||
* Java Object->Xml with encoding.
|
||||
*/
|
||||
public static String toXml(Object root, Class clazz, String encoding) {
|
||||
try {
|
||||
StringWriter writer = new StringWriter();
|
||||
createMarshaller(clazz, encoding).marshal(root, writer);
|
||||
return writer.toString();
|
||||
} catch (JAXBException e) {
|
||||
throw ExceptionUtils.unchecked(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Java Collection->Xml without encoding, 特别支持Root Element是Collection的情形.
|
||||
*/
|
||||
public static String toXml(Collection<?> root, String rootName, Class clazz) {
|
||||
return toXml(root, rootName, clazz, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Java Collection->Xml with encoding, 特别支持Root Element是Collection的情形.
|
||||
*/
|
||||
public static String toXml(Collection<?> root, String rootName, Class clazz, String encoding) {
|
||||
try {
|
||||
CollectionWrapper wrapper = new CollectionWrapper();
|
||||
wrapper.collection = root;
|
||||
|
||||
JAXBElement<CollectionWrapper> wrapperElement = new JAXBElement<CollectionWrapper>(new QName(rootName),
|
||||
CollectionWrapper.class, wrapper);
|
||||
|
||||
StringWriter writer = new StringWriter();
|
||||
createMarshaller(clazz, encoding).marshal(wrapperElement, writer);
|
||||
|
||||
return writer.toString();
|
||||
} catch (JAXBException e) {
|
||||
throw ExceptionUtils.unchecked(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Xml->Java Object.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> T fromXml(String xml, Class<T> clazz) {
|
||||
try {
|
||||
StringReader reader = new StringReader(xml);
|
||||
return (T) createUnmarshaller(clazz).unmarshal(reader);
|
||||
} catch (JAXBException e) {
|
||||
throw ExceptionUtils.unchecked(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建Marshaller并设定encoding(可为null).
|
||||
* 线程不安全,需要每次创建或pooling。
|
||||
*/
|
||||
public static Marshaller createMarshaller(Class clazz, String encoding) {
|
||||
try {
|
||||
JAXBContext jaxbContext = getJaxbContext(clazz);
|
||||
|
||||
Marshaller marshaller = jaxbContext.createMarshaller();
|
||||
|
||||
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
|
||||
|
||||
if (StringUtils.isNotBlank(encoding)) {
|
||||
marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
|
||||
}
|
||||
|
||||
return marshaller;
|
||||
} catch (JAXBException e) {
|
||||
throw ExceptionUtils.unchecked(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建UnMarshaller.
|
||||
* 线程不安全,需要每次创建或pooling。
|
||||
*/
|
||||
public static Unmarshaller createUnmarshaller(Class clazz) {
|
||||
try {
|
||||
JAXBContext jaxbContext = getJaxbContext(clazz);
|
||||
return jaxbContext.createUnmarshaller();
|
||||
} catch (JAXBException e) {
|
||||
throw ExceptionUtils.unchecked(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected static JAXBContext getJaxbContext(Class clazz) {
|
||||
if (clazz == null){
|
||||
throw new RuntimeException("'clazz' must not be null");
|
||||
}
|
||||
JAXBContext jaxbContext = jaxbContexts.get(clazz);
|
||||
if (jaxbContext == null) {
|
||||
try {
|
||||
jaxbContext = JAXBContext.newInstance(clazz, CollectionWrapper.class);
|
||||
jaxbContexts.putIfAbsent(clazz, jaxbContext);
|
||||
} catch (JAXBException ex) {
|
||||
// throw new HttpMessageConversionException("Could not instantiate JAXBContext for class [" + clazz
|
||||
// + "]: " + ex.getMessage(), ex);
|
||||
throw new RuntimeException("Could not instantiate JAXBContext for class [" + clazz
|
||||
+ "]: " + ex.getMessage(), ex);
|
||||
}
|
||||
}
|
||||
return jaxbContext;
|
||||
}
|
||||
|
||||
/**
|
||||
* 封装Root Element 是 Collection的情况.
|
||||
*/
|
||||
public static class CollectionWrapper {
|
||||
|
||||
@XmlAnyElement
|
||||
protected Collection<?> collection;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -32,7 +32,6 @@ import com.fasterxml.jackson.databind.introspect.Annotated;
|
||||
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
|
||||
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
|
||||
import com.fasterxml.jackson.databind.util.JSONPObject;
|
||||
//import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
|
||||
import com.jeesite.common.collect.ListUtils;
|
||||
import com.jeesite.common.io.PropertiesUtils;
|
||||
import com.jeesite.common.lang.DateUtils;
|
||||
|
||||
@@ -116,7 +116,7 @@ public class VideoUtils {
|
||||
log.error("视频剪切图片失败", e);
|
||||
}
|
||||
}
|
||||
log.debug("视频剪切图片" + (statusTemp ? "成功" : "失败") + ",用时:" + TimeUtils.formatDateAgo(System.currentTimeMillis() - startTime));
|
||||
log.debug("视频剪切图片" + (statusTemp ? "成功" : "失败") + ",用时:" + TimeUtils.formatTime(System.currentTimeMillis() - startTime));
|
||||
return statusTemp;
|
||||
}
|
||||
|
||||
@@ -142,7 +142,7 @@ public class VideoUtils {
|
||||
}
|
||||
log.debug("删除临时文件");
|
||||
FileUtils.deleteFile(tempFile);
|
||||
log.debug("视频转换" + (statusTemp ? "成功" : "失败") + ",用时:" + TimeUtils.formatDateAgo(System.currentTimeMillis() - startTime));
|
||||
log.debug("视频转换" + (statusTemp ? "成功" : "失败") + ",用时:" + TimeUtils.formatTime(System.currentTimeMillis() - startTime));
|
||||
return statusTemp;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ import com.jeesite.common.io.PropertiesUtils;
|
||||
* 发送电子邮件
|
||||
*/
|
||||
public class EmailUtils {
|
||||
|
||||
|
||||
private final static Logger logger = LoggerFactory.getLogger(EmailUtils.class);
|
||||
|
||||
/**
|
||||
@@ -42,10 +42,10 @@ public class EmailUtils {
|
||||
*/
|
||||
@Deprecated
|
||||
public static boolean send(String fromAddress, String fromPassword, String fromHostName,
|
||||
String sslOnConnect, String sslSmtpPort, String toAddress, String subject, String content) {
|
||||
String sslOnConnect, String sslSmtpPort, String toAddress, String subject, String content) {
|
||||
return send(fromAddress, fromPassword, fromHostName, 25, sslOnConnect, sslSmtpPort, toAddress, subject, content);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 发送邮件
|
||||
* @param toAddress 接收地址
|
||||
@@ -54,7 +54,7 @@ public class EmailUtils {
|
||||
* @return
|
||||
*/
|
||||
public static boolean send(String fromAddress, String fromPassword, String fromHostName, Integer smtpPort,
|
||||
String sslOnConnect, String sslSmtpPort, String toAddress, String subject, String content) {
|
||||
String sslOnConnect, String sslSmtpPort, String toAddress, String subject, String content) {
|
||||
try {
|
||||
HtmlEmail htmlEmail = new HtmlEmail();
|
||||
// 发送地址
|
||||
@@ -82,7 +82,7 @@ public class EmailUtils {
|
||||
|
||||
// 其他信息
|
||||
htmlEmail.setCharset(EncodeUtils.UTF_8);
|
||||
|
||||
|
||||
// 发送
|
||||
htmlEmail.send();
|
||||
return true;
|
||||
@@ -91,10 +91,10 @@ public class EmailUtils {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// public static void main(String[] args) {
|
||||
// EmailUtils.send("jeesite_demo@163.com", "jeesitedemo1234", "smtp.163.com",
|
||||
// "false", "465", "jeesite_demo@163.com", "测试邮件", "测试<b>邮件</b>的内容");
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
@@ -288,7 +288,10 @@ abstract class VFS {
|
||||
|
||||
// Try each implementation class until a valid one is found
|
||||
VFS vfs = null;
|
||||
for (int i = 0; vfs == null || !vfs.isValid(); i++) {
|
||||
for (int i = 0; true; i++) {
|
||||
if (!(vfs == null || !vfs.isValid())) {
|
||||
break;
|
||||
}
|
||||
Class<? extends VFS> impl = impls.get(i);
|
||||
try {
|
||||
vfs = impl.getDeclaredConstructor().newInstance();
|
||||
@@ -302,7 +305,7 @@ abstract class VFS {
|
||||
}
|
||||
}
|
||||
|
||||
log.debug("Using VFS adapter " + vfs.getClass().getName());
|
||||
log.debug("Using VFS adapter " + vfs == null ? null : vfs.getClass().getName());
|
||||
return VFS.instance = vfs;
|
||||
}
|
||||
|
||||
|
||||
@@ -143,7 +143,7 @@ public class PinyinUtils {
|
||||
if (input == null){
|
||||
return null;
|
||||
}
|
||||
char[] c = input.toCharArray();
|
||||
char c[] = input.toCharArray();
|
||||
for (int i = 0; i < c.length; i++) {
|
||||
if (c[i] == '\u3000') {
|
||||
c[i] = ' ';
|
||||
@@ -156,6 +156,7 @@ public class PinyinUtils {
|
||||
|
||||
// public static void main(String[] args) {
|
||||
// String str = "你好,123,🅻🅾🆅🅴、世界abc,~!#$_Sdf,女;hello!-";
|
||||
// String str = "你好,123,世界abc,~!#$_Sdf,女;hello!-";
|
||||
// System.out.println(getFirstSpell(str));
|
||||
// System.out.println(getFirstSpell(str, false));
|
||||
// System.out.println(getFullSpell(str));
|
||||
|
||||
@@ -6,12 +6,12 @@ package com.jeesite.common.ueditor.define;
|
||||
*/
|
||||
public interface State {
|
||||
|
||||
public boolean isSuccess ();
|
||||
boolean isSuccess();
|
||||
|
||||
public void putInfo( String name, String val );
|
||||
void putInfo(String name, String val);
|
||||
|
||||
public void putInfo ( String name, long val );
|
||||
void putInfo(String name, long val);
|
||||
|
||||
public String toJSONString ();
|
||||
String toJSONString();
|
||||
|
||||
}
|
||||
|
||||
@@ -26,8 +26,8 @@ import com.jeesite.common.ueditor.define.State;
|
||||
public class BinaryUploader {
|
||||
|
||||
public static final State save(HttpServletRequest request,
|
||||
Map<String, Object> conf) {
|
||||
|
||||
Map<String, Object> conf) {
|
||||
|
||||
String contentType = request.getContentType();
|
||||
if (!("POST".equals(request.getMethod()) && contentType != null
|
||||
&& contentType.startsWith("multipart/"))) {
|
||||
@@ -83,22 +83,22 @@ public class BinaryUploader {
|
||||
if (storageState != null && storageState.isSuccess()) {
|
||||
int actionCode = ((Integer) conf.get("actionCode")).intValue();
|
||||
String ctx = request.getContextPath(); // ThinkGem 修正上传图片后返回无contextpath问题
|
||||
|
||||
|
||||
// 上传图片后,进行图片压缩
|
||||
if (actionCode == ActionMap.UPLOAD_IMAGE){
|
||||
|
||||
|
||||
// 如果开启了压缩图片
|
||||
if ((Boolean)conf.get("imageCompressEnable")){
|
||||
Integer maxWidth = (Integer)conf.get("imageCompressBorder");
|
||||
ImageUtils.thumbnails(new File(physicalPath), maxWidth, -1, null);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 上传成功后 转换格式 按照新的视频格式 返回前台 ThinkGem
|
||||
else if(actionCode == ActionMap.UPLOAD_VIDEO){
|
||||
final VideoUtils v = new VideoUtils(physicalPath);
|
||||
// 先截图
|
||||
// 先截图
|
||||
if (v.cutPic()){
|
||||
// 开启进程,在转换视频文件
|
||||
Thread thread = new Thread("video-convert") {
|
||||
@@ -113,21 +113,21 @@ public class BinaryUploader {
|
||||
}
|
||||
};
|
||||
thread.setDaemon(true);
|
||||
thread.start();
|
||||
thread.start();
|
||||
storageState.putInfo("url", ctx + PathFormat.format(savePath) + "." + v.getOutputFileExtension());
|
||||
storageState.putInfo("type", "." + v.getOutputFileExtension());
|
||||
storageState.putInfo("original", originFileName +"."+ v.getInputFileExtension());
|
||||
|
||||
|
||||
// Ueditor编辑器上传文件完成后调用事件
|
||||
StorageManager.uploadFileSuccess(physicalPath, storageState);
|
||||
|
||||
|
||||
return storageState;
|
||||
}
|
||||
}
|
||||
storageState.putInfo("url", ctx + PathFormat.format(savePath));
|
||||
storageState.putInfo("type", suffix);
|
||||
storageState.putInfo("original", originFileName + suffix);
|
||||
|
||||
|
||||
// UEditor上传文件成功后调用事件
|
||||
StorageManager.uploadFileSuccess(physicalPath, storageState);
|
||||
}
|
||||
@@ -143,5 +143,5 @@ public class BinaryUploader {
|
||||
|
||||
return list.contains(type);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -30,11 +30,11 @@ public class IdcardUtils extends StringUtils {
|
||||
"62", "63", "64", "65", "71", "81", "82", "91" };
|
||||
|
||||
/** 每位加权因子 */
|
||||
public static final int[] power = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9,
|
||||
public static final int power[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9,
|
||||
10, 5, 8, 4, 2 };
|
||||
|
||||
/** 第18位校检码 */
|
||||
public static final String[] verifyCode = { "1", "0", "X", "9", "8", "7",
|
||||
public static final String verifyCode[] = { "1", "0", "X", "9", "8", "7",
|
||||
"6", "5", "4", "3", "2" };
|
||||
/** 最低年限 */
|
||||
public static final int MIN = 1930;
|
||||
@@ -272,7 +272,7 @@ public class IdcardUtils extends StringUtils {
|
||||
if (card.length() != 8 && card.length() != 9 && idCard.length() != 10) {
|
||||
return null;
|
||||
}
|
||||
if (idCard.matches("^[a-zA-Z][0-9]{9}$")) { // 台湾
|
||||
if (idCard.matches("^[a-zA-Z][0-9]{9}$")) {
|
||||
info[0] = "台湾";
|
||||
System.out.println("11111");
|
||||
String char2 = idCard.substring(1, 2);
|
||||
@@ -289,10 +289,10 @@ public class IdcardUtils extends StringUtils {
|
||||
return info;
|
||||
}
|
||||
info[2] = validateTWCard(idCard) ? "true" : "false";
|
||||
} else if (idCard.matches("^[1|5|7][0-9]{6}\\(?[0-9A-Z]\\)?$")) { // 澳门
|
||||
} else if (idCard.matches("^[1|5|7][0-9]{6}\\(?[0-9A-Z]\\)?$")) {
|
||||
info[0] = "澳门";
|
||||
info[1] = "N";
|
||||
} else if (idCard.matches("^[A-Z]{1,2}[0-9]{6}\\(?[0-9A]\\)?$")) { // 香港
|
||||
} else if (idCard.matches("^[A-Z]{1,2}[0-9]{6}\\(?[0-9A]\\)?$")) {
|
||||
info[0] = "香港";
|
||||
info[1] = "N";
|
||||
info[2] = validateHKCard(idCard) ? "true" : "false";
|
||||
|
||||
@@ -97,7 +97,6 @@ public class ExcelExport implements Closeable{
|
||||
* 构造函数
|
||||
* @param title 表格标题,传“空值”,表示无标题
|
||||
* @param cls 实体对象,通过annotation.ExportField获取标题
|
||||
* @param type 导出类型(1:导出数据)
|
||||
*/
|
||||
public ExcelExport(String title, Class<?> cls){
|
||||
this(title, cls, Type.EXPORT);
|
||||
|
||||
@@ -14,21 +14,21 @@ public interface FieldType {
|
||||
/**
|
||||
* 获取对象值(导入)
|
||||
*/
|
||||
default public Object getValue(String val) {
|
||||
default Object getValue(String val) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取对象值(导出)
|
||||
*/
|
||||
default public String setValue(Object val) {
|
||||
default String setValue(Object val) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取对象值格式(导出)
|
||||
*/
|
||||
default public String getDataFormat() {
|
||||
default String getDataFormat() {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ public class MoneyType implements FieldType {
|
||||
* 获取对象值(导入)
|
||||
*/
|
||||
@Override
|
||||
public Object getValue(String val) {
|
||||
public Object getValue(String val) {
|
||||
return val == null ? StringUtils.EMPTY : StringUtils.replace(val, ",", StringUtils.EMPTY);
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ public class MoneyType implements FieldType {
|
||||
* 获取对象值(导出)
|
||||
*/
|
||||
@Override
|
||||
public String setValue(Object val) {
|
||||
public String setValue(Object val) {
|
||||
return val == null ? StringUtils.EMPTY : nf.format(val);
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ public class MoneyType implements FieldType {
|
||||
* 获取对象值格式(导出)
|
||||
*/
|
||||
@Override
|
||||
public String getDataFormat() {
|
||||
public String getDataFormat() {
|
||||
return "0.00";
|
||||
}
|
||||
|
||||
|
||||
@@ -4,23 +4,6 @@
|
||||
*/
|
||||
package com.jeesite.common.web.http;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.commons.lang3.Validate;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import com.fasterxml.jackson.databind.util.JSONPObject;
|
||||
import com.jeesite.common.codec.EncodeUtils;
|
||||
import com.jeesite.common.collect.MapUtils;
|
||||
@@ -29,6 +12,17 @@ import com.jeesite.common.lang.ExceptionUtils;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
import com.jeesite.common.mapper.JsonMapper;
|
||||
import com.jeesite.common.mapper.XmlMapper;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
/**
|
||||
* Http与Servlet工具类.
|
||||
@@ -387,6 +381,18 @@ public class ServletUtils {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取请求的域名(含端口)
|
||||
*/
|
||||
public static String getRequestDomain(String url) {
|
||||
String scheme = StringUtils.substringBefore(url, "://");
|
||||
String domain = StringUtils.substringAfter(url, "://");
|
||||
if (StringUtils.contains(domain, "/")) {
|
||||
domain = StringUtils.substringBefore(domain, "/");
|
||||
}
|
||||
return scheme + "://" + domain;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得请求参数值
|
||||
*/
|
||||
|
||||
@@ -164,7 +164,7 @@ 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 li>a>.pull-right-container {left:0;}
|
||||
.sidebar-menu .treeview-item.active > a {color:#1890ff;background-color:#e7f4ff;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:#f0f2f5;}
|
||||
|
||||
@@ -189,7 +189,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.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;}
|
||||
.form-unit {border-bottom:1px solid #eee;}
|
||||
|
||||
.box-main>.box-header {border-bottom-color:#eeeeee;}
|
||||
.box-main>.box-header .box-title .fa {color:#1890ff;}
|
||||
|
||||
@@ -228,3 +228,6 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.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;} 解开注释,可去除表格单元格的竖边框线 */
|
||||
.ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:46px!important;}
|
||||
.ui-jqgrid .ui-jqgrid-htable th div {padding:15px 0 15px 2px;}
|
||||
.ui-jqgrid tr.jqgrow td {height: 49px;}
|
||||
|
||||
@@ -164,7 +164,7 @@ 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 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:#f0f2f5;}
|
||||
|
||||
@@ -189,7 +189,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.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;}
|
||||
.form-unit {border-bottom:1px solid #eee;}
|
||||
|
||||
.box-main>.box-header {border-bottom-color:#eeeeee;}
|
||||
.box-main>.box-header .box-title .fa {color:#1e5edb;}
|
||||
|
||||
@@ -228,3 +228,6 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.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;} 解开注释,可去除表格单元格的竖边框线 */
|
||||
.ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:46px!important;}
|
||||
.ui-jqgrid .ui-jqgrid-htable th div {padding:15px 0 15px 2px;}
|
||||
.ui-jqgrid tr.jqgrow td {height: 49px;}
|
||||
|
||||
@@ -289,6 +289,9 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {background:#222;}
|
||||
.ui-jqgrid tr.ui-state-highlight.ui-row-ltr td {background-color:#1f1f1f;}
|
||||
/* .ui-jqgrid tr.ui-row-ltr td {border-right:0!important;} 解开注释,可去除表格单元格的竖边框线 */
|
||||
.ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:46px!important;}
|
||||
.ui-jqgrid .ui-jqgrid-htable th div {padding:15px 0 15px 2px;}
|
||||
.ui-jqgrid tr.jqgrow td {height: 49px;}
|
||||
|
||||
.ui-jqgrid .frozen-left th.ui-th-ltr, .ui-jqgrid .frozen-left tr.ui-row-ltr td {border-right-color:#333}
|
||||
.ui-jqgrid .frozen-right th.ui-th-ltr, .ui-jqgrid .frozen-right tr.ui-row-ltr td {border-left-color:#333}
|
||||
|
||||
11011
common/src/main/resources/static/jquery/jquery-1.12.4.js
vendored
11011
common/src/main/resources/static/jquery/jquery-1.12.4.js
vendored
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1,752 +0,0 @@
|
||||
/*!
|
||||
* jQuery Migrate - v1.4.1 - 2016-05-19
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
*/
|
||||
(function( jQuery, window, undefined ) {
|
||||
// See http://bugs.jquery.com/ticket/13335
|
||||
// "use strict";
|
||||
|
||||
|
||||
jQuery.migrateVersion = "1.4.1";
|
||||
|
||||
|
||||
var warnedAbout = {};
|
||||
|
||||
// List of warnings already given; public read only
|
||||
jQuery.migrateWarnings = [];
|
||||
|
||||
// Set to true to prevent console output; migrateWarnings still maintained
|
||||
// jQuery.migrateMute = false;
|
||||
|
||||
// Show a message on the console so devs know we're active
|
||||
//if ( window.console && window.console.log ) {
|
||||
// window.console.log( "JQMIGRATE: Migrate is installed" +
|
||||
// ( jQuery.migrateMute ? "" : " with logging active" ) +
|
||||
// ", version " + jQuery.migrateVersion );
|
||||
//}
|
||||
|
||||
// Set to false to disable traces that appear with warnings
|
||||
if ( jQuery.migrateTrace === undefined ) {
|
||||
jQuery.migrateTrace = true;
|
||||
}
|
||||
|
||||
// Forget any warnings we've already given; public
|
||||
jQuery.migrateReset = function() {
|
||||
warnedAbout = {};
|
||||
jQuery.migrateWarnings.length = 0;
|
||||
};
|
||||
|
||||
function migrateWarn( msg) {
|
||||
var console = window.console;
|
||||
if ( !warnedAbout[ msg ] ) {
|
||||
warnedAbout[ msg ] = true;
|
||||
jQuery.migrateWarnings.push( msg );
|
||||
if ( console && console.warn && !jQuery.migrateMute ) {
|
||||
console.warn( "JQMIGRATE: " + msg );
|
||||
if ( jQuery.migrateTrace && console.trace ) {
|
||||
console.trace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function migrateWarnProp( obj, prop, value, msg ) {
|
||||
if ( Object.defineProperty ) {
|
||||
// On ES5 browsers (non-oldIE), warn if the code tries to get prop;
|
||||
// allow property to be overwritten in case some other plugin wants it
|
||||
try {
|
||||
Object.defineProperty( obj, prop, {
|
||||
configurable: true,
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
migrateWarn( msg );
|
||||
return value;
|
||||
},
|
||||
set: function( newValue ) {
|
||||
migrateWarn( msg );
|
||||
value = newValue;
|
||||
}
|
||||
});
|
||||
return;
|
||||
} catch( err ) {
|
||||
// IE8 is a dope about Object.defineProperty, can't warn there
|
||||
}
|
||||
}
|
||||
|
||||
// Non-ES5 (or broken) browser; just set the property
|
||||
jQuery._definePropertyBroken = true;
|
||||
obj[ prop ] = value;
|
||||
}
|
||||
|
||||
if ( document.compatMode === "BackCompat" ) {
|
||||
// jQuery has never supported or tested Quirks Mode
|
||||
migrateWarn( "jQuery is not compatible with Quirks Mode" );
|
||||
}
|
||||
|
||||
|
||||
var attrFn = jQuery( "<input/>", { size: 1 } ).attr("size") && jQuery.attrFn,
|
||||
oldAttr = jQuery.attr,
|
||||
valueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get ||
|
||||
function() { return null; },
|
||||
valueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set ||
|
||||
function() { return undefined; },
|
||||
rnoType = /^(?:input|button)$/i,
|
||||
rnoAttrNodeType = /^[238]$/,
|
||||
rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
|
||||
ruseDefault = /^(?:checked|selected)$/i;
|
||||
|
||||
// jQuery.attrFn
|
||||
migrateWarnProp( jQuery, "attrFn", attrFn || {}, "jQuery.attrFn is deprecated" );
|
||||
|
||||
jQuery.attr = function( elem, name, value, pass ) {
|
||||
var lowerName = name.toLowerCase(),
|
||||
nType = elem && elem.nodeType;
|
||||
|
||||
if ( pass ) {
|
||||
// Since pass is used internally, we only warn for new jQuery
|
||||
// versions where there isn't a pass arg in the formal params
|
||||
if ( oldAttr.length < 4 ) {
|
||||
migrateWarn("jQuery.fn.attr( props, pass ) is deprecated");
|
||||
}
|
||||
if ( elem && !rnoAttrNodeType.test( nType ) &&
|
||||
(attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name])) ) {
|
||||
return jQuery( elem )[ name ]( value );
|
||||
}
|
||||
}
|
||||
|
||||
// Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking
|
||||
// for disconnected elements we don't warn on $( "<button>", { type: "button" } ).
|
||||
if ( name === "type" && value !== undefined && rnoType.test( elem.nodeName ) && elem.parentNode ) {
|
||||
migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8");
|
||||
}
|
||||
|
||||
// Restore boolHook for boolean property/attribute synchronization
|
||||
if ( !jQuery.attrHooks[ lowerName ] && rboolean.test( lowerName ) ) {
|
||||
jQuery.attrHooks[ lowerName ] = {
|
||||
get: function( elem, name ) {
|
||||
// Align boolean attributes with corresponding properties
|
||||
// Fall back to attribute presence where some booleans are not supported
|
||||
var attrNode,
|
||||
property = jQuery.prop( elem, name );
|
||||
return property === true || typeof property !== "boolean" &&
|
||||
( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
|
||||
|
||||
name.toLowerCase() :
|
||||
undefined;
|
||||
},
|
||||
set: function( elem, value, name ) {
|
||||
var propName;
|
||||
if ( value === false ) {
|
||||
// Remove boolean attributes when set to false
|
||||
jQuery.removeAttr( elem, name );
|
||||
} else {
|
||||
// value is true since we know at this point it's type boolean and not false
|
||||
// Set boolean attributes to the same name and set the DOM property
|
||||
propName = jQuery.propFix[ name ] || name;
|
||||
if ( propName in elem ) {
|
||||
// Only set the IDL specifically if it already exists on the element
|
||||
elem[ propName ] = true;
|
||||
}
|
||||
|
||||
elem.setAttribute( name, name.toLowerCase() );
|
||||
}
|
||||
return name;
|
||||
}
|
||||
};
|
||||
|
||||
// Warn only for attributes that can remain distinct from their properties post-1.9
|
||||
if ( ruseDefault.test( lowerName ) ) {
|
||||
migrateWarn( "jQuery.fn.attr('" + lowerName + "') might use property instead of attribute" );
|
||||
}
|
||||
}
|
||||
|
||||
return oldAttr.call( jQuery, elem, name, value );
|
||||
};
|
||||
|
||||
// attrHooks: value
|
||||
jQuery.attrHooks.value = {
|
||||
get: function( elem, name ) {
|
||||
var nodeName = ( elem.nodeName || "" ).toLowerCase();
|
||||
if ( nodeName === "button" ) {
|
||||
return valueAttrGet.apply( this, arguments );
|
||||
}
|
||||
if ( nodeName !== "input" && nodeName !== "option" ) {
|
||||
migrateWarn("jQuery.fn.attr('value') no longer gets properties");
|
||||
}
|
||||
return name in elem ?
|
||||
elem.value :
|
||||
null;
|
||||
},
|
||||
set: function( elem, value ) {
|
||||
var nodeName = ( elem.nodeName || "" ).toLowerCase();
|
||||
if ( nodeName === "button" ) {
|
||||
return valueAttrSet.apply( this, arguments );
|
||||
}
|
||||
if ( nodeName !== "input" && nodeName !== "option" ) {
|
||||
migrateWarn("jQuery.fn.attr('value', val) no longer sets properties");
|
||||
}
|
||||
// Does not return so that setAttribute is also used
|
||||
elem.value = value;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
var matched, browser,
|
||||
oldInit = jQuery.fn.init,
|
||||
oldFind = jQuery.find,
|
||||
oldParseJSON = jQuery.parseJSON,
|
||||
rspaceAngle = /^\s*</,
|
||||
rattrHashTest = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,
|
||||
rattrHashGlob = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,
|
||||
// Note: XSS check is done below after string is trimmed
|
||||
rquickExpr = /^([^<]*)(<[\w\W]+>)([^>]*)$/;
|
||||
|
||||
// $(html) "looks like html" rule change
|
||||
jQuery.fn.init = function( selector, context, rootjQuery ) {
|
||||
var match, ret;
|
||||
|
||||
if ( selector && typeof selector === "string" ) {
|
||||
if ( !jQuery.isPlainObject( context ) &&
|
||||
(match = rquickExpr.exec( jQuery.trim( selector ) )) && match[ 0 ] ) {
|
||||
|
||||
// This is an HTML string according to the "old" rules; is it still?
|
||||
if ( !rspaceAngle.test( selector ) ) {
|
||||
migrateWarn("$(html) HTML strings must start with '<' character");
|
||||
}
|
||||
if ( match[ 3 ] ) {
|
||||
migrateWarn("$(html) HTML text after last tag is ignored");
|
||||
}
|
||||
|
||||
// Consistently reject any HTML-like string starting with a hash (gh-9521)
|
||||
// Note that this may break jQuery 1.6.x code that otherwise would work.
|
||||
if ( match[ 0 ].charAt( 0 ) === "#" ) {
|
||||
migrateWarn("HTML string cannot start with a '#' character");
|
||||
jQuery.error("JQMIGRATE: Invalid selector string (XSS)");
|
||||
}
|
||||
|
||||
// Now process using loose rules; let pre-1.8 play too
|
||||
// Is this a jQuery context? parseHTML expects a DOM element (#178)
|
||||
if ( context && context.context && context.context.nodeType ) {
|
||||
context = context.context;
|
||||
}
|
||||
|
||||
if ( jQuery.parseHTML ) {
|
||||
return oldInit.call( this,
|
||||
jQuery.parseHTML( match[ 2 ], context && context.ownerDocument ||
|
||||
context || document, true ), context, rootjQuery );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ret = oldInit.apply( this, arguments );
|
||||
|
||||
// Fill in selector and context properties so .live() works
|
||||
if ( selector && selector.selector !== undefined ) {
|
||||
// A jQuery object, copy its properties
|
||||
ret.selector = selector.selector;
|
||||
ret.context = selector.context;
|
||||
|
||||
} else {
|
||||
ret.selector = typeof selector === "string" ? selector : "";
|
||||
if ( selector ) {
|
||||
ret.context = selector.nodeType? selector : context || document;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
};
|
||||
jQuery.fn.init.prototype = jQuery.fn;
|
||||
|
||||
jQuery.find = function( selector ) {
|
||||
var args = Array.prototype.slice.call( arguments );
|
||||
|
||||
// Support: PhantomJS 1.x
|
||||
// String#match fails to match when used with a //g RegExp, only on some strings
|
||||
if ( typeof selector === "string" && rattrHashTest.test( selector ) ) {
|
||||
|
||||
// The nonstandard and undocumented unquoted-hash was removed in jQuery 1.12.0
|
||||
// First see if qS thinks it's a valid selector, if so avoid a false positive
|
||||
try {
|
||||
document.querySelector( selector );
|
||||
} catch ( err1 ) {
|
||||
|
||||
// Didn't *look* valid to qSA, warn and try quoting what we think is the value
|
||||
selector = selector.replace( rattrHashGlob, function( _, attr, op, value ) {
|
||||
return "[" + attr + op + "\"" + value + "\"]";
|
||||
} );
|
||||
|
||||
// If the regexp *may* have created an invalid selector, don't update it
|
||||
// Note that there may be false alarms if selector uses jQuery extensions
|
||||
try {
|
||||
document.querySelector( selector );
|
||||
migrateWarn( "Attribute selector with '#' must be quoted: " + args[ 0 ] );
|
||||
args[ 0 ] = selector;
|
||||
} catch ( err2 ) {
|
||||
migrateWarn( "Attribute selector with '#' was not fixed: " + args[ 0 ] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return oldFind.apply( this, args );
|
||||
};
|
||||
|
||||
// Copy properties attached to original jQuery.find method (e.g. .attr, .isXML)
|
||||
var findProp;
|
||||
for ( findProp in oldFind ) {
|
||||
if ( Object.prototype.hasOwnProperty.call( oldFind, findProp ) ) {
|
||||
jQuery.find[ findProp ] = oldFind[ findProp ];
|
||||
}
|
||||
}
|
||||
|
||||
// Let $.parseJSON(falsy_value) return null
|
||||
jQuery.parseJSON = function( json ) {
|
||||
if ( !json ) {
|
||||
migrateWarn("jQuery.parseJSON requires a valid JSON string");
|
||||
return null;
|
||||
}
|
||||
return oldParseJSON.apply( this, arguments );
|
||||
};
|
||||
|
||||
jQuery.uaMatch = function( ua ) {
|
||||
ua = ua.toLowerCase();
|
||||
|
||||
var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
|
||||
/(webkit)[ \/]([\w.]+)/.exec( ua ) ||
|
||||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
|
||||
/(msie) ([\w.]+)/.exec( ua ) ||
|
||||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
|
||||
[];
|
||||
|
||||
return {
|
||||
browser: match[ 1 ] || "",
|
||||
version: match[ 2 ] || "0"
|
||||
};
|
||||
};
|
||||
|
||||
// Don't clobber any existing jQuery.browser in case it's different
|
||||
if ( !jQuery.browser ) {
|
||||
matched = jQuery.uaMatch( navigator.userAgent );
|
||||
browser = {};
|
||||
|
||||
if ( matched.browser ) {
|
||||
browser[ matched.browser ] = true;
|
||||
browser.version = matched.version;
|
||||
}
|
||||
|
||||
// Chrome is Webkit, but Webkit is also Safari.
|
||||
if ( browser.chrome ) {
|
||||
browser.webkit = true;
|
||||
} else if ( browser.webkit ) {
|
||||
browser.safari = true;
|
||||
}
|
||||
|
||||
jQuery.browser = browser;
|
||||
}
|
||||
|
||||
// Warn if the code tries to get jQuery.browser
|
||||
migrateWarnProp( jQuery, "browser", jQuery.browser, "jQuery.browser is deprecated" );
|
||||
|
||||
// jQuery.boxModel deprecated in 1.3, jQuery.support.boxModel deprecated in 1.7
|
||||
jQuery.boxModel = jQuery.support.boxModel = (document.compatMode === "CSS1Compat");
|
||||
migrateWarnProp( jQuery, "boxModel", jQuery.boxModel, "jQuery.boxModel is deprecated" );
|
||||
migrateWarnProp( jQuery.support, "boxModel", jQuery.support.boxModel, "jQuery.support.boxModel is deprecated" );
|
||||
|
||||
jQuery.sub = function() {
|
||||
function jQuerySub( selector, context ) {
|
||||
return new jQuerySub.fn.init( selector, context );
|
||||
}
|
||||
jQuery.extend( true, jQuerySub, this );
|
||||
jQuerySub.superclass = this;
|
||||
jQuerySub.fn = jQuerySub.prototype = this();
|
||||
jQuerySub.fn.constructor = jQuerySub;
|
||||
jQuerySub.sub = this.sub;
|
||||
jQuerySub.fn.init = function init( selector, context ) {
|
||||
var instance = jQuery.fn.init.call( this, selector, context, rootjQuerySub );
|
||||
return instance instanceof jQuerySub ?
|
||||
instance :
|
||||
jQuerySub( instance );
|
||||
};
|
||||
jQuerySub.fn.init.prototype = jQuerySub.fn;
|
||||
var rootjQuerySub = jQuerySub(document);
|
||||
migrateWarn( "jQuery.sub() is deprecated" );
|
||||
return jQuerySub;
|
||||
};
|
||||
|
||||
// The number of elements contained in the matched element set
|
||||
jQuery.fn.size = function() {
|
||||
migrateWarn( "jQuery.fn.size() is deprecated; use the .length property" );
|
||||
return this.length;
|
||||
};
|
||||
|
||||
|
||||
var internalSwapCall = false;
|
||||
|
||||
// If this version of jQuery has .swap(), don't false-alarm on internal uses
|
||||
if ( jQuery.swap ) {
|
||||
jQuery.each( [ "height", "width", "reliableMarginRight" ], function( _, name ) {
|
||||
var oldHook = jQuery.cssHooks[ name ] && jQuery.cssHooks[ name ].get;
|
||||
|
||||
if ( oldHook ) {
|
||||
jQuery.cssHooks[ name ].get = function() {
|
||||
var ret;
|
||||
|
||||
internalSwapCall = true;
|
||||
ret = oldHook.apply( this, arguments );
|
||||
internalSwapCall = false;
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
jQuery.swap = function( elem, options, callback, args ) {
|
||||
var ret, name,
|
||||
old = {};
|
||||
|
||||
if ( !internalSwapCall ) {
|
||||
migrateWarn( "jQuery.swap() is undocumented and deprecated" );
|
||||
}
|
||||
|
||||
// Remember the old values, and insert the new ones
|
||||
for ( name in options ) {
|
||||
old[ name ] = elem.style[ name ];
|
||||
elem.style[ name ] = options[ name ];
|
||||
}
|
||||
|
||||
ret = callback.apply( elem, args || [] );
|
||||
|
||||
// Revert the old values
|
||||
for ( name in options ) {
|
||||
elem.style[ name ] = old[ name ];
|
||||
}
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
|
||||
// Ensure that $.ajax gets the new parseJSON defined in core.js
|
||||
jQuery.ajaxSetup({
|
||||
converters: {
|
||||
"text json": jQuery.parseJSON
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
var oldFnData = jQuery.fn.data;
|
||||
|
||||
jQuery.fn.data = function( name ) {
|
||||
var ret, evt,
|
||||
elem = this[0];
|
||||
|
||||
// Handles 1.7 which has this behavior and 1.8 which doesn't
|
||||
if ( elem && name === "events" && arguments.length === 1 ) {
|
||||
ret = jQuery.data( elem, name );
|
||||
evt = jQuery._data( elem, name );
|
||||
if ( ( ret === undefined || ret === evt ) && evt !== undefined ) {
|
||||
migrateWarn("Use of jQuery.fn.data('events') is deprecated");
|
||||
return evt;
|
||||
}
|
||||
}
|
||||
return oldFnData.apply( this, arguments );
|
||||
};
|
||||
|
||||
|
||||
var rscriptType = /\/(java|ecma)script/i;
|
||||
|
||||
// Since jQuery.clean is used internally on older versions, we only shim if it's missing
|
||||
if ( !jQuery.clean ) {
|
||||
jQuery.clean = function( elems, context, fragment, scripts ) {
|
||||
// Set context per 1.8 logic
|
||||
context = context || document;
|
||||
context = !context.nodeType && context[0] || context;
|
||||
context = context.ownerDocument || context;
|
||||
|
||||
migrateWarn("jQuery.clean() is deprecated");
|
||||
|
||||
var i, elem, handleScript, jsTags,
|
||||
ret = [];
|
||||
|
||||
jQuery.merge( ret, jQuery.buildFragment( elems, context ).childNodes );
|
||||
|
||||
// Complex logic lifted directly from jQuery 1.8
|
||||
if ( fragment ) {
|
||||
// Special handling of each script element
|
||||
handleScript = function( elem ) {
|
||||
// Check if we consider it executable
|
||||
if ( !elem.type || rscriptType.test( elem.type ) ) {
|
||||
// Detach the script and store it in the scripts array (if provided) or the fragment
|
||||
// Return truthy to indicate that it has been handled
|
||||
return scripts ?
|
||||
scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :
|
||||
fragment.appendChild( elem );
|
||||
}
|
||||
};
|
||||
|
||||
for ( i = 0; (elem = ret[i]) != null; i++ ) {
|
||||
// Check if we're done after handling an executable script
|
||||
if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {
|
||||
// Append to fragment and handle embedded scripts
|
||||
fragment.appendChild( elem );
|
||||
if ( typeof elem.getElementsByTagName !== "undefined" ) {
|
||||
// handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
|
||||
jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );
|
||||
|
||||
// Splice the scripts into ret after their former ancestor and advance our index beyond them
|
||||
ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
|
||||
i += jsTags.length;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
|
||||
var eventAdd = jQuery.event.add,
|
||||
eventRemove = jQuery.event.remove,
|
||||
eventTrigger = jQuery.event.trigger,
|
||||
oldToggle = jQuery.fn.toggle,
|
||||
oldLive = jQuery.fn.live,
|
||||
oldDie = jQuery.fn.die,
|
||||
oldLoad = jQuery.fn.load,
|
||||
ajaxEvents = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",
|
||||
rajaxEvent = new RegExp( "\\b(?:" + ajaxEvents + ")\\b" ),
|
||||
rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
|
||||
hoverHack = function( events ) {
|
||||
if ( typeof( events ) !== "string" || jQuery.event.special.hover ) {
|
||||
return events;
|
||||
}
|
||||
if ( rhoverHack.test( events ) ) {
|
||||
migrateWarn("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'");
|
||||
}
|
||||
return events && events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
|
||||
};
|
||||
|
||||
// Event props removed in 1.9, put them back if needed; no practical way to warn them
|
||||
if ( jQuery.event.props && jQuery.event.props[ 0 ] !== "attrChange" ) {
|
||||
jQuery.event.props.unshift( "attrChange", "attrName", "relatedNode", "srcElement" );
|
||||
}
|
||||
|
||||
// Undocumented jQuery.event.handle was "deprecated" in jQuery 1.7
|
||||
if ( jQuery.event.dispatch ) {
|
||||
migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated" );
|
||||
}
|
||||
|
||||
// Support for 'hover' pseudo-event and ajax event warnings
|
||||
jQuery.event.add = function( elem, types, handler, data, selector ){
|
||||
if ( elem !== document && rajaxEvent.test( types ) ) {
|
||||
migrateWarn( "AJAX events should be attached to document: " + types );
|
||||
}
|
||||
eventAdd.call( this, elem, hoverHack( types || "" ), handler, data, selector );
|
||||
};
|
||||
jQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){
|
||||
eventRemove.call( this, elem, hoverHack( types ) || "", handler, selector, mappedTypes );
|
||||
};
|
||||
|
||||
jQuery.each( [ "load", "unload", "error" ], function( _, name ) {
|
||||
|
||||
jQuery.fn[ name ] = function() {
|
||||
var args = Array.prototype.slice.call( arguments, 0 );
|
||||
|
||||
// If this is an ajax load() the first arg should be the string URL;
|
||||
// technically this could also be the "Anything" arg of the event .load()
|
||||
// which just goes to show why this dumb signature has been deprecated!
|
||||
// jQuery custom builds that exclude the Ajax module justifiably die here.
|
||||
if ( name === "load" && typeof args[ 0 ] === "string" ) {
|
||||
return oldLoad.apply( this, args );
|
||||
}
|
||||
|
||||
migrateWarn( "jQuery.fn." + name + "() is deprecated" );
|
||||
|
||||
args.splice( 0, 0, name );
|
||||
if ( arguments.length ) {
|
||||
return this.bind.apply( this, args );
|
||||
}
|
||||
|
||||
// Use .triggerHandler here because:
|
||||
// - load and unload events don't need to bubble, only applied to window or image
|
||||
// - error event should not bubble to window, although it does pre-1.7
|
||||
// See http://bugs.jquery.com/ticket/11820
|
||||
this.triggerHandler.apply( this, args );
|
||||
return this;
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
jQuery.fn.toggle = function( fn, fn2 ) {
|
||||
|
||||
// Don't mess with animation or css toggles
|
||||
if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {
|
||||
return oldToggle.apply( this, arguments );
|
||||
}
|
||||
migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated");
|
||||
|
||||
// Save reference to arguments for access in closure
|
||||
var args = arguments,
|
||||
guid = fn.guid || jQuery.guid++,
|
||||
i = 0,
|
||||
toggler = function( event ) {
|
||||
// Figure out which function to execute
|
||||
var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
|
||||
jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
|
||||
|
||||
// Make sure that clicks stop
|
||||
event.preventDefault();
|
||||
|
||||
// and execute the function
|
||||
return args[ lastToggle ].apply( this, arguments ) || false;
|
||||
};
|
||||
|
||||
// link all the functions, so any of them can unbind this click handler
|
||||
toggler.guid = guid;
|
||||
while ( i < args.length ) {
|
||||
args[ i++ ].guid = guid;
|
||||
}
|
||||
|
||||
return this.click( toggler );
|
||||
};
|
||||
|
||||
jQuery.fn.live = function( types, data, fn ) {
|
||||
migrateWarn("jQuery.fn.live() is deprecated");
|
||||
if ( oldLive ) {
|
||||
return oldLive.apply( this, arguments );
|
||||
}
|
||||
jQuery( this.context ).on( types, this.selector, data, fn );
|
||||
return this;
|
||||
};
|
||||
|
||||
jQuery.fn.die = function( types, fn ) {
|
||||
migrateWarn("jQuery.fn.die() is deprecated");
|
||||
if ( oldDie ) {
|
||||
return oldDie.apply( this, arguments );
|
||||
}
|
||||
jQuery( this.context ).off( types, this.selector || "**", fn );
|
||||
return this;
|
||||
};
|
||||
|
||||
// Turn global events into document-triggered events
|
||||
jQuery.event.trigger = function( event, data, elem, onlyHandlers ){
|
||||
if ( !elem && !rajaxEvent.test( event ) ) {
|
||||
migrateWarn( "Global events are undocumented and deprecated" );
|
||||
}
|
||||
return eventTrigger.call( this, event, data, elem || document, onlyHandlers );
|
||||
};
|
||||
jQuery.each( ajaxEvents.split("|"),
|
||||
function( _, name ) {
|
||||
jQuery.event.special[ name ] = {
|
||||
setup: function() {
|
||||
var elem = this;
|
||||
|
||||
// The document needs no shimming; must be !== for oldIE
|
||||
if ( elem !== document ) {
|
||||
jQuery.event.add( document, name + "." + jQuery.guid, function() {
|
||||
jQuery.event.trigger( name, Array.prototype.slice.call( arguments, 1 ), elem, true );
|
||||
});
|
||||
jQuery._data( this, name, jQuery.guid++ );
|
||||
}
|
||||
return false;
|
||||
},
|
||||
teardown: function() {
|
||||
if ( this !== document ) {
|
||||
jQuery.event.remove( document, name + "." + jQuery._data( this, name ) );
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
jQuery.event.special.ready = {
|
||||
setup: function() {
|
||||
if ( this === document ) {
|
||||
migrateWarn( "'ready' event is deprecated" );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack,
|
||||
oldFnFind = jQuery.fn.find;
|
||||
|
||||
jQuery.fn.andSelf = function() {
|
||||
migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()");
|
||||
return oldSelf.apply( this, arguments );
|
||||
};
|
||||
|
||||
jQuery.fn.find = function( selector ) {
|
||||
var ret = oldFnFind.apply( this, arguments );
|
||||
ret.context = this.context;
|
||||
ret.selector = this.selector ? this.selector + " " + selector : selector;
|
||||
return ret;
|
||||
};
|
||||
|
||||
|
||||
// jQuery 1.6 did not support Callbacks, do not warn there
|
||||
if ( jQuery.Callbacks ) {
|
||||
|
||||
var oldDeferred = jQuery.Deferred,
|
||||
tuples = [
|
||||
// action, add listener, callbacks, .then handlers, final state
|
||||
[ "resolve", "done", jQuery.Callbacks("once memory"),
|
||||
jQuery.Callbacks("once memory"), "resolved" ],
|
||||
[ "reject", "fail", jQuery.Callbacks("once memory"),
|
||||
jQuery.Callbacks("once memory"), "rejected" ],
|
||||
[ "notify", "progress", jQuery.Callbacks("memory"),
|
||||
jQuery.Callbacks("memory") ]
|
||||
];
|
||||
|
||||
jQuery.Deferred = function( func ) {
|
||||
var deferred = oldDeferred(),
|
||||
promise = deferred.promise();
|
||||
|
||||
deferred.pipe = promise.pipe = function( /* fnDone, fnFail, fnProgress */ ) {
|
||||
var fns = arguments;
|
||||
|
||||
migrateWarn( "deferred.pipe() is deprecated" );
|
||||
|
||||
return jQuery.Deferred(function( newDefer ) {
|
||||
jQuery.each( tuples, function( i, tuple ) {
|
||||
var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
|
||||
// deferred.done(function() { bind to newDefer or newDefer.resolve })
|
||||
// deferred.fail(function() { bind to newDefer or newDefer.reject })
|
||||
// deferred.progress(function() { bind to newDefer or newDefer.notify })
|
||||
deferred[ tuple[1] ](function() {
|
||||
var returned = fn && fn.apply( this, arguments );
|
||||
if ( returned && jQuery.isFunction( returned.promise ) ) {
|
||||
returned.promise()
|
||||
.done( newDefer.resolve )
|
||||
.fail( newDefer.reject )
|
||||
.progress( newDefer.notify );
|
||||
} else {
|
||||
newDefer[ tuple[ 0 ] + "With" ](
|
||||
this === promise ? newDefer.promise() : this,
|
||||
fn ? [ returned ] : arguments
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
fns = null;
|
||||
}).promise();
|
||||
|
||||
};
|
||||
|
||||
deferred.isResolved = function() {
|
||||
migrateWarn( "deferred.isResolved is deprecated" );
|
||||
return deferred.state() === "resolved";
|
||||
};
|
||||
|
||||
deferred.isRejected = function() {
|
||||
migrateWarn( "deferred.isRejected is deprecated" );
|
||||
return deferred.state() === "rejected";
|
||||
};
|
||||
|
||||
if ( func ) {
|
||||
func.call( deferred, deferred );
|
||||
}
|
||||
|
||||
return deferred;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
})( jQuery, window );
|
||||
File diff suppressed because one or more lines are too long
@@ -1,58 +1,43 @@
|
||||
/**
|
||||
|
||||
@Name: layer
|
||||
|
||||
**/
|
||||
html #layuicss-layer{display:none;position:absolute;width:1989px;}
|
||||
|
||||
/* *html{background-image: url(about:blank); background-attachment: fixed;} */
|
||||
html #layuicss-layer{display: none; position: absolute; width: 1989px;}
|
||||
|
||||
/* common */
|
||||
.layui-layer-shade, .layui-layer{position:fixed; _position:absolute; pointer-events: auto;}
|
||||
.layui-layer-shade{top:0; left:0; width:100%; height:100%; _height:expression(document.body.offsetHeight+"px");}
|
||||
.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-shade, .layui-layer{position:fixed;_position:absolute;pointer-events:auto;}
|
||||
.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px");}
|
||||
.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-close{position:absolute;}
|
||||
.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-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-load{background:url(loading-1.gif) #eee center center no-repeat;}
|
||||
.layui-layer-ico{ background:url(icon.png) no-repeat;}
|
||||
.layui-layer-dialog .layui-layer-ico,
|
||||
.layui-layer-setwin a,
|
||||
.layui-layer-btn a{display:inline-block; *display:inline; *zoom:1; vertical-align:top;}
|
||||
.layui-layer-btn a{display:inline-block;*display:inline;*zoom:1;vertical-align:top;}
|
||||
|
||||
.layui-layer-move{display: none; position: fixed; *position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; cursor: move; opacity: 0; filter:alpha(opacity=0); background-color: #fff; z-index: 2147483647;}
|
||||
.layui-layer-resize{position: absolute; width: 15px; height: 15px; right: 0; bottom: 0; cursor: se-resize;}
|
||||
.layui-layer-move{display:none;position:fixed;*position:absolute;left:0px;top:0px;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647;}
|
||||
.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize;}
|
||||
|
||||
/* 动画 */
|
||||
.layer-anim{-webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation-duration:.3s; animation-duration:.3s;}
|
||||
.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s;}
|
||||
|
||||
@-webkit-keyframes layer-bounceIn { /* 默认 */
|
||||
0% {opacity: 0; -webkit-transform: scale(.5); transform: scale(.5)}
|
||||
100% {opacity: 1; -webkit-transform: scale(1); transform: scale(1)}
|
||||
@-webkit-keyframes layer-bounceIn {
|
||||
0% {opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}
|
||||
100% {opacity:1;-webkit-transform:scale(1);transform:scale(1)}
|
||||
}
|
||||
@keyframes layer-bounceIn {
|
||||
0% {opacity: 0; -webkit-transform: scale(.5); -ms-transform: scale(.5); transform: scale(.5)}
|
||||
100% {opacity: 1; -webkit-transform: scale(1); -ms-transform: scale(1); transform: scale(1)}
|
||||
0% {opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}
|
||||
100% {opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}
|
||||
}
|
||||
.layer-anim-00{-webkit-animation-name: layer-bounceIn;animation-name: layer-bounceIn}
|
||||
.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}
|
||||
|
||||
@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}
|
||||
|
||||
@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}
|
||||
|
||||
@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}
|
||||
|
||||
@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);-ms-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}
|
||||
|
||||
@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}
|
||||
|
||||
@-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: 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 a{position:relative; width: 16px; height:16px; margin-left:10px; font-size:12px; _overflow:hidden;}
|
||||
.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:20px;*right:0;top:20px;font-size:0;line-height:initial;}
|
||||
.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:19px;font-size:12px;_overflow:hidden;}
|
||||
.layui-layer-setwin .layui-layer-min{display:none!important}
|
||||
.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#888;cursor:pointer;_overflow:hidden;}
|
||||
.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA;}
|
||||
@@ -62,130 +47,109 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
|
||||
.layui-layer-setwin .layui-layer-maxmin:hover{background-size:19px;}
|
||||
.layui-layer-setwin .layui-layer-close1{background:url(close.svg) center;cursor:pointer;}
|
||||
.layui-layer-setwin .layui-layer-close1:hover{background-size:19px;}
|
||||
.layui-layer-setwin .layui-layer-close2{position:absolute; right:-28px; top:-28px; width:30px; height:30px; margin-left:0; background-position:-149px -31px; *right:-18px; _display:none;}
|
||||
.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px; margin-left:0;background-position:-149px -31px;*right:-18px;_display:none;}
|
||||
.layui-layer-setwin .layui-layer-close2:hover{ background-position:-180px -31px;}
|
||||
|
||||
/* 按钮栏 */
|
||||
.layui-layer-btn{text-align: right; padding: 0 15px 12px; pointer-events: auto; user-select: none; -webkit-user-select: none;}
|
||||
.layui-layer-btn a{height: 28px; line-height: 28px; margin: 5px 5px 0; padding: 0 15px; border: 1px solid #dedede; background-color:#fff; color: #333; border-radius: 3px; font-weight:400; cursor:pointer; text-decoration: none;}
|
||||
.layui-layer-btn a:hover{opacity: 0.9; text-decoration: none;}
|
||||
.layui-layer-btn a:active{opacity: 0.8;}
|
||||
.layui-layer-btn .layui-layer-btn0{border-color: #1E9FFF; background-color: #1E9FFF; color:#fff;}
|
||||
.layui-layer-btn-l{text-align: left;}
|
||||
.layui-layer-btn-c{text-align: center;}
|
||||
.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none;}
|
||||
.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:3px;font-weight:400;cursor:pointer;text-decoration:none;}
|
||||
.layui-layer-btn a:hover{opacity:0.9;text-decoration:none;}
|
||||
.layui-layer-btn a:active{opacity:0.8;}
|
||||
.layui-layer-btn .layui-layer-btn0{border-color:#1E9FFF;background-color:#1E9FFF;color:#fff;}
|
||||
.layui-layer-btn-l{text-align:left;}
|
||||
.layui-layer-btn-c{text-align:center;}
|
||||
|
||||
/* 定制化 */
|
||||
.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 .layui-layer-ico{position:absolute; top:16px; left:15px; _left:-40px; width:30px; height:30px;}
|
||||
.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 .layui-layer-ico{position:absolute;top:29px;left:22px;_left:-40px;width:30px;height:30px;}
|
||||
.layui-layer-ico1{background-position:-30px 0 }
|
||||
.layui-layer-ico2{background-position:-60px 0;}
|
||||
.layui-layer-ico3{background-position:-90px 0;}
|
||||
.layui-layer-ico4{background-position:-120px 0;}
|
||||
.layui-layer-ico5{background-position:-150px 0;}
|
||||
.layui-layer-ico6{background-position:-180px 0;}
|
||||
.layui-layer-rim{border:6px solid #8D8D8D; border:6px solid rgba(0,0,0,.3); border-radius:5px; box-shadow: none;}
|
||||
.layui-layer-msg{min-width:180px; border:1px solid #D3D4D3; box-shadow: none;}
|
||||
.layui-layer-hui{min-width:100px; background-color: #000; filter:alpha(opacity=60); background-color: rgba(0,0,0,0.6); color: #fff; border:none;}
|
||||
.layui-layer-hui .layui-layer-content{padding:12px 25px; text-align:center;}
|
||||
.layui-layer-dialog .layui-layer-padding{padding: 20px 20px 20px 55px; text-align: left;}
|
||||
.layui-layer-page .layui-layer-content{position:relative; overflow:auto;}
|
||||
.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none;}
|
||||
.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none;}
|
||||
.layui-layer-hui{min-width:100px; background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,0.6);color:#fff;border:none;}
|
||||
.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center;}
|
||||
.layui-layer-dialog .layui-layer-padding{padding:30px 30px 30px 70px;text-align:left;}
|
||||
.layui-layer-page .layui-layer-content{position:relative;overflow:auto;}
|
||||
.layui-layer-page .layui-layer-btn,.layui-layer-iframe .layui-layer-btn{padding-top:10px;}
|
||||
.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-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-loading1{width:37px; height:37px; background:url(loading-1.gif) no-repeat;}
|
||||
.layui-layer-loading .layui-layer-loading2, .layui-layer-ico16{width:32px; height:32px; background:url(loading-2.gif) no-repeat;}
|
||||
.layui-layer-tips{background: none; box-shadow:none; border:none;}
|
||||
.layui-layer-tips .layui-layer-content{position: relative; overflow:visible; line-height: 22px; min-width: 12px; padding: 8px 15px; font-size: 12px; _float:left; border-radius: 3px; box-shadow: 1px 1px 3px rgba(0,0,0,.2); background-color: #000; color: #fff;}
|
||||
.layui-layer-tips .layui-layer-close{right:-2px; top:-1px;}
|
||||
.layui-layer-tips i.layui-layer-TipsG{ position:absolute; width:0; height:0; border-width:8px; border-color:transparent; border-style:dashed; *overflow:hidden;}
|
||||
.layui-layer-tips i.layui-layer-TipsT, .layui-layer-tips i.layui-layer-TipsB{left:5px; border-right-style:solid; border-right-color: #000;}
|
||||
.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-loading1{width:37px;height:37px;background:url(loading-1.gif) no-repeat;}
|
||||
.layui-layer-loading .layui-layer-loading2, .layui-layer-ico16{width:32px;height:32px;background:url(loading-2.gif) no-repeat;}
|
||||
.layui-layer-tips{background:none;box-shadow:none;border:none;}
|
||||
.layui-layer-tips .layui-layer-content{position:relative;overflow:visible;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:3px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff;}
|
||||
.layui-layer-tips .layui-layer-close{right:-2px;top:-1px;}
|
||||
.layui-layer-tips i.layui-layer-TipsG{ position:absolute; width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden;}
|
||||
.layui-layer-tips i.layui-layer-TipsT, .layui-layer-tips i.layui-layer-TipsB{left:5px;border-right-style:solid;border-right-color:#000;}
|
||||
.layui-layer-tips i.layui-layer-TipsT{bottom:-8px;}
|
||||
.layui-layer-tips i.layui-layer-TipsB{top:-8px;}
|
||||
.layui-layer-tips i.layui-layer-TipsR, .layui-layer-tips i.layui-layer-TipsL{top: 5px; border-bottom-style:solid; border-bottom-color: #000;}
|
||||
.layui-layer-tips i.layui-layer-TipsR, .layui-layer-tips i.layui-layer-TipsL{top:5px;border-bottom-style:solid;border-bottom-color:#000;}
|
||||
.layui-layer-tips i.layui-layer-TipsR{left:-8px;}
|
||||
.layui-layer-tips i.layui-layer-TipsL{right:-8px;}
|
||||
|
||||
/* skin */
|
||||
.layui-layer-lan[type="dialog"]{min-width:280px;}
|
||||
.layui-layer-lan .layui-layer-title{background:#4476A7; color:#fff; border: none;}
|
||||
.layui-layer-lan .layui-layer-btn{padding: 5px 10px 10px; text-align: right; border-top:1px solid #E9E7E7}
|
||||
.layui-layer-lan .layui-layer-btn a{background: #fff; border-color: #E9E7E7; color: #333;}
|
||||
.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none;}
|
||||
.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;text-align:right;border-top:1px solid #E9E7E7}
|
||||
.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#E9E7E7;color:#333;}
|
||||
.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5;}
|
||||
.layui-layer-molv .layui-layer-title{background: #009f95; color:#fff; border: none;}
|
||||
.layui-layer-molv .layui-layer-btn a{background: #009f95; border-color: #009f95;}
|
||||
.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none;}
|
||||
.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95;}
|
||||
.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1;}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@Name: layer拓展样式
|
||||
|
||||
*/
|
||||
|
||||
.layui-layer-iconext{background:url(icon-ext.png) no-repeat;}
|
||||
|
||||
/* prompt模式 */
|
||||
.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 .layui-layer-content{padding: 20px;}
|
||||
.layui-layer-prompt .layui-layer-btn{padding-top: 0;}
|
||||
.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 .layui-layer-content{padding:20px;}
|
||||
.layui-layer-prompt .layui-layer-btn{padding-top:0;}
|
||||
|
||||
/* tab模式 */
|
||||
.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 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: 51px; border-left: 1px solid #eee; border-right: 1px solid #eee; background-color: #fff; z-index: 10;}
|
||||
.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: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: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-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.layui-this{display: block;}
|
||||
.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block;}
|
||||
|
||||
/* photo模式 */
|
||||
.layui-layer-photos{background: none; box-shadow: none;}
|
||||
.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-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{left: 30px; background-position:-5px -5px; _background-position:-70px -5px;}
|
||||
.layui-layer-imgprev:hover{background-position:-33px -5px; _background-position:-120px -5px;}
|
||||
.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-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 *{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:hover{color:#fff; text-decoration:underline;}
|
||||
.layui-layer-imgtit em{padding-left:10px; font-style: normal;}
|
||||
.layui-layer-photos{background:none;box-shadow:none;}
|
||||
.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-imgprev, .layui-layer-imgnext{position:fixed;top:50%;width:27px;_width:44px;height:44px; margin-top:-22px;outline:none;}
|
||||
.layui-layer-imgprev{left:30px;background-position:-5px -5px;_background-position:-70px -5px;}
|
||||
.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px;}
|
||||
.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-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 *{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:hover{color:#fff;text-decoration:underline;}
|
||||
.layui-layer-imgtit em{padding-left:10px;font-style:normal;}
|
||||
|
||||
/* 关闭动画 */
|
||||
@-webkit-keyframes layer-bounceOut {
|
||||
100% {opacity: 0; -webkit-transform: scale(.7); transform: scale(.7)}
|
||||
30% {-webkit-transform: scale(1.05); transform: scale(1.05)}
|
||||
0% {-webkit-transform: scale(1); transform: scale(1);}
|
||||
100% {opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}
|
||||
30% {-webkit-transform:scale(1.05);transform:scale(1.05)}
|
||||
0% {-webkit-transform:scale(1);transform:scale(1);}
|
||||
}
|
||||
@keyframes layer-bounceOut {
|
||||
100% {opacity: 0; -webkit-transform: scale(.7); -ms-transform: scale(.7); transform: scale(.7);}
|
||||
30% {-webkit-transform: scale(1.05); -ms-transform: scale(1.05); transform: scale(1.05);}
|
||||
0% {-webkit-transform: scale(1); -ms-transform: scale(1);transform: scale(1);}
|
||||
100% {opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7);}
|
||||
30% {-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05);}
|
||||
0% {-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);}
|
||||
}
|
||||
.layer-anim-close{-webkit-animation-name: layer-bounceOut; animation-name: layer-bounceOut; -webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation-duration:.2s; animation-duration:.2s;}
|
||||
.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s;}
|
||||
|
||||
/* @media screen and (max-width: 1100px) { 没有标题的时候,关闭按钮显示不全 */
|
||||
/* .layui-layer-iframe{overflow-y: auto; -webkit-overflow-scrolling: touch;} */
|
||||
/* } */
|
||||
|
||||
/* ThinkGem */
|
||||
.layui-layer-title {font-weight:bold;font-size:15px;background:#fff;height:45px;line-height:45px;}
|
||||
.layui-layer-title {font-size:16px;background:#fff;height:57px;line-height:57px;}
|
||||
.layui-layer-page .layui-layer-content {overflow-x:hidden;}
|
||||
.layui-layer-page .layui-layer-content .form-file{padding-top:4px;}
|
||||
.layui-layer-page .layui-layer-btn, .layui-layer-iframe .layui-layer-btn {
|
||||
padding-top:3px;padding-bottom:10px;}
|
||||
.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.toast-top-full-width {min-width: 60%;}
|
||||
.layui-layer-page .layui-layer-btn, .layui-layer-iframe .layui-layer-btn {padding-top:3px;padding-bottom:10px;}
|
||||
.layui-layer-btn .layui-layer-btn0{border-color:#1e5edb;background-color:#1e5edb;}
|
||||
.layui-layer-btn a {height:auto;padding:1px 14px;font-size:14px;background-color:#f4f4f4;}
|
||||
.layui-layer.toast-top-full-width {min-width:60%;}
|
||||
|
||||
.skin-dark .layui-layer {background:#1a1a1a;color:#ddd;}
|
||||
.skin-dark .layui-layer-title {background:#262626;border-bottom-color:#484848;color:#bcbcbc;}
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<category_index>0</category_index>
|
||||
<zoom>1.0</zoom>
|
||||
<x>0</x>
|
||||
<y>7</y>
|
||||
<y>0</y>
|
||||
<default_color>
|
||||
<r>128</r>
|
||||
<g>128</g>
|
||||
@@ -775,6 +775,22 @@
|
||||
<physical_name>extend_i4</physical_name>
|
||||
<type>decimal(p)</type>
|
||||
</word>
|
||||
<word>
|
||||
<id>80cd53da9d5a1b19676537e590e20fa2793e902c</id>
|
||||
<length>1000</length>
|
||||
<decimal>null</decimal>
|
||||
<array>false</array>
|
||||
<array_dimension>null</array_dimension>
|
||||
<unsigned>false</unsigned>
|
||||
<zerofill>false</zerofill>
|
||||
<binary>false</binary>
|
||||
<args></args>
|
||||
<char_semantics>false</char_semantics>
|
||||
<description></description>
|
||||
<logical_name>扩展 JSON</logical_name>
|
||||
<physical_name>extend_json</physical_name>
|
||||
<type>varchar(n)</type>
|
||||
</word>
|
||||
<word>
|
||||
<id>ad6f9eff50476669df62b7601cbc3a2e0c905d36</id>
|
||||
<length>500</length>
|
||||
@@ -1256,7 +1272,7 @@
|
||||
<type>varchar(n)</type>
|
||||
</word>
|
||||
<word>
|
||||
<id>63772c051414452204e91e8d0dabd1dbfd640326</id>
|
||||
<id>5887f9db78a9ebc7b23b9a163c6f68100257c0e5</id>
|
||||
<length>767</length>
|
||||
<decimal>null</decimal>
|
||||
<array>false</array>
|
||||
@@ -1896,7 +1912,7 @@
|
||||
<type>decimal(p)</type>
|
||||
</word>
|
||||
<word>
|
||||
<id>8f1564e5646071de508d4325f3cc7f62bdeede16</id>
|
||||
<id>49ec595ac14253d7d25479f6f8c8a94da5a8ca13</id>
|
||||
<length>767</length>
|
||||
<decimal>null</decimal>
|
||||
<array>false</array>
|
||||
@@ -1912,7 +1928,7 @@
|
||||
<type>nvarchar(n)</type>
|
||||
</word>
|
||||
<word>
|
||||
<id>be17e27c1f73fe128f00468cc83953077b7e00a9</id>
|
||||
<id>16c9c333062ea3614d2e044803b872676c8a5377</id>
|
||||
<length>10</length>
|
||||
<decimal>null</decimal>
|
||||
<array>false</array>
|
||||
@@ -1928,7 +1944,7 @@
|
||||
<type>decimal(p)</type>
|
||||
</word>
|
||||
<word>
|
||||
<id>b0bd388c14e5b2bbab9590f5247961a7edd9eb3b</id>
|
||||
<id>a886757c87fb1e04c5f84b6a802e129baaec2ca6</id>
|
||||
<length>767</length>
|
||||
<decimal>null</decimal>
|
||||
<array>false</array>
|
||||
@@ -2282,7 +2298,7 @@
|
||||
</color>
|
||||
<connections>
|
||||
<relation>
|
||||
<id>b3360c18b956528f86538657fb259817fab21f34</id>
|
||||
<id>bf0ac4b1588841d8f855c9d1030b492190b31adb</id>
|
||||
<source>7f024bd90eec8d89290f4db163b3ea077d6ce26d</source>
|
||||
<target>e9faab162f8d6a9f4bed0be95c9dbb56647656e1</target>
|
||||
<source_xp>-1</source_xp>
|
||||
@@ -2314,7 +2330,7 @@
|
||||
<normal_column>
|
||||
<id>7b648ef7efea218657b3201e0a0318986ff5e8cb</id>
|
||||
<referenced_column>0d993b7470d7bde3d20e9c7f24d1811518cf44cc</referenced_column>
|
||||
<relation>b3360c18b956528f86538657fb259817fab21f34</relation>
|
||||
<relation>bf0ac4b1588841d8f855c9d1030b492190b31adb</relation>
|
||||
<description></description>
|
||||
<unique_key_name></unique_key_name>
|
||||
<logical_name></logical_name>
|
||||
@@ -4622,7 +4638,7 @@
|
||||
</color>
|
||||
<connections>
|
||||
<relation>
|
||||
<id>221fc0bc73b3badd39d437e05f24a752587a8a48</id>
|
||||
<id>86d964debc4ef630dc9ec2e2115ee2a2927df3d2</id>
|
||||
<source>388faee80ae30bf2d261c383395ea538ac65d139</source>
|
||||
<target>a64b64022c5b291e365f8bc84c6dcadd1a69b93f</target>
|
||||
<source_xp>-1</source_xp>
|
||||
@@ -4654,7 +4670,7 @@
|
||||
<normal_column>
|
||||
<id>a1ea205b23430d5e2419ab6fc7b81e6a1063b163</id>
|
||||
<referenced_column>eb5d114785c793115e222f88cbce9d6cda0f1543</referenced_column>
|
||||
<relation>221fc0bc73b3badd39d437e05f24a752587a8a48</relation>
|
||||
<relation>86d964debc4ef630dc9ec2e2115ee2a2927df3d2</relation>
|
||||
<description></description>
|
||||
<unique_key_name></unique_key_name>
|
||||
<logical_name></logical_name>
|
||||
@@ -4929,7 +4945,7 @@
|
||||
</color>
|
||||
<connections>
|
||||
<relation>
|
||||
<id>8b10442357d1561bb946b77f486c97d2673bde4b</id>
|
||||
<id>1f10e7900c8bbfe93ffd36ad7cc6f8d8f0c7a2e0</id>
|
||||
<source>02c2487dc0cf00bec5bb12635a6b2eaca8dce45b</source>
|
||||
<target>7f024bd90eec8d89290f4db163b3ea077d6ce26d</target>
|
||||
<source_xp>-1</source_xp>
|
||||
@@ -5028,7 +5044,7 @@
|
||||
<normal_column>
|
||||
<id>f86eb0e3c56d958c2d1ee2c0ea77353b01b89973</id>
|
||||
<referenced_column>f51ed54a54f6cd6b1d74072be62c808f6848470c</referenced_column>
|
||||
<relation>8b10442357d1561bb946b77f486c97d2673bde4b</relation>
|
||||
<relation>1f10e7900c8bbfe93ffd36ad7cc6f8d8f0c7a2e0</relation>
|
||||
<description></description>
|
||||
<unique_key_name></unique_key_name>
|
||||
<logical_name></logical_name>
|
||||
@@ -5599,7 +5615,7 @@
|
||||
</color>
|
||||
<connections>
|
||||
<relation>
|
||||
<id>102c612ebec0dcaf6a4a4270ed4683aea7346293</id>
|
||||
<id>f2b951b9ecd59350e7e2b1dbdc3bdaf651981042</id>
|
||||
<source>7f024bd90eec8d89290f4db163b3ea077d6ce26d</source>
|
||||
<target>388faee80ae30bf2d261c383395ea538ac65d139</target>
|
||||
<source_xp>-1</source_xp>
|
||||
@@ -5664,7 +5680,7 @@
|
||||
<normal_column>
|
||||
<id>dde1496bcd5d55330967cc24f53513e102a163c0</id>
|
||||
<referenced_column>0d993b7470d7bde3d20e9c7f24d1811518cf44cc</referenced_column>
|
||||
<relation>102c612ebec0dcaf6a4a4270ed4683aea7346293</relation>
|
||||
<relation>f2b951b9ecd59350e7e2b1dbdc3bdaf651981042</relation>
|
||||
<description></description>
|
||||
<unique_key_name></unique_key_name>
|
||||
<logical_name></logical_name>
|
||||
@@ -6382,7 +6398,7 @@
|
||||
<referenced_complex_unique_key>null</referenced_complex_unique_key>
|
||||
</relation>
|
||||
<relation>
|
||||
<id>52c8c967a2f0edf6dd988a9bb4cb00d6da008195</id>
|
||||
<id>6917f16fcd1f020c33c9058293719d194ef610c6</id>
|
||||
<source>7f024bd90eec8d89290f4db163b3ea077d6ce26d</source>
|
||||
<target>18893974755ff1a6dc89f298885d6b0d571a8c7b</target>
|
||||
<source_xp>-1</source_xp>
|
||||
@@ -6447,7 +6463,7 @@
|
||||
<normal_column>
|
||||
<id>835faef487ae6874a525a8cb8ba19825f93091aa</id>
|
||||
<referenced_column>0d993b7470d7bde3d20e9c7f24d1811518cf44cc</referenced_column>
|
||||
<relation>52c8c967a2f0edf6dd988a9bb4cb00d6da008195</relation>
|
||||
<relation>6917f16fcd1f020c33c9058293719d194ef610c6</relation>
|
||||
<description></description>
|
||||
<unique_key_name></unique_key_name>
|
||||
<logical_name></logical_name>
|
||||
@@ -8596,6 +8612,39 @@
|
||||
<decimal_size>0</decimal_size>
|
||||
</sequence>
|
||||
</normal_column>
|
||||
<normal_column>
|
||||
<word_id>80cd53da9d5a1b19676537e590e20fa2793e902c</word_id>
|
||||
<id>42c5d8f490f69b93e77698efa030ca23988ae696</id>
|
||||
<description></description>
|
||||
<unique_key_name></unique_key_name>
|
||||
<logical_name></logical_name>
|
||||
<physical_name></physical_name>
|
||||
<type>varchar(n)</type>
|
||||
<constraint></constraint>
|
||||
<default_value></default_value>
|
||||
<auto_increment>false</auto_increment>
|
||||
<foreign_key>false</foreign_key>
|
||||
<not_null>false</not_null>
|
||||
<primary_key>false</primary_key>
|
||||
<unique_key>false</unique_key>
|
||||
<character_set></character_set>
|
||||
<collation></collation>
|
||||
<sequence>
|
||||
<name></name>
|
||||
<schema></schema>
|
||||
<increment></increment>
|
||||
<min_value></min_value>
|
||||
<max_value></max_value>
|
||||
<start></start>
|
||||
<cache></cache>
|
||||
<nocache>false</nocache>
|
||||
<cycle>false</cycle>
|
||||
<order>false</order>
|
||||
<description></description>
|
||||
<data_type></data_type>
|
||||
<decimal_size>0</decimal_size>
|
||||
</sequence>
|
||||
</normal_column>
|
||||
</columns>
|
||||
</column_group>
|
||||
<column_group>
|
||||
@@ -8636,7 +8685,7 @@
|
||||
</sequence>
|
||||
</normal_column>
|
||||
<normal_column>
|
||||
<word_id>63772c051414452204e91e8d0dabd1dbfd640326</word_id>
|
||||
<word_id>5887f9db78a9ebc7b23b9a163c6f68100257c0e5</word_id>
|
||||
<id>e8d877396943acfec73023dba2c1c6e3d7802d62</id>
|
||||
<description></description>
|
||||
<unique_key_name></unique_key_name>
|
||||
@@ -8669,7 +8718,7 @@
|
||||
</sequence>
|
||||
</normal_column>
|
||||
<normal_column>
|
||||
<word_id>be17e27c1f73fe128f00468cc83953077b7e00a9</word_id>
|
||||
<word_id>16c9c333062ea3614d2e044803b872676c8a5377</word_id>
|
||||
<id>23f973124aedd0244533f4e7b3b103c548b966be</id>
|
||||
<description></description>
|
||||
<unique_key_name></unique_key_name>
|
||||
@@ -8702,7 +8751,7 @@
|
||||
</sequence>
|
||||
</normal_column>
|
||||
<normal_column>
|
||||
<word_id>b0bd388c14e5b2bbab9590f5247961a7edd9eb3b</word_id>
|
||||
<word_id>a886757c87fb1e04c5f84b6a802e129baaec2ca6</word_id>
|
||||
<id>984d5eac2b3221118a61655e4a5a49c78e0f0151</id>
|
||||
<description></description>
|
||||
<unique_key_name></unique_key_name>
|
||||
@@ -8801,7 +8850,7 @@
|
||||
</sequence>
|
||||
</normal_column>
|
||||
<normal_column>
|
||||
<word_id>8f1564e5646071de508d4325f3cc7f62bdeede16</word_id>
|
||||
<word_id>49ec595ac14253d7d25479f6f8c8a94da5a8ca13</word_id>
|
||||
<id>618194ebfc8c6c42efcef3a4af0b8054f6af209b</id>
|
||||
<description></description>
|
||||
<unique_key_name></unique_key_name>
|
||||
|
||||
@@ -63,6 +63,7 @@ CREATE TABLE js_cms_article_data
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
@@ -136,6 +137,7 @@ CREATE TABLE js_cms_category
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (category_code)
|
||||
);
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ CREATE TABLE js_cms_article_data
|
||||
extend_d2 datetime,
|
||||
extend_d3 datetime,
|
||||
extend_d4 datetime,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
@@ -136,6 +137,7 @@ CREATE TABLE js_cms_category
|
||||
extend_d2 datetime,
|
||||
extend_d3 datetime,
|
||||
extend_d4 datetime,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (category_code)
|
||||
);
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ CREATE TABLE [js_cms_article_data]
|
||||
[extend_d2] datetime,
|
||||
[extend_d3] datetime,
|
||||
[extend_d4] datetime,
|
||||
[extend_json] varchar(1000),
|
||||
PRIMARY KEY ([id])
|
||||
);
|
||||
|
||||
@@ -136,6 +137,7 @@ CREATE TABLE [js_cms_category]
|
||||
[extend_d2] datetime,
|
||||
[extend_d3] datetime,
|
||||
[extend_d4] datetime,
|
||||
[extend_json] varchar(1000),
|
||||
PRIMARY KEY ([category_code])
|
||||
);
|
||||
|
||||
|
||||
@@ -64,6 +64,7 @@ CREATE TABLE js_cms_article_data
|
||||
extend_d2 datetime COMMENT '扩展 Date 2',
|
||||
extend_d3 datetime COMMENT '扩展 Date 3',
|
||||
extend_d4 datetime COMMENT '扩展 Date 4',
|
||||
extend_json varchar(1000) COMMENT '扩展 JSON',
|
||||
PRIMARY KEY (id)
|
||||
) COMMENT = '文章详情表';
|
||||
|
||||
@@ -137,6 +138,7 @@ CREATE TABLE js_cms_category
|
||||
extend_d2 datetime COMMENT '扩展 Date 2',
|
||||
extend_d3 datetime COMMENT '扩展 Date 3',
|
||||
extend_d4 datetime COMMENT '扩展 Date 4',
|
||||
extend_json varchar(1000) COMMENT '扩展 JSON',
|
||||
PRIMARY KEY (category_code)
|
||||
) COMMENT = '栏目表';
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ CREATE TABLE js_cms_article_data
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar2(1000),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
@@ -136,6 +137,7 @@ CREATE TABLE js_cms_category
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar2(1000),
|
||||
PRIMARY KEY (category_code)
|
||||
);
|
||||
|
||||
@@ -373,6 +375,7 @@ COMMENT ON COLUMN js_cms_article_data.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_cms_article_data.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_cms_article_data.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_cms_article_data.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_cms_article_data.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_cms_article_posid IS '文章推荐位';
|
||||
COMMENT ON COLUMN js_cms_article_posid.article_id IS '内容编号';
|
||||
COMMENT ON COLUMN js_cms_article_posid.postid IS '推荐位置(1轮播图 2首页推荐 3栏目页面)';
|
||||
@@ -430,6 +433,7 @@ COMMENT ON COLUMN js_cms_category.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_cms_category.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_cms_category.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_cms_category.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_cms_category.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_cms_category_role IS '栏目与角色关联表';
|
||||
COMMENT ON COLUMN js_cms_category_role.category_code IS '栏目编码';
|
||||
COMMENT ON COLUMN js_cms_category_role.role_code IS '角色编码';
|
||||
|
||||
@@ -63,6 +63,7 @@ CREATE TABLE js_cms_article_data
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (id)
|
||||
) WITHOUT OIDS;
|
||||
|
||||
@@ -136,6 +137,7 @@ CREATE TABLE js_cms_category
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (category_code)
|
||||
) WITHOUT OIDS;
|
||||
|
||||
@@ -373,6 +375,7 @@ COMMENT ON COLUMN js_cms_article_data.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_cms_article_data.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_cms_article_data.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_cms_article_data.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_cms_article_data.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_cms_article_posid IS '文章推荐位';
|
||||
COMMENT ON COLUMN js_cms_article_posid.article_id IS '内容编号';
|
||||
COMMENT ON COLUMN js_cms_article_posid.postid IS '推荐位置(1轮播图 2首页推荐 3栏目页面)';
|
||||
@@ -430,6 +433,7 @@ COMMENT ON COLUMN js_cms_category.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_cms_category.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_cms_category.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_cms_category.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_cms_category.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_cms_category_role IS '栏目与角色关联表';
|
||||
COMMENT ON COLUMN js_cms_category_role.category_code IS '栏目编码';
|
||||
COMMENT ON COLUMN js_cms_category_role.role_code IS '角色编码';
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>4.6.0-SNAPSHOT</version>
|
||||
<version>5.2.1-SNAPSHOT</version>
|
||||
<relativePath>../../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@ import com.jeesite.modules.cms.entity.Article;
|
||||
@MyBatisDao
|
||||
public interface ArticleDao extends CrudDao<Article> {
|
||||
|
||||
public long updateExpiredWeight(Article article);
|
||||
long updateExpiredWeight(Article article);
|
||||
|
||||
public long updateHitsAddOne(String id);
|
||||
long updateHitsAddOne(String id);
|
||||
|
||||
}
|
||||
Binary file not shown.
@@ -4,19 +4,6 @@
|
||||
*/
|
||||
package com.jeesite.modules.cms.service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.jeesite.common.collect.ListUtils;
|
||||
import com.jeesite.common.config.Global;
|
||||
import com.jeesite.common.entity.Page;
|
||||
@@ -31,8 +18,19 @@ import com.jeesite.modules.cms.entity.Category;
|
||||
import com.jeesite.modules.cms.utils.CmsUtils;
|
||||
import com.jeesite.modules.file.utils.FileUploadUtils;
|
||||
import com.jeesite.modules.sys.utils.UserUtils;
|
||||
|
||||
import io.netty.util.concurrent.DefaultThreadFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* 文章表Service
|
||||
|
||||
@@ -4,17 +4,18 @@
|
||||
*/
|
||||
package com.jeesite.modules.cms.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.text.StringEscapeUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
import com.jeesite.common.service.TreeService;
|
||||
import com.jeesite.modules.cms.dao.CategoryDao;
|
||||
import com.jeesite.modules.cms.entity.Category;
|
||||
import com.jeesite.modules.cms.utils.CmsUtils;
|
||||
import com.jeesite.modules.file.utils.FileUploadUtils;
|
||||
import org.apache.commons.text.StringEscapeUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 栏目表Service
|
||||
|
||||
@@ -4,16 +4,18 @@
|
||||
*/
|
||||
package com.jeesite.modules.cms.service;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.beust.jcommander.internal.Lists;
|
||||
import com.jeesite.modules.cms.entity.FileTemplete;
|
||||
import com.jeesite.modules.cms.entity.Site;
|
||||
import com.jeesite.modules.cms.utils.CmsUtils;
|
||||
import com.jeesite.modules.cms.utils.FileTempleteUtils;
|
||||
import com.jeesite.modules.sys.entity.DictData;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 模版文件Service
|
||||
|
||||
@@ -310,8 +310,8 @@ public class FrontController extends BaseController {
|
||||
/**
|
||||
* 内容评论
|
||||
*/
|
||||
@RequestMapping(value = "comment", method = RequestMethod.GET)
|
||||
public String comment(Comment comment, String theme, HttpServletRequest request, HttpServletResponse response,
|
||||
@RequestMapping(value = "comment-{theme}", method = RequestMethod.GET)
|
||||
public String comment(Comment comment, @PathVariable String theme, HttpServletRequest request, HttpServletResponse response,
|
||||
Model model) {
|
||||
Page<Comment> page = new Page<Comment>(request, response);
|
||||
Comment c = new Comment();
|
||||
|
||||
@@ -62,7 +62,7 @@ public class FrontSearchController extends BaseController{
|
||||
parmas.put("siteCode", siteCode);
|
||||
}
|
||||
page = articleService.searchPage(page, q, qand, qnot, bd, ed, parmas);
|
||||
page.setPageInfo("匹配结果,共耗时 " + TimeUtils.formatDateAgo(System.currentTimeMillis() - start) + "。");
|
||||
page.setPageInfo("匹配结果,共耗时 " + TimeUtils.formatTime(System.currentTimeMillis() - start) + "。");
|
||||
model.addAttribute("page", page);
|
||||
}
|
||||
|
||||
|
||||
322
modules/cms/src/main/resources/db/create/db2/cms.sql
Normal file
322
modules/cms/src/main/resources/db/create/db2/cms.sql
Normal file
@@ -0,0 +1,322 @@
|
||||
|
||||
|
||||
/* Create Tables */
|
||||
|
||||
-- 文章表
|
||||
CREATE TABLE ${_prefix}cms_article
|
||||
(
|
||||
id varchar(64) NOT NULL,
|
||||
category_code varchar(64) NOT NULL,
|
||||
module_type varchar(50),
|
||||
title vargraphic(255) NOT NULL,
|
||||
href vargraphic(1000),
|
||||
color varchar(50),
|
||||
image vargraphic(1000),
|
||||
keywords vargraphic(500),
|
||||
description vargraphic(500),
|
||||
weight decimal(10) DEFAULT 0,
|
||||
weight_date timestamp,
|
||||
source char(1),
|
||||
copyfrom vargraphic(255),
|
||||
hits decimal(20) DEFAULT 0,
|
||||
hits_plus numeric(10),
|
||||
hits_minus numeric(10),
|
||||
word_count numeric(10),
|
||||
custom_content_view varchar(255),
|
||||
view_config vargraphic(1000),
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
update_by varchar(64) NOT NULL,
|
||||
update_date timestamp NOT NULL,
|
||||
remarks vargraphic(500),
|
||||
corp_code varchar(64) DEFAULT '0' NOT NULL,
|
||||
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
-- 文章详情表
|
||||
CREATE TABLE ${_prefix}cms_article_data
|
||||
(
|
||||
id varchar(64) NOT NULL,
|
||||
content clob,
|
||||
relation varchar(1000),
|
||||
is_can_comment char(1),
|
||||
extend_s1 vargraphic(500),
|
||||
extend_s2 vargraphic(500),
|
||||
extend_s3 vargraphic(500),
|
||||
extend_s4 vargraphic(500),
|
||||
extend_s5 vargraphic(500),
|
||||
extend_s6 vargraphic(500),
|
||||
extend_s7 vargraphic(500),
|
||||
extend_s8 vargraphic(500),
|
||||
extend_i1 decimal(19),
|
||||
extend_i2 decimal(19),
|
||||
extend_i3 decimal(19),
|
||||
extend_i4 decimal(19),
|
||||
extend_f1 decimal(19,4),
|
||||
extend_f2 decimal(19,4),
|
||||
extend_f3 decimal(19,4),
|
||||
extend_f4 decimal(19,4),
|
||||
extend_d1 timestamp,
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
-- 文章推荐位
|
||||
CREATE TABLE ${_prefix}cms_article_posid
|
||||
(
|
||||
article_id varchar(64) NOT NULL,
|
||||
postid char(1) NOT NULL
|
||||
);
|
||||
|
||||
|
||||
-- 文章与标签关系
|
||||
CREATE TABLE ${_prefix}cms_article_tag
|
||||
(
|
||||
article_id varchar(64) NOT NULL,
|
||||
tag_name vargraphic(200) NOT NULL
|
||||
);
|
||||
|
||||
|
||||
-- 栏目表
|
||||
CREATE TABLE ${_prefix}cms_category
|
||||
(
|
||||
category_code varchar(64) NOT NULL,
|
||||
parent_code varchar(64) NOT NULL,
|
||||
parent_codes varchar(767) NOT NULL,
|
||||
tree_sort decimal(10) NOT NULL,
|
||||
tree_sorts varchar(767) NOT NULL,
|
||||
tree_leaf char(1) NOT NULL,
|
||||
tree_level decimal(4) NOT NULL,
|
||||
tree_names vargraphic(767) NOT NULL,
|
||||
category_name vargraphic(100) NOT NULL,
|
||||
site_code varchar(64) NOT NULL,
|
||||
module_type varchar(50),
|
||||
image varchar(255),
|
||||
href varchar(255),
|
||||
target varchar(20),
|
||||
keywords vargraphic(500),
|
||||
description vargraphic(500),
|
||||
in_menu char(1),
|
||||
in_list char(1),
|
||||
show_modes char(1),
|
||||
is_need_audit char(1),
|
||||
is_can_comment char(1),
|
||||
custom_list_view varchar(255),
|
||||
custom_content_view varchar(255),
|
||||
view_config vargraphic(1000),
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
update_by varchar(64) NOT NULL,
|
||||
update_date timestamp NOT NULL,
|
||||
remarks vargraphic(500),
|
||||
extend_s1 vargraphic(500),
|
||||
extend_s2 vargraphic(500),
|
||||
extend_s3 vargraphic(500),
|
||||
extend_s4 vargraphic(500),
|
||||
extend_s5 vargraphic(500),
|
||||
extend_s6 vargraphic(500),
|
||||
extend_s7 vargraphic(500),
|
||||
extend_s8 vargraphic(500),
|
||||
extend_i1 decimal(19),
|
||||
extend_i2 decimal(19),
|
||||
extend_i3 decimal(19),
|
||||
extend_i4 decimal(19),
|
||||
extend_f1 decimal(19,4),
|
||||
extend_f2 decimal(19,4),
|
||||
extend_f3 decimal(19,4),
|
||||
extend_f4 decimal(19,4),
|
||||
extend_d1 timestamp,
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (category_code)
|
||||
);
|
||||
|
||||
|
||||
-- 栏目与角色关联表
|
||||
CREATE TABLE ${_prefix}cms_category_role
|
||||
(
|
||||
category_code varchar(64) NOT NULL,
|
||||
role_code varchar(64) NOT NULL,
|
||||
ctrl_type varchar(32),
|
||||
PRIMARY KEY (category_code, role_code)
|
||||
);
|
||||
|
||||
|
||||
-- 文章评论表
|
||||
CREATE TABLE ${_prefix}cms_comment
|
||||
(
|
||||
id varchar(64) NOT NULL,
|
||||
category_code varchar(64) NOT NULL,
|
||||
article_id varchar(64) NOT NULL,
|
||||
parent_id varchar(64),
|
||||
article_title vargraphic(255) NOT NULL,
|
||||
content vargraphic(255) NOT NULL,
|
||||
name vargraphic(50),
|
||||
ip varchar(100),
|
||||
create_by varchar(64),
|
||||
create_date timestamp NOT NULL,
|
||||
audit_user_code varchar(64),
|
||||
audit_date timestamp,
|
||||
audit_comment vargraphic(200),
|
||||
hits_plus numeric(10),
|
||||
hits_minus numeric(10),
|
||||
status char(1) NOT NULL,
|
||||
corp_code varchar(64) DEFAULT '0' NOT NULL,
|
||||
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
-- 留言板表
|
||||
CREATE TABLE ${_prefix}cms_guestbook
|
||||
(
|
||||
id varchar(64) NOT NULL,
|
||||
type char(1) NOT NULL,
|
||||
content varchar(255) NOT NULL,
|
||||
name varchar(100) NOT NULL,
|
||||
email varchar(100) NOT NULL,
|
||||
phone varchar(100) NOT NULL,
|
||||
workunit varchar(100) NOT NULL,
|
||||
ip varchar(100) NOT NULL,
|
||||
create_by varchar(64),
|
||||
create_date timestamp,
|
||||
re_user_code varchar(64),
|
||||
re_date timestamp,
|
||||
re_content varchar(100),
|
||||
status char(1) NOT NULL,
|
||||
corp_code varchar(64) DEFAULT '0' NOT NULL,
|
||||
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
-- 内容举报表
|
||||
CREATE TABLE ${_prefix}cms_report
|
||||
(
|
||||
id varchar(64) NOT NULL,
|
||||
report_source char(1),
|
||||
report_content vargraphic(500),
|
||||
report_url vargraphic(1000),
|
||||
report_type char(1),
|
||||
report_cause vargraphic(500),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
-- 站点表
|
||||
CREATE TABLE ${_prefix}cms_site
|
||||
(
|
||||
site_code varchar(64) NOT NULL,
|
||||
site_name vargraphic(100) NOT NULL,
|
||||
site_sort decimal(10),
|
||||
title vargraphic(100) NOT NULL,
|
||||
logo vargraphic(1000),
|
||||
domain vargraphic(500),
|
||||
keywords vargraphic(500),
|
||||
description vargraphic(500),
|
||||
theme vargraphic(500),
|
||||
copyright vargraphic(1000),
|
||||
custom_index_view varchar(500),
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
update_by varchar(64) NOT NULL,
|
||||
update_date timestamp NOT NULL,
|
||||
remarks vargraphic(500),
|
||||
PRIMARY KEY (site_code)
|
||||
);
|
||||
|
||||
|
||||
-- 内容标签
|
||||
CREATE TABLE ${_prefix}cms_tag
|
||||
(
|
||||
tag_name vargraphic(200) NOT NULL,
|
||||
clicknum numeric(10) NOT NULL,
|
||||
PRIMARY KEY (tag_name)
|
||||
);
|
||||
|
||||
|
||||
-- 访问日志表
|
||||
CREATE TABLE ${_prefix}cms_visit_log
|
||||
(
|
||||
id varchar(64) NOT NULL,
|
||||
request_url vargraphic(1000),
|
||||
request_url_host varchar(128),
|
||||
source_referer vargraphic(1000),
|
||||
source_referer_host varchar(128),
|
||||
source_type char(1),
|
||||
search_engine varchar(200),
|
||||
search_word vargraphic(200),
|
||||
remote_addr varchar(50),
|
||||
user_agent vargraphic(500),
|
||||
user_language varchar(32),
|
||||
user_screen_size varchar(32),
|
||||
user_device varchar(32),
|
||||
user_os_name varchar(32),
|
||||
user_browser varchar(32),
|
||||
user_browser_version varchar(16),
|
||||
unique_visit_id varchar(64),
|
||||
visit_date char(8),
|
||||
visit_time timestamp,
|
||||
is_new_visit char(1),
|
||||
first_visit_time decimal(20),
|
||||
prev_remain_time decimal(20),
|
||||
total_remain_time decimal(20),
|
||||
site_code varchar(64),
|
||||
site_name vargraphic(100),
|
||||
category_code varchar(64),
|
||||
category_name vargraphic(100),
|
||||
content_id varchar(64),
|
||||
content_title vargraphic(255),
|
||||
visit_user_code varchar(100),
|
||||
visit_user_name varchar(100),
|
||||
corp_code varchar(64) DEFAULT '0' NOT NULL,
|
||||
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
|
||||
/* Create Indexes */
|
||||
|
||||
CREATE INDEX idx_cms_article_cb ON ${_prefix}cms_article (create_by);
|
||||
CREATE INDEX idx_cms_article_cc ON ${_prefix}cms_article (category_code);
|
||||
CREATE INDEX idx_cms_article_corp_code ON ${_prefix}cms_article (corp_code);
|
||||
CREATE INDEX idx_cms_article_status ON ${_prefix}cms_article (status);
|
||||
CREATE INDEX idx_cms_article_ud ON ${_prefix}cms_article (update_date);
|
||||
CREATE INDEX idx_cms_article_weight ON ${_prefix}cms_article (weight);
|
||||
CREATE INDEX idx_cms_category_pc ON ${_prefix}cms_category (parent_code);
|
||||
CREATE INDEX idx_cms_category_ts ON ${_prefix}cms_category (tree_sort);
|
||||
CREATE INDEX idx_cms_category_status ON ${_prefix}cms_category (status);
|
||||
CREATE INDEX idx_cms_category_tss ON ${_prefix}cms_category (tree_sorts);
|
||||
CREATE INDEX idx_cms_comment_catc ON ${_prefix}cms_comment (category_code);
|
||||
CREATE INDEX idx_cms_comment_ai ON ${_prefix}cms_comment (article_id);
|
||||
CREATE INDEX idx_cms_comment_cc ON ${_prefix}cms_comment (corp_code);
|
||||
CREATE INDEX idx_cms_comment_status ON ${_prefix}cms_comment (status);
|
||||
CREATE INDEX idx_cms_guestbook_cc ON ${_prefix}cms_guestbook (corp_code);
|
||||
CREATE INDEX idx_cms_guestbook_status ON ${_prefix}cms_guestbook (status);
|
||||
CREATE INDEX idx_cms_guestbook_type ON ${_prefix}cms_guestbook (type);
|
||||
CREATE INDEX idx_cms_site_status ON ${_prefix}cms_site (status);
|
||||
CREATE INDEX cms_visit_log_cc ON ${_prefix}cms_visit_log (category_code);
|
||||
CREATE INDEX cms_visit_log_ci ON ${_prefix}cms_visit_log (content_id);
|
||||
CREATE INDEX cms_visit_log_fvt ON ${_prefix}cms_visit_log (first_visit_time);
|
||||
CREATE INDEX cms_visit_log_inv ON ${_prefix}cms_visit_log (is_new_visit);
|
||||
CREATE INDEX cms_visit_log_ra ON ${_prefix}cms_visit_log (remote_addr);
|
||||
CREATE INDEX cms_visit_log_sc ON ${_prefix}cms_visit_log (site_code);
|
||||
CREATE INDEX cms_visit_log_uvid ON ${_prefix}cms_visit_log (unique_visit_id);
|
||||
CREATE INDEX cms_visit_log_vd ON ${_prefix}cms_visit_log (visit_date);
|
||||
CREATE INDEX cms_visit_log_vt ON ${_prefix}cms_visit_log (visit_time);
|
||||
CREATE INDEX idx_cms_visit_log_corpc ON ${_prefix}cms_visit_log (corp_code);
|
||||
|
||||
|
||||
|
||||
@@ -8,30 +8,30 @@ CREATE TABLE ${_prefix}cms_article
|
||||
id varchar(64) NOT NULL,
|
||||
category_code varchar(64) NOT NULL,
|
||||
module_type varchar(50),
|
||||
title vargraphic(255) NOT NULL,
|
||||
href vargraphic(1000),
|
||||
title varchar(255) NOT NULL,
|
||||
href varchar(1000),
|
||||
color varchar(50),
|
||||
image vargraphic(1000),
|
||||
keywords vargraphic(500),
|
||||
description vargraphic(500),
|
||||
image varchar(1000),
|
||||
keywords varchar(500),
|
||||
description varchar(500),
|
||||
weight decimal(10) DEFAULT 0,
|
||||
weight_date timestamp,
|
||||
weight_date datetime,
|
||||
source char(1),
|
||||
copyfrom vargraphic(255),
|
||||
copyfrom varchar(255),
|
||||
hits decimal(20) DEFAULT 0,
|
||||
hits_plus numeric(10),
|
||||
hits_minus numeric(10),
|
||||
word_count numeric(10),
|
||||
custom_content_view varchar(255),
|
||||
view_config vargraphic(1000),
|
||||
view_config varchar(1000),
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
create_date datetime NOT NULL,
|
||||
update_by varchar(64) NOT NULL,
|
||||
update_date timestamp NOT NULL,
|
||||
remarks vargraphic(500),
|
||||
update_date datetime NOT NULL,
|
||||
remarks varchar(500),
|
||||
corp_code varchar(64) DEFAULT '0' NOT NULL,
|
||||
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
@@ -43,14 +43,14 @@ CREATE TABLE ${_prefix}cms_article_data
|
||||
content clob,
|
||||
relation varchar(1000),
|
||||
is_can_comment char(1),
|
||||
extend_s1 vargraphic(500),
|
||||
extend_s2 vargraphic(500),
|
||||
extend_s3 vargraphic(500),
|
||||
extend_s4 vargraphic(500),
|
||||
extend_s5 vargraphic(500),
|
||||
extend_s6 vargraphic(500),
|
||||
extend_s7 vargraphic(500),
|
||||
extend_s8 vargraphic(500),
|
||||
extend_s1 varchar(500),
|
||||
extend_s2 varchar(500),
|
||||
extend_s3 varchar(500),
|
||||
extend_s4 varchar(500),
|
||||
extend_s5 varchar(500),
|
||||
extend_s6 varchar(500),
|
||||
extend_s7 varchar(500),
|
||||
extend_s8 varchar(500),
|
||||
extend_i1 decimal(19),
|
||||
extend_i2 decimal(19),
|
||||
extend_i3 decimal(19),
|
||||
@@ -59,10 +59,11 @@ CREATE TABLE ${_prefix}cms_article_data
|
||||
extend_f2 decimal(19,4),
|
||||
extend_f3 decimal(19,4),
|
||||
extend_f4 decimal(19,4),
|
||||
extend_d1 timestamp,
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_d1 datetime,
|
||||
extend_d2 datetime,
|
||||
extend_d3 datetime,
|
||||
extend_d4 datetime,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
@@ -79,7 +80,7 @@ CREATE TABLE ${_prefix}cms_article_posid
|
||||
CREATE TABLE ${_prefix}cms_article_tag
|
||||
(
|
||||
article_id varchar(64) NOT NULL,
|
||||
tag_name vargraphic(200) NOT NULL
|
||||
tag_name varchar(200) NOT NULL
|
||||
);
|
||||
|
||||
|
||||
@@ -93,15 +94,15 @@ CREATE TABLE ${_prefix}cms_category
|
||||
tree_sorts varchar(767) NOT NULL,
|
||||
tree_leaf char(1) NOT NULL,
|
||||
tree_level decimal(4) NOT NULL,
|
||||
tree_names vargraphic(767) NOT NULL,
|
||||
category_name vargraphic(100) NOT NULL,
|
||||
tree_names varchar(767) NOT NULL,
|
||||
category_name varchar(100) NOT NULL,
|
||||
site_code varchar(64) NOT NULL,
|
||||
module_type varchar(50),
|
||||
image varchar(255),
|
||||
href varchar(255),
|
||||
target varchar(20),
|
||||
keywords vargraphic(500),
|
||||
description vargraphic(500),
|
||||
keywords varchar(500),
|
||||
description varchar(500),
|
||||
in_menu char(1),
|
||||
in_list char(1),
|
||||
show_modes char(1),
|
||||
@@ -109,21 +110,21 @@ CREATE TABLE ${_prefix}cms_category
|
||||
is_can_comment char(1),
|
||||
custom_list_view varchar(255),
|
||||
custom_content_view varchar(255),
|
||||
view_config vargraphic(1000),
|
||||
view_config varchar(1000),
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
create_date datetime NOT NULL,
|
||||
update_by varchar(64) NOT NULL,
|
||||
update_date timestamp NOT NULL,
|
||||
remarks vargraphic(500),
|
||||
extend_s1 vargraphic(500),
|
||||
extend_s2 vargraphic(500),
|
||||
extend_s3 vargraphic(500),
|
||||
extend_s4 vargraphic(500),
|
||||
extend_s5 vargraphic(500),
|
||||
extend_s6 vargraphic(500),
|
||||
extend_s7 vargraphic(500),
|
||||
extend_s8 vargraphic(500),
|
||||
update_date datetime NOT NULL,
|
||||
remarks varchar(500),
|
||||
extend_s1 varchar(500),
|
||||
extend_s2 varchar(500),
|
||||
extend_s3 varchar(500),
|
||||
extend_s4 varchar(500),
|
||||
extend_s5 varchar(500),
|
||||
extend_s6 varchar(500),
|
||||
extend_s7 varchar(500),
|
||||
extend_s8 varchar(500),
|
||||
extend_i1 decimal(19),
|
||||
extend_i2 decimal(19),
|
||||
extend_i3 decimal(19),
|
||||
@@ -132,10 +133,11 @@ CREATE TABLE ${_prefix}cms_category
|
||||
extend_f2 decimal(19,4),
|
||||
extend_f3 decimal(19,4),
|
||||
extend_f4 decimal(19,4),
|
||||
extend_d1 timestamp,
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_d1 datetime,
|
||||
extend_d2 datetime,
|
||||
extend_d3 datetime,
|
||||
extend_d4 datetime,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (category_code)
|
||||
);
|
||||
|
||||
@@ -157,20 +159,20 @@ CREATE TABLE ${_prefix}cms_comment
|
||||
category_code varchar(64) NOT NULL,
|
||||
article_id varchar(64) NOT NULL,
|
||||
parent_id varchar(64),
|
||||
article_title vargraphic(255) NOT NULL,
|
||||
content vargraphic(255) NOT NULL,
|
||||
name vargraphic(50),
|
||||
article_title varchar(255) NOT NULL,
|
||||
content varchar(255) NOT NULL,
|
||||
name varchar(50),
|
||||
ip varchar(100),
|
||||
create_by varchar(64),
|
||||
create_date timestamp NOT NULL,
|
||||
create_date datetime NOT NULL,
|
||||
audit_user_code varchar(64),
|
||||
audit_date timestamp,
|
||||
audit_comment vargraphic(200),
|
||||
audit_date datetime,
|
||||
audit_comment varchar(200),
|
||||
hits_plus numeric(10),
|
||||
hits_minus numeric(10),
|
||||
status char(1) NOT NULL,
|
||||
corp_code varchar(64) DEFAULT '0' NOT NULL,
|
||||
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
@@ -187,13 +189,13 @@ CREATE TABLE ${_prefix}cms_guestbook
|
||||
workunit varchar(100) NOT NULL,
|
||||
ip varchar(100) NOT NULL,
|
||||
create_by varchar(64),
|
||||
create_date timestamp,
|
||||
create_date datetime,
|
||||
re_user_code varchar(64),
|
||||
re_date timestamp,
|
||||
re_date datetime,
|
||||
re_content varchar(100),
|
||||
status char(1) NOT NULL,
|
||||
corp_code varchar(64) DEFAULT '0' NOT NULL,
|
||||
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
@@ -203,10 +205,10 @@ CREATE TABLE ${_prefix}cms_report
|
||||
(
|
||||
id varchar(64) NOT NULL,
|
||||
report_source char(1),
|
||||
report_content vargraphic(500),
|
||||
report_url vargraphic(1000),
|
||||
report_content varchar(500),
|
||||
report_url varchar(1000),
|
||||
report_type char(1),
|
||||
report_cause vargraphic(500),
|
||||
report_cause varchar(500),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
@@ -215,22 +217,22 @@ CREATE TABLE ${_prefix}cms_report
|
||||
CREATE TABLE ${_prefix}cms_site
|
||||
(
|
||||
site_code varchar(64) NOT NULL,
|
||||
site_name vargraphic(100) NOT NULL,
|
||||
site_name varchar(100) NOT NULL,
|
||||
site_sort decimal(10),
|
||||
title vargraphic(100) NOT NULL,
|
||||
logo vargraphic(1000),
|
||||
domain vargraphic(500),
|
||||
keywords vargraphic(500),
|
||||
description vargraphic(500),
|
||||
theme vargraphic(500),
|
||||
copyright vargraphic(1000),
|
||||
title varchar(100) NOT NULL,
|
||||
logo varchar(1000),
|
||||
domain varchar(500),
|
||||
keywords varchar(500),
|
||||
description varchar(500),
|
||||
theme varchar(500),
|
||||
copyright varchar(1000),
|
||||
custom_index_view varchar(500),
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
create_date datetime NOT NULL,
|
||||
update_by varchar(64) NOT NULL,
|
||||
update_date timestamp NOT NULL,
|
||||
remarks vargraphic(500),
|
||||
update_date datetime NOT NULL,
|
||||
remarks varchar(500),
|
||||
PRIMARY KEY (site_code)
|
||||
);
|
||||
|
||||
@@ -238,7 +240,7 @@ CREATE TABLE ${_prefix}cms_site
|
||||
-- 内容标签
|
||||
CREATE TABLE ${_prefix}cms_tag
|
||||
(
|
||||
tag_name vargraphic(200) NOT NULL,
|
||||
tag_name varchar(200) NOT NULL,
|
||||
clicknum numeric(10) NOT NULL,
|
||||
PRIMARY KEY (tag_name)
|
||||
);
|
||||
@@ -248,15 +250,15 @@ CREATE TABLE ${_prefix}cms_tag
|
||||
CREATE TABLE ${_prefix}cms_visit_log
|
||||
(
|
||||
id varchar(64) NOT NULL,
|
||||
request_url vargraphic(1000),
|
||||
request_url varchar(1000),
|
||||
request_url_host varchar(128),
|
||||
source_referer vargraphic(1000),
|
||||
source_referer varchar(1000),
|
||||
source_referer_host varchar(128),
|
||||
source_type char(1),
|
||||
search_engine varchar(200),
|
||||
search_word vargraphic(200),
|
||||
search_word varchar(200),
|
||||
remote_addr varchar(50),
|
||||
user_agent vargraphic(500),
|
||||
user_agent varchar(500),
|
||||
user_language varchar(32),
|
||||
user_screen_size varchar(32),
|
||||
user_device varchar(32),
|
||||
@@ -265,21 +267,21 @@ CREATE TABLE ${_prefix}cms_visit_log
|
||||
user_browser_version varchar(16),
|
||||
unique_visit_id varchar(64),
|
||||
visit_date char(8),
|
||||
visit_time timestamp,
|
||||
visit_time datetime,
|
||||
is_new_visit char(1),
|
||||
first_visit_time decimal(20),
|
||||
prev_remain_time decimal(20),
|
||||
total_remain_time decimal(20),
|
||||
site_code varchar(64),
|
||||
site_name vargraphic(100),
|
||||
site_name varchar(100),
|
||||
category_code varchar(64),
|
||||
category_name vargraphic(100),
|
||||
category_name varchar(100),
|
||||
content_id varchar(64),
|
||||
content_title vargraphic(255),
|
||||
content_title varchar(255),
|
||||
visit_user_code varchar(100),
|
||||
visit_user_name varchar(100),
|
||||
corp_code varchar(64) DEFAULT '0' NOT NULL,
|
||||
corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
corp_name varchar(100) DEFAULT 'JeeSite' NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ CREATE TABLE [${_prefix}cms_article_data]
|
||||
[extend_d2] datetime,
|
||||
[extend_d3] datetime,
|
||||
[extend_d4] datetime,
|
||||
[extend_json] varchar(1000),
|
||||
PRIMARY KEY ([id])
|
||||
);
|
||||
|
||||
@@ -136,6 +137,7 @@ CREATE TABLE [${_prefix}cms_category]
|
||||
[extend_d2] datetime,
|
||||
[extend_d3] datetime,
|
||||
[extend_d4] datetime,
|
||||
[extend_json] varchar(1000),
|
||||
PRIMARY KEY ([category_code])
|
||||
);
|
||||
|
||||
|
||||
@@ -64,6 +64,7 @@ CREATE TABLE ${_prefix}cms_article_data
|
||||
extend_d2 datetime COMMENT '扩展 Date 2',
|
||||
extend_d3 datetime COMMENT '扩展 Date 3',
|
||||
extend_d4 datetime COMMENT '扩展 Date 4',
|
||||
extend_json varchar(1000) COMMENT '扩展 JSON',
|
||||
PRIMARY KEY (id)
|
||||
) COMMENT = '文章详情表';
|
||||
|
||||
@@ -137,6 +138,7 @@ CREATE TABLE ${_prefix}cms_category
|
||||
extend_d2 datetime COMMENT '扩展 Date 2',
|
||||
extend_d3 datetime COMMENT '扩展 Date 3',
|
||||
extend_d4 datetime COMMENT '扩展 Date 4',
|
||||
extend_json varchar(1000) COMMENT '扩展 JSON',
|
||||
PRIMARY KEY (category_code)
|
||||
) COMMENT = '栏目表';
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ CREATE TABLE ${_prefix}cms_article_data
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar2(1000),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
@@ -136,6 +137,7 @@ CREATE TABLE ${_prefix}cms_category
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar2(1000),
|
||||
PRIMARY KEY (category_code)
|
||||
);
|
||||
|
||||
@@ -373,6 +375,7 @@ COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE ${_prefix}cms_article_posid IS '文章推荐位';
|
||||
COMMENT ON COLUMN ${_prefix}cms_article_posid.article_id IS '内容编号';
|
||||
COMMENT ON COLUMN ${_prefix}cms_article_posid.postid IS '推荐位置(1轮播图 2首页推荐 3栏目页面)';
|
||||
@@ -430,6 +433,7 @@ COMMENT ON COLUMN ${_prefix}cms_category.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN ${_prefix}cms_category.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN ${_prefix}cms_category.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN ${_prefix}cms_category.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN ${_prefix}cms_category.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE ${_prefix}cms_category_role IS '栏目与角色关联表';
|
||||
COMMENT ON COLUMN ${_prefix}cms_category_role.category_code IS '栏目编码';
|
||||
COMMENT ON COLUMN ${_prefix}cms_category_role.role_code IS '角色编码';
|
||||
|
||||
@@ -63,6 +63,7 @@ CREATE TABLE ${_prefix}cms_article_data
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (id)
|
||||
) WITHOUT OIDS;
|
||||
|
||||
@@ -136,6 +137,7 @@ CREATE TABLE ${_prefix}cms_category
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (category_code)
|
||||
) WITHOUT OIDS;
|
||||
|
||||
@@ -373,6 +375,7 @@ COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE ${_prefix}cms_article_posid IS '文章推荐位';
|
||||
COMMENT ON COLUMN ${_prefix}cms_article_posid.article_id IS '内容编号';
|
||||
COMMENT ON COLUMN ${_prefix}cms_article_posid.postid IS '推荐位置(1轮播图 2首页推荐 3栏目页面)';
|
||||
@@ -430,6 +433,7 @@ COMMENT ON COLUMN ${_prefix}cms_category.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN ${_prefix}cms_category.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN ${_prefix}cms_category.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN ${_prefix}cms_category.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN ${_prefix}cms_category.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE ${_prefix}cms_category_role IS '栏目与角色关联表';
|
||||
COMMENT ON COLUMN ${_prefix}cms_category_role.category_code IS '栏目编码';
|
||||
COMMENT ON COLUMN ${_prefix}cms_category_role.role_code IS '角色编码';
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
ALTER TABLE ${_prefix}cms_category
|
||||
ADD extend_json varchar(1000);
|
||||
|
||||
ALTER TABLE ${_prefix}cms_article_data
|
||||
ADD extend_json varchar(1000);
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
ALTER TABLE `${_prefix}cms_category`
|
||||
ADD COLUMN extend_json varchar(1000) COMMENT '扩展 JSON';
|
||||
|
||||
ALTER TABLE `${_prefix}cms_article_data`
|
||||
ADD COLUMN extend_json varchar(1000) COMMENT '扩展 JSON';
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
ALTER TABLE ${_prefix}cms_category ADD extend_json varchar2(1000);
|
||||
COMMENT ON COLUMN ${_prefix}cms_category.extend_json IS '扩展 JSON';
|
||||
|
||||
ALTER TABLE ${_prefix}cms_article_data ADD extend_json varchar2(1000);
|
||||
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_json IS '扩展 JSON';
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
ALTER TABLE ${_prefix}cms_category ADD COLUMN extend_json varchar(1000);
|
||||
COMMENT ON COLUMN ${_prefix}cms_category.extend_json IS '扩展 JSON';
|
||||
|
||||
ALTER TABLE ${_prefix}cms_article_data ADD COLUMN extend_json varchar(1000);
|
||||
COMMENT ON COLUMN ${_prefix}cms_article_data.extend_json IS '扩展 JSON';
|
||||
@@ -8,10 +8,9 @@
|
||||
4.2.2
|
||||
4.2.3
|
||||
4.3.0
|
||||
4.3.1
|
||||
4.3.2
|
||||
4.3.3
|
||||
4.4.0
|
||||
4.4.1
|
||||
4.5.0
|
||||
4.6.0
|
||||
5.0.0
|
||||
5.0.1
|
||||
5.0.2
|
||||
5.1.0
|
||||
5.2.0
|
||||
5.2.1
|
||||
@@ -73,17 +73,15 @@ var setting = {
|
||||
}, tree, loadTree = function() {
|
||||
js.ajaxSubmit("${ctx}/cms/category/treeData?___t="
|
||||
+ new Date().getTime(), { }, function(data) {
|
||||
tree = $.fn.zTree.init($("#tree"), setting, data);//.expandAll(true);
|
||||
// 展开第一级节点
|
||||
var nodes = tree.getNodesByParam("level", 0);
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
tree.expandNode(nodes[i], true, false, false);
|
||||
tree = $.fn.zTree.init($("#tree"), setting, data);
|
||||
var level = -1, nodes;
|
||||
while (++level <= 1) {
|
||||
nodes = tree.getNodesByParam("level", level);
|
||||
if (nodes.length > 10) { break; }
|
||||
for(var i=0; i<nodes.length; i++) {
|
||||
tree.expandNode(nodes[i], true, false, false);
|
||||
}
|
||||
}
|
||||
// 展开第二级节点
|
||||
// nodes = tree.getNodesByParam("level", 1);
|
||||
// for(var i=0; i<nodes.length; i++) {
|
||||
// tree.expandNode(nodes[i], true, false, false);
|
||||
// }
|
||||
}, null, null, js.text('loading.message'));
|
||||
};
|
||||
loadTree();
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
<% layout('/layouts/default.html', {title: '文章评论表管理', libs: ['dataGrid']}){ %>
|
||||
<div class="main-content">
|
||||
<div class="box box-main">
|
||||
<div class="box-header">
|
||||
<div class="box-title">
|
||||
<i class="fa fa-list-alt"></i> ${text('文章评论表管理')}
|
||||
</div>
|
||||
<div class="box-tools pull-right">
|
||||
<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
|
||||
<% if(hasPermi('cms:comment:edit')){ %>
|
||||
<a href="${ctx}/cms/comment/form" class="btn btn-default btnTool" title="${text('新增文章评论表')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<% layout('/layouts/default.html', {title: '文章评论表管理', libs: ['dataGrid']}){ %>
|
||||
<div class="main-content">
|
||||
<div class="box box-main">
|
||||
<div class="box-header">
|
||||
<div class="box-title">
|
||||
<i class="fa fa-list-alt"></i> ${text('文章评论表管理')}
|
||||
</div>
|
||||
<div class="box-tools pull-right">
|
||||
<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
|
||||
<% if(hasPermi('cms:comment:edit')){ %>
|
||||
<a href="${ctx}/cms/comment/form" class="btn btn-default btnTool" title="${text('新增文章评论表')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<#form:form id="searchForm" model="${comment}" action="${ctx}/cms/comment/listData" method="post" class="form-inline hide"
|
||||
data-page-no="${parameter.pageNo}" data-page-size="${parameter.pageSize}" data-order-by="${parameter.orderBy}">
|
||||
<div class="form-group">
|
||||
@@ -98,53 +98,53 @@
|
||||
<button type="reset" class="btn btn-default btn-sm">${text('重置')}</button>
|
||||
</div>
|
||||
</#form:form>
|
||||
<table id="dataGrid"></table>
|
||||
<div id="dataGridPage"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<script>
|
||||
// 初始化DataGrid对象
|
||||
$('#dataGrid').dataGrid({
|
||||
searchForm: $("#searchForm"),
|
||||
columnModel: [
|
||||
{header:'${text('栏目编码')}', name:'categoryCode', index:'a.category_code', width:150, align:"left", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '<a href="${ctx}/cms/comment/form?id='+row.id+'" class="btnList" data-title="${text('编辑文章评论表')}">'+(val||row.id)+'</a>';
|
||||
}},
|
||||
{header:'${text('内容编号')}', name:'articleId', index:'a.article_id', width:150, align:"left"},
|
||||
{header:'${text('父级评论')}', name:'parentId', index:'a.parent_id', width:150, align:"left"},
|
||||
{header:'${text('内容标题')}', name:'articleTitle', index:'a.article_title', width:150, align:"left"},
|
||||
{header:'${text('评论内容')}', name:'content', index:'a.content', width:150, align:"left"},
|
||||
{header:'${text('评论姓名')}', name:'name', index:'a.name', width:150, align:"left"},
|
||||
{header:'${text('评论IP')}', name:'ip', index:'a.ip', width:150, align:"left"},
|
||||
{header:'${text('创建时间')}', name:'createDate', index:'a.create_date', width:150, align:"center"},
|
||||
{header:'${text('审核人')}', name:'auditUserCode', index:'a.audit_user_code', width:150, align:"left"},
|
||||
{header:'${text('审核时间')}', name:'auditDate', index:'a.audit_date', width:150, align:"center"},
|
||||
{header:'${text('审核意见')}', name:'auditComment', index:'a.audit_comment', width:150, align:"left"},
|
||||
{header:'${text('支持数')}', name:'hitsPlus', index:'a.hits_plus', width:150, align:"center"},
|
||||
{header:'${text('反对数')}', name:'hitsMinus', index:'a.hits_minus', width:150, align:"center"},
|
||||
{header:'${text('状态')}', name:'status', index:'a.status', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_search_status')}, val, '${text('未知')}', true);
|
||||
}},
|
||||
{header:'${text('操作')}', name:'actions', width:120, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
//<% if(hasPermi('cms:comment:edit')){ %>
|
||||
actions.push('<a href="${ctx}/cms/comment/form?id='+row.id+'" class="btnList" title="${text('编辑文章评论表')}"><i class="fa fa-pencil"></i></a> ');
|
||||
if (row.status == Global.STATUS_NORMAL){
|
||||
actions.push('<a href="${ctx}/cms/comment/disable?id='+row.id+'" class="btnList" title="${text('停用文章评论表')}" data-confirm="${text('确认要停用该文章评论表吗?')}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/cms/comment/enable?id='+row.id+'" class="btnList" title="${text('启用文章评论表')}" data-confirm="${text('确认要启用该文章评论表吗?')}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
actions.push('<a href="${ctx}/cms/comment/delete?id='+row.id+'" class="btnList" title="${text('删除文章评论表')}" data-confirm="${text('确认要删除该文章评论表吗?')}"><i class="fa fa-trash-o"></i></a> ');
|
||||
//<% } %>
|
||||
return actions.join('');
|
||||
}}
|
||||
],
|
||||
// 加载成功后执行事件
|
||||
ajaxSuccess: function(data){
|
||||
|
||||
}
|
||||
});
|
||||
<table id="dataGrid"></table>
|
||||
<div id="dataGridPage"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<script>
|
||||
// 初始化DataGrid对象
|
||||
$('#dataGrid').dataGrid({
|
||||
searchForm: $("#searchForm"),
|
||||
columnModel: [
|
||||
{header:'${text('栏目编码')}', name:'categoryCode', index:'a.category_code', width:150, align:"left", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '<a href="${ctx}/cms/comment/form?id='+row.id+'" class="btnList" data-title="${text('编辑文章评论表')}">'+(val||row.id)+'</a>';
|
||||
}},
|
||||
{header:'${text('内容编号')}', name:'articleId', index:'a.article_id', width:150, align:"left"},
|
||||
{header:'${text('父级评论')}', name:'parentId', index:'a.parent_id', width:150, align:"left"},
|
||||
{header:'${text('内容标题')}', name:'articleTitle', index:'a.article_title', width:150, align:"left"},
|
||||
{header:'${text('评论内容')}', name:'content', index:'a.content', width:150, align:"left"},
|
||||
{header:'${text('评论姓名')}', name:'name', index:'a.name', width:150, align:"left"},
|
||||
{header:'${text('评论IP')}', name:'ip', index:'a.ip', width:150, align:"left"},
|
||||
{header:'${text('创建时间')}', name:'createDate', index:'a.create_date', width:150, align:"center"},
|
||||
{header:'${text('审核人')}', name:'auditUserCode', index:'a.audit_user_code', width:150, align:"left"},
|
||||
{header:'${text('审核时间')}', name:'auditDate', index:'a.audit_date', width:150, align:"center"},
|
||||
{header:'${text('审核意见')}', name:'auditComment', index:'a.audit_comment', width:150, align:"left"},
|
||||
{header:'${text('支持数')}', name:'hitsPlus', index:'a.hits_plus', width:150, align:"center"},
|
||||
{header:'${text('反对数')}', name:'hitsMinus', index:'a.hits_minus', width:150, align:"center"},
|
||||
{header:'${text('状态')}', name:'status', index:'a.status', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_search_status')}, val, '${text('未知')}', true);
|
||||
}},
|
||||
{header:'${text('操作')}', name:'actions', width:120, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
<% if(hasPermi('cms:comment:edit')){ %>
|
||||
actions.push('<a href="${ctx}/cms/comment/form?id='+row.id+'" class="btnList" title="${text('编辑文章评论表')}"><i class="fa fa-pencil"></i></a> ');
|
||||
if (row.status == Global.STATUS_NORMAL){
|
||||
actions.push('<a href="${ctx}/cms/comment/disable?id='+row.id+'" class="btnList" title="${text('停用文章评论表')}" data-confirm="${text('确认要停用该文章评论表吗?')}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/cms/comment/enable?id='+row.id+'" class="btnList" title="${text('启用文章评论表')}" data-confirm="${text('确认要启用该文章评论表吗?')}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
actions.push('<a href="${ctx}/cms/comment/delete?id='+row.id+'" class="btnList" title="${text('删除文章评论表')}" data-confirm="${text('确认要删除该文章评论表吗?')}"><i class="fa fa-trash-o"></i></a> ');
|
||||
<% } %>
|
||||
return actions.join('');
|
||||
}}
|
||||
],
|
||||
// 加载成功后执行事件
|
||||
ajaxSuccess: function(data){
|
||||
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@@ -55,16 +55,14 @@ var setting = {
|
||||
}
|
||||
}, tree, loadTree = function() {
|
||||
js.ajaxSubmit("${ctx}/cms/template/treeData?___t=" + new Date().getTime(), function(data) {
|
||||
tree = $.fn.zTree.init($("#tree"), setting, data);//.expandAll(true);
|
||||
// 展开第一级节点
|
||||
var nodes = tree.getNodesByParam("level", 0);
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
tree.expandNode(nodes[i], true, false, false);
|
||||
}
|
||||
// 展开第二级节点
|
||||
nodes = tree.getNodesByParam("level", 1);
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
tree.expandNode(nodes[i], true, false, false);
|
||||
tree = $.fn.zTree.init($("#tree"), setting, data);
|
||||
var level = -1, nodes;
|
||||
while (++level <= 1) {
|
||||
nodes = tree.getNodesByParam("level", level);
|
||||
if (nodes.length > 10) { break; }
|
||||
for(var i=0; i<nodes.length; i++) {
|
||||
tree.expandNode(nodes[i], true, false, false);
|
||||
}
|
||||
}
|
||||
}, null, null, js.text('loading.message'));
|
||||
};
|
||||
|
||||
@@ -11,5 +11,5 @@
|
||||
<meta content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
|
||||
<title>${(isNotBlank(title!) ? title! + ' - ' : '') + @Global.getConfig('productName')}</title>
|
||||
<script src="${ctxPath}/global.min.js?ctx=${ctx}"></script>
|
||||
<script src="${ctxStatic}/jquery/jquery-1.12.4.min.js"></script>
|
||||
<script src="${ctxStatic}/jquery/jquery-migrate-1.4.1.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>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -19,6 +19,7 @@ CREATE TABLE js_gen_table
|
||||
function_name_simple vargraphic(50),
|
||||
function_author vargraphic(50),
|
||||
gen_base_dir vargraphic(1000),
|
||||
gen_front_dir vargraphic(1000),
|
||||
options vargraphic(1000),
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
@@ -121,6 +122,7 @@ CREATE TABLE js_sys_company
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (company_code)
|
||||
);
|
||||
|
||||
@@ -198,6 +200,7 @@ CREATE TABLE js_sys_dict_data
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (dict_code)
|
||||
);
|
||||
|
||||
@@ -313,6 +316,27 @@ CREATE TABLE js_sys_file_upload
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
-- 系统健康检查
|
||||
CREATE TABLE js_sys_health_check
|
||||
(
|
||||
id varchar(64) NOT NULL,
|
||||
server_name vargraphic(50),
|
||||
server_url vargraphic(500),
|
||||
lic_version vargraphic(10),
|
||||
heart_time timestamp,
|
||||
timeout decimal(10),
|
||||
state char(1),
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
update_by varchar(64) NOT NULL,
|
||||
update_date timestamp NOT NULL,
|
||||
remarks vargraphic(500),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
@@ -324,7 +348,14 @@ CREATE TABLE js_sys_job
|
||||
job_group varchar(64) NOT NULL,
|
||||
description vargraphic(100) NOT NULL,
|
||||
invoke_target vargraphic(1000) NOT NULL,
|
||||
job_type vargraphic(10) DEFAULT 'cron' NOT NULL,
|
||||
job_priority decimal(10),
|
||||
start_time timestamp,
|
||||
start_delay decimal(19),
|
||||
repeat_interval decimal(19),
|
||||
repeat_count decimal(10),
|
||||
cron_expression varchar(255) NOT NULL,
|
||||
rule_expression varchar(255),
|
||||
misfire_instruction decimal(1) NOT NULL,
|
||||
concurrent char(1) NOT NULL,
|
||||
instance_name varchar(64) DEFAULT 'JeeSiteScheduler' NOT NULL,
|
||||
@@ -423,6 +454,8 @@ CREATE TABLE js_sys_menu
|
||||
is_show char(1) NOT NULL,
|
||||
sys_code varchar(64) NOT NULL,
|
||||
module_codes varchar(500) NOT NULL,
|
||||
component varchar(500),
|
||||
params varchar(500),
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
@@ -449,6 +482,7 @@ CREATE TABLE js_sys_menu
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (menu_code)
|
||||
);
|
||||
|
||||
@@ -637,6 +671,7 @@ CREATE TABLE js_sys_office
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (office_code)
|
||||
);
|
||||
|
||||
@@ -645,6 +680,7 @@ CREATE TABLE js_sys_office
|
||||
CREATE TABLE js_sys_post
|
||||
(
|
||||
post_code varchar(64) NOT NULL,
|
||||
view_code varchar(100),
|
||||
post_name varchar(100) NOT NULL,
|
||||
post_type varchar(100),
|
||||
post_sort decimal(10),
|
||||
@@ -665,6 +701,7 @@ CREATE TABLE js_sys_role
|
||||
(
|
||||
role_code varchar(64) NOT NULL,
|
||||
role_name varchar(100) NOT NULL,
|
||||
view_code varchar(100),
|
||||
role_type varchar(100),
|
||||
role_sort decimal(10),
|
||||
is_sys char(1),
|
||||
@@ -699,6 +736,7 @@ CREATE TABLE js_sys_role
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (role_code)
|
||||
);
|
||||
|
||||
@@ -785,6 +823,7 @@ CREATE TABLE js_sys_user
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (user_code)
|
||||
);
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ CREATE TABLE js_gen_table
|
||||
function_name_simple varchar(50),
|
||||
function_author varchar(50),
|
||||
gen_base_dir varchar(1000),
|
||||
gen_front_dir varchar(1000),
|
||||
options varchar(1000),
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date datetime NOT NULL,
|
||||
@@ -121,6 +122,7 @@ CREATE TABLE js_sys_company
|
||||
extend_d2 datetime,
|
||||
extend_d3 datetime,
|
||||
extend_d4 datetime,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (company_code)
|
||||
);
|
||||
|
||||
@@ -198,6 +200,7 @@ CREATE TABLE js_sys_dict_data
|
||||
extend_d2 datetime,
|
||||
extend_d3 datetime,
|
||||
extend_d4 datetime,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (dict_code)
|
||||
);
|
||||
|
||||
@@ -313,6 +316,27 @@ CREATE TABLE js_sys_file_upload
|
||||
extend_d2 datetime,
|
||||
extend_d3 datetime,
|
||||
extend_d4 datetime,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
-- 系统健康检查
|
||||
CREATE TABLE js_sys_health_check
|
||||
(
|
||||
id varchar(64) NOT NULL,
|
||||
server_name varchar(50),
|
||||
server_url varchar(500),
|
||||
lic_version varchar(10),
|
||||
heart_time datetime,
|
||||
timeout decimal(10),
|
||||
state char(1),
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date datetime NOT NULL,
|
||||
update_by varchar(64) NOT NULL,
|
||||
update_date datetime NOT NULL,
|
||||
remarks varchar(500),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
@@ -324,7 +348,14 @@ CREATE TABLE js_sys_job
|
||||
job_group varchar(64) NOT NULL,
|
||||
description varchar(100) NOT NULL,
|
||||
invoke_target varchar(1000) NOT NULL,
|
||||
job_type varchar(10) DEFAULT 'cron' NOT NULL,
|
||||
job_priority decimal(10),
|
||||
start_time datetime,
|
||||
start_delay decimal(19),
|
||||
repeat_interval decimal(19),
|
||||
repeat_count decimal(10),
|
||||
cron_expression varchar(255) NOT NULL,
|
||||
rule_expression varchar(255),
|
||||
misfire_instruction decimal(1) NOT NULL,
|
||||
concurrent char(1) NOT NULL,
|
||||
instance_name varchar(64) DEFAULT 'JeeSiteScheduler' NOT NULL,
|
||||
@@ -423,6 +454,8 @@ CREATE TABLE js_sys_menu
|
||||
is_show char(1) NOT NULL,
|
||||
sys_code varchar(64) NOT NULL,
|
||||
module_codes varchar(500) NOT NULL,
|
||||
component varchar(500),
|
||||
params varchar(500),
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date datetime NOT NULL,
|
||||
@@ -449,6 +482,7 @@ CREATE TABLE js_sys_menu
|
||||
extend_d2 datetime,
|
||||
extend_d3 datetime,
|
||||
extend_d4 datetime,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (menu_code)
|
||||
);
|
||||
|
||||
@@ -637,6 +671,7 @@ CREATE TABLE js_sys_office
|
||||
extend_d2 datetime,
|
||||
extend_d3 datetime,
|
||||
extend_d4 datetime,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (office_code)
|
||||
);
|
||||
|
||||
@@ -645,6 +680,7 @@ CREATE TABLE js_sys_office
|
||||
CREATE TABLE js_sys_post
|
||||
(
|
||||
post_code varchar(64) NOT NULL,
|
||||
view_code varchar(100),
|
||||
post_name varchar(100) NOT NULL,
|
||||
post_type varchar(100),
|
||||
post_sort decimal(10),
|
||||
@@ -665,6 +701,7 @@ CREATE TABLE js_sys_role
|
||||
(
|
||||
role_code varchar(64) NOT NULL,
|
||||
role_name varchar(100) NOT NULL,
|
||||
view_code varchar(100),
|
||||
role_type varchar(100),
|
||||
role_sort decimal(10),
|
||||
is_sys char(1),
|
||||
@@ -699,6 +736,7 @@ CREATE TABLE js_sys_role
|
||||
extend_d2 datetime,
|
||||
extend_d3 datetime,
|
||||
extend_d4 datetime,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (role_code)
|
||||
);
|
||||
|
||||
@@ -785,6 +823,7 @@ CREATE TABLE js_sys_user
|
||||
extend_d2 datetime,
|
||||
extend_d3 datetime,
|
||||
extend_d4 datetime,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (user_code)
|
||||
);
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ CREATE TABLE [js_gen_table]
|
||||
[function_name_simple] nvarchar(50),
|
||||
[function_author] nvarchar(50),
|
||||
[gen_base_dir] nvarchar(1000),
|
||||
[gen_front_dir] nvarchar(1000),
|
||||
[options] nvarchar(1000),
|
||||
[create_by] varchar(64) NOT NULL,
|
||||
[create_date] datetime NOT NULL,
|
||||
@@ -121,6 +122,7 @@ CREATE TABLE [js_sys_company]
|
||||
[extend_d2] datetime,
|
||||
[extend_d3] datetime,
|
||||
[extend_d4] datetime,
|
||||
[extend_json] varchar(1000),
|
||||
PRIMARY KEY ([company_code])
|
||||
);
|
||||
|
||||
@@ -198,6 +200,7 @@ CREATE TABLE [js_sys_dict_data]
|
||||
[extend_d2] datetime,
|
||||
[extend_d3] datetime,
|
||||
[extend_d4] datetime,
|
||||
[extend_json] varchar(1000),
|
||||
PRIMARY KEY ([dict_code])
|
||||
);
|
||||
|
||||
@@ -313,6 +316,27 @@ CREATE TABLE [js_sys_file_upload]
|
||||
[extend_d2] datetime,
|
||||
[extend_d3] datetime,
|
||||
[extend_d4] datetime,
|
||||
[extend_json] varchar(1000),
|
||||
PRIMARY KEY ([id])
|
||||
);
|
||||
|
||||
|
||||
-- 系统健康检查
|
||||
CREATE TABLE [js_sys_health_check]
|
||||
(
|
||||
[id] varchar(64) NOT NULL,
|
||||
[server_name] nvarchar(50),
|
||||
[server_url] nvarchar(500),
|
||||
[lic_version] nvarchar(10),
|
||||
[heart_time] datetime,
|
||||
[timeout] decimal(10),
|
||||
[state] char(1),
|
||||
[status] char(1) DEFAULT '0' NOT NULL,
|
||||
[create_by] varchar(64) NOT NULL,
|
||||
[create_date] datetime NOT NULL,
|
||||
[update_by] varchar(64) NOT NULL,
|
||||
[update_date] datetime NOT NULL,
|
||||
[remarks] nvarchar(500),
|
||||
PRIMARY KEY ([id])
|
||||
);
|
||||
|
||||
@@ -324,7 +348,14 @@ CREATE TABLE [js_sys_job]
|
||||
[job_group] varchar(64) NOT NULL,
|
||||
[description] nvarchar(100) NOT NULL,
|
||||
[invoke_target] nvarchar(1000) NOT NULL,
|
||||
[job_type] nvarchar(10) DEFAULT 'cron' NOT NULL,
|
||||
[job_priority] decimal(10),
|
||||
[start_time] datetime,
|
||||
[start_delay] decimal(19),
|
||||
[repeat_interval] decimal(19),
|
||||
[repeat_count] decimal(10),
|
||||
[cron_expression] varchar(255) NOT NULL,
|
||||
[rule_expression] varchar(255),
|
||||
[misfire_instruction] decimal(1) NOT NULL,
|
||||
[concurrent] char(1) NOT NULL,
|
||||
[instance_name] varchar(64) DEFAULT 'JeeSiteScheduler' NOT NULL,
|
||||
@@ -423,6 +454,8 @@ CREATE TABLE [js_sys_menu]
|
||||
[is_show] char(1) NOT NULL,
|
||||
[sys_code] varchar(64) NOT NULL,
|
||||
[module_codes] varchar(500) NOT NULL,
|
||||
[component] varchar(500),
|
||||
[params] varchar(500),
|
||||
[status] char(1) DEFAULT '0' NOT NULL,
|
||||
[create_by] varchar(64) NOT NULL,
|
||||
[create_date] datetime NOT NULL,
|
||||
@@ -449,6 +482,7 @@ CREATE TABLE [js_sys_menu]
|
||||
[extend_d2] datetime,
|
||||
[extend_d3] datetime,
|
||||
[extend_d4] datetime,
|
||||
[extend_json] varchar(1000),
|
||||
PRIMARY KEY ([menu_code])
|
||||
);
|
||||
|
||||
@@ -637,6 +671,7 @@ CREATE TABLE [js_sys_office]
|
||||
[extend_d2] datetime,
|
||||
[extend_d3] datetime,
|
||||
[extend_d4] datetime,
|
||||
[extend_json] varchar(1000),
|
||||
PRIMARY KEY ([office_code])
|
||||
);
|
||||
|
||||
@@ -645,6 +680,7 @@ CREATE TABLE [js_sys_office]
|
||||
CREATE TABLE [js_sys_post]
|
||||
(
|
||||
[post_code] varchar(64) NOT NULL,
|
||||
[view_code] varchar(100),
|
||||
[post_name] varchar(100) NOT NULL,
|
||||
[post_type] varchar(100),
|
||||
[post_sort] decimal(10),
|
||||
@@ -665,6 +701,7 @@ CREATE TABLE [js_sys_role]
|
||||
(
|
||||
[role_code] varchar(64) NOT NULL,
|
||||
[role_name] varchar(100) NOT NULL,
|
||||
[view_code] varchar(100),
|
||||
[role_type] varchar(100),
|
||||
[role_sort] decimal(10),
|
||||
[is_sys] char(1),
|
||||
@@ -699,6 +736,7 @@ CREATE TABLE [js_sys_role]
|
||||
[extend_d2] datetime,
|
||||
[extend_d3] datetime,
|
||||
[extend_d4] datetime,
|
||||
[extend_json] varchar(1000),
|
||||
PRIMARY KEY ([role_code])
|
||||
);
|
||||
|
||||
@@ -785,6 +823,7 @@ CREATE TABLE [js_sys_user]
|
||||
[extend_d2] datetime,
|
||||
[extend_d3] datetime,
|
||||
[extend_d4] datetime,
|
||||
[extend_json] varchar(1000),
|
||||
PRIMARY KEY ([user_code])
|
||||
);
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ CREATE TABLE js_gen_table
|
||||
function_name_simple varchar(50) COMMENT '生成功能名(简写)',
|
||||
function_author varchar(50) COMMENT '生成功能作者',
|
||||
gen_base_dir varchar(1000) COMMENT '生成基础路径',
|
||||
gen_front_dir varchar(1000) COMMENT '生成前端路径',
|
||||
options varchar(1000) COMMENT '其它生成选项',
|
||||
create_by varchar(64) NOT NULL COMMENT '创建者',
|
||||
create_date datetime NOT NULL COMMENT '创建时间',
|
||||
@@ -122,6 +123,7 @@ CREATE TABLE js_sys_company
|
||||
extend_d2 datetime COMMENT '扩展 Date 2',
|
||||
extend_d3 datetime COMMENT '扩展 Date 3',
|
||||
extend_d4 datetime COMMENT '扩展 Date 4',
|
||||
extend_json varchar(1000) COMMENT '扩展 JSON',
|
||||
PRIMARY KEY (company_code)
|
||||
) COMMENT = '公司表';
|
||||
|
||||
@@ -199,6 +201,7 @@ CREATE TABLE js_sys_dict_data
|
||||
extend_d2 datetime COMMENT '扩展 Date 2',
|
||||
extend_d3 datetime COMMENT '扩展 Date 3',
|
||||
extend_d4 datetime COMMENT '扩展 Date 4',
|
||||
extend_json varchar(1000) COMMENT '扩展 JSON',
|
||||
PRIMARY KEY (dict_code)
|
||||
) COMMENT = '字典数据表';
|
||||
|
||||
@@ -314,10 +317,31 @@ CREATE TABLE js_sys_file_upload
|
||||
extend_d2 datetime COMMENT '扩展 Date 2',
|
||||
extend_d3 datetime COMMENT '扩展 Date 3',
|
||||
extend_d4 datetime COMMENT '扩展 Date 4',
|
||||
extend_json varchar(1000) COMMENT '扩展 JSON',
|
||||
PRIMARY KEY (id)
|
||||
) COMMENT = '文件上传表';
|
||||
|
||||
|
||||
-- 系统健康检查
|
||||
CREATE TABLE js_sys_health_check
|
||||
(
|
||||
id varchar(64) NOT NULL COMMENT '编号',
|
||||
server_name varchar(50) COMMENT '系统节点名称',
|
||||
server_url varchar(500) COMMENT '系统节点地址',
|
||||
lic_version varchar(10) COMMENT '系统许可版本',
|
||||
heart_time datetime COMMENT '最后心跳时间',
|
||||
timeout decimal(10) COMMENT '超时时间',
|
||||
state char(1) COMMENT '服务状态',
|
||||
status char(1) DEFAULT '0' NOT NULL COMMENT '状态(0正常 1删除 2停用)',
|
||||
create_by varchar(64) NOT NULL COMMENT '创建者',
|
||||
create_date datetime NOT NULL COMMENT '创建时间',
|
||||
update_by varchar(64) NOT NULL COMMENT '更新者',
|
||||
update_date datetime NOT NULL COMMENT '更新时间',
|
||||
remarks varchar(500) COMMENT '备注信息',
|
||||
PRIMARY KEY (id)
|
||||
) COMMENT = '系统健康检查';
|
||||
|
||||
|
||||
-- 作业调度表
|
||||
CREATE TABLE js_sys_job
|
||||
(
|
||||
@@ -325,7 +349,14 @@ CREATE TABLE js_sys_job
|
||||
job_group varchar(64) NOT NULL COMMENT '任务组名',
|
||||
description varchar(100) NOT NULL COMMENT '任务描述',
|
||||
invoke_target varchar(1000) NOT NULL COMMENT '调用目标字符串',
|
||||
job_type varchar(10) DEFAULT 'cron' NOT NULL COMMENT '任务触发类型',
|
||||
job_priority decimal(10) COMMENT '触发器优先级',
|
||||
start_time datetime COMMENT '触发器启动时间',
|
||||
start_delay decimal(19) COMMENT '触发器延迟启动时间',
|
||||
repeat_interval decimal(19) COMMENT '循环间隔时间(毫秒)',
|
||||
repeat_count decimal(10) COMMENT '循环次数( -1 无期限)',
|
||||
cron_expression varchar(255) NOT NULL COMMENT 'Cron执行表达式',
|
||||
rule_expression varchar(255) COMMENT '自定义规则表达式',
|
||||
misfire_instruction decimal(1) NOT NULL COMMENT '计划执行错误策略',
|
||||
concurrent char(1) NOT NULL COMMENT '是否并发执行',
|
||||
instance_name varchar(64) DEFAULT 'JeeSiteScheduler' NOT NULL COMMENT '集群的实例名字',
|
||||
@@ -424,6 +455,8 @@ CREATE TABLE js_sys_menu
|
||||
is_show char(1) NOT NULL COMMENT '是否显示(1显示 0隐藏)',
|
||||
sys_code varchar(64) NOT NULL COMMENT '归属系统(default:主导航菜单、mobileApp:APP菜单)',
|
||||
module_codes varchar(500) NOT NULL COMMENT '归属模块(多个用逗号隔开)',
|
||||
component varchar(500) COMMENT '组件路径',
|
||||
params varchar(500) COMMENT '组件参数',
|
||||
status char(1) DEFAULT '0' NOT NULL COMMENT '状态(0正常 1删除 2停用)',
|
||||
create_by varchar(64) NOT NULL COMMENT '创建者',
|
||||
create_date datetime NOT NULL COMMENT '创建时间',
|
||||
@@ -450,6 +483,7 @@ CREATE TABLE js_sys_menu
|
||||
extend_d2 datetime COMMENT '扩展 Date 2',
|
||||
extend_d3 datetime COMMENT '扩展 Date 3',
|
||||
extend_d4 datetime COMMENT '扩展 Date 4',
|
||||
extend_json varchar(1000) COMMENT '扩展 JSON',
|
||||
PRIMARY KEY (menu_code)
|
||||
) COMMENT = '菜单表';
|
||||
|
||||
@@ -638,6 +672,7 @@ CREATE TABLE js_sys_office
|
||||
extend_d2 datetime COMMENT '扩展 Date 2',
|
||||
extend_d3 datetime COMMENT '扩展 Date 3',
|
||||
extend_d4 datetime COMMENT '扩展 Date 4',
|
||||
extend_json varchar(1000) COMMENT '扩展 JSON',
|
||||
PRIMARY KEY (office_code)
|
||||
) COMMENT = '组织机构表';
|
||||
|
||||
@@ -646,6 +681,7 @@ CREATE TABLE js_sys_office
|
||||
CREATE TABLE js_sys_post
|
||||
(
|
||||
post_code varchar(64) NOT NULL COMMENT '岗位编码',
|
||||
view_code varchar(100) COMMENT '岗位代码',
|
||||
post_name varchar(100) NOT NULL COMMENT '岗位名称',
|
||||
post_type varchar(100) COMMENT '岗位分类(高管、中层、基层)',
|
||||
post_sort decimal(10) COMMENT '岗位排序(升序)',
|
||||
@@ -666,6 +702,7 @@ CREATE TABLE js_sys_role
|
||||
(
|
||||
role_code varchar(64) NOT NULL COMMENT '角色编码',
|
||||
role_name varchar(100) NOT NULL COMMENT '角色名称',
|
||||
view_code varchar(100) COMMENT '角色代码',
|
||||
role_type varchar(100) COMMENT '角色分类(高管、中层、基层、其它)',
|
||||
role_sort decimal(10) COMMENT '角色排序(升序)',
|
||||
is_sys char(1) COMMENT '系统内置(1是 0否)',
|
||||
@@ -700,6 +737,7 @@ CREATE TABLE js_sys_role
|
||||
extend_d2 datetime COMMENT '扩展 Date 2',
|
||||
extend_d3 datetime COMMENT '扩展 Date 3',
|
||||
extend_d4 datetime COMMENT '扩展 Date 4',
|
||||
extend_json varchar(1000) COMMENT '扩展 JSON',
|
||||
PRIMARY KEY (role_code)
|
||||
) COMMENT = '角色表';
|
||||
|
||||
@@ -786,6 +824,7 @@ CREATE TABLE js_sys_user
|
||||
extend_d2 datetime COMMENT '扩展 Date 2',
|
||||
extend_d3 datetime COMMENT '扩展 Date 3',
|
||||
extend_d4 datetime COMMENT '扩展 Date 4',
|
||||
extend_json varchar(1000) COMMENT '扩展 JSON',
|
||||
PRIMARY KEY (user_code)
|
||||
) COMMENT = '用户表';
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ CREATE TABLE js_gen_table
|
||||
function_name_simple nvarchar2(50),
|
||||
function_author nvarchar2(50),
|
||||
gen_base_dir nvarchar2(1000),
|
||||
gen_front_dir nvarchar2(1000),
|
||||
options nvarchar2(1000),
|
||||
create_by varchar2(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
@@ -121,6 +122,7 @@ CREATE TABLE js_sys_company
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar2(1000),
|
||||
PRIMARY KEY (company_code)
|
||||
);
|
||||
|
||||
@@ -198,6 +200,7 @@ CREATE TABLE js_sys_dict_data
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar2(1000),
|
||||
PRIMARY KEY (dict_code)
|
||||
);
|
||||
|
||||
@@ -313,6 +316,27 @@ CREATE TABLE js_sys_file_upload
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar2(1000),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
-- 系统健康检查
|
||||
CREATE TABLE js_sys_health_check
|
||||
(
|
||||
id varchar2(64) NOT NULL,
|
||||
server_name nvarchar2(50),
|
||||
server_url nvarchar2(500),
|
||||
lic_version nvarchar2(10),
|
||||
heart_time timestamp,
|
||||
timeout number(10),
|
||||
state char(1),
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar2(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
update_by varchar2(64) NOT NULL,
|
||||
update_date timestamp NOT NULL,
|
||||
remarks nvarchar2(500),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
@@ -324,7 +348,14 @@ CREATE TABLE js_sys_job
|
||||
job_group varchar2(64) NOT NULL,
|
||||
description nvarchar2(100) NOT NULL,
|
||||
invoke_target nvarchar2(1000) NOT NULL,
|
||||
job_type nvarchar2(10) DEFAULT 'cron' NOT NULL,
|
||||
job_priority number(10),
|
||||
start_time timestamp,
|
||||
start_delay number(19),
|
||||
repeat_interval number(19),
|
||||
repeat_count number(10),
|
||||
cron_expression varchar2(255) NOT NULL,
|
||||
rule_expression varchar2(255),
|
||||
misfire_instruction number(1) NOT NULL,
|
||||
concurrent char(1) NOT NULL,
|
||||
instance_name varchar2(64) DEFAULT 'JeeSiteScheduler' NOT NULL,
|
||||
@@ -423,6 +454,8 @@ CREATE TABLE js_sys_menu
|
||||
is_show char(1) NOT NULL,
|
||||
sys_code varchar2(64) NOT NULL,
|
||||
module_codes varchar2(500) NOT NULL,
|
||||
component varchar2(500),
|
||||
params varchar2(500),
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar2(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
@@ -449,6 +482,7 @@ CREATE TABLE js_sys_menu
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar2(1000),
|
||||
PRIMARY KEY (menu_code)
|
||||
);
|
||||
|
||||
@@ -637,6 +671,7 @@ CREATE TABLE js_sys_office
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar2(1000),
|
||||
PRIMARY KEY (office_code)
|
||||
);
|
||||
|
||||
@@ -645,6 +680,7 @@ CREATE TABLE js_sys_office
|
||||
CREATE TABLE js_sys_post
|
||||
(
|
||||
post_code varchar2(64) NOT NULL,
|
||||
view_code varchar2(100),
|
||||
post_name varchar2(100) NOT NULL,
|
||||
post_type varchar2(100),
|
||||
post_sort number(10),
|
||||
@@ -665,6 +701,7 @@ CREATE TABLE js_sys_role
|
||||
(
|
||||
role_code varchar2(64) NOT NULL,
|
||||
role_name varchar2(100) NOT NULL,
|
||||
view_code varchar2(100),
|
||||
role_type varchar2(100),
|
||||
role_sort number(10),
|
||||
is_sys char(1),
|
||||
@@ -699,6 +736,7 @@ CREATE TABLE js_sys_role
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar2(1000),
|
||||
PRIMARY KEY (role_code)
|
||||
);
|
||||
|
||||
@@ -785,6 +823,7 @@ CREATE TABLE js_sys_user
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar2(1000),
|
||||
PRIMARY KEY (user_code)
|
||||
);
|
||||
|
||||
@@ -956,6 +995,7 @@ COMMENT ON COLUMN js_gen_table.function_name IS '生成功能名';
|
||||
COMMENT ON COLUMN js_gen_table.function_name_simple IS '生成功能名(简写)';
|
||||
COMMENT ON COLUMN js_gen_table.function_author IS '生成功能作者';
|
||||
COMMENT ON COLUMN js_gen_table.gen_base_dir IS '生成基础路径';
|
||||
COMMENT ON COLUMN js_gen_table.gen_front_dir IS '生成前端路径';
|
||||
COMMENT ON COLUMN js_gen_table.options IS '其它生成选项';
|
||||
COMMENT ON COLUMN js_gen_table.create_by IS '创建者';
|
||||
COMMENT ON COLUMN js_gen_table.create_date IS '创建时间';
|
||||
@@ -1040,6 +1080,7 @@ COMMENT ON COLUMN js_sys_company.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_sys_company.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_sys_company.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_sys_company.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_sys_company.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_sys_company_office IS '公司部门关联表';
|
||||
COMMENT ON COLUMN js_sys_company_office.company_code IS '公司编码';
|
||||
COMMENT ON COLUMN js_sys_company_office.office_code IS '机构编码';
|
||||
@@ -1099,6 +1140,7 @@ COMMENT ON COLUMN js_sys_dict_data.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_sys_dict_data.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_sys_dict_data.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_sys_dict_data.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_sys_dict_data.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_sys_dict_type IS '字典类型表';
|
||||
COMMENT ON COLUMN js_sys_dict_type.id IS '编号';
|
||||
COMMENT ON COLUMN js_sys_dict_type.dict_name IS '字典名称';
|
||||
@@ -1178,12 +1220,34 @@ COMMENT ON COLUMN js_sys_file_upload.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_sys_file_upload.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_sys_file_upload.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_sys_file_upload.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_sys_file_upload.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_sys_health_check IS '系统健康检查';
|
||||
COMMENT ON COLUMN js_sys_health_check.id IS '编号';
|
||||
COMMENT ON COLUMN js_sys_health_check.server_name IS '系统节点名称';
|
||||
COMMENT ON COLUMN js_sys_health_check.server_url IS '系统节点地址';
|
||||
COMMENT ON COLUMN js_sys_health_check.lic_version IS '系统许可版本';
|
||||
COMMENT ON COLUMN js_sys_health_check.heart_time IS '最后心跳时间';
|
||||
COMMENT ON COLUMN js_sys_health_check.timeout IS '超时时间';
|
||||
COMMENT ON COLUMN js_sys_health_check.state IS '服务状态';
|
||||
COMMENT ON COLUMN js_sys_health_check.status IS '状态(0正常 1删除 2停用)';
|
||||
COMMENT ON COLUMN js_sys_health_check.create_by IS '创建者';
|
||||
COMMENT ON COLUMN js_sys_health_check.create_date IS '创建时间';
|
||||
COMMENT ON COLUMN js_sys_health_check.update_by IS '更新者';
|
||||
COMMENT ON COLUMN js_sys_health_check.update_date IS '更新时间';
|
||||
COMMENT ON COLUMN js_sys_health_check.remarks IS '备注信息';
|
||||
COMMENT ON TABLE js_sys_job IS '作业调度表';
|
||||
COMMENT ON COLUMN js_sys_job.job_name IS '任务名称';
|
||||
COMMENT ON COLUMN js_sys_job.job_group IS '任务组名';
|
||||
COMMENT ON COLUMN js_sys_job.description IS '任务描述';
|
||||
COMMENT ON COLUMN js_sys_job.invoke_target IS '调用目标字符串';
|
||||
COMMENT ON COLUMN js_sys_job.job_type IS '任务触发类型';
|
||||
COMMENT ON COLUMN js_sys_job.job_priority IS '触发器优先级';
|
||||
COMMENT ON COLUMN js_sys_job.start_time IS '触发器启动时间';
|
||||
COMMENT ON COLUMN js_sys_job.start_delay IS '触发器延迟启动时间';
|
||||
COMMENT ON COLUMN js_sys_job.repeat_interval IS '循环间隔时间(毫秒)';
|
||||
COMMENT ON COLUMN js_sys_job.repeat_count IS '循环次数( -1 无期限)';
|
||||
COMMENT ON COLUMN js_sys_job.cron_expression IS 'Cron执行表达式';
|
||||
COMMENT ON COLUMN js_sys_job.rule_expression IS '自定义规则表达式';
|
||||
COMMENT ON COLUMN js_sys_job.misfire_instruction IS '计划执行错误策略';
|
||||
COMMENT ON COLUMN js_sys_job.concurrent IS '是否并发执行';
|
||||
COMMENT ON COLUMN js_sys_job.instance_name IS '集群的实例名字';
|
||||
@@ -1258,6 +1322,8 @@ COMMENT ON COLUMN js_sys_menu.weight IS '菜单权重';
|
||||
COMMENT ON COLUMN js_sys_menu.is_show IS '是否显示(1显示 0隐藏)';
|
||||
COMMENT ON COLUMN js_sys_menu.sys_code IS '归属系统(default:主导航菜单、mobileApp:APP菜单)';
|
||||
COMMENT ON COLUMN js_sys_menu.module_codes IS '归属模块(多个用逗号隔开)';
|
||||
COMMENT ON COLUMN js_sys_menu.component IS '组件路径';
|
||||
COMMENT ON COLUMN js_sys_menu.params IS '组件参数';
|
||||
COMMENT ON COLUMN js_sys_menu.status IS '状态(0正常 1删除 2停用)';
|
||||
COMMENT ON COLUMN js_sys_menu.create_by IS '创建者';
|
||||
COMMENT ON COLUMN js_sys_menu.create_date IS '创建时间';
|
||||
@@ -1284,6 +1350,7 @@ COMMENT ON COLUMN js_sys_menu.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_sys_menu.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_sys_menu.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_sys_menu.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_sys_menu.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_sys_module IS '模块表';
|
||||
COMMENT ON COLUMN js_sys_module.module_code IS '模块编码';
|
||||
COMMENT ON COLUMN js_sys_module.module_name IS '模块名称';
|
||||
@@ -1430,8 +1497,10 @@ COMMENT ON COLUMN js_sys_office.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_sys_office.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_sys_office.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_sys_office.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_sys_office.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_sys_post IS '员工岗位表';
|
||||
COMMENT ON COLUMN js_sys_post.post_code IS '岗位编码';
|
||||
COMMENT ON COLUMN js_sys_post.view_code IS '岗位代码';
|
||||
COMMENT ON COLUMN js_sys_post.post_name IS '岗位名称';
|
||||
COMMENT ON COLUMN js_sys_post.post_type IS '岗位分类(高管、中层、基层)';
|
||||
COMMENT ON COLUMN js_sys_post.post_sort IS '岗位排序(升序)';
|
||||
@@ -1446,6 +1515,7 @@ COMMENT ON COLUMN js_sys_post.corp_name IS '租户名称';
|
||||
COMMENT ON TABLE js_sys_role IS '角色表';
|
||||
COMMENT ON COLUMN js_sys_role.role_code IS '角色编码';
|
||||
COMMENT ON COLUMN js_sys_role.role_name IS '角色名称';
|
||||
COMMENT ON COLUMN js_sys_role.view_code IS '角色代码';
|
||||
COMMENT ON COLUMN js_sys_role.role_type IS '角色分类(高管、中层、基层、其它)';
|
||||
COMMENT ON COLUMN js_sys_role.role_sort IS '角色排序(升序)';
|
||||
COMMENT ON COLUMN js_sys_role.is_sys IS '系统内置(1是 0否)';
|
||||
@@ -1480,6 +1550,7 @@ COMMENT ON COLUMN js_sys_role.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_sys_role.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_sys_role.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_sys_role.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_sys_role.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_sys_role_data_scope IS '角色数据权限表';
|
||||
COMMENT ON COLUMN js_sys_role_data_scope.role_code IS '控制角色编码';
|
||||
COMMENT ON COLUMN js_sys_role_data_scope.ctrl_type IS '控制类型';
|
||||
@@ -1548,6 +1619,7 @@ COMMENT ON COLUMN js_sys_user.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_sys_user.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_sys_user.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_sys_user.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_sys_user.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_sys_user_data_scope IS '用户数据权限表';
|
||||
COMMENT ON COLUMN js_sys_user_data_scope.user_code IS '控制用户编码';
|
||||
COMMENT ON COLUMN js_sys_user_data_scope.ctrl_type IS '控制类型';
|
||||
|
||||
@@ -19,6 +19,7 @@ CREATE TABLE js_gen_table
|
||||
function_name_simple varchar(50),
|
||||
function_author varchar(50),
|
||||
gen_base_dir varchar(1000),
|
||||
gen_front_dir varchar(1000),
|
||||
options varchar(1000),
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
@@ -121,6 +122,7 @@ CREATE TABLE js_sys_company
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (company_code)
|
||||
) WITHOUT OIDS;
|
||||
|
||||
@@ -198,6 +200,7 @@ CREATE TABLE js_sys_dict_data
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (dict_code)
|
||||
) WITHOUT OIDS;
|
||||
|
||||
@@ -313,6 +316,27 @@ CREATE TABLE js_sys_file_upload
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (id)
|
||||
) WITHOUT OIDS;
|
||||
|
||||
|
||||
-- 系统健康检查
|
||||
CREATE TABLE js_sys_health_check
|
||||
(
|
||||
id varchar(64) NOT NULL,
|
||||
server_name varchar(50),
|
||||
server_url varchar(500),
|
||||
lic_version varchar(10),
|
||||
heart_time timestamp,
|
||||
timeout decimal(10),
|
||||
state char(1),
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
update_by varchar(64) NOT NULL,
|
||||
update_date timestamp NOT NULL,
|
||||
remarks varchar(500),
|
||||
PRIMARY KEY (id)
|
||||
) WITHOUT OIDS;
|
||||
|
||||
@@ -324,7 +348,14 @@ CREATE TABLE js_sys_job
|
||||
job_group varchar(64) NOT NULL,
|
||||
description varchar(100) NOT NULL,
|
||||
invoke_target varchar(1000) NOT NULL,
|
||||
job_type varchar(10) DEFAULT 'cron' NOT NULL,
|
||||
job_priority decimal(10),
|
||||
start_time timestamp,
|
||||
start_delay decimal(19),
|
||||
repeat_interval decimal(19),
|
||||
repeat_count decimal(10),
|
||||
cron_expression varchar(255) NOT NULL,
|
||||
rule_expression varchar(255),
|
||||
misfire_instruction decimal(1) NOT NULL,
|
||||
concurrent char(1) NOT NULL,
|
||||
instance_name varchar(64) DEFAULT 'JeeSiteScheduler' NOT NULL,
|
||||
@@ -423,6 +454,8 @@ CREATE TABLE js_sys_menu
|
||||
is_show char(1) NOT NULL,
|
||||
sys_code varchar(64) NOT NULL,
|
||||
module_codes varchar(500) NOT NULL,
|
||||
component varchar(500),
|
||||
params varchar(500),
|
||||
status char(1) DEFAULT '0' NOT NULL,
|
||||
create_by varchar(64) NOT NULL,
|
||||
create_date timestamp NOT NULL,
|
||||
@@ -449,6 +482,7 @@ CREATE TABLE js_sys_menu
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (menu_code)
|
||||
) WITHOUT OIDS;
|
||||
|
||||
@@ -637,6 +671,7 @@ CREATE TABLE js_sys_office
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (office_code)
|
||||
) WITHOUT OIDS;
|
||||
|
||||
@@ -645,6 +680,7 @@ CREATE TABLE js_sys_office
|
||||
CREATE TABLE js_sys_post
|
||||
(
|
||||
post_code varchar(64) NOT NULL,
|
||||
view_code varchar(100),
|
||||
post_name varchar(100) NOT NULL,
|
||||
post_type varchar(100),
|
||||
post_sort decimal(10),
|
||||
@@ -665,6 +701,7 @@ CREATE TABLE js_sys_role
|
||||
(
|
||||
role_code varchar(64) NOT NULL,
|
||||
role_name varchar(100) NOT NULL,
|
||||
view_code varchar(100),
|
||||
role_type varchar(100),
|
||||
role_sort decimal(10),
|
||||
is_sys char(1),
|
||||
@@ -699,6 +736,7 @@ CREATE TABLE js_sys_role
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (role_code)
|
||||
) WITHOUT OIDS;
|
||||
|
||||
@@ -785,6 +823,7 @@ CREATE TABLE js_sys_user
|
||||
extend_d2 timestamp,
|
||||
extend_d3 timestamp,
|
||||
extend_d4 timestamp,
|
||||
extend_json varchar(1000),
|
||||
PRIMARY KEY (user_code)
|
||||
) WITHOUT OIDS;
|
||||
|
||||
@@ -956,6 +995,7 @@ COMMENT ON COLUMN js_gen_table.function_name IS '生成功能名';
|
||||
COMMENT ON COLUMN js_gen_table.function_name_simple IS '生成功能名(简写)';
|
||||
COMMENT ON COLUMN js_gen_table.function_author IS '生成功能作者';
|
||||
COMMENT ON COLUMN js_gen_table.gen_base_dir IS '生成基础路径';
|
||||
COMMENT ON COLUMN js_gen_table.gen_front_dir IS '生成前端路径';
|
||||
COMMENT ON COLUMN js_gen_table.options IS '其它生成选项';
|
||||
COMMENT ON COLUMN js_gen_table.create_by IS '创建者';
|
||||
COMMENT ON COLUMN js_gen_table.create_date IS '创建时间';
|
||||
@@ -1040,6 +1080,7 @@ COMMENT ON COLUMN js_sys_company.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_sys_company.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_sys_company.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_sys_company.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_sys_company.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_sys_company_office IS '公司部门关联表';
|
||||
COMMENT ON COLUMN js_sys_company_office.company_code IS '公司编码';
|
||||
COMMENT ON COLUMN js_sys_company_office.office_code IS '机构编码';
|
||||
@@ -1099,6 +1140,7 @@ COMMENT ON COLUMN js_sys_dict_data.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_sys_dict_data.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_sys_dict_data.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_sys_dict_data.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_sys_dict_data.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_sys_dict_type IS '字典类型表';
|
||||
COMMENT ON COLUMN js_sys_dict_type.id IS '编号';
|
||||
COMMENT ON COLUMN js_sys_dict_type.dict_name IS '字典名称';
|
||||
@@ -1178,12 +1220,34 @@ COMMENT ON COLUMN js_sys_file_upload.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_sys_file_upload.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_sys_file_upload.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_sys_file_upload.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_sys_file_upload.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_sys_health_check IS '系统健康检查';
|
||||
COMMENT ON COLUMN js_sys_health_check.id IS '编号';
|
||||
COMMENT ON COLUMN js_sys_health_check.server_name IS '系统节点名称';
|
||||
COMMENT ON COLUMN js_sys_health_check.server_url IS '系统节点地址';
|
||||
COMMENT ON COLUMN js_sys_health_check.lic_version IS '系统许可版本';
|
||||
COMMENT ON COLUMN js_sys_health_check.heart_time IS '最后心跳时间';
|
||||
COMMENT ON COLUMN js_sys_health_check.timeout IS '超时时间';
|
||||
COMMENT ON COLUMN js_sys_health_check.state IS '服务状态';
|
||||
COMMENT ON COLUMN js_sys_health_check.status IS '状态(0正常 1删除 2停用)';
|
||||
COMMENT ON COLUMN js_sys_health_check.create_by IS '创建者';
|
||||
COMMENT ON COLUMN js_sys_health_check.create_date IS '创建时间';
|
||||
COMMENT ON COLUMN js_sys_health_check.update_by IS '更新者';
|
||||
COMMENT ON COLUMN js_sys_health_check.update_date IS '更新时间';
|
||||
COMMENT ON COLUMN js_sys_health_check.remarks IS '备注信息';
|
||||
COMMENT ON TABLE js_sys_job IS '作业调度表';
|
||||
COMMENT ON COLUMN js_sys_job.job_name IS '任务名称';
|
||||
COMMENT ON COLUMN js_sys_job.job_group IS '任务组名';
|
||||
COMMENT ON COLUMN js_sys_job.description IS '任务描述';
|
||||
COMMENT ON COLUMN js_sys_job.invoke_target IS '调用目标字符串';
|
||||
COMMENT ON COLUMN js_sys_job.job_type IS '任务触发类型';
|
||||
COMMENT ON COLUMN js_sys_job.job_priority IS '触发器优先级';
|
||||
COMMENT ON COLUMN js_sys_job.start_time IS '触发器启动时间';
|
||||
COMMENT ON COLUMN js_sys_job.start_delay IS '触发器延迟启动时间';
|
||||
COMMENT ON COLUMN js_sys_job.repeat_interval IS '循环间隔时间(毫秒)';
|
||||
COMMENT ON COLUMN js_sys_job.repeat_count IS '循环次数( -1 无期限)';
|
||||
COMMENT ON COLUMN js_sys_job.cron_expression IS 'Cron执行表达式';
|
||||
COMMENT ON COLUMN js_sys_job.rule_expression IS '自定义规则表达式';
|
||||
COMMENT ON COLUMN js_sys_job.misfire_instruction IS '计划执行错误策略';
|
||||
COMMENT ON COLUMN js_sys_job.concurrent IS '是否并发执行';
|
||||
COMMENT ON COLUMN js_sys_job.instance_name IS '集群的实例名字';
|
||||
@@ -1258,6 +1322,8 @@ COMMENT ON COLUMN js_sys_menu.weight IS '菜单权重';
|
||||
COMMENT ON COLUMN js_sys_menu.is_show IS '是否显示(1显示 0隐藏)';
|
||||
COMMENT ON COLUMN js_sys_menu.sys_code IS '归属系统(default:主导航菜单、mobileApp:APP菜单)';
|
||||
COMMENT ON COLUMN js_sys_menu.module_codes IS '归属模块(多个用逗号隔开)';
|
||||
COMMENT ON COLUMN js_sys_menu.component IS '组件路径';
|
||||
COMMENT ON COLUMN js_sys_menu.params IS '组件参数';
|
||||
COMMENT ON COLUMN js_sys_menu.status IS '状态(0正常 1删除 2停用)';
|
||||
COMMENT ON COLUMN js_sys_menu.create_by IS '创建者';
|
||||
COMMENT ON COLUMN js_sys_menu.create_date IS '创建时间';
|
||||
@@ -1284,6 +1350,7 @@ COMMENT ON COLUMN js_sys_menu.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_sys_menu.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_sys_menu.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_sys_menu.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_sys_menu.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_sys_module IS '模块表';
|
||||
COMMENT ON COLUMN js_sys_module.module_code IS '模块编码';
|
||||
COMMENT ON COLUMN js_sys_module.module_name IS '模块名称';
|
||||
@@ -1430,8 +1497,10 @@ COMMENT ON COLUMN js_sys_office.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_sys_office.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_sys_office.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_sys_office.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_sys_office.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_sys_post IS '员工岗位表';
|
||||
COMMENT ON COLUMN js_sys_post.post_code IS '岗位编码';
|
||||
COMMENT ON COLUMN js_sys_post.view_code IS '岗位代码';
|
||||
COMMENT ON COLUMN js_sys_post.post_name IS '岗位名称';
|
||||
COMMENT ON COLUMN js_sys_post.post_type IS '岗位分类(高管、中层、基层)';
|
||||
COMMENT ON COLUMN js_sys_post.post_sort IS '岗位排序(升序)';
|
||||
@@ -1446,6 +1515,7 @@ COMMENT ON COLUMN js_sys_post.corp_name IS '租户名称';
|
||||
COMMENT ON TABLE js_sys_role IS '角色表';
|
||||
COMMENT ON COLUMN js_sys_role.role_code IS '角色编码';
|
||||
COMMENT ON COLUMN js_sys_role.role_name IS '角色名称';
|
||||
COMMENT ON COLUMN js_sys_role.view_code IS '角色代码';
|
||||
COMMENT ON COLUMN js_sys_role.role_type IS '角色分类(高管、中层、基层、其它)';
|
||||
COMMENT ON COLUMN js_sys_role.role_sort IS '角色排序(升序)';
|
||||
COMMENT ON COLUMN js_sys_role.is_sys IS '系统内置(1是 0否)';
|
||||
@@ -1480,6 +1550,7 @@ COMMENT ON COLUMN js_sys_role.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_sys_role.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_sys_role.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_sys_role.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_sys_role.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_sys_role_data_scope IS '角色数据权限表';
|
||||
COMMENT ON COLUMN js_sys_role_data_scope.role_code IS '控制角色编码';
|
||||
COMMENT ON COLUMN js_sys_role_data_scope.ctrl_type IS '控制类型';
|
||||
@@ -1548,6 +1619,7 @@ COMMENT ON COLUMN js_sys_user.extend_d1 IS '扩展 Date 1';
|
||||
COMMENT ON COLUMN js_sys_user.extend_d2 IS '扩展 Date 2';
|
||||
COMMENT ON COLUMN js_sys_user.extend_d3 IS '扩展 Date 3';
|
||||
COMMENT ON COLUMN js_sys_user.extend_d4 IS '扩展 Date 4';
|
||||
COMMENT ON COLUMN js_sys_user.extend_json IS '扩展 JSON';
|
||||
COMMENT ON TABLE js_sys_user_data_scope IS '用户数据权限表';
|
||||
COMMENT ON COLUMN js_sys_user_data_scope.user_code IS '控制用户编码';
|
||||
COMMENT ON COLUMN js_sys_user_data_scope.ctrl_type IS '控制类型';
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>4.6.0-SNAPSHOT</version>
|
||||
<version>5.2.1-SNAPSHOT</version>
|
||||
<relativePath>../../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -17,12 +17,16 @@
|
||||
<url>http://jeesite.com</url>
|
||||
<inceptionYear>2013-Now</inceptionYear>
|
||||
|
||||
<properties>
|
||||
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<!-- MySQL -->
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<groupId>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<!-- Oracle 11g -->
|
||||
|
||||
@@ -4,34 +4,24 @@
|
||||
*/
|
||||
package com.jeesite.autoconfigure.sys;
|
||||
|
||||
import com.jeesite.common.mybatis.MyBatisFactoryBean;
|
||||
import com.jeesite.modules.msg.service.MsgInnerService;
|
||||
import com.jeesite.modules.sys.service.*;
|
||||
import com.jeesite.modules.sys.service.support.*;
|
||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import com.jeesite.common.mybatis.MyBatisFactoryBean;
|
||||
import com.jeesite.modules.sys.service.AreaService;
|
||||
import com.jeesite.modules.sys.service.CompanyService;
|
||||
import com.jeesite.modules.sys.service.EmpUserService;
|
||||
import com.jeesite.modules.sys.service.EmployeeService;
|
||||
import com.jeesite.modules.sys.service.LogService;
|
||||
import com.jeesite.modules.sys.service.OfficeService;
|
||||
import com.jeesite.modules.sys.service.PostService;
|
||||
import com.jeesite.modules.sys.service.support.AreaServiceSupport;
|
||||
import com.jeesite.modules.sys.service.support.CompanyServiceSupport;
|
||||
import com.jeesite.modules.sys.service.support.EmpUserServiceSupport;
|
||||
import com.jeesite.modules.sys.service.support.EmployeeServiceSupport;
|
||||
import com.jeesite.modules.sys.service.support.LogServiceSupport;
|
||||
import com.jeesite.modules.sys.service.support.OfficeServiceSupport;
|
||||
import com.jeesite.modules.sys.service.support.PostServiceSupport;
|
||||
|
||||
/**
|
||||
* 系统核心实现类
|
||||
* @author ThinkGem
|
||||
* @version 2018-10-13
|
||||
*/
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@AutoConfiguration
|
||||
@ConditionalOnBean(MyBatisFactoryBean.class)
|
||||
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
|
||||
public class SysAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
@@ -76,4 +66,10 @@ public class SysAutoConfiguration {
|
||||
return new PostServiceSupport();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public MsgInnerService msgInnerService(){
|
||||
return new MsgInnerService();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -372,6 +372,7 @@ public class FormFilter extends org.apache.shiro.web.filter.authc.FormAuthentica
|
||||
}
|
||||
|
||||
data.put("result", "login");
|
||||
data.put("demoMode", Global.isDemoMode());
|
||||
return data;
|
||||
}
|
||||
|
||||
@@ -423,6 +424,7 @@ public class FormFilter extends org.apache.shiro.web.filter.authc.FormAuthentica
|
||||
}
|
||||
|
||||
data.put("result", Global.FALSE);
|
||||
data.put("demoMode", Global.isDemoMode());
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ public class AuthorizingRealm extends BaseAuthorizingRealm {
|
||||
* @return 16位salt密钥 + 40位hash密码
|
||||
*/
|
||||
@Override
|
||||
public String encryptPassword(String plainPassword) {
|
||||
public String encryptPassword(String plainPassword) {
|
||||
String plain = EncodeUtils.decodeHtml(plainPassword);
|
||||
byte[] salt = Sha1Utils.genSalt(SALT_SIZE);
|
||||
byte[] hashPassword = Sha1Utils.sha1(plain.getBytes(), salt, HASH_INTERATIONS);
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
*/
|
||||
package com.jeesite.common.utils.excel.fieldtype;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
import com.jeesite.modules.sys.entity.Area;
|
||||
import com.jeesite.modules.sys.utils.AreaUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 字段类型转换
|
||||
* @author ThinkGem
|
||||
@@ -28,7 +28,7 @@ public class AreaType implements FieldType {
|
||||
* 获取对象值(导入)
|
||||
*/
|
||||
@Override
|
||||
public Object getValue(String val) {
|
||||
public Object getValue(String val) {
|
||||
for (Area e : list){
|
||||
if (StringUtils.trimToEmpty(val).equals(e.getAreaName())){
|
||||
return e;
|
||||
|
||||
@@ -28,7 +28,7 @@ public class OfficeType implements FieldType {
|
||||
* 获取对象值(导入)
|
||||
*/
|
||||
@Override
|
||||
public Object getValue(String val) {
|
||||
public Object getValue(String val) {
|
||||
for (Office e : list){
|
||||
if (StringUtils.trimToEmpty(val).equals(e.getOfficeName())){
|
||||
return e;
|
||||
@@ -41,7 +41,7 @@ public class OfficeType implements FieldType {
|
||||
* 设置对象值(导出)
|
||||
*/
|
||||
@Override
|
||||
public String setValue(Object val) {
|
||||
public String setValue(Object val) {
|
||||
if (val != null && ((Office)val).getOfficeName() != null){
|
||||
return ((Office)val).getOfficeName();
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ public class PostListType implements FieldType {
|
||||
* 获取对象值(导入)
|
||||
*/
|
||||
@Override
|
||||
public Object getValue(String val) {
|
||||
public Object getValue(String val) {
|
||||
List<String> list = new ArrayList<String>();
|
||||
for (String s : StringUtils.split(val, ",")) {
|
||||
for (Post e : postList) {
|
||||
@@ -48,7 +48,7 @@ public class PostListType implements FieldType {
|
||||
* 设置对象值(导出)
|
||||
*/
|
||||
@Override
|
||||
public String setValue(Object val) {
|
||||
public String setValue(Object val) {
|
||||
if (val != null) {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Post> postList = (List<Post>) val;
|
||||
|
||||
@@ -32,7 +32,7 @@ public class RoleListType implements FieldType {
|
||||
* 获取对象值(导入)
|
||||
*/
|
||||
@Override
|
||||
public Object getValue(String val) {
|
||||
public Object getValue(String val) {
|
||||
List<String> list = new ArrayList<String>();
|
||||
for (String s : StringUtils.split(val, ",")) {
|
||||
for (Role e : roleList) {
|
||||
@@ -48,7 +48,7 @@ public class RoleListType implements FieldType {
|
||||
* 设置对象值(导出)
|
||||
*/
|
||||
@Override
|
||||
public String setValue(Object val) {
|
||||
public String setValue(Object val) {
|
||||
if (val != null) {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Role> roleList = (List<Role>) val;
|
||||
|
||||
@@ -18,6 +18,7 @@ import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSource
|
||||
import org.apache.shiro.web.filter.InvalidRequestFilter;
|
||||
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -52,6 +53,7 @@ import com.jeesite.common.shiro.web.WebSecurityManager;
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
|
||||
public class ShiroConfig {
|
||||
|
||||
/**
|
||||
|
||||
@@ -10,7 +10,7 @@ import org.springframework.web.servlet.config.annotation.DefaultServletHandlerCo
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
/**
|
||||
* 是否启用默认 Servlet 映射(启用后可访问 webapp 下的静态资源访问)
|
||||
* 是否启用默认 Servlet 映射(启用后可访问 webapp 下的静态资源)
|
||||
* @author ThinkGem
|
||||
* @version 2022年4月18日
|
||||
*/
|
||||
|
||||
@@ -7,6 +7,7 @@ package com.jeesite.modules.msg.dao;
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.msg.entity.MsgInner;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
|
||||
/**
|
||||
* 内部消息DAO接口
|
||||
@@ -14,6 +15,7 @@ import com.jeesite.modules.msg.entity.MsgInner;
|
||||
* @version 2019-03-12
|
||||
*/
|
||||
@MyBatisDao
|
||||
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
|
||||
public interface MsgInnerDao extends CrudDao<MsgInner> {
|
||||
|
||||
}
|
||||
@@ -7,6 +7,7 @@ package com.jeesite.modules.msg.dao;
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.msg.entity.MsgInnerRecord;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
|
||||
/**
|
||||
* 内部消息发送记录表DAO接口
|
||||
@@ -14,11 +15,12 @@ import com.jeesite.modules.msg.entity.MsgInnerRecord;
|
||||
* @version 2019-03-12
|
||||
*/
|
||||
@MyBatisDao
|
||||
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
|
||||
public interface MsgInnerRecordDao extends CrudDao<MsgInnerRecord> {
|
||||
|
||||
/**
|
||||
* 根据消息编号和接受者用户名更新读取状态
|
||||
*/
|
||||
public long updateReadStatus(MsgInnerRecord msgInnerRecord);
|
||||
long updateReadStatus(MsgInnerRecord msgInnerRecord);
|
||||
|
||||
}
|
||||
@@ -23,7 +23,6 @@ import com.jeesite.modules.sys.entity.User;
|
||||
import com.jeesite.modules.sys.service.EmpUserService;
|
||||
import io.netty.util.concurrent.DefaultThreadFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Date;
|
||||
@@ -38,7 +37,6 @@ import java.util.concurrent.TimeUnit;
|
||||
* @author ThinkGem
|
||||
* @version 2019-03-12
|
||||
*/
|
||||
@Service
|
||||
public class MsgInnerService extends CrudService<MsgInnerDao, MsgInner> {
|
||||
|
||||
@Autowired
|
||||
@@ -62,8 +60,7 @@ public class MsgInnerService extends CrudService<MsgInnerDao, MsgInner> {
|
||||
|
||||
/**
|
||||
* 查询分页数据
|
||||
* @param msgInner 查询条件
|
||||
* @param msgInner.page 分页对象
|
||||
* @param msgInner 查询条件;.page 分页对象
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@@ -95,7 +92,8 @@ public class MsgInnerService extends CrudService<MsgInnerDao, MsgInner> {
|
||||
}
|
||||
}
|
||||
msgInner.setSendDate(new Date());
|
||||
msgInner.setIsAttac(StringUtils.isNotBlank(ServletUtils.getParameter("msgInner_file"))?Global.YES:Global.NO);
|
||||
msgInner.setIsAttac(msgInner.getDataMap() != null && StringUtils.isNotBlank((String)msgInner.getDataMap().get("msgInner_file"))
|
||||
|| StringUtils.isNotBlank(ServletUtils.getParameter("msgInner_file")) ? Global.YES : Global.NO);
|
||||
super.save(msgInner);
|
||||
// 保存上传附件
|
||||
FileUploadUtils.saveFileUpload(msgInner, msgInner.getId(), "msgInner_file");
|
||||
@@ -190,7 +188,7 @@ public class MsgInnerService extends CrudService<MsgInnerDao, MsgInner> {
|
||||
if (Global.TRUE.equals(Global.getProperty("msg.realtime.enabled"))){
|
||||
msgPushThreadPool.submit(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
public void run() {
|
||||
try{
|
||||
MsgPushUtils.getMsgPushTask().execute();
|
||||
}catch(Exception ex){
|
||||
|
||||
@@ -9,6 +9,7 @@ import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@@ -33,6 +34,7 @@ import com.jeesite.modules.msg.service.MsgInnerService;
|
||||
*/
|
||||
@Controller
|
||||
@RequestMapping(value = "${adminPath}/msg/msgInner")
|
||||
@ConditionalOnProperty(name={"user.enabled","web.core.enabled"}, havingValue="true", matchIfMissing=true)
|
||||
public class MsgInnerController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -7,6 +7,7 @@ package com.jeesite.modules.sys.dao;
|
||||
import com.jeesite.common.dao.TreeDao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.Area;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
|
||||
/**
|
||||
* 行政区划DAO接口
|
||||
@@ -14,6 +15,7 @@ import com.jeesite.modules.sys.entity.Area;
|
||||
* @version 2017-03-22
|
||||
*/
|
||||
@MyBatisDao
|
||||
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
|
||||
public interface AreaDao extends TreeDao<Area> {
|
||||
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ package com.jeesite.modules.sys.dao;
|
||||
import com.jeesite.common.dao.TreeDao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.Company;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
|
||||
/**
|
||||
* 公司管理DAO接口
|
||||
@@ -14,6 +15,7 @@ import com.jeesite.modules.sys.entity.Company;
|
||||
* @version 2017-03-12
|
||||
*/
|
||||
@MyBatisDao
|
||||
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
|
||||
public interface CompanyDao extends TreeDao<Company> {
|
||||
|
||||
}
|
||||
@@ -7,6 +7,7 @@ package com.jeesite.modules.sys.dao;
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.CompanyOffice;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
|
||||
/**
|
||||
* 公司机构DAO接口
|
||||
@@ -14,6 +15,7 @@ import com.jeesite.modules.sys.entity.CompanyOffice;
|
||||
* @version 2017-03-23
|
||||
*/
|
||||
@MyBatisDao
|
||||
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
|
||||
public interface CompanyOfficeDao extends CrudDao<CompanyOffice> {
|
||||
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import java.util.List;
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.EmpUser;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
|
||||
/**
|
||||
* 员工管理DAO接口
|
||||
@@ -16,26 +17,27 @@ import com.jeesite.modules.sys.entity.EmpUser;
|
||||
* @version 2017-03-25
|
||||
*/
|
||||
@MyBatisDao
|
||||
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
|
||||
public interface EmpUserDao extends CrudDao<EmpUser> {
|
||||
|
||||
/**
|
||||
* 查询全部用户,仅返回基本信息
|
||||
*/
|
||||
public List<EmpUser> findUserList(EmpUser empUser);
|
||||
List<EmpUser> findUserList(EmpUser empUser);
|
||||
|
||||
/**
|
||||
* 根据部门编码查询用户,仅返回基本信息
|
||||
*/
|
||||
public List<EmpUser> findUserListByOfficeCodes(EmpUser empUser);
|
||||
List<EmpUser> findUserListByOfficeCodes(EmpUser empUser);
|
||||
|
||||
/**
|
||||
* 根据角色编码查询用户,仅返回基本信息
|
||||
*/
|
||||
public List<EmpUser> findUserListByRoleCodes(EmpUser empUser);
|
||||
List<EmpUser> findUserListByRoleCodes(EmpUser empUser);
|
||||
|
||||
/**
|
||||
* 根据岗位编码查询用户,仅返回基本信息
|
||||
*/
|
||||
public List<EmpUser> findUserListByPostCodes(EmpUser empUser);
|
||||
List<EmpUser> findUserListByPostCodes(EmpUser empUser);
|
||||
|
||||
}
|
||||
@@ -7,6 +7,7 @@ package com.jeesite.modules.sys.dao;
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.Employee;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
|
||||
/**
|
||||
* 员工管理DAO接口
|
||||
@@ -16,6 +17,7 @@ import com.jeesite.modules.sys.entity.Employee;
|
||||
* 但是,在 4.2.0+ 版本中,新增了 userTypeMap 指定 service,所以无需设置 entity 类型。
|
||||
*/
|
||||
@MyBatisDao(entity = Employee.class)
|
||||
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
|
||||
public interface EmployeeDao extends CrudDao<Employee> {
|
||||
|
||||
}
|
||||
@@ -7,6 +7,7 @@ package com.jeesite.modules.sys.dao;
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.EmployeeOffice;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
|
||||
/**
|
||||
* 员工附属机构关系表DAO接口
|
||||
@@ -14,6 +15,7 @@ import com.jeesite.modules.sys.entity.EmployeeOffice;
|
||||
* @version 2019-04-29
|
||||
*/
|
||||
@MyBatisDao
|
||||
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
|
||||
public interface EmployeeOfficeDao extends CrudDao<EmployeeOffice> {
|
||||
|
||||
}
|
||||
@@ -7,6 +7,7 @@ package com.jeesite.modules.sys.dao;
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.EmployeePost;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
|
||||
/**
|
||||
* 员工岗位DAO接口
|
||||
@@ -14,6 +15,7 @@ import com.jeesite.modules.sys.entity.EmployeePost;
|
||||
* @version 2017-03-25
|
||||
*/
|
||||
@MyBatisDao
|
||||
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
|
||||
public interface EmployeePostDao extends CrudDao<EmployeePost> {
|
||||
|
||||
}
|
||||
@@ -7,6 +7,7 @@ package com.jeesite.modules.sys.dao;
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.Log;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
|
||||
/**
|
||||
* 日志DAO接口
|
||||
@@ -14,6 +15,7 @@ import com.jeesite.modules.sys.entity.Log;
|
||||
* @version 2017-03-19
|
||||
*/
|
||||
@MyBatisDao
|
||||
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
|
||||
public interface LogDao extends CrudDao<Log> {
|
||||
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ package com.jeesite.modules.sys.dao;
|
||||
import com.jeesite.common.dao.TreeDao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.Office;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
|
||||
/**
|
||||
* 组织机构DAO接口
|
||||
@@ -14,6 +15,7 @@ import com.jeesite.modules.sys.entity.Office;
|
||||
* @version 2017-03-23
|
||||
*/
|
||||
@MyBatisDao
|
||||
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
|
||||
public interface OfficeDao extends TreeDao<Office> {
|
||||
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ package com.jeesite.modules.sys.dao;
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.Post;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
|
||||
/**
|
||||
* 岗位管理DAO接口
|
||||
@@ -14,6 +15,7 @@ import com.jeesite.modules.sys.entity.Post;
|
||||
* @version 2017-03-25
|
||||
*/
|
||||
@MyBatisDao
|
||||
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
|
||||
public interface PostDao extends CrudDao<Post> {
|
||||
|
||||
}
|
||||
@@ -112,9 +112,6 @@ public class InitCoreData extends BaseInitDataTests {
|
||||
*/
|
||||
public void initConfig() throws Exception{
|
||||
// clearTable(Config.class);
|
||||
if (!checkTable(Config.class)) {
|
||||
return;
|
||||
}
|
||||
initExcelData(Config.class, new MethodCallback() {
|
||||
@Override
|
||||
public Object execute(Object... params) {
|
||||
@@ -138,9 +135,6 @@ public class InitCoreData extends BaseInitDataTests {
|
||||
*/
|
||||
public void initModule() throws Exception{
|
||||
// clearTable(Module.class);
|
||||
if (!checkTable(Module.class)) {
|
||||
return;
|
||||
}
|
||||
initExcelData(Module.class, new MethodCallback() {
|
||||
@Override
|
||||
public Object execute(Object... params) {
|
||||
@@ -364,7 +358,7 @@ public class InitCoreData extends BaseInitDataTests {
|
||||
entity.setUserRoleString(val);
|
||||
return true;
|
||||
}else if ("employee.employeePosts".equals(header)){
|
||||
entity.getEmployee().setEmployeePosts(new String[]{val});
|
||||
entity.getEmployee().setEmployeePosts(val);
|
||||
return true;
|
||||
}
|
||||
}else if("save".equals(action)){
|
||||
@@ -381,13 +375,13 @@ public class InitCoreData extends BaseInitDataTests {
|
||||
});
|
||||
}
|
||||
|
||||
@Autowired
|
||||
@Autowired(required = false)
|
||||
private JobDao jobDao; // 默认情况下job是关闭状态,需要注入jobDao
|
||||
/**
|
||||
* 初始化消息推送服务
|
||||
*/
|
||||
public void initJob(){
|
||||
if (!checkTable(JobEntity.class)) {
|
||||
if (jobDao == null || !checkTable(JobEntity.class)) {
|
||||
return;
|
||||
}
|
||||
JobEntity job = new JobEntity(MsgLocalPushTask.class.getSimpleName(), "SYSTEM");
|
||||
|
||||
Binary file not shown.
@@ -6,18 +6,17 @@ package com.jeesite.modules.sys.entity;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.Pattern;
|
||||
import javax.validation.constraints.Size;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import javax.validation.constraints.Size;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
import com.jeesite.common.collect.ListUtils;
|
||||
import com.jeesite.common.entity.BaseEntity;
|
||||
import com.jeesite.common.entity.DataEntity;
|
||||
import com.jeesite.common.entity.Extend;
|
||||
import com.jeesite.common.entity.TreeEntity;
|
||||
import com.jeesite.common.mapper.JsonMapper;
|
||||
import com.jeesite.common.mybatis.annotation.Column;
|
||||
import com.jeesite.common.mybatis.annotation.JoinTable;
|
||||
import com.jeesite.common.mybatis.annotation.JoinTable.Type;
|
||||
@@ -138,8 +137,8 @@ public class Company extends TreeEntity<Company> {
|
||||
return companyOfficeList;
|
||||
}
|
||||
|
||||
public void setCompanyOfficeListJson(String jsonString) {
|
||||
List<String> list = JsonMapper.fromJson(jsonString, List.class);
|
||||
public void setOfficeCodes(String officeCodes) {
|
||||
String[] list = StringUtils.split(officeCodes, ",");
|
||||
if (list != null){
|
||||
for (String val : list){
|
||||
if (StringUtils.isNotBlank(val)){
|
||||
|
||||
@@ -146,13 +146,14 @@ public class Employee extends DataEntity<Employee> {
|
||||
this.employeePostList = employeePostList;
|
||||
}
|
||||
|
||||
public String[] getEmployeePosts() {
|
||||
public String getEmployeePosts() {
|
||||
List<String> list = ListUtils.extractToList(employeePostList, "postCode");
|
||||
return list.toArray(new String[list.size()]);
|
||||
return StringUtils.join(list, ",");
|
||||
}
|
||||
|
||||
public void setEmployeePosts(String[] employeePosts) {
|
||||
for (String val : employeePosts){
|
||||
public void setEmployeePosts(String employeePosts) {
|
||||
String[] list = StringUtils.split(employeePosts, ",");
|
||||
for (String val : list){
|
||||
if (StringUtils.isNotBlank(val)){
|
||||
EmployeePost e = new EmployeePost();
|
||||
e.setPostCode(val);
|
||||
|
||||
@@ -233,7 +233,7 @@ public class Log extends DataEntity<Log> {
|
||||
if (executeTime == null) {
|
||||
executeTime = 0L;
|
||||
}
|
||||
return TimeUtils.formatDateAgo(executeTime);
|
||||
return TimeUtils.formatTime(executeTime);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -288,7 +288,7 @@ public class Log extends DataEntity<Log> {
|
||||
public Date getCreateDate() {
|
||||
return super.getCreateDate();
|
||||
}
|
||||
|
||||
|
||||
// @Override
|
||||
// public String toString() {
|
||||
// return ReflectionToStringBuilder.toString(this);
|
||||
|
||||
@@ -99,7 +99,7 @@ public class Office extends TreeEntity<Office> {
|
||||
}
|
||||
|
||||
@NotBlank(message="机构代码不能为空")
|
||||
@Pattern(regexp="[a-zA-Z0-9_]{0,30}", message="编码长度不能大于 30 个字符,并且只能包含字母、数字、下划线")
|
||||
@Pattern(regexp="[a-zA-Z0-9_]{0,30}", message="代码长度不能大于 30 个字符,并且只能包含字母、数字、下划线")
|
||||
public String getViewCode() {
|
||||
return viewCode;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ package com.jeesite.modules.sys.entity;
|
||||
|
||||
import javax.validation.constraints.Size;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.Pattern;
|
||||
|
||||
import com.jeesite.common.entity.BaseEntity;
|
||||
import com.jeesite.common.entity.DataEntity;
|
||||
@@ -17,6 +18,7 @@ import com.jeesite.common.mybatis.mapper.query.QueryType;
|
||||
@Column(includeEntity=BaseEntity.class),
|
||||
@Column(includeEntity=DataEntity.class),
|
||||
@Column(name="post_code", attrName="postCode", label="岗位编码", isPK=true),
|
||||
@Column(name="view_code", attrName="viewCode", label="岗位代码"),
|
||||
@Column(name="post_name", attrName="postName", label="岗位名称"),
|
||||
@Column(name="post_type", attrName="postType", label="岗位分类", comment="岗位分类(高管、中层、基层)"),
|
||||
@Column(name="post_sort", attrName="postSort", label="岗位排序", comment="岗位排序(升序)"),
|
||||
@@ -26,6 +28,7 @@ public class Post extends DataEntity<Post> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private String postCode; // 岗位编码
|
||||
private String viewCode; // 岗位代码(作为显示用,多租户内唯一)
|
||||
private String postName; // 岗位名称
|
||||
private String postType; // 岗位分类(高管、中层、基层)
|
||||
private Integer postSort; // 岗位排序(升序)
|
||||
@@ -48,6 +51,16 @@ public class Post extends DataEntity<Post> {
|
||||
this.postCode = postCode;
|
||||
}
|
||||
|
||||
@NotBlank(message="岗位代码不能为空")
|
||||
@Pattern(regexp="[a-zA-Z0-9_]{0,30}", message="代码长度不能大于 30 个字符,并且只能包含字母、数字、下划线")
|
||||
public String getViewCode() {
|
||||
return viewCode;
|
||||
}
|
||||
|
||||
public void setViewCode(String viewCode) {
|
||||
this.viewCode = viewCode;
|
||||
}
|
||||
|
||||
@NotBlank(message="岗位名称不能为空")
|
||||
@Size(min=0, max=100, message="岗位名称长度不能超过 100 个字符")
|
||||
public String getPostName() {
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
*/
|
||||
package com.jeesite.modules.sys.interceptor;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
@@ -16,7 +14,6 @@ import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import com.jeesite.common.idgen.IdGen;
|
||||
import com.jeesite.common.lang.ByteUtils;
|
||||
import com.jeesite.common.lang.DateUtils;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
import com.jeesite.common.lang.TimeUtils;
|
||||
import com.jeesite.common.network.IpUtils;
|
||||
@@ -34,32 +31,32 @@ public class LogInterceptor extends BaseService implements HandlerInterceptor {
|
||||
private static final String TRACE_ID = "TRACE_ID";
|
||||
private static final ThreadLocal<Long> startTimeThreadLocal =
|
||||
new NamedThreadLocal<Long>("LogInterceptor StartTime");
|
||||
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
|
||||
Object handler) throws Exception {
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
|
||||
Object handler) throws Exception {
|
||||
if (StringUtils.isBlank(MDC.get(TRACE_ID))) {
|
||||
MDC.put(TRACE_ID, IdGen.nextId());
|
||||
}
|
||||
long beginTime = System.currentTimeMillis();// 1、开始时间
|
||||
startTimeThreadLocal.set(beginTime); // 线程绑定变量(该数据只有当前请求的线程可见)
|
||||
MDC.put(TRACE_ID, IdGen.nextId());
|
||||
}
|
||||
long beginTime = System.currentTimeMillis();// 1、开始时间
|
||||
startTimeThreadLocal.set(beginTime); // 线程绑定变量(该数据只有当前请求的线程可见)
|
||||
if (logger.isDebugEnabled()){
|
||||
logger.debug("请求开始 URI: {}, IP: {}", request.getRequestURI(), IpUtils.getRemoteAddr(request));
|
||||
logger.debug("请求开始 URI: {}, IP: {}", request.getRequestURI(), IpUtils.getRemoteAddr(request));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
|
||||
ModelAndView modelAndView) throws Exception {
|
||||
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
|
||||
ModelAndView modelAndView) throws Exception {
|
||||
if (modelAndView != null && logger.isDebugEnabled()){
|
||||
logger.debug("ViewName: " + modelAndView.getViewName() + " <<< " + request.getRequestURI() + " >>> " + handler);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
|
||||
Object handler, Exception ex) throws Exception {
|
||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
|
||||
Object handler, Exception ex) throws Exception {
|
||||
long endTime = System.currentTimeMillis(); // 2、结束时间
|
||||
long startTime = 0; // 得到线程绑定的局部变量(开始时间)
|
||||
if (startTimeThreadLocal != null){
|
||||
@@ -73,16 +70,16 @@ public class LogInterceptor extends BaseService implements HandlerInterceptor {
|
||||
startTime = endTime + 1000; // 得到 -1000 方便统计
|
||||
}
|
||||
long executeTime = endTime - startTime; // 3、获取执行时间
|
||||
|
||||
|
||||
// 保存日志
|
||||
LogUtils.saveLog(UserUtils.getUser(), request, handler, ex, null, null, executeTime);
|
||||
|
||||
|
||||
// 打印JVM信息。
|
||||
if (logger.isInfoEnabled()){
|
||||
Runtime runtime = Runtime.getRuntime();
|
||||
long totalMemory = runtime.totalMemory();
|
||||
logger.info("请求完成 URI: {}, 用时: {}, 总内存: {}, 剩余: {}", request.getRequestURI(),
|
||||
TimeUtils.formatDateAgo(executeTime), ByteUtils.formatByteSize(totalMemory),
|
||||
logger.info("请求完成 URI: {}, 用时: {}, 总内存: {}, 剩余: {}", request.getRequestURI(),
|
||||
TimeUtils.formatTime(executeTime), ByteUtils.formatByteSize(totalMemory),
|
||||
ByteUtils.formatByteSize(totalMemory-(totalMemory-runtime.freeMemory())));
|
||||
}
|
||||
MDC.remove(TRACE_ID);
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
*/
|
||||
package com.jeesite.modules.sys.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.jeesite.common.service.api.TreeServiceApi;
|
||||
import com.jeesite.modules.sys.entity.Area;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 行政区划Service
|
||||
* @author ThinkGem
|
||||
@@ -20,24 +20,24 @@ public interface AreaService extends TreeServiceApi<Area> {
|
||||
* 获取区划
|
||||
*/
|
||||
@Override
|
||||
public Area get(Area area);
|
||||
Area get(Area area);
|
||||
|
||||
/**
|
||||
* 查询区划
|
||||
*/
|
||||
@Override
|
||||
public List<Area> findList(Area area);
|
||||
List<Area> findList(Area area);
|
||||
|
||||
/**
|
||||
* 保存区划
|
||||
*/
|
||||
@Override
|
||||
public void save(Area area);
|
||||
void save(Area area);
|
||||
|
||||
/**
|
||||
* 删除区划
|
||||
*/
|
||||
@Override
|
||||
public void delete(Area area);
|
||||
void delete(Area area);
|
||||
|
||||
}
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
*/
|
||||
package com.jeesite.modules.sys.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.jeesite.common.service.api.TreeServiceApi;
|
||||
import com.jeesite.modules.sys.entity.Company;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 公司管理Service
|
||||
* @author ThinkGem
|
||||
@@ -20,36 +20,36 @@ public interface CompanyService extends TreeServiceApi<Company> {
|
||||
* 获取单条数据
|
||||
*/
|
||||
@Override
|
||||
public Company get(Company company);
|
||||
Company get(Company company);
|
||||
|
||||
/**
|
||||
* 添加数据权限过滤条件
|
||||
*/
|
||||
@Override
|
||||
public void addDataScopeFilter(Company company, String ctrlPermi);
|
||||
void addDataScopeFilter(Company company, String ctrlPermi);
|
||||
|
||||
/**
|
||||
* 查询公司列表
|
||||
*/
|
||||
@Override
|
||||
public List<Company> findList(Company company);
|
||||
List<Company> findList(Company company);
|
||||
|
||||
/**
|
||||
* 保存公司
|
||||
*/
|
||||
@Override
|
||||
public void save(Company company);
|
||||
void save(Company company);
|
||||
|
||||
/**
|
||||
* 删除公司
|
||||
*/
|
||||
@Override
|
||||
public void delete(Company company);
|
||||
void delete(Company company);
|
||||
|
||||
/**
|
||||
* 停用当前节点
|
||||
*/
|
||||
@Override
|
||||
public void updateStatus(Company company);
|
||||
void updateStatus(Company company);
|
||||
|
||||
}
|
||||
@@ -4,13 +4,12 @@
|
||||
*/
|
||||
package com.jeesite.modules.sys.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import com.jeesite.common.entity.Page;
|
||||
import com.jeesite.common.service.api.CrudServiceApi;
|
||||
import com.jeesite.modules.sys.entity.EmpUser;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 员工管理Service
|
||||
@@ -23,7 +22,7 @@ public interface EmpUserService extends CrudServiceApi<EmpUser> {
|
||||
* 获取单条数据
|
||||
*/
|
||||
@Override
|
||||
public EmpUser get(EmpUser empUser);
|
||||
EmpUser get(EmpUser empUser);
|
||||
|
||||
/**
|
||||
* 添加数据权限过滤条件
|
||||
@@ -31,57 +30,57 @@ public interface EmpUserService extends CrudServiceApi<EmpUser> {
|
||||
* @param ctrlPermi 控制权限类型(拥有的数据权限:DataScope.CTRL_PERMI_HAVE、可管理的数据权限:DataScope.CTRL_PERMI_HAVE)
|
||||
*/
|
||||
@Override
|
||||
public void addDataScopeFilter(EmpUser empUser, String ctrlPermi);
|
||||
void addDataScopeFilter(EmpUser empUser, String ctrlPermi);
|
||||
|
||||
/**
|
||||
* 分页查询数据
|
||||
*/
|
||||
@Override
|
||||
public Page<EmpUser> findPage(EmpUser empUser);
|
||||
Page<EmpUser> findPage(EmpUser empUser);
|
||||
|
||||
/**
|
||||
* 查询全部用户,仅返回基本信息
|
||||
*/
|
||||
public List<EmpUser> findUserList(EmpUser empUser);
|
||||
List<EmpUser> findUserList(EmpUser empUser);
|
||||
|
||||
/**
|
||||
* 根据部门编码查询用户,仅返回基本信息
|
||||
*/
|
||||
public List<EmpUser> findUserListByOfficeCodes(EmpUser empUser);
|
||||
List<EmpUser> findUserListByOfficeCodes(EmpUser empUser);
|
||||
|
||||
/**
|
||||
* 根据角色编码查询用户,仅返回基本信息
|
||||
*/
|
||||
public List<EmpUser> findUserListByRoleCodes(EmpUser empUser);
|
||||
List<EmpUser> findUserListByRoleCodes(EmpUser empUser);
|
||||
|
||||
/**
|
||||
* 根据岗位编码查询用户,仅返回基本信息
|
||||
*/
|
||||
public List<EmpUser> findUserListByPostCodes(EmpUser empUser);
|
||||
List<EmpUser> findUserListByPostCodes(EmpUser empUser);
|
||||
|
||||
/**
|
||||
* 保存用户员工
|
||||
*/
|
||||
@Override
|
||||
public void save(EmpUser user);
|
||||
void save(EmpUser user);
|
||||
|
||||
/**
|
||||
* 导入用户数据
|
||||
* @param file 导入的用户数据文件
|
||||
* @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
|
||||
*/
|
||||
public String importData(MultipartFile file, Boolean isUpdateSupport);
|
||||
String importData(MultipartFile file, Boolean isUpdateSupport);
|
||||
|
||||
/**
|
||||
* 更新状态
|
||||
*/
|
||||
@Override
|
||||
public void updateStatus(EmpUser empUser);
|
||||
void updateStatus(EmpUser empUser);
|
||||
|
||||
/**
|
||||
* 删除用户
|
||||
*/
|
||||
@Override
|
||||
public void delete(EmpUser empUser);
|
||||
void delete(EmpUser empUser);
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user