Compare commits

...

76 Commits

Author SHA1 Message Date
thinkgem
c9dd006597 如果 Tomcat 下部署多个项目的时候 logPath 会出现项目之间串用问题,所以启用 customLogPath 名字 2021-04-15 18:57:36 +08:00
thinkgem
3a770f2818 完善示例 2021-04-14 19:49:19 +08:00
thinkgem
4e16ddc6b1 增加 sessionIdCookieSameSite 参数 2021-04-13 00:09:10 +08:00
thinkgem
8ecff6b07f 无关紧要 2021-04-13 00:08:45 +08:00
thinkgem
de0d6f72e1 代码生成erm模板输出sql路径更正 2021-04-13 00:07:22 +08:00
thinkgem
ab96f88dc4 启动流程时设置任务等级,第一个节点完成后,从已办里可以看到的任务等级;如果未选择自动完成第一个节点,则设置下一步任务信息,如:处理人,任务等级;打开业务表单时,自动默认当前任务的等级,方便后续任务继承这个任务等级; 2021-04-09 10:50:22 +08:00
thinkgem
a19f76788f 支持 staticPrefix 不自带 ctxPath 2021-04-04 23:46:20 +08:00
thinkgem
b4c7f49589 Cloud下代码生成模板完善 2021-03-29 21:11:58 +08:00
thinkgem
708acb0817 Nacos unicode problem 2021-03-26 12:08:48 +08:00
thinkgem
8b629fe0f1 新增js.window方法,替代top.window 2021-03-22 20:16:39 +08:00
thinkgem
b2a0d0811b 明确插件版本号 2021-03-16 15:41:04 +08:00
thinkgem
383f81a84b 跨域配置 accessControlAllowOrigin 支持多域名、模糊匹配功能;增加 sessionIdCookieSecure 参数配置 2021-03-15 10:58:35 +08:00
thinkgem
8e0ffb9591 rename bean securityManager 2021-03-08 22:07:56 +08:00
thinkgem
222b66abeb DES一个或两个key的为空验证问题 2021-03-01 13:40:14 +08:00
thinkgem
19fc483274 完善注释 2021-03-01 13:38:46 +08:00
thinkgem
6bd4204fec 避免有时候 cookie path 为空的时候无法读取。 2021-02-24 17:11:35 +08:00
thinkgem
a9f8cd778e 优化用户选择根据用户类型查询用户 2021-02-24 11:18:56 +08:00
thinkgem
a57052ba38 用户类型的 未知 字典改为 无 2021-02-24 10:38:09 +08:00
thinkgem
63111832dc Merge branch 'v4.2_dev' into master
# Conflicts:
#	parent/pom.xml
2021-02-22 11:57:00 +08:00
thinkgem
5834b92129 点击右上角【Star】收藏本软件 ^_^ 2021-02-22 11:51:50 +08:00
thinkgem
37259267a2 当启用登录后生成新的sid时,验证码失效问题。 2021-02-20 11:35:00 +08:00
thinkgem
4396fdaea4 v4.2.3 2021-02-19 21:55:41 +08:00
thinkgem
ce1c531580 新增 mybatis.jdbcTransaction 参数,支持 MyBatis 指定 JDBC 事务管理,默认 Spring 管理事务 2021-02-12 23:22:59 +08:00
thinkgem
238102bf80 完善grid使用实例 2021-02-07 18:18:03 +08:00
thinkgem
6c01728455 spring boot 2.3.8 2021-02-04 20:43:44 +08:00
thinkgem
c39a8226e5 addTabPage 增加 data-title="false" 不显示对话框标题参数;
data-layer-shade-close="false" 点击遮罩层关闭参数
2021-02-03 16:13:05 +08:00
thinkgem
0e39f391cd upgrade shiro 1.7.1、druid 1.1.22 2021-02-01 21:05:40 +08:00
卓源软件
35b96a0f3d upgrade shiro 1.7.1 2021-02-01 20:29:26 +08:00
thinkgem
f2c23b72a0 新增zTree主题,图标美化 2021-01-30 00:37:39 +08:00
thinkgem
04bef9ac2c 新增zTree主题,图标美化 2021-01-28 01:04:29 +08:00
thinkgem
ae274cd8e6 sys_file_upload extend 2021-01-25 21:49:09 +08:00
thinkgem
596c64aa56 新增 使用手机或邮箱 找回密码开关 2021-01-25 15:35:31 +08:00
thinkgem
dcbac8dea9 国际化安全审计功能 2021-01-25 15:34:53 +08:00
thinkgem
dcf2b48d31 新增 page.maxPageSize 参数 2021-01-25 15:34:36 +08:00
thinkgem
0127572420 日期选择图标美化 2021-01-23 12:17:27 +08:00
thinkgem
d5b2e37fdb 添加菜单初始化完成后的js执行事件 2021-01-22 01:05:40 +08:00
thinkgem
aa9e0b82bc 从父类统一忽略,避免通过接口获取到用户类型详细数据,增加数据安全性 2021-01-20 23:05:51 +08:00
thinkgem
94ca59e025 修改数据日志,差异化工具显示增强,人性化,通用化 2021-01-19 22:17:21 +08:00
thinkgem
b1996130e6 优化有些数据库错误不打印日志,如字段数据过长,的信息将输出日志 2021-01-19 22:16:55 +08:00
thinkgem
9dbf48c30d 员工用户对象忽略refObj的json数据返回,因为与employee重复。 2021-01-18 00:41:25 +08:00
thinkgem
9cf813dcd6 如果会话超时,则提醒用户会话超时,请重新登录的对话框。 2021-01-18 00:40:33 +08:00
thinkgem
f1c2aa1281 当用户类型为管理员的时候启用员工的首页设置 2021-01-14 23:33:48 +08:00
thinkgem
afc61f4a32 生成模板优化 2021-01-14 23:33:17 +08:00
thinkgem
b05433f0b6 增加genIdAndValid注释提示 2021-01-10 11:46:26 +08:00
thinkgem
81657cd0df remove dialog from bat 2021-01-10 11:45:46 +08:00
thinkgem
26871a85f6 只将未知异常输出到日志文件 2021-01-05 21:24:01 +08:00
thinkgem
b4d93dda93 update 2021-01-05 21:22:52 +08:00
thinkgem
06d75964db 设置显示隐藏或排序Grid列的对话增加全选/取消全选复选框 2021-01-02 09:35:33 +08:00
thinkgem
8a1268d8a8 fileupload、listselect、treeselect支持通过js.template指定readonly属性,或者通过cssClass指定disabled设置只读。 2021-01-02 09:33:17 +08:00
thinkgem
759b416297 修正ios下单选和复选框不容易选择问题 2020-12-31 11:45:00 +08:00
thinkgem
129764925c 使用boot内置tomcat无需启用spring-boot-starter-tomcat,外置war部署时启用依赖。 2020-12-27 22:38:55 +08:00
thinkgem
eb340af57c 密码策略强制修改密码的情况下修改后不能跳转到首页的问题 2020-12-23 15:35:34 +08:00
thinkgem
1ddaa7b34d Tomcat的最大POST数据限制参数实例 2020-12-22 22:07:15 +08:00
thinkgem
c7a03196a8 Merge branch 'v4.2_dev' of https://gitee.com/thinkgem/jeesite4 into
v4.2_dev

# Conflicts:
#	modules/core/src/main/java/com/jeesite/modules/sys/utils/LogUtils.java
2020-12-22 10:14:21 +08:00
thinkgem
a96991f7ea 访问日志记录,增加表单提交前后的差异数据分析 2020-12-22 10:12:35 +08:00
thinkgem
5fd34ea584 访问日志记录,增加表单提交前后的差异数据分析 2020-12-22 00:16:30 +08:00
thinkgem
7e42620f44 找回密码和注册账号的密码填写增加密码等级提醒 2020-12-21 22:47:50 +08:00
thinkgem
7409024987 点击右上角【Star】收藏本软件 ^_^ 2020-12-19 18:20:31 +08:00
thinkgem
0e919bdd0a fileupload 增加 extend 扩展字段 2020-12-18 16:55:54 +08:00
thinkgem
09a567f4d9 优化界面细节和提示 2020-12-18 16:20:47 +08:00
thinkgem
e61f7f1ecb 代码生成模板主子表服务类增加子表数据查询方法;去掉复选框必须选择一项的验证; 2020-12-10 16:22:45 +08:00
thinkgem
dc9bfdc65e 美化表单、表格、整体样式 2020-12-10 16:16:52 +08:00
thinkgem
f7cf4dc521 shiro1.7新增了非法请求过滤器,因为不支持中文URL,所以关闭NonAscii验证。 2020-12-09 19:43:26 +08:00
thinkgem
46a4a3118f 新增不连接数据库的情况下启动服务的支持 2020-12-07 22:23:29 +08:00
thinkgem
51335cffeb IdGen.nextCode支持超长数值 2020-12-07 22:19:47 +08:00
thinkgem
6c08c9a28c 增加日志追踪标识,方便对每次请求执行的日志做出分析 2020-12-07 16:26:30 +08:00
thinkgem
a98b928c3f proxyBeanMethods = false 2020-12-07 16:24:25 +08:00
thinkgem
ba55da3e71 start 4.2.3 2020-12-07 11:40:18 +08:00
thinkgem
9f8dfd53b1 隐藏 map 文件提醒 2020-12-02 12:50:49 +08:00
thinkgem
4bf31c6418 update 2020-11-26 22:24:01 +08:00
thinkgem
ade275c057 laytpl 去掉无用的 console.log() 2020-11-24 23:52:45 +08:00
thinkgem
c57bc6e6c0 分页附加信息实例 2020-11-24 15:45:13 +08:00
thinkgem
22f4b1f121 update versions 2020-11-18 18:47:37 +08:00
thinkgem
a18ee3dbab 去掉冗余字段的查询,默认使用join返回的数据 2020-11-18 10:26:35 +08:00
thinkgem
699afecc3e DateUtils增加"yyyyMMdd","yyyyMM"格式解析 2020-11-12 12:14:33 +08:00
thinkgem
fd55449efb ObjectUtils增加logger输出 2020-11-12 12:13:57 +08:00
139 changed files with 2260 additions and 503 deletions

View File

@@ -8,6 +8,7 @@
### 报错信息
```
```

View File

@@ -39,8 +39,8 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
## 技术选型
* 主框架Spring Boot 2.2、Spring Framework 5.2、Apache Shiro 1.6、J2Cache
* 持久层Apache MyBatis 3.5、Hibernate Validator 6.0、Alibaba Druid 1.1
* 主框架Spring Boot 2.3、Spring Framework 5.2、Apache Shiro 1.7、J2Cache
* 持久层Apache MyBatis 3.5、Hibernate Validator 6.1、Alibaba Druid 1.2
* 视图层Spring MVC 5.2、Beetl 3.1替换JSP、Bootstrap 3.3、AdminLTE 2.4
* 前端组件jQuery 3.4、jqGrid 4.7、layer 3.1、zTree 3.5、jquery validation
* 工作流引擎Flowable 6.5、符合 BPMN 规范、在线流程设计器、中国式工作流

View File

@@ -15,5 +15,4 @@ cd ..
call mvn clean deploy -Dmaven.test.skip=true -Pdeploy
cd bin
cmd /c msg %username% /time:0 /w "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."
pause

View File

@@ -15,5 +15,4 @@ cd ..
call mvn clean install -Dmaven.test.skip=true -Ppackage
cd bin
cmd /c msg %username% /time:0 /w "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."
pause

View File

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

View File

@@ -73,15 +73,15 @@ public class DesUtils {
String encData = "";
List firstKeyBt = null, secondKeyBt = null, thirdKeyBt = null;
int firstLength = 0, secondLength = 0, thirdLength = 0;
if (firstKey != null && firstKey != "") {
if (firstKey != null && firstKey.equals("")) {
firstKeyBt = getKeyBytes(firstKey);
firstLength = firstKeyBt.size();
}
if (secondKey != null && secondKey != "") {
if (secondKey != null && secondKey.equals("")) {
secondKeyBt = getKeyBytes(secondKey);
secondLength = secondKeyBt.size();
}
if (thirdKey != null && thirdKey != "") {
if (thirdKey != null && thirdKey.equals("")) {
thirdKeyBt = getKeyBytes(thirdKey);
thirdLength = thirdKeyBt.size();
}
@@ -90,7 +90,7 @@ public class DesUtils {
if (leng < 4) {
int[] bt = strToBt(data);
int[] encByte = null;
if (firstKey != null && firstKey != "" && secondKey != null && secondKey != "" && thirdKey != null && thirdKey != "") {
if (firstKey != null && firstKey.equals("") && secondKey != null && secondKey.equals("") && thirdKey != null && thirdKey.equals("")) {
int[] tempBt;
int x, y, z;
tempBt = bt;
@@ -105,7 +105,7 @@ public class DesUtils {
}
encByte = tempBt;
} else {
if (firstKey != null && firstKey != "" && secondKey != null && secondKey != "") {
if (firstKey != null && firstKey.equals("") && secondKey != null && secondKey.equals("")) {
int[] tempBt;
int x, y;
tempBt = bt;
@@ -117,7 +117,7 @@ public class DesUtils {
}
encByte = tempBt;
} else {
if (firstKey != null && firstKey != "") {
if (firstKey != null && firstKey.equals("")) {
int[] tempBt;
int x = 0;
tempBt = bt;
@@ -137,7 +137,7 @@ public class DesUtils {
String tempData = data.substring(i * 4 + 0, i * 4 + 4);
int[] tempByte = strToBt(tempData);
int[] encByte = null;
if (firstKey != null && firstKey != "" && secondKey != null && secondKey != "" && thirdKey != null && thirdKey != "") {
if (firstKey != null && firstKey.equals("") && secondKey != null && secondKey.equals("") && thirdKey != null && thirdKey.equals("")) {
int[] tempBt;
int x, y, z;
tempBt = tempByte;
@@ -152,7 +152,7 @@ public class DesUtils {
}
encByte = tempBt;
} else {
if (firstKey != null && firstKey != "" && secondKey != null && secondKey != "") {
if (firstKey != null && firstKey.equals("") && secondKey != null && secondKey.equals("")) {
int[] tempBt;
int x, y;
tempBt = tempByte;
@@ -164,7 +164,7 @@ public class DesUtils {
}
encByte = tempBt;
} else {
if (firstKey != null && firstKey != "") {
if (firstKey != null && firstKey.equals("")) {
int[] tempBt;
int x;
tempBt = tempByte;
@@ -181,7 +181,7 @@ public class DesUtils {
String remainderData = data.substring(iterator * 4 + 0, leng);
int[] tempByte = strToBt(remainderData);
int[] encByte = null;
if (firstKey != null && firstKey != "" && secondKey != null && secondKey != "" && thirdKey != null && thirdKey != "") {
if (firstKey != null && firstKey.equals("") && secondKey != null && secondKey.equals("") && thirdKey != null && thirdKey.equals("")) {
int[] tempBt;
int x, y, z;
tempBt = tempByte;
@@ -196,7 +196,7 @@ public class DesUtils {
}
encByte = tempBt;
} else {
if (firstKey != null && firstKey != "" && secondKey != null && secondKey != "") {
if (firstKey != null && firstKey.equals("") && secondKey != null && secondKey.equals("")) {
int[] tempBt;
int x, y;
tempBt = tempByte;
@@ -208,7 +208,7 @@ public class DesUtils {
}
encByte = tempBt;
} else {
if (firstKey != null && firstKey != "") {
if (firstKey != null && firstKey.equals("")) {
int[] tempBt;
int x;
tempBt = tempByte;
@@ -236,15 +236,15 @@ public class DesUtils {
String decStr = "";
List firstKeyBt = null, secondKeyBt = null, thirdKeyBt = null;
int firstLength = 0, secondLength = 0, thirdLength = 0;
if (firstKey != null && firstKey != "") {
if (firstKey != null && firstKey.equals("")) {
firstKeyBt = getKeyBytes(firstKey);
firstLength = firstKeyBt.size();
}
if (secondKey != null && secondKey != "") {
if (secondKey != null && secondKey.equals("")) {
secondKeyBt = getKeyBytes(secondKey);
secondLength = secondKeyBt.size();
}
if (thirdKey != null && thirdKey != "") {
if (thirdKey != null && thirdKey.equals("")) {
thirdKeyBt = getKeyBytes(thirdKey);
thirdLength = thirdKeyBt.size();
}
@@ -260,7 +260,7 @@ public class DesUtils {
intByte[j] = Integer.parseInt(strByte.substring(j, j + 1));
}
int[] decByte = null;
if (firstKey != null && firstKey != "" && secondKey != null && secondKey != "" && thirdKey != null && thirdKey != "") {
if (firstKey != null && firstKey.equals("") && secondKey != null && secondKey.equals("") && thirdKey != null && thirdKey.equals("")) {
int[] tempBt;
int x, y, z;
tempBt = intByte;
@@ -275,7 +275,7 @@ public class DesUtils {
}
decByte = tempBt;
} else {
if (firstKey != null && firstKey != "" && secondKey != null && secondKey != "") {
if (firstKey != null && firstKey.equals("") && secondKey != null && secondKey.equals("")) {
int[] tempBt;
int x, y, z;
tempBt = intByte;
@@ -287,7 +287,7 @@ public class DesUtils {
}
decByte = tempBt;
} else {
if (firstKey != null && firstKey != "") {
if (firstKey != null && firstKey.equals("")) {
int[] tempBt;
int x, y, z;
tempBt = intByte;

View File

@@ -3,6 +3,7 @@
*/
package com.jeesite.common.idgen;
import java.math.BigDecimal;
import java.security.SecureRandom;
import java.util.UUID;
@@ -79,7 +80,7 @@ public class IdGen {
prefix = str.substring(0, lastNotNumIndex);
prevNum = str.substring(lastNotNumIndex, str.length());
}
String nextNum = String.valueOf(Long.valueOf(prevNum) + 1);
String nextNum = new BigDecimal(prevNum).add(BigDecimal.ONE).toString();
str = prefix + StringUtils.leftPad(nextNum, prevNum.length(), "0");
return str;
}

View File

@@ -218,21 +218,24 @@ public class PropertiesUtils {
*/
private static Logger initLogger(){
String logPath = null;
try {
// 获取当前classes目录
logPath = ResourceUtils.getResource("/").getFile().getPath();
} catch (Exception e) {
// 取不到,取当前工作路径
logPath = System.getProperty("user.dir");
}
// 取当前日志路径下有classes目录则使用classes目录
String classesLogPath = FileUtils.path(logPath + "/WEB-INF/classes");
if (new File(classesLogPath).exists()){
logPath = classesLogPath;
}
if (StringUtils.isBlank(System.getProperty("logPath"))){
System.setProperty("logPath", FileUtils.path(logPath));
if (StringUtils.isNotBlank(System.getProperty("customLogPath"))){
// 如果 Tomcat 下部署多个项目的时候 logPath 会出现项目之间串用问题,所以启用 customLogPath 名字
logPath = System.getProperty("customLogPath");
}else{
try {
// 获取当前classes目录
logPath = ResourceUtils.getResource("/").getFile().getPath();
} catch (Exception e) {
// 取不到,取当前工作路径
logPath = System.getProperty("user.dir");
}
// 取当前日志路径下有classes目录则使用classes目录
String classesLogPath = FileUtils.path(logPath + "/WEB-INF/classes");
if (new File(classesLogPath).exists()){
logPath = classesLogPath;
}
}
System.setProperty("logPath", FileUtils.path(logPath));
return LoggerFactory.getLogger(PropertiesUtils.class);
}

View File

@@ -23,7 +23,7 @@ import com.jeesite.common.lang.StringUtils;
* @author ThinkGem
* @version 2020-10-26
*/
public class PropertyLoader extends PropertiesPropertySourceLoader implements org.springframework.boot.env.PropertySourceLoader, Ordered{
public class PropertyLoader implements org.springframework.boot.env.PropertySourceLoader, Ordered{
private static boolean isLoadJeeSitePropertySource = false;
private PropertiesPropertySourceLoader propertiesPropertySourceLoader = new PropertiesPropertySourceLoader();

View File

@@ -23,7 +23,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM/dd HH", "yyyy/MM",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM.dd HH", "yyyy.MM",
"yyyy年MM月dd日", "yyyy年MM月dd日 HH时mm分ss秒", "yyyy年MM月dd日 HH时mm分", "yyyy年MM月dd日 HH时", "yyyy年MM月",
"yyyy"};
"yyyyMMdd", "yyyyMM", "yyyy"};
/**
* 得到日期字符串 转换格式yyyy-MM-dd

View File

@@ -13,6 +13,8 @@ import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.nustaq.serialization.FSTConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.core.NamedThreadLocal;
@@ -23,6 +25,8 @@ import org.springframework.core.NamedThreadLocal;
*/
public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
private static Logger logger = LoggerFactory.getLogger(ObjectUtils.class);
/**
* 转换为 Double 类型
*/
@@ -170,7 +174,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
}
long totalTime = System.currentTimeMillis() - beginTime;
if (totalTime > 3000){
System.out.println("Serialize time: " + TimeUtils.formatDateAgo(totalTime));
logger.warn(object.getClass() + " serialize time: " + TimeUtils.formatDateAgo(totalTime));
}
return bytes;
}
@@ -196,7 +200,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
}
long totalTime = System.currentTimeMillis() - beginTime;
if (totalTime > 3000){
System.out.println("Unserialize time: " + TimeUtils.formatDateAgo(totalTime));
logger.warn(object.getClass() + " unserialize time: " + TimeUtils.formatDateAgo(totalTime));
}
return object;
}
@@ -221,7 +225,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
byte[] bytes = fstConfiguration.get().asByteArray(object);
long totalTime = System.currentTimeMillis() - beginTime;
if (totalTime > 3000){
System.out.println("Fst serialize time: " + TimeUtils.formatDateAgo(totalTime));
logger.warn(object.getClass() + " fst serialize time: " + TimeUtils.formatDateAgo(totalTime));
}
return bytes;
}
@@ -239,7 +243,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
Object object = fstConfiguration.get().asObject(bytes);
long totalTime = System.currentTimeMillis() - beginTime;
if (totalTime > 3000){
System.out.println("Fst unserialize time: " + TimeUtils.formatDateAgo(totalTime));
logger.warn(object.getClass() + " fst unserialize time: " + TimeUtils.formatDateAgo(totalTime));
}
return object;
}

View File

@@ -9,7 +9,6 @@ import javax.servlet.http.HttpServletResponse;
import com.jeesite.common.codec.EncodeUtils;
import com.jeesite.common.lang.StringUtils;
import com.jeesite.common.web.http.ServletUtils;
/**
* Cookie工具类
@@ -46,8 +45,7 @@ public class CookieUtils {
* @param uri 路径
*/
public static void setCookie(HttpServletResponse response, String name, String value, int maxAge) {
HttpServletRequest request = ServletUtils.getRequest();
setCookie(response, name, value, request != null ? request.getContextPath() : "", maxAge);
setCookie(response, name, value, "/", maxAge);
}
/**

View File

@@ -203,7 +203,9 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.box-main>.box-header .box-title .fa {color:#1890ff;}
.nav-tabs-custom>.nav-tabs>li.active {border-top-color:#3aa0ff;}
.form-control:focus,.select2-container--default.select2-container--focus .select2-selection--multiple,
.select2-container--default .select2-search--dropdown .select2-search__field {border-color:#66afe9!important;}
.select2-container--default .select2-search--dropdown .select2-search__field,
.select2-container--default.select2-container--focus .select2-selection--single,
.select2-container--default.select2-container--focus .select2-selection--multiple {border-color:#40a9ff!important;box-shadow:0 0 0 2px rgba(24,144,255,.2);}
.table thead tr, .ui-jqgrid-htable thead tr, .ui-jqgrid-hdiv, .ui-jqgrid-hbox {background-color:#f6f6f6;}
.ui-jqgrid .ui-jqgrid-htable th.ui-th-column-header, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column,
.ui-jqgrid .ui-jqgrid-labels th, .ui-jqgrid .ui-widget-content, .ui-jqgrid tr.ui-row-ltr td,

View File

@@ -208,7 +208,9 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.box-main>.box-header .box-title .fa {color:#1e5edb;}
.nav-tabs-custom>.nav-tabs>li.active {border-top-color:#1e5edb;}
.form-control:focus,.select2-container--default.select2-container--focus .select2-selection--multiple,
.select2-container--default .select2-search--dropdown .select2-search__field {border-color:#6980c3!important;}
.select2-container--default .select2-search--dropdown .select2-search__field,
.select2-container--default.select2-container--focus .select2-selection--single,
.select2-container--default.select2-container--focus .select2-selection--multiple {border-color:#40a9ff!important;box-shadow:0 0 0 2px rgba(24,144,255,.2);}
.table thead tr, .ui-jqgrid-htable thead tr, .ui-jqgrid-hdiv, .ui-jqgrid-hbox {background-color:#f6f6f6;}
.ui-jqgrid .ui-jqgrid-htable th.ui-th-column-header, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column,
.ui-jqgrid .ui-jqgrid-labels th, .ui-jqgrid .ui-widget-content, .ui-jqgrid tr.ui-row-ltr td,

View File

@@ -90,7 +90,6 @@ Tpl.pt.render = function(data, callback){
var that = this, tpl;
if(!data) return tool.error('no data');
tpl = that.cache ? that.cache(data, tool.escape) : that.parse(that.tpl, data);
console.log()
if(!callback) return tpl;
callback(tpl);
};

View File

@@ -198,7 +198,7 @@
if (!node[_disabled]) {
// Click
if (type == _click) {
if (type == _click || type == 'touchend') {
if ($(event.target).is('a')) {
return;
}

View File

@@ -6,5 +6,5 @@ a.slice(1)}function L(a,b,d,c){if(!c){if(b)a[p]("ifToggled");a[p]("ifChanged")[p
c.add(a):c.add(a.find(d))})};if(/^(check|uncheck|toggle|indeterminate|determinate|disable|enable|update|destroy)$/i.test(a))return a=a.toLowerCase(),e(this),c.each(function(){var c=h(this);"destroy"==a?M(c,"ifDestroyed"):F(c,!0,a);h.isFunction(b)&&b()});if("object"!=typeof a&&a)return this;var f=h.extend({checkedClass:l,disabledClass:s,indeterminateClass:m,checkboxClass:'icheckbox_minimal-grey',radioClass:'iradio_minimal-grey',labelHover:!0,aria:!1},a),k=f.handle,B=f.hoverClass||"hover",x=f.focusClass||"focus",w=f.activeClass||"active",y=!!f.labelHover,C=f.labelHoverClass||
"hover",r=(""+f.increaseArea).replace("%","")|0;if("checkbox"==k||k==u)d='input[type="'+k+'"]';-50>r&&(r=-50);e(this);return c.each(function(){var a=h(this);M(a);var c=this,b=c.id,e=-r+"%",d=100+2*r+"%",d={position:"absolute",top:e,left:e,display:"block",width:d,height:d,margin:0,padding:0,background:"#fff",border:0,opacity:0},e=J?{position:"absolute",visibility:"hidden"}:r?d:{position:"absolute",opacity:0},k="checkbox"==c[n]?f.checkboxClass||"icheckbox":f.radioClass||"i"+u,m=h(G+'[for="'+b+'"]').add(a.closest(G)),
A=!!f.aria,E=q+"-"+Math.random().toString(36).replace("0.",""),g='<div class="'+k+'" '+(A?'role="'+c[n]+'" ':"");m.length&&A&&m.each(function(){g+='aria-labelledby="';this.id?g+=this.id:(this.id=E,g+=E);g+='"'});g=a.wrap(g+"/>")[p]("ifCreated").parent().append(f.insert);d=h('<ins class="'+I+'"/>').css(d).appendTo(g);a.data(q,{o:f,s:a.attr("style")}).css(e);f.inheritClass&&g[v](c.className||"");f.inheritID&&b&&g.attr("id",q+"-"+b);"static"==g.css("position")&&g.css("position","relative");F(a,!0,H);
if(m.length)m.on("click.i mouseover.i mouseout.i touchbegin.i touchend.i",function(b){var d=b[n],e=h(this);if(!c[s]){if("click"==d){if(h(b.target).is("a"))return;F(a,!1,!0)}else y&&(/ut|nd/.test(d)?(g[z](B),e[z](C)):(g[v](B),e[v](C)));if(J)b.stopPropagation();else return!1}});a.on("click.i focus.i blur.i keyup.i keydown.i keypress.i",function(b){var d=b[n];b=b.keyCode;if("click"==d)return!1;if("keydown"==d&&32==b)return c[n]==u&&c[l]||(c[l]?t(a,l):D(a,l)),!1;if("keyup"==d&&c[n]==u)!c[l]&&D(a,l);else if(/us|ur/.test(d))g["blur"==
if(m.length)m.on("click.i mouseover.i mouseout.i touchbegin.i touchend.i",function(b){var d=b[n],e=h(this);if(!c[s]){if("click"==d||"touchend"==d){if(h(b.target).is("a"))return;F(a,!1,!0)}else y&&(/ut|nd/.test(d)?(g[z](B),e[z](C)):(g[v](B),e[v](C)));if(J)b.stopPropagation();else return!1}});a.on("click.i focus.i blur.i keyup.i keydown.i keypress.i",function(b){var d=b[n];b=b.keyCode;if("click"==d)return!1;if("keydown"==d&&32==b)return c[n]==u&&c[l]||(c[l]?t(a,l):D(a,l)),!1;if("keyup"==d&&c[n]==u)!c[l]&&D(a,l);else if(/us|ur/.test(d))g["blur"==
d?z:v](x)});d.on("click mousedown mouseup mouseover mouseout touchbegin.i touchend.i",function(b){var d=b[n],e=/wn|up/.test(d)?w:B;if(!c[s]){if("click"==d)F(a,!1,!0);else{if(/wn|er|in/.test(d))g[v](e);else g[z](e+" "+w);if(m.length&&y&&e==B)m[/ut|nd/.test(d)?z:v](C)}if(J)b.stopPropagation();else return!1}})})}})(window.jQuery||window.Zepto);

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 B

View File

@@ -0,0 +1,113 @@
/*-------------------------------------
zTree Style 3.4 author: Hunter.z、ThinkGem
-------------------------------------*/
.ztree * {padding:0;margin:0;font-size:13px;}
.ztree {margin:0;padding:5px;color:#333}
.ztree li{padding:0;margin:0;list-style:none;line-height:21px;text-align:left;white-space:nowrap;outline:0}
.ztree li ul{ margin:0;padding:0 0 0 18px}
.ztree li a {padding-right:3px;margin:0;cursor:pointer;height:23px;color:#333;background-color: transparent;text-decoration:none;display: inline-block;vertical-align: middle;}
.ztree li a:hover {text-decoration:underline}
.ztree li a.curSelectedNode {padding-top:0px;background-color:#e5e5e5;color:black;height:23px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
.ztree li a.curSelectedNode_Edit {padding-top:0px;background-color:#e5e5e5;color:black;height:23px;border:1px #666 solid;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
.ztree li a.tmpTargetNode_inner {padding-top:0px;background-color:#aaa;color:white;height:21px;border:1px #666 solid;
opacity:0.8;filter:alpha(opacity=80)}
.ztree li a.tmpTargetNode_prev {}
.ztree li a.tmpTargetNode_next {}
.ztree li a input.rename {height:14px;width:80px;padding:0;margin:0;
font-size:12px;border:1px #7EC4CC solid;*border:0px}
.ztree li span {line-height:23px;margin-right:2px}
.ztree li span.button {line-height:0;margin:0;width:21px;height:21px;display: inline-block;vertical-align:middle;
border:0 none;cursor: pointer;outline:none;}
.ztree li span.button.ico_loading{margin-right:2px;background:url(./img/loading.gif) no-repeat scroll 0 0 transparent;vertical-align:top;*vertical-align:middle}
ul.tmpTargetzTree {background-color:#FFE6B0;opacity:0.8;filter:alpha(opacity=80)}
span.tmpzTreeMove_arrow {width:16px;height:21px;display: inline-block;padding:0;margin:2px 0 0 1px;border:0 none;position:absolute;
background-color:transparent;background-repeat:no-repeat;background-attachment: scroll;}
ul.ztree.zTreeDragUL {margin:0;padding:0;position:absolute;width:auto;height:auto;overflow:hidden;background-color:#cfcfcf;border:1px #00B83F dotted;opacity:0.8;filter:alpha(opacity=80)}
.zTreeMask {z-index:10000;background-color:#cfcfcf;opacity:0.0;filter:alpha(opacity=0);position:absolute}
/* 树搜索相关 */
.treeSearchInput {padding:13px 0 0 20px;}
.treeSearchInput label {padding:5px 0 3px 0;font-size:13px;font-weight:normal;vertical-align:middle;}
.treeSearchInput input {width:140px;vertical-align:middle;line-height:24px;height:26px;border:1px solid #aaa;padding:0 4px;border-radius:4px;}
.treeSearchInput button {border:1px solid #aaa;vertical-align:middle;height:26px;height:26px\9;font-size:13px;background:#efefef;padding:0 8px;}
.treeShowHideButton {position:absolute;right:8px;top:-3px;font-size:12px;color:#333;z-index:3;}
.treeShowHideButton label {cursor:pointer;}
.treeExpandCollapse {float:right;margin:6px 5px;padding:5px;font-size:12px;color:#333;position:relative;z-index:2;background:#fff;}
.treeExpandCollapse a {text-decoration:none;color:#333}
.treeselect.ztree {padding:10px 20px;}
/* 字体图标风格 */
.ztree * {box-sizing:content-box;}
.ztree li li {padding-left:9px;}
.ztree li ul.line {content:"";border-left:1px dotted #aaa;top:0px;left:0px;margin-top:-2px;padding-top:2px;}
.ztree li ul {position:relative;background:none;margin-left:9px;padding-left:0;}
.ztree li ul.line {background:none;}
.ztree li .noline_open + a + ul:before {border-left:none;}
.ztree li .noline_open + a + ul li:before {border-top:none;}
.ztree li a {height:26px;padding-left:3px;}
.ztree li span {height:26px;margin-left:4px;}
.ztree li span.node_name {margin-right:6px;}
.ztree li span.button.switch,
.ztree li span.button.chk,
.ztree li a span.button,
.ztree li span.button[class$="Page"] {position:relative;width:18px;height:22px;background:none;background-position:center center !important;padding:2px 0;
display:inline-block;font:normal normal normal 15px/1 FontAwesome;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}
.ztree li span.button[class$="Page"] {width:15px;}
.ztree li a span.button[style="width:0px;height:0px;"]:before,
.ztree li a span.button[style^="background"]:before {content:"";}
.ztree li span.button.roots_docu, .ztree li span.button.center_docu, .ztree li span.button.bottom_docu {position:relative;height:24px;padding:0;}
.ztree li span.button.roots_docu:before {content:"";display:block;width:18px;height:11px;border-left:1px dotted #aaa;position:absolute;top:10px;left:9px;}
.ztree li span.button.roots_docu:after {content:"";display:block;width:9px;height:0;border-top:1px dotted #aaa;position:absolute;top:10px;left:9px;}
.ztree li span.button.center_docu:before {content:"";display:block;width:0;height:25px;border-left:1px dotted #aaa;position:absolute;top:-3px;left:9px;}
.ztree li span.button.center_docu:after {content:"";display:block;width:9px;height:0;border-top:1px dotted #aaa;position:absolute;top:10px;left:9px;}
.ztree li span.button.bottom_docu:before {content:"";display:block;width:0;height:12px;border-left:1px dotted #aaa;position:absolute;top:-3px;left:9px;}
.ztree li span.button.bottom_docu:after {content:"";display:block;width:9px;height:0;border-top:1px dotted #aaa;position:absolute;top:10px;left:9px;}
.ztree li span.button:before {display:block;line-height:20px;text-align:left;padding-left:4px;color:#666;}
.ztree li span.button.root_open:before,
.ztree li span.button.roots_open:before,
.ztree li span.button.center_open:before,
.ztree li span.button.bottom_open:before,
.ztree li span.button.noline_open:before {content:"\f147";}
.ztree li span.button.root_close:before,
.ztree li span.button.roots_close:before,
.ztree li span.button.center_close:before,
.ztree li span.button.bottom_close:before,
.ztree li span.button.noline_close:before {content:"\f196";}
.ztree li span.button.chk.checkbox_true_full:before,
.ztree li span.button.chk.checkbox_true_disable:before,
.ztree li span.button.chk.checkbox_true_full_focus:before {content:"\f046";}
.ztree li span.button.chk.checkbox_false_full:before,
.ztree li span.button.chk.checkbox_false_disable:before,
.ztree li span.button.chk.checkbox_false_full_focus:before {content:"\f096";}
.ztree li span.button.chk.checkbox_true_part:before,
.ztree li span.button.chk.checkbox_true_part_focus:before,
.ztree li span.button.chk.checkbox_false_part:before,
.ztree li span.button.chk.checkbox_false_part_focus:before {content:"\f14a";}
.ztree li span.button.chk.radio_true_full:before,
.ztree li span.button.chk.radio_true_disable:before,
.ztree li span.button.chk.radio_true_full_focus:before {content:"\f05d";}
.ztree li span.button.chk.radio_false_full:before,
.ztree li span.button.chk.radio_false_disable:before,
.ztree li span.button.chk.radio_false_full_focus:before {content:"\f10c";}
.ztree li span.button.chk.radio_true_part:before,
.ztree li span.button.chk.radio_true_part_focus:before,
.ztree li span.button.chk.radio_false_part:before,
.ztree li span.button.chk.radio_false_part_focus:before {content:"\f192";}
.ztree li span.button.ico_open:before {content:"\f115";}
.ztree li span.button.ico_close:before {content:"\f114";}
.ztree li span.button.ico_docu:before {content:"\f016";}
.ztree li span.button.add:before {content:"\f196";}
.ztree li span.button.edit:before {content:"\f044";}
.ztree li span.button.remove:before {content:"\f014";}
.ztree li span.button.firstPage:before {content:"\f100";}
.ztree li span.button.prevPage:before {content:"\f104";}
.ztree li span.button.nextPage:before {content:"\f105";}
.ztree li span.button.lastPage:before {content:"\f101";}
.ztree li span.button.chk[class$="focus"]:before {font-weight:bold;}
.ztree li span.button.chk[class$="disable"]:before {color:#aaa;}
.ztree li a.curSelectedNode, .ztree li a.tmpTargetNode_inner {height:26px;}

View File

@@ -8,23 +8,23 @@ website: http://code.google.com/p/jquerytree/
-------------------------------------*/
.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif}
.ztree * {padding:0; margin:0; font-size:13px;}
.ztree {margin:0; padding:5px; color:#333}
.ztree li{padding:0; margin:0; list-style:none; line-height:21px; text-align:left; white-space:nowrap; outline:0}
.ztree li ul{ margin:0; padding:0 0 0 18px}
.ztree li ul.line{ background:url(./img/line_conn.png) 0 0 repeat-y;}
.ztree li a {padding-right:3px; margin:0; cursor:pointer; height:21px; color:#333; background-color: transparent; text-decoration:none; display: inline-block}
.ztree li a {padding-right:3px; margin:0; cursor:pointer; height:23px; color:#333; background-color: transparent; text-decoration:none; display: inline-block; vertical-align: middle;}
.ztree li a:hover {text-decoration:underline}
.ztree li a.curSelectedNode {padding-top:0px; background-color:#e5e5e5; color:black; height:22px; -webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#e5e5e5; color:black; height:22px; border:1px #666 solid; -webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
.ztree li a.curSelectedNode {padding-top:0px; background-color:#e5e5e5; color:black; height:23px; -webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#e5e5e5; color:black; height:23px; border:1px #666 solid; -webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#aaa; color:white; height:21px; border:1px #666 solid;
opacity:0.8; filter:alpha(opacity=80)}
.ztree li a.tmpTargetNode_prev {}
.ztree li a.tmpTargetNode_next {}
.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0;
font-size:12px; border:1px #7EC4CC solid; *border:0px}
.ztree li span {line-height:21px; margin-right:2px}
.ztree li span {line-height:23px; margin-right:2px}
.ztree li span.button {line-height:0; margin:0; width:21px; height:21px; display: inline-block; vertical-align:middle;
border:0 none; cursor: pointer;outline:none;
background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
@@ -59,8 +59,8 @@ website: http://code.google.com/p/jquerytree/
.ztree li span.button.roots_close{background-position: -126px 0;}
.ztree li span.button.center_open{background-position: -105px -21px;}
.ztree li span.button.center_close{background-position: -126px -21px;}
.ztree li span.button.bottom_open{background-position: -105px -42px;}
.ztree li span.button.bottom_close{background-position: -126px -42px;}
.ztree li span.button.bottom_open{background-position: -105px -43px;}
.ztree li span.button.bottom_close{background-position: -126px -43px;}
.ztree li span.button.noline_open{background-position: -126px -84px;}
.ztree li span.button.noline_close{background-position: -105px -84px;}
.ztree li span.button.root_docu{ background:none;}

File diff suppressed because one or more lines are too long

View File

@@ -15,5 +15,4 @@ cd ..
call mvn clean deploy -Dmaven.test.skip=true -Pdeploy
cd bin
cmd /c msg %username% /time:0 /w "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."
pause

View File

@@ -15,5 +15,4 @@ cd ..
call mvn clean install -Dmaven.test.skip=true -Ppackage
cd bin
cmd /c msg %username% /time:0 /w "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."
pause

View File

@@ -11,8 +11,8 @@
</page_setting>
<category_index>0</category_index>
<zoom>1.0</zoom>
<x>317</x>
<y>2406</y>
<x>1625</x>
<y>0</y>
<default_color>
<r>128</r>
<g>128</g>
@@ -4548,229 +4548,6 @@
<schema></schema>
</table_properties>
</table>
<table>
<id>fe9991829b27dafb45a95e13b6e9dd724b3bf424</id>
<height>308</height>
<width>335</width>
<font_name>Segoe UI</font_name>
<font_size>9</font_size>
<x>3897</x>
<y>792</y>
<color>
<r>128</r>
<g>128</g>
<b>192</b>
</color>
<connections>
</connections>
<physical_name>js_sys_lang</physical_name>
<logical_name>国际化语言</logical_name>
<description></description>
<constraint></constraint>
<primary_key_name></primary_key_name>
<option></option>
<columns>
<normal_column>
<word_id>869fc70cf3a4e92e8056b40814df8e03f9f9efde</word_id>
<id>58d907ff9cf0c81b565cad158f3bec8b3758d59e</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>true</not_null>
<primary_key>true</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>
<normal_column>
<word_id>c2c68b3979b0c52109cb085c491bebb415a189b4</word_id>
<id>669456aef17849070945f58eba9269628ad31cc2</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>true</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>
<normal_column>
<word_id>2392b56eaf51ec9f6e32fe6553460d25b3da9729</word_id>
<id>1832e034e60a8176274736a921861da8f4a17b1f</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
<physical_name></physical_name>
<type>nvarchar(n)</type>
<constraint></constraint>
<default_value></default_value>
<auto_increment>false</auto_increment>
<foreign_key>false</foreign_key>
<not_null>true</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>
<normal_column>
<word_id>26c952fa648f51d2350f628195fc098f918d8149</word_id>
<id>923b79d81325f08f9ef6d6cc4302024dd0717bad</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
<physical_name></physical_name>
<type>nvarchar(n)</type>
<constraint></constraint>
<default_value></default_value>
<auto_increment>false</auto_increment>
<foreign_key>false</foreign_key>
<not_null>true</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>
<normal_column>
<word_id>26bbe2ffbcc2678b0691f0721632c3dcdabfb4ff</word_id>
<id>b3438798385ef62434d0cdef3d6d9fa7a63e313c</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>true</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>
<column_group>85024a2953cf3e3c9c1cce49b2351853ab0d125b</column_group>
</columns>
<indexes>
<inidex>
<full_text>false</full_text>
<non_unique>true</non_unique>
<name>idx_sys_lang_code</name>
<type></type>
<description></description>
<columns>
<column>
<id>1832e034e60a8176274736a921861da8f4a17b1f</id>
<desc>false</desc>
</column>
</columns>
</inidex>
<inidex>
<full_text>false</full_text>
<non_unique>true</non_unique>
<name>idx_sys_lang_type</name>
<type></type>
<description></description>
<columns>
<column>
<id>b3438798385ef62434d0cdef3d6d9fa7a63e313c</id>
<desc>false</desc>
</column>
</columns>
</inidex>
</indexes>
<complex_unique_key_list>
</complex_unique_key_list>
<table_properties>
<schema></schema>
</table_properties>
</table>
<table>
<id>dfd92f583371dc219fe0aeb5c64f4d7fc5b2db58</id>
<height>620</height>
@@ -8200,8 +7977,8 @@
</color>
<connections>
<relation>
<id>8a39f8544732bdd0c9731340ee2fe7e265b9b3cb</id>
<source>a1303ae2ba44af053708a3742aee02836c407c3d</source>
<id>34abbb77c48708f95ddab5edd1235da98a90ea5f</id>
<source>bbe68e376638ab208682d127d252c38bb6c953a5</source>
<target>3c87a1572923924d481891ca9d1a09451008cef5</target>
<source_xp>-1</source_xp>
<source_yp>-1</source_yp>
@@ -8288,7 +8065,7 @@
<normal_column>
<id>1882f53a36409270c8622486740876fcb2af9842</id>
<referenced_column>e84c40cdf5ffdb2ba4d59630d98abb5972d74795</referenced_column>
<relation>8a39f8544732bdd0c9731340ee2fe7e265b9b3cb</relation>
<relation>34abbb77c48708f95ddab5edd1235da98a90ea5f</relation>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -13794,12 +13571,12 @@
</table_properties>
</table>
<table>
<id>a1303ae2ba44af053708a3742aee02836c407c3d</id>
<height>1218</height>
<id>bbe68e376638ab208682d127d252c38bb6c953a5</id>
<height>1244</height>
<width>617</width>
<font_name>Segoe UI</font_name>
<font_size>9</font_size>
<x>2280</x>
<x>2292</x>
<y>36</y>
<color>
<r>128</r>
@@ -14387,13 +14164,13 @@
</table_properties>
</table>
<table>
<id>0e046d64a970231cfcc17e4e5c4bc281c289072f</id>
<height>360</height>
<id>8a139a0643de7dcb7489ba3a6eb8072830e2442c</id>
<height>906</height>
<width>470</width>
<font_name>Segoe UI</font_name>
<font_size>9</font_size>
<x>108</x>
<y>2412</y>
<y>2340</y>
<color>
<r>128</r>
<g>128</g>
@@ -14401,9 +14178,9 @@
</color>
<connections>
<relation>
<id>9d81b7570b3ebdcbbaeb87693137d863d319e742</id>
<source>ea4a1c367ad1a436305eb4c93d3d1f87ac140ba1</source>
<target>0e046d64a970231cfcc17e4e5c4bc281c289072f</target>
<id>b0046026a86b96d1e93facef0237f3f72c3a6460</id>
<source>d6c60af63d4b54ff24149a17b7dbef6ba492e484</source>
<target>8a139a0643de7dcb7489ba3a6eb8072830e2442c</target>
<source_xp>-1</source_xp>
<source_yp>-1</source_yp>
<target_xp>-1</target_xp>
@@ -14466,7 +14243,7 @@
<normal_column>
<id>fc44d466dd6009e48b5222d1d71e38d025194ff0</id>
<referenced_column>54b86f255d95078898534902087fb704b4265b60</referenced_column>
<relation>9d81b7570b3ebdcbbaeb87693137d863d319e742</relation>
<relation>b0046026a86b96d1e93facef0237f3f72c3a6460</relation>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -14663,6 +14440,7 @@
</sequence>
</normal_column>
<column_group>35ae805d1da92afdb99b2fe8c536d1649356fccd</column_group>
<column_group>118dab95fc1f792cd468b9f66af2d4fabd98c39b</column_group>
</columns>
<indexes>
<inidex>
@@ -16474,13 +16252,13 @@
</table_properties>
</table>
<table>
<id>ea4a1c367ad1a436305eb4c93d3d1f87ac140ba1</id>
<height>230</height>
<id>d6c60af63d4b54ff24149a17b7dbef6ba492e484</id>
<height>256</height>
<width>397</width>
<font_name>Segoe UI</font_name>
<font_size>9</font_size>
<x>852</x>
<y>2451</y>
<x>732</x>
<y>2520</y>
<color>
<r>128</r>
<g>128</g>
@@ -16794,6 +16572,229 @@
<schema></schema>
</table_properties>
</table>
<table>
<id>fe9991829b27dafb45a95e13b6e9dd724b3bf424</id>
<height>308</height>
<width>335</width>
<font_name>Segoe UI</font_name>
<font_size>9</font_size>
<x>3897</x>
<y>792</y>
<color>
<r>128</r>
<g>128</g>
<b>192</b>
</color>
<connections>
</connections>
<physical_name>js_sys_lang</physical_name>
<logical_name>国际化语言</logical_name>
<description></description>
<constraint></constraint>
<primary_key_name></primary_key_name>
<option></option>
<columns>
<normal_column>
<word_id>869fc70cf3a4e92e8056b40814df8e03f9f9efde</word_id>
<id>58d907ff9cf0c81b565cad158f3bec8b3758d59e</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>true</not_null>
<primary_key>true</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>
<normal_column>
<word_id>c2c68b3979b0c52109cb085c491bebb415a189b4</word_id>
<id>669456aef17849070945f58eba9269628ad31cc2</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>true</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>
<normal_column>
<word_id>2392b56eaf51ec9f6e32fe6553460d25b3da9729</word_id>
<id>1832e034e60a8176274736a921861da8f4a17b1f</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
<physical_name></physical_name>
<type>nvarchar(n)</type>
<constraint></constraint>
<default_value></default_value>
<auto_increment>false</auto_increment>
<foreign_key>false</foreign_key>
<not_null>true</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>
<normal_column>
<word_id>26c952fa648f51d2350f628195fc098f918d8149</word_id>
<id>923b79d81325f08f9ef6d6cc4302024dd0717bad</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
<physical_name></physical_name>
<type>nvarchar(n)</type>
<constraint></constraint>
<default_value></default_value>
<auto_increment>false</auto_increment>
<foreign_key>false</foreign_key>
<not_null>true</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>
<normal_column>
<word_id>26bbe2ffbcc2678b0691f0721632c3dcdabfb4ff</word_id>
<id>b3438798385ef62434d0cdef3d6d9fa7a63e313c</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>true</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>
<column_group>85024a2953cf3e3c9c1cce49b2351853ab0d125b</column_group>
</columns>
<indexes>
<inidex>
<full_text>false</full_text>
<non_unique>true</non_unique>
<name>idx_sys_lang_code</name>
<type></type>
<description></description>
<columns>
<column>
<id>1832e034e60a8176274736a921861da8f4a17b1f</id>
<desc>false</desc>
</column>
</columns>
</inidex>
<inidex>
<full_text>false</full_text>
<non_unique>true</non_unique>
<name>idx_sys_lang_type</name>
<type></type>
<description></description>
<columns>
<column>
<id>b3438798385ef62434d0cdef3d6d9fa7a63e313c</id>
<desc>false</desc>
</column>
</columns>
</inidex>
</indexes>
<complex_unique_key_list>
</complex_unique_key_list>
<table_properties>
<schema></schema>
</table_properties>
</table>
</contents>
<column_groups>
<column_group>

View File

@@ -292,6 +292,26 @@ CREATE TABLE js_sys_file_upload
update_by varchar(64) NOT NULL,
update_date timestamp NOT NULL,
remarks vargraphic(500),
extend_s1 vargraphic(500),
extend_s2 vargraphic(500),
extend_s3 vargraphic(500),
extend_s4 vargraphic(500),
extend_s5 vargraphic(500),
extend_s6 vargraphic(500),
extend_s7 vargraphic(500),
extend_s8 vargraphic(500),
extend_i1 decimal(19),
extend_i2 decimal(19),
extend_i3 decimal(19),
extend_i4 decimal(19),
extend_f1 decimal(19,4),
extend_f2 decimal(19,4),
extend_f3 decimal(19,4),
extend_f4 decimal(19,4),
extend_d1 timestamp,
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
PRIMARY KEY (id)
);

View File

@@ -292,6 +292,26 @@ CREATE TABLE js_sys_file_upload
update_by varchar(64) NOT NULL,
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),
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 datetime,
extend_d2 datetime,
extend_d3 datetime,
extend_d4 datetime,
PRIMARY KEY (id)
);

View File

@@ -292,6 +292,26 @@ CREATE TABLE [js_sys_file_upload]
[update_by] varchar(64) NOT NULL,
[update_date] datetime NOT NULL,
[remarks] nvarchar(500),
[extend_s1] nvarchar(500),
[extend_s2] nvarchar(500),
[extend_s3] nvarchar(500),
[extend_s4] nvarchar(500),
[extend_s5] nvarchar(500),
[extend_s6] nvarchar(500),
[extend_s7] nvarchar(500),
[extend_s8] nvarchar(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] datetime,
[extend_d2] datetime,
[extend_d3] datetime,
[extend_d4] datetime,
PRIMARY KEY ([id])
);

View File

@@ -293,6 +293,26 @@ CREATE TABLE js_sys_file_upload
update_by varchar(64) NOT NULL COMMENT '更新者',
update_date datetime NOT NULL COMMENT '更新时间',
remarks varchar(500) COMMENT '备注信息',
extend_s1 varchar(500) COMMENT '扩展 String 1',
extend_s2 varchar(500) COMMENT '扩展 String 2',
extend_s3 varchar(500) COMMENT '扩展 String 3',
extend_s4 varchar(500) COMMENT '扩展 String 4',
extend_s5 varchar(500) COMMENT '扩展 String 5',
extend_s6 varchar(500) COMMENT '扩展 String 6',
extend_s7 varchar(500) COMMENT '扩展 String 7',
extend_s8 varchar(500) COMMENT '扩展 String 8',
extend_i1 decimal(19) COMMENT '扩展 Integer 1',
extend_i2 decimal(19) COMMENT '扩展 Integer 2',
extend_i3 decimal(19) COMMENT '扩展 Integer 3',
extend_i4 decimal(19) COMMENT '扩展 Integer 4',
extend_f1 decimal(19,4) COMMENT '扩展 Float 1',
extend_f2 decimal(19,4) COMMENT '扩展 Float 2',
extend_f3 decimal(19,4) COMMENT '扩展 Float 3',
extend_f4 decimal(19,4) COMMENT '扩展 Float 4',
extend_d1 datetime COMMENT '扩展 Date 1',
extend_d2 datetime COMMENT '扩展 Date 2',
extend_d3 datetime COMMENT '扩展 Date 3',
extend_d4 datetime COMMENT '扩展 Date 4',
PRIMARY KEY (id)
) COMMENT = '文件上传表';

View File

@@ -292,6 +292,26 @@ CREATE TABLE js_sys_file_upload
update_by varchar2(64) NOT NULL,
update_date timestamp NOT NULL,
remarks nvarchar2(500),
extend_s1 nvarchar2(500),
extend_s2 nvarchar2(500),
extend_s3 nvarchar2(500),
extend_s4 nvarchar2(500),
extend_s5 nvarchar2(500),
extend_s6 nvarchar2(500),
extend_s7 nvarchar2(500),
extend_s8 nvarchar2(500),
extend_i1 number(19),
extend_i2 number(19),
extend_i3 number(19),
extend_i4 number(19),
extend_f1 number(19,4),
extend_f2 number(19,4),
extend_f3 number(19,4),
extend_f4 number(19,4),
extend_d1 timestamp,
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
PRIMARY KEY (id)
);
@@ -1136,6 +1156,26 @@ COMMENT ON COLUMN js_sys_file_upload.create_date IS '创建时间';
COMMENT ON COLUMN js_sys_file_upload.update_by IS '更新者';
COMMENT ON COLUMN js_sys_file_upload.update_date IS '更新时间';
COMMENT ON COLUMN js_sys_file_upload.remarks IS '备注信息';
COMMENT ON COLUMN js_sys_file_upload.extend_s1 IS '扩展 String 1';
COMMENT ON COLUMN js_sys_file_upload.extend_s2 IS '扩展 String 2';
COMMENT ON COLUMN js_sys_file_upload.extend_s3 IS '扩展 String 3';
COMMENT ON COLUMN js_sys_file_upload.extend_s4 IS '扩展 String 4';
COMMENT ON COLUMN js_sys_file_upload.extend_s5 IS '扩展 String 5';
COMMENT ON COLUMN js_sys_file_upload.extend_s6 IS '扩展 String 6';
COMMENT ON COLUMN js_sys_file_upload.extend_s7 IS '扩展 String 7';
COMMENT ON COLUMN js_sys_file_upload.extend_s8 IS '扩展 String 8';
COMMENT ON COLUMN js_sys_file_upload.extend_i1 IS '扩展 Integer 1';
COMMENT ON COLUMN js_sys_file_upload.extend_i2 IS '扩展 Integer 2';
COMMENT ON COLUMN js_sys_file_upload.extend_i3 IS '扩展 Integer 3';
COMMENT ON COLUMN js_sys_file_upload.extend_i4 IS '扩展 Integer 4';
COMMENT ON COLUMN js_sys_file_upload.extend_f1 IS '扩展 Float 1';
COMMENT ON COLUMN js_sys_file_upload.extend_f2 IS '扩展 Float 2';
COMMENT ON COLUMN js_sys_file_upload.extend_f3 IS '扩展 Float 3';
COMMENT ON COLUMN js_sys_file_upload.extend_f4 IS '扩展 Float 4';
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 TABLE js_sys_job IS '作业调度表';
COMMENT ON COLUMN js_sys_job.job_name IS '任务名称';
COMMENT ON COLUMN js_sys_job.job_group IS '任务组名';

View File

@@ -292,6 +292,26 @@ CREATE TABLE js_sys_file_upload
update_by varchar(64) NOT NULL,
update_date timestamp NOT NULL,
remarks varchar(500),
extend_s1 varchar(500),
extend_s2 varchar(500),
extend_s3 varchar(500),
extend_s4 varchar(500),
extend_s5 varchar(500),
extend_s6 varchar(500),
extend_s7 varchar(500),
extend_s8 varchar(500),
extend_i1 decimal(19),
extend_i2 decimal(19),
extend_i3 decimal(19),
extend_i4 decimal(19),
extend_f1 decimal(19,4),
extend_f2 decimal(19,4),
extend_f3 decimal(19,4),
extend_f4 decimal(19,4),
extend_d1 timestamp,
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
PRIMARY KEY (id)
) WITHOUT OIDS;
@@ -1136,6 +1156,26 @@ COMMENT ON COLUMN js_sys_file_upload.create_date IS '创建时间';
COMMENT ON COLUMN js_sys_file_upload.update_by IS '更新者';
COMMENT ON COLUMN js_sys_file_upload.update_date IS '更新时间';
COMMENT ON COLUMN js_sys_file_upload.remarks IS '备注信息';
COMMENT ON COLUMN js_sys_file_upload.extend_s1 IS '扩展 String 1';
COMMENT ON COLUMN js_sys_file_upload.extend_s2 IS '扩展 String 2';
COMMENT ON COLUMN js_sys_file_upload.extend_s3 IS '扩展 String 3';
COMMENT ON COLUMN js_sys_file_upload.extend_s4 IS '扩展 String 4';
COMMENT ON COLUMN js_sys_file_upload.extend_s5 IS '扩展 String 5';
COMMENT ON COLUMN js_sys_file_upload.extend_s6 IS '扩展 String 6';
COMMENT ON COLUMN js_sys_file_upload.extend_s7 IS '扩展 String 7';
COMMENT ON COLUMN js_sys_file_upload.extend_s8 IS '扩展 String 8';
COMMENT ON COLUMN js_sys_file_upload.extend_i1 IS '扩展 Integer 1';
COMMENT ON COLUMN js_sys_file_upload.extend_i2 IS '扩展 Integer 2';
COMMENT ON COLUMN js_sys_file_upload.extend_i3 IS '扩展 Integer 3';
COMMENT ON COLUMN js_sys_file_upload.extend_i4 IS '扩展 Integer 4';
COMMENT ON COLUMN js_sys_file_upload.extend_f1 IS '扩展 Float 1';
COMMENT ON COLUMN js_sys_file_upload.extend_f2 IS '扩展 Float 2';
COMMENT ON COLUMN js_sys_file_upload.extend_f3 IS '扩展 Float 3';
COMMENT ON COLUMN js_sys_file_upload.extend_f4 IS '扩展 Float 4';
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 TABLE js_sys_job IS '作业调度表';
COMMENT ON COLUMN js_sys_job.job_name IS '任务名称';
COMMENT ON COLUMN js_sys_job.job_group IS '任务组名';

View File

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

View File

@@ -3,10 +3,12 @@
*/
package com.jeesite.autoconfigure.sys;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
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;
@@ -27,7 +29,8 @@ import com.jeesite.modules.sys.service.support.PostServiceSupport;
* @author ThinkGem
* @version 2018-10-13
*/
@Configuration
@Configuration(proxyBeanMethods = false)
@ConditionalOnBean(MyBatisFactoryBean.class)
public class SysAutoConfiguration {
@Bean

View File

@@ -21,6 +21,7 @@ import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.servlet.Cookie;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.apache.shiro.web.servlet.Cookie.SameSiteOptions;
import org.apache.shiro.web.util.WebUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,6 +41,7 @@ import com.jeesite.modules.sys.entity.Log;
import com.jeesite.modules.sys.entity.User;
import com.jeesite.modules.sys.utils.LogUtils;
import com.jeesite.modules.sys.utils.UserUtils;
import com.jeesite.modules.sys.utils.ValidCodeUtils;
/**
* 表单验证(包含验证码)过滤类
@@ -64,9 +66,12 @@ public class FormAuthenticationFilter extends org.apache.shiro.web.filter.authc.
*/
public FormAuthenticationFilter() {
super();
rememberUserCodeCookie = new SimpleCookie(REMEMBER_USERCODE_PARAM);
rememberUserCodeCookie.setHttpOnly(true);
rememberUserCodeCookie.setMaxAge(Cookie.ONE_YEAR);
rememberUserCodeCookie = new SimpleCookie();
rememberUserCodeCookie.setName(REMEMBER_USERCODE_PARAM);
rememberUserCodeCookie.setPath(Global.getProperty("session.sessionIdCookiePath"));
rememberUserCodeCookie.setSecure(Global.getPropertyToBoolean("session.sessionIdCookieSecure", "false"));
rememberUserCodeCookie.setHttpOnly(Global.getPropertyToBoolean("session.sessionIdCookieHttpOnly", "true"));
rememberUserCodeCookie.setSameSite(SameSiteOptions.valueOf(Global.getProperty("session.sessionIdCookieSameSite", "LAX")));
instance = this;
}
@@ -243,7 +248,21 @@ public class FormAuthenticationFilter extends org.apache.shiro.web.filter.authc.
protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception {
// 是否在登录后生成新的Session默认false
if (Global.getPropertyToBoolean("shiro.isGenerateNewSessionAfterLogin", "false")){
String[] keys = new String[] {ValidCodeUtils.VALID_CODE};
Map<String, Object> map = MapUtils.newHashMap();
final Session sessionOld = UserUtils.getSession();
for (String key : keys) {
Object value = sessionOld.getAttribute(key);
if (value != null) {
map.put(key, value);
}
}
UserUtils.getSubject().logout();
// 恢复生成新的Session之前的Session数据
final Session sessionNew = UserUtils.getSession();
map.forEach((key, value) -> {
sessionNew.setAttribute(key, value);
});
}
return super.executeLogin(request, response);
}

View File

@@ -26,7 +26,7 @@ import com.jeesite.common.web.http.ServletUtils;
*/
public class LogoutFilter extends org.apache.shiro.web.filter.authc.LogoutFilter {
private static final Logger log = LoggerFactory.getLogger(LogoutFilter.class);
private static final Logger logger = LoggerFactory.getLogger(LogoutFilter.class);
private BaseAuthorizingRealm authorizingRealm; // 安全认证类
@Override
@@ -53,7 +53,7 @@ public class LogoutFilter extends org.apache.shiro.web.filter.authc.LogoutFilter
// 退出登录
subject.logout();
} catch (SessionException ise) {
log.debug("Encountered session exception during logout. This can generally safely be ignored.", ise);
logger.debug("Encountered session exception during logout. This can generally safely be ignored.", ise);
}
// 如果是Ajax请求返回Json字符串。
@@ -65,7 +65,7 @@ public class LogoutFilter extends org.apache.shiro.web.filter.authc.LogoutFilter
issueRedirect(request, response, redirectUrl);
}catch(Exception e){
log.debug("Encountered session exception during logout. This can generally safely be ignored.", e);
logger.debug("Encountered session exception during logout. This can generally safely be ignored.", e);
}
return false;
}

View File

@@ -13,6 +13,7 @@ import org.apache.shiro.cas.CasSubjectFactory;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
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.web.servlet.FilterRegistrationBean;
@@ -45,7 +46,7 @@ import com.jeesite.common.shiro.web.WebSecurityManager;
* @version 2018-7-11
*/
@SuppressWarnings("deprecation")
@Configuration
@Configuration(proxyBeanMethods = false)
public class ShiroConfig {
/**
@@ -115,15 +116,24 @@ public class ShiroConfig {
private UserFilter shiroUserFilter() {
return new UserFilter();
}
/**
* 非法请求过滤器
*/
private InvalidRequestFilter invalidRequestFilter() {
InvalidRequestFilter bean = new InvalidRequestFilter();
bean.setBlockNonAscii(false);
return bean;
}
/**
* Shiro认证过滤器
*/
@Bean
public ShiroFilterFactoryBean shiroFilter(WebSecurityManager securityManager,
public ShiroFilterFactoryBean shiroFilter(WebSecurityManager webSecurityManager,
AuthorizingRealm authorizingRealm, CasAuthorizingRealm casAuthorizingRealm) {
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
bean.setSecurityManager(securityManager);
bean.setSecurityManager(webSecurityManager);
bean.setLoginUrl(Global.getProperty("shiro.loginUrl"));
bean.setSuccessUrl(Global.getProperty("adminPath")+"/index");
Map<String, Filter> filters = bean.getFilters();
@@ -134,6 +144,7 @@ public class ShiroConfig {
filters.put("perms", shiroPermsFilter());
filters.put("roles", shiroRolesFilter());
filters.put("user", shiroUserFilter());
filters.put("invalidRequest", invalidRequestFilter());
FilterChainDefinitionMap chains = new FilterChainDefinitionMap();
chains.setFilterChainDefinitions(Global.getProperty("shiro.filterChainDefinitions"));
chains.setDefaultFilterChainDefinitions(Global.getProperty("shiro.defaultFilterChainDefinitions"));
@@ -176,7 +187,7 @@ public class ShiroConfig {
* 定义Shiro安全管理配置
*/
@Bean
public WebSecurityManager securityManager(AuthorizingRealm authorizingRealm,
public WebSecurityManager webSecurityManager(AuthorizingRealm authorizingRealm,
CasAuthorizingRealm casAuthorizingRealm, SessionManager sessionManager,
CacheManager shiroCacheManager) {
WebSecurityManager bean = new WebSecurityManager();
@@ -215,20 +226,20 @@ public class ShiroConfig {
* 启用Shrio授权注解拦截方式AOP式方法级权限检查
*/
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(WebSecurityManager securityManager) {
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(WebSecurityManager webSecurityManager) {
AuthorizationAttributeSourceAdvisor bean = new AuthorizationAttributeSourceAdvisor();
bean.setSecurityManager(securityManager);
bean.setSecurityManager(webSecurityManager);
return bean;
}
// /**
// * 在方法中 注入 securityManager 进行代理控制
// * 在方法中 注入 webSecurityManager 进行代理控制
// */
// @Bean
// public MethodInvokingFactoryBean methodInvokingFactoryBean(DefaultWebSecurityManager securityManager) {
// public MethodInvokingFactoryBean methodInvokingFactoryBean(DefaultWebSecurityManager webSecurityManager) {
// MethodInvokingFactoryBean bean = new MethodInvokingFactoryBean();
// bean.setStaticMethod("org.apache.shiro.SecurityUtils.setSecurityManager");
// bean.setArguments(new Object[] { securityManager });
// bean.setArguments(new Object[] { webSecurityManager });
// return bean;
// }

View File

@@ -17,7 +17,7 @@ import com.alibaba.druid.support.http.WebStatFilter;
* @author ThinkGem
* @version 2017年11月30日
*/
@Configuration
@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(name="state.enabled", havingValue="true", matchIfMissing=true)
public class DruidStatConfig {

View File

@@ -25,7 +25,7 @@ import org.springframework.core.Ordered;
* @author ThinkGem
* @version 2020年1月21日
*/
@Configuration
@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(name="server.schemeHttps", havingValue="true", matchIfMissing=false)
public class SchemeHttpsConfig {

View File

@@ -19,9 +19,9 @@ import com.jeesite.modules.sys.interceptor.LogInterceptor;
* @author ThinkGem
* @version 2018年1月10日
*/
@Configuration
@EnableWebMvc
@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(name="web.interceptor.log.enabled", havingValue="true", matchIfMissing=true)
@EnableWebMvc
public class LogInterceptorConfig implements WebMvcConfigurer {
@Override

View File

@@ -19,9 +19,9 @@ import com.jeesite.modules.sys.interceptor.MobileInterceptor;
* @author ThinkGem
* @version 2018年1月10日
*/
@Configuration
@EnableWebMvc
@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(name="web.interceptor.mobile.enabled", havingValue="true", matchIfMissing=false)
@EnableWebMvc
public class MobileViewInterceptorConfig implements WebMvcConfigurer {
@Override

View File

@@ -21,7 +21,7 @@ import com.jeesite.common.mybatis.mapper.query.QueryType;
* @author ThinkGem
* @version 2019-03-12
*/
@Table(name="${_prefix}sys_msg_inner", alias="a", columns={
@Table(name="${_prefix}sys_msg_inner", alias="a", label="内部消息", columns={
@Column(name="id", attrName="id", label="编号", isPK=true),
@Column(name="msg_title", attrName="msgTitle", label="消息标题", queryType=QueryType.LIKE),
@Column(name="content_level", attrName="contentLevel", label="内容等级", comment="内容等级1普通 2一般 3紧急"),

View File

@@ -20,7 +20,7 @@ import com.jeesite.common.mybatis.mapper.query.QueryType;
* @author ThinkGem
* @version 2019-03-12
*/
@Table(name="${_prefix}sys_msg_inner_record", alias="a", columns={
@Table(name="${_prefix}sys_msg_inner_record", alias="a", label="消息发送记录", columns={
@Column(name="id", attrName="id", label="编号", isPK=true),
@Column(name="msg_inner_id", attrName="msgInnerId", label="所属消息"),
@Column(name="receive_user_code", attrName="receiveUserCode", label="接受者用户编码"),

View File

@@ -17,7 +17,7 @@ import com.jeesite.common.mybatis.mapper.query.QueryType;
* @author ThinkGem
* @version 2017-03-22
*/
@Table(name="${_prefix}sys_area", alias="a", columns={
@Table(name="${_prefix}sys_area", alias="a", label="区域信息", columns={
@Column(includeEntity=DataEntity.class),
@Column(includeEntity=TreeEntity.class),
@Column(name="area_code", attrName="areaCode", label="区域代码", isPK=true),

View File

@@ -28,7 +28,7 @@ import com.jeesite.common.mybatis.mapper.query.QueryType;
* @author ThinkGem
* @version 2017-03-23
*/
@Table(name="${_prefix}sys_company", alias="a", columns={
@Table(name="${_prefix}sys_company", alias="a", label="公司信息", columns={
@Column(includeEntity=BaseEntity.class),
@Column(includeEntity=DataEntity.class),
@Column(includeEntity=TreeEntity.class),

View File

@@ -24,7 +24,7 @@ import com.jeesite.common.utils.excel.fieldtype.OfficeType;
* @author ThinkGem
* @version 2017-03-25
*/
@Table(name="${_prefix}sys_user", alias="a", columns={
@Table(name="${_prefix}sys_user", alias="a", label="员工信息", columns={
@Column(includeEntity=User.class),
}, joinTable={
@JoinTable(type=Type.JOIN, entity=Employee.class, alias="e",
@@ -122,7 +122,7 @@ public class EmpUser extends User {
public void setEmployee(Employee employee){
super.setRefObj(employee);
}
public String[] getCodes() {
return codes;
}

View File

@@ -24,7 +24,7 @@ import com.jeesite.common.mybatis.mapper.query.QueryType;
* @author ThinkGem
* @version 2017-03-25
*/
@Table(name="${_prefix}sys_employee", alias="a", columns={
@Table(name="${_prefix}sys_employee", alias="a", label="员工信息", columns={
@Column(includeEntity=BaseEntity.class),
@Column(includeEntity=DataEntity.class),
@Column(name="emp_code", attrName="empCode", label="员工编码", isPK=true),

View File

@@ -25,7 +25,7 @@ import com.jeesite.common.mybatis.mapper.query.QueryType;
* @author ThinkGem
* @version 2017-03-19
*/
@Table(name="${_prefix}sys_log", alias="a", columns={
@Table(name="${_prefix}sys_log", alias="a", label="操作日志", columns={
@Column(includeEntity=BaseEntity.class),
@Column(name="id", attrName="id", label="编码", isPK=true),
@Column(name="log_type", attrName="logType", label="日志类型"),
@@ -36,6 +36,7 @@ import com.jeesite.common.mybatis.mapper.query.QueryType;
@Column(name="request_uri", attrName="requestUri", label="请求URI", queryType=QueryType.LIKE),
@Column(name="request_method", attrName="requestMethod", label="操作方式"),
@Column(name="request_params", attrName="requestParams", label="操作提交的数据", queryType=QueryType.LIKE),
@Column(name="diff_modify_data",attrName="diffModifyData", label="差异修改数据", queryType=QueryType.LIKE),
@Column(name="biz_key", attrName="bizKey", label="业务主键"),
@Column(name="biz_type", attrName="bizType", label="业务类型"),
@Column(name="remote_addr", attrName="remoteAddr", label="操作IP地址"),
@@ -63,6 +64,7 @@ public class Log extends DataEntity<Log> {
private String requestUri; // 请求URI
private String requestMethod; // 操作方式
private String requestParams; // 操作提交的数据
private String diffModifyData; // 差异修改数据
private String bizKey; // 业务主键
private String bizType; // 业务类型
private String remoteAddr; // 操作IP地址
@@ -130,6 +132,14 @@ public class Log extends DataEntity<Log> {
this.requestParams = requestParams;
}
public String getDiffModifyData() {
return diffModifyData;
}
public void setDiffModifyData(String diffModifyData) {
this.diffModifyData = diffModifyData;
}
@Length(min=0, max=64, message="业务主键长度不能超过 64 个字符")
public String getBizKey() {
return bizKey;
@@ -220,6 +230,9 @@ public class Log extends DataEntity<Log> {
}
public String getExecuteTimeFormat(){
if (executeTime == null) {
executeTime = 0L;
}
return TimeUtils.formatDateAgo(executeTime);
}

View File

@@ -23,7 +23,7 @@ import com.jeesite.modules.sys.utils.EmpUtils;
* @author ThinkGem
* @version 2017-03-23
*/
@Table(name="${_prefix}sys_office", alias="a", columns={
@Table(name="${_prefix}sys_office", alias="a", label="组织机构", columns={
@Column(includeEntity=BaseEntity.class),
@Column(includeEntity=DataEntity.class),
@Column(includeEntity=TreeEntity.class),

View File

@@ -12,7 +12,7 @@ import com.jeesite.common.mybatis.annotation.Column;
import com.jeesite.common.mybatis.annotation.Table;
import com.jeesite.common.mybatis.mapper.query.QueryType;
@Table(name="${_prefix}sys_post", alias="a", columns={
@Table(name="${_prefix}sys_post", alias="a", label="岗位信息", columns={
@Column(includeEntity=BaseEntity.class),
@Column(includeEntity=DataEntity.class),
@Column(name="post_code", attrName="postCode", label="岗位编码", isPK=true),

View File

@@ -8,12 +8,15 @@ import java.text.SimpleDateFormat;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.MDC;
import org.springframework.core.NamedThreadLocal;
import org.springframework.web.servlet.HandlerInterceptor;
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;
import com.jeesite.common.service.BaseService;
@@ -27,12 +30,16 @@ import com.jeesite.modules.sys.utils.UserUtils;
*/
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 {
if (StringUtils.isBlank(MDC.get(TRACE_ID))) {
MDC.put(TRACE_ID, IdGen.nextId());
}
long beginTime = System.currentTimeMillis();// 1、开始时间
startTimeThreadLocal.set(beginTime); // 线程绑定变量(该数据只有当前请求的线程可见)
if (logger.isDebugEnabled()){
@@ -77,7 +84,7 @@ public class LogInterceptor extends BaseService implements HandlerInterceptor {
DateUtils.formatDate(endTime, "hh:mm:ss.SSS"), TimeUtils.formatDateAgo(executeTime), request.getRequestURI(),
ByteUtils.formatByteSize(runtime.totalMemory()), ByteUtils.formatByteSize(runtime.totalMemory()-runtime.freeMemory()));
}
MDC.remove(TRACE_ID);
}
}

View File

@@ -66,6 +66,7 @@ public class CompanyServiceSupport extends TreeService<CompanyDao, Company>
@Transactional(readOnly=false)
public void save(Company company) {
if (company.getIsNewRecord()){
// 生成主键,并验证改主键是否存在,如存在则抛出验证信息
genIdAndValid(company, company.getViewCode());
// 当前新数据授权,如果用户有上级数据权限,则当前数据也有相应的数据权限
dataScopeService.insertIfParentExists(company, "Company");

View File

@@ -59,6 +59,7 @@ public class OfficeServiceSupport extends TreeService<OfficeDao, Office>
@Transactional(readOnly=false)
public void save(Office office) {
if (office.getIsNewRecord()){
// 生成主键,并验证改主键是否存在,如存在则抛出验证信息
genIdAndValid(office, office.getViewCode());
// 当前新数据授权,如果用户有上级数据权限,则当前数据也有相应的数据权限
dataScopeService.insertIfParentExists(office, "Office");

View File

@@ -11,12 +11,12 @@ import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
import io.netty.util.concurrent.DefaultThreadFactory;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.method.HandlerMethod;
@@ -29,6 +29,7 @@ import com.jeesite.common.mybatis.annotation.Column;
import com.jeesite.common.mybatis.annotation.Table;
import com.jeesite.common.mybatis.mapper.MapperHelper;
import com.jeesite.common.network.IpUtils;
import com.jeesite.common.utils.DiffDataUtils;
import com.jeesite.common.utils.SpringUtils;
import com.jeesite.common.web.http.UserAgentUtils;
import com.jeesite.modules.sys.entity.Log;
@@ -37,6 +38,7 @@ import com.jeesite.modules.sys.service.LogService;
import com.jeesite.modules.sys.service.MenuService;
import eu.bitwalker.useragentutils.UserAgent;
import io.netty.util.concurrent.DefaultThreadFactory;
/**
* 日志工具类
@@ -60,7 +62,7 @@ public class LogUtils {
// 参数名获取工具(尝试获取标注为@ModelAttribute注解的方法第一个参数名一般为主键名
private static ParameterNameDiscoverer pnd = new DefaultParameterNameDiscoverer();
/**
* 保存日志
*/
@@ -112,9 +114,14 @@ public class LogUtils {
if (throwable == null){
throwable = ExceptionUtils.getThrowable(request);
}
// 获取原数据和修改后的目标数据对象
Object sourceData = request.getAttribute(WebDataBinder.class.getName()+".SOURCE");
Object targetData = request.getAttribute(WebDataBinder.class.getName()+".TARGET");
// 异步保存日志
logThreadPool.submit(new SaveLogThread(log, handler, request.getContextPath(), throwable));
logThreadPool.submit(new SaveLogThread(log, handler, request.getContextPath(),
throwable, sourceData, targetData));
}
/**
* 保存日志线程
@@ -125,12 +132,17 @@ public class LogUtils {
private Object handler;
private String contextPath;
private Throwable throwable;
private Object sourceData;
private Object targetData;
public SaveLogThread(Log log, Object handler, String contextPath, Throwable throwable){
public SaveLogThread(Log log, Object handler, String contextPath,
Throwable throwable, Object sourceData, Object targetData){
this.log = log;
this.handler = handler;
this.contextPath = contextPath;
this.throwable = throwable;
this.sourceData = sourceData;
this.targetData = targetData;
}
@Override
@@ -217,11 +229,15 @@ public class LogUtils {
if (StringUtils.isBlank(log.getRequestUri()) && StringUtils.isBlank(log.getExceptionInfo())){
return;
}
// 如果是修改类型的日志,则获取修改前后的差异数据
if (Log.TYPE_UPDATE.equals(log.getLogType()) && sourceData != null && targetData != null) {
log.setDiffModifyData(DiffDataUtils.getDiffData(sourceData, targetData));
}
// 保存日志信息
log.setIsNewRecord(true);
Static.logService.insertLog(log);
}
}
}

View File

@@ -264,7 +264,11 @@ public class LoginController extends BaseController{
//UserUtils.removeCache(UserUtils.CACHE_AUTH_INFO+"_"+session.getId());
// 返回指定用户类型的首页视图
String view = UserUtils.getUserTypeValue(user.getUserType(), "indexView");
String userType = user.getUserType();
if (User.USER_TYPE_NONE.equals(userType)){
userType = User.USER_TYPE_EMPLOYEE;
}
String view = UserUtils.getUserTypeValue(userType, "indexView");
if(StringUtils.isNotBlank(view)){
return view;
}

View File

@@ -94,7 +94,7 @@ public class UserController extends BaseController {
@ResponseBody
public String infoSaveBase(User user, HttpServletRequest request) {
if (StringUtils.isBlank(user.getUserName())){
return renderResult(Global.TRUE, text("sys.user.userNameNotBlank"));
return renderResult(Global.FALSE, text("sys.user.userNameNotBlank"));
}
Global.assertDemoMode();
User currentUser = UserUtils.getUser();

View File

@@ -20,9 +20,9 @@ jdbc:
# 初始化连接数
init: 1
# 最小连接数
# 最小活动连接数
minIdle: 3
# 最大连接数
# 最大激活连接数
maxActive: 20
# 获取连接等待超时时间单位毫秒1分钟4.0.6+
@@ -108,8 +108,11 @@ frontPath: /f
# 分页相关
page:
# 分页默认大小
# 默认每页显示的数据条数
pageSize: 20
# 每页最大条数,防止分页过大导致系统缓慢或内存溢出
maxPageSize: 999
# 用户相关
user:
@@ -367,7 +370,8 @@ shiro:
# 是否允许嵌入到外部网站iframe中true不限制false不允许
isAllowExternalSiteIframe: true
# 是否允许跨域访问 CORS如果允许设置允许的域名,全部域名设置*号,如果不允许,此设置应该为空
# 是否允许跨域访问 CORS如果允许设置允许的域名。当设置'*'号全部域名时accessControlAllowCredentials应该设置为false。
# v4.2.3 开始支持多个域名和模糊匹配例如http://*.jeesite.com,http://*.jeesite.net
# accessControlAllowOrigin: http://demo.jeesite.com
# accessControlAllowOrigin: '*'
@@ -375,8 +379,8 @@ shiro:
# accessControlAllowMethods: GET, POST, OPTIONS
# accessControlAllowHeaders: Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With
# 是否允许接收跨域的Cookie凭证数据 CORS
# accessControlAllowCredentials: true
# 是否允许接收跨域的Cookie凭证数据 CORS当设置为true时accessControlAllowOrigin不能设置为'*'。
# accessControlAllowCredentials: false
# 允许的网站来源地址,不设置为全部地址(避免一些跨站点请求伪造 CSRF、防盗链
# allowReferers: http://127.0.0.1,http://localhost
@@ -403,11 +407,11 @@ shiro:
# ${adminPath}/${spring.application.name}/swagger/** = anon
# ${adminPath}/** = user
filterChainDefinitions: |
${adminPath}/sys/corpAdmin/treeData = anon
${adminPath}/** = user
# 默认的授权过滤定义如果在filterChainDefinitions中已经定义则该定义会被覆盖。
defaultFilterChainDefinitions: |
/tags/* = anon
/lang/** = anon
/account/* = anon
/userfiles/** = anon
@@ -419,6 +423,7 @@ shiro:
${adminPath}/login = authc
${adminPath}/logout = logout
${adminPath}/file/** = user
${adminPath}/sys/corpAdmin/treeData = anon
${adminPath}/cms/* = perms[cms:view]
${adminPath}/cms/site/select = user
${adminPath}/cms/site/* = perms[cms:site:view]
@@ -450,6 +455,11 @@ session:
# 共享的SessionId的Cookie名称保存到跟路径下第三方应用获取。同一域名下多个项目时需设置共享Cookie的名称。
#shareSessionIdCookieName: ${session.sessionIdCookieName}
# 其它 SimpleCookie 参数v4.2.3
#sessionIdCookieSecure: false
#sessionIdCookieHttpOnly: true
#sessionIdCookieSameSite: LAX
# 设置接收SessionId请求参数的名称
sessionIdParamName: __sid
@@ -489,6 +499,9 @@ mybatis:
# TypeHandlers 扫描基础包,如果多个,用“,”分隔
scanTypeHandlersPackage: ~
# 是否开启 JDBC 管理事务,默认 Spring 管理事务 v4.2.3
jdbcTransaction: false
# Mapper文件刷新线程
mapper:
refresh:
@@ -551,7 +564,7 @@ web:
# 静态文件后缀排除的url路径指定哪些uri路径不进行静态文件过滤。
staticFileExcludeUri: /druid/
# 静态资源路径前缀可做CDN加速优化
# 静态资源路径前缀,可做 CDN 加速优化,默认前面增加 ctxPath 前缀,如果前面写 “//” 两个斜杠 或 包含 “://” 不加 ctxPath。
staticPrefix: /static
# 严格模式(更严格的数据安全验证)

View File

@@ -15,6 +15,7 @@
<logger name="com.atomikos.jdbc.AbstractDataSourceBean" level="ERROR" />
<logger name="com.atomikos.jdbc.AtomikosConnectionProxy" level="ERROR" />
<logger name="com.atomikos.recovery.xa.XaResourceRecoveryManager" level="ERROR" />
<logger name="org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator" level="DEBUG" />
<!-- <logger name="org.springframework.transaction.support.TransactionSynchronizationManager" level="TRACE" /> -->
<logger name="springfox.documentation.spring.web.readers.parameter.ParameterDataTypeReader" level="ERROR" />

View File

@@ -292,6 +292,26 @@ CREATE TABLE ${_prefix}sys_file_upload
update_by varchar(64) NOT NULL,
update_date timestamp NOT NULL,
remarks vargraphic(500),
extend_s1 vargraphic(500),
extend_s2 vargraphic(500),
extend_s3 vargraphic(500),
extend_s4 vargraphic(500),
extend_s5 vargraphic(500),
extend_s6 vargraphic(500),
extend_s7 vargraphic(500),
extend_s8 vargraphic(500),
extend_i1 decimal(19),
extend_i2 decimal(19),
extend_i3 decimal(19),
extend_i4 decimal(19),
extend_f1 decimal(19,4),
extend_f2 decimal(19,4),
extend_f3 decimal(19,4),
extend_f4 decimal(19,4),
extend_d1 timestamp,
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
PRIMARY KEY (id)
);

View File

@@ -292,6 +292,26 @@ CREATE TABLE ${_prefix}sys_file_upload
update_by varchar(64) NOT NULL,
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),
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 datetime,
extend_d2 datetime,
extend_d3 datetime,
extend_d4 datetime,
PRIMARY KEY (id)
);

View File

@@ -292,6 +292,26 @@ CREATE TABLE [${_prefix}sys_file_upload]
[update_by] varchar(64) NOT NULL,
[update_date] datetime NOT NULL,
[remarks] nvarchar(500),
[extend_s1] nvarchar(500),
[extend_s2] nvarchar(500),
[extend_s3] nvarchar(500),
[extend_s4] nvarchar(500),
[extend_s5] nvarchar(500),
[extend_s6] nvarchar(500),
[extend_s7] nvarchar(500),
[extend_s8] nvarchar(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] datetime,
[extend_d2] datetime,
[extend_d3] datetime,
[extend_d4] datetime,
PRIMARY KEY ([id])
);

View File

@@ -293,6 +293,26 @@ CREATE TABLE ${_prefix}sys_file_upload
update_by varchar(64) NOT NULL COMMENT '更新者',
update_date datetime NOT NULL COMMENT '更新时间',
remarks varchar(500) COMMENT '备注信息',
extend_s1 varchar(500) COMMENT '扩展 String 1',
extend_s2 varchar(500) COMMENT '扩展 String 2',
extend_s3 varchar(500) COMMENT '扩展 String 3',
extend_s4 varchar(500) COMMENT '扩展 String 4',
extend_s5 varchar(500) COMMENT '扩展 String 5',
extend_s6 varchar(500) COMMENT '扩展 String 6',
extend_s7 varchar(500) COMMENT '扩展 String 7',
extend_s8 varchar(500) COMMENT '扩展 String 8',
extend_i1 decimal(19) COMMENT '扩展 Integer 1',
extend_i2 decimal(19) COMMENT '扩展 Integer 2',
extend_i3 decimal(19) COMMENT '扩展 Integer 3',
extend_i4 decimal(19) COMMENT '扩展 Integer 4',
extend_f1 decimal(19,4) COMMENT '扩展 Float 1',
extend_f2 decimal(19,4) COMMENT '扩展 Float 2',
extend_f3 decimal(19,4) COMMENT '扩展 Float 3',
extend_f4 decimal(19,4) COMMENT '扩展 Float 4',
extend_d1 datetime COMMENT '扩展 Date 1',
extend_d2 datetime COMMENT '扩展 Date 2',
extend_d3 datetime COMMENT '扩展 Date 3',
extend_d4 datetime COMMENT '扩展 Date 4',
PRIMARY KEY (id)
) COMMENT = '文件上传表';

View File

@@ -292,6 +292,26 @@ CREATE TABLE ${_prefix}sys_file_upload
update_by varchar2(64) NOT NULL,
update_date timestamp NOT NULL,
remarks nvarchar2(500),
extend_s1 nvarchar2(500),
extend_s2 nvarchar2(500),
extend_s3 nvarchar2(500),
extend_s4 nvarchar2(500),
extend_s5 nvarchar2(500),
extend_s6 nvarchar2(500),
extend_s7 nvarchar2(500),
extend_s8 nvarchar2(500),
extend_i1 number(19),
extend_i2 number(19),
extend_i3 number(19),
extend_i4 number(19),
extend_f1 number(19,4),
extend_f2 number(19,4),
extend_f3 number(19,4),
extend_f4 number(19,4),
extend_d1 timestamp,
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
PRIMARY KEY (id)
);
@@ -1136,6 +1156,26 @@ COMMENT ON COLUMN ${_prefix}sys_file_upload.create_date IS '创建时间';
COMMENT ON COLUMN ${_prefix}sys_file_upload.update_by IS '更新者';
COMMENT ON COLUMN ${_prefix}sys_file_upload.update_date IS '更新时间';
COMMENT ON COLUMN ${_prefix}sys_file_upload.remarks IS '备注信息';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s1 IS '扩展 String 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s2 IS '扩展 String 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s3 IS '扩展 String 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s4 IS '扩展 String 4';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s5 IS '扩展 String 5';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s6 IS '扩展 String 6';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s7 IS '扩展 String 7';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s8 IS '扩展 String 8';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i1 IS '扩展 Integer 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i2 IS '扩展 Integer 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i3 IS '扩展 Integer 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i4 IS '扩展 Integer 4';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f1 IS '扩展 Float 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f2 IS '扩展 Float 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f3 IS '扩展 Float 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f4 IS '扩展 Float 4';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d4 IS '扩展 Date 4';
COMMENT ON TABLE ${_prefix}sys_job IS '作业调度表';
COMMENT ON COLUMN ${_prefix}sys_job.job_name IS '任务名称';
COMMENT ON COLUMN ${_prefix}sys_job.job_group IS '任务组名';

View File

@@ -292,6 +292,26 @@ CREATE TABLE ${_prefix}sys_file_upload
update_by varchar(64) NOT NULL,
update_date timestamp NOT NULL,
remarks varchar(500),
extend_s1 varchar(500),
extend_s2 varchar(500),
extend_s3 varchar(500),
extend_s4 varchar(500),
extend_s5 varchar(500),
extend_s6 varchar(500),
extend_s7 varchar(500),
extend_s8 varchar(500),
extend_i1 decimal(19),
extend_i2 decimal(19),
extend_i3 decimal(19),
extend_i4 decimal(19),
extend_f1 decimal(19,4),
extend_f2 decimal(19,4),
extend_f3 decimal(19,4),
extend_f4 decimal(19,4),
extend_d1 timestamp,
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp,
PRIMARY KEY (id)
) WITHOUT OIDS;
@@ -1136,6 +1156,26 @@ COMMENT ON COLUMN ${_prefix}sys_file_upload.create_date IS '创建时间';
COMMENT ON COLUMN ${_prefix}sys_file_upload.update_by IS '更新者';
COMMENT ON COLUMN ${_prefix}sys_file_upload.update_date IS '更新时间';
COMMENT ON COLUMN ${_prefix}sys_file_upload.remarks IS '备注信息';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s1 IS '扩展 String 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s2 IS '扩展 String 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s3 IS '扩展 String 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s4 IS '扩展 String 4';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s5 IS '扩展 String 5';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s6 IS '扩展 String 6';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s7 IS '扩展 String 7';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s8 IS '扩展 String 8';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i1 IS '扩展 Integer 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i2 IS '扩展 Integer 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i3 IS '扩展 Integer 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i4 IS '扩展 Integer 4';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f1 IS '扩展 Float 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f2 IS '扩展 Float 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f3 IS '扩展 Float 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f4 IS '扩展 Float 4';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d4 IS '扩展 Date 4';
COMMENT ON TABLE ${_prefix}sys_job IS '作业调度表';
COMMENT ON COLUMN ${_prefix}sys_job.job_name IS '任务名称';
COMMENT ON COLUMN ${_prefix}sys_job.job_group IS '任务组名';

View File

@@ -0,0 +1,23 @@
-- 文件上传表增加 20 个扩展字段
ALTER TABLE ${_prefix}sys_file_upload
ADD extend_s1 nvarchar(500),
extend_s2 nvarchar(500),
extend_s3 nvarchar(500),
extend_s4 nvarchar(500),
extend_s5 nvarchar(500),
extend_s6 nvarchar(500),
extend_s7 nvarchar(500),
extend_s8 nvarchar(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 datetime,
extend_d2 datetime,
extend_d3 datetime,
extend_d4 datetime;

View File

@@ -0,0 +1,23 @@
-- 文件上传表增加 20 个扩展字段
ALTER TABLE `${_prefix}sys_file_upload`
ADD COLUMN extend_s1 varchar(500) COMMENT '扩展 String 1',
ADD COLUMN extend_s2 varchar(500) COMMENT '扩展 String 2',
ADD COLUMN extend_s3 varchar(500) COMMENT '扩展 String 3',
ADD COLUMN extend_s4 varchar(500) COMMENT '扩展 String 4',
ADD COLUMN extend_s5 varchar(500) COMMENT '扩展 String 5',
ADD COLUMN extend_s6 varchar(500) COMMENT '扩展 String 6',
ADD COLUMN extend_s7 varchar(500) COMMENT '扩展 String 7',
ADD COLUMN extend_s8 varchar(500) COMMENT '扩展 String 8',
ADD COLUMN extend_i1 decimal(19) COMMENT '扩展 Integer 1',
ADD COLUMN extend_i2 decimal(19) COMMENT '扩展 Integer 2',
ADD COLUMN extend_i3 decimal(19) COMMENT '扩展 Integer 3',
ADD COLUMN extend_i4 decimal(19) COMMENT '扩展 Integer 4',
ADD COLUMN extend_f1 decimal(19,4) COMMENT '扩展 Float 1',
ADD COLUMN extend_f2 decimal(19,4) COMMENT '扩展 Float 2',
ADD COLUMN extend_f3 decimal(19,4) COMMENT '扩展 Float 3',
ADD COLUMN extend_f4 decimal(19,4) COMMENT '扩展 Float 4',
ADD COLUMN extend_d1 datetime COMMENT '扩展 Date 1',
ADD COLUMN extend_d2 datetime COMMENT '扩展 Date 2',
ADD COLUMN extend_d3 datetime COMMENT '扩展 Date 3',
ADD COLUMN extend_d4 datetime COMMENT '扩展 Date 4';

View File

@@ -0,0 +1,43 @@
-- 文件上传表增加 20 个扩展字段
ALTER TABLE ${_prefix}sys_file_upload
ADD (extend_s1 nvarchar2(500),
extend_s2 nvarchar2(500),
extend_s3 nvarchar2(500),
extend_s4 nvarchar2(500),
extend_s5 nvarchar2(500),
extend_s6 nvarchar2(500),
extend_s7 nvarchar2(500),
extend_s8 nvarchar2(500),
extend_i1 number(19),
extend_i2 number(19),
extend_i3 number(19),
extend_i4 number(19),
extend_f1 number(19,4),
extend_f2 number(19,4),
extend_f3 number(19,4),
extend_f4 number(19,4),
extend_d1 timestamp,
extend_d2 timestamp,
extend_d3 timestamp,
extend_d4 timestamp);
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s1 IS '扩展 String 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s2 IS '扩展 String 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s3 IS '扩展 String 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s4 IS '扩展 String 4';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s5 IS '扩展 String 5';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s6 IS '扩展 String 6';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s7 IS '扩展 String 7';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s8 IS '扩展 String 8';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i1 IS '扩展 Integer 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i2 IS '扩展 Integer 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i3 IS '扩展 Integer 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i4 IS '扩展 Integer 4';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f1 IS '扩展 Float 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f2 IS '扩展 Float 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f3 IS '扩展 Float 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f4 IS '扩展 Float 4';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d4 IS '扩展 Date 4';

View File

@@ -0,0 +1,43 @@
-- 文件上传表增加 20 个扩展字段
ALTER TABLE ${_prefix}sys_file_upload
ADD COLUMN extend_s1 varchar(500),
ADD COLUMN extend_s2 varchar(500),
ADD COLUMN extend_s3 varchar(500),
ADD COLUMN extend_s4 varchar(500),
ADD COLUMN extend_s5 varchar(500),
ADD COLUMN extend_s6 varchar(500),
ADD COLUMN extend_s7 varchar(500),
ADD COLUMN extend_s8 varchar(500),
ADD COLUMN extend_i1 decimal(19),
ADD COLUMN extend_i2 decimal(19),
ADD COLUMN extend_i3 decimal(19),
ADD COLUMN extend_i4 decimal(19),
ADD COLUMN extend_f1 decimal(19,4),
ADD COLUMN extend_f2 decimal(19,4),
ADD COLUMN extend_f3 decimal(19,4),
ADD COLUMN extend_f4 decimal(19,4),
ADD COLUMN extend_d1 timestamp,
ADD COLUMN extend_d2 timestamp,
ADD COLUMN extend_d3 timestamp,
ADD COLUMN extend_d4 timestamp;
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s1 IS '扩展 String 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s2 IS '扩展 String 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s3 IS '扩展 String 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s4 IS '扩展 String 4';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s5 IS '扩展 String 5';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s6 IS '扩展 String 6';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s7 IS '扩展 String 7';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_s8 IS '扩展 String 8';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i1 IS '扩展 Integer 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i2 IS '扩展 Integer 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i3 IS '扩展 Integer 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_i4 IS '扩展 Integer 4';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f1 IS '扩展 Float 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f2 IS '扩展 Float 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f3 IS '扩展 Float 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_f4 IS '扩展 Float 4';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d1 IS '扩展 Date 1';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d2 IS '扩展 Date 2';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d3 IS '扩展 Date 3';
COMMENT ON COLUMN ${_prefix}sys_file_upload.extend_d4 IS '扩展 Date 4';

View File

@@ -17,4 +17,6 @@
4.1.8
4.1.9
4.2.0
4.2.1
4.2.1
4.2.2
4.2.3

View File

@@ -385,6 +385,29 @@
租户切换失败,没有这个租户!=Tenant switch failed, no tenant!
租户切换失败,只有超级管理员才可以操作!=Tenant switch failed, only super administrator can operate!
# =========== 安全审计 ===========
安全审计=Security Audit
账号密码审计=Account password audit
菜单权限审计=Menu permission audit
用户权限审计=User privileges audit
全部问题=All Problems
未修改初始密码=The initial password was not changed
密码等级是弱或者很弱的=The password level is weak or very weak
使用简单密码=Use simple password
定期未修改密码=Periodically unchanged password
定期未修改密码的账号\ {0}\ 天内不被审查=Periodic accounts with unchanged passwords {0} will not be reviewed within days
长期未登录=Long time not logged in
长期未登录的账号\ {0}\ 天内不被审查=Long time unlogged account \ {0}\ not censored within days
未设置密保=No is set secret guard
审计结果=Audit Result
修改密码时间=Change password time
最后登录时间=Last login time
请设置\ sys.user.passwordModifyCycle\ 参数,指定密码修改周期天数=Please set 'sys.user.passwordModifyCycle' parameter, specify the number of days password change cycle
# =========== 菜单管理 ===========
新增菜单=New menu

View File

@@ -389,6 +389,29 @@
租户切换失败,没有这个租户!=テナント换の失敗が、このテナント!
租户切换失败,只有超级管理员才可以操作!=テナント换に失敗し、スーパーの管理のみを操作できる!
# =========== 安全审计 ===========
安全审计=安全監査
账号密码审计=パスワード監査
菜单权限审计=メニュー権限監査
用户权限审计=ユーザ権限監査
全部问题=すべての問題
未修改初始密码=初期パスワードは未修正
密码等级是弱或者很弱的=暗号レベルは弱いか弱い
使用简单密码=簡単なパスワードを使う
定期未修改密码=定期的にパスワードを修正しない
定期未修改密码的账号\ {0}\ 天内不被审查=定期的にパスワードを変更しないアカウント {0} は日中審査されません
长期未登录=長期未登録
长期未登录的账号\ {0}\ 天内不被审查=長期未ログインのアカウント {0} は日中審査されません
未设置密保=未設置密保
审计结果=監査結果
修改密码时间=パスワードを修正する時間
最后登录时间=最終登録時間
请设置\ sys.user.passwordModifyCycle\ 参数,指定密码修改周期天数=設置 sys.user.passwordModifyCycle パラメータ、パスワードを指定改正周期日数
# =========== 菜单管理 ===========
新增菜单=メニューの追加

View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1611372977925" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1701" width="27" height="22" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M797.909333 219.818667h-91.306666v-21.333334a27.392 27.392 0 0 0-54.784 0v21.333334H371.754667v-21.333334a27.392 27.392 0 1 0-54.784 0v21.333334H225.621333c-30.293333 0-54.784 24.490667-54.784 54.784v523.605333c0 30.293333 24.490667 54.784 54.826667 54.784H797.866667c30.293333 0 54.826667-24.618667 54.826666-54.784V274.602667c0-30.293333-24.490667-54.784-54.826666-54.784zM317.013333 270.805333v19.029334a27.392 27.392 0 0 0 54.784 0v-19.029334h280.064v19.029334a27.392 27.392 0 0 0 54.784 0v-19.029334h95.146667v95.146667H221.866667v-95.146667h95.104z m487.04 533.205334H219.989333V414.592h584.021334v389.418667zM341.333333 512.042667h48.64a24.362667 24.362667 0 0 1 0 48.725333H341.333333a24.32 24.32 0 1 1 0-48.682667V512z m146.090667 0h48.682667a24.362667 24.362667 0 0 1 0 48.725333h-48.64a24.32 24.32 0 0 1 0-48.682667L487.424 512z m146.090667 0h48.768a24.362667 24.362667 0 0 1 0 48.725333h-48.768a24.32 24.32 0 1 1 0-48.682667V512zM341.333333 659.626667h48.768a24.362667 24.362667 0 0 1 0 48.682666H341.333333a24.32 24.32 0 0 1 0-48.682666z m146.176 0h48.682667a24.362667 24.362667 0 0 1 0 48.682666h-48.725333a24.32 24.32 0 0 1 0-48.682666z" fill="#999999" p-id="1702"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -92,6 +92,7 @@ $.extend($.jgrid,{
viewtitle: "View selected row"
},
col : {
all: "Check all",
caption: "Select columns",
bSubmit: "Ok",
bCancel: "Cancel"

View File

@@ -85,6 +85,7 @@ $.extend($.jgrid,{
viewtitle: "View selected row"
},
col : {
all: "全テーマ",
caption: "\u5217\u3092\u8868\u793a\uff0f\u96a0\u3059",
bSubmit: "\u9001\u4fe1",
bCancel: "\u30ad\u30e3\u30f3\u30bb\u30eb"

View File

@@ -91,6 +91,7 @@ $.extend($.jgrid,{
viewtitle: "查看所选记录"
},
col : {
all: "全选",
caption: "选择列",
bSubmit: "确定",
bCancel: "取消"

View File

@@ -84,6 +84,7 @@ $.extend($.jgrid,{
viewtitle: "檢視已選列"
},
col : {
all: "全選",
caption: "選擇欄",
bSubmit: "確定",
bCancel: "取消"

View File

@@ -71,6 +71,10 @@ $(function(){
}
});
});
if ($.fn.strength){
$("#fp_password").strength();
}
$('#forgetForm').validate({
ignore: ":hidden",

View File

@@ -64,6 +64,10 @@ $(function(){
});
});
if ($.fn.strength){
$("#reg_password").strength();
}
$('#registerForm').validate({
ignore: ":hidden",
submitHandler: function(form) {

View File

@@ -22,26 +22,26 @@
</childTable>
</category>
<category value="crud_cloud" label="单表/主子表 (增删改查 Cloud生成 Api/Client">
<template>crud/mapper.xml</template>
<template>crud_cloud/mapper.xml</template>
<template>crud_cloud/entity.xml</template>
<template>crud/dao.xml</template>
<template>crud_cloud/dao.xml</template>
<template>crud_cloud/api.xml</template>
<template>crud_cloud/client.xml</template>
<template>crud_cloud/service.xml</template>
<template>crud/controller.xml</template>
<template>crud/viewList.xml</template>
<template>crud/viewForm.xml</template>
<template>crud_cloud/controller.xml</template>
<template>crud_cloud/viewList.xml</template>
<template>crud_cloud/viewForm.xml</template>
<childTable>
<template>crud/mapper.xml</template>
<template>crud_cloud/mapper.xml</template>
<template>crud_cloud/entity.xml</template>
<template>crud/dao.xml</template>
<template>crud_cloud/dao.xml</template>
</childTable>
</category>
<category value="treeGrid" label="树表/树结构表(增删改查)">
<template>category-ref:crud</template>
</category>
<category value="treeGrid_cloud" label="树表/树结构表(增删改查 Cloud生成 Api/Client">
<template>category-ref:crud</template>
<template>category-ref:crud_cloud</template>
</category>
<category value="service" label="业务层和持久层dao/service不含控制器和视图">
<template>category-ref:dao</template>

View File

@@ -9,12 +9,11 @@
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
*/
package ${packageName}.${moduleName}.web${isNotEmpty(subModuleName)?'.'+subModuleName:''};
<% if(table.isTreeEntity){ %>
<% if (table.isTreeEntity){ %>
import java.util.List;
import java.util.Map;
<% }else{ %>
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
<% } %>
@@ -45,6 +44,9 @@ import com.jeesite.common.codec.EncodeUtils;
<% } %>
import com.jeesite.common.web.BaseController;
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
<% for (child in table.childList){ %>
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${@StringUtils.cap(child.className)};
<% } %>
import ${packageName}.${moduleName}.service${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}Service;
/**
@@ -120,6 +122,20 @@ public class ${ClassName}Controller extends BaseController {
return page;
}
<% } %>
<% for (child in table.childList){ %>
/**
* 查询子表数据
*/
@RequiresPermissions("${permissionPrefix}:view")
@RequestMapping(value = "${@StringUtils.uncap(child.className)}ListData")
@ResponseBody
public Page<${@StringUtils.cap(child.className)}> subListData(${@StringUtils.cap(child.className)} ${@StringUtils.uncap(child.className)}, HttpServletRequest request, HttpServletResponse response) {
${@StringUtils.uncap(child.className)}.setPage(new Page<>(request, response));
Page<${@StringUtils.cap(child.className)}> page = ${className}Service.findSubPage(${@StringUtils.uncap(child.className)});
return page;
}
<% } %>
/**
* 查看编辑表单
@@ -287,12 +303,12 @@ public class ${ClassName}Controller extends BaseController {
*/
@RequiresPermissions("${permissionPrefix}:view")
@RequestMapping(value = "${className}Select")
public String empUserSelect(${ClassName} ${className}, String selectData, Model model) {
public String ${className}Select(${ClassName} ${className}, String selectData, Model model) {
String selectDataJson = EncodeUtils.decodeUrl(selectData);
if (selectDataJson != null && JSONValidator.from(selectDataJson).validate()){
model.addAttribute("selectData", selectDataJson);
}
model.addAttribute("${ClassName}", ${className});
model.addAttribute("${className}", ${className});
return "${lastPackageName}/${viewPrefix}Select";
}
<% } %>

View File

@@ -34,7 +34,7 @@ import com.jeesite.modules.bpm.entity.BpmEntity;
* @author ${functionAuthor}
* @version ${functionVersion}
*/
@Table(name="${table.genTableName}", alias="a", columns={
@Table(name="${table.genTableName}", alias="a", label="${functionNameSimple}信息", columns={
<%
var isBase = false, isData = false,
isTree = false, isExtend = false;

View File

@@ -10,15 +10,18 @@
*/
package ${packageName}.${moduleName}.service${isNotEmpty(subModuleName)?'.'+subModuleName:''};
<% if (table.isTreeEntity){ %>
import java.util.List;
<% } %>
<% if (table.childList.~size > 0){ %>
import org.springframework.beans.factory.annotation.Autowired;
<% } %>
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
<% if (!table.isTreeEntity){ %>
import com.jeesite.common.entity.Page;
<% } %>
import com.jeesite.common.service.${table.isTreeEntity?'Tree':'Crud'}Service;
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
import ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}Dao;
@@ -96,6 +99,20 @@ public class ${ClassName}Service extends ${table.isTreeEntity?'Tree':'Crud'}Serv
return super.findList(${className});
}
<% } %>
<% for (child in table.childList){ %>
/**
* 查询子表分页数据
* @param ${@StringUtils.uncap(child.className)}
* @param ${@StringUtils.uncap(child.className)}.page 分页对象
* @return
*/
public Page<${@StringUtils.cap(child.className)}> findSubPage(${@StringUtils.cap(child.className)} ${@StringUtils.uncap(child.className)}) {
Page<${@StringUtils.cap(child.className)}> page = ${@StringUtils.uncap(child.className)}.getPage();
page.setList(${@StringUtils.uncap(child.className)}Dao.findList(${@StringUtils.uncap(child.className)}));
return page;
}
<% } %>
/**
* 保存数据(插入或更新)

View File

@@ -94,7 +94,11 @@ $('#btnDraft').click(function(){
});
// 流程按钮操作事件
BpmButton = window.BpmButton || {};
BpmButton.init = function(task){ }
BpmButton.init = function(task){
if (task && task.priority){
$('#bpm_priority').val(task.priority).trigger('change'); // 设置下一个任务的优先级
}
}
BpmButton.complete = function($this, task){
$('#status').val(Global.STATUS_AUDIT);
};

View File

@@ -0,0 +1,318 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
<template>
<name>controller</name>
<filePath>${moduleName}/src/main/java/${packageName}/${moduleName}/web/${subModuleName}</filePath>
<fileName>${ClassName}Controller.java</fileName>
<content><![CDATA[
/**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
*/
package ${packageName}.${moduleName}.web${isNotEmpty(subModuleName)?'.'+subModuleName:''};
<% if (table.isTreeEntity){ %>
import java.util.List;
import java.util.Map;
<% }else{ %>
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
<% } %>
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.jeesite.common.config.Global;
<% if(table.isTreeEntity){ %>
import com.jeesite.common.collect.ListUtils;
import com.jeesite.common.collect.MapUtils;
import com.jeesite.common.lang.StringUtils;
import com.jeesite.common.idgen.IdGen;
import com.jeesite.modules.sys.utils.UserUtils;
<% }else{ %>
import com.jeesite.common.entity.Page;
<% } %>
<% if (table.tplCategory == 'crud_select'){ %>
import com.alibaba.fastjson.JSONValidator;
import com.jeesite.common.codec.EncodeUtils;
<% } %>
import com.jeesite.common.web.BaseController;
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
<% for (child in table.childList){ %>
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${@StringUtils.cap(child.className)};
<% } %>
import ${packageName}.${moduleName}.service${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}Service;
/**
* ${functionName}Controller
* @author ${functionAuthor}
* @version ${functionVersion}
*/
@Controller
@RequestMapping(value = "\${adminPath}/${urlPrefix}")
public class ${ClassName}Controller extends BaseController {
@Autowired
private ${ClassName}Service ${className}Service;
/**
* 获取数据
*/
@ModelAttribute
public ${ClassName} get(<% for(pk in table.pkList){ %>${pkLP.index!=1?', ':''}${pk.simpleAttrType} ${pk.simpleAttrName}<% } %>, boolean isNewRecord) {
<% if (table.pkList.~size == 1){ %>
return ${className}Service.get(<% for(pk in table.pkList){ %>${pkLP.index!=1?', ':''}${pk.simpleAttrName}<% } %>, isNewRecord);
<% }else{ %>
${ClassName} ${className} = new ${ClassName}();
<% for(pk in table.pkList){ %>
${className}.set${@StringUtils.cap(pk.simpleAttrName)}(${pk.simpleAttrName});
<% } %>
${className}.setIsNewRecord(isNewRecord);
return ${className}Service.getAndValid(${className});
<% } %>
}
/**
* 查询列表
*/
@RequiresPermissions("${permissionPrefix}:view")
@RequestMapping(value = {"list", ""})
public String list(${ClassName} ${className}, Model model) {
model.addAttribute("${className}", ${className});
return "${lastPackageName}/${viewPrefix}List";
}
/**
* 查询列表数据
*/
@RequiresPermissions("${permissionPrefix}:view")
@RequestMapping(value = "listData")
@ResponseBody
<% if(table.isTreeEntity){ %>
public List<${ClassName}> listData(${ClassName} ${className}) {
if (StringUtils.isBlank(${className}.getParentCode())) {
${className}.setParentCode(${ClassName}.ROOT_CODE);
}
<% for(c in table.columnList){ %>
<% if(c.isQuery == "1" && !c.isTreeEntityColumn && c.attrName != 'status'){ %>
<% if(c.attrType == 'String'){ %>
if (StringUtils.isNotBlank(${className}.${c.attrNameForGetMethod})){
${className}.setParentCode(null);
}
<% }else{ %>
if (${className}.${c.attrNameForGetMethod} != null){
${className}.setParentCode(null);
}
<% } %>
<% } %>
<% } %>
List<${ClassName}> list = ${className}Service.findList(${className});
return list;
}
<% }else{ %>
public Page<${ClassName}> listData(${ClassName} ${className}, HttpServletRequest request, HttpServletResponse response) {
${className}.setPage(new Page<>(request, response));
Page<${ClassName}> page = ${className}Service.findPage(${className});
return page;
}
<% } %>
<% for (child in table.childList){ %>
/**
* 查询子表数据
*/
@RequiresPermissions("${permissionPrefix}:view")
@RequestMapping(value = "${@StringUtils.uncap(child.className)}ListData")
@ResponseBody
public Page<${@StringUtils.cap(child.className)}> subListData(${@StringUtils.cap(child.className)} ${@StringUtils.uncap(child.className)}, HttpServletRequest request, HttpServletResponse response) {
${@StringUtils.uncap(child.className)}.setPage(new Page<>(request, response));
Page<${@StringUtils.cap(child.className)}> page = ${className}Service.findSubPage(${@StringUtils.uncap(child.className)});
return page;
}
<% } %>
/**
* 查看编辑表单
*/
@RequiresPermissions("${permissionPrefix}:view")
@RequestMapping(value = "form")
public String form(${ClassName} ${className}, Model model) {
<% if(table.isTreeEntity){ %>
// 创建并初始化下一个节点信息
${className} = createNextNode(${className});
<% } %>
model.addAttribute("${className}", ${className});
return "${lastPackageName}/${viewPrefix}Form";
}
<% if(table.isTreeEntity){ %>
/**
* 创建并初始化下一个节点信息,如:排序号、默认值
*/
@RequiresPermissions("${permissionPrefix}:edit")
@RequestMapping(value = "createNextNode")
@ResponseBody
public ${ClassName} createNextNode(${ClassName} ${className}) {
if (StringUtils.isNotBlank(${className}.getParentCode())){
${className}.setParent(${className}Service.get(${className}.getParentCode()));
}
if (${className}.getIsNewRecord()) {
${ClassName} where = new ${ClassName}();
where.setParentCode(${className}.getParentCode());
${ClassName} last = ${className}Service.getLastByParentCode(where);
// 获取到下级最后一个节点
if (last != null){
${className}.setTreeSort(last.getTreeSort() + 30);
<% if(table.isPkCustom){ %>
${className}.set${@StringUtils.cap(table.treeViewCodeAttrName)}(IdGen.nextCode(last.get${@StringUtils.cap(table.treeViewCodeAttrName)}()));
}else if (${className}.getParent() != null){
${className}.set${@StringUtils.cap(table.treeViewCodeAttrName)}(${className}.getParent().get${@StringUtils.cap(table.treeViewCodeAttrName)}() + "001");
<% } %>
}
}
// 以下设置表单默认数据
if (${className}.getTreeSort() == null){
${className}.setTreeSort(${ClassName}.DEFAULT_TREE_SORT);
}
return ${className};
}
<% } %>
/**
* 保存数据
*/
@RequiresPermissions("${permissionPrefix}:edit")
@PostMapping(value = "save")
@ResponseBody
public String save(@Validated ${ClassName} ${className}) {
${className}Service.save(${className});
return renderResult(Global.TRUE, text("保存${functionNameSimple}成功!"));
}
<% if(toBoolean(table.optionMap['isHaveDisableEnable'])){ %>
/**
* 停用数据
*/
@RequiresPermissions("${permissionPrefix}:edit")
@RequestMapping(value = "disable")
@ResponseBody
public String disable(${ClassName} ${className}) {
<% if(table.isTreeEntity){ %>
${ClassName} where = new ${ClassName}();
where.setStatus(${ClassName}.STATUS_NORMAL);
where.setParentCodes("," + ${className}.getId() + ",");
long count = ${className}Service.findCount(where);
if (count > 0) {
return renderResult(Global.FALSE, text("该${functionNameSimple}包含未停用的子${functionNameSimple}"));
}
<% } %>
${className}.setStatus(${ClassName}.STATUS_DISABLE);
${className}Service.updateStatus(${className});
return renderResult(Global.TRUE, text("停用${functionNameSimple}成功"));
}
/**
* 启用数据
*/
@RequiresPermissions("${permissionPrefix}:edit")
@RequestMapping(value = "enable")
@ResponseBody
public String enable(${ClassName} ${className}) {
${className}.setStatus(${ClassName}.STATUS_NORMAL);
${className}Service.updateStatus(${className});
return renderResult(Global.TRUE, text("启用${functionNameSimple}成功"));
}
<% } %>
<% if(toBoolean(table.optionMap['isHaveDelete'])){ %>
/**
* 删除数据
*/
@RequiresPermissions("${permissionPrefix}:edit")
@RequestMapping(value = "delete")
@ResponseBody
public String delete(${ClassName} ${className}) {
${className}Service.delete(${className});
return renderResult(Global.TRUE, text("删除${functionNameSimple}成功!"));
}
<% } %>
<% if(table.isTreeEntity){ %>
/**
* 获取树结构数据
* @param excludeCode 排除的Code
* @param isShowCode 是否显示编码true or 1显示在左侧2显示在右侧false or null不显示
* @return
*/
@RequiresPermissions("${permissionPrefix}:view")
@RequestMapping(value = "treeData")
@ResponseBody
public List<Map<String, Object>> treeData(String excludeCode, String isShowCode) {
List<Map<String, Object>> mapList = ListUtils.newArrayList();
List<${ClassName}> list = ${className}Service.findList(new ${ClassName}());
for (int i=0; i<list.size(); i++){
${ClassName} e = list.get(i);
<% if (table.statusExists){ %>
// 过滤非正常的数据
if (!${ClassName}.STATUS_NORMAL.equals(e.getStatus())){
continue;
}
<% } %>
// 过滤被排除的编码(包括所有子级)
if (StringUtils.isNotBlank(excludeCode)){
if (e.getId().equals(excludeCode)){
continue;
}
if (e.getParentCodes().contains("," + excludeCode + ",")){
continue;
}
}
Map<String, Object> map = MapUtils.newHashMap();
map.put("id", e.getId());
map.put("pId", e.getParentCode());
map.put("name", StringUtils.getTreeNodeName(isShowCode, e.get${@StringUtils.cap(table.treeViewCodeAttrName)}(), e.get${@StringUtils.cap(table.treeViewNameAttrName)}()));
mapList.add(map);
}
return mapList;
}
/**
* 修复表结构相关数据
*/
@RequiresPermissions("${permissionPrefix}:edit")
@RequestMapping(value = "fixTreeData")
@ResponseBody
public String fixTreeData(${ClassName} ${className}){
if (!UserUtils.getUser().isAdmin()){
return renderResult(Global.FALSE, "操作失败,只有管理员才能进行修复!");
}
${className}Service.fixTreeData();
return renderResult(Global.TRUE, "数据修复成功");
}
<% } %>
<% if (table.tplCategory == 'crud_select'){ %>
/**
* 列表选择对话框
*/
@RequiresPermissions("${permissionPrefix}:view")
@RequestMapping(value = "${className}Select")
public String ${className}Select(${ClassName} ${className}, String selectData, Model model) {
String selectDataJson = EncodeUtils.decodeUrl(selectData);
if (selectDataJson != null && JSONValidator.from(selectDataJson).validate()){
model.addAttribute("selectData", selectDataJson);
}
model.addAttribute("${className}", ${className});
return "${lastPackageName}/${viewPrefix}Select";
}
<% } %>
}]]>
</content>
</template>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
<template>
<name>dao</name>
<filePath>${moduleName}/src/main/java/${packageName}/${moduleName}/dao/${subModuleName}</filePath>
<fileName>${ClassName}Dao.java</fileName>
<content><![CDATA[
/**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
*/
package ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''};
import com.jeesite.common.dao.${table.isTreeEntity?'Tree':'Crud'}Dao;
import com.jeesite.common.mybatis.annotation.MyBatisDao;
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
/**
* ${functionName}DAO接口
* @author ${functionAuthor}
* @version ${functionVersion}
*/
@MyBatisDao<% if(isNotBlank(table.dataSourceName)){ %>(dataSourceName="${table.dataSourceName}")<% } %>
public interface ${ClassName}Dao extends ${table.isTreeEntity?'Tree':'Crud'}Dao<${ClassName}> {
}]]>
</content>
</template>

View File

@@ -34,7 +34,7 @@ import com.jeesite.modules.bpm.entity.BpmEntity;
* @author ${functionAuthor}
* @version ${functionVersion}
*/
@Table(name="${table.genTableName}", alias="a", columns={
@Table(name="${table.genTableName}", alias="a", label="${functionNameSimple}信息", columns={
<%
var isBase = false, isData = false,
isTree = false, isExtend = false;

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
<template>
<name>mapper</name>
<filePath>${moduleName}/src/main/resources/mappings/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
<fileName>${ClassName}Dao.xml</fileName>
<content><![CDATA[
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${packageName}.${moduleName}.dao${isNotBlank(subModuleName)?'.'+subModuleName:''}.${ClassName}Dao">
<!-- 查询数据
<select id="findList" resultType="${ClassName}">
SELECT \${sqlMap.column.toSql()}
FROM \${sqlMap.table.toSql()}
<where>
\${sqlMap.where.toSql()}
</where>
ORDER BY \${sqlMap.order.toSql()}
</select> -->
</mapper>]]>
</content>
</template>

View File

@@ -2,7 +2,7 @@
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
<template>
<name>service</name>
<filePath>src/main/java/${packageName}/${moduleName}/service/${subModuleName}</filePath>
<filePath>${moduleName}/src/main/java/${packageName}/${moduleName}/service/${subModuleName}</filePath>
<fileName>${ClassName}Service.java</fileName>
<content><![CDATA[
/**
@@ -10,8 +10,9 @@
*/
package ${packageName}.${moduleName}.service${isNotEmpty(subModuleName)?'.'+subModuleName:''};
<% if (table.isTreeEntity){ %>
import java.util.List;
<% } %>
<% if (table.childList.~size > 0){ %>
import org.springframework.beans.factory.annotation.Autowired;
<% } %>
@@ -19,7 +20,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RestController;
<% if (!table.isTreeEntity){ %>
import com.jeesite.common.entity.Page;
<% } %>
import com.jeesite.common.service.${table.isTreeEntity?'Tree':'Crud'}Service;
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
import ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}Dao;
@@ -100,6 +103,20 @@ public class ${ClassName}Service extends ${table.isTreeEntity?'Tree':'Crud'}Serv
return super.findList(${className});
}
<% } %>
<% for (child in table.childList){ %>
/**
* 查询子表分页数据
* @param ${@StringUtils.uncap(child.className)}
* @param ${@StringUtils.uncap(child.className)}.page 分页对象
* @return
*/
public Page<${@StringUtils.cap(child.className)}> findSubPage(${@StringUtils.cap(child.className)} ${@StringUtils.uncap(child.className)}) {
Page<${@StringUtils.cap(child.className)}> page = ${@StringUtils.uncap(child.className)}.getPage();
page.setList(${@StringUtils.uncap(child.className)}Dao.findList(${@StringUtils.uncap(child.className)}));
return page;
}
<% } %>
/**
* 保存数据(插入或更新)

View File

@@ -0,0 +1,139 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
<template>
<name>viewForm</name>
<filePath>${moduleName}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
<fileName>${className}Form.html</fileName>
<content><![CDATA[
<%
var extLibs = '';
if(toBoolean(table.optionMap['isImageUpload']) || toBoolean(table.optionMap['isFileUpload'])){
extLibs = extLibs + ',\'fileupload\'';
}
if(table.childList.~size > 0){
extLibs = extLibs + ',\'dataGrid\'';
}
%>
\<% layout('/layouts/default.html', {title: '${functionNameSimple}管理', libs: ['validate'${extLibs}]}){ %>
<div class="main-content">
<div class="box box-main">
<div class="box-header with-border">
<div class="box-title">
<i class="fa icon-note"></i> \${text(${className}.isNewRecord ? '新增${functionNameSimple}' : '编辑${functionNameSimple}')}
</div>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<${'#'}form:form id="inputForm" model="\${${className}}" action="\${ctx}/${urlPrefix}/save" method="post" class="form-horizontal">
<div class="box-body">
<div class="form-unit">\${text('基本信息')}</div>
<% if(table.isTreeEntity){ %>
<div class="row">
<div class="col-xs-6">
<div class="form-group">
<label class="control-label col-sm-4">\${text('上级${functionNameSimple}')}</label>
<div class="col-sm-8">
<${'#'}form:treeselect id="parent" title="\${text('上级${functionNameSimple}')}"
path="parent.id" labelPath="parent.${table.treeViewNameAttrName}"
url="\${ctx}/${urlPrefix}/treeData?excludeCode=\${${className}.id}"
class="" allowClear="true" canSelectRoot="true" canSelectParent="true"/>
</div>
</div>
</div>
</div>
<% } %>
<% include('/templates/modules/gen/include/formControl.html'){} %>
<% include('/templates/modules/gen/include/formChildTable.html'){} %>
<% if(toBoolean(table.optionMap['isBpmForm'])){ %>
\<% if(isNotBlank(${className}.bpm.taskId)){ %>
<div class="row">
<div class="col-xs-12">
<div class="form-group">
<label class="control-label col-xs-2">${text('审批意见')}</label>
<div class="col-xs-10">
<${'#'}bpm:comment bpmEntity="\${${className}}" />
</div>
</div>
</div>
</div>
\<% } %>
<${'#'}bpm:nextTaskInfo bpmEntity="\${${className}}" />
<% } %>
</div>
<div class="box-footer">
<div class="row">
<div class="col-sm-offset-2 col-sm-10">
<% if(toBoolean(table.optionMap['isBpmForm'])){ %>
\<% if (hasPermi('${permissionPrefix}:edit')){ %>
<${'#'}form:hidden path="status"/>
\<% if (${className}.isNewRecord || ${className}.status == '9'){ %>
<button type="submit" class="btn btn-sm btn-info" id="btnDraft"><i class="fa fa-save"></i> ${text('暂 存')}</button>&nbsp;
\<% } %>
<${'#'}bpm:button bpmEntity="\${${className}}" formKey="${table.optionMap['bpmFormKey']}" completeText="${text('提 交')}"/>
\<% } %>
<% }else{ %>
\<% if (hasPermi('${permissionPrefix}:edit')){ %>
<button type="submit" class="btn btn-sm btn-primary" id="btnSubmit"><i class="fa fa-check"></i> \${text('保 存')}</button>&nbsp;
\<% } %>
<% } %>
<button type="button" class="btn btn-sm btn-default" id="btnCancel" onclick="js.closeCurrentTabPage()"><i class="fa fa-reply-all"></i> \${text('关 闭')}</button>
</div>
</div>
</div>
</${'#'}form:form>
</div>
</div>
\<% } %>
<% include('/templates/modules/gen/include/formChildTableScript.html'){} %>
<script>
<% if(toBoolean(table.optionMap['isBpmForm'])){ %>
// 业务实现草稿按钮
$('#btnDraft').click(function(){
$('#status').val(Global.STATUS_DRAFT);
});
// 流程按钮操作事件
BpmButton = window.BpmButton || {};
BpmButton.init = function(task){
if (task && task.priority){
$('#bpm_priority').val(task.priority).trigger('change'); // 设置下一个任务的优先级
}
}
BpmButton.complete = function($this, task){
$('#status').val(Global.STATUS_AUDIT);
};
// 表单验证提交事件
<% } %>
$("#inputForm").validate({
submitHandler: function(form){
js.ajaxSubmitForm($(form), function(data){
js.showMessage(data.message);
if(data.result == Global.TRUE){
js.closeCurrentTabPage(function(contentWindow){
<% if(table.isTreeEntity){ %>
contentWindow.$('#dataGrid').dataGrid('refreshTreeChildren',
$('#parentCode').val(), '\${${className}.id}');
<% }else{ %>
contentWindow.page();
<% } %>
});
}
}, "json");
}
});
<% if(table.isTreeEntity){ %>
// 选择上级节点回调方法
function treeselectCallback(id, act, index, layero){
if (id == 'parent' && (act == 'ok' || act == 'clear')){
// 创建并初始化下一个节点信息,如:排序号、默认值
$.get('\${ctx}/${urlPrefix}/createNextNode?parentCode='
+$('#parentCode').val(), function(data){
$('#treeSort').val(data.treeSort);
});
}
}
<% } %>
</script>]]>
</content>
</template>

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
<template>
<name>viewList</name>
<filePath>${moduleName}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
<fileName>${className}List.html</fileName>
<content><![CDATA[
\<% layout('/layouts/default.html', {title: '${functionNameSimple}管理', libs: ['dataGrid']}){ %>
<div class="main-content">
<div class="box box-main">
<div class="box-header">
<div class="box-title">
<i class="fa icon-notebook"></i> \${text('${functionNameSimple}管理')}
</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(table.isTreeEntity){ %>
<a href="#" class="btn btn-default" id="btnRefreshTree" title="\${text('刷新')}"><i class="fa fa-refresh"></i> \${text('刷新')}</a>
<a href="#" class="btn btn-default" id="btnExpandTreeNode" title="\${text('展开一级')}"><i class="fa fa-angle-double-down"></i> \${text('展开')}</a>
<a href="#" class="btn btn-default" id="btnCollapseTreeNode" title="\${text('折叠全部')}"><i class="fa fa-angle-double-up"></i> \${text('折叠')}</a>
<% } %>
\<% if(hasPermi('${permissionPrefix}:edit')){ %>
<a href="\${ctx}/${urlPrefix}/form" class="btn btn-default btnTool" title="\${text('新增${functionNameSimple}')}"><i class="fa fa-plus"></i> \${text('新增')}</a>
\<% } %>
<a href="#" class="btn btn-default" id="btnSetting" title="\${text('设置')}"><i class="fa fa-navicon"></i></a>
</div>
</div>
<div class="box-body">
<% include('/templates/modules/gen/include/searchForm.html'){} %>
<table id="dataGrid"></table>
<% if(!table.isTreeEntity){ %>
<div id="dataGridPage"></div>
<% } %>
</div>
</div>
</div>
\<% } %>
<% include('/templates/modules/gen/include/dataGridScript.html'){} %>]]>
</content>
</template>

View File

@@ -22,7 +22,6 @@ cd ..
call mvn clean deploy -Dmaven.test.skip=true -Pdeploy
cd bin
cmd /c msg %username% /time:0 /w "部署完成..."
pause]]>
</content>
</template>

View File

@@ -22,7 +22,6 @@ cd ..
call mvn clean install -Dmaven.test.skip=true -Ppackage
cd bin
cmd /c msg %username% /time:0 /w "打包完成..."
pause]]>
</content>
</template>

View File

@@ -47,7 +47,7 @@
<suspend_validator>false</suspend_validator>
<export_setting>
<export_ddl_setting>
<output_path>db\${module.moduleCode}.sql</output_path>
<output_path>db${'\\'}${module.moduleCode}.sql</output_path>
<encoding>UTF-8</encoding>
<line_feed>CR+LF</line_feed>
<is_open_after_saved>false</is_open_after_saved>
@@ -79,7 +79,7 @@
</export_ddl_setting>
<export_excel_setting>
<category_id>null</category_id>
<output_path>db\${module.moduleCode}.xls</output_path>
<output_path>db${'\\'}${module.moduleCode}.xls</output_path>
<template></template>
<template_path></template_path>
<used_default_template_lang>en</used_default_template_lang>
@@ -95,7 +95,7 @@
<is_open_after_saved>true</is_open_after_saved>
</export_html_setting>
<export_image_setting>
<output_file_path>db\${module.moduleCode}.png</output_file_path>
<output_file_path>db${'\\'}${module.moduleCode}.png</output_file_path>
<category_dir_path></category_dir_path>
<with_category_image>true</with_category_image>
<is_open_after_saved>true</is_open_after_saved>

View File

@@ -22,7 +22,6 @@ cd ..
call mvn clean deploy -Dmaven.test.skip=true -Pdeploy
cd bin
cmd /c msg %username% /time:0 /w "部署完成..."
pause]]>
</content>
</template>

View File

@@ -22,7 +22,6 @@ cd ..
call mvn clean install -Dmaven.test.skip=true -Ppackage
cd bin
cmd /c msg %username% /time:0 /w "打包完成..."
pause]]>
</content>
</template>

View File

@@ -22,7 +22,6 @@ cd ..
call mvn clean package spring-boot:repackage -Dmaven.test.skip=true -U
cd bin
cmd /c msg %username% /time:0 /w "打包完成..."
pause]]>
</content>
</template>

View File

@@ -47,7 +47,7 @@
<suspend_validator>false</suspend_validator>
<export_setting>
<export_ddl_setting>
<output_path>db\${module.moduleCode}.sql</output_path>
<output_path>db${'\\'}${module.moduleCode}.sql</output_path>
<encoding>UTF-8</encoding>
<line_feed>CR+LF</line_feed>
<is_open_after_saved>false</is_open_after_saved>
@@ -79,7 +79,7 @@
</export_ddl_setting>
<export_excel_setting>
<category_id>null</category_id>
<output_path>db\${module.moduleCode}.xls</output_path>
<output_path>db${'\\'}${module.moduleCode}.xls</output_path>
<template></template>
<template_path></template_path>
<used_default_template_lang>en</used_default_template_lang>
@@ -95,7 +95,7 @@
<is_open_after_saved>true</is_open_after_saved>
</export_html_setting>
<export_image_setting>
<output_file_path>db\${module.moduleCode}.png</output_file_path>
<output_file_path>db${'\\'}${module.moduleCode}.png</output_file_path>
<category_dir_path></category_dir_path>
<with_category_image>true</with_category_image>
<is_open_after_saved>true</is_open_after_saved>

View File

@@ -2,7 +2,7 @@
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
<template>
<name>pom</name>
<filePath>${module.moduleCode}</filePath>
<filePath>${module.moduleCode}/${module.moduleCode}</filePath>
<fileName>pom.xml</fileName>
<charset></charset>
<content><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
@@ -12,41 +12,165 @@
<parent>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId>
<artifactId>jeesite-cloud-parent</artifactId>
<version>${jeesiteVersion}-SNAPSHOT</version>
<relativePath>../../parent/pom.xml</relativePath>
<relativePath>../../../parent/pom.xml</relativePath>
</parent>
<artifactId>jeesite-module-${module.moduleCode}</artifactId>
<packaging>jar</packaging>
<artifactId>jeesite-cloud-module-${module.moduleCode}</artifactId>
<packaging>war</packaging>
<name>JeeSite Module ${module.moduleName}</name>
<name>JeeSite Cloud Module ${module.moduleName}</name>
<url>http://jeesite.com</url>
<inceptionYear>2013-Now</inceptionYear>
<properties>
<finalName>web</finalName><!-- war包的名称 -->
<start-class>com.jeesite.modules.${@StringUtils.cap(module.moduleCode)}Application</start-class>
<!-- environment setting -->
<eclipse-plugin-download-sources>false</eclipse-plugin-download-sources>
<eclipse-plugin-download-javadocs>false</eclipse-plugin-download-javadocs>
<!-- docker setting -->
<docker.run.port>8989:8989</docker.run.port>
</properties>
<dependencies>
<!-- 服务发现 -->
<!-- <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency> -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 配置中心 -->
<!-- <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency> -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 链路追踪服务 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<!-- 在线文档 -->
<dependency>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-module-core</artifactId>
<artifactId>jeesite-module-swagger</artifactId>
<version>\${project.parent.version}</version>
</dependency>
<!-- 分布式事务
<dependency>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-cloud-module-txlcn-client</artifactId>
<version>\${project.parent.version}</version>
</dependency>
<dependency>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-cloud-module-seata-client</artifactId>
<version>\${project.parent.version}</version>
</dependency> -->
<!-- 核心模块 -->
<dependency>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-cloud-module-core-client</artifactId>
<version>\${project.parent.version}</version>
</dependency>
<dependency>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-cloud-module-${module.moduleCode}-client</artifactId>
<version>\${project.parent.version}</version>
</dependency>
<!-- 业务流程
<dependency>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-cloud-module-bpm-client</artifactId>
<version>\${project.parent.version}</version>
</dependency> -->
<!-- Spring Boot Tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency> -->
<!-- 自定义jar依赖包演示
<dependency>
<groupId>com.jeesite</groupId>
<artifactId>test-core</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>\${project.basedir}/src/main/webapp/WEB-INF/lib/test-core-1.0.jar</systemPath>
</dependency> -->
</dependencies>
<build>
<finalName>\${finalName}</finalName>
<outputDirectory>\${project.basedir}/src/main/webapp/WEB-INF/classes/</outputDirectory>
<plugins>
<!-- Spring Boot -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
</plugin> -->
<!-- 打包插件, war包名称不带版本号 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<!-- <packagingExcludes></packagingExcludes>
<warSourceExcludes></warSourceExcludes> -->
<webappDirectory>\${project.build.directory}/\${project.artifactId}</webappDirectory>
<warName>\${finalName}</warName>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
</configuration>
</plugin>
<!-- Eclipse插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<downloadSources>\${eclipse-plugin-download-sources}</downloadSources>
<downloadJavadocs>\${eclipse-plugin-download-javadocs}</downloadJavadocs>
<wtpContextName>\${finalName}</wtpContextName>
<wtpversion>2.0</wtpversion>
<jeeversion>6.0</jeeversion>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
</plugins>
</pluginManagement>
</build>
<developers>
@@ -63,6 +187,25 @@
<name>JeeSite</name>
<url>http://jeesite.com</url>
</organization>
<repositories>
<repository>
<id>aliyun-repos</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>false</enabled></snapshots>
</repository>
<repository>
<id>jeesite-repos</id>
<url>http://maven.jeesite.net/repository/maven-public</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>aliyun-repos</id>
<url>https://maven.aliyun.com/repository/public</url>
</pluginRepository>
</pluginRepositories>
</project>
]]>

View File

@@ -3,7 +3,7 @@
<template>
<name>logback-spring</name>
<filePath>${module.moduleCode}/${module.moduleCode}/src/main/resources/config</filePath>
<fileName>logback-spring.yml</fileName>
<fileName>logback-spring.xml</fileName>
<content><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">

View File

@@ -9,12 +9,11 @@
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
*/
package ${packageName}.${moduleName}.web${isNotEmpty(subModuleName)?'.'+subModuleName:''};
<% if(table.isTreeEntity){ %>
<% if (table.isTreeEntity){ %>
import java.util.List;
import java.util.Map;
<% }else{ %>
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
<% } %>
@@ -39,6 +38,9 @@ import com.jeesite.common.entity.Page;
<% } %>
import com.jeesite.common.web.BaseController;
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
<% for (child in table.childList){ %>
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${@StringUtils.cap(child.className)};
<% } %>
import ${packageName}.${moduleName}.service${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}Service;
/**
@@ -114,6 +116,20 @@ public class ${ClassName}Controller extends BaseController {
return page;
}
<% } %>
<% for (child in table.childList){ %>
/**
* 查询子表数据
*/
@RequiresPermissions("${permissionPrefix}:view")
@RequestMapping(value = "${@StringUtils.uncap(child.className)}ListData")
@ResponseBody
public Page<${@StringUtils.cap(child.className)}> subListData(${@StringUtils.cap(child.className)} ${@StringUtils.uncap(child.className)}, HttpServletRequest request, HttpServletResponse response) {
${@StringUtils.uncap(child.className)}.setPage(new Page<>(request, response));
Page<${@StringUtils.cap(child.className)}> page = ${className}Service.findSubPage(${@StringUtils.uncap(child.className)});
return page;
}
<% } %>
/**
* 查看编辑表单

View File

@@ -10,14 +10,17 @@
*/
package ${packageName}.${moduleName}.service${isNotEmpty(subModuleName)?'.'+subModuleName:''};
<% if (table.isTreeEntity){ %>
import java.util.List;
<% } %>
<% if (table.childList.~size > 0){ %>
import org.springframework.beans.factory.annotation.Autowired;
<% } %>
import org.springframework.stereotype.Service;
<% if (!table.isTreeEntity){ %>
import com.jeesite.common.entity.Page;
<% } %>
import com.jeesite.common.service.${table.isTreeEntity?'Tree':'Query'}Service;
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
import ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}Dao;
@@ -84,6 +87,20 @@ public class ${ClassName}Service extends ${table.isTreeEntity?'Tree':'Query'}Ser
return super.findList(${className});
}
<% } %>
<% for (child in table.childList){ %>
/**
* 查询子表分页数据
* @param ${@StringUtils.uncap(child.className)}
* @param ${@StringUtils.uncap(child.className)}.page 分页对象
* @return
*/
public Page<${@StringUtils.cap(child.className)}> findSubPage(${@StringUtils.cap(child.className)} ${@StringUtils.uncap(child.className)}) {
Page<${@StringUtils.cap(child.className)}> page = ${@StringUtils.uncap(child.className)}.getPage();
page.setList(${@StringUtils.uncap(child.className)}Dao.findList(${@StringUtils.uncap(child.className)}));
return page;
}
<% } %>
}]]>
</content>

View File

@@ -50,7 +50,7 @@ else {
</div>
<div class="copyright">
&copy; ${@DateUtils.getYear()} ${@Global.getConfig('productName')} - Powered By <a
href="http://jeesite.com">JeeSite ${@Global.getProperty('jeesiteVersion')}</a>
href="http://jeesite.com" target="_blank">JeeSite ${@Global.getProperty('jeesiteVersion')}</a>
</div>
</div>
<% } %>

Some files were not shown because too many files have changed in this diff Show More