Pre Merge pull request !7 from zhaixiaoxian/master

pull/7/MERGE
zhaixiaoxian 2 years ago committed by Gitee
commit 2b064a77e6
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F

@ -1,12 +1,24 @@
新版本已出强烈推荐https://github.com/zhangdaiscott/jeecg-boot
======================================================================
![JEECG](https://static.oschina.net/uploads/img/201905/24184932_ak9D.png "Jeecg快速开发平台") ![JEECG](https://static.oschina.net/uploads/img/201905/24184932_ak9D.png "Jeecg快速开发平台")
JEECG 微云快速开发平台 JEECG 微云快速开发平台
=============== ===============
当前最新版本: 3.8发布日期20181024 当前最新版本: 4.0发布日期20190805
[![AUR](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://github.com/zhangdaiscott/jeecg/blob/master/LICENSE)
[![](https://img.shields.io/badge/Author-JEECG团队-orange.svg)](http://www.jeecg.com)
[![](https://img.shields.io/badge/version-2.0-brightgreen.svg)](https://github.com/zhangdaiscott/jeecg)
[![GitHub stars](https://img.shields.io/github/stars/zhangdaiscott/jeecg.svg?style=social&label=Stars)](https://github.com/zhangdaiscott/jeecg)
[![GitHub forks](https://img.shields.io/github/forks/zhangdaiscott/jeecg.svg?style=social&label=Fork)](https://github.com/zhangdaiscott/jeecg)
JEECG全新版本已经发布强烈建议(Spring2.x+Vue+Antd 前后端分离) [jeecg-boot](https://github.com/zhangdaiscott/jeecg-boot)
前言: 前言:
----------------------------------- -----------------------------------
@ -49,6 +61,21 @@ JEECG快速开发平台可以应用在任何J2EE项目的开发中尤其
* 21.支持二级管理员,权限细化管理 * 21.支持二级管理员,权限细化管理
* 22.代码生成器支持resutful接口生成 * 22.代码生成器支持resutful接口生成
技术文档
-----------------------------------
* [在线演示](http://demo.jeecg.com)
* [开发环境搭建入门](http://idoc.jeecg.com/1275933)
* [开发文档](http://idoc.jeecg.com)
* [入门常见问题贴](http://bbs.jeecg.com/forum.php?mod=viewthread&tid=1830&extra=page%3D1)
* [JEECG 实战视频教程](https://edu.csdn.net/combo/detail/905)
* [本地maven仓库下载](https://gitee.com/jeecg/jeecg-local-maven)
* [非Maven版本下载](https://github.com/zhangdaiscott/jeecg-nomaven)
* [JEECG 版本日志](http://bbs.jeecg.com/forum.php?mod=viewthread&tid=365&extra=page%3D1)
JEECG 功能特点 JEECG 功能特点
----------------------------------- -----------------------------------
* 采用SpringMVC + Hibernate + Minidao(类Mybatis) + Easyui(UI库)+ Jquery + Boostrap + Ehcache + Redis + Ztree + Vue + Boostrap-table + ElementUI等基础架构</br> * 采用SpringMVC + Hibernate + Minidao(类Mybatis) + Easyui(UI库)+ Jquery + Boostrap + Ehcache + Redis + Ztree + Vue + Boostrap-table + ElementUI等基础架构</br>
@ -83,7 +110,7 @@ JEECG 功能特点
* <b>技术点二十五:</b>支持二级管理员,权限细化管理</br> * <b>技术点二十五:</b>支持二级管理员,权限细化管理</br>
* <b>技术点二十六:</b>代码生成器支持resutful接口生成</br> * <b>技术点二十六:</b>代码生成器支持resutful接口生成</br>
* JEECG V3.7.8, 经过了专业压力测试,性能测试,保证后台数据的准确性和页面访问速度</br> * JEECG V4.0, 经过了专业压力测试,性能测试,保证后台数据的准确性和页面访问速度</br>
* 支持多种浏览器: IE, 火狐, Google 等</br> * 支持多种浏览器: IE, 火狐, Google 等</br>
* 支持数据库: Mysql,Oracle,Postgre,SqlServer等</br> * 支持数据库: Mysql,Oracle,Postgre,SqlServer等</br>
* 基础权限: 用户,角色,菜单权限,按钮权限,数据权限</br> * 基础权限: 用户,角色,菜单权限,按钮权限,数据权限</br>
@ -93,16 +120,6 @@ JEECG 功能特点
* 要求JDK1.6+</br> * 要求JDK1.6+</br>
技术文档
-----------------------------------
* [在线演示](http://demo.jeecg.com)
* [JEECG 入门开发环境搭建](http://jeecg3.mydoc.io/?t=286008)
* [JEECG 在线开发文档](http://jeecg3.mydoc.io)
* [JEECG 常见问题贴](http://www.jeecg.org/forum.php?mod=viewthread&tid=1830&extra=page%3D1)
* [JEECG 本地maven仓库下载](https://gitee.com/jeecg/jeecg-local-maven)
* [非Maven版本下载](https://github.com/zhangdaiscott/jeecg-nomaven)
* [JEECG 版本日志](http://www.jeecg.org/forum.php?mod=viewthread&tid=365&extra=page%3D1)
* JEECG 视频教程(网盘密码rxk3): [https://pan.baidu.com/s/1ONWNrtKbNY3gI3TztgtOJA](https://pan.baidu.com/s/1ONWNrtKbNY3gI3TztgtOJA)
工程说明 工程说明
@ -113,8 +130,8 @@ JEECG 功能特点
技术交流 技术交流
----------------------------------- -----------------------------------
* QQ交流群 ⑦286263896、其他群(全满)</br> * QQ交流群 ⑦286263896、其他群(全满)</br>
* 官方论坛: [http://www.jeecg.org](http://www.jeecg.org) * 官方网站: [http://www.jeecg.com](http://www.jeecg.com)
* 官方博客: [http://blog.csdn.net/zhangdaiscott](http://blog.csdn.net/zhangdaiscott) * 官方博客: [https://jeecg.blog.csdn.net](https://jeecg.blog.csdn.net)
* 关注官方微信公众号,获取更多资讯 * 关注官方微信公众号,获取更多资讯
![输入图片说明](https://static.oschina.net/uploads/img/201807/09172938_ltsb.jpg "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201807/09172938_ltsb.jpg "在这里输入图片标题")
@ -122,7 +139,7 @@ JEECG 功能特点
社区荣誉 社区荣誉
----------------------------------- -----------------------------------
* 开源社区http://www.jeecg.org * 官网http://www.jeecg.com
* ★2012年JEECG在Google Code上开源; * ★2012年JEECG在Google Code上开源;
* ★2012年底开源项目JEECG被"ITeye专家访谈"; * ★2012年底开源项目JEECG被"ITeye专家访谈";

File diff suppressed because it is too large Load Diff

@ -5,17 +5,17 @@
1.oracle 导入命令 1.oracle 导入命令
说明: jeecg脚本导出用户是scott 说明: jeecg脚本导出用户是scott
imp scott/tiger@orcl file=jeecg_3.8_oracle11g.dmp imp scott/tiger@orcl file=jeecg_4.0_oracle11g.dmp
导入其他用户的表 导入其他用户的表
imp jeecgos/jeecgos@orcl file=/opt/datatmp/jeecg_3.8_oracle11g.dmp fromuser=scott touser=jeecgos ignore=y commit=y buffer=300000000 feedback=10000 imp jeecgos/jeecgos@orcl file=/opt/datatmp/jeecg_4.0_oracle11g.dmp fromuser=scott touser=jeecgos ignore=y commit=y buffer=300000000 feedback=10000
2. oracle、SqlServer脚步索引会有部分丢失为了系统性能请自行补加索引。 2. oracle、SqlServer脚步索引会有部分丢失为了系统性能请自行补加索引。
3. jeecg系统数据库切换配置方法参考常见问题贴29 3. jeecg系统数据库切换配置方法参考常见问题贴29
http://www.jeecg.org/forum.php?mod=viewthread&tid=1830&extra=page%3D1 http://bbs.jeecg.com/forum.php?mod=viewthread&tid=1830&extra=page%3D1
4.老版本数据库增量升级 4.老版本数据库增量升级
执行老版本升级SQL脚本 执行老版本升级SQL脚本
3.7.8升级到3.8 3.8升级到4.0
docs/老版本增量升级/jeecg_mysql-3.7.8-update-3.8.sql docs/老版本增量升级/jeecg_mysql-3.8-update-4.0.sql

@ -1,19 +0,0 @@
INSERT INTO `t_s_function`(`ID`, `functioniframe`, `functionlevel`, `functionname`, `functionorder`, `functionurl`, `parentfunctionid`, `iconid`, `desk_iconid`, `functiontype`, `function_icon_style`, `create_by`, `create_name`, `update_by`, `update_date`, `create_date`, `update_name`) VALUES ('40288102653ced6601653cee431c0001', NULL, 1, '面板拖拽', '37', 'jeecgListDemoController.do?goDraggablePanels', '4028f6815af3ce54015af3d1ad610001', '8a8ab0b246dc81120146dc8180460000', '8a8ab0b246dc81120146dc8180dd001e', 0, 'fa-clone', 'admin', '管理员', 'admin', '2018-08-15 18:17:15', '2018-08-15 17:32:52', '管理员');
INSERT INTO `t_s_muti_lang`(`id`, `lang_key`, `lang_context`, `lang_code`, `create_date`, `create_by`, `create_name`, `update_date`, `update_by`, `update_name`) VALUES ('402881026560c0a0016560e2bd800007', 'common.position.name', 'Position Name', 'en', '2018-08-22 17:06:37', 'admin', '管理员', NULL, NULL, NULL);
INSERT INTO `t_s_muti_lang`(`id`, `lang_key`, `lang_context`, `lang_code`, `create_date`, `create_by`, `create_name`, `update_date`, `update_by`, `update_name`) VALUES ('402881026560c0a0016560e237d50005', 'common.position.name', '职务', 'zh-cn', '2018-08-22 17:06:03', 'admin', '管理员', NULL, NULL, NULL);
update cgform_ftl SET FTL_CONTENT = replace(FTL_CONTENT, 'plug-in/uploadify/jquery.uploadify-3.1.js', 'plug-in/plupload/plupload.full.min.js');
UPDATE `jform_graphreport_head` SET `cgr_sql` = 'select a.userid, count(*) ct, sum(CASE WHEN a.logcontent like \'%\' or a.logcontent like \'%cess\' THEN 1 ELSE 0 END) login_count from t_s_log a where {operatetime} group by a.userid order by ct desc' WHERE `id` = '402881e64ca71152014ca71152480000';
ALTER TABLE `cgform_enhance_java`
ADD COLUMN `event` varchar(10) NOT NULL COMMENT '事件状态(end:结束start:开始)' AFTER `active_status`;
alter table cgform_enhance_java alter column event set default 'end';
update cgform_enhance_java set event = 'end' where event is null;
INSERT INTO `t_s_muti_lang`(`id`, `lang_key`, `lang_context`, `lang_code`, `create_date`, `create_by`, `create_name`, `update_date`, `update_by`, `update_name`) VALUES ('40288102657927c401657947f3f90003', 'common.event', 'Event State', 'en', '2018-08-27 10:48:03', 'admin', '管理员', NULL, NULL, NULL);
INSERT INTO `t_s_muti_lang`(`id`, `lang_key`, `lang_context`, `lang_code`, `create_date`, `create_by`, `create_name`, `update_date`, `update_by`, `update_name`) VALUES ('40288102657927c401657947644c0001', 'common.event', '事件状态', 'zh-cn', '2018-08-27 10:47:27', 'admin', '管理员', NULL, NULL, NULL);
INSERT INTO `t_s_muti_lang`(`id`, `lang_key`, `lang_context`, `lang_code`, `create_date`, `create_by`, `create_name`, `update_date`, `update_by`, `update_name`) VALUES ('40288102657951ed01657954835f0007', 'common.end', 'End', 'en', '2018-08-27 11:01:46', 'admin', '管理员', NULL, NULL, NULL);
INSERT INTO `t_s_muti_lang`(`id`, `lang_key`, `lang_context`, `lang_code`, `create_date`, `create_by`, `create_name`, `update_date`, `update_by`, `update_name`) VALUES ('40288102657951ed0165795465070005', 'common.end', '结束', 'zh-cn', '2018-08-27 11:01:39', 'admin', '管理员', NULL, NULL, NULL);
INSERT INTO `t_s_muti_lang`(`id`, `lang_key`, `lang_context`, `lang_code`, `create_date`, `create_by`, `create_name`, `update_date`, `update_by`, `update_name`) VALUES ('40288102657951ed0165795414370003', 'common.begin', 'Begin', 'en', '2018-08-27 11:01:18', 'admin', '管理员', NULL, NULL, NULL);
INSERT INTO `t_s_muti_lang`(`id`, `lang_key`, `lang_context`, `lang_code`, `create_date`, `create_by`, `create_name`, `update_date`, `update_by`, `update_name`) VALUES ('40288102657951ed016579537e400001', 'common.begin', '开始', 'zh-cn', '2018-08-27 11:00:40', 'admin', '管理员', NULL, NULL, NULL);
INSERT INTO `t_s_function` (`ID`, `functioniframe`, `functionlevel`, `functionname`, `functionorder`, `functionurl`, `parentfunctionid`, `iconid`, `desk_iconid`, `functiontype`, `function_icon_style`, `create_by`, `create_name`, `update_by`, `update_date`, `create_date`, `update_name`) VALUES ('4028f681658063000165806aa21c0001', NULL, '1', 'jxls导出excel', '99', 'jeecgDemoExcelController.do?jxls', '4028f6815af3ce54015af3d1ad610001', '8a8ab0b246dc81120146dc8180460000', '8a8ab0b246dc81120146dc8180dd001e', '0', 'fa-file-excel-o', 'admin', '管理员', 'admin', '2018-08-28 20:07:29', '2018-08-28 20:03:16', '管理员');
INSERT INTO `t_s_function` (`ID`, `functioniframe`, `functionlevel`, `functionname`, `functionorder`, `functionurl`, `parentfunctionid`, `iconid`, `desk_iconid`, `functiontype`, `function_icon_style`, `create_by`, `create_name`, `update_by`, `update_date`, `create_date`, `update_name`) VALUES ('4028f68165a8fe350165a90f06d50001', NULL, '1', '下拉多选demo', '100', 'jeecgFormDemoController.do?multiSelect', '4028f6815af3ce54015af3d1ad610001', '8a8ab0b246dc81120146dc8180460000', '8a8ab0b246dc81120146dc8180dd001e', '0', 'fa-list-ol', 'admin', '管理员', 'admin', '2018-09-05 17:28:15', '2018-09-05 17:27:38', '管理员');
update t_s_muti_lang set lang_context = '3.8' where lang_key ='system.version.number';

@ -0,0 +1,2 @@
UPDATE t_s_type SET typecode = 'sqlserver', typename = 'common.sqlserver' WHERE ID = '8a8ab0ba487c527201487c78aefc001d';
update t_s_muti_lang set lang_context = '4.0' where lang_key ='system.version.number';

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>org.jeecgframework</groupId> <groupId>org.jeecgframework</groupId>
<artifactId>jeecg</artifactId> <artifactId>jeecg</artifactId>
<version>3.8</version> <version>4.0</version>
<packaging>war</packaging> <packaging>war</packaging>
<properties> <properties>
@ -47,14 +47,14 @@
<!-- json start --> <!-- json start -->
<jackson.version>1.8.4</jackson.version> <jackson.version>1.8.4</jackson.version>
<json-lib.version>2.1</json-lib.version> <json-lib.version>2.1</json-lib.version>
<fastjson-lib.version>1.2.6</fastjson-lib.version> <fastjson-lib.version>1.2.31</fastjson-lib.version>
<gson.version>2.2.4</gson.version> <gson.version>2.2.4</gson.version>
<!-- dom4j --> <!-- dom4j -->
<dom4j.version>1.6.1</dom4j.version> <dom4j.version>1.6.1</dom4j.version>
<commons-codec.version>1.9</commons-codec.version> <commons-codec.version>1.9</commons-codec.version>
<commons-io.version>1.3.2</commons-io.version> <commons-io.version>1.3.2</commons-io.version>
<commons-beanutils.version>1.7.0</commons-beanutils.version> <commons-beanutils.version>1.7.0</commons-beanutils.version>
<commons-fileupload.version>1.2.1</commons-fileupload.version> <commons-fileupload.version>1.3.3</commons-fileupload.version>
<commons-lang.version>2.6</commons-lang.version> <commons-lang.version>2.6</commons-lang.version>
<commons-lang3.version>3.1</commons-lang3.version> <commons-lang3.version>3.1</commons-lang3.version>
<commons-email.version>1.2</commons-email.version> <commons-email.version>1.2</commons-email.version>
@ -78,7 +78,7 @@
<!-- highchart export --> <!-- highchart export -->
<xercesImpl.version>2.7.1</xercesImpl.version> <xercesImpl.version>2.7.1</xercesImpl.version>
<batik-codec.version>1.7</batik-codec.version> <batik-codec.version>1.7</batik-codec.version>
<xstream.version>1.4.4</xstream.version> <xstream.version>1.4.6</xstream.version>
<!-- jsoup HTML parser --> <!-- jsoup HTML parser -->
<jsoup.version>1.8.3</jsoup.version> <jsoup.version>1.8.3</jsoup.version>
@ -89,7 +89,7 @@
<jedis.version>2.9.0</jedis.version> <jedis.version>2.9.0</jedis.version>
<!--swagger2--> <!--swagger2-->
<springfox-swagger2.version>2.4.0</springfox-swagger2.version> <springfox-swagger2.version>2.4.0</springfox-swagger2.version>
<jackson-databind.version>2.5.1</jackson-databind.version> <jackson-databind.version>2.9.9</jackson-databind.version>
<!-- jjwt --> <!-- jjwt -->
<jjwt.version>0.9.0</jjwt.version> <jjwt.version>0.9.0</jjwt.version>
@ -119,7 +119,7 @@
<repository> <repository>
<id>jeecg</id> <id>jeecg</id>
<name>jeecg Repository</name> <name>jeecg Repository</name>
<url>http://maven.jeecg.org/nexus/content/repositories/jeecg</url> <url>http://maven.jeewx.com/nexus/content/repositories/jeecg</url>
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
</snapshots> </snapshots>
@ -127,7 +127,7 @@
<repository> <repository>
<id>jeecg-snapshots</id> <id>jeecg-snapshots</id>
<name>jeecg-snapshots Repository</name> <name>jeecg-snapshots Repository</name>
<url>http://maven.jeecg.org/nexus/content/repositories/snapshots</url> <url>http://maven.jeewx.com/nexus/content/repositories/snapshots</url>
<snapshots> <snapshots>
<enabled>true</enabled> <enabled>true</enabled>
</snapshots> </snapshots>

@ -361,7 +361,7 @@ public class JeecgDemoExcelController extends BaseController {
Map<String,Object> beans =new HashMap<String,Object>(); Map<String,Object> beans =new HashMap<String,Object>();
beans.put("datac",list); beans.put("datac",list);
XLSTransformer transformer = new XLSTransformer(); XLSTransformer transformer = new XLSTransformer();
String srcFilePath = request.getServletContext().getRealPath("/")+"export/template/jxls.xls"; String srcFilePath = request.getSession().getServletContext().getRealPath("/")+"export/template/jxls.xls";
InputStream is = new BufferedInputStream(new FileInputStream(srcFilePath)); InputStream is = new BufferedInputStream(new FileInputStream(srcFilePath));
org.apache.poi.ss.usermodel.Workbook workbook = transformer.transformXLS(is, beans); org.apache.poi.ss.usermodel.Workbook workbook = transformer.transformXLS(is, beans);
//设置导出 //设置导出
@ -439,7 +439,7 @@ public class JeecgDemoExcelController extends BaseController {
Map<String,Object> beans =new HashMap<String,Object>(); Map<String,Object> beans =new HashMap<String,Object>();
beans.put("datac",pageList); beans.put("datac",pageList);
String repeat = request.getParameter("repeat"); String repeat = request.getParameter("repeat");
String templateFilePath = request.getServletContext().getRealPath("/")+"export/template/jxlsone2many-"+repeat+".xls"; String templateFilePath = request.getSession().getServletContext().getRealPath("/")+"export/template/jxlsone2many-"+repeat+".xls";
String exportFileName = "jxls导出excel-demo(一对多).xls"; String exportFileName = "jxls导出excel-demo(一对多).xls";
JxlsExcelExportUtil.export(beans,exportFileName,templateFilePath, request, response); JxlsExcelExportUtil.export(beans,exportFileName,templateFilePath, request, response);
}catch (Exception e) { }catch (Exception e) {

@ -1,26 +1,15 @@
package com.jeecg.demo.controller; package com.jeecg.demo.controller;
import com.alibaba.fastjson.JSONArray;
import com.jeecg.demo.dao.JeecgMinidaoDao;
import com.jeecg.demo.entity.JeecgDemoEntity;
import com.jeecg.demo.entity.JeecgDemoPage;
import com.jeecg.demo.entity.JeecgLogReport;
import com.jeecg.demo.service.JeecgDemoServiceI;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import net.sf.json.JSONObject; import net.sf.json.JSONObject;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import org.apache.batik.transcoder.Transcoder; import org.apache.batik.transcoder.Transcoder;
import org.apache.batik.transcoder.TranscoderException; import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.TranscoderInput; import org.apache.batik.transcoder.TranscoderInput;
@ -39,14 +28,7 @@ import org.jeecgframework.core.common.model.json.AjaxJson;
import org.jeecgframework.core.common.model.json.DataGrid; import org.jeecgframework.core.common.model.json.DataGrid;
import org.jeecgframework.core.common.model.json.Highchart; import org.jeecgframework.core.common.model.json.Highchart;
import org.jeecgframework.core.constant.Globals; import org.jeecgframework.core.constant.Globals;
import org.jeecgframework.core.util.DBTypeUtil; import org.jeecgframework.core.util.*;
import org.jeecgframework.core.util.DateUtils;
import org.jeecgframework.core.util.ExceptionUtil;
import org.jeecgframework.core.util.JeecgDataAutorUtils;
import org.jeecgframework.core.util.MyBeanUtils;
import org.jeecgframework.core.util.ResourceUtil;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.core.util.oConvertUtils;
import org.jeecgframework.jwt.util.GsonUtil; import org.jeecgframework.jwt.util.GsonUtil;
import org.jeecgframework.jwt.util.ResponseMessage; import org.jeecgframework.jwt.util.ResponseMessage;
import org.jeecgframework.jwt.util.Result; import org.jeecgframework.jwt.util.Result;
@ -57,12 +39,10 @@ import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants;
import org.jeecgframework.tag.core.easyui.TagUtil; import org.jeecgframework.tag.core.easyui.TagUtil;
import org.jeecgframework.tag.vo.datatable.SortDirection; import org.jeecgframework.tag.vo.datatable.SortDirection;
import org.jeecgframework.web.system.controller.core.LoginController;
import org.jeecgframework.web.system.enums.InterfaceEnum; import org.jeecgframework.web.system.enums.InterfaceEnum;
import org.jeecgframework.web.system.pojo.base.InterfaceRuleDto; import org.jeecgframework.web.system.pojo.base.InterfaceRuleDto;
import org.jeecgframework.web.system.pojo.base.TSDepart; import org.jeecgframework.web.system.pojo.base.TSDepart;
import org.jeecgframework.web.system.pojo.base.TSLog; import org.jeecgframework.web.system.pojo.base.TSLog;
import org.jeecgframework.web.system.service.MutiLangServiceI;
import org.jeecgframework.web.system.service.SystemService; import org.jeecgframework.web.system.service.SystemService;
import org.jeecgframework.web.system.util.InterfaceUtil; import org.jeecgframework.web.system.util.InterfaceUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -71,23 +51,22 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.util.UriComponentsBuilder; import org.springframework.web.util.UriComponentsBuilder;
import com.alibaba.fastjson.JSONArray; import javax.servlet.ServletOutputStream;
import com.jeecg.demo.dao.JeecgMinidaoDao; import javax.servlet.http.HttpServletRequest;
import com.jeecg.demo.entity.JeecgDemoEntity; import javax.servlet.http.HttpServletResponse;
import com.jeecg.demo.entity.JeecgDemoPage; import javax.validation.ConstraintViolation;
import com.jeecg.demo.entity.JeecgLogReport; import javax.validation.Validator;
import com.jeecg.demo.service.JeecgDemoServiceI; import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.text.ParseException;
import java.util.*;
/** /**
* @Title: Controller * @Title: Controller
@ -116,9 +95,6 @@ public class JeecgListDemoController extends BaseController {
@Autowired @Autowired
private JeecgMinidaoDao jeecgMinidaoDao; private JeecgMinidaoDao jeecgMinidaoDao;
@Autowired
private MutiLangServiceI mutiLangService;
/** /**
* minidao * minidao
* @param request * @param request
@ -521,7 +497,7 @@ public class JeecgListDemoController extends BaseController {
Long count = systemService.getCountForJdbc("SELECT COUNT(1) FROM T_S_Log WHERE 1=1"); Long count = systemService.getCountForJdbc("SELECT COUNT(1) FROM T_S_Log WHERE 1=1");
List lt = new ArrayList(); List lt = new ArrayList();
hc = new Highchart(); hc = new Highchart();
hc.setName(mutiLangService.getLang(BROSWER_COUNT_ANALYSIS)); hc.setName(MutiLangUtil.getLang(BROSWER_COUNT_ANALYSIS));
hc.setType(reportType); hc.setType(reportType);
Map<String, Object> map; Map<String, Object> map;
if (userBroswerList.size() > 0) { if (userBroswerList.size() > 0) {

@ -20,7 +20,7 @@ import org.springframework.stereotype.Component;
/** /**
* *
* @author * @author
* @TODO - * @TODO MutiLangTag -
* Ehcache * Ehcache
*/ */
//@Component //@Component

@ -30,7 +30,7 @@ public boolean onSave(Object entity, Serializable id, Object[] state,
try { try {
currentUser = ResourceUtil.getSessionUser(); currentUser = ResourceUtil.getSessionUser();
} catch (RuntimeException e) { } catch (RuntimeException e) {
//logger.warn("当前session为空,无法获取用户"); logger.warn(" --- 当前session为空无法获取用户 ---- ");
} }
if(currentUser==null){ if(currentUser==null){
return true; return true;
@ -118,7 +118,7 @@ public boolean onFlushDirty(Object entity, Serializable id,
try { try {
currentUser = ResourceUtil.getSessionUser(); currentUser = ResourceUtil.getSessionUser();
} catch (RuntimeException e1) { } catch (RuntimeException e1) {
//logger.warn("当前session为空,无法获取用户"); logger.warn(" --- 当前session为空无法获取用户 --- ");
} }
if(currentUser==null){ if(currentUser==null){
return true; return true;

@ -4,9 +4,7 @@ import org.jeecgframework.core.util.oConvertUtils;
/** /**
* ,code (add addOne) * ,code (add addOne)
* * ERP
* @author taoYan
* @since 20171225
*/ */
//addSingle,editSingle,batchDel,save,reject,template,importe,export,filter //addSingle,editSingle,batchDel,save,reject,template,importe,export,filter
public enum MenuButtonsEnum { public enum MenuButtonsEnum {

@ -10,7 +10,9 @@ import org.jeecgframework.core.util.StringUtil;
public enum SysDatabaseEnum { public enum SysDatabaseEnum {
MYSQL("mysql","jdbc:mysql://SERVERADDRESS:PORT/YOURDATABASENAME?useUnicode=true&characterEncoding=UTF-8","com.mysql.jdbc.Driver"), MYSQL("mysql","jdbc:mysql://SERVERADDRESS:PORT/YOURDATABASENAME?useUnicode=true&characterEncoding=UTF-8","com.mysql.jdbc.Driver"),
SQLSERVER2008("sqlserver2008","jdbc:sqlserver://SERVERADDRESS:PORT;DatabaseName=YOURDATABASENAME","com.microsoft.sqlserver.jdbc.SQLServerDriver"),
SQLSERVER("sqlserver","jdbc:sqlserver://SERVERADDRESS:PORT;DatabaseName=YOURDATABASENAME","com.microsoft.sqlserver.jdbc.SQLServerDriver"),
ORACLE("oracle","jdbc:oracle:thin:@SERVERADDRESS:PORT:YOURDATABASENAME","oracle.jdbc.driver.OracleDriver"); ORACLE("oracle","jdbc:oracle:thin:@SERVERADDRESS:PORT:YOURDATABASENAME","oracle.jdbc.driver.OracleDriver");

@ -101,7 +101,9 @@ public class CgReportQueryParamUtil{
if(!StringUtil.isEmpty(end)){ if(!StringUtil.isEmpty(end)){
// String re = CgReportConstant.OP_LQ+end; // String re = CgReportConstant.OP_LQ+end;
String re = CgReportConstant.OP_LQ+":"+filedName+"_end"; String re = CgReportConstant.OP_LQ+":"+filedName+"_end";
pageSearchFields.put(filedName, re);
pageSearchFields.put(new String(filedName), re);
paramData.put(filedName+"_end", covertData(filedType,end,false)); paramData.put(filedName+"_end", covertData(filedType,end,false));
} }

@ -1,9 +1,8 @@
package org.jeecgframework.core.util; package org.jeecgframework.core.util;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
@ -15,7 +14,6 @@ import org.springframework.web.context.request.ServletRequestAttributes;
* *
*/ */
public class ContextHolderUtils { public class ContextHolderUtils {
private static final Map<String, HttpSession> sessionMap = new HashMap<String, HttpSession>();
/** /**
* SpringMvcrequest * SpringMvcrequest
@ -35,30 +33,7 @@ public class ContextHolderUtils {
*/ */
public static HttpSession getSession() { public static HttpSession getSession() {
HttpServletRequest request = getRequest(); HttpServletRequest request = getRequest();
String tempSessionId = request.getParameter("sessionId");
HttpSession session = request.getSession(); HttpSession session = request.getSession();
String sessionId = session.getId();
if(StringUtil.isNotEmpty(tempSessionId) && !tempSessionId.equals(sessionId)){
sessionId = tempSessionId;
if(sessionMap.containsKey(sessionId)){
session = sessionMap.get(sessionId);
}
}
if(!sessionMap.containsKey(sessionId)){
sessionMap.put(sessionId, session);
}
return session; return session;
} }
public static HttpSession getSession(String sessionId){
HttpSession session = sessionMap.get(sessionId);
return session == null ? getSession() : session;
}
public static void removeSession(String sessionId){
if(sessionMap.containsKey(sessionId)){
sessionMap.remove(sessionId);
}
}
} }

@ -165,15 +165,17 @@ public class ResourceUtil {
if(clientManager.getClient(session.getId())!=null){ if(clientManager.getClient(session.getId())!=null){
return clientManager.getClient(session.getId()).getUser(); return clientManager.getClient(session.getId()).getUser();
}else{
TSUser u = (TSUser) session.getAttribute(ResourceUtil.LOCAL_CLINET_USER);
Client client = new Client();
client.setIp("");
client.setLogindatetime(new Date());
client.setUser(u);
clientManager.addClinet(session.getId(), client);
} }
// else{
// TSUser u = (TSUser) session.getAttribute(ResourceUtil.LOCAL_CLINET_USER);
// Client client = new Client();
// client.setIp("");
// client.setLogindatetime(new Date());
// client.setUser(u);
// clientManager.addClinet(session.getId(), client);
// }
return null; return null;
} }

@ -75,7 +75,10 @@ public class SqlUtil {
*/ */
public static String getCountSql(String sql, Map params) { public static String getCountSql(String sql, Map params) {
String querySql = getFullSql(sql,params); String querySql = getFullSql(sql,params);
querySql = "SELECT COUNT(*) FROM ("+querySql+") t2";
//若要兼容数据库,SQL中取别名一律用大写
querySql = "SELECT COUNT(*) COUNT FROM ("+querySql+") t2";
return querySql; return querySql;
} }

@ -27,9 +27,12 @@ public class SysThemesUtil {
if (cookie == null || StringUtils.isEmpty(cookie.getName())) { if (cookie == null || StringUtils.isEmpty(cookie.getName())) {
continue; continue;
} }
if (cookie.getName().equalsIgnoreCase("JEECGINDEXSTYLE")) { if (cookie.getName().equalsIgnoreCase("JEECGINDEXSTYLE")) {
indexStyle = cookie.getValue(); indexStyle = cookie.getValue();
break;
} }
} }
} catch (Exception e) { } catch (Exception e) {
} }

@ -19,6 +19,9 @@ import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringEscapeUtils;
import org.apache.log4j.Logger;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/** /**
* *
@ -26,6 +29,8 @@ import org.apache.commons.lang.StringEscapeUtils;
* *
*/ */
public class oConvertUtils { public class oConvertUtils {
private static final Logger logger = Logger.getLogger(oConvertUtils.class);
public static boolean isEmpty(Object object) { public static boolean isEmpty(Object object) {
if (object == null) { if (object == null) {
return (true); return (true);
@ -237,6 +242,12 @@ public class oConvertUtils {
* IP * IP
*/ */
public static String getIp() { public static String getIp() {
HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
logger.info("----------------获取spring线程request-------------------"+request);
if(oConvertUtils.isNotEmpty(request)){
logger.info("----------------通过 spring线程request 获取 getIpAddr------------------"+IpUtil.getIpAddr(request));
return IpUtil.getIpAddr(request);
}
String ip = null; String ip = null;
try { try {
InetAddress address = InetAddress.getLocalHost(); InetAddress address = InetAddress.getLocalHost();

@ -1,16 +1,16 @@
package org.jeecgframework.easypoi.service; package org.jeecgframework.easypoi.service;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.jeecgframework.core.util.MutiLangUtil;
import org.jeecgframework.core.util.StringUtil; import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.web.system.dao.JeecgDictDao; import org.jeecgframework.web.system.dao.JeecgDictDao;
import org.jeecgframework.web.system.pojo.base.DictEntity; import org.jeecgframework.web.system.pojo.base.DictEntity;
import org.jeecgframework.web.system.service.MutiLangServiceI;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/** /**
* *
* @authorscott * @authorscott
@ -23,8 +23,6 @@ public class EasypoiDictService implements EasypoiDictServiceI {
@Autowired @Autowired
private JeecgDictDao jeecgDictDao; private JeecgDictDao jeecgDictDao;
@Autowired
private MutiLangServiceI mutiLangService;
/** /**
* easypoi * easypoi
@ -48,7 +46,7 @@ public class EasypoiDictService implements EasypoiDictServiceI {
} }
} }
for(DictEntity t:dictList){ for(DictEntity t:dictList){
dictReplace.add(mutiLangService.getLang(t.getTypename())+"_"+t.getTypecode()); dictReplace.add(MutiLangUtil.getLang(t.getTypename())+"_"+t.getTypecode());
} }
if(dictReplace!=null && dictReplace.size()!=0){ if(dictReplace!=null && dictReplace.size()!=0){
return dictReplace.toArray(new String[dictReplace.size()]); return dictReplace.toArray(new String[dictReplace.size()]);

@ -2189,6 +2189,8 @@ public class DataGridTag extends TagSupport {
for (DataGridColumn col : columnList) { for (DataGridColumn col : columnList) {
if (col.isQuery()) { if (col.isQuery()) {
String searchControlAttr= extendAttribute(col.getExtend());//获取extend属性对应的HTML
sb.append("<span style=\"display:-moz-inline-box;display:inline-block;margin-bottom:2px;text-align:justify;\">"); sb.append("<span style=\"display:-moz-inline-box;display:inline-block;margin-bottom:2px;text-align:justify;\">");
if(i==0){ if(i==0){
@ -2200,7 +2202,12 @@ public class DataGridTag extends TagSupport {
if("single".equals(col.getQueryMode())){ if("single".equals(col.getQueryMode())){
if(!StringUtil.isEmpty(col.getReplace())){ if(!StringUtil.isEmpty(col.getReplace())){
sb.append("<select name=\""+col.getField().replaceAll("_","\\.")+"\" WIDTH=\"120\" style=\"width: 120px\"> ");
if(oConvertUtils.isEmpty(searchControlAttr)){
searchControlAttr = " style=\"width: 120px\" ";
}
sb.append("<select name=\""+col.getField().replaceAll("_","\\.")+"\" "+searchControlAttr+"> ");
sb.append(StringUtil.replaceAll("<option value =\"\" >{0}</option>", "{0}", MutiLangUtil.getLang("common.please.select"))); sb.append(StringUtil.replaceAll("<option value =\"\" >{0}</option>", "{0}", MutiLangUtil.getLang("common.please.select")));
String[] test = col.getReplace().split(","); String[] test = col.getReplace().split(",");
String text = ""; String text = "";
@ -2237,10 +2244,13 @@ public class DataGridTag extends TagSupport {
//System.out.println(dic[0]+"--"+dic[1]+"--"+dic[2]); //System.out.println(dic[0]+"--"+dic[1]+"--"+dic[2]);
// <input type="text" name="order_code" style="width: 100px" class="searchbox-inputtext" value="" onClick="inputClick(this,'account','user_msg');" /> // <input type="text" name="order_code" style="width: 100px" class="searchbox-inputtext" value="" onClick="inputClick(this,'account','user_msg');" />
if(oConvertUtils.isEmpty(searchControlAttr)){
searchControlAttr = " style=\"width: 120px\" ";
}
if(col.getDefaultVal()!=null&&!col.getDefaultVal().trim().equals("")){ if(col.getDefaultVal()!=null&&!col.getDefaultVal().trim().equals("")){
sb.append("<input type=\"text\" name=\""+col.getField().replaceAll("_","\\.")+"\" style=\"width: 120px\" class=\"searchbox-inputtext\" value=\"\" onClick=\"popupClick(this,'"+dic[2].replaceAll("@", ",")+"','"+dic[1].replaceAll("@", ",")+"','"+dic[0]+"');\" value=\""+col.getDefaultVal()+"\"/> "); sb.append("<input type=\"text\" name=\""+col.getField().replaceAll("_","\\.")+"\" "+searchControlAttr+" class=\"searchbox-inputtext\" onClick=\"popupClick(this,'"+dic[2].replaceAll("@", ",")+"','"+dic[1].replaceAll("@", ",")+"','"+dic[0]+"');\" value=\""+col.getDefaultVal()+"\"/> ");
}else{ }else{
sb.append("<input type=\"text\" name=\""+col.getField().replaceAll("_","\\.")+"\" style=\"width: 120px\" class=\"searchbox-inputtext\" value=\"\" onClick=\"popupClick(this,'"+dic[2].replaceAll("@", ",")+"','"+dic[1].replaceAll("@", ",")+"','"+dic[0]+"');\" /> "); sb.append("<input type=\"text\" name=\""+col.getField().replaceAll("_","\\.")+"\" "+searchControlAttr+" class=\"searchbox-inputtext\" value=\"\" onClick=\"popupClick(this,'"+dic[2].replaceAll("@", ",")+"','"+dic[1].replaceAll("@", ",")+"','"+dic[0]+"');\" /> ");
} }
}else if(col.getDictionary().contains(",")&&(!col.isPopup())){ }else if(col.getDictionary().contains(",")&&(!col.isPopup())){
@ -2265,12 +2275,12 @@ public class DataGridTag extends TagSupport {
for (Map<String, Object> map : list){ // for (Map<String, Object> map : list){ //
if(col.getDefaultVal()!=null && col.getDefaultVal().trim().equals(map.get("field"))){ if(col.getDefaultVal()!=null && col.getDefaultVal().trim().equals(map.get("field"))){
sb.append(" <input type=\"radio\" name=\""+field+"_radio\" onclick=\"javascrpt:$('#"+field+"_radio').val('"+map.get("field")+"');\" value=\""+map.get("field")+"\" checked=\"checked\" />"); sb.append(" <input "+searchControlAttr+" type=\"radio\" name=\""+field+"_radio\" onclick=\"javascrpt:$('#"+field+"_radio').val('"+map.get("field")+"');\" value=\""+map.get("field")+"\" checked=\"checked\" />");
sb.append(" <script type=\"text/javascript\">"); sb.append(" <script type=\"text/javascript\">");
sb.append(" $('#"+ field+"_radio').val(\""+map.get("field")+"\");"); sb.append(" $('#"+ field+"_radio').val(\""+map.get("field")+"\");");
sb.append(" </script>"); sb.append(" </script>");
}else{ }else{
sb.append(" <input type=\"radio\" name=\""+field+"_radio\" onclick=\"javascrpt:$('#"+field+"_radio').val('"+map.get("field")+"');\" value=\""+map.get("field")+"\" />"); sb.append(" <input "+searchControlAttr+" type=\"radio\" name=\""+field+"_radio\" onclick=\"javascrpt:$('#"+field+"_radio').val('"+map.get("field")+"');\" value=\""+map.get("field")+"\" />");
} }
sb.append(map.get("text")); sb.append(map.get("text"));
@ -2280,17 +2290,22 @@ public class DataGridTag extends TagSupport {
sb.append("<input type=\"hidden\" name=\""+field+"\" id=\""+field+"_checkbox\" value=\"\" />"); sb.append("<input type=\"hidden\" name=\""+field+"\" id=\""+field+"_checkbox\" value=\"\" />");
for (Map<String, Object> map : list){ // for (Map<String, Object> map : list){ //
if(col.getDefaultVal()!=null && col.getDefaultVal().trim().equals(map.get("field"))){ if(col.getDefaultVal()!=null && col.getDefaultVal().trim().equals(map.get("field"))){
sb.append(" <input type=\"checkbox\" onclick=\"javascript:if(this.checked)$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val()+',"+map.get("field")+",');else{$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val().replace(',"+map.get("field")+",',''));}\" value=\"" + map.get("field") + "\" name=\"" + field +"_checkbox\" class=\"" + field + "_checkbox\" checked=\"checked\" />"); sb.append(" <input "+searchControlAttr+" type=\"checkbox\" onclick=\"javascript:if(this.checked)$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val()+',"+map.get("field")+",');else{$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val().replace(',"+map.get("field")+",',''));}\" value=\"" + map.get("field") + "\" name=\"" + field +"_checkbox\" class=\"" + field + "_checkbox\" checked=\"checked\" />");
sb.append(" <script type=\"text/javascript\">"); sb.append(" <script type=\"text/javascript\">");
sb.append(" $(\"#"+ field +"_checkbox\").val($(\"#"+ field +"_checkbox\").val()+,"+map.get("field")+",);"); sb.append(" $(\"#"+ field +"_checkbox\").val($(\"#"+ field +"_checkbox\").val()+,"+map.get("field")+",);");
sb.append(" </script>"); sb.append(" </script>");
}else{ }else{
sb.append(" <input type=\"checkbox\" onclick=\"javascript:if(this.checked)$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val()+',"+map.get("field")+",');else{$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val().replace(',"+map.get("field")+",',''));}\" value=\"" + map.get("field") + "\" name=\"" + field +"_checkbox\" class=\"" + field + "_checkbox\" />"); sb.append(" <input "+searchControlAttr+" type=\"checkbox\" onclick=\"javascript:if(this.checked)$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val()+',"+map.get("field")+",');else{$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val().replace(',"+map.get("field")+",',''));}\" value=\"" + map.get("field") + "\" name=\"" + field +"_checkbox\" class=\"" + field + "_checkbox\" />");
} }
sb.append(map.get("text")); sb.append(map.get("text"));
} }
}else{ }else{
sb.append("<select name=\""+col.getField().replaceAll("_","\\.")+"\" WIDTH=\"120\" style=\"width: 120px\"> ");
if(oConvertUtils.isEmpty(searchControlAttr)){
searchControlAttr = " style=\"width: 120px\" ";
}
sb.append("<select name=\""+col.getField().replaceAll("_","\\.")+"\" "+searchControlAttr+"> ");
sb.append(StringUtil.replaceAll("<option value =\"\" >{0}</option>", "{0}", MutiLangUtil.getLang("common.please.select"))); sb.append(StringUtil.replaceAll("<option value =\"\" >{0}</option>", "{0}", MutiLangUtil.getLang("common.please.select")));
for (Map<String, Object> map : list){ for (Map<String, Object> map : list){
@ -2319,12 +2334,12 @@ public class DataGridTag extends TagSupport {
String typeCode = type.getTypecode(); String typeCode = type.getTypecode();
if(col.getDefaultVal()!=null&&col.getDefaultVal().trim().equals(typeCode)){ if(col.getDefaultVal()!=null&&col.getDefaultVal().trim().equals(typeCode)){
sb.append(" <input type=\"radio\" value=\"" + typeCode + "\" name=\""+field+"_radio\" onclick=\"javascrpt:#('#"+ field+"_radio').val('" + typeCode + "');\" checked=\"checked\" />"); sb.append(" <input "+searchControlAttr+" type=\"radio\" value=\"" + typeCode + "\" name=\""+field+"_radio\" onclick=\"javascrpt:#('#"+ field+"_radio').val('" + typeCode + "');\" checked=\"checked\" />");
sb.append(" <script type=\"text/javascript\">"); sb.append(" <script type=\"text/javascript\">");
sb.append(" $('#"+ field+"_radio').val('"+typeCode+"');"); sb.append(" $('#"+ field+"_radio').val('"+typeCode+"');");
sb.append(" </script>"); sb.append(" </script>");
}else{ }else{
sb.append(" <input type=\"radio\" value=\"" + typeCode + "\" name=\""+field+"_radio\" onclick=\"javascrpt:$('#"+ field+"_radio').val('" + typeCode + "');\" />"); sb.append(" <input "+searchControlAttr+" type=\"radio\" value=\"" + typeCode + "\" name=\""+field+"_radio\" onclick=\"javascrpt:$('#"+ field+"_radio').val('" + typeCode + "');\" />");
} }
sb.append(MutiLangUtil.getLang(type.getTypename())); sb.append(MutiLangUtil.getLang(type.getTypename()));
@ -2337,18 +2352,23 @@ public class DataGridTag extends TagSupport {
for (TSType type : types) { for (TSType type : types) {
String typeCode = type.getTypecode(); String typeCode = type.getTypecode();
if(col.getDefaultVal()!=null&&col.getDefaultVal().trim().equals(typeCode)){ if(col.getDefaultVal()!=null&&col.getDefaultVal().trim().equals(typeCode)){
sb.append(" <input type=\"checkbox\" onclick=\"javascript:if(this.checked)$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val()+',"+typeCode+",');else{$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val().replace(',"+typeCode+",',''));}\" value=\"" + typeCode + "\" name=\"" + field +"_checkbox\" class=\"" + field + "_checkbox\" checked=\"checked\" />"); sb.append(" <input "+searchControlAttr+" type=\"checkbox\" onclick=\"javascript:if(this.checked)$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val()+',"+typeCode+",');else{$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val().replace(',"+typeCode+",',''));}\" value=\"" + typeCode + "\" name=\"" + field +"_checkbox\" class=\"" + field + "_checkbox\" checked=\"checked\" />");
sb.append(" <script type=\"text/javascript\">"); sb.append(" <script type=\"text/javascript\">");
sb.append(" $(\"#"+ field +"_checkbox\").val($(\"#"+ field +"_checkbox\").val()+,"+typeCode+",);"); sb.append(" $(\"#"+ field +"_checkbox\").val($(\"#"+ field +"_checkbox\").val()+,"+typeCode+",);");
sb.append(" </script>"); sb.append(" </script>");
}else{ }else{
sb.append(" <input type=\"checkbox\" onclick=\"javascript:if(this.checked)$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val()+',"+typeCode+",');else{$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val().replace(',"+typeCode+",',''));}\" value=\"" + typeCode + "\" name=\"" + field +"_checkbox\" class=\"" + field + "_checkbox\" />"); sb.append(" <input "+searchControlAttr+" type=\"checkbox\" onclick=\"javascript:if(this.checked)$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val()+',"+typeCode+",');else{$('#"+ field +"_checkbox').val($('#"+ field +"_checkbox').val().replace(',"+typeCode+",',''));}\" value=\"" + typeCode + "\" name=\"" + field +"_checkbox\" class=\"" + field + "_checkbox\" />");
} }
sb.append(MutiLangUtil.getLang(type.getTypename())); sb.append(MutiLangUtil.getLang(type.getTypename()));
} }
} }
}else{ }else{
sb.append("<select name=\""+col.getField().replaceAll("_","\\.")+"\" WIDTH=\"120\" style=\"width: 120px\"> ");
if(oConvertUtils.isEmpty(searchControlAttr)){
searchControlAttr = " style=\"width: 120px\" ";
}
sb.append("<select name=\""+col.getField().replaceAll("_","\\.")+"\" "+searchControlAttr+"> ");
sb.append(StringUtil.replaceAll("<option value =\"\" >{0}</option>", "{0}", MutiLangUtil.getLang("common.please.select"))); sb.append(StringUtil.replaceAll("<option value =\"\" >{0}</option>", "{0}", MutiLangUtil.getLang("common.please.select")));
if (types != null) { if (types != null) {
for (TSType type : types) { for (TSType type : types) {
@ -2375,14 +2395,25 @@ public class DataGridTag extends TagSupport {
sb.append(getAutoSpan(col.getField().replaceAll("_","\\."),extendAttribute(col.getExtend()))); sb.append(getAutoSpan(col.getField().replaceAll("_","\\."),extendAttribute(col.getExtend())));
}else{ }else{
sb.append("<input onkeypress=\"EnterPress(event)\" onkeydown=\"EnterPress()\" type=\"text\" name=\""+col.getField().replaceAll("_","\\.")+"\" "+extendAttribute(col.getExtend())+" "); sb.append("<input onkeypress=\"EnterPress(event)\" onkeydown=\"EnterPress()\" type=\"text\" name=\""+col.getField().replaceAll("_","\\.")+"\" ");
if(this.DATE_FORMATTER.equals(col.getFormatter())){ if(this.DATE_FORMATTER.equals(col.getFormatter())){
sb.append(" style=\"width: 120px\" class=\"Wdate\" onClick=\"WdatePicker()\" "); if(oConvertUtils.isEmpty(searchControlAttr)){
searchControlAttr = " style=\"width: 120px\" ";
}
sb.append(searchControlAttr+"class=\"Wdate\" onClick=\"WdatePicker()\" ");
}else if(this.DATETIME_FORMATTER.equals(col.getFormatter())){ }else if(this.DATETIME_FORMATTER.equals(col.getFormatter())){
sb.append(" style=\"width: 160px\" class=\"Wdate\" onClick=\"WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})\" "); if(oConvertUtils.isEmpty(searchControlAttr)){
searchControlAttr = " style=\"width: 160px\" ";
}
sb.append(searchControlAttr+"class=\"Wdate\" onClick=\"WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})\" ");
}else{ }else{
sb.append(" style=\"width: 120px\" class=\"inuptxt\" "); if(oConvertUtils.isEmpty(searchControlAttr)){
searchControlAttr = " style=\"width: 120px\" ";
}
sb.append(searchControlAttr+"class=\"inuptxt\" ");
} }
if(oConvertUtils.isNotEmpty(col.getDefaultVal())){ if(oConvertUtils.isNotEmpty(col.getDefaultVal())){
sb.append(" value=\""+col.getDefaultVal()+"\" "); sb.append(" value=\""+col.getDefaultVal()+"\" ");
} }
@ -2395,17 +2426,26 @@ public class DataGridTag extends TagSupport {
}else if("group".equals(col.getQueryMode())){ }else if("group".equals(col.getQueryMode())){
if(this.DATE_FORMATTER.equals(col.getFormatter())){ if(this.DATE_FORMATTER.equals(col.getFormatter())){
sb.append("<input type=\"text\" name=\""+col.getField()+"_begin\" style=\"width: 100px\" "+extendAttribute(col.getExtend())+" class=\"Wdate\" onClick=\"WdatePicker()\"/>"); if(oConvertUtils.isEmpty(searchControlAttr)){
searchControlAttr = " style=\"width: 100px\" ";
}
sb.append("<input type=\"text\" name=\""+col.getField()+"_begin\" "+searchControlAttr+" class=\"Wdate\" onClick=\"WdatePicker()\"/>");
sb.append("<span style=\"display:-moz-inline-box;display:inline-block;width: 8px;text-align:right;\">~</span>"); sb.append("<span style=\"display:-moz-inline-box;display:inline-block;width: 8px;text-align:right;\">~</span>");
sb.append("<input type=\"text\" name=\""+col.getField()+"_end\" style=\"width: 100px\" "+extendAttribute(col.getExtend())+" class=\"Wdate\" onClick=\"WdatePicker()\"/>"); sb.append("<input type=\"text\" name=\""+col.getField()+"_end\" "+searchControlAttr+" class=\"Wdate\" onClick=\"WdatePicker()\"/>");
}else if(this.DATETIME_FORMATTER.equals(col.getFormatter())){ }else if(this.DATETIME_FORMATTER.equals(col.getFormatter())){
sb.append("<input type=\"text\" name=\""+col.getField()+"_begin\" style=\"width: 140px\" "+extendAttribute(col.getExtend())+" class=\"Wdate\" onClick=\"WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})\"/>"); if(oConvertUtils.isEmpty(searchControlAttr)){
searchControlAttr = " style=\"width: 140px\" ";
}
sb.append("<input type=\"text\" name=\""+col.getField()+"_begin\" "+searchControlAttr+" class=\"Wdate\" onClick=\"WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})\"/>");
sb.append("<span style=\"display:-moz-inline-box;display:inline-block;width: 8px;text-align:right;\">~</span>"); sb.append("<span style=\"display:-moz-inline-box;display:inline-block;width: 8px;text-align:right;\">~</span>");
sb.append("<input type=\"text\" name=\""+col.getField()+"_end\" style=\"width: 140px\" "+extendAttribute(col.getExtend())+" class=\"Wdate\" onClick=\"WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})\"/>"); sb.append("<input type=\"text\" name=\""+col.getField()+"_end\" "+searchControlAttr+" class=\"Wdate\" onClick=\"WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})\"/>");
}else{ }else{
sb.append("<input type=\"text\" name=\""+col.getField()+"_begin\" style=\"width: 100px\" "+extendAttribute(col.getExtend())+" class=\"inuptxt\"/>"); if(oConvertUtils.isEmpty(searchControlAttr)){
searchControlAttr = " style=\"width: 100px\" ";
}
sb.append("<input type=\"text\" name=\""+col.getField()+"_begin\" "+searchControlAttr+" class=\"inuptxt\"/>");
sb.append("<span style=\"display:-moz-inline-box;display:inline-block;width: 8px;text-align:right;\">~</span>"); sb.append("<span style=\"display:-moz-inline-box;display:inline-block;width: 8px;text-align:right;\">~</span>");
sb.append("<input type=\"text\" name=\""+col.getField()+"_end\" style=\"width: 100px\" "+extendAttribute(col.getExtend())+" class=\"inuptxt\"/>"); sb.append("<input type=\"text\" name=\""+col.getField()+"_end\" "+searchControlAttr+" class=\"inuptxt\"/>");
} }
} }

@ -1,14 +1,12 @@
package org.jeecgframework.tag.core.easyui; package org.jeecgframework.tag.core.easyui;
import java.io.IOException; import org.jeecgframework.core.util.MutiLangUtil;
import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport; import javax.servlet.jsp.tagext.TagSupport;
import org.jeecgframework.core.util.ApplicationContextUtil; import java.io.IOException;
import org.jeecgframework.web.system.service.MutiLangServiceI;
import org.springframework.beans.factory.annotation.Autowired;
import org.jeecgframework.core.util.StringUtil;
/** /**
@ -46,11 +44,7 @@ public class MutiLangTag extends TagSupport {
} }
public String end() { public String end() {
return MutiLangUtil.getLang(langKey, langArg);
MutiLangServiceI mutiLangService = ApplicationContextUtil.getContext().getBean(MutiLangServiceI.class);
String lang_context = mutiLangService.getLang(langKey, langArg);
return lang_context;
} }
public void setLangKey(String langKey) { public void setLangKey(String langKey) {

@ -1,13 +1,11 @@
package org.jeecgframework.tag.core.easyui; package org.jeecgframework.tag.core.easyui;
import org.jeecgframework.core.util.MutiLangUtil;
import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.Tag; import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport; import javax.servlet.jsp.tagext.TagSupport;
import org.jeecgframework.core.util.ApplicationContextUtil;
import org.jeecgframework.web.system.service.MutiLangServiceI;
import org.springframework.beans.factory.annotation.Autowired;
/** /**
* *
* *
@ -45,10 +43,7 @@ public class TabTag extends TagSupport {
this.id = id; this.id = id;
} }
public void setTitle(String title) { public void setTitle(String title) {
String lang_context = MutiLangUtil.getLang(title, langArg);
MutiLangServiceI mutiLangService = ApplicationContextUtil.getContext().getBean(MutiLangServiceI.class);
String lang_context = mutiLangService.getLang(title, langArg);
this.title = lang_context; this.title = lang_context;
} }

@ -507,17 +507,26 @@ public class TagUtil {
* @param response * @param response
* @param dataGrid * @param dataGrid
*/ */
public static void treegrid(HttpServletResponse response,DataGrid dg) { public static void treegrid(HttpServletResponse response,DataGrid dg,Boolean isSubTree) {
response.setContentType("application/json"); response.setContentType("application/json");
response.setHeader("Cache-Control", "no-store"); response.setHeader("Cache-Control", "no-store");
String jsonStr = TagUtil.getJson(dg); String jsonStr = TagUtil.getJson(dg);
JSONObject object = JSONObject.parseObject(jsonStr); JSONObject object = JSONObject.parseObject(jsonStr);
JSONArray rows = object.getJSONArray("rows");
try { try {
PrintWriter pw = response.getWriter();
pw.write(rows.toString()); if(isSubTree) {
pw.flush(); JSONArray rows = object.getJSONArray("rows");
pw.close(); PrintWriter pw = response.getWriter();
pw.write(rows.toString());
pw.flush();
pw.close();
} else {
PrintWriter pw = response.getWriter();
pw.write(jsonStr.toString());
pw.flush();
pw.close();
}
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
}finally{ }finally{

@ -27,7 +27,7 @@ public class UserSelectTag extends TagSupport {
private boolean hasLabel = false; //是否显示lable,默认不显示 private boolean hasLabel = false; //是否显示lable,默认不显示
private String userNamesDefalutVal; //用户名默认值 private String userNamesDefalutVal; //用户名默认值
private String userIdsDefalutVal; //用户ID默认值 private String userIdsDefalutVal; //用户ID默认值
private String readonly = "readonly"; // 只读属性 private String readonly = "false"; // 只读属性
private String inputWidth; //输入框宽度 private String inputWidth; //输入框宽度
private String windowWidth; //弹出窗口宽度 private String windowWidth; //弹出窗口宽度
private String windowHeight; //弹出窗口高度 private String windowHeight; //弹出窗口高度
@ -162,7 +162,12 @@ public class UserSelectTag extends TagSupport {
if(hasLabel && oConvertUtils.isNotEmpty(title)){ if(hasLabel && oConvertUtils.isNotEmpty(title)){
sb.append(title + ""); sb.append(title + "");
} }
sb.append("<input class=\"inuptxt\" readonly=\""+readonly+"\" type=\"text\" id=\"" + selectedNamesInputId + "\" name=\"" + selectedNamesInputId + "\" style=\"width: "+inputWidth+"\" onclick=\"openUserSelect()\" ");
sb.append("<input class=\"inuptxt\" readonly=\"readonly\" type=\"text\" id=\"" + selectedNamesInputId + "\" name=\"" + selectedNamesInputId + "\" style=\"width: "+inputWidth+"\" ");
if(!("true".equals(readonly)||"readonly".equals(readonly.toLowerCase()))){
sb.append("onclick=\"openUserSelect()\"");
}
if(StringUtils.isNotBlank(userNamesDefalutVal)){ if(StringUtils.isNotBlank(userNamesDefalutVal)){
sb.append(" value=\""+userNamesDefalutVal+"\""); sb.append(" value=\""+userNamesDefalutVal+"\"");
} }

@ -149,7 +149,8 @@ public class WebUploaderTag extends TagSupport {
sb.append("$list.append('<table class=\"temptable\"></table>');\r\n"); sb.append("$list.append('<table class=\"temptable\"></table>');\r\n");
//增加进度条方法 //增加进度条方法
//进度条加载延迟duration设置太小则出现大文件则会瞬间达到一个值然后卡在那个点上,效果太假 //进度条加载延迟duration设置太小则出现大文件则会瞬间达到一个值然后卡在那个点上,效果太假
sb.append("var showUploadProgress = function(progress,mycallback,obj){if(!obj){obj = $('#"+name+"_progress_bar').find('.progress-ty');}if(!$('#"+name+"_progress_bar').hasClass('active')){$('#"+name+"_progress_bar').addClass('active');}obj.animate({width:progress+'%'},{duration:100,easing:'swing',complete:function(scope,i,elem){if(!!mycallback){mycallback();}}})};");
sb.append("var showUploadProgress = function(progress,mycallback,obj){if(!obj){obj = $('#"+name+"_progress_bar').find('.progress-ty');}if(!$('#"+name+"_progress_bar').hasClass('active')){$('#"+name+"_progress_bar').addClass('active');}obj.animate({width:progress+'%'},{duration:150,easing:'swing',complete:function(scope,i,elem){if(!!mycallback){mycallback();}}})};");
//判断是否支持base64 //判断是否支持base64
sb.append(" var isSupportBase64 = function() {var data = new Image();var support = true;data.onload = data.onerror = function() {if( this.width != 1 || this.height != 1 ){support = false;}}//data['src'] = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';\r\nreturn support;};"); sb.append(" var isSupportBase64 = function() {var data = new Image();var support = true;data.onload = data.onerror = function() {if( this.width != 1 || this.height != 1 ){support = false;}}//data['src'] = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';\r\nreturn support;};");

@ -231,12 +231,13 @@ public class CgDynamGraphController extends BaseController {
map=(Map)DynamicDBUtil.findOne(dbKey,SqlUtil.getCountSql(querySql,null)); map=(Map)DynamicDBUtil.findOne(dbKey,SqlUtil.getCountSql(querySql,null));
} }
if(map.get("COUNT(*)") instanceof BigDecimal){ if(map.get("COUNT") instanceof BigDecimal){
BigDecimal count = (BigDecimal)map.get("COUNT(*)"); BigDecimal count = (BigDecimal)map.get("COUNT");
size = count.longValue(); size = count.longValue();
}else{ }else{
size=(Long)map.get("COUNT(*)"); size=Long.valueOf(map.get("COUNT")+"");
} }
}else{ }else{
result= cgDynamGraphService.queryByCgDynamGraphSql(querySql, pageSearchFields,paramData); result= cgDynamGraphService.queryByCgDynamGraphSql(querySql, pageSearchFields,paramData);

@ -1,18 +1,5 @@
package org.jeecgframework.web.cgform.controller.autolist; package org.jeecgframework.web.cgform.controller.autolist;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.jeecgframework.core.common.controller.BaseController; import org.jeecgframework.core.common.controller.BaseController;
import org.jeecgframework.core.common.model.json.AjaxJson; import org.jeecgframework.core.common.model.json.AjaxJson;
@ -20,15 +7,8 @@ import org.jeecgframework.core.common.model.json.DataGrid;
import org.jeecgframework.core.constant.Globals; import org.jeecgframework.core.constant.Globals;
import org.jeecgframework.core.enums.SysThemesEnum; import org.jeecgframework.core.enums.SysThemesEnum;
import org.jeecgframework.core.online.util.FreemarkerHelper; import org.jeecgframework.core.online.util.FreemarkerHelper;
import org.jeecgframework.core.util.ContextHolderUtils; import org.jeecgframework.core.util.*;
import org.jeecgframework.core.util.IpUtil; import org.jeecgframework.tag.core.easyui.TagUtil;
import org.jeecgframework.core.util.JeecgDataAutorUtils;
import org.jeecgframework.core.util.MutiLangUtil;
import org.jeecgframework.core.util.ResourceUtil;
import org.jeecgframework.core.util.SqlInjectionUtil;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.core.util.SysThemesUtil;
import org.jeecgframework.core.util.oConvertUtils;
import org.jeecgframework.web.cgform.common.CgAutoListConstant; import org.jeecgframework.web.cgform.common.CgAutoListConstant;
import org.jeecgframework.web.cgform.entity.config.CgFormFieldEntity; import org.jeecgframework.web.cgform.entity.config.CgFormFieldEntity;
import org.jeecgframework.web.cgform.entity.config.CgFormHeadEntity; import org.jeecgframework.web.cgform.entity.config.CgFormHeadEntity;
@ -41,11 +21,9 @@ import org.jeecgframework.web.cgform.service.template.CgformTemplateServiceI;
import org.jeecgframework.web.cgform.util.PublicUtil; import org.jeecgframework.web.cgform.util.PublicUtil;
import org.jeecgframework.web.cgform.util.QueryParamUtil; import org.jeecgframework.web.cgform.util.QueryParamUtil;
import org.jeecgframework.web.cgform.util.TemplateUtil; import org.jeecgframework.web.cgform.util.TemplateUtil;
import org.jeecgframework.web.system.controller.core.LoginController;
import org.jeecgframework.web.system.pojo.base.DictEntity; import org.jeecgframework.web.system.pojo.base.DictEntity;
import org.jeecgframework.web.system.pojo.base.TSOperation; import org.jeecgframework.web.system.pojo.base.TSOperation;
import org.jeecgframework.web.system.pojo.base.TSType; import org.jeecgframework.web.system.pojo.base.TSType;
import org.jeecgframework.web.system.service.MutiLangServiceI;
import org.jeecgframework.web.system.service.SystemService; import org.jeecgframework.web.system.service.SystemService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -54,6 +32,13 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
/** /**
* *
* @Title:CgAutoListController * @Title:CgAutoListController
@ -77,8 +62,6 @@ public class CgAutoListController extends BaseController{
private CgFormFieldServiceI cgFormFieldService; private CgFormFieldServiceI cgFormFieldService;
@Autowired @Autowired
private CgformTemplateServiceI cgformTemplateService; private CgformTemplateServiceI cgformTemplateService;
@Autowired
private MutiLangServiceI mutiLangService;
/** /**
* *
* @param id ID * @param id ID
@ -248,7 +231,7 @@ public class CgAutoListController extends BaseController{
//step.3 进行查询返回结果如果为tree的下级数据则不需要分页 //step.3 进行查询返回结果如果为tree的下级数据则不需要分页
List<Map<String, Object>> result = null; List<Map<String, Object>> result = null;
if(isTree && treeId !=null) { if(isTree && oConvertUtils.isNotEmpty(treeId)) {
//防止下级数据太大最大只取500条 //防止下级数据太大最大只取500条
result=cgTableService.querySingle(table, field.toString(), params,sort,order, 1, 500); result=cgTableService.querySingle(table, field.toString(), params,sort,order, 1, 500);
}else { }else {
@ -313,28 +296,16 @@ public class CgAutoListController extends BaseController{
} }
Long size = cgTableService.getQuerySingleSize(table, field, params); Long size = cgTableService.getQuerySingleSize(table, field, params);
dealDic(result,beans); dealDic(result,beans);
response.setContentType("application/json");
response.setHeader("Cache-Control", "no-store");
PrintWriter writer = null;
try {
writer = response.getWriter();
if(isTree && treeId !=null) { DataGrid datagrid = dataGrid;
//下级列表 datagrid.setTotal(size.intValue());
writer.println(QueryParamUtil.getJson(result)); datagrid.setResults(result);
}else { if(oConvertUtils.isEmpty(treeId)) {
writer.println(QueryParamUtil.getJson(result,size)); TagUtil.treegrid(response, datagrid, false);
} } else {
TagUtil.treegrid(response, datagrid, true);
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
writer.close();
} catch (Exception e2) {
}
} }
long end = System.currentTimeMillis(); long end = System.currentTimeMillis();
log.debug("动态列表查询耗时:"+(end-start)+" ms"); log.debug("动态列表查询耗时:"+(end-start)+" ms");
} }
@ -731,7 +702,7 @@ public class CgAutoListController extends BaseController{
DictEntity d = new DictEntity(); DictEntity d = new DictEntity();
d.setTypecode(tsType.getTypecode()); d.setTypecode(tsType.getTypecode());
d.setTypename(mutiLangService.getLang(tsType.getTypename())); d.setTypename(MutiLangUtil.getLang(tsType.getTypename()));
li.add(d); li.add(d);
} }

@ -500,6 +500,9 @@ public class CgFormBuildController extends BaseController {
file.put("fileKey", fileKey); file.put("fileKey", fileKey);
file.put("path", path); file.put("path", path);
file.put("field", field==null?"":field); file.put("field", field==null?"":field);
file.put("extend", b.getExtend());
files.add(file); files.add(file);
} }
data.put("filesList", files); data.put("filesList", files);

@ -65,9 +65,6 @@ import org.springframework.web.servlet.ModelAndView;
@Controller @Controller
@RequestMapping("/cgformTemplateController") @RequestMapping("/cgformTemplateController")
public class CgformTemplateController extends BaseController { public class CgformTemplateController extends BaseController {
/**
* Logger for this class
*/
private static final Logger logger = Logger.getLogger(CgformTemplateController.class); private static final Logger logger = Logger.getLogger(CgformTemplateController.class);
@Autowired @Autowired
@ -147,14 +144,17 @@ public class CgformTemplateController extends BaseController {
j.setMsg(message); j.setMsg(message);
return j; return j;
} }
private void delTemplate(HttpServletRequest request,String code){ private void delTemplate(HttpServletRequest request,String code){
String dirPath=getUploadBasePath(request)+File.separator+code; String dirPath=getUploadBasePath(request)+File.separator+code;
logger.info("---------【演示系统不允许删除模板】删除online模板-----------"+dirPath);
try { try {
org.apache.commons.io.FileUtils.deleteDirectory(new File(dirPath)); org.apache.commons.io.FileUtils.deleteDirectory(new File(dirPath));
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
/** /**
* *
* *
@ -168,9 +168,7 @@ public class CgformTemplateController extends BaseController {
message = "自定义模板删除成功"; message = "自定义模板删除成功";
try{ try{
for(String id:ids.split(",")){ for(String id:ids.split(",")){
CgformTemplateEntity cgformTemplate = systemService.getEntity(CgformTemplateEntity.class, CgformTemplateEntity cgformTemplate = systemService.getEntity(CgformTemplateEntity.class,id);
id
);
cgformTemplateService.delete(cgformTemplate); cgformTemplateService.delete(cgformTemplate);
if(cgformTemplate.getTemplateCode()!=null){ if(cgformTemplate.getTemplateCode()!=null){
delTemplate(request,cgformTemplate.getTemplateCode()); delTemplate(request,cgformTemplate.getTemplateCode());

@ -213,6 +213,8 @@ public class CgUploadController extends BaseController {
attributes.put("swfpath", attachment.getSwfpath()); attributes.put("swfpath", attachment.getSwfpath());
attributes.put("fileid", attachment.getId()); attributes.put("fileid", attachment.getId());
attributes.put("extend", attachment.getExtend());
} }
} }
ajaxJson.setAttributes(attributes); ajaxJson.setAttributes(attributes);

@ -1,22 +1,15 @@
package org.jeecgframework.web.cgform.engine.tag; package org.jeecgframework.web.cgform.engine.tag;
import java.io.IOException; import freemarker.core.Environment;
import java.io.Writer; import freemarker.template.*;
import java.util.Map; import org.jeecgframework.core.util.MutiLangUtil;
import org.jeecgframework.core.util.ApplicationContextUtil;
import org.jeecgframework.web.system.service.MutiLangServiceI;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import freemarker.core.Environment; import java.io.IOException;
import freemarker.template.TemplateDirectiveBody; import java.io.Writer;
import freemarker.template.TemplateDirectiveModel; import java.util.Map;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
import freemarker.template.TemplateScalarModel;
/** /**
* *
@ -41,9 +34,7 @@ public class MutiLangTag implements TemplateDirectiveModel {
String langArg = getAttribute(params, "langArg"); String langArg = getAttribute(params, "langArg");
MutiLangServiceI mutiLangService = ApplicationContextUtil.getContext().getBean(MutiLangServiceI.class); String lang_context = MutiLangUtil.getLang(langKey, langArg);
String lang_context = mutiLangService.getLang(langKey, langArg);
Writer out = env.getOut(); Writer out = env.getOut();

@ -5,6 +5,7 @@ import java.io.PrintWriter;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -242,7 +243,8 @@ public class CgReportController extends BaseController {
//SQL参数 //SQL参数
List<String> paramList = (List<String>) cgReportMap.get(CgReportConstant.PARAMS); List<String> paramList = (List<String>) cgReportMap.get(CgReportConstant.PARAMS);
//页面参数查询字段SQL条件语句片段 //页面参数查询字段SQL条件语句片段
Map<String,Object> pageSearchFields = new LinkedHashMap<String,Object>();
Map<String,Object> pageSearchFields = new IdentityHashMap<String,Object>();
//获取查询条件数据 //获取查询条件数据
Map<String,Object> paramData = new HashMap<String, Object>(); Map<String,Object> paramData = new HashMap<String, Object>();
@ -290,12 +292,13 @@ public class CgReportController extends BaseController {
} }
if(map.get("COUNT(*)") instanceof BigDecimal){ if(map.get("COUNT") instanceof BigDecimal){
BigDecimal count = (BigDecimal)map.get("COUNT(*)"); BigDecimal count = (BigDecimal)map.get("COUNT");
size = count.longValue(); size = count.longValue();
}else{ }else{
size=(Long)map.get("COUNT(*)"); size=Long.valueOf(map.get("COUNT")+"");
} }
}else{ }else{
result= cgReportService.queryByCgReportSql(querySql, pageSearchFields,paramData, p, r); result= cgReportService.queryByCgReportSql(querySql, pageSearchFields,paramData, p, r);

@ -204,26 +204,49 @@ function showReport(data, tabName) {
</#if> </#if>
//数据转换成报表格式 //数据转换成报表格式
var series = new Array(); var series = new Array();
<#-- update-begin-author:taoyan date:20181109 foronline图表配置 饼图无文字提示 全部显示slice -->
<#assign pietooltip="1">
<#list graphList as x> <#list graphList as x>
<#if (tabList?size > 1)> <#if (tabList?size > 1)>
if(tabName || $.trim(tabName)) { if(tabName || $.trim(tabName)) {
if("${x['tab_name']!''}" == tabName) { if("${x['tab_name']!''}" == tabName) {
<#if x['graph_type'] =='pie'>
var piearr = [];
$.map(data, function(n) {
piearr.push([n["${main['categories']}"],n["${x['field_name']}"] * 1 || 0]);
});
series.push({type: "${x['graph_type']}", name: "${x['graph_name']}", data:piearr });
<#else>
<#assign pietooltip="0">
series.push({type: "${x['graph_type']}", name: "${x['graph_name']}", data: $.map(data, function(n) { series.push({type: "${x['graph_type']}", name: "${x['graph_name']}", data: $.map(data, function(n) {
return n["${x['field_name']}"] * 1 || 0; return n["${x['field_name']}"] * 1 || 0;
})}); })});
</#if>
} }
} }
<#else> <#else>
series.push({type: "${x['graph_type']}", name: "${x['graph_name']}", data: $.map(data, function(n) { <#if x['graph_type'] =='pie'>
return n["${x['field_name']}"] * 1 || 0; var piearr = [];
})}); $.map(data, function(n) {
piearr.push([n["${main['categories']}"],n["${x['field_name']}"] * 1 || 0]);
});
series.push({type: "${x['graph_type']}", name: "${x['graph_name']}", data:piearr });
<#else>
<#assign pietooltip="0">
series.push({type: "${x['graph_type']}", name: "${x['graph_name']}", data: $.map(data, function(n) {
return n["${x['field_name']}"] * 1 || 0;
})});
</#if>
</#if> </#if>
</#list> </#list>
var options = reportUtil.getSplineOptions(categories, series, "${main['ytext']}"); var options = reportUtil.getSplineOptions(categories, series, "${main['ytext']}");
//options.tooltip.headerFormat = '<span style="font-size: 10px">{point.key}人</span><br/>'; //options.tooltip.headerFormat = '<span style="font-size: 10px">{point.key}人</span><br/>';
<#if pietooltip =="1">
options.tooltip = {pointFormat: '{point.y}, <b>{point.percentage:.1f}%</b>' };
</#if>
<#-- update-end-author:taoyan date:20181109 foronline图表配置 饼图无文字提示 全部显示slice -->
//执行扩展js //执行扩展js
if(typeof(xFixedOptions) == 'function') { if(typeof(xFixedOptions) == 'function') {
xFixedOptions(options, tabName); xFixedOptions(options, tabName);

@ -1,20 +1,7 @@
package org.jeecgframework.web.superquery.controller; package org.jeecgframework.web.superquery.controller;
import io.swagger.annotations.ApiParam;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import com.alibaba.fastjson.JSONArray;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.hibernate.criterion.Restrictions; import org.hibernate.criterion.Restrictions;
import org.jeecgframework.core.beanvalidator.BeanValidators; import org.jeecgframework.core.beanvalidator.BeanValidators;
@ -24,12 +11,7 @@ import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
import org.jeecgframework.core.common.model.json.AjaxJson; import org.jeecgframework.core.common.model.json.AjaxJson;
import org.jeecgframework.core.common.model.json.DataGrid; import org.jeecgframework.core.common.model.json.DataGrid;
import org.jeecgframework.core.constant.Globals; import org.jeecgframework.core.constant.Globals;
import org.jeecgframework.core.util.ApplicationContextUtil; import org.jeecgframework.core.util.*;
import org.jeecgframework.core.util.ExceptionUtil;
import org.jeecgframework.core.util.MyBeanUtils;
import org.jeecgframework.core.util.ResourceUtil;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.core.util.oConvertUtils;
import org.jeecgframework.jwt.util.ResponseMessage; import org.jeecgframework.jwt.util.ResponseMessage;
import org.jeecgframework.jwt.util.Result; import org.jeecgframework.jwt.util.Result;
import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.ExcelImportUtil;
@ -44,7 +26,6 @@ import org.jeecgframework.web.superquery.entity.SuperQueryTableEntity;
import org.jeecgframework.web.superquery.page.SuperQueryMainPage; import org.jeecgframework.web.superquery.page.SuperQueryMainPage;
import org.jeecgframework.web.superquery.service.SuperQueryMainServiceI; import org.jeecgframework.web.superquery.service.SuperQueryMainServiceI;
import org.jeecgframework.web.superquery.util.SuperQueryUtil; import org.jeecgframework.web.superquery.util.SuperQueryUtil;
import org.jeecgframework.web.system.service.MutiLangServiceI;
import org.jeecgframework.web.system.service.SystemService; import org.jeecgframework.web.system.service.SystemService;
import org.jeecgframework.web.system.service.UserService; import org.jeecgframework.web.system.service.UserService;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -54,19 +35,19 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.util.UriComponentsBuilder; import org.springframework.web.util.UriComponentsBuilder;
import com.alibaba.fastjson.JSONArray; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import java.io.IOException;
import java.util.*;
import java.util.Map.Entry;
/** /**
* @Title: Controller * @Title: Controller
@ -868,12 +849,11 @@ public class SuperQueryMainController extends BaseController {
List<Map<String, Object>> selectType = systemService.findForJdbc(sql,typegroup); List<Map<String, Object>> selectType = systemService.findForJdbc(sql,typegroup);
//step.2 根据查询的结果判断是否是国际化语言,是的话转换 //step.2 根据查询的结果判断是否是国际化语言,是的话转换
List<Map<String, Object>> listMap = new ArrayList<Map<String,Object>>(); List<Map<String, Object>> listMap = new ArrayList<Map<String,Object>>();
MutiLangServiceI mutiLangService = ApplicationContextUtil.getContext().getBean(MutiLangServiceI.class);
if(selectType.size()>0) { if(selectType.size()>0) {
for (Map<String, Object> map : selectType) { for (Map<String, Object> map : selectType) {
Map<String, Object> mutiMap = new HashMap<String, Object>(); Map<String, Object> mutiMap = new HashMap<String, Object>();
mutiMap.put("typecode", map.get("typecode")); mutiMap.put("typecode", map.get("typecode"));
mutiMap.put("typename", mutiLangService.getLang(map.get("typename").toString())); mutiMap.put("typename", MutiLangUtil.getLang(map.get("typename").toString()));
listMap.add(mutiMap); listMap.add(mutiMap);
} }
json.setObj(listMap); json.setObj(listMap);

@ -17,7 +17,6 @@ import org.jeecgframework.core.util.MutiLangUtil;
import org.jeecgframework.web.system.pojo.base.TSFunction; import org.jeecgframework.web.system.pojo.base.TSFunction;
import org.jeecgframework.web.system.pojo.base.TSIcon; import org.jeecgframework.web.system.pojo.base.TSIcon;
import org.jeecgframework.web.system.pojo.base.TSOperation; import org.jeecgframework.web.system.pojo.base.TSOperation;
import org.jeecgframework.web.system.service.MutiLangServiceI;
import org.jeecgframework.web.system.service.SystemService; import org.jeecgframework.web.system.service.SystemService;
import org.jeecgframework.web.system.util.IconImageUtil; import org.jeecgframework.web.system.util.IconImageUtil;

@ -1,45 +1,19 @@
package org.jeecgframework.web.system.controller.core; package org.jeecgframework.web.system.controller.core;
import java.io.IOException; import com.alibaba.fastjson.JSONObject;
import java.util.ArrayList; import com.baomidou.kisso.SSOHelper;
import java.util.Date; import com.baomidou.kisso.SSOToken;
import java.util.HashMap; import com.baomidou.kisso.common.util.HttpUtil;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.annotation.Resource;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.sf.json.JSONArray; import net.sf.json.JSONArray;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.jeecgframework.core.common.controller.BaseController; import org.jeecgframework.core.common.controller.BaseController;
import org.jeecgframework.core.common.model.json.AjaxJson; import org.jeecgframework.core.common.model.json.AjaxJson;
import org.jeecgframework.core.constant.Globals; import org.jeecgframework.core.constant.Globals;
import org.jeecgframework.core.enums.SysThemesEnum; import org.jeecgframework.core.enums.SysThemesEnum;
import org.jeecgframework.core.online.util.FreemarkerHelper; import org.jeecgframework.core.online.util.FreemarkerHelper;
import org.jeecgframework.core.util.ContextHolderUtils; import org.jeecgframework.core.util.*;
import org.jeecgframework.core.util.IpUtil;
import org.jeecgframework.core.util.JSONHelper;
import org.jeecgframework.core.util.ListtoMenu;
import org.jeecgframework.core.util.LogUtil;
import org.jeecgframework.core.util.MutiLangUtil;
import org.jeecgframework.core.util.PasswordUtil;
import org.jeecgframework.core.util.ResourceUtil;
import org.jeecgframework.core.util.SysThemesUtil;
import org.jeecgframework.core.util.oConvertUtils;
import org.jeecgframework.web.system.manager.ClientManager; import org.jeecgframework.web.system.manager.ClientManager;
import org.jeecgframework.web.system.pojo.base.Client; import org.jeecgframework.web.system.pojo.base.*;
import org.jeecgframework.web.system.pojo.base.TSFunction;
import org.jeecgframework.web.system.pojo.base.TSPasswordResetkey;
import org.jeecgframework.web.system.pojo.base.TSRole;
import org.jeecgframework.web.system.pojo.base.TSRoleUser;
import org.jeecgframework.web.system.pojo.base.TSUser;
import org.jeecgframework.web.system.service.MutiLangServiceI;
import org.jeecgframework.web.system.service.SystemService; import org.jeecgframework.web.system.service.SystemService;
import org.jeecgframework.web.system.service.UserService; import org.jeecgframework.web.system.service.UserService;
import org.jeecgframework.web.system.sms.util.MailUtil; import org.jeecgframework.web.system.sms.util.MailUtil;
@ -54,10 +28,13 @@ import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView; import org.springframework.web.servlet.view.RedirectView;
import com.alibaba.fastjson.JSONObject; import javax.annotation.Resource;
import com.baomidou.kisso.SSOHelper; import javax.servlet.http.Cookie;
import com.baomidou.kisso.SSOToken; import javax.servlet.http.HttpServletRequest;
import com.baomidou.kisso.common.util.HttpUtil; import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.*;
@ -75,9 +52,6 @@ public class LoginController extends BaseController{
@Resource @Resource
private ClientManager clientManager; private ClientManager clientManager;
@Autowired
private MutiLangServiceI mutiLangService;
@Autowired @Autowired
public void setSystemService(SystemService systemService) { public void setSystemService(SystemService systemService) {
this.systemService = systemService; this.systemService = systemService;
@ -115,16 +89,16 @@ public class LoginController extends BaseController{
//验证码 //验证码
String randCode = req.getParameter("randCode"); String randCode = req.getParameter("randCode");
if (StringUtils.isEmpty(randCode)) { if (StringUtils.isEmpty(randCode)) {
j.setMsg(mutiLangService.getLang("common.enter.verifycode")); j.setMsg(MutiLangUtil.getLang("common.enter.verifycode"));
j.setSuccess(false); j.setSuccess(false);
} else if (!randCode.equalsIgnoreCase(String.valueOf(session.getAttribute("randCode")))) { } else if (!randCode.equalsIgnoreCase(String.valueOf(session.getAttribute("randCode")))) {
j.setMsg(mutiLangService.getLang("common.verifycode.error")); j.setMsg(MutiLangUtil.getLang("common.verifycode.error"));
log.info("Username:{} ,验证码: {} 错误!", user.getUserName(), randCode); log.info("Username:{} ,验证码: {} 错误!", user.getUserName(), randCode);
j.setSuccess(false); j.setSuccess(false);
//IP黑名单 check //IP黑名单 check
} else if (userService.isInBlackList(IpUtil.getIpAddr(req))){ } else if (userService.isInBlackList(IpUtil.getIpAddr(req))){
log.info("Username:{} ,IP: {} 进入黑名单!", user.getUserName(), IpUtil.getIpAddr(req)); log.info("Username:{} ,IP: {} 进入黑名单!", user.getUserName(), IpUtil.getIpAddr(req));
j.setMsg(mutiLangService.getLang("common.blacklist.error")); j.setMsg(MutiLangUtil.getLang("common.blacklist.error"));
j.setSuccess(false); j.setSuccess(false);
} }
else { else {
@ -135,7 +109,7 @@ public class LoginController extends BaseController{
if(u == null || !u.getPassword().equals(PasswordUtil.encrypt(u.getUserName(),user.getPassword(), PasswordUtil.getStaticSalt()))){ if(u == null || !u.getPassword().equals(PasswordUtil.encrypt(u.getUserName(),user.getPassword(), PasswordUtil.getStaticSalt()))){
j.setMsg(mutiLangService.getLang("common.username.or.password.error")); j.setMsg(MutiLangUtil.getLang("common.username.or.password.error"));
j.setSuccess(false); j.setSuccess(false);
return j; return j;
} }
@ -143,13 +117,13 @@ public class LoginController extends BaseController{
if (u != null && u.getStatus() != 0) { if (u != null && u.getStatus() != 0) {
if(u.getDeleteFlag()==1){ if(u.getDeleteFlag()==1){
j.setMsg(mutiLangService.getLang("common.username.or.password.error")); j.setMsg(MutiLangUtil.getLang("common.username.or.password.error"));
j.setSuccess(false); j.setSuccess(false);
return j; return j;
} }
if("2".equals(u.getUserType())){ if("2".equals(u.getUserType())){
j.setMsg(mutiLangService.getLang("common.user.interfaceUser")); j.setMsg(MutiLangUtil.getLang("common.user.interfaceUser"));
j.setSuccess(false); j.setSuccess(false);
return j; return j;
} }
@ -176,7 +150,7 @@ public class LoginController extends BaseController{
} }
} else { } else {
//用户锁定提醒 //用户锁定提醒
j.setMsg(mutiLangService.getLang("common.lock.user")); j.setMsg(MutiLangUtil.getLang("common.lock.user"));
j.setSuccess(false); j.setSuccess(false);
} }
} }
@ -509,7 +483,7 @@ public class LoginController extends BaseController{
mailConfig.put("title", ResourceUtil.getConfigByName("resetpwd.mail.title")); mailConfig.put("title", ResourceUtil.getConfigByName("resetpwd.mail.title"));
mailConfig.put("content",content); mailConfig.put("content",content);
mailConfig.put("url",url); mailConfig.put("url",url);
mailConfig.put("commentUrl","http://www.jeecg.org"); mailConfig.put("commentUrl","http://www.jeecg.com");
String mailContent = new FreemarkerHelper().parseTemplate("export/mail/password_reset.ftl", mailConfig); String mailContent = new FreemarkerHelper().parseTemplate("export/mail/password_reset.ftl", mailConfig);

@ -1,8 +1,5 @@
package org.jeecgframework.web.system.controller.core; package org.jeecgframework.web.system.controller.core;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.jeecgframework.core.common.controller.BaseController; import org.jeecgframework.core.common.controller.BaseController;
import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery; import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
@ -23,6 +20,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** /**
* @Title: Controller * @Title: Controller
* @Description: * @Description:
@ -118,7 +118,7 @@ public class MutiLangController extends BaseController {
if(MutiLangUtil.existLangKey( mutiLang.getLangKey(),mutiLang.getLangCode())) if(MutiLangUtil.existLangKey( mutiLang.getLangKey(),mutiLang.getLangCode()))
{ {
message = mutiLangService.getLang("common.langkey.exist"); message = MutiLangUtil.getLang("common.langkey.exist");
} }
if(StringUtil.isEmpty(message)) if(StringUtil.isEmpty(message))
@ -163,9 +163,9 @@ public class MutiLangController extends BaseController {
try { try {
mutiLangService.refleshMutiLangCach(); mutiLangService.refleshMutiLangCach();
cacheService.clean(); cacheService.clean();
message = mutiLangService.getLang("common.refresh.success"); message = MutiLangUtil.getLang("common.refresh.success");
} catch (Exception e) { } catch (Exception e) {
message = mutiLangService.getLang("common.refresh.fail"); message = MutiLangUtil.getLang("common.refresh.fail");
} }
j.setMsg(message); j.setMsg(message);
return j; return j;

@ -1,29 +1,7 @@
package org.jeecgframework.web.system.controller.core; package org.jeecgframework.web.system.controller.core;
import java.io.BufferedInputStream; import com.alibaba.fastjson.JSONArray;
import java.io.File; import com.alibaba.fastjson.JSONObject;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.SocketException;
import java.net.URLEncoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply; import org.apache.commons.net.ftp.FTPReply;
@ -31,29 +9,14 @@ import org.apache.log4j.Logger;
import org.jeecgframework.core.common.controller.BaseController; import org.jeecgframework.core.common.controller.BaseController;
import org.jeecgframework.core.common.dao.jdbc.JdbcDao; import org.jeecgframework.core.common.dao.jdbc.JdbcDao;
import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery; import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
import org.jeecgframework.core.common.model.json.AjaxJson; import org.jeecgframework.core.common.model.json.*;
import org.jeecgframework.core.common.model.json.ComboTree;
import org.jeecgframework.core.common.model.json.DataGrid;
import org.jeecgframework.core.common.model.json.TreeGrid;
import org.jeecgframework.core.common.model.json.ValidForm;
import org.jeecgframework.core.constant.Globals; import org.jeecgframework.core.constant.Globals;
import org.jeecgframework.core.enums.StoreUploadFilePathEnum; import org.jeecgframework.core.enums.StoreUploadFilePathEnum;
import org.jeecgframework.core.extend.hqlsearch.parse.ObjectParseUtil; import org.jeecgframework.core.extend.hqlsearch.parse.ObjectParseUtil;
import org.jeecgframework.core.extend.hqlsearch.parse.PageValueConvertRuleEnum; import org.jeecgframework.core.extend.hqlsearch.parse.PageValueConvertRuleEnum;
import org.jeecgframework.core.extend.hqlsearch.parse.vo.HqlRuleEnum; import org.jeecgframework.core.extend.hqlsearch.parse.vo.HqlRuleEnum;
import org.jeecgframework.core.extend.swftools.SwfToolsUtil; import org.jeecgframework.core.extend.swftools.SwfToolsUtil;
import org.jeecgframework.core.util.FileUtils; import org.jeecgframework.core.util.*;
import org.jeecgframework.core.util.JSONHelper;
import org.jeecgframework.core.util.ListUtils;
import org.jeecgframework.core.util.MutiLangSqlCriteriaUtil;
import org.jeecgframework.core.util.MutiLangUtil;
import org.jeecgframework.core.util.PropertiesUtil;
import org.jeecgframework.core.util.ResourceUtil;
import org.jeecgframework.core.util.SetListSort;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.core.util.UrlCheckUtil;
import org.jeecgframework.core.util.YouBianCodeUtil;
import org.jeecgframework.core.util.oConvertUtils;
import org.jeecgframework.tag.core.easyui.TagUtil; import org.jeecgframework.tag.core.easyui.TagUtil;
import org.jeecgframework.tag.vo.datatable.SortDirection; import org.jeecgframework.tag.vo.datatable.SortDirection;
import org.jeecgframework.tag.vo.easyui.ComboTreeModel; import org.jeecgframework.tag.vo.easyui.ComboTreeModel;
@ -61,17 +24,7 @@ import org.jeecgframework.tag.vo.easyui.TreeGridModel;
import org.jeecgframework.web.cgform.exception.BusinessException; import org.jeecgframework.web.cgform.exception.BusinessException;
import org.jeecgframework.web.system.manager.ClientManager; import org.jeecgframework.web.system.manager.ClientManager;
import org.jeecgframework.web.system.manager.ClientSort; import org.jeecgframework.web.system.manager.ClientSort;
import org.jeecgframework.web.system.pojo.base.Client; import org.jeecgframework.web.system.pojo.base.*;
import org.jeecgframework.web.system.pojo.base.DataLogDiff;
import org.jeecgframework.web.system.pojo.base.DictEntity;
import org.jeecgframework.web.system.pojo.base.TSDatalogEntity;
import org.jeecgframework.web.system.pojo.base.TSDepart;
import org.jeecgframework.web.system.pojo.base.TSFunction;
import org.jeecgframework.web.system.pojo.base.TSRole;
import org.jeecgframework.web.system.pojo.base.TSRoleFunction;
import org.jeecgframework.web.system.pojo.base.TSType;
import org.jeecgframework.web.system.pojo.base.TSTypegroup;
import org.jeecgframework.web.system.service.MutiLangServiceI;
import org.jeecgframework.web.system.service.SystemService; import org.jeecgframework.web.system.service.SystemService;
import org.jeecgframework.web.system.service.UserService; import org.jeecgframework.web.system.service.UserService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -87,8 +40,15 @@ import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView; import org.springframework.web.servlet.view.RedirectView;
import com.alibaba.fastjson.JSONArray; import javax.annotation.Resource;
import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.SocketException;
import java.net.URLEncoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/** /**
* *
@ -101,7 +61,6 @@ public class SystemController extends BaseController {
private static final Logger logger = Logger.getLogger(SystemController.class); private static final Logger logger = Logger.getLogger(SystemController.class);
private UserService userService; private UserService userService;
private SystemService systemService; private SystemService systemService;
private MutiLangServiceI mutiLangService;
@Resource @Resource
private ClientManager clientManager; private ClientManager clientManager;
@ -111,10 +70,6 @@ public class SystemController extends BaseController {
this.systemService = systemService; this.systemService = systemService;
} }
@Autowired
public void setMutiLangService(MutiLangServiceI mutiLangService) {
this.mutiLangService = mutiLangService;
}
public UserService getUserService() { public UserService getUserService() {
return userService; return userService;
@ -401,7 +356,7 @@ public class SystemController extends BaseController {
// private void assembleConditionForMutilLang(CriteriaQuery cq, String typegroupname, List<String> typegroupnameKeyList) { // private void assembleConditionForMutilLang(CriteriaQuery cq, String typegroupname, List<String> typegroupnameKeyList) {
// Map<String,String> typegroupnameMap = new HashMap<String, String>(); // Map<String,String> typegroupnameMap = new HashMap<String, String>();
// for (String nameKey : typegroupnameKeyList) { // for (String nameKey : typegroupnameKeyList) {
// String name = mutiLangService.getLang(nameKey); // String name = MutiLangUtil.getLang(nameKey);
// typegroupnameMap.put(nameKey, name); // typegroupnameMap.put(nameKey, name);
// } // }
// List<String> tepegroupnameParamList = new ArrayList<String>(); // List<String> tepegroupnameParamList = new ArrayList<String>();
@ -445,11 +400,11 @@ public class SystemController extends BaseController {
AjaxJson j = new AjaxJson(); AjaxJson j = new AjaxJson();
if (id.startsWith("G")) {//分组 if (id.startsWith("G")) {//分组
TSTypegroup typegroup = systemService.getEntity(TSTypegroup.class, id.substring(1)); TSTypegroup typegroup = systemService.getEntity(TSTypegroup.class, id.substring(1));
message = "数据字典分组: " + mutiLangService.getLang(typegroup.getTypegroupname()) + "被删除 成功"; message = "数据字典分组: " + MutiLangUtil.getLang(typegroup.getTypegroupname()) + "被删除 成功";
systemService.delete(typegroup); systemService.delete(typegroup);
} else { } else {
TSType type = systemService.getEntity(TSType.class, id.substring(1)); TSType type = systemService.getEntity(TSType.class, id.substring(1));
message = "数据字典类型: " + mutiLangService.getLang(type.getTypename()) + "被删除 成功"; message = "数据字典类型: " + MutiLangUtil.getLang(type.getTypename()) + "被删除 成功";
systemService.delete(type); systemService.delete(type);
} }
systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO); systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
@ -471,14 +426,14 @@ public class SystemController extends BaseController {
AjaxJson j = new AjaxJson(); AjaxJson j = new AjaxJson();
typegroup = systemService.getEntity(TSTypegroup.class, typegroup.getId()); typegroup = systemService.getEntity(TSTypegroup.class, typegroup.getId());
message = "类型分组: " + mutiLangService.getLang(typegroup.getTypegroupname()) + " 被删除 成功"; message = "类型分组: " + MutiLangUtil.getLang(typegroup.getTypegroupname()) + " 被删除 成功";
if (ListUtils.isNullOrEmpty(typegroup.getTSTypes())) { if (ListUtils.isNullOrEmpty(typegroup.getTSTypes())) {
systemService.delete(typegroup); systemService.delete(typegroup);
systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO); systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
//刷新缓存 //刷新缓存
systemService.refleshTypeGroupCach(); systemService.refleshTypeGroupCach();
} else { } else {
message = "类型分组: " + mutiLangService.getLang(typegroup.getTypegroupname()) + " 下有类型信息,不能删除!"; message = "类型分组: " + MutiLangUtil.getLang(typegroup.getTypegroupname()) + " 下有类型信息,不能删除!";
} }
j.setMsg(message); j.setMsg(message);
@ -496,7 +451,7 @@ public class SystemController extends BaseController {
String message = null; String message = null;
AjaxJson j = new AjaxJson(); AjaxJson j = new AjaxJson();
type = systemService.getEntity(TSType.class, type.getId()); type = systemService.getEntity(TSType.class, type.getId());
message = "类型: " + mutiLangService.getLang(type.getTypename()) + "被删除 成功"; message = "类型: " + MutiLangUtil.getLang(type.getTypename()) + "被删除 成功";
systemService.delete(type); systemService.delete(type);
//刷新缓存 //刷新缓存
systemService.refleshTypesCach(type); systemService.refleshTypesCach(type);
@ -539,9 +494,9 @@ public class SystemController extends BaseController {
AjaxJson j = new AjaxJson(); AjaxJson j = new AjaxJson();
try{ try{
systemService.refreshTypeGroupAndTypes(); systemService.refreshTypeGroupAndTypes();
message = mutiLangService.getLang("common.refresh.success"); message = MutiLangUtil.getLang("common.refresh.success");
} catch (Exception e) { } catch (Exception e) {
message = mutiLangService.getLang("common.refresh.fail"); message = MutiLangUtil.getLang("common.refresh.fail");
} }
j.setMsg(message); j.setMsg(message);
return j; return j;
@ -560,11 +515,11 @@ public class SystemController extends BaseController {
String message = null; String message = null;
AjaxJson j = new AjaxJson(); AjaxJson j = new AjaxJson();
if (StringUtil.isNotEmpty(typegroup.getId())) { if (StringUtil.isNotEmpty(typegroup.getId())) {
message = "类型分组: " + mutiLangService.getLang(typegroup.getTypegroupname()) + "被更新成功"; message = "类型分组: " + MutiLangUtil.getLang(typegroup.getTypegroupname()) + "被更新成功";
userService.saveOrUpdate(typegroup); userService.saveOrUpdate(typegroup);
systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO); systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO);
} else { } else {
message = "类型分组: " + mutiLangService.getLang(typegroup.getTypegroupname()) + "被添加成功"; message = "类型分组: " + MutiLangUtil.getLang(typegroup.getTypegroupname()) + "被添加成功";
userService.save(typegroup); userService.save(typegroup);
systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO); systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO);
} }
@ -613,11 +568,11 @@ public class SystemController extends BaseController {
String message = null; String message = null;
AjaxJson j = new AjaxJson(); AjaxJson j = new AjaxJson();
if (StringUtil.isNotEmpty(type.getId())) { if (StringUtil.isNotEmpty(type.getId())) {
message = "类型: " + mutiLangService.getLang(type.getTypename()) + "被更新成功"; message = "类型: " + MutiLangUtil.getLang(type.getTypename()) + "被更新成功";
userService.saveOrUpdate(type); userService.saveOrUpdate(type);
systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO); systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO);
} else { } else {
message = "类型: " + mutiLangService.getLang(type.getTypename()) + "被添加成功"; message = "类型: " + MutiLangUtil.getLang(type.getTypename()) + "被添加成功";
userService.save(type); userService.save(type);
systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO); systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO);
} }
@ -657,7 +612,7 @@ public class SystemController extends BaseController {
req.setAttribute("typegroup", typegroup); req.setAttribute("typegroup", typegroup);
req.setAttribute("typegroupname", mutiLangService.getLang(typegroupname)); req.setAttribute("typegroupname", MutiLangUtil.getLang(typegroupname));
if (StringUtil.isNotEmpty(type.getId())) { if (StringUtil.isNotEmpty(type.getId())) {
type = systemService.getEntity(TSType.class, type.getId()); type = systemService.getEntity(TSType.class, type.getId());
req.setAttribute("type", type); req.setAttribute("type", type);

@ -602,38 +602,19 @@ public class UserController extends BaseController {
public AjaxJson del(TSUser user, HttpServletRequest req) { public AjaxJson del(TSUser user, HttpServletRequest req) {
String message = null; String message = null;
AjaxJson j = new AjaxJson(); AjaxJson j = new AjaxJson();
if("admin".equals(user.getUserName())){
message = "超级管理员[admin]不可删除";
j.setMsg(message);
return j;
}
user = systemService.getEntity(TSUser.class, user.getId()); user = systemService.getEntity(TSUser.class, user.getId());
// List<TSRoleUser> roleUser = systemService.findByProperty(TSRoleUser.class, "TSUser.id", user.getId()); // List<TSRoleUser> roleUser = systemService.findByProperty(TSRoleUser.class, "TSUser.id", user.getId());
if (!user.getStatus().equals(Globals.User_ADMIN)) { if(!"admin".equals(user.getUserName())){
user.setDeleteFlag(Globals.Delete_Forbidden); user.setDeleteFlag(Globals.Delete_Forbidden);
userService.updateEntitie(user); userService.updateEntitie(user);
message = "用户:" + user.getUserName() + "删除成功"; message = "用户:" + user.getUserName() + "删除成功";
logger.info("["+IpUtil.getIpAddr(req)+"][逻辑删除用户]"+message); logger.info("["+IpUtil.getIpAddr(req)+"][逻辑删除用户]"+message);
/**
if (roleUser.size()>0) {
// 删除用户时先删除用户和角色关系表
delRoleUser(user);
systemService.executeSql("delete from t_s_user_org where user_id=?", user.getId()); // 删除 用户-机构 数据
userService.delete(user);
message = "用户:" + user.getUserName() + "删除成功";
systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
} else {
userService.delete(user);
message = "用户:" + user.getUserName() + "删除成功";
}
**/
} else { } else {
message = "超级管理员不可删除"; message = "超级管理员[admin]不可删除";
j.setMsg(message);
return j;
} }
j.setMsg(message); j.setMsg(message);
@ -657,24 +638,6 @@ public class UserController extends BaseController {
return j; return j;
} }
user = systemService.getEntity(TSUser.class, user.getId()); user = systemService.getEntity(TSUser.class, user.getId());
/*List<TSRoleUser> roleUser = systemService.findByProperty(TSRoleUser.class, "TSUser.id", user.getId());
if (!user.getStatus().equals(Globals.User_ADMIN)) {
if (roleUser.size()>0) {
// 删除用户时先删除用户和角色关系表
delRoleUser(user);
systemService.executeSql("delete from t_s_user_org where user_id=?", user.getId()); // 删除 用户-机构 数据
userService.delete(user);
message = "用户:" + user.getUserName() + "删除成功";
systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
} else {
userService.delete(user);
message = "用户:" + user.getUserName() + "删除成功";
}
} else {
message = "超级管理员不可删除";
}*/
try { try {
message = userService.trueDel(user); message = userService.trueDel(user);
logger.info("["+IpUtil.getIpAddr(req)+"][真实删除用户]"+message); logger.info("["+IpUtil.getIpAddr(req)+"][真实删除用户]"+message);
@ -683,20 +646,10 @@ public class UserController extends BaseController {
message ="删除失败"; message ="删除失败";
} }
j.setMsg(message); j.setMsg(message);
return j; return j;
} }
/*public void delRoleUser(TSUser user) {
// 同步删除用户角色关联表
List<TSRoleUser> roleUserList = systemService.findByProperty(TSRoleUser.class, "TSUser.id", user.getId());
if (roleUserList.size() >= 1) {
for (TSRoleUser tRoleUser : roleUserList) {
systemService.delete(tRoleUser);
}
}
}*/
/** /**
* *
* *

@ -94,10 +94,6 @@ public class ClientManager {
* sessionId * sessionId
*/ */
public void removeClinet(String sessionId){ public void removeClinet(String sessionId){
try {
ContextHolderUtils.removeSession(sessionId);
} catch (Exception e) {}
try { try {
HttpSession session = ContextHolderUtils.getSession(); HttpSession session = ContextHolderUtils.getSession();
session.removeAttribute(sessionId); session.removeAttribute(sessionId);

@ -6,9 +6,6 @@ public interface MutiLangServiceI{
public void initAllMutiLang(); public void initAllMutiLang();
public String getLang(String lang_key);
public String getLang(String lang_key, String args);
public void refleshMutiLangCach(); public void refleshMutiLangCach();

@ -7,6 +7,7 @@ import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import org.jeecgframework.core.common.dao.ICommonDao; import org.jeecgframework.core.common.dao.ICommonDao;
import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
import org.jeecgframework.core.util.BrowserUtils; import org.jeecgframework.core.util.BrowserUtils;
import org.jeecgframework.core.util.ContextHolderUtils; import org.jeecgframework.core.util.ContextHolderUtils;
import org.jeecgframework.core.util.ResourceUtil; import org.jeecgframework.core.util.ResourceUtil;
@ -22,17 +23,13 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@Service("mutiLangService") @Service("mutiLangService")
public class MutiLangServiceImpl extends CommonServiceImpl implements MutiLangServiceI {
public class MutiLangServiceImpl implements MutiLangServiceI {
private static final Logger logger = LoggerFactory.getLogger(MutiLangServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(MutiLangServiceImpl.class);
@Autowired @Autowired
public ICommonDao commonDao;
@Autowired
private CacheServiceI cacheService; private CacheServiceI cacheService;
/**初始化语言信息TOMCAT启动时直接加入到内存中**/ /**初始化语言信息TOMCAT启动时直接加入到内存中**/
@Transactional(readOnly = true)
public void initAllMutiLang() { public void initAllMutiLang() {
Map<String, String> ls = new HashMap<String, String>(); Map<String, String> ls = new HashMap<String, String>();
List<MutiLangEntity> mutiLang = this.commonDao.loadAll(MutiLangEntity.class); List<MutiLangEntity> mutiLang = this.commonDao.loadAll(MutiLangEntity.class);
@ -75,50 +72,6 @@ public class MutiLangServiceImpl implements MutiLangServiceI {
} }
/**取 o_muti_lang.lang_key 的值返回当前语言的值**/
public String getLang(String langKey)
{
//如果为空返回空串防止返回null
if(langKey==null){
return "";
}
HttpServletRequest request = ContextHolderUtils.getRequest();
String language = oConvertUtils.getString(request.getSession().getAttribute("lang"));
if(oConvertUtils.isEmpty(language)){
language = BrowserUtils.getBrowserLanguage(request);
}
String langContext = ResourceUtil.getMutiLan(langKey + "_" + language);
if(StringUtil.isEmpty(langContext))
{
langContext = ResourceUtil.getMutiLan("common.notfind.langkey" + "_" + language);
if("null".equals(langContext)||langContext==null ||langKey.startsWith("?")){
langContext = "";
}
langContext = langContext + langKey;
}
return langContext;
}
public String getLang(String lanKey, String langArg) {
String langContext = "";
if(StringUtil.isEmpty(langArg))
{
langContext = getLang(lanKey);
} else
{
String[] argArray = langArg.split(",");
langContext = getLang(lanKey);
for(int i=0; i< argArray.length; i++)
{
String langKeyArg = argArray[i].trim();
String langKeyContext = getLang(langKeyArg);
langContext = StringUtil.replace(langContext, "{" + i + "}", langKeyContext);
}
}
return langContext;
}
/** 刷新多语言cach **/ /** 刷新多语言cach **/
public void refleshMutiLangCach() { public void refleshMutiLangCach() {

@ -20,14 +20,7 @@ import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions; import org.hibernate.criterion.Restrictions;
import org.jeecgframework.core.common.service.impl.CommonServiceImpl; import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
import org.jeecgframework.core.constant.Globals; import org.jeecgframework.core.constant.Globals;
import org.jeecgframework.core.util.BrowserUtils; import org.jeecgframework.core.util.*;
import org.jeecgframework.core.util.ContextHolderUtils;
import org.jeecgframework.core.util.DateUtils;
import org.jeecgframework.core.util.IpUtil;
import org.jeecgframework.core.util.NumberComparator;
import org.jeecgframework.core.util.ResourceUtil;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.core.util.oConvertUtils;
import org.jeecgframework.web.system.manager.ClientManager; import org.jeecgframework.web.system.manager.ClientManager;
import org.jeecgframework.web.system.pojo.base.Client; import org.jeecgframework.web.system.pojo.base.Client;
import org.jeecgframework.web.system.pojo.base.TSDepart; import org.jeecgframework.web.system.pojo.base.TSDepart;
@ -37,7 +30,6 @@ import org.jeecgframework.web.system.pojo.base.TSRole;
import org.jeecgframework.web.system.pojo.base.TSRoleUser; import org.jeecgframework.web.system.pojo.base.TSRoleUser;
import org.jeecgframework.web.system.pojo.base.TSUser; import org.jeecgframework.web.system.pojo.base.TSUser;
import org.jeecgframework.web.system.pojo.base.TSUserOrg; import org.jeecgframework.web.system.pojo.base.TSUserOrg;
import org.jeecgframework.web.system.service.MutiLangServiceI;
import org.jeecgframework.web.system.service.UserService; import org.jeecgframework.web.system.service.UserService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -51,8 +43,6 @@ import org.springframework.transaction.annotation.Transactional;
@Service("userService") @Service("userService")
public class UserServiceImpl extends CommonServiceImpl implements UserService { public class UserServiceImpl extends CommonServiceImpl implements UserService {
private Logger log = Logger.getLogger(UserServiceImpl.class); private Logger log = Logger.getLogger(UserServiceImpl.class);
@Autowired
private MutiLangServiceI mutiLangService;
@Resource @Resource
private ClientManager clientManager; private ClientManager clientManager;
@ -88,17 +78,17 @@ public class UserServiceImpl extends CommonServiceImpl implements UserService {
public String trueDel(TSUser user) { public String trueDel(TSUser user) {
String message = ""; String message = "";
List<TSRoleUser> roleUser = this.commonDao.findByProperty(TSRoleUser.class, "TSUser.id", user.getId()); List<TSRoleUser> roleUser = this.commonDao.findByProperty(TSRoleUser.class, "TSUser.id", user.getId());
if (!user.getStatus().equals(Globals.User_ADMIN)) { if(!"admin".equals(user.getUserName())){
if (roleUser.size()>0) { if (roleUser.size()>0) {
// 删除用户时先删除用户和角色关系表 // 删除用户时先删除用户和角色关系表
delRoleUser(user); delRoleUser(user);
this.commonDao.executeSql("delete from t_s_user_org where user_id=?", user.getId()); // 删除 用户-机构 数据 this.commonDao.executeSql("delete from t_s_user_org where user_id=?", user.getId()); // 删除 用户-机构 数据
this.commonDao.delete(user); this.commonDao.delete(user);
message = "用户:" + user.getUserName() + "删除成功"; message = user.getUserName() + " 用户真实删除成功";
this.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO); this.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
} else { } else {
this.commonDao.delete(user); this.commonDao.delete(user);
message = "用户:" + user.getUserName() + "删除成功"; message = user.getUserName() + " 用户真实删除成功";
} }
} else { } else {
message = "超级管理员不可删除"; message = "超级管理员不可删除";
@ -290,7 +280,7 @@ public class UserServiceImpl extends CommonServiceImpl implements UserService {
HttpSession session = ContextHolderUtils.getSession(); HttpSession session = ContextHolderUtils.getSession();
user.setDepartid(orgId); user.setDepartid(orgId);
session.setAttribute(ResourceUtil.LOCAL_CLINET_USER, user); session.setAttribute(ResourceUtil.LOCAL_CLINET_USER, user);
message = mutiLangService.getLang("common.user") + ": " + user.getUserName() + "["+ currentDepart.getDepartname() + "]" + mutiLangService.getLang("common.login.success"); message = MutiLangUtil.getLang("common.user") + ": " + user.getUserName() + "["+ currentDepart.getDepartname() + "]" + MutiLangUtil.getLang("common.login.success");
//IE列表操作按钮的样式 //IE列表操作按钮的样式
String browserType = ""; String browserType = "";
@ -345,7 +335,7 @@ public class UserServiceImpl extends CommonServiceImpl implements UserService {
for (TSFunction function : primaryMenu) { for (TSFunction function : primaryMenu) {
if (function.getFunctionLevel() == 0) { if (function.getFunctionLevel() == 0) {
String lang_key = function.getFunctionName(); String lang_key = function.getFunctionName();
String lang_context = mutiLangService.getLang(lang_key); String lang_context = MutiLangUtil.getLang(lang_key);
lang_context = lang_context.trim(); lang_context = lang_context.trim();
if ("业务申请".equals(lang_context)) { if ("业务申请".equals(lang_context)) {
@ -420,7 +410,7 @@ public class UserServiceImpl extends CommonServiceImpl implements UserService {
if (function.getFunctionLevel() == 1) { if (function.getFunctionLevel() == 1) {
String lang_key = function.getFunctionName(); String lang_key = function.getFunctionName();
String lang_context = mutiLangService.getLang(lang_key); String lang_context = MutiLangUtil.getLang(lang_key);
if ("申请".equals(lang_key)) { if ("申请".equals(lang_key)) {
lang_context = "申请"; lang_context = "申请";
String s = ""; String s = "";

@ -20,7 +20,7 @@ import org.apache.log4j.Logger;
* @description:Mini Bean Scan * @description:Mini Bean Scan
* @author * @author
* @mail zhangdaiscott@163.com * @mail zhangdaiscott@163.com
* @category www.jeecg.org * @category www.jeecg.com
* @date 20130817 * @date 20130817
* @version V1.0 * @version V1.0
*/ */

@ -8,7 +8,7 @@ import java.sql.SQLOutput;
/** /**
* *
* @author * @author
* @site www.jeecg.org * @site www.jeecg.com
* *
*/ */
public class JeecgOneGUI { public class JeecgOneGUI {

@ -11,7 +11,7 @@ import org.jeecgframework.codegenerate.pojo.onetomany.SubTableEntity;
/** /**
* *
* @author * @author
* @site www.jeecg.org * @site www.jeecg.com
* *
*/ */
public class JeecgOneToMainUtil { public class JeecgOneToMainUtil {

@ -163,11 +163,13 @@ public class ${entityName}Controller extends BaseController {
public void datagrid(${entityName}Entity ${entityName?uncap_first},HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) { public void datagrid(${entityName}Entity ${entityName?uncap_first},HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
CriteriaQuery cq = new CriteriaQuery(${entityName}Entity.class, dataGrid); CriteriaQuery cq = new CriteriaQuery(${entityName}Entity.class, dataGrid);
<#if cgformConfig.cgFormHead.isTree == 'Y'> <#if cgformConfig.cgFormHead.isTree == 'Y'>
boolean isSubTree = false;
if(StringUtil.isEmpty(${entityName?uncap_first}.getId())){ if(StringUtil.isEmpty(${entityName?uncap_first}.getId())){
cq.isNull("${cgformConfig.cgFormHead.treeParentIdFieldNamePage}"); cq.isNull("${cgformConfig.cgFormHead.treeParentIdFieldNamePage}");
}else{ }else{
cq.eq("${cgformConfig.cgFormHead.treeParentIdFieldNamePage}", ${entityName?uncap_first}.getId()); cq.eq("${cgformConfig.cgFormHead.treeParentIdFieldNamePage}", ${entityName?uncap_first}.getId());
${entityName?uncap_first}.setId(null); ${entityName?uncap_first}.setId(null);
isSubTree = true;
} }
</#if> </#if>
//查询条件组装器 //查询条件组装器
@ -178,12 +180,15 @@ public class ${entityName}Controller extends BaseController {
throw new BusinessException(e.getMessage()); throw new BusinessException(e.getMessage());
} }
cq.add(); cq.add();
this.${entityName?uncap_first}Service.getDataGridReturn(cq, true); <#-- update-begin-author:taoyan date:20181106 for:树形列表子节点查询不分页 -->
<#if cgformConfig.cgFormHead.isTree == 'Y'> <#if cgformConfig.cgFormHead.isTree == 'Y'>
TagUtil.treegrid(response, dataGrid); this.${entityName?uncap_first}Service.getDataGridReturn(cq, !isSubTree);
TagUtil.treegrid(response, dataGrid, isSubTree);
<#else> <#else>
this.${entityName?uncap_first}Service.getDataGridReturn(cq, true);
TagUtil.datagrid(response, dataGrid); TagUtil.datagrid(response, dataGrid);
</#if> </#if>
<#-- update-end-author:taoyan date:20181106 for:树形列表子节点查询不分页 -->
} }
/** /**

@ -162,11 +162,13 @@ public class ${entityName}Controller extends BaseController {
public void datagrid(${entityName}Entity ${entityName?uncap_first},HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) { public void datagrid(${entityName}Entity ${entityName?uncap_first},HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
CriteriaQuery cq = new CriteriaQuery(${entityName}Entity.class, dataGrid); CriteriaQuery cq = new CriteriaQuery(${entityName}Entity.class, dataGrid);
<#if cgformConfig.cgFormHead.isTree == 'Y'> <#if cgformConfig.cgFormHead.isTree == 'Y'>
boolean isSubTree = false;
if(StringUtil.isEmpty(${entityName?uncap_first}.getId())){ if(StringUtil.isEmpty(${entityName?uncap_first}.getId())){
cq.isNull("${cgformConfig.cgFormHead.treeParentIdFieldNamePage}"); cq.isNull("${cgformConfig.cgFormHead.treeParentIdFieldNamePage}");
}else{ }else{
cq.eq("${cgformConfig.cgFormHead.treeParentIdFieldNamePage}", ${entityName?uncap_first}.getId()); cq.eq("${cgformConfig.cgFormHead.treeParentIdFieldNamePage}", ${entityName?uncap_first}.getId());
${entityName?uncap_first}.setId(null); ${entityName?uncap_first}.setId(null);
isSubTree = true;
} }
</#if> </#if>
//查询条件组装器 //查询条件组装器
@ -177,12 +179,15 @@ public class ${entityName}Controller extends BaseController {
throw new BusinessException(e.getMessage()); throw new BusinessException(e.getMessage());
} }
cq.add(); cq.add();
this.${entityName?uncap_first}Service.getDataGridReturn(cq, true); <#-- update-begin-author:taoyan date:20181106 for:树形列表子节点查询不分页 -->
<#if cgformConfig.cgFormHead.isTree == 'Y'> <#if cgformConfig.cgFormHead.isTree == 'Y'>
TagUtil.treegrid(response, dataGrid); this.${entityName?uncap_first}Service.getDataGridReturn(cq, !isSubTree);
TagUtil.treegrid(response, dataGrid, isSubTree);
<#else> <#else>
this.${entityName?uncap_first}Service.getDataGridReturn(cq, true);
TagUtil.datagrid(response, dataGrid); TagUtil.datagrid(response, dataGrid);
</#if> </#if>
<#-- update-end-author:taoyan date:20181106 for:树形列表子节点查询不分页 -->
} }
/** /**

@ -169,11 +169,13 @@ public class ${entityName}Controller extends BaseController {
public void datagrid(${entityName}Entity ${entityName?uncap_first},HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) { public void datagrid(${entityName}Entity ${entityName?uncap_first},HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
CriteriaQuery cq = new CriteriaQuery(${entityName}Entity.class, dataGrid); CriteriaQuery cq = new CriteriaQuery(${entityName}Entity.class, dataGrid);
<#if cgformConfig.cgFormHead.isTree == 'Y'> <#if cgformConfig.cgFormHead.isTree == 'Y'>
boolean isSubTree = false;
if(StringUtil.isEmpty(${entityName?uncap_first}.getId())){ if(StringUtil.isEmpty(${entityName?uncap_first}.getId())){
cq.isNull("${cgformConfig.cgFormHead.treeParentIdFieldNamePage}"); cq.isNull("${cgformConfig.cgFormHead.treeParentIdFieldNamePage}");
}else{ }else{
cq.eq("${cgformConfig.cgFormHead.treeParentIdFieldNamePage}", ${entityName?uncap_first}.getId()); cq.eq("${cgformConfig.cgFormHead.treeParentIdFieldNamePage}", ${entityName?uncap_first}.getId());
${entityName?uncap_first}.setId(null); ${entityName?uncap_first}.setId(null);
isSubTree = true;
} }
</#if> </#if>
//查询条件组装器 //查询条件组装器
@ -184,12 +186,15 @@ public class ${entityName}Controller extends BaseController {
throw new BusinessException(e.getMessage()); throw new BusinessException(e.getMessage());
} }
cq.add(); cq.add();
this.${entityName?uncap_first}Service.getDataGridReturn(cq, true); <#-- update-begin-author:taoyan date:20181106 for:树形列表子节点查询不分页 -->
<#if cgformConfig.cgFormHead.isTree == 'Y'> <#if cgformConfig.cgFormHead.isTree == 'Y'>
TagUtil.treegrid(response, dataGrid); this.${entityName?uncap_first}Service.getDataGridReturn(cq, !isSubTree);
TagUtil.treegrid(response, dataGrid, isSubTree);
<#else> <#else>
this.${entityName?uncap_first}Service.getDataGridReturn(cq, true);
TagUtil.datagrid(response, dataGrid); TagUtil.datagrid(response, dataGrid);
</#if> </#if>
<#-- update-end-author:taoyan date:20181106 for:树形列表子节点查询不分页 -->
} }
/** /**

@ -200,12 +200,19 @@ function createDataGrid${config_id}(){
} }
] ]
], ],
<#--update-begin--Author:taoyan Date:20181106 for树形列表分页bug+行点击事件报错 -->
onLoadSuccess:function(data){ onLoadSuccess:function(data){
$("#${config_id}List").<#if config_istree=="Y">treegrid<#else>datagrid</#if>("clearSelections"); $("#${config_id}List").<#if config_istree=="Y">treegrid<#else>datagrid</#if>("clearSelections");
delete $("#${config_id}List").treegrid('options').queryParams['id'];
}, },
onClickRow:function(rowIndex,rowData) onClickRow:function(rowIndex,rowData)
{rowid=rowData.id;gridname='${config_id}List';} <#if config_istree=="Y">
{rowid=rowIndex.id;gridname='${config_id}List';}
<#else>
{rowid=rowData.id;gridname='${config_id}List';}
</#if>
}); });
<#--update-end--Author:taoyan Date:20181106 for树形列表分页bug+行点击事件报错 -->
$('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({beforePageText:'',afterPageText:'/{pages}',displayMsg:'{from}-{to}共{total}条',showPageList:true,showRefresh:true}); $('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({beforePageText:'',afterPageText:'/{pages}',displayMsg:'{from}-{to}共{total}条',showPageList:true,showRefresh:true});
$('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({onBeforeRefresh:function(pageNumber, pageSize){ $(this).pagination('loading');$(this).pagination('loaded'); }}); $('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({onBeforeRefresh:function(pageNumber, pageSize){ $(this).pagination('loading');$(this).pagination('loaded'); }});
//将没有权限的按钮屏蔽掉 //将没有权限的按钮屏蔽掉

@ -268,11 +268,20 @@ function createDataGrid${config_id}(){
} }
] ]
], ],
<#--update-begin--Author:taoyan Date:20181106 for树形列表分页bug+行点击事件报错 -->
onLoadSuccess:function(data){ onLoadSuccess:function(data){
$("#${config_id}List").<#if config_istree=="Y">treegrid<#else>datagrid</#if>("clearSelections"); $("#${config_id}List").<#if config_istree=="Y">treegrid<#else>datagrid</#if>("clearSelections");
console.log($("#${config_id}List").treegrid('options').queryParams['id']);
delete $("#${config_id}List").treegrid('options').queryParams['id'];
}, },
onClickRow:function(rowIndex,rowData) onClickRow:function(rowIndex,rowData){
{rowid=rowData.id;gridname='${config_id}List';} <#if config_istree=="Y">
{rowid=rowIndex.id;gridname='${config_id}List';}
<#else>
{rowid=rowData.id;gridname='${config_id}List';}
</#if>
}
<#--update-end--Author:taoyan Date:20181106 for树形列表分页bug+行点击事件报错 -->
}); });
$('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({beforePageText:'',afterPageText:'/{pages}',displayMsg:'{from}-{to}共{total}条',showPageList:true,showRefresh:true}); $('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({beforePageText:'',afterPageText:'/{pages}',displayMsg:'{from}-{to}共{total}条',showPageList:true,showRefresh:true});
$('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({onBeforeRefresh:function(pageNumber, pageSize){ $(this).pagination('loading');$(this).pagination('loaded'); }}); $('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({onBeforeRefresh:function(pageNumber, pageSize){ $(this).pagination('loading');$(this).pagination('loaded'); }});

@ -41,7 +41,9 @@
<#-- update-begin-Author:LiShaoQing date:20180829 for:TASK #3127 删除时没有添加 validtype_str校验--> <#-- update-begin-Author:LiShaoQing date:20180829 for:TASK #3127 删除时没有添加 validtype_str校验-->
function resetTrNum(tableId) { function resetTrNum(tableId) {
$tbody = $("#"+tableId+""); $tbody = $("#"+tableId+"");
<#-- update-begin-Author:LiShaoQing date:20181023 for:Online EASY默认表单样式不显示序号问题 -->
$tbody.find('tr').each(function(i){ $tbody.find('tr').each(function(i){
<#-- update-end-Author:LiShaoQing date:20181023 for:Online EASY默认表单样式不显示序号问题 -->
$(':input, select,button,a', this).each(function(){ $(':input, select,button,a', this).each(function(){
var $this = $(this),validtype_str = $this.attr('validType'), name = $this.attr('name'),id=$this.attr('id'),onclick_str=$this.attr('onclick'), val = $this.val(); var $this = $(this),validtype_str = $this.attr('validType'), name = $this.attr('name'),id=$this.attr('id'),onclick_str=$this.attr('onclick'), val = $this.val();
if(name!=null){ if(name!=null){
@ -93,7 +95,9 @@
$this.attr("class",class_str.replace(/i-checks-tpl/,"i-checks")); $this.attr("class",class_str.replace(/i-checks-tpl/,"i-checks"));
} }
}); });
<#-- update-begin-Author:LiShaoQing date:20181023 for:Online EASY默认表单样式不显示序号问题 -->
$(this).find('div[name=\'xh\']').html(i+1); $(this).find('div[name=\'xh\']').html(i+1);
<#-- update-end-Author:LiShaoQing date:20181023 for:Online EASY默认表单样式不显示序号问题 -->
}); });
} }
<#-- update-end-Author:LiShaoQing date:20180829 for:TASK #3127 删除时没有添加 validtype_str校验--> <#-- update-end-Author:LiShaoQing date:20180829 for:TASK #3127 删除时没有添加 validtype_str校验-->

@ -271,6 +271,9 @@ function createDataGrid${config_id}(){
], ],
onLoadSuccess:function(data){ onLoadSuccess:function(data){
$("#${config_id}List").<#if config_istree=="Y">treegrid<#else>datagrid</#if>("clearSelections"); $("#${config_id}List").<#if config_istree=="Y">treegrid<#else>datagrid</#if>("clearSelections");
<#--update-begin--Author:taoyan Date:20181106 for树形列表分页bug -->
delete $("#${config_id}List").treegrid('options').queryParams['id'];
<#--update-end--Author:taoyan Date:20181106 for树形列表分页bug -->
}, },
onClickRow:function(rowIndex,rowData) onClickRow:function(rowIndex,rowData)
{ {

@ -182,12 +182,19 @@ function createDataGrid${config_id}(){
} }
] ]
], ],
<#--update-begin--Author:taoyan Date:20181106 for树形列表分页bug+行点击事件报错 -->
onLoadSuccess:function(data){ onLoadSuccess:function(data){
$("#${config_id}List").<#if config_istree=="Y">treegrid<#else>datagrid</#if>("clearSelections"); $("#${config_id}List").<#if config_istree=="Y">treegrid<#else>datagrid</#if>("clearSelections");
delete $("#${config_id}List").treegrid('options').queryParams['id'];
}, },
onClickRow:function(rowIndex,rowData) onClickRow:function(rowIndex,rowData)
{rowid=rowData.id;gridname='${config_id}List';} <#if config_istree=="Y">
{rowid=rowIndex.id;gridname='${config_id}List';}
<#else>
{rowid=rowData.id;gridname='${config_id}List';}
</#if>
}); });
<#--update-end--Author:taoyan Date:20181106 for树形列表分页bug+行点击事件报错 -->
$('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({beforePageText:'',afterPageText:'/{pages}',displayMsg:'{from}-{to}共{total}条',showPageList:true,showRefresh:true}); $('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({beforePageText:'',afterPageText:'/{pages}',displayMsg:'{from}-{to}共{total}条',showPageList:true,showRefresh:true});
$('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({onBeforeRefresh:function(pageNumber, pageSize){ $(this).pagination('loading');$(this).pagination('loaded'); }}); $('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({onBeforeRefresh:function(pageNumber, pageSize){ $(this).pagination('loading');$(this).pagination('loaded'); }});
//将没有权限的按钮屏蔽掉 //将没有权限的按钮屏蔽掉

@ -227,12 +227,19 @@ function createDataGrid${config_id}(){
} }
] ]
], ],
<#--update-begin--Author:taoyan Date:20181106 for树形列表分页bug+行点击事件报错 -->
onLoadSuccess:function(data){ onLoadSuccess:function(data){
$("#${config_id}List").<#if config_istree=="Y">treegrid<#else>datagrid</#if>("clearSelections"); $("#${config_id}List").<#if config_istree=="Y">treegrid<#else>datagrid</#if>("clearSelections");
delete $("#${config_id}List").treegrid('options').queryParams['id'];
}, },
onClickRow:function(rowIndex,rowData) onClickRow:function(rowIndex,rowData)
{rowid=rowData.id;gridname='${config_id}List';} <#if config_istree=="Y">
{rowid=rowIndex.id;gridname='${config_id}List';}
<#else>
{rowid=rowData.id;gridname='${config_id}List';}
</#if>
}); });
<#--update-end--Author:taoyan Date:20181106 for树形列表分页bug+行点击事件报错 -->
$('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({beforePageText:'',afterPageText:'/{pages}',displayMsg:'{from}-{to}共{total}条',showPageList:true,showRefresh:true}); $('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({beforePageText:'',afterPageText:'/{pages}',displayMsg:'{from}-{to}共{total}条',showPageList:true,showRefresh:true});
$('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({onBeforeRefresh:function(pageNumber, pageSize){ $(this).pagination('loading');$(this).pagination('loaded'); }}); $('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({onBeforeRefresh:function(pageNumber, pageSize){ $(this).pagination('loading');$(this).pagination('loaded'); }});
//将没有权限的按钮屏蔽掉 //将没有权限的按钮屏蔽掉

@ -72,7 +72,51 @@
clear:none !important; clear:none !important;
float:left; float:left;
} }
</style> /*update-begin-author:toayan date:20181112 for:TASK #3153 JEECG 问题确认处理 -->4.Online 单表移动模板,文件上 传格式太丑*/
.uploadify-button{
width: 100% !important;
background-color: #3598dc !important;
background-image: -webkit-gradient(linear, 0% 100%, 0% 0%, from(#3598dc), to(#5cade2));
border: 1px solid #3598dc;
color: #fff !important;
font-size: 14px;
font-family: Hiragino Sans GB;
height: 28px !important;
line-height: 28px !important;
border-radius: 4px;
}
.list-li{
-webkit-transform: translateX(0px);
border:1px solid #ddd;
border-right:none;
}
.os-file-type {
background-size:36px 36px;
display: inline-block;
width: 36px;
height: 36px;
vertical-align:middle;
}
.os-file-name{
display: inline-block;
height: 36px;
width: 100px;
vertical-align:middle;
font-size: 12px;
}
.os-file-del{
position: absolute;
top: -2px; right: -80px;
text-align: center;
font-family: Hiragino Sans GB;
font-size:14px;
background: #ffcb20; color: #fff;
width: 80px;
height: 40px;
line-height: 40px;
}
/*update-end-author:toayan date:20181112 for:TASK #3153 JEECG 问题确认处理 -->4.Online 单表移动模板,文件上 传格式太丑*/
</style>
</head> </head>
<body class="wallpaper wallpaperm"> <body class="wallpaper wallpaperm">
<div id="container" class="container" mobile="1"> <div id="container" class="container" mobile="1">

@ -206,12 +206,19 @@ function createDataGrid${config_id}(){
} }
] ]
], ],
<#--update-begin--Author:taoyan Date:20181106 for树形列表分页bug+行点击事件报错 -->
onLoadSuccess:function(data){ onLoadSuccess:function(data){
$("#${config_id}List").<#if config_istree=="Y">treegrid<#else>datagrid</#if>("clearSelections"); $("#${config_id}List").<#if config_istree=="Y">treegrid<#else>datagrid</#if>("clearSelections");
delete $("#${config_id}List").treegrid('options').queryParams['id'];
}, },
onClickRow:function(rowIndex,rowData) onClickRow:function(rowIndex,rowData)
{rowid=rowData.id;gridname='${config_id}List';} <#if config_istree=="Y">
{rowid=rowIndex.id;gridname='${config_id}List';}
<#else>
{rowid=rowData.id;gridname='${config_id}List';}
</#if>
}); });
<#--update-end--Author:taoyan Date:20181106 for树形列表分页bug+行点击事件报错 -->
$('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({beforePageText:'',afterPageText:'/{pages}',displayMsg:'{from}-{to}共{total}条',showPageList:true,showRefresh:true}); $('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({beforePageText:'',afterPageText:'/{pages}',displayMsg:'{from}-{to}共{total}条',showPageList:true,showRefresh:true});
$('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({onBeforeRefresh:function(pageNumber, pageSize){ $(this).pagination('loading');$(this).pagination('loaded'); }}); $('#${config_id}List').<#if config_istree=="Y">treegrid<#else>datagrid</#if>('getPager').pagination({onBeforeRefresh:function(pageNumber, pageSize){ $(this).pagination('loading');$(this).pagination('loaded'); }});
//将没有权限的按钮屏蔽掉 //将没有权限的按钮屏蔽掉

@ -98,7 +98,9 @@ function createDataGrid${config_id}(){
idField: 'id', <#if config_istree=="Y">treeField:"${tree_fieldname}",</#if> idField: 'id', <#if config_istree=="Y">treeField:"${tree_fieldname}",</#if>
title: '<@mutiLang langKey="${config_name}"/>', title: '<@mutiLang langKey="${config_name}"/>',
fit:true, fit:true,
fitColumns:true, <#--update-begin--Author:taoyan date:20181105 for:TASK #3143 【论坛问题】[UI标签] 折叠标签之未铺满-->
//fitColumns:true,
<#--update-end--Author:taoyan date:20181105 for:TASK #3143 【论坛问题】[UI标签] 折叠标签之未铺满-->
striped:true, striped:true,
autoRowHeight: true, autoRowHeight: true,
pageSize: 10, pageSize: 10,

@ -100,8 +100,8 @@ $("#${po.field_name}thelist").on("click",".pic_close",function(eve){
var itemObj = $(eve.target).closest(".uploadify-queue-item"); var itemObj = $(eve.target).closest(".uploadify-queue-item");
var id = itemObj.attr("id"); var id = itemObj.attr("id");
$.dialog.setting.zIndex = getzIndex(); $.dialog.setting.zIndex = getzIndex();
$.dialog.confirm("确认删除该条记录?", function(){ <#-- update-begin-author:taoyan date:20181112 for:TASK #3153 JEECG 问题确认处理 ->3.Online 单表移动模板,删除图 片不需要确认 -->
$.ajax({ $.ajax({
async : false, async : false,
cache : false, cache : false,
url:"cgUploadController.do?delAttachment", url:"cgUploadController.do?delAttachment",
@ -127,7 +127,7 @@ $("#${po.field_name}thelist").on("click",".pic_close",function(eve){
} }
} }
}); });
}, function(){}); <#-- update-end-author:taoyan date:20181112 for:TASK #3153 JEECG 问题确认处理 ->3.Online 单表移动模板,删除图 片不需要确认 -->
}); });
}); });
</script> </script>
@ -137,35 +137,6 @@ $("#${po.field_name}thelist").on("click",".pic_close",function(eve){
<#-- 文件上传 --> <#-- 文件上传 -->
<#macro uploadFile po height = "18" width = "80"> <#macro uploadFile po height = "18" width = "80">
<div class="iuploader"> <div class="iuploader">
<div id = "${po.field_name}thelist" class="uploader-list">
<table class="temptable">
<tbody>
<#list filesList as fileB>
<#if fileB['field']?lower_case == po.field_name>
<tr class="upload_generate history uploadify-queue-item" id="${fileB['fileKey']}">
<td title="${fileB['title']}">
<#if fileB['title']?length gt 20>
${fileB['title']?substring(0,15)}...
<#else>
${fileB['title']}
</#if>
</td>
<td>
<a title="删除" href="javascript:void(0)" class="jeecgDetail file_close" style="margin:0 8px;text-decoration: none;">删除</a>
</td>
<td>
<a title="预览" href="javascript:void(0);" onclick="openwindow('预览','${basePath}/commonController.do?openViewFile&fileid=${fileB['fileKey']}&subclassname=org.jeecgframework.web.cgform.entity.upload.CgUploadEntity','fList',700,500)" style="margin:0 8px;text-decoration: none;">预览</a>
</td>
<td>
<a title="下载" href="${basePath}/commonController.do?viewFile&fileid=${fileB['fileKey']}&subclassname=org.jeecgframework.web.cgform.entity.upload.CgUploadEntity" style="margin:0 8px;text-decoration: none;">下载</a>
</td>
<td style="display:none"><input type="hidden" name="${po.field_name}" value="${fileB['path']}"/></td>
</tr>
</#if>
</#list>
</tbody>
</table>
</div>
<#if !(po.operationCodesReadOnly ??)> <#if !(po.operationCodesReadOnly ??)>
<div class="plupload-btns"> <div class="plupload-btns">
<div id="${po.field_name}Upselector" class="uploadify-button " style="cursor:pointer;height:${height}px; line-height:${height}px; width:${width}px; position: relative; z-index: 1;"> <div id="${po.field_name}Upselector" class="uploadify-button " style="cursor:pointer;height:${height}px; line-height:${height}px; width:${width}px; position: relative; z-index: 1;">
@ -176,6 +147,38 @@ $("#${po.field_name}thelist").on("click",".pic_close",function(eve){
<input type="button" id = "${po.field_name}" style="display:none"/> <input type="button" id = "${po.field_name}" style="display:none"/>
</div> </div>
</#if> </#if>
<div id = "${po.field_name}thelist" class="uploader-list">
<table class="online-file-block" style="width: 100%;overflow: hidden;">
<tbody>
<#list filesList as fileB>
<#if fileB['field']?lower_case == po.field_name>
<tr class="os-single-file-line history uploadify-queue-item" id="${fileB['fileKey']}">
<td class="list-li">
<div style="position: relative;">
<#assign osFileTypeImg = "default">
<#if fileB['extend']?default("")?length gt 1>
<#assign osFileTypeImg = "${fileB['extend']}">
</#if>
<span class="os-file-type" style="background-image: url(plug-in/plupload/filetype/${osFileTypeImg}.png);"></span>
<span class="os-file-name">
<#if fileB['title']?length gt 20>
${fileB['title']?substring(0,20)}...${fileB['extend']}
<#else>
${fileB['title']}.${fileB['extend']}
</#if>
</span>
<div class="os-file-del file_close">删除</div>
<input type="hidden" name="${po.field_name}" value="${fileB['path']}"/>
</div>
</td>
</tr>
</#if>
</#list>
</tbody>
</table>
</div>
<div class="form" id="filediv_${po.field_name}"> </div> <div class="form" id="filediv_${po.field_name}"> </div>
</div> </div>
<#if !(po.operationCodesReadOnly ??)> <#if !(po.operationCodesReadOnly ??)>
@ -187,7 +190,7 @@ var serverMsg = "";
var addtrFile = function(file) { var addtrFile = function(file) {
var fileName = file.name; var fileName = file.name;
if (fileName.length > 20) { if (fileName.length > 20) {
fileName = fileName.substring(0, 15) + '...'; fileName = fileName.substring(0, 20) + '...';
} }
var fileSize = Math.ceil(file.size/1024); var fileSize = Math.ceil(file.size/1024);
var html = '<div id="'+file.id+'" class="uploadify-queue-item">'; var html = '<div id="'+file.id+'" class="uploadify-queue-item">';
@ -204,20 +207,25 @@ var addtrFile = function(file) {
$("#imagediv_${po.field_name}").append(html); $("#imagediv_${po.field_name}").append(html);
</#if> </#if>
} }
var addSuccessFile = function(file) { var addSuccessFile = function(file) {
var path = file['url'],fileid = file['fileid'],title = file['name']; var path = file['url'],fileid = file['fileid'],title = file['name'],extend=file['extend'];
var html = '<tr class="uploadify-queue-item upload_generate" id="'+fileid+'"><td title="'+title+'">'; var html = '<tr class="os-single-file-line uploadify-queue-item" id="'+fileid+'"><td class="list-li">';
html+='<div style="position: relative;">';
html+='';
var osFileTypeImg = "default";
if(!!extend){
osFileTypeImg = extend;
}
html+='<span class="os-file-type" style="background-image: url(plug-in/plupload/filetype/'+osFileTypeImg+'.png);"></span>';
html+='<span class="os-file-name">';
if(title.length>20){ if(title.length>20){
html+=title.substring(0,15)+'...'; html+=title.substring(0,20)+'...'+extend;
}else{ }else{
html+=title; html+=title+"."+extend;
} }
html+='</td>'; html+='</span><div class="os-file-del file_close">删除</div>';
html+='<td><a title="删除" class="jeecgDetail file_close" href="javascript:void(0)" style="margin:0 8px;text-decoration: none;">删除</a></td>'; html+='<input type="hidden" name="${po.field_name}" value="'+path+'"/>';
//html+='<td><a title="预览" href="javascript:void(0);" onclick="openwindow(\'预览\',\'${basePath}/commonController.do?openViewFile&fileid='+fileid+'&subclassname=org.jeecgframework.web.cgform.entity.upload.CgUploadEntity\',\'fList\',700,500)" style="margin:0 8px;text-decoration: none;">预览</a></td>'; html+='</div></td></tr>';
//html+='<td><a title="下载" href="${basePath}/commonController.do?viewFile&fileid='+fileid+'&subclassname=org.jeecgframework.web.cgform.entity.upload.CgUploadEntity" style="margin:0 8px;text-decoration: none;">下载</a></td>';
html+='<td style="display:none"><input type="hidden" name="${po.field_name}" value="'+path+'"/></td></tr>';
$("#${po.field_name}thelist").children('table').append(html); $("#${po.field_name}thelist").children('table').append(html);
} }
var uploader = new plupload.Uploader({ var uploader = new plupload.Uploader({
@ -283,8 +291,8 @@ $("#${po.field_name}thelist").on("click",".file_close",function(eve){
var itemObj = $(eve.target).closest(".uploadify-queue-item"); var itemObj = $(eve.target).closest(".uploadify-queue-item");
var id = itemObj.attr("id"); var id = itemObj.attr("id");
$.dialog.setting.zIndex = getzIndex(); $.dialog.setting.zIndex = getzIndex();
$.dialog.confirm("确认删除该条记录?", function(){ <#-- update-begin-author:taoyan date:20181112 for:TASK #3153 JEECG 问题确认处理 ->3.Online 单表移动模板,删除图 片不需要确认 -->
$.ajax({ $.ajax({
async : false, async : false,
cache : false, cache : false,
url:"cgUploadController.do?delAttachment", url:"cgUploadController.do?delAttachment",
@ -310,9 +318,89 @@ $("#${po.field_name}thelist").on("click",".file_close",function(eve){
} }
} }
}); });
}, function(){}); <#-- update-end-author:taoyan date:20181112 for:TASK #3153 JEECG 问题确认处理 ->3.Online 单表移动模板,删除图 片不需要确认 -->
}); });
}); });
</script> </script>
<#-- update-begin-author:taoyan date:20181112 for:TASK #3153 JEECG 问题确认处理 ->4.Online 单表移动模板,文件上 传格式太丑 -->
<script>
//滑动删除JS
window.addEventListener('load',function(){
var initX;
var moveX;
var X = 0;
var objX = 0;
document.getElementById("${po.field_name}thelist").addEventListener('touchstart',function(event){
if(!!event.target.className && event.target.className.indexOf("os-file-del")>=0){
$(event.target).click();
return;
}
event.preventDefault();
var obj = event.target.parentNode;
if(obj.className == "list-li"){console.log(event.targetTouches[0].pageX);
initX = event.targetTouches[0].pageX;
objX =(obj.style.WebkitTransform.replace(/translateX\(/g,"").replace(/px\)/g,""))*1;
}
if( objX == 0){
console.log('objX == 0)');
document.getElementById("${po.field_name}thelist").addEventListener('touchmove',function(event) {
event.preventDefault();
var obj = event.target.parentNode;
if (obj.className == "list-li") {
moveX = event.targetTouches[0].pageX;
X = moveX - initX;
if (X > 0) {
obj.style.WebkitTransform = "translateX(" + 0 + "px)";
}
else if (X < 0) {
var l = Math.abs(X);
obj.style.WebkitTransform = "translateX(" + -l + "px)";
if(l>80){
l=80;
obj.style.WebkitTransform = "translateX(" + -l + "px)";
}
}
}
});
}
else if(objX<0){console.log('objX 《 0)');
document.getElementById("${po.field_name}thelist").addEventListener('touchmove',function(event) {
event.preventDefault();
var obj = event.target.parentNode;
if (obj.className == "list-li") {
moveX = event.targetTouches[0].pageX;
X = moveX - initX;
if (X > 0) {
var r = -80 + Math.abs(X);
obj.style.WebkitTransform = "translateX(" + r + "px)";
if(r>0){
r=0;
obj.style.WebkitTransform = "translateX(" + r + "px)";
}
}
else { //向左滑动
obj.style.WebkitTransform = "translateX(" + -80 + "px)";
}
}
});
}
})
document.getElementById("${po.field_name}thelist").addEventListener('touchend',function(event){
event.preventDefault();
var obj = event.target.parentNode;
if(obj.className == "list-li"){
objX =(obj.style.WebkitTransform.replace(/translateX\(/g,"").replace(/px\)/g,""))*1;
if(objX>-40){
obj.style.WebkitTransform = "translateX(" + 0 + "px)";
}else{
obj.style.WebkitTransform = "translateX(" + -80 + "px)";
}
}
})
})
</script>
<#-- update-end-author:taoyan date:20181112 for:TASK #3153 JEECG 问题确认处理 ->4.Online 单表移动模板,文件上 传格式太丑 -->
</#if> </#if>
</#macro> </#macro>

@ -6,7 +6,7 @@
<display-name>Jeecg 微云快速开发平台</display-name> <display-name>Jeecg 微云快速开发平台</display-name>
<context-param> <context-param>
<param-name>webAppRootKey</param-name> <param-name>webAppRootKey</param-name>
<param-value>jeecg-3.8</param-value> <param-value>jeecg-4.0</param-value>
</context-param> </context-param>
<context-param> <context-param>
<param-name>log4jConfigLocation</param-name> <param-name>log4jConfigLocation</param-name>

@ -903,7 +903,9 @@ a:hover {
} }
a.l-btn span.l-btn-left .icon-ok{ a.l-btn span.l-btn-left .icon-ok{
/* update-begin-Author:LiShaoQing Date:20181022 for: 黑名单管理下的高级查询构造器图表样式问题-----*/
/*background-image:none;*/ /*background-image:none;*/
/* update-end-Author:LiShaoQing Date:20181022 for: 黑名单管理下的高级查询构造器图表样式问题-----*/
} }
.button:hover,a.l-btn:hover span.l-btn-left { .button:hover,a.l-btn:hover span.l-btn-left {

@ -7398,7 +7398,9 @@ body.boxed-layout.skin-3 #wrapper {
} }
.skin-3 .nav-header { .skin-3 .nav-header {
/* update-begin-Author:LiShaoQing date:20181023 for: H+其他皮肤切换左上角LOGO变大*/
padding:0; padding:0;
/* update-end-Author:LiShaoQing date:20181023 for: H+其他皮肤切换左上角LOGO变大*/
background: #ecba52; background: #ecba52;
background: url('patterns/header-profile-skin-3.png'); background: url('patterns/header-profile-skin-3.png');
} }

@ -222,7 +222,7 @@ a.cancel-row-btn:hover{color:#c8615d;} */
} }
/**上传行编辑小图标-end-*/ /**上传行编辑小图标-end-*/
/* 船舶风格页面行编辑默认上传按钮样式 */ /* erp上下布局风格页面行编辑默认上传按钮样式 */
.rowedit-file-control{ .rowedit-file-control{
color: #fff; color: #fff;
background-color: #18a689; background-color: #18a689;
@ -265,4 +265,19 @@ a.cancel-row-btn:hover{color:#c8615d;} */
-webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,.125); -webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,.125);
box-shadow: inset 0 3px 5px rgba(0,0,0,.125); box-shadow: inset 0 3px 5px rgba(0,0,0,.125);
} }
/* 船舶风格页面行编辑默认上传按钮样式 */ /* erp上下布局风格页面行编辑默认上传按钮样式 */
/* update-begin-author:taoyan date:20181112 for:TASK #3153 JEECG 问题确认处理 ->7.时间输入框的高度,跟普通文 本框的不一致 */
table td>.datebox{
height:auto !important;
padding: 0 !important;
}
table td>.datebox>.combo-text{
height:26px !important;
line-height:26px !important;
padding:2px
}
table td>.datebox .combo-arrow{
height:26px !important;
}
/* update-end-author:taoyan date:20181112 for:TASK #3153 JEECG 问题确认处理 ->7.时间输入框的高度,跟普通文 本框的不一致 */

@ -396,7 +396,9 @@ a span.accordion-collapse.accordion-expand:hover {
} }
/*---------------高级查询器---------------*/ /*---------------高级查询器---------------*/
#accDiv{border:0} #accDiv{border:0}
#accDiv>.panel{border:1px solid #ddd;border-bottom:0} /*update-begin-author:taoyan date:20181112 for:TASK #3153 JEECG 问题确认处理 ->6.ERP风格生成的代码 感觉边线有点粗 */
#accDiv>.panel{/*border:1px solid #ddd;*/border-bottom:0}
/*update-end-author:taoyan date:20181112 for:TASK #3153 JEECG 问题确认处理 ->6.ERP风格生成的代码 感觉边线有点粗 */
/*-----------拖动css-----------*/ /*-----------拖动css-----------*/
.resize-y-border{ .resize-y-border{

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

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

Loading…
Cancel
Save