Merge branch 'v4.2_dev' into master

This commit is contained in:
thinkgem
2020-08-13 14:51:20 +08:00
30 changed files with 115 additions and 24 deletions

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId>
<version>4.2.0-SNAPSHOT</version>
<version>4.2.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
@@ -95,6 +95,16 @@
<version>${dom4j.version}</version>
</dependency>
<!-- jdk11 JAXB module -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
</dependency>
<!-- XPath xml -->
<dependency>
<groupId>jaxen</groupId>

View File

@@ -43,7 +43,11 @@ public class DesUtils {
return "";
}
if ("Base64".equals(secretKey)) {
return EncodeUtils.decodeBase64String(data);
try {
return EncodeUtils.decodeBase64String(data);
}catch (IllegalArgumentException e) {
return "";
}
}
String[] ks = StringUtils.split(secretKey, ",");
if (ks.length >= 3){

View File

@@ -46,6 +46,27 @@ public class ListUtils extends org.apache.commons.collections.ListUtils {
return false;
}
/**
* 是否包含字符串
* @param strs 验证字符串组
* @param strs2 字符串组
* @return 包含返回true
*/
public static boolean inString(List<String> strs, List<String> strs2){
if (strs != null && strs2 != null){
for (String s : strs){
if (s != null) {
for (String s2 : strs2){
if (StringUtils.trim(s).equals(StringUtils.trim(s2))){
return true;
}
}
}
}
}
return false;
}
public static <E> ArrayList<E> newArrayList() {
return new ArrayList<E>();
}

View File

@@ -37,6 +37,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import com.jeesite.common.callback.MethodCallback;
import com.jeesite.common.codec.EncodeUtils;
import com.jeesite.common.collect.ListUtils;
import com.jeesite.common.collect.MapUtils;
import com.jeesite.common.lang.DateUtils;
@@ -478,6 +479,10 @@ public class ExcelImport implements Closeable {
// 参数Exception ex, int rowNum, int columnNum
exceptionCallback.execute(ex, i, column);
}
// 导入的数据进行 xss 过滤
if (val != null && val instanceof String) {
val = EncodeUtils.xssFilter(val.toString());
}
// set entity value
if (StringUtils.isNotBlank(ef.attrName())){
ReflectUtils.invokeSetter(e, ef.attrName(), val);

View File

@@ -1647,8 +1647,8 @@
} else {
if(lay(btn).hasClass(DISABLED)) return that.hint('不在有效日期或时间范围内');
}
that.done();
that.setValue(that.parse()).remove()
that.done();
}
};
active[type] && active[type]();

View File

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

View File

@@ -335,10 +335,11 @@ shiro:
# 登录提交信息加密(如果不需要加密,设置为空即可)
loginSubmit:
# 登录提交信息安全Key加密用户名、密码、验证码后再提交key设置为3个用逗号分隔加密方式DES
# v4.2.0+ 支持 Base64 加密方式,方便移动端及第三方系统处理认证,可直接设置 Key 为 Base64
# 加密用户名、密码、验证码后再提交key设置为3个用逗号分隔加密方式DES4.1.9及之前版本默认设置)
# v4.2.0+ 开始支持 Base64 加密方式,方便移动端及第三方系统处理认证,可直接设置 Key 为 Base644.2.0+默认设置)
#secretKey: thinkgem,jeesite,com
secretKey: Base64
#secretKey: ~
# 记住我密钥设置,你可以通过 com.jeesite.test.RememberMeKeyGen 类快速生成一个秘钥。
# 若不设置,则每次启动系统后自动生成一个新秘钥,这样会导致每次重启后,客户端记录的用户信息将失效。

View File

@@ -16,4 +16,5 @@
4.1.7
4.1.8
4.1.9
4.2.0
4.2.0
4.2.1

View File

@@ -20,6 +20,7 @@
操作=Actions
更多=More
更多操作=More action
设置=Setting
基本信息=Basic information
详细信息=Detail information

View File

@@ -20,6 +20,7 @@
操作=操作
更多=さらに多
更多操作=他の操作
设置=設置
基本信息=基本情報
详细信息=詳細情報

View File

@@ -24454,6 +24454,7 @@ UE.plugin.register('simpleupload', function (){
var w = containerBtn.offsetWidth || 20,
h = containerBtn.offsetHeight || 20,
btnIframe = document.createElement('iframe'),
btnIframe2 = document.createElement('iframe'), // ThinkGem
btnStyle = 'display:block;width:' + w + 'px;height:' + h + 'px;overflow:hidden;border:0;margin:0;padding:0;position:absolute;top:0;left:0;filter:alpha(opacity=0);-moz-opacity:0;-khtml-opacity: 0;opacity: 0;cursor:pointer;';
domUtils.on(btnIframe, 'load', function(){
@@ -24471,9 +24472,13 @@ UE.plugin.register('simpleupload', function (){
'style="' + btnStyle + '">' +
'<input id="edui_input_' + timestrap + '" type="file" accept="image/*" name="' + me.options.imageFieldName + '" ' +
'style="' + btnStyle + '">' +
'</form>' +
'<iframe id="edui_iframe_' + timestrap + '" name="edui_iframe_' + timestrap + '" style="display:none;width:0;height:0;border:0;margin:0;padding:0;position:absolute;"></iframe>';
'</form>';// +
//'<iframe id="edui_iframe_' + timestrap + '" name="edui_iframe_' + timestrap + '" style="display:none;width:0;height:0;border:0;margin:0;padding:0;position:absolute;"></iframe>';
// 解决因 iframe 嵌套问题 session 丢失 ThinkGem
btnIframe2.id = 'edui_iframe_' + timestrap;
btnIframe2.name = 'edui_iframe_' + timestrap;
wrapper.className = 'edui-' + me.options.theme;
wrapper.id = me.ui.id + '_iframeupload';
btnIframeBody.style.cssText = btnStyle;
@@ -24488,7 +24493,7 @@ UE.plugin.register('simpleupload', function (){
var form = btnIframeDoc.getElementById('edui_form_' + timestrap);
var input = btnIframeDoc.getElementById('edui_input_' + timestrap);
var iframe = btnIframeDoc.getElementById('edui_iframe_' + timestrap);
var iframe = btnIframe2;//btnIframeDoc.getElementById('edui_iframe_' + timestrap);
domUtils.on(input, 'change', function(){
if(!input.value) return;
@@ -24573,6 +24578,10 @@ UE.plugin.register('simpleupload', function (){
btnIframe.style.cssText = btnStyle;
containerBtn.appendChild(btnIframe);
// 解决因 iframe 嵌套问题 session 丢失 ThinkGem
btnIframe2.style.cssText = 'display:none;width:0;height:0;border:0;margin:0;padding:0;position:absolute;';
containerBtn.appendChild(btnIframe2);
}
return {

View File

@@ -22,6 +22,7 @@
\<% 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">

View File

@@ -19,6 +19,7 @@
<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>
<% } %>
<a href="#" class="btn btn-default" id="btnSetting" title="\${text('设置')}"><i class="fa fa-navicon"></i></a>
</div>
</div>
<div class="box-body">

View File

@@ -7,6 +7,9 @@
<% if (@ListUtils.inString('zTree', libs!)){ %>
<script src="${ctxStatic}/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js?${_version}"></script>
<% } %>
<% if (@ListUtils.inString(['tabPage', 'dataGrid', 'fileupload'], libs!)){ %>
<script src="${ctxStatic}/jquery/jquery-ui-sortable-1.12.1.min.js"></script>
<% } %>
<% if (@ListUtils.inString('tabPage', libs!)){ %>
<script src="${ctxStatic}/wdScrollTab/js/TabPanel.js?${_version}"></script>
<script src="${ctxStatic}/wdScrollTab/js/TabPanel.extend.js?${_version}"></script>
@@ -34,7 +37,6 @@
<script src="${ctxStatic}/webuploader/0.1/webuploader.js?${_version}"></script>
<script src="${ctxStatic}/webuploader/0.1/webuploader.extend.js?${_version}"></script>
<script src="${ctxStatic}/webuploader/0.1/i18n/${lang()}.js?${_version}"></script>
<script src="${ctxStatic}/jquery/jquery-ui-sortable-1.12.1.min.js"></script>
<% } %>
<% if (@ListUtils.inString('ueditor', libs!)){ %>
<script src="${ctxStatic}/ueditor/1.4/ueditor.config.js?${_version}"></script>

View File

@@ -10,6 +10,7 @@
<% if(hasPermi('msg:msgInner:edit')){ %>
<a href="${ctx}/msg/msgInner/form" class="btn btn-default btnTool" title="${text('新增')}"><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">

View File

@@ -13,6 +13,7 @@
<% if(hasPermi('sys:area:edit')){ %>
<a href="${ctx}/sys/area/form" class="btn btn-default btnTool" title="新增区域"><i class="fa fa-plus"></i> 新增</a>
<% } %>
<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
</div>
</div>
<div class="box-body">

View File

@@ -13,6 +13,7 @@
<% if(hasPermi('sys:company:edit')){ %>
<a href="${ctx}/sys/company/form" class="btn btn-default btnTool" title="${text('新增公司')}"><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">

View File

@@ -6,7 +6,8 @@
<i class="fa fa-bug"></i> 访问日志
</div>
<div class="box-tools pull-right">
<a href="#" class="btn btn-default" id="btnSearch" title="查询"><i class="fa fa-filter"></i> 查询</a>
<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></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">
@@ -67,10 +68,12 @@
</div>
<div class="control-inline" style="width:75px;">
<select onchange="js.quickSelectDate(this.value, 'createDate_gte', 'createDate_lte');" class="form-control">
<option value="0">&nbsp;</option><option value="1">今日</option><option value="2">本周</option>
<option value="0">&nbsp;</option><option value="1">今日</option>
<option value="2">本周</option><option value="2|7">上周</option>
<option value="3">本月</option><option value="4">本季度</option>
<option value="5">上个月</option><option value="5|3">上3个月</option>
<option value="6">1个</option><option value="6|3">前3个月</option>
<option value="5">1个月</option><option value="5|3">上3个月</option>
<option value="1|7">1个</option><option value="6">近1个月</option>
<option value="6|3">近3个月</option>
</select>
</div>
</div>

View File

@@ -13,6 +13,7 @@
<% if(hasPermi('sys:office:edit')){ %>
<a href="${ctx}/sys/office/form" class="btn btn-default btnTool" title="${text('新增机构')}"><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">

View File

@@ -7,6 +7,7 @@
</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>
<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
</div>
</div>
<div class="box-body">

View File

@@ -10,6 +10,7 @@
<% if(hasPermi('sys:post:edit')){ %>
<a href="${ctx}/sys/post/form" class="btn btn-default btnTool" title="${text('新增岗位')}"><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">

View File

@@ -14,6 +14,7 @@
<a href="${ctx}/sys/corpAdmin/form?corpCode_=${user.currentUser.corpCode_}&corpName_=${user.currentUser.corpName_}&op=addAdmin" class="btn btn-default btnTool" title="${text('新增管理员')}"><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">

View File

@@ -17,6 +17,7 @@
<ul class="dropdown-menu">
<li><a href="javascript:" id="btnExport"><i class="glyphicon glyphicon-export"></i> ${text('导出')}</a></li>
<li><a href="javascript:" id="btnImport"><i class="glyphicon glyphicon-import"></i> ${text('导入')}</a></li>
<li><a href="javascript:" id="btnSetting"><i class="fa fa-navicon"></i> ${text('设置')}</a></li>
</ul>
</div>
</div>
@@ -126,7 +127,7 @@ $('#dataGrid').dataGrid({
{header:'${text("状态")}', name:'status', index:'a.status', width:140, align:"center", formatter: function(val, obj, row, act){
return js.getDictLabel(${@DictUtils.getDictListJson('sys_status')}, val, '未知', true);
}},
{header:'${text("操作")}', name:'actions', width:260, sortable:false, title:false, formatter: function(val, obj, row, act){
{header:'${text("操作")}', name:'actions', width:270, sortable:false, title:false, formatter: function(val, obj, row, act){
var actions = [];
<% if(hasPermi('sys:empUser:edit')){ %>
actions.push('<a href="${ctx}/sys/empUser/form?userCode='+row.userCode+'&op=edit" class="btnList" title="${text("编辑用户")}"><i class="fa fa-pencil"></i></a>&nbsp;');

View File

@@ -9,6 +9,7 @@
<div class="box-tools pull-right">
<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
<a href="#" class="btn btn-default" id="btnAddAdmin" title="${text('新增')}"><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">

View File

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

View File

@@ -6,12 +6,12 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.8.RELEASE</version>
<version>2.2.9.RELEASE</version>
</parent>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId>
<version>4.2.0-SNAPSHOT</version>
<version>4.2.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>JeeSite Parent</name>
@@ -373,6 +373,12 @@
<pluginRepository>
<id>aliyun-repos</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>false</enabled></snapshots>
</pluginRepository>
<pluginRepository>
<id>jeesite-repos</id>
<url>http://maven.jeesite.net/repository/maven-public</url>
</pluginRepository>
</pluginRepositories>

View File

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

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId>
<version>4.2.0-SNAPSHOT</version>
<version>4.2.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
@@ -159,6 +159,12 @@
<pluginRepository>
<id>aliyun-repos</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>false</enabled></snapshots>
</pluginRepository>
<pluginRepository>
<id>jeesite-repos</id>
<url>http://maven.jeesite.net/repository/maven-public</url>
</pluginRepository>
</pluginRepositories>

View File

@@ -447,10 +447,11 @@ shiro:
#
# # 登录提交信息加密(如果不需要加密,设置为空即可)
# loginSubmit:
# # 登录提交信息安全Key加密用户名、密码、验证码后再提交key设置为3个用逗号分隔加密方式DES
# # v4.2.0+ 支持 Base64 加密方式,方便移动端及第三方系统处理认证,可直接设置 Key 为 Base64
# # 加密用户名、密码、验证码后再提交key设置为3个用逗号分隔加密方式DES4.1.9及之前版本默认设置)
# # v4.2.0+ 开始支持 Base64 加密方式,方便移动端及第三方系统处理认证,可直接设置 Key 为 Base644.2.0+默认设置)
# #secretKey: thinkgem,jeesite,com
# secretKey: Base64
# #secretKey: ~
# 记住我密钥设置,你可以通过 com.jeesite.test.RememberMeKeyGen 类快速生成一个秘钥。
# 若不设置,则每次启动系统后自动生成一个新秘钥,这样会导致每次重启后,客户端记录的用户信息将失效。

View File

@@ -11,6 +11,7 @@
<a href="${ctx}/test/testData/form" class="btn btn-default btnTool" title="${text('新增数据')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
<% } %>
<a href="#" class="btn btn-default" id="btnTrunsTest" title="事务测试"><i class="fa fa-refresh"></i> 事务测试</a>
<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
</div>
</div>
<div class="box-body">
@@ -123,7 +124,9 @@ $('#dataGrid').dataGrid({
columnModel: [
{header:'${text("单行文本")}', name:'testInput', index:'a.test_input', width:250, align:"left", frozen:true, formatter: function(val, obj, row, act){
return '<a href="${ctx}/test/testData/form?id='+row.id+'" class="btnList" data-title="${text("编辑数据")}">'+(val||row.id)+'</a>';
}},
}, searchoptions: { dataInit: function (element) {
$(element).attr('form', 'searchForm').attr('name', 'testInput2');
}}},
{header:'${text("多行文本")}', name:'testTextarea', index:'a.test_textarea', width:150, align:"left"},
{header:'${text("下拉框")}', name:'testSelect', index:'a.test_select', width:150, align:"center", formatter: function(val, obj, row, act){
return js.getDictLabel(${@DictUtils.getDictListJson('sys_menu_type')}, val, '${text("未知")}', true);
@@ -215,6 +218,12 @@ $('#dataGrid').dataGrid({
// $("#dataGrid").parent().append("<div class=\"ml10\">没有符合数据</div>");
// }
}
})
// 开启表头下放搜索工具条
//.jqGrid('filterToolbar')
// 列表设置显示隐藏或排序后的事件(可用于设置持久化)
.on('jqGridRemapColumns',function(){
log($('#dataGrid').dataGrid('getParam', 'columnModel'));
});
$("#btnTrunsTest").click(function(){
js.ajaxSubmit("${ctx}/test/testData/transTest", function(data){